diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index 3664577..0000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,49 +0,0 @@ -# This file is a template, and might need editing before it works on your project. -# Official docker image. -image: docker:latest -services: - - docker:dind -variables: - CHANNEL: "skillbox" - SERVER_URL: "lms.test.spicycms.com" - DOMAIN: "$CI_BUILD_REF_SLUG.$SERVER_URL" - SLACK_MSG: "Check new website " - SLACK_URL: "https://hooks.slack.com/services/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" - SLACK_URL_BRAMA: "https://hooks.slack.com/services/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" -types: - - build - - test -build_app: - type: build - script: - - docker login -u "gitlab-ci-token" -p "$CI_BUILD_TOKEN" $CI_REGISTRY - - docker build --no-cache --rm --pull -t "$CI_REGISTRY_IMAGE:$CI_BUILD_REF_SLUG" --build-arg SSH_PRIVATE_KEY="$SSH_PRIVATE_KEY" --build-arg SPICYCODE_LOGIN="$SPICYCODE_LOGIN" --build-arg SPICYCODE_PASS="$SPICYCODE_PASS" . - #- docker run --rm --add-host dockerhost:`/sbin/ip route|awk '/default/ { print $3}'` "$CI_REGISTRY_IMAGE:$CI_BUILD_REF_SLUG" python manage.py test - - docker push "$CI_REGISTRY_IMAGE:$CI_BUILD_REF_SLUG" -test_app: - type: test - script: - #- docker login -u "gitlab-ci-token" -p "$CI_BUILD_TOKEN" $CI_REGISTRY - #- docker pull "$CI_REGISTRY_IMAGE:$CI_BUILD_REF_SLUG" - - if [[ $(docker ps -a) == *$DOMAIN* ]] ; then docker stop $DOMAIN ; fi - - if [[ $(docker ps -a) == *$DOMAIN* ]] ; then docker rm $DOMAIN; fi - - "SLACK_PAYLOAD='payload={\"channel\":\"#'${CHANNEL}'\",\"username\":\"'${SERVER_URL}'\",\"text\":\"'${SLACK_MSG}'\",\"icon_emoji\":\":ghost:\"}'" - - docker run -d - --expose=80 - --env VIRTUAL_HOST=$DOMAIN - --name $DOMAIN - --env HTTPS_METHOD=noredirect - --env DB_NAME=$DB_NAME - --env PG_PORT_5432_TCP_ADDR=$DB_HOST - --env PG_PORT_5432_TCP_PORT=$DB_PORT - --env PG_ENV_POSTGRES_USER=$DB_TEST_USER - --env PG_ENV_POSTGRES_PASSWORD=$DB_TEST_PASS - "$CI_REGISTRY_IMAGE:$CI_BUILD_REF_SLUG" - - curl -I $DOMAIN 2>/dev/null | head -n 1 | cut -d$' ' -f2 - - SLACK_MSG="REVIEW app is started on https://$DOMAIN/" - - SLACK_PAYLOAD="payload={\"text\":\"$SLACK_MSG\",\"username\":\"gitlab-ci\"}" - - curl -X POST -d "$SLACK_PAYLOAD" $SLACK_URL - - curl -X POST -d "$SLACK_PAYLOAD" $SLACK_URL_BRAMA - dependencies: - - build_app - diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index b23bfe2..0000000 --- a/Dockerfile +++ /dev/null @@ -1,41 +0,0 @@ -FROM python:3.4.5 -ENV PYTHONUNBUFFERED 1 - -RUN mkdir /code -WORKDIR /code - -RUN apt-get update && apt-get install -y supervisor \ - cron - -#RUN pip install mercurial -#RUN pip install git -RUN pip install uwsgi -#RUN apt-get update && apt-get install openssh-client - -ARG SSH_PRIVATE_KEY -ARG SPICYCODE_LOGIN -ARG SPICYCODE_PASS -RUN echo '[auth]\nspicy.prefix = code.spicycms.com\nspicy.username = '$SPICYCODE_LOGIN'\nspicy.password = '$SPICYCODE_PASS'\nspicy.schemes = https' > ~/.hgrc - -RUN mkdir -p ~/.ssh -RUN mkdir -p /code/static/img/avs -#RUN eval `ssh-agent -s` > /dev/null | echo "$SSH_KEY" | ssh-add - -RUN echo "$SSH_PRIVATE_KEY" >> /root/.ssh/id_rsa -RUN echo "Host *\n\tStrictHostKeyChecking no\nIdentityFile /root/.ssh/id_rsa" >> /root/.ssh/config -RUN chmod 600 -R /root/.ssh - -#ADD ./requirements.txt /code/requirements.txt -#RUN pip install -r requirements.txt - -RUN rm /root/.ssh/id_rsa - -ADD . /code -RUN cp id_dsa /root/.ssh/ -RUN chmod 600 -R /root/.ssh - -run ln -s /code/supervisor-app.conf /etc/supervisor/conf.d/ -RUN pip install -r requirements.txt -#RUN python manage.py collectstatic --noinput - -#CMD ["/code/docker-entrypoint.sh"] -CMD ["supervisord", "-n"] diff --git a/_tmp b/_tmp deleted file mode 100644 index 53f011b..0000000 --- a/_tmp +++ /dev/null @@ -1,33 +0,0 @@ -artem.kudra@func.ru -aaa_rostov@rambler.ru -delo@jet-mix.ru -artemaminov@gmail.com -gresmik@yandex.ru -dimpolozkov@gmail.com -visualart@mail.ru -vr8853@gmail.com -makini@ya.ru -katyami90@mail.ru -rolandvermin@mail.ru -9990405@gmail.com -andrey732@gmail.com -goha@kiosov.com -dmitry@shaludin.ru -alyans911@mail.ru -zkorall@gmail.com -me@flexure.ru -natazkondra@gmail.com -dvb@dextra.ru -sherdog@list.ru -romagrog@gmail.com -a.cherniak@dexme.by -cyberspacedee@gmail.com -almazzar@gmail.com -pavlova-yb@bisys.ru -soloveev@yandex.ru -asta219@gmail.com -allmam@ya.ru -civanov@multicharts.com -hellonasnas@gmail.com -webidea19@gmail.com -a@tickets.ai diff --git a/_utils/1.txt b/_utils/1.txt deleted file mode 100644 index 9b9f02c..0000000 --- a/_utils/1.txt +++ /dev/null @@ -1,71 +0,0 @@ -einzheev@itl.com.kz -dmitry.sedov@inbox.ru -ivanpokalyuk@gmail.com - baho9208@mail.ru -feyorz@gmail.com -waximov@gmail.com -alvo_05@mail.ru -redkuk@gmail.com -petrichv@gmail.com -tagfelix500@gmail.com - ikey0172@mail.ru -gb.gayane@gmail.com -eco.pun@gmail.com -sanzharsurshanov@gmail.com -dennis.loboda@gmail.com -webar4i@gmail.com -zvetaan@gmail.com -svelavs@gmail.com -art@magicdesign.ru -mbf23tb@gmail.com -andrievskiydmitriy@gmail.com -pulya7@gmail.com -mikhail.a.gusev@gmail.com -elena@citrus-soft.ru -kropev@rarus.ru -nikonorov@labizum.ru -gulin@labizum.ru -vladfedorovich@gmail.com -Gfgaliya@gmail.com -romqa.guard@gmail.com - srfedotov@gmail.com -vinjuli4ka2008@rambler.ru -kuzzzal@gmail.com -zvetaan@gmail.com -lepon@bk.ru -y.robocopov@gmail.com -enchervinskaya@gmail.com -volokos@gmail.com -mtsalka@scnsoft.com -dubnyak404@gmail.com -o.tibirkova@yandex.ru -a.nikiforov@uplab.ru -dmytriy.suslov@gmail.com -s.shtukaturka@gmail.com -alex.dntv@gmail.com -m.chelyadenkov@gmail.com -timur.shulgin@infocraft.ru -sp.rusanov@gmail.com -zyabra@gmail.com -timakova@fistashki.org -aknoraz@deloitte.ru -sesyunin@realweb.ru -bravo.johnny@yandex.ru -didenko@braind.agency -whysecondjuly@gmail.com -yuzik.74@gmail.com -art@amado-id.ru -9330733@mail.ru -ek.design11@gmail.com -danila.zarechnev@gmail.com -kira.yakuhina@gmail.com -geiz@yandex.ru -tuning_a@mail.ru -suonarama@gmail.com -abrakadavr@gmail.com -irina_z_z@mail.ru irina.huchak@gmail.com -ha@brightstudio.ru -smorozov@qsoft.ru -a.reva@qsoft.ru -d.pogodin@itech-group.ru -lemma.ka@gmail.com \ No newline at end of file diff --git a/_utils/2.txt b/_utils/2.txt deleted file mode 100644 index a7a573c..0000000 --- a/_utils/2.txt +++ /dev/null @@ -1,117 +0,0 @@ -makspirogov@gmail.com -velesart@gmail.com -dmitrij.pastushenko@gmail.com -pavlov@complexsys.ru -ceo@pride-m.ru -spinngewebex@gmail.com -an_b@inbox.ru -ilyuha86@gmail.com -juniperland@gmail.com -egor@yugs.ru -kashlatch@gmail.com -niozuki@mail.ru -Gnatovych@gmail.com -sahem@mail.ru -zfalevich@gmail.com -lalaviva@yandex.ru -z.ilnurri@gmail.com -mmaslennikov@mail.ru -info@wbest.ru -arthur.subbota@gmail.com -goha@kiosov.com -Igorfedorenko@mail.ru -annazayidova@gmail.com -anton.reznichenko@gmail.com -me@flexure.ru -es@vipro.ru -km@colary.ru -kiselev_s_l@mail.ru -a.reznichenko@clientlab.ru -soldakov.p@yandex.ru -ap@ds-p.ru -702752@gmail.com -shpakova@sebbia.com -skugarov@sebbia.com -taranov@sebbia.com -rusakovevgen@gmail.com -frostoffman@gmail.com - a.khadeko@gmail.com -trogatyuk@gmail.com -hello@aokunev.com -dengenich@gmail.com -Alexpozdnyakof@gmail.com -korobajr@ya.ru -pavlov@complexsys.ru -elizaveta.bandalet@gmail.com -deniskondrashov@yahoo.com -prokosha10@gmail.com - i.flinn@yandex.ru -s.darbaidze@inostudio.com -zhurakoff@gmail.com -krylya@inbox.ru -146133@gmail.com -i.flinn@yandex.ru -sasha.melbourne@gmail.com -tiano_taurus747@mail.ru -hip-hop-org@yandex.ru -j.tolkova@yandex.ru -jaglin@itsoft.ru -den.volchkevich@gmail.com -yakimov.dmitriy@gmail.com -994677@mail.ru -rumbeshta@userstory.ru -ylkin_list@mail.ru -salofoot@fermastudio.ru -smiley1776@gmail.com -info@darneo.ru -egor@studiofact.ru -alevtina.i.danilova@gmail.com -puponina.irina@gmail.com -yevseev@mail.ru -ekde@wide-web.spb.ru -corpas@gmail.com -nitrohlorid@gmail.com -kayl24brof@gmail.com -skovalska@mail.ru -Dmitry.eremin7@gmail.com -Nikolebedev@mail.ru -ishulga86@gmail.com -bobafas@gmail.com -kalina531345@gmail.com -dsgn.shots@gmail.com -dsukhanova@gmail.com -kizilov.s@gmail.com -zlk.marjana@gmail.com -nava011235@gmail.com -i.shymanskyi@gmail.com -anastasy.petrenko87@gmail.com -dinozavrix@gmail.com -yana.berezhnaya999@gmail.com -person.ira@gmail.com -bershonok@gmail.com -vivi_bvo@mail.ru -lens2002@gmail.com -ohmeinkot@gmail.com -d22s@ya.ru -masha49@yandex.ru -biz.trp@gmail.com -leo55506@gmail.com -ksenia.vitkova@gmail.com -e.poberezhnik@artw.ru -alexzarkov@gmail.com -ekde@wide-web.spb.ru -vemelin@gmail.com -gausf2@gmail.com -vd@wearewowagency.com -va@wearewowagency.com -domrachv@gmail.com -ad@wearewowagency.com -jalalovna@yandex.ru -mohov-g@yandex.ru -st.wasp@yandex.ru -Irina.lisofa@gmail.com -Kornblumchen@yandex.ru -albytime@gmail.com -as.plyaskin@gmail.com -trunovaon@gmail.com -yuri.a.k.design@gmail.com \ No newline at end of file diff --git a/_utils/3.txt b/_utils/3.txt deleted file mode 100644 index 82df0d1..0000000 --- a/_utils/3.txt +++ /dev/null @@ -1,108 +0,0 @@ -dina@vega.nsk.ru -andrii.dev@gmail.com -vasukhina_av@mail.ru -millie.mk5@gmail.com -goto.darya@gmail.com -vova@vovavova.ru -Loki2d@gmail.com -ilya.tymofeev@gmail.com -alpha5@yandex.ru -Sepeda.rafael@gmail.com -zionll@yandex.ru -strife88@mail.ru -ele-bulavinceva@yandex.ru -jack@creo.od.ua -vitaly.suhorukov@gmail.com -ogalin@aevrika.ru -d.lexand@gmail.com -info@aleskeroff.ru -captainanch@ya.ru -denisgorbunovmsc@gmail.com -goshamanasyan@gmail.com -katerina.musinova@gmail.com -dmokichev@gmail.com -andr@andr.kz -tingmann@gmail.com -romazzz@me.com -execer@mail.ru -egysakova@gmail.com -alex.sibilev@tmd.tv -portnova.ok@yandex.ru -vtoryanik@livemaster.ru -civanov@multicharts.com -alinazoryna@gmail.com -wellkin@gmail.com -noc-engineer@outlook.com -denis.kryukov@cyberiada.com -tonyavec@gmail.com -artemzig@gmail.com -asvdesign@yandex.ru -1ngeneer@mail.ru -fynart@gmail.com -pnz_08@mail.ru -a@cdnvideo.ru -sokdis@gmail.com -blood4085@inbox.ru -goryayeva@gmail.com -vlkitov@gmail.com -aveelik@gmail.com -lida.pihora@gmail.com -yanchus@mail.ru -olgarafikova00@mail.ru -lena@mura-show.com -wm5soft@gmail.com -torus.andrey@gmail.com -romameteva@azoft.com -dim@gifts.ru -9nkags@gmail.com -berezinaiv@gmail.com -qmach@yandex.ru -iandrew80@gmail.com -irynagillis@gmail.com -evgenia.deg@gmail.com -tarshis.d@gmail.com -e.taychenachev@gmail.com -art.filkov@gmail.com -connect@me.com -emelyanova.olena@gmail.com -pd4774@yandex.ru -wizzzart@gmail.com -tuhachevski@gmail.com -fazeful@gmail.com -molot877@mail.ru -vklimovs@mail.ru -slavinanm@gmail.com -diems@mail.ru -efomina@msk.vtb.ru -xnata.d@gmail.com -avmakarov@asuproject.ru -corvinun@gmail.com -navelis@mail.ru -glebkost.dev@gmail.com -nicknatochiev@me.com -romagrog@gmail.com -d.letko@articul.ru -batovd@gmail.com -nikolay.stanislavchuk@gmail.com -iamkonev@gmail.com -zaroman1989@gmail.com -cat.kubasova@yandex.ru -same.tea@gmail.com -irina.medyanceva@gmail.com -kattia2592@gmail.com -olya.zp@ya.ru -olgasnbrd@gmail.com -Dhopkins@ya.ru -yulenka26@gmail.com -anton.tmur@gmail.com -egodyston@gmail.com -bel.art@mail.ru -evgeniy@le-de.ru -yakimova.design@gmail.com -olga@le-de.ru -ereshko.igor@gmail.com -tn@bitek.ru -gafurovt@gmail.com -sofiakelemzina@gmail.com -dv@ilab.kz -bez.b.unix@gmail.com diff --git a/_utils/4.txt b/_utils/4.txt deleted file mode 100644 index a7ab9e1..0000000 --- a/_utils/4.txt +++ /dev/null @@ -1,142 +0,0 @@ -kononenko.e.p@gmail.com -aplusp@yandex.ru -ugarova@magora-systems.ru -skoryk.yulia@gmail.com -skorodymov@mail.ru -xnia.nik@gmail.com -yuliyahil@gmail.com -alex@space-o.ru -pae1@europlan.ru -stasya1004@mail.ru -design@spaceapp.ru -alexey.g.demchuk@gmail.com -ovodesign82@gmail.com -nushamenshikova@gmail.com -am@bonoagency.ru -il@bvdp.ru -ss@bvdp.ru -voron86618@gmail.com -makarichev.aa@gmail.com -kombikovdamir@gmail.com -khakifeva@croc.ru -AParshikov@croc.ru -alevova@gmail.com -info@d-element.ru -lesiawuss@gmail.com -Vorobjoff@yandex.ru -iskan153@gmail.com -era.gromov@gmail.com -ya@rl.ru -ysmirnovy@gmail.com -gavrylov88@gmail.com -alexandrshum@gmail.com -raceoffer@ya.ru -yuri.froloff@gmail.com -siv11@mail.ru -vpetrova21@yandex.ru -13malix@gmail.com -execer@mail.ru -itsarenko@gmail.com -segavosegag@gmail.com -kolos.natasha@gmail.com -limosiaya@gmail.com -andrayvelitchko@gmail.com -lina.savenkova@gmail.com -stanislav.vir@gmail.com -lentyaev.m@yandex.ru -artemich92@mail.ru -89169113911@mail.ru -marina.kavetskaya@gmail.com -mobester@gmail.com -fedotov@tyr24.ru -zyabra@gmail.com -bsv@legacystudio.ru -todanilin@gmail.com -pplahov@gmail.com -sokwork@gmail.com -kukva@me.com -aytigor@gmail.com -agarzaeva@yandex.ru -ilyaa77@mail.ru -krutolapova@mail.ru -alekseyskrobot@gmail.com -godortneo@gmail.com -volkova78@bk.ru -mako731@ya.ru -m.leybova@gmail.com -denisbryuhanov@gmail.com -alexsteptlt@mail.ru -abcdesign1@mail.ru -veronikavick87@gmail.com -jeneva7@gmail.com -as.kretinin@gmail.com -skp_15@mail.ru -k-pastukhova@yandex.ru -onimfa@mail.ru -churkin.ig@gmail.com -alla.sukhostavskaya@gmail.com -kirsti-b@yandex.ru -babyas@yandex.ru -kosan81@yandex.ru -beruchie@yandex.ru -petrusevich-vladimir@yandex.ru, -shama2004@bk.ru -alex@hcube.ru -sens11even@gmail.com -fessdew@gmail.com -skorodymov@mail.ru -uryukovv@gmail.com -ageewa@gmail.com -sokolov.maksim92@yandex.ru -shtrudle@yandex.ru -tooob52@gmail.com -sonicmails@yandex.ru -ezavodchikova@me.com -alinarlova@gmail.com -artteq@gmail.com -azazello@inbox.ru -rasulmhk@gmail.com -serglookas@yandex.ru -edgecrasher@gmail.com -a.isakov@ruslink.pro -elle.s.m@yandex.ru -tuna1706@yandex.ru -jekashohirev@gmail.com -nazarov.design@gmail.com -alpmats@gmail.com -sarosekml@yandex.ru -norkensdrommar@yandex.ru -andrei_gavrilenko@inbox.ru -galadriel2007@mail.ru -protchenkova_dar@mail.ru -dseliverstov@yandex.ru -priymakdmitry@gmail.com -empaher3@yandex.ru -m.chelyadenkov@gmail.com -natfaga@yahoo.de -yakorolevaleksei@yandex.ru -zi_zind@hotmail.com -lileklive@mail.ru -pavelvch@gmail.com -shashnia@gmail.com -nifakt1@gmail.com -andreyy2010@ya.ru -jugastrov@gmail.com -pravo@roskvartal.ru -pervushin@avis-dc.ru -ag@lab.ag -hitzen88@gmail.com -yuriy.chetverikov@gmail.com -atree2010@gmail.com -jamadharma13@gmail.com -spolaspola@gmail.com -ok.msaavedra@gmail.com -Kitt.diz@gmail.com -goto.darya@gmail.com -mbf23tb@gmail.com -letterca@gmail.com -mary@ihome.ru -info@legacystudio.ru -lens2002@gmail.com -susannafeisal6@gmail.com -alexmname@gmail.com \ No newline at end of file diff --git a/_utils/__init__.py b/_utils/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/_utils/aic_users4 b/_utils/aic_users4 deleted file mode 100644 index 904fd23..0000000 --- a/_utils/aic_users4 +++ /dev/null @@ -1,106 +0,0 @@ - -kononenko.e.p@gmail.com -aplusp@yandex.ru -ugarova@magora-systems.ru -skoryk.yulia@gmail.com -skorodymov@mail.ru -xnia.nik@gmail.com -yuliyahil@gmail.com -alex@space-o.ru -pae1@europlan.ru -stasya1004@mail.ru -design@spaceapp.ru -alexey.g.demchuk@gmail.com -ovodesign82@gmail.com -nushamenshikova@gmail.com -am@bonoagency.ru -il@bvdp.ru -ss@bvdp.ru -voron86618@gmail.com -makarichev.aa@gmail.com -kombikovdamir@gmail.com -khakifeva@croc.ru -AParshikov@croc.ru -alevova@gmail.com -info@d-element.ru -lesiawuss@gmail.com -Vorobjoff@yandex.ru -iskan153@gmail.com -era.gromov@gmail.com -ya@rl.ru -ysmirnovy@gmail.com -gavrylov88@gmail.com -alexandrshum@gmail.com -raceoffer@ya.ru -yuri.froloff@gmail.com -siv11@mail.ru -vpetrova21@yandex.ru -13malix@gmail.com -execer@mail.ru -itsarenko@gmail.com -segavosegag@gmail.com -kolos.natasha@gmail.com -limosiaya@gmail.com -andrayvelitchko@gmail.com -lina.savenkova@gmail.com -stanislav.vir@gmail.com -lentyaev.m@yandex.ru -artemich92@mail.ru -89169113911@mail.ru -marina.kavetskaya@gmail.com -mobester@gmail.com -fedotov@tyr24.ru -zyabra@gmail.com -bsv@legacystudio.ru -todanilin@gmail.com -pplahov@gmail.com -sokwork@gmail.com -kukva@me.com -aytigor@gmail.com -agarzaeva@yandex.ru -ilyaa77@mail.ru -krutolapova@mail.ru -alekseyskrobot@gmail.com -godortneo@gmail.com -volkova78@bk.ru -mako731@ya.ru -m.leybova@gmail.com -denisbryuhanov@gmail.com -alexsteptlt@mail.ru -abcdesign1@mail.ru -veronikavick87@gmail.com -jeneva7@gmail.com -as.kretinin@gmail.com -skp_15@mail.ru -k-pastukhova@yandex.ru -onimfa@mail.ru -churkin.ig@gmail.com -alla.sukhostavskaya@gmail.com -kirsti-b@yandex.ru -babyas@yandex.ru -kosan81@yandex.ru -beruchie@yandex.ru -petrusevich-vladimir@yandex.ru, -shama2004@bk.ru -alex@hcube.ru -sens11even@gmail.com -fessdew@gmail.com -skorodymov@mail.ru -uryukovv@gmail.com -ageewa@gmail.com -sokolov.maksim92@yandex.ru -shtrudle@yandex.ru -tooob52@gmail.com -sonicmails@yandex.ru -ezavodchikova@me.com -alinarlova@gmail.com -artteq@gmail.com -azazello@inbox.ru -rasulmhk@gmail.com -serglookas@yandex.ru -edgecrasher@gmail.com -a.isakov@ruslink.pro -elle.s.m@yandex.ru -tuna1706@yandex.ru -jekashohirev@gmail.com -nazarov.design@gmail.com diff --git a/_utils/all_users b/_utils/all_users deleted file mode 100644 index c6cb343..0000000 --- a/_utils/all_users +++ /dev/null @@ -1,9496 +0,0 @@ -postname218@yandex.ru -xisoko@yandex.ru -maxxwell131@yahoo.com -reznikova_kri@mail.ru -romaillyushko@gmail.com -maminmag@mail.ru -egor.gurinov@mail.ru -bitter_sweet_symphony@mail.ru -fantop@gmail.com -irina9994@rambler.ru -tangerine.sap@gmail.com -melphyor@gmail.com -feniks252009@mail.ru -lilka74@mail.ru -6pblcb.reg@gmail.com -p.panichev@ukr.net -siv11@mail.ru -rvskneu@gmail.com -fcqw1@yandex.ru -vikusik_lysenko3918@rambler.ru -netfoxxx@ya.ru -justgraff@gmail.co -tango1603@yandex.ru -progerpen@gmail.com -aleksej.40@bk.ru -stnkvld@gmail.com -kaineer@gmail.com -artshi2009@yandex.ru -alexcoretex@gmail.com -1888226@mail.ru -helgii@inbox.ru -hachikyan-a@mail.ru -fria@rambler.ru -danierucore@gmail.com -vladixa@mail.ru -mr.raychenok3@mail.ru -orlovanatalie@yahoo.co.uk -vr-c@yandex.ru -black-fix@mail.ru -alexey.chasnovskiy@gmail.com -info.deev@yandex.ru -sagesavar@gmail.com -jeneva7@gmail.com -gdhgbc@mail.ru -wmsangel@gmail.com -aiven73@yandex.ru -ikmfg@mail.ru -piligrim0898@gmail.com -beregoroma@yandex.ru -sersst@mail.ru -u.d.a.denis1@gmail.com -freeman008@yandex.ru -barbos3000@mail.ru -me@ivan-kozlov.ru -den_260181@mail.ru -timofey.trifonov@skillbox.ru -adibanks@mail.ru -tingmann@gmail.com -johntorohov@mail.ru -brin.stepan@mail.ru -lutso.mykhailo@gmail.com -kagetsu95@gmail.com -seregajan@gmail.com -s.nadjufka@mail.ru -motekito@gmail.com -intellekt-master@mail.ru -d6232@bigmir.net -alexmasunov@gmail.com -biblelamp@yandex.ru -vanyugoev@mail.ru -ads2004@bk.ru -jobssor@gmail.com -ddomalega@mail.ua -kristina.guzenok@gmail.com -odmitrijs@gmail.com -fedorgromovworkingbox@gmail.com -jozgik1995.02.20@gmail.com -kochetov@gmail.com -aovc@bk.ru -gamkartiev@yandex.ru -oleg.kirianov@gmail.com -ksdjfkjkj@dsjfkjkj.ru -anuta.gradna@yandex.ru -birdart4309@gmail.ru -pole77@yandex.ru -end-wolf@mail.ru -9228685@mail.ru -evggro@gmail.com -marinka@yandex.ru -qplayzx@gmail.com -alexgoncharovwot@mail.ru -mosk.im@yandex.ru -yakovgalina@mail.ru -mmaslennikov@mail.ru -admorozova@gmail.com -alexpozdnyakof@gmail.com -ellioth@mail.ru -matveu.shabatin@gmail.com -trup807@mail.ru -j4gg3rnaut@gmail.com -yakegovuy@hostcalls.com -1760110@mail.ru -pasha.tyurin.01@mail.ru -lu.elagina@yandex.ru -a.ushakov1989@gmail.com -tydykovga@mail.ru -yevimo@top1mail.ru -nyanarma@gmail.com -gfjgk@fgj.ru -tin22@mail.ru -jannakorr@gmail.com -markelax35@yandex.ru -zaxar8111996@mail.ru -aloyna2@yandex.ru -tools7777777@gmail.com -dokarpov@gmail.com -siefan95@gmail.com -sanykalibatas@gmail.com -j.s.mironova@gmail.com -karpenkor145@gmail.com -soloveev@yandex.ru -camaro0599@mail.ru -olileeva45@mail.ru -batovd@gmail.com -kir3316@yandex.ru -emyagkikh@mail.ru -maksi.morozow2011@yandex.ru -terexnik@gmail.com -lavrov2711@gmail.com -bel.art@mail.ru -support@skillbox.ru -im.dubrovin@gmail.com -astorazok@gmail.com -koirunq25@mail.ru -t1mursadykov@mail.ru -dzk-man.ru@rambler.ru -irinagaskova@gmail.com -diverto7@mail.ru -plavko@mokselle.ru -89101416166@mail.ru -st12890@mail.ru -muxeev91@gmail.com -aleksey68rus@gmail.com -viii6viii@gmail.com -romazzz@me.com -3m3_71@mail.ru -trippleyes@gmail.com -spb.jagunov.denis@gmail.com -dimuzio@bigmir.net -djamol89@mail.ru -romankorostensky@gmail.com -alevova@gmail.com -kvintik2012@mail.ru -nullus@list.ru -levis84@mail.ru -xsani.1282@gmail.com -a.mochulskij@yandex.ru -yapparowa.elmira@yandex.ru -kasperovskii@inbox.ru -natalyakovalerova@mail.ru -leo55506@gmail.com -e3ik5@yandex.ru -ospanov_ku@mail.ru -akhomencko@gmail.com -ovcharenko8899@gmail.com -igor.kim@inventurepartners.com -msabantsev@inbox.ru -o.kubyshkin@gmail.com -mininanna@inbox.ru -sasha63rus@ya.ru -mari.jukkaeva@yandex.ru -ruslan1988.2@mail.ru -trancechillm@gmail.com -azovskaya@mokselle.com -klu_lena@list.ru -aligatormaks@rambler.ru -anton.tatarsk@gmail.com -artyomzykov@yandex.ru -marketing-yoda@yandex.ru -katyamaster@yandex.ru -mamarinna@yandex.ru -denis3753@yandex.ru -nikulina-nadya@mail.ru -evseev@dubna.ru -dim@gifts.ru -ars.lipskiy@gmail.com -zolotce2004@rambler.ru -i.gulik@bk.ru -stephenzhavrid@gmail.com -vzahov@mail.ru -msp081152@mail.ru -ggsurkov@gmail.com -polubelov2012@mail.ru -zmey20041982@mail.ru -alina.aristovoulou@gmail.com -plus2403@ya.ru -zvad@inbox.ru -gubskiyvadim@gmail.com -a.detenkov@gmail.com -istishraaq@gmail.com -priport@mail.ru -beryndaserhii@ukr.net -vuzapp.ru@gmail.com -anyuta.laletina@yandex.ru -oksanaholova9316@gmail.com -mobiotgroup@gmail.com -sungirl6969@mail.ru -luckysuny@mail.ru -bigvanchokus@mail.ru -yamax777@yandex.ru -yokano.banimoto@gmail.com -kunackov.rinat@yandex.ru -radu.nita@mail.ru -lfid95@gmail.com -lkuklinal@gmail.com -79099094444@yandex.ru -yuliya_shirobokova@list.ru -sisteraven@gmail.com -sufiyanovv@rambler.ru -l.buslaev@gmail.com -hellos2fire@gmail.com -nwpb@mail.ru -radu.ask@gmail.com -3georg3@rambler.ru -danamericans@ya.ru -alexandra_i@inbox.ru -konstantinov2006@yandex.ru -rigood777@gmail.com -nikonorov@labizum.ru -klinkova.liubov@yandex.ru -kasatkinajuli@rambler.ru -istubb@me.com -then.tg2013@gmail.com -bytaliga@gmail.com -89028209151@mail.ru -ichipyshev@gmail.com -nick.gabriel.post@gmail.com -tamerhummer@mail.ru -slon9999@rambler.ru -trud.bonus@gmail.com -tooob52@gmail.com -pazoliny@mail.ru -susannafeisal6@gmail.com -taimax13@gmail.com -art@magicdesign.ru -demyanenko_96@mail.ru -klykov_v@mail.ru -kozyr-serega@mail.ru -iceiceice84@mail.ru -ozomat@gmail.com -shvets.mjv@yandex.ru -trukhanova.nastenka@mail.ru -katzprod@gmail.com -og_popova@mail.ru -ms5328@yandex.ru -iromak79@gmail.com -mikhail.shadrin.1997@mail.ru -andru_45@list.ru -manko.k.a@list.ru -kot655@gmail.com -djackson-nt@mail.ru -malyarik.rus@gmail.com -kalzone@mail.ru -antetik31@yandex.ru -sokdis@gmail.com -gman007@yandex.ru -andreyy2010@ya.ru -nushamenshikova@gmail.com -azatdraw@gmail.com -dive-sharm@yandex.ru -martynenkolev@gmail.com -shtoda@mail.ru -svmir2015@gmail.com -sssss@mm.ru -a.burakov@modulbank.ru -isakovvd@yandex.ru -dad-mam2013@yandex.ru -sbahodur@gmail.com -danila_be@mail.ru -revenko2@mail.ru -ayk-mkrtchyan@mail.ru -duccy@tut.by -domovoix@gmail.com -pirveliev76@mail.ru -gavno-pip@mail.ru -nakedr@gmail.com -dima.vyatkin.00@mail.ru -admin_lan@mail.ru -treff78@mail.ru -o.podymnikova@hotmail.com -v@stratov.ru -blue.smoulderer@gmail.com -dzhocorp@gmail.com -nazukin@gmail.com -r_alien_d@hotmail.com -ri-101@mail.ru -hitachichi@yandex.ru -m_mmo@mail.ru -olyshka55@mail.ru -stark2288915@gmail.com -onoxovl@gmail.com -dimakos1990@gmail.com -stonerjurand@gmail.com -knalegos@gmail.com -konstantin0@bigmir.net -4847238@gmail.com -fatchewer@mail.com -saha2013mam@mail.ru -irinatkm@yandex.ru -stepa.nett@mail.ru -kristi.kristi.kristi96@mail.ru -mufrid23@mail.ru -zubastik.dragon@gmail.com -alexandr.lesnik@gmail.com -chagov13@bk.ru -manamaha@mail.ru -leonov.maxim86@gmail.com -p.kuzhel@yandex.ru -valitova.linura@gmail.com -danil.demin34@yandex.ru -goshurenko@gmail.com -igor02.10.2002@mail.ru -yeniye@top1mail.ru -dima-tf@mail.ru -raso.practice@gmail.com -crazmazafaka@gmail.com -tigranhayrapetyan1996@mail.ru -k.zhelnin@bk.ru -fenufenu@mail.ru -playdayntsk@mail.ru -sd.virus@yandex.by -abrosimov2000@gmail.com -epohiton1111@gmail.com -xenanova@gmail.com -annaivanova.sh@gmail.com -margaritamachs@gmail.com -irogoff88@gmail.com -freelanclearner@gmail.com -gusevaea@yahoo.com -vladimir.kislinskii@gmail.com -philomat08@gmail.com -leeoxuki@gmail.com -winner.for.world@mail.ru -bit57@mail.ru -h369369@mail.ru -vank300828@gmail.com -dmitriylarin@bk.ru -alexandrzhitnikov@gmail.com -galina.pog@inbox.ru -kimonnick@mail.ru -warwar@spark-mail.ru -89091635474@mail.ru -regginaaa@mail.ru -alex.3245@mail.ru -life-artem@mail.ru -ishulga86@gmail.com -garikboriss@gmail.com -squad-ss@mail.ru -skoryk.yulia@gmail.com -ms.shirokovskaya@mail.ru -kostyamyatejniy@gmail.com -pabls.web@gmail.com -tam-tam@bk.ru -infobiznes.online@yandex.ru -komplekt_17@mail.ru -fm_alex@mail.ru -denisrudnitskiy10@gmail.com -uniweb090@mail.ru -ylrno4ka@mail.ru -sunrizz@icloud.com -yurik3738@gmail.com -ry_polyakov@mail.ru -mak.and.nik@gmail.com -ivan.sumilov@gmail.com -k_koli_k@mail.ru -awakening1985@gmail.com -dmitrij.pastushenko@gmail.com -incoro1@yandex.ru -nuvild@bk.ru -kolavv@bk.ru -elkina_sasha@mail.ru -timfedotov@yandex.ru -kalinovska_@mail.ru -comowrey@mail.ru -ivan.didilov@gmail.com -meron-kz@yandex.ru -vfilatov3@gmail.com -const12@gmail.com -k.pavljukov@gmail.com -pdmitrik@mail.ru -kasimovtagir@mail.ru -mihyil-94@mail.ru -mos.soft@yandex.ru -nikit.petryanin@yandex.ru -s_teplom@mail.ru -klimkuznecov3@mail.ru -sam.lloris@yandex.ru -tailskomi@gmail.com -yana.haus@gmail.com -sholg@mail.ru -mkenes_2@mail.ru -islamrinatov24@gmail.com -xholodov@yandex.ua -lexuss11@yandex.ru -gg_bb98@mail.ru -qwerty777-08@bk.ru -axesanek@mail.ru -irinka.al@mail.ru -scalar4eg@gmail.com -jolka.k@mail.ru -jeffl1942@gmail.com -fjodor1968@gmail.com -igortasmaev@yandex.ru -wow1980@mail.ru -vemelin@gmail.com -228rega@mail.ru -alegkask8@gmail.com -ig@aic.ru -mikhail.v.gavrilov@bspb.ru -meres28032000@gmail.com -sir-ilya.666@yandex.ru -syamoka94@mail.ru -sergkdr@gmail.com -slavinanm@gmail.com -merc_j@mail.ru -vodkazippo@gmail.com -firenskiy@yandex.ru -artur.saakoff@gmail.com -novikov.spetsnaz@yandex.ru -zaroman1989@gmail.com -i.a.alekseev@mail.ru -arutyunov_95@list.ru -den-m-v@mail.ru -scorpinomo@mail.ru -julia_71@mail.ru -u0rypt@gmail.com -rjkz201@mail.ru -oxana.khazhieva@gmail.com -moskalissa@gmail.com -ttnazarov@yandex.ru -vitaliybabiy@mail.ua -nikitosyla@mail.ru -prusove@gmail.com -sabybinnv@yandex.ru -polev.michael@gmail.com -djnyasha@yandex.ru -yuryrem@yandex.ru -serd89@mail.ru -sashneva_anna@mail.ru -nikitka_chernyshev_02@mail.ru -othtokaysinger@gmail.com -d@artmangroup.ru -nbenzoruk@gmail.com -futurebnkmm@gmail.com -ya.for.lenka@yandex.ru -kotikhina11@gmail.com -rex.hd.kanal@gmail.com -maximovglebigorevich@gmail.com -lisswolf@gmail.com -jirafff@mail.ru -jamil2005.78@mail.ru -alexmoisey@yandex.ru -azazello@inbox.ru -vasil-nazaruk@ukr.net -shirokov-iv@mail.ru -fack05@yandex.ru -ottomy@bk.ru -vozmozhnocti@ya.ru -bondarenkoilia@mail.ru -somebodyua93@gmail.com -iksanovaa_i@mail.ru -ensly@yandex.ru -netxyligan@yandex.ru -rolandefox@yandex.ru -vadim.tir@yandex.ru -dehus@stexsy.com -proper_661_20_88@mail.ru -nikanya312@mail.ru -svmc@ya.ru -espoirquebec@gmail.com -serp12354@gmail.com -tropikana_go@mail.ru -a.pfaifer@gmail.com -y.kozlova@spncomms.com -vitya2000shim@mail.ru -alexzarkov@gmail.com -ykhankhatova@gmail.com -romanmail2011@gmail.com -a.cherniak@dexme.by -vanya_gainulin@mail.ru -garuskin.dima@gmail.com -bagdaniil@mail.ru -89169113911@mail.ru -m.zhukov15@gmail.com -konfere@mail.ru -iryna.lon@gmail.com -nikolayev.alexandr@gmail.com -n.asassin@yandex.ru -alex_mylnikov@mail.ru -dirmark@mail.ru -chelsea_sofi@mail.ru -mupatvorec@gmail.com -mazola777@yandex.ru -shura.mirgorodskiy.97@mail.ru -korobeynikov.d.e@gmail.com -kurashov-oleg@mail.ru -marakanec1981@mail.ru -skdjfkjdf@kjsdfkj.ru -shum2701@yandex.ru -pnalesnyk777@gmail.com -artkatrin@gmail.com -afilatov75@gmail.com -d.lugansky@gmail.com -saliq.ilshat@gmail.com -feraklin@ya.ru -zor@academ.org -diana123370@mail.ru -maximgalushko91@gmail.com -evgenijj-kvpak@rambler.ru -ir-udal@yandex.ru -maximenkovdi@gmail.com -lora136@mail.ru -darthy.first@gmail.com -shama-rb@mail.ru -dseliverstov@yandex.ru -vitaly.suhorukov@gmail.com -nickolaybodin@mail.ru -5littlegnom5@gmail.com -alex_klim@inbox.ru -007yary.ru@mail.ru -alruminio@gmail.com -ma1m2@mail.ru -fessdew@gmail.com -vova-kuznetsov-2001@bk.ru -vse.naoborot301@mail.ru -mako731@ya.ru -79043610901@yandex.ru -nikita.podlipskiy@gmail.com -abdullowa.enje@yandex.ru -bestway305@yandex.ru -alexalexbsn@gmail.com -videograf2007@yandex.ru -kogotickick@mail.ru -zyabra@gmail.com -iskan153@gmail.com -websaps@yandex.ru -olexiygagren@gmail.com -vlkitov@gmail.com -annavic23@gmail.com -ramis.salimgaraev@mail.ru -stasmorozov@me.com -600794@bk.ru -erkebulan.nagishev@gmail.com -smirnovm84@gmail.com -ooovalent@nm.ru -wod42rus@mail.ru -spirin.07@list.ru -info@elen-decor.ru -vlad.fau@mail.ru -tkachev-vrn@mail.ru -777vadim777-00@mail.ru -berdyugina69@mail.ru -paschtet29@mail.ru -drcree@yandex.ru -middler.jon@yandex.ru -mv_86_ua_2000@mail.ru -n-samoilov@mail.ru -albatpos05@gmail.com -andrew.maryasov@gmail.com -yurajageo@gmail.com -gordeikovlad@mail.ru -daydream88@bk.ru -tsvvst@yandex.ru -devastator1979@mail.ru -malayaelka@gmail.com -tteya@mail.ru -izograf-dar@mail.ru -pashazabegin@yandex.ru -852416@e1.ru -vvuch@ya.ru -kuma2670@mail.ru -barsovich23@mail.ru -11kappa92@mail.ru -stetskoi@yandex.ru -afedotovskikh@gmail.com -lizaorlova@inbox.lv -serhii.sharik@mail.ru -elis9898@mail.ru -kelevra1700@mail.ru -m-snowy@mail.ru -kosheleva.anastasiy@yandex.ru -a_makuhin@mail.ru -venom.prog@gmail.com -rockstar-81@mail.ru -qzavyer@mail.ru -anika2006@yandex.ru -kazern@mail.ru -jooble570@gmail.com -tseluyko1995@mail.ru -pobiz@inbox.ru -slawik.buralkov@gmail.com -jkli052@gmail.com -ya.qwe99@yandex.ru -meteorit77@mail.ru -s.zorin@artsofte.ru -mihajlovmv@yandex.ru -dedesigner@mail.ru -elenagum@gmail.com -selezneva.ei@mail.ru -viktorbeznosov@mail.ru -stas.asadov.05@mail.ru -chaos300@yandex.ru -iban.kun@gmail.com -cherivil@yandex.ru -mr.o.chubarov@mail.ru -dragonazar@mail.ru -noosicolash@gmail.com -checkitshopdima@gmail.com -ferum_h@mail.ru -a.rassmagin@mail.ru -artemmarko@gmail.com -iisj2@ya.ru -dmitry.sedov@inbox.ru -petrusevich-vladimir@yandex.ru -olya.zp@ya.ru -yen1960@yandex.ru -h-47@mail.ru -xocereg@gmail.com -ten.dima10@yandex.ru -aleks71rsx@mail.ru -geekasha@gmail.com -ivan.mesh@gmail.com -navabark@gmail.com -www.spring.ru@mail.ru -rasputnyk@rambler.ru -kukva@me.com -vadzz46@mail.com -sveta.razuvaeva@gmail.com -tarina.k@mail.ru -s12358b@gmail.com -shadmg@gmail.com -hrutcstas@mail.ru -vinogradov-02@bk.ru -antyanettaklir@gmail.com -calm7gem@gmail.com -anton-nickolaevich@mail.ru -artemramenskyi@yandex.ru -rombelirk@gmail.com -rjvatt@yandex.ru -mr.karpiuk@yandex.ru -ikh@aic.ru -sibfasad22@gmail.com -nat-syrovatskaya@yandex.ru -tkachenko_elena77@mail.ru -ulndenisovy@mail.ru -bvdesign@mail.ru -samdimus@yandex.ru -77660020824@mail.ru -siriusdev3@gmail.com -juliakerner@gmail.com -nikulinag@gmail.com -sglvzom@gmail.com -2126021@tut.by -humanalone@ya.ru -yuliya1984555@gmail.com -zhif15@mail.ru -s.prava@mail.ru -gordienkoii@rambler.ru -kiselev_s_l@mail.ru -fdnn3000@yandex.ru -stepanuk1987@yandex.ru -one-two@inbox.ru -kpfx@yandex.ru -mlit@nm.ru -alkuzmin94@gmail.com -markowvka@gmail.com -heiaheia25+2@gmail.com -pashinaks@gmail.com -aleksey.m.kuznetsov@mail.ru -ikarp84@gmail.com -mrcemen2005@gmail.com -noc-engineer@outlook.com -pidlabuznyk_sancho@ukr.net -akiraz@bk.ru -dolika_14@mail.ru -irg-katerina@yandex.ru -simnet777@gmail.com -yuryivmalakhov@gmail.com -dm2001@live.ru -dmitry.turov374@gmail.com -ershovdenis2017@yandex.ru -ypolyakova1@yandex.ru -andkoni@yandex.ru -nikonova77@mail.ru -web.frontline@mail.ru -hhhh@ttt.ru -rold-sv@mail.ru -safin.ramil@gmail.com -xilia1907@gmail.com -faust_chris@mail.ru -sh.evgeny75@gmail.com -game.horizon@mail.ru -kravchenko@mokselle.ru -dmi56756877@yandex.ru -andrey_12396@mail.ru -neo-quake@yandex.ru -olya.woroshilowa@gmail.com -art2-01@mail.ru -rudnev.yuri@gmail.com -dhdhss@mail.ru -preeelest@mail.ru -greenalligatormail@yandex.ru -aoserebrennikov@mail.ru -remenyuk79@gmail.com -milov63@yandex.ru -yuriy.nazarov@gmail.com -iiaptuzah@mail.ru -tatianachespb902@gmail.com -hlebb@mail.ru -2084542@gmail.com -varavina@bk.ru -gamma_99@mail.ru -vitek_985@mail.ru -ombaev_z@mail.ru -xaimix@ya.ru -kovalev.home@mail.ru -boss_maga@mail.ru -mitrij750@gmail.com -sasha.antipov96@mail.ru -defalt9474@gmail.com -filipp.doroshin@gmail.com -vdimae@mail.ru -retals1981@gmail.com -8432@mail.ru -public-mail@mail.ru -olegkosaion@gmail.com -maraekabu@gmail.com -vbilinskoy@gmail.com -lenika19@mail.ru -t@skillbox.ru -egor-kuznetsov-1999@yandex.ru -mujui@yandex.ru -anst.kosh@outlook.com -karioster@mail.ru -andrsoon@list.ru -hilolas_box@outlook.com -rv-diz@yandex.ru -veryaskinan@gmail.com -bulatov_rasim@mail.ru -lusinedashyan92@mail.ru -r.rozhin@bk.ru -runador123456@gmail.com -vad-mk@yandex.ru -serbova.c@yandex.ru -2602199@list.ru -ilya@iskros.com -spkub@bk.ru -rus.buharov.91@mail.ru -kirikswork@yandex.ru -mikestoun3@gmail.com -firestar2003@mail.ru -sergzxy@mail.ru -d99k84@ya.ru -maxim-safronov@mail.ru -jazzevi4@mail.ru -godortneo@gmail.com -160240120@mail.ru -bb@sales4salon.pro -sir.mihendra@yandex.ru -jimmylike1998@gmail.com -technesis@mail.ru -tn@bitek.ru -irina.lensu@gmail.com -animashka97@list.ru -matvey_sologub@mail.ru -nicolatawer@gmail.com -sam.petoyan@mail.ru -theravenherz@gmail.com -a.k.sokolov@yandex.ru -slava666-2008@ya.ru -tttuyana@mail.ru -onoffbass@yandex.ru -hgldfhcsbeaf@dropmail.me -makhovik_277@mail.ru -heiaheia25+5@gmail.com -davydoffd@mail.ru -fuad-022@mail.ru -yakimov.dmitriy@gmail.com -zhenya-golikov@yandex.ru -yarprogress@gmail.com -alexey21@mail.ru -missymary@mail.ru -starodubtseva.iana@yandex.ru -lev.mishalov@gmail.com -zhenyamarshall@gmail.com -alexndr1@mail.ru -userg107@yandex.ru -www.rossmu@gmail.com -380937366616@ukr.net -seoglamour@yandex.ru -podolsky2009@yandex.ru -durasel08@bk.ru -s-murad85@mail.ru -yaposha15@yandex.ru -dcrusader@rambler.ru -anastasia1188@mail.ru -podlipskiy@list.ru -makswell078@gmail.com -1o_o12@mail.ru -ne-devil@mail.ru -danuil27@yandex.ru -sergey_hvorov@inbox.lv -kushman-geo@yandex.ru -fr47@inbox.ru -chalovk@mail.ru -domrachv@gmail.com -shoroxov@ro.ru -millenniumofpain@mail.ru -nik.sepanov@mail.ru -freedomwelcome.market@gmail.com -jeldak@meta.ua -shekochihin.misha@mail.ru -alexona90@mail.ru -obuchenie.petrov@narod.ru -igor@integros.com -kosan81@yandex.ru -asanebo@mail.ru -misha3977.ru@mail.ru -yzhunussov@gmail.com -knovvman@gmail.com -random6974@gmail.com -shyrik223@mail.ru -ovodesign82@gmail.com -ms57789@ya.ru -rusanovschi1994@mail.ru -salagub2001@mail.ru -nik-star96@mail.ru -79058638848@yandex.ru -doronina1502@gmail.com -dr.monstr@gmail.com -super_2016@bk.ru -co953_a15@mail.ru -1nine@mail.ru -sergeykirpik2@gmail.com -shvidkovas@mail.ru -antonzaderaka3@gmail.com -mer-vnuchka@yandex.ru -povniyalex@gmail.com -gorlin.2001@mail.ru -house.labs@gmail.com -anton12ru@bk.ru -cheslavg@gmail.com -zhigalko1969@mail.ru -sychyginaanna@yandex.ru -glockbender@mail.ru -seric68@yandex.ru -maksimalekvlad@mail.ru -threed@rsgc.ru -iamthe@bk.ru -1161302@mail.ru -natalie.alrek@gmail.com -anatoly-zinchenco@yandex.ua -alik.vayner@gmail.com -svetblagodar@ya.ru -zewsskelet@gmail.com -surina.alla@mail.ru -kirillfedchenko09@gmail.com -degosh911@yandex.ru -tap58@mail.ru -barantaeva@ngs.ru -artis72@ya.ru -rubik993@yandex.ru -danich1992@mail.ru -akvilonec@gmail.com -kupera_a_d@mail.ru -gelascvili@yandex.ru -seven_avk_@mail.ru -msu.std.gl@gmail.com -ivoronko@gmail.com -djwoozii@gmail.com -annayurasova@gmail.com -belycov@rambler.ru -03062016k@gmail.com -nervosse15@mail.ru -zionll@yandex.ru -nina_didenko@mtu-net.ru -m.gazzaev@gmail.com -ratlius@mail.ru -robotindisguise@mail.ru -vnb194950@gmail.com -andrei.boltov2016@yandex.ru -roneesunlight@gmail.com -lenchik-zh@mail.ru -yormuslim@gmail.com -rorbah91@yandex.ru -alex1net@mail.ru -anton_vasilenko00@mail.ru -desaulov61@gmail.com -yas_s@mail.ru -usov_88@mail.ru -lanarich@mail.ru -talasbaev@mail.ru -smook66@mail.ru -victor.tarabutin@yandex.ru -gusokol@yandex.ru -gontarencko.yura@yandex.ru -me@flexure.ru -nokushova@bk.ru -vladislavgordienkosienc@mail.ru -waleryzh@gmail.com -mandrik2020@gmail.com -bigfish.lex@yandex.ru -sdbdsbsdgb@mail.ru -sakhdare@gmail.com -h_a_r_e_66@mail.ru -vorob-natali@mail.ru -moskva4950@mail.ru -po4ta.nate@gmail.com -martin-nn1@yandex.ru -johnredzhinald@gmail.com -ekbregionetrader@gmail.com -lessxx@ya.ru -eh1dna@mail.ru -mikemegomail@gmail.com -axinin.lesha@yandex.ru -nihat.yolchiyev@gmail.com -vladislav.philimonov@gmail.com -denisputin94@gmail.com -shady8483@gmail.com -pushkinan@yandex.ru -cophecuc@gmail.com -greatpony@mail.ru -rembezi_nazar@mail.ru -liza.ismailova.00@mail.ru -bystrov-wg@mail.ru -kartashovslava@gmail.com -marijagvr@rambler.ru -kkrylov900vadim@gmail.com -9265371071@mail.ru -ponmm@ya.ru -zeffear@gmail.com -alexandrshum@gmail.com -lonastya@gmail.com -ozonep@yandex.ru -vinokurow.ilya@yandex.ru -smart-target@mail.ru -design_nk@mail.ru -bzd30677@dsiay.com -chervonenko.valent@yandex.ru -almaspro228@mail.ru -jake_r77@mail.ru -petrsushko@mail.ru -hotmustang@mail.ru -dina@vega.nsk.ru -imickaa@gmail.com -adwludmila@gmail.com -grishok6464@gmail.com -tarnovizkaya.uu@gmail.com -mnazarov_07@mail.ru -thomas91@list.ru -free.pochta@list.ru -www.alexanderyurievich@yandex.ru -shavyrova@mail.ru -eonofnagual@gmail.com -ptogroup2015@gmail.com -webskill32@gmail.com -glin4ikov@gmail.com -naumov1792a@yandex.ru -kuzzzal@gmail.com -saidfol@mail.ru -klen2277@mail.ru -pd4774@yandex.ru -79295588129@yandex.ru -kapa.94@mail.ru -mbr0969@gmail.com -agnihron@yandex.ru -evgenia.deg@gmail.com -rinna5@yandex.ru -vinjuli4ka2008@rambler.ru -x.chekushkin.pavel@gmail.com -cass788@mail.ru -diana.bulgakova.2001@mail.ru -strorikaster@gmail.com -julyaanashkin@yandex.ru -denkaart@mail.ru -veerm70@yandex.ru -kvinta30@yandex.ru -grondarrin@gmail.com -irena.kostina@mail.ru -ivanova@mokselle.ru -ral24han@gmail.ru -marat.baiguzin2013@yandex.ru -zamaev.aydrus@yandex.ru -klimuhin1@mail.ru -tula-kl@mail.ru -gainulina.gulnaz@mail.ru -isaidashev@gmail.com -9307161550@mail.ru -vlad-amosov@yandex.ru -evg_moiseev93@mail.ru -af03gh34fg@gmail.com -380734890630@yandex.ru -fedotovevgeni@gmail.com -kerkinanton@mail.ru -grafmaxpozdeev@gmail.com -gnatovych@gmail.com -dautova.diana2016@yandex.ru -gazman@ya.ru -fatullaevroman@gmail.com -jester1454@gmail.com -gmarimaria@gmail.com -alen-6v-klass@mail.ru -aria-n@mail.ru -alsh601@gmail.com -glzabrodin@yandex.ru -proschebud@gmail.com -4165033@mail.ru -kuzemkin@a42.ru -olgapogoda@yandex.ru -11@yu.yu -vladislaw999maltsev@gmail.com -gvrik@mail.ru -egorgavryusev@mail.ru -kamila_zv2003@mail.com -dimashitov1@gmail.com -millie.mk5@gmail.com -nata150282@ya.ru -makslu@mail.ru -leer22@rambler.ru -vova23311@mail.ru -rjk1595@gmail.com -brolya@bk.ru -aleksandr_ermakk@mail.ru -artnebo@gmail.com -dancha1999@bk.ru -sherilinolga@mail.ru -leva2190@gmail.com -csphsoec@mail.ru -sanyok.klevash@mail.ru -jumble83@mail.ru -kazinaknt2@mail.ru -julia.krivoruchko2013@yandex.ru -kuanzhasulan@gmail.com -klushochek15@gmail.com -dragonesis@ya.ru -v6772197@gmail.com -pikhtpenko@gmail.com -diman125@mail.ru -omonovshahboz@mail.ru -smekhav@mail.ru -vesyolkina.olga@gmail.com -mivlago@mail.ru -apricus89@gmail.com -asylov@gmail.com -89176274151@mail.ru -smartmedia05@yandex.ru -idmok.ua@gmail.com -godmen777@mail.ru -tchesalkina@gmail.com -ogaderova.yelena@gmail.com -gregory@bajburtyan.ru -m2005200598@yandex.ru -onewolf777@mail.ru -boykovalery@mail.ru -tanya---sotnicova_23@mail.ru -svishch_alena@mail.ru -artembisnes@gmail.com -val4656@yandex.ru -eugene.baryshok@gmail.com -xxxxxxx@1.ru -wadim259304@gmail.com -paulinependragon@gmail.com -paymaster2014@gmail.com -ksfrules@yandex.ru -darkwep2014@yandex.ru -rabota-shilin@yandex.ru -marina.kolosskaya@mail.ru -proprofi15@yandex.ru -vashchenkoeugen@gmail.com -myachik17@mail.ru -lsoluyan@mail.ru -mich19740302@gmail.com -maksnikiforof@mail.ru -popoff.anton@gmail.com -namexin@mail.ru -suonarama@gmail.com -slaska4@gmail.com -sherik2006@inbox.ru -vit.panov.design@yandex.ru -olgafedorchenko@gmail.com -lllvalterlll@ya.ru -muratpa@mail.ru -meyson00@mail.ua -matlin_daniil@mail.ru -varlamoffandrej@gmail.com -zver707zver@gmail.com -pabotaonli@gmail.com -sashadand@gmail.com -super.nikolsidorov2015@yandex.ru -sergey_bystro@mail.ru -baimuhammedov@gmail.com -nein_kib@mail.ru -tasejjp@ro.ru -julis1992@mail.ru -shilkin-sergei@rambler.ru -irina.medyanceva@gmail.com -vmtkachenko1981@gmail.com -nikitin1804@gmail.com -mitrohin1975@gmail.com -89226890628.sda@gmail.com -gpeckob@gmail.com -conik917@mail.ru -dc39287@yandx.ru -pasechnik_900@mail.ru -petrichv@gmail.com -antonbuivol@mail.ru -sh@aic.ru -111200333@mail.ru -kmoskalenok@gmail.com -batsandrey@gmail.com -elavrushki@yandex.ru -igorbunovf@gmail.com -admin@proger.org -glinenkonv@mail.ru -romalx@mail.ru -otlichnick.yaumamy@yandex.ru -vitaly.popov.75@gmail.com -savielii31@mail.ru -jassica12@mail.ru -wonder.uix@gmail.com -petrova@ydarnic.ru -zulkijind@gmail.com -xelanis@rambler.ru -ngpk_lysenko@mail.ru -andreyka.fedorov.02@inbox.ru -voidfear3@gmail.com -alesias-105@inbox.ru -kvetnevskiy@gmail.com -ohmeinkot@gmail.com -ru.yunusovs@gmail.com -morov@inbox.ru -nik2581@yandex.ru -gorundwartanks2020@bk.ru -t9630799550@mail.ru -vladianufr@yandex.ru -eragon_2016@mail.ru -dragon_87.07@mail.ru -korzhevin.mixail@gmail.com -turovets.b@gmail.com -antonmorozov@mail.com -vasilya-85@mail.ru -keys4words@yandex.ru -danya.zaurov@mail.ru -asburim@yandex.ru -1664286@gmail.com -logorush@yandex.ru -heli.service@yandex.ru -bajdaniil@mail.ru -martaw75@mail.ru -sj22@ya.ru -pheniksesalex@mail.ru -robert@saetov.ru -lidfut@yandex.ru -om.94@mail.ru -pae1@europlan.ru -diguarra@yandex.ru -azat.tukaev@gmail.com -lancer164kv@yandex.ru -anton.tmur@gmail.com -loki2d@gmail.com -vitalysinicin@gmail.com -kvanton.web@yandex.ru -felix.80808@mail.ru -eremindw@yandex.ru -pavelvch@gmail.com -sharov.d.v@mail.ru -madvito@ya.ru -ja_marina90@mail.ru -pizza148814@gmail.com -rolife@me.com -dymov33@ya.ru -stepco@i.ua -ale83027731@ya.ru -fiss_laeda87@mail.ru -love_enots@mail.ru -skyfallorigin@gmail.com -azaza-1971@mail.ru -kapelan74@gmail.com -starodubtzeva.iana@yandex.ru -evgeniy.klbh@gmail.com -bulguchev2018@gmail.com -ingshot@bk.ru -alexey.g.demchuk@gmail.com -agent.777@inbox.ru -rozzuvaeva@gmail.com -julia.fedyaeva@mail.ru -khohrin@gmail.com -info@codyart.ru -niko.slesarenko99@gmail.com -hohma2006@mail.ru -mike.bonuman@yandex.ru -reyhino@mail.ru -andrey.kryukov.1991@gmail.com -fedor30052002@mail.ru -skripkin2410@gmail.com -kv-comp@ya.ru -zorina.mila@gmail.com -felixbag@gmail.com -andreychupov@gmail.com -web-school-voicehovich@yandex.ru -bestguy.ali17@gmail.com -2024123@mail.ru -misha.laguzov@mail.ru -spectr_006@mail.ru -aosypienko@mail.ru -chaocharly@gmail.com -olenka.gladkova@gmail.com -alinavasilik@yandex.ru -shchebenyuk@inbox.ru -vitovttv@gmail.com -casual222@hotmail.com -pozeg@mail.ru -iluhka.2001@mail.ru -andrey.kirichenko999@gmail.com -aza-1991@inbox.ru -afsfasf@mail.ru -lipsuke@mac.com -donisrv@ya.ru -barick74@gmail.com -rybkina.ma@gmail.com -kapitanjek2015@mail.ru -job.in.kiev@gmail.com -margovera3015@mail.ru -alinagolysheva@yahoo.com -andreylovechristina@mail.ru -nato_veter@mail.ru -shalva@reuters.com -timur.abramov@yahoo.com -anna_fill@mail.ru -belval2008@mail.ru -alx.proger@gmail.com -krisstyle@inbox.ru -m.shalaji@yandex.ru -urself2015@yandex.ru -sfaycer@gmail.com -1985_dandy@mail.ru -_lego_@mail.ru -nikolanedvora@yandex.ru -ft_inferno@mail.ru -nordtrans@isnet.ru -mr.kaxa_1985@mail.ru -taxnet17@gmail.com -s.nazhmudinov@mail.ru. -zhalgasbayev.k@gmail.com -prosto-chelovek-99@mail.ru -andrei.ku6nir@gmail.com -evgenia_litvina@mail.ru -semonix@gmail.com -akranin94@mail.ru -fatenicedu@leeching.net -ton-sergey@ukr.net -gresmik@yandex.ru -miss.fairy.terry@gmail.com -milkifils@gmail.com -oghon@yandex.ru -pavel.zavadski@yandex.ru -troyka2008@yandex.ru -rusya97@icloud.com -an.test2016@yandex.ru -nitrodrill@ya.ru -lenakukla1219@yandex.ru -kate.belokon@gmail.com -vladvvvllv@gmail.com -s.madisson@yandex.ru -johncrandon@cock.li -antipizza@mail.ru -3dprost@gmail.com -oksik2481@gmail.com -2_k@inbox.ru -prigarov1992@gmail.com -mm1990@mail.ru -foninalex2006@yandex.ru -vlad2573@gmail.com -gosha1122gosha@mail.ru -rasulmhk@gmail.com -baol@mail.ru -si-shum@yandex.ru -boukinist@yandex.ru -darkon4ik@gmail.com -mamina_alja@mail.ru -luchkin@mail.ru -igrix@mail.ru -yorke_rb@mail.ru -pavel.sedakov@mail.ru -tyumentsev.lbv@gmail.com -mobester@gmail.com -dock2@inbox.ru -oxana2404@mail.com -tat-dudko@yandex.ru -mbc_98@mail.ru -sunshine.94@mail.ru -glide2007@yandex.ru -olgarafikova00@mail.ru -darikrylova@gmail.com -marat.aka.ejik@gmail.com -snegovik_piroman@pochta.ru -saninamaria@gmail.com -alicemorozova18@gmail.com -smolokhov@gmail.com -maximzavarin99@mail.ru -arseniy-sports@mail.ru -mrpozitif@mail.ru -agarzaeva@yandex.ru -neshsh@yandex.ru -qinezz@mail.ru -danila.zarechnev@gmail.com -a.khorevich@gmail.com -svyatoslav.brendy@mail.ru -com-08@yandex.ru -knaze@mail.ru -execer@mail.ru -eduard.s.1984@gmail.com -sashavlogrt07@gmail.com -aab_97@mail.ru -trogatyuk@gmail.com -asuhoverhova@esphere.ru -alister.absent@gmail.com -nevskayanika55@gmail.com -poli.ksenia@yandex.ru -domovoi_sasha@mail.ru -maxim_vasilenko79@mail.ru -amieevil@gmail.com -khoroshilovei@gmail.com -demesh_dima@mail.ru -felisarmis@gmail.com -shelom_2009@mail.ru -timofey@maglatov.ru -neofit161653@yandex.ru -vladpap@mail.ru -jail21@mail.ru -shevolye@rambler.ru -dafovoze@rootfest.net -440xa@mail.ru -uxsir@yandex.ru -shaman-cherenki@ya.ru -filatlm@mail.ru -dencho2000@mail.ru -vlad.pj@mail.ru -len4a.grimovich@gmail.com -vereina.elena@gmail.com -dolgan_97@bk.ru -krumu93@gmail.com -aa@aic.ru -host510@mail.ru -alex.sushkoff@gmail.com -anosov1959@gmail.con -webushko@yandex.ru -aequivalere13@gmail.com -e-hunter0@yandex.ru -flaybay.ua@gmail.com -ksd921020@yandex.ru -dhopkins@ya.ru -vasiliy.sharapov.2014@mail.ru -tessaract-1996@mail.ru -9205688@mail.ru -monobear1304@gmail.com -dobrosel@yandex.ru -masha49@yandex.ru -abrochinam@mail.ru -surtaeva_nastya@mail.ru -allek94@gmail.com -n-kis@bitrix24.ru -fred.nn@mail.ru -zara.fazlyeva@gmail.com -perferium@gmail.com -mmm@mail.ru -alenamosunova@gmail.com -blackrum@yandex.ru -voozor@gmail.com -baby19732007@yandex.ru -step84ust@yandex.ru -mir@dilibrium.ru -musha4a@gmail.com -jocussveta@mail.ru -net0@mail.ru -artemtargonya@gmail.com -svet-lana_k@inbox.lv -crackman89@mail.ru -alpis11@mail.ru -netsky@mail.ru -specel@tut.by -osipovik89@gmail.com -yushmanova.irina@gmail.com -info@purplebear.ru -neofit161653@gmail.com -iskhakov@novitate.ru -khizhnenko.oleg@mail.ru -errwot@yandex.ru -stas.antipin@list.ru -declip@yandex.ru -lastochkina79@mail.ru -foxzby@gmail.com -11x31c@gmail.com -ilya-ukkone@ya.ru -catend@yandex.ru -1ua1@list.ru -gitty@inbox.ru -sveta250694@mail.ru -nur2f@mail.ru -kot8988@ya.ru -dimaschip@mail.ru -rkrivtsov@gmail.com -svelavs@gmail.com -levin_aleksey@mail.ru -237032@mai.ru -disen2322@gmail.com -starspersona@gmail.com -serjgolenko@gmail.com -olga.bolshakova.74@inbox.ru -aa480089@mail.ru -vlasov7372@gmail.com -stacyinner@gmail.com -otodracula21@list.ru -don410@bk.ru -27822782yong@gmail.com -cnu@mail.ru -soloveivei@yandex.ru -ice-svet@yandex.ru -budan501rc@gmail.com -me@cpaking.ru -ivkov_wa@mail.ru -crazyguyplay@mail.ru -mega.alex2001@mail.ru -belovas@hilding-anders.ru -dimak31@mail.ru -lida.pihora@gmail.com -aleksei@javasilev.ru -mvorobyev1782@gmail.com -arsbekovv@gmail.com -rotalina2222@mail.ru -0lezgin5@gmail.com -yuriy1357@mail.ru -vlkuprianov@gmail.com -chudoshilkin@mail.ru -tanya.line96@mail.ru -anton.kabachkov@gmail.com -qwa@tut.by -bim2k10@mail.ru -alice.shevela@gmail.com -alivo4ka1244@yandex.ru -p.pokidko@yandex.ru -2katerina5@mail.ru -iv.d3ux@gmail.com -nailg@rite.pro -alupanin@gmail.com -hollmarck@gmail.com -simplementos@gmail.com -olexiybeynyk@gmail.com -slava-sh@yandex.ru -botschafter.von.weltfrieden@gmail.com -zadrotkamilka@mail.ru -vinnnik.tatyana@gmail.com -natalysoliton@mail.ru -kosmos.mail@mail.ru -olinyk@list.ru -bmihail@bk.ru -anton.tarasyuk2014@yandex.ru -msv1108@gmail.com -mm@veta.expert -rejufupab@cartelera.org -polezin85@gmail.com -vadmelnichuk@gmail.com -arslanov-2004@mail.ru -vladimirkuzmin65@gmail.com -daria_andr@outlook.com -icewind55@yandex.ru -paveltenisson@yandex.ru -naruto378603@mail.ru -cyberspacedee@gmail.com -rd2serohvostova@gmail.com -smelev808@gmail.com -ksynja95@mail.ru -allabreeva48@gmail.com -andrerm@ya.ru -sidorkin2006@rambler.ru -sundetar@mail.ru -maxpaine666@mail.ru -zidorov@yandex.ru -sugareva@cubeline.ru -gadzila2.valeev@yandex.ru -vikraokna@gmail.com -churikanova.lilya@gmail.com -dobrousov@bk.ru -kuzmichevs@gmail.com -koldashov.vasilii@mail.ru -vasey@yandex.ru -info@kreades.ru -dmitrytokarev@rambler.ru -mas.58@mail.ru -vitaliy199718@gmail.com -globazh@gmail.com -kristina.cilinskaya@mail.ru -vovich76@icloud.com -maksim.shachkov@skillbox.ru -kasyan12@mail.ru -rv.lisovsky@gmail.com -eeppicboy@gmeil.com -fedoseev_migel@ukr.net -demidovaulya@yandex.ru -avustsforza@gmail.com -00boss1998boss00@gmail.com -9740088@gmail.com -letterca@gmail.com -admin@len0xx.ru -ele-bulavinceva@yandex.ru -olypash-alians@yandex.ru -abajour23@gmail.com -afon17@mail.ru -lentyaev.m@yandex.ru -puchnin_ilya@bk.ru -alokin25@mail.ru -denisov.s.s@yandex.ru -sokrushitel07@mail.ru -nicknatochiev@me.com -trom8106@yandex.ru -ttakyon@gmail.com -xxpzz@mail.ru -vladux6@yandex.ru -nwisher@gmail.com -yoooda1989@mail.ru -dmitry@shaludin.ru -roma.korehov@yandex.ru -akula@list.ru -oglekler@gmail.com -s_a_b_a_k_a@bk.ru -vladsuhachev@gmail.com -suptechi@mail.ru -vetptzru@gmail.com -akhmetov.roma@bk.ru -artte.mono@gmail.com -mejlist525@gmail.com -andrey280596@mail.ru -jeged22@gmail.com -rp@eurosites.ru -gherasim@list.ru -aleksey.elizaryev@gmail.com -fedoruk@protonmail.com -oionov@expertsolutions.ru -marusharama@gmail.com -n3222464@mail.ru -emelyanova.olena@gmail.com -m.ivanov1225@gmail.com -kindaleks@gmail.com -danseft@mail.ru -varvarakravchenko@yandex.ru -frimanbb@gmail.com -falchenko22@mail.ru -d.pastukhov@yandex.com -zhekiszhekis@mail.ru -nn@aic.ru -russkih.95@narod.ru -vasilisa.ponomareva@ustrong.ru -mix.rozov@gmail.com -scorpionknight@yandex.ru -marshmello.yt2017@yandex.ru -strong.m.m@mail.ru -shelbyblack37@gmail.com -pdorun@bk.ru -mikhail.a.gusev@gmail.com -finik001@gmail.com -d0kym@bk.ru -klachkov.95@mail.ru -marina.taran1980@gmail.com -bulgakov89@inbox.ru -ainslie.red@gmail.com -bairamov-azat@mail.ru -weldfrombaku@gmail.com -rustemmus@gmail.com -pav.kiev@gmail.com -kon9wa99@gmail.com -pawelzhuravlev@gmail.com -vip.agordeeva@gmail.com -merm41@mail.ru -5001010@bk.ru -inkfaust@gmail.com -selena904@mail.ru -dorof21@gmail.com -gulyaev.artyem@gmail.com -andrii.dev@gmail.com -piratehead@inbox.lv -ivanzl9208@gmail.com -sashka_amur@mail.ru -larii2002@mail.ru -ravilwork@mail.ru -a1951kol@gmail.com -tuchilio2@gmail.com -watersmith@i.ua -supreme1609@yandex.ru -vysockiy.aleksey@list.ru -ivan.infbez@yandex.ru -denysha0@gmail.com -vitalyrepkin94@gmail.com -a.myskova@yandex.ru -kas4231@mail.ru -danil00729@yandex.ru -mazzadha2012@gmail.com -ledispirit@mail.ru -solovievdima1@gmail.com -sht47@bk.ru -lilyalov@gmail.com -julia210384otto@yandex.ru -p375333139440@gmail.com -daniilsuhanov1304@mail.ru -sergeyarmyanovsky@gmail.com -sashatktarv@yandex.ru -kolean720@yandex.ru -be1phegor.js@gmail.com -wcry2007@yandex.ru -nailunho@gmail.com -maxim.k789@gmail.com -k.melnychuk@alterego-russia.ru -ao@petrobright.com -sergiowell@gmail.com -irinaskripka99@gmail.com -manmg87@gmail.com -fag2000@yandex.ru -vistinvest@yandex.ru -julia.v.lysenko@gmail.com -4fz4@mail.ru -rusakova89_89@mail.ru -masko_elena@mail.ru -89506463518@mail.ru -yupee.de@mail.ru -afeldus@mail.ru -seap@yandex.ru -mishalova.sa@gmail.com -eto.matyunya@gmail.com -vtamirlans@mail.ru -renat121825@gmail.com -belov2002@gmail.com -mihanik15@yandex.ru -mariay6@gmail.com -adrinalin17@yandex.ru -priymakdmitry@gmail.com -artemshomin@gmail.com -art-pasha@mail.ru -lordsadler2010@mail.ru -aaee@polyfaust.com -aklinaev@gmail.com -mger_akopyan@mail.ru -m1hayl0ff@mail.ru -eugeny.bublick@yandex.ru -marina.kavetskaya@gmail.com -tsimer123@mail.ru -maks2015@mail.ru -lemberov@gmail.com -stdashkov@mail.ru -tannypanny@inbox.lv -ol3905@yandex.ru -5ivepb@mail.ru -mr.arkam@mail.ru -asil_kz@mail.ru -yutars@gmail.com -shizgara.70@mail.ru -egser92@mail.ru -woolfaaa@mail.ru -vaynberg.a@gmail.com -nyfeprey@gmail.com -winer300x@gmail.com -azik_37@mail.ru -shtirlits69@yandex.ru -vev8en@gmail.com -savax@rambler.ru -wkosoi@ya.ru -olgeraski@gmail.com -5607020@mail.ru -zalinur@yandex.ru -galexeno@gmail.com -spec@meta.ua -robotik322@gmail.com -vdvshnik31@mail.ru -sashkokirill@gmail.com -mr.sosnowscky@yandex.ru -ramzi.smayilov@gmail.com -lrv92@mail.ru -ky_8@mail.ru -www.rudnev.web@gmail.com -mrawcricket@gmail.com -g3r465@gmail.com -ab21@list.ru -dmi3x.work@gmail.com -gulin@labizum.ru -dragon_lucky@mail.ru -pavlovskroman@gmail.com -anna.davletshina@gmail.com -s.romanenck2011@ya.ru -kayl24brof@gmail.com -valera.petrosian@gmail.com -kutaxoff@icloud.com -vvooster@gmail.com -dozerdroll@gmail.com -e.p.aleksandrov@yandex.ru -ya.vinst91@yandex.ru -andrei_makarov@list.ru -suvzh@mail.ru -raya1984@yandex.ru -nils1968@gmail.com -dmitryredkine@yandex.ru -kolrmba@rambler.ru -krylya@inbox.ru -andreykonenkov@yandex.ru -avers210@yandex.ru -sasha1888024@yandex.ru -avenger3df@yandex.ru -vav@teobit.ru -nadin12233@mail.ru -k.alex.f@mail.ru -shoma.alisultanov@yandex.ru -diesaaa@gmail.com -nosovetsrn@gmail.com -irina.lisofa@gmail.com -petronii3@yandex.ru -hovakimyan@manil.ru -zarechnev58@gmail.com -shemerzi@yahoo.com -polina.eremicheva@mail.ru -mainfilter@yandex.ru -podushka.nv@yandex.ru -k.pyshmintsev@mail.ru -xxxcmv@mail.ru -kiril2004kost@gmail.com -assol2205@gmail.com -angel_666_83@mail.ru -bushup9@gmail.com -uliana.pimenova@gmail.com -enrich-tov@yandex.ru -tasharova2015@yandex.ru -deevaanna2000@mail.ru -krikunova.daria.konstantinovna@yandex.ru -vihka-spihka@yandex.ru -trolzor23@ex.ua -space56@bk.ru -panorama6264@mail.ru -irrelig@mail.ru -strandom202020@yandex.ru -la-verne@mail.ru -realturkantalya@gmail.com -ksen1tr0n@mail.ru -kli-van@yandex.ru -jz@tesstt.com -serggovs@yandex.ru -sergejsusev@yandex.ru -leench-r@mail.ru -ciburciu20@mail.ru -aqsrub@gmail.com -wolkvan@mail.ru -ivanukaa@gmail.com -xxxlpasha2008@rambler.ru -vic.bandura@yandex.ru -efremov_d@outlook.com -timofeiev2016@gmail.com -zemelka228@gmail.com -79505406834@ya.ru -philippov.kir@yandex.ru -kuryukova@gmail.com -wtsguitar@yandex.ru -marchenko.konst84@gmail.com -rm7m@mail.ru -dalos777@gmail.com -selena22@mail.ru -magicilusha@gmail.com -krasavantonio@mail.ru -elvis97rus@gmail.com -profiservic2@yandex.ru -hrach333@live.ru -anar.s.babaev@gmail.com -sadness.sv@gmail.com -flyshtein@gmail.com -andres-f1@mail.ru -yaroslav.pavlov@gmail.com -rivendel1987@yandex.ru -vur777@mail.ru -qwerty161617@gmail.com -kefir2204nikiforov@gmail.com -shake1@rambler.ru -xnia.nik@gmail.com -paintdesigner@gmail.com -xr-3da@ukr.net -ygrigorieva@yandex.ru -jumperblack96@yandex.ru -gosha88888@gmail.com -aka@make.st -1@1.ru -paulzemtsov@mail.ru -nikalashchanka@mail.ru -dressatele@gmail.com -suslovaehlen@rambler.ru -mt-pro@mail.ru -vika.skripachuk@mail.ru -asalnik@mail.ru -semgolub@gmail.com -godendota@mail.ru -dmitry.konshin@inbox.ru -rogden1@ukr.net -s_ivanoff00@mail.ru -kenzo20.11.1996@gmail.com -sokolik2701@mail.ru -daenurko@gmail.com -didenko@braind.agency -hello@denis-korableff.ru -rusl.awdeew.2014@yandex.ru -olga_sazonova89@mail.ru -pabls@yandex.ru -nikonovlev@mail.ru -diank97@mail.ru -morozalex@list.ru -vkalzhanova@gmail.com -tsarevvs@bk.ru -dan5cool@hotmail.com -tsvrams@mail.ru -ivanko0192@hotmail.com -elenasilant@rambler.ru -88oleg@gmail.com -boltyn4ik@gmail.com -maxgontovoy@gmail.com -diajelovic@gmail.com -sa.kubrak@gmail.com -maestro8989@bk.ru -gsm_elst@rambler.ru -vladvolod@yandex.ru -agromis@yandex.ru -kharushina.christina@gmail.com -vasylenkoalex@mail.ru -cut-throat2008@yandex.ru -beruchie@yandex.ru -nook12@bigmir.net -i.muromtseva@wizard-c.ru -harleyhp@mail.ru -gjevstratov@gmail.com -ekaterinageorgievna@ya.ru -rdv777@inbox.ru -medi87@icloud.com -emilekeilbach@gmail.com -bubbledouble@rambler.ru -marinagretskaya@ukr.net -b2sty@yandex.ru -alexeevv-alexey@yandex.ru -jugg.blem@gmail.com -korolev.viktor@rgr.ogk6.ru -rabotareferat@gmail.com -steve-2002@inbox.ru -titan792008@mail.ru -muxumov0087@gmail.com -tolavvvv@gmail.com -pilaika@mail.ru -annnuta008@yandex.ru -trifanchev@yandex.ru -alexxkish@gmail.com -pean2016@yandex.ru -id19318265-8f9e90b97c@vkmessenger.com -bydianahunter@gmail.com -wrecker0007@bk.ru -srnd@yandex.ru -oleg.image@gmail.com -master.visput@gmail.com -burenkov1972@mail.ru -meowkoshee@gmail.com -andakava@yandex.ru -monit320@gmail.com -kuprik-90@mail.ru -anrey-markov@mail.ru -loungeserj@gmail.com -anton.smolnikov@gmail.com -masterawp2006@mail.ru -qweas1177@gmail.com -van4o47187@mail.ru -s12998@yandex.ru -userswww@yandex.ru -antonov.anton@outlook.com -fiillliip@yandex.ru -pixel-7-7-7@yandex.ru -calcio8484@mail.ru -yuraloboda90@gmail.com -kirillmatsko@mail.ru -buleka23@gmail.com -drago1667@gmail.com -volnatalka@mail.ru -mromanow@mail.ru -morgunova18@yandex.ru -tanyakrichevski@gmail.com -vladimir_titarenko_80@mail.ru -ngilev728@gmail.com -dimapugachev@gmail.com -ar4i_92@bk.ru -digitex.91@mail.ru -this768@mail.ru -belous.maria@gmail.com -shilaevnik@icloud.com -gdf-97@mail.ru -hahanov@mokselle.com -shtdima@mail.ru -rumbeshta@userstory.ru -cast.24@yandex.ru -andrey.shulik.80@mail.ru -9del@mail.ru -gordon.freeman69@bk.ru -eltiiv@yandex.ru -ladydi-84@yandex.ru -den.zimin2017@yandex.ru -artem.96.ba@gmail.com -liza.150@mail.ru -xxrq@mail.ru -k.danila67@gmail.com -balo08@mail.ru -ghoul666@gmail.com -alexeyyurk@gmail.com -vsd71@yandex.ru -armanyyy@mail.ru -9525282@bk.ru -mirik49@yandex.ru -register200@mail.ru -fidelio.81@mail.ru -milker98@inbox.ru -den70s@mail.ru -aaa_mt@bk.ru -diana.yatsenko.01@gmail.com -rayesbern@ya.ru -personal2work@yahoo.com -nikigamesxp@gmail.com -darkdes6@gmail.com -sir.oberst@yandex.ru -nvladislavn@gmail.com -vse_pisma_na@mail.ru -alinasoursmell@gmail.com -har17bar@mail.ru -o.lif@gmx.de -tim_murka92@mail.ru -eugene483@yandex.ru -makatorya@gmail.com -uran_alien@mail.ru -klimtsovcergey93@gmail.com -anton.larin.2016@mail.ru -suomeni@mail.ru -ch.sut@mail.ru -palexandr1984@mail.ru -kureliak_kristy@mail.ru -shark_del@mail.ru -misharednev@rambler.ru -valvesh@mail.ru -mihail.sherban@gmail.com -vitosya86k@gmail.com -axelml78@mail.ru -fedor40@mail.ru -linchevscky2012@ya.ru -rds2212@yandex.ru -maximkka47@gmail.com -mark_duo@mail.ru -galadriel2007@mail.ru -elle.s.m@yandex.ru -robin-nogood@rambler.ru -svetohna3@gmail.com -c-ilya@mail.ru -mona_lizka@mail.ru -tematixonov@mail.ru -thecomicz@gmail.com -flashmen-87@mail.ru -bukashka999@gmail.com -alsdma@mail.ru -ghost660@mail.ru -lenia.kuzmin@yandex.ru -v.sirazhev@yandex.ru -glebarav@mail.ru -37churik37@gmail.com -zzllwa1@gmail.com -kondrikov.37@mail.ru -gusev-74@mail.ru -avmakushina@gmail.com -likofffa@yandex.ru -artemova.ketrin@yandex.ru -rainbow.lama@yandex.ru -doolol@yandex.ru -core111@list.ru -kakeru_fuidjo@bk.ru -nelli_dimitrova@mail.ru -satybaldieff.nazar2017@yandex.ru -tretiakov2511@gmail.ru -mikhail.lugovskiy@gmail.com -m.katya_@mail.ru -eugene-orlov@bk.ru -hahles@yandex.com -anstxiii@yandex.ru -wildchild.america@gmail.com -ok.msaavedra@gmail.com -kir.brylev@gmail.com -azalmazal1@mail.ru -dasha.tukhto@gmail.com -faniska91@gmail.com -jamadharma13@gmail.com -alwyngush51@gmail.com -asedletskiy@yandex.ru -skyivan@mail.ru -maksim_klenin_99@mail.ru -vdel312@gmail.com -scandi01@rambler.ru -haward312@gmail.com -lucspirit@mail.ru -edwardb@ngs.ru -vova_mikhaylov-2002@mail.ru -afinazhurba@mail.ru -piko_perri@mail.ru -nikonovruslan@mail.ru -kirill4555@icloud.com -trikoz86@gmail.com -gupp-pp@yandex.ru -zi_zind@hotmail.com -alxsrtv@gmail.com -viktory9494@mail.ru -ivans@zeptolab.com -khvan02@list.ru -viskontas.k@openregion.info -katerina.musinova@gmail.com -volkovv71@gmail.com -iterus@rambler.ru -matariki@ya.ru -wins00k@gmail.com -gethrik@yandex.ru -mikg@yandex.ru -dima-sit168@yandex.ru -vadigoryache@yandex.ru -dyadkinkent86@mail.ru -glavbuh.tv@mail.ru -alex-160382@mail.ru -dsagindikov@yahoo.com -alex-bedev@ozero.net -sh3ndrik@gmail.com -johnkhorev@yandex.ru -dido11@yandex.ru -anastasy.petrenko87@gmail.com -fodin89@mail.ru -mordekainen@yandex.ru -sobinin.dmitrij@yandex.ru -kakaxa0089@mail.ru -joker.shym@gmail.com -volodya.malgataev@mail.ru -poroshok16@yandex.ru -shikhnabiev90@mail.ru -cat.kubasova@yandex.ru -tizaykin@mail.ru -familien@mail.ru -alsaut@bk.ru -jookpnz88@gmail.com -elena.melehova.aax@gmail.com -katrin1010_89@mail.ru -angels-ketrin@mail.ru -broncos@ukr.net -dmitro.pogrebnyi7@gmail.com -m.potapenko@icloud.com -artemzig@gmail.com -motorin.ilan@yandex.ru -vasiantor@gmail.com -alex.sherbinin99@gmail.com -sa4wan@yandex.ru -germanleming@gmail.com -skulbeda.s@mail.ru -jlyjrkfcybrb@mail.ru -goldyfly@yandex.ru -nnbsnt@gmail.com -leha-fantom@mail.ru -ffiirreeffooxx@gmail.com -skapitonov@yandex.ru -magicue@mail.ru -niko-shimogin@mail.ru -s.lagun@systtech.ru -ivashka.co@gmail.com -gnk413666@yandex.ru -egorfrend@ukr.net -me@leonidpotapov.com -geiz@yandex.ru -yuliya_mashkina@mail.ru -anna_aleksandrovna24@mail.ru -x25net@bk.ru -ddengiyan@gmail.com -zhenyasmagin@yandex.ru -lotamountofsoul@gmail.com -blonde1708@mail.ru -anik4366@mail.ru -yuri.a.k.design@gmail.com -avt77@mail.ru -alex353cay@yandex.ru -dark189@rambler.ru -navelis@mail.ru -paremir@mail.ru -artem.sklyanchuk@gmail.com -magazine.go14@gmail.com -upax@inbox.ru -efimov-i@bk.ru -varaksinandrey@yandex.ru -smart.dmitry@gmail.com -vggsitnikov@mail.ru -aleksandr.gudovs@mail.ru -ldngood@mail.ru -trissizrivii@gmail.com -serega87rus@yandex.ru -ivan.dmitriev85@gmail.com -trablik3@yandex.ru -viktorle91@mail.ru -aknis@yandex.ru -lalka8672@gmail.com -y.moskalev@gmail.com -grrty@gmail.com -chulkovave@yandex.ru -vifahifoye@cartelera.org -kirill.deshkev@gmail.com -asiri.unholy@gmail.com -istochnik52@mail.ru -gordonnuke@gmail.com -euro2@yandex.ru -pochuev.vg@gmail.com -info@sibirix.ru -vstetsko@yandex.ru -batyrba@gmail.com -igor_kravchenko@live.ru -lebedy25@yandex.ru -pdadvd@mail.ru -milsal2011@mail.ru -paschatruzhennik@gmail.com -79297762162@yandex.ru -mykola60@seznam.cz -eugene_230292@mail.ru -forzehard@mail.ru -vladimir.kakaulin@skillbox.ru -ivico@inbox.ru -tatar.oleg@gmail.com -alexandersvinin@gmail.com -jedai86@yandex.ru -konfucyi.nsk@gmail.com -metal1234dt@gmail.com -pverbatim@mail.ru -fyn22@mail.ru -bokovoy.ivan@gmail.com -wespe@outlook.com -palenskaja@rambler.ru -achkarik@gmail.com -teslenkozhenja@yandex.ru -warrior_87@bk.ru -savva-fokin2002@mail.ru -dante_xxi@mail.ru -eseni9@mail.ru -dmytriy.suslov@gmail.com -rapheroes@mail.ru -pavel08041983@gmail.com -ilgiz2012@gmail.com -maks2546@mail.ru -e.m.e.l.y.a.n.e.n.k.o@yandex.ru -dibiz-2000@mail.ru -maria.suslova.0303@gmail.com -artteq@gmail.com -info@zakonnoepravo.ru -sultik009@gmail.com -glms.eugene@gmail.com -total100@ya.ru -rubtsov.alexander@gmail.com -vdmfg@mail.ru -undead.koroleva2012@yandex.ru -vlad_timoshchenko967300@mail.ru -komplast@list.ru -guzel-khismatullina0@rambler.ru -mishachepurnyak@gmail.com -dolia@mokselle.ru -v.kostandyan@bk.ru -mitja.smirnov@gmail.com -ramils.email@gmail.com -yevseev@mail.ru -prihodiko-anna@mail.ru -horin1963@mail.ru -timofeev.a.k@mail.ru -imamovdan@mail.ru -ant.kutt@yandex.ru -dumboslon@mail.ru -quol@inbox.ru -igorfedorenko@mail.ru -n.baymurzaev@gmail.com -ivanboyko2000@gmai.com -arti_dag@mail.ru -megafabr@yandex.ru -edwardb@mail.ru -progstud@mail.ru -bogdangolovatyi@gmail.com -rafaelmusic@yandex.ru -91raykard@gmail.com -2192592@mail.ru -lavrukhinvladimir@yandex.ru -pavelgusynin@yandex.ru -natalia.papushina@yahoo.com -marugo@mail.ru -0lab0ro4mic@gmail.com -greenbox-i@ya.ru -idezussi@gmail.com -mal.pascha@yandex.ru -sasisachko@gmail.com -kokotov2003@gmail.com -bataevai@me.com -a89671231920@gmail.com -r4mstein@ukr.net -superasus46@yandex.ru -white.clear.light@gmail.com -balena82@yandex.ru -m.b.oper@gmail.com -avebhs.ru@gmail.com -musikaht@yandex.ru -e4ibisoff@ya.ru -cbojiota@gmail.com -kekscss@gmail.com -btabigat@mail.ru -pteamofey@gmail.com -mr.arzumanoff@yandex.ru -blondin4ek.67@gmail.com -chief.dmitry-serge@yandex.ru -leonya_alpiner@mail.ru -sanches123321@list.ru -aicmedia@yandex.ru -proom.news@gmail.com -kasp81@mail.ru -ole99554671@mail.ru -lexx59@gmail.com -lordlordov13@gmail.com -fanat311@yandex.ru -nikita.nadzharov@gmail.com -helltad@yandex.ru -pasha2.05.97@mail.ru -rubina_lena@inbox.ru -akutin22@gmail.com -markina108@gmail.com -sonka.lees@yandex.ru -nfirdavs@gmail.com -irinki@mail.ru -juliag@zeptolab.com -vavilov_alex@mail.ru -aic@skillbox.ru -serega.zar8@yandex.ru -ol-mi-46@mail.ru -vufer@inbox.ru -max.bubnovsky@gmail.com -nick.slaplance@gmail.com -1ilicheva99margarita1@gmail.com -hate2919@yandex.ru -vps-host@ya.ru -gorodnur@gmail.com -opti72@ukr.net -docstud@gmail.com -maksim-belyankin@mail.ru -nifakt1@gmail.com -anton.korovaykin@gmail.com -krvalchuk@gmail.com -kozhevnikovalena@mail.ru -mr.miv@icloud.com -abyxabyxabyx@gmail.com -serezha.dushkin65@gmail.com -dogadinag@gmail.com -danilenko.mvg4@mail.ru -daniil.zemlyanskiy@mail.ru -scorpion2000_13@mail.ua -shaburova89@bk.ru -letchik00@gmail.com -miklsheva777@gmail.com -qq-brand@rambler.ru -gajeel.mta@yandex.ru -chitinski86@gmail.com -iqbolboy@gmail.com -ekaterina_151@mail.ru -rybkin_vm@mail.ru -gamer9754@mail.ru -kafilax@yandex.ru -nova1778@gmail.com -061985vova@mail.ru -tecak.92@mail.ru -jozgik1995.02.20@gmail.ru -alexnoginov@gmail.com -stadnikov.pasha@mail.ru -hannakulikovast@gmail.com -alexnif@bk.ru -fin-com@ya.ru -kray.mister@mail.ru -andy_hs@mail.ru -mvstark@mail.ru -chernyshov8@gmail.com -yuliyahil@gmail.com -prokhorovich06@gmail.com -retot987@gmail.com -rommmale@gmail.com -kulish_12@mail.ru -yura_28rus@inbox.ru -lenchikkity@mail.ru -fm@wehive.ru -j.haritonova@inostudio.com -silwerlerman@yandex.ru -magazin.monstrov@yandex.ru -milomory@gmail.com -pog_sasha@mail.ru -valeriimalin777@gmail.com -fpa.stu@rambler.ru -sergteletrade@gmail.com -0897543@mail.ru -victorp99@rambler.ru -slinkova.fl@mail.ru -ivan.shchekin@gmail.com -nskkit@gmail.com -kujilaku@rootfest.net -shevchuka@gmail.com -wansashawan@gmail.com -legeev12@gmail.com -tancor_v_kedah@mail.ru -timsc1@mail.ru -ismoil.shifoev9494@gmail.com -vadimshabalin1994@gmail.com -zarptic@mail.ru -zamiraa@mail.ru -ciberus.ps@gmail.com -tpoint1@yandex.ru -drejko.ev@yandex.ru -tsomuk@yandex.ru -2trasher@rambler.ru -naurale@yandex.ru -faksmodem@yandex.ru -hoop-laq@mail.ru -romqa.guard@gmail.com -root@codemy.ru -ly4nisa@mail.ru -vlltrn89@gmail.com -kirajanowicz@gmail.com -3sdevda@gmail.com -nkotelina@gmail.com -olih.fura3214@gmail.com -valis03@mail.ru -thebestholiday@mail.ru -azemsha@hotmail.com -smthngnew1@gmail.com -rsbk73@gmail.com -dashtoyan@foxbox.studio -putilinav02@mail.ru -veroni4ik@gmail.com -cucumbernotgood@gmail.com -ustimov@osb1.ru -irynagillis@gmail.com -ya.m2soft@yandex.ru -zaporozhanka@rambler.ru -ahasaya@mail.ru -ivan@restorix.ru -johnhamsilver@mail.ru -eu.parhomencko@yandex.ru -danikanisa@gmail.com -vanya.alanger@yandex.ru -irishashvez@mail.ru -smirnov.kirill89@gmail.com -k_xc@mail.ru -air1@mail.ru -georgy.pashkov@acronis.com -svetlana.volokhova@gmail.com -ylanava13@mail.ru -spasiboidhostkz@yandex.kz -g.n.r93@mail.ru -pavelspetrov@ya.ru -xfter16@gmail.com -merridie@tempmail.de -jokest16@gmail.com -m.aksenov1996@mail.ru -dvinnik@yahoo.com -s.denis_2001@mail.ru -mr.hyman63@gmail.com -kilyas13@mail.ru -erezvinskaya@mail.ru -maznevm@mail.ru -msednev@bk.ru -d6232@bugmir.net -student.89@list.ru -green2536@yandex.ru -abushik@mokselle.com -dsolomennikova@gmail.com -shavcat@ya.ru -natc_999@mail.ru -oyaroslav2004@gmail.com -alvk3@yandex.ru -79093936607@ya.ru -andrey732@gmail.com -mikhail.pak@kor.kz -a.voronina@inostudio.com -aosns@ya.ru -tsobolart@gmail.com -afonin123@bk.ru -b.davletshin@gmail.com -danil.vit@gmail.com -alexmtu@bk.ru -anatoliy_p@ukr.net -idite.vi.nahuy@gmail.com -komyakovyuriy@gmail.com -mvoparin@ya.ru -plastinina.marina@gmail.com -fzovpec@gmail.com -nazarova-evg@yandex.ru -mr.raychenok2@mail.ru -alwin.enx@mail.ru -albert@gestiv.ru -hazhaev@gmail.com -dyrnoj@bk.ru -igor_sobolev_87@mail.ru -gladiator.maksim1992@mail.ru -3d.integrac@gmail.com -poyarkovdv@gmail.com -roxan312@mail.ru -akhmalisheva@mail.ru -fridenbergav@ya.ru -sherbakpn@gmail.com -north1star1@gmail.com -kira.yakuhina@gmail.com -elgus2007@yandex.ru -magomedeov.maga.2011@mail.ru -bltema@mail.ru -11vitya32@gmail.com -lixsa2001@yandex.ru -plamadealamihailmihailovici@mail.ru -isaevm97@gmail.com -svitankov@yandex.ru -vladka26092006@gmail.com -kashkonstantin@gmail.com -vladimir0102030405@gmail.com -artem-v-v@mail.ru -belokrylov.al@mail.ru -lisozersk@rambler.ru -zxanderson@gmail.com -goldenvetas@gmail.com -mory4ok24@gmail.com -69923592@mail.ru -ryaryzhnov@mail.ru -osendo1411@gmail.com -hellonasnas@gmail.com -irina.kisik@gmail.com -kholkins@mail.ru -mimicoze@gmail.com -irakliymarder@gmail.com -bezlad1994@mail.ru -kornbkumchen@yandex.ru -progres5@yandex.ru -leotta@ya.ru -nikolay.ahmetyanov@gmail.com -ddependence@yandex.ru -rom-1981@mail.ru -tremor_cyborg@mail.ru -serstalk@rambler.ru -kensitel24@gmail.com -lyc2005@yandex.ru -bigsmouk-ice@mail.ru -inoutdoor@yandex.ru -gromova1_1996@mail.ru -katala_88@mail.ru -alika.nozadze@yahoo.com -Bess2010@inbox.ru -romanromanov.1999@yandex.ru -t_o_r_t_i_k@mail.ru -salofoot@fermastudio.ru -adminbank@mail.ru -egorchik.holoshenko@gmail.com -ukrurcom@yandex.ru -kitt.diz@gmail.com -aburlin@mail.ru -alinarus1986@mail.ru -maildemid@mail.ru -gen_jena@mail.ru -dimonbeerr@yandex.ru -dasha031987@gmail.com -rubtsov.de@gmail.com -nesteev@mail.ru -dubrovinaelena1@gmail.com -m.leybova@gmail.com -farend@mail.ru -laukart75@gmail.com -dpn996@yandex.ru -yoga@satvasamui.com -alexandr.ortin@mail.ru -pariah93_93@mail.ru -bershonok@gmail.com -playstudio@mail.ru -carevk@inbox.ru -nikutski1380@mail.ru -mmf88@yandex.ru -taranov@sebbia.com -njarkih@gmail.com -iq575@yandex.ru -suharev-dima@mail.ru -pishna.webdev@gmail.com -feelme92@mail.ru -googelru@gmail.com -duckart_av@mail.ru -redfoer@gmail.com -dimache88@gmail.com -rodich1@yandex.ru -manitgroup@gmail.com -a@f-id.ru -vorohoff2011@ya.ru -htconsss@gmail.com -10175@inbox.ru -stanislav.usoltsev@gmail.com -saifullina.ilyuza@mail.ru -dmitry.apollo@ya.ru -mmmikhailov@gmail.com -mr.logosh@gmail.com -adlyowlprints@gmail.com -katerom28@gmail.com -9330733@mail.ru -ekaterinawork@mail.ru -den9807rv@gmail.com -listopadof@bk.ru -mamaartemq@yandex.ru -olzzza@yandex.ru -bru.katerina@gmail.ru -efim@shuvikov.ru -vadimka2002@ukr.net -mvbogdan@ukr.net -x-boxz007@inbox.ru -alex.cheys@gmail.com -mee8@yandex.ru -rezolutx@gmail.com -millionaire_kg@mail.ru -wentorn@yandex.ru -123qaz27@rambler.ru -dialoggg1994@gmail.com -anker200@yandex.ru -arisha_koshe4ka@mail.ru -prolyudmila@yandex.ru -lbrnfyn2158@gmail.com -rozental.igor@gmail.com -alion.dim@yandex.ru -anlupandin@gmail.com -potapenkov.oa@gmail.com -ananastasya56@mail.ru -mareta.201571@gmail.com -dania87@mail.ru -kashay777@yandex.ru -ioan_bykov@rambler.ru -azohnvej@yandex.ru -theyosaman@gmail.com -afy.96@list.ru -xxnikolayxx@gmail.com -chuprin-dmitriy@mail.ru -prolyidmila@yandex.ru -tanjusik89@mail.ru -p-evgeniy87@yandex.ru -buddabraz@gmail.com -kromax06@mail.ru -mkostenova@ya.ru -grandger@mail.ru -pavel@zamorev.ru -kykyshonok88@gmail.com -adv1989@mail.ru -marm@inbox.ru -logvinovski@gmail.com -kgbjkvb@gmail.com -karbovskaya@mail.ru -12evgen@mail.ru -mr.ken87@yandex.ru -vostok580@mail.ru -saimovs@mail.ru -slava.s63@list.ru -ktsf33@gmail.com -alevtina.i.danilova@gmail.com -dostow4061416@mail.ru -vizitis@bk.ru -s.s.xv@mail.ru -belart31@yandex.ru -bybelov@gmail.com -gedsas1994@gmail.com -franky_freek17@mail.ru -etray7@gmail.com -ocenkaperm2012@yandex.ru -assy_zver@ro.ru -irinash@zeptolab.com -anna-1804@mail.ru -nicolachernobaev@gmail.com -yauheni.r@mail.ru -micha.drozdow@gmail.com -aselya.bekenova@gmail.com -evillorde@mail.ru -help.helpsetup@gmail.com -vovaslv@ukr.net -vilislac@gmail.com -vad134.64rus93@mail.ru -savielii31@yandex.by -planktiskun@yandex.ru -ms@aic.ru -rakursmedia@gmail.com -moriv08@yandex.ru -mary@ihome.ru -greyplay@mail.ru -v.alex.lg@gmail.com -ima.chislo@gmail.com -k.dima14@mail.ru -kilazer.x@gmail.com -coruts2012@yandex.ua -shtern_62@mail.ru -iskusnov@mokselle.ru -ash700days@gmail.com -witaalex@gmail.com -emmahovhannisyan555@gmail.com -apeshin2014@yandex.ru -yurinbu1955@gmail.com -alex@titul-spb.ru -ivan.kravchuk166@mail.ru -libol5000@mail.ru -vladeshestakov@gmail.com -aytigor@gmail.com -instaparadox2016@gmail.com -vyacheslav032015@mail.ru -liza-gorbun96@mail.ru -zwitterlos@mail.ru -tony.k96@ukr.net -matrix200692@gmail.com -nikita.vacuol.77@mail.ru -shulindelu@gmail.com -nettaharrisni@gmail.com -helloandrei@mail.ru -shityukoff@yandex.ru -dmitrysolovev2015@yandex.ru -kusskaev@yandex.ru -wizzzart@gmail.com -akostya97@gmail.com -luckygift@mail.ru -fess932@gmail.com -lerochka1094@mail.ru -julia-smirnova-90@mail.ru -webar4i@gmail.com -bardak.keen@gmail.com -a13xand3rne@gmail.com -sonyacreeper@gmail.com -kotans@inbox.ru -paa@corp.aib.ru -olechka.kv@gmail.com -petek959@gmail.com -odil.bukh@mail.ru -ekozhevin@gmail.com -symchuk.andriy@gmail.com -podariden@gmail.com -hgumerov1976@gmail.com -mainfilter@ya.ru -verrsus@mail.ru -saymon989@gmail.com -abu_amina1@mail.ru -hasanov_77777@mail.ru -khakifeva@croc.ru -goloviy22@ukr.net -ufa20@mail.ru -vk.fb.smm@gmail.com -perepelkin.serge@gmail.com -arzew@mail.ru -senator92@bk.ru -irina.huchak@gmail.com -shegolaev@mail.ru -murcentr@mail.ru -yuriy.chetverikov@gmail.com -01_ramazan_01@mail.ru -a.a.sizikov@mail.ru -chikist96@yandex.ua -vlados-ik@rambler.ru -semenyuyk@yandex.ru -khaaan@mail.ru -a.zhir@yandex.ru -k.logvynenko@promodo.com -marina.kontaurova@lge.com -onoprien@mail.ru -vladsadriev@bk.ru -aaa_rostov@rambler.ru -katedukhnay@yandex.ru -rknuhov@mail.ru -krabster001@mail.ru -karima.ytp@mail.ru -strekozec12@gmail.com -aleksnf1@yandex.ru -aponomarev@rambler.ru -adfhfadhdaf.dafgdfagdfagdaf.10@mail.ru -demidre@ya.ru -snake1234567890-1@yandex.ru -osagadieva@mail.ru -riddle84@mail.ru -stdos@mail.ru -pugikom@stexsy.com -bravo.johnny@yandex.ru -lileklive@mail.ru -joke2998@gmail.com -kuprianovo@yandex.ru -newenergy1983@gmail.com -ageewa@gmail.com -skop.1984@mail.ru -lavoki@divismail.ru -identi4no@mail.ru -pavel.anix@gmail.com -pavel.egorow2015@yandex.ru -osamoylenko@gmail.com -2037473@ukr.net -hannah.ilbl8@rambler.ru -ilyabogdanow@gmail.com -mish6@yandex.ru -popkov@aic.ru -mazlov1989@gmail.com -dsalocin4119@yandex.ru -kuznetsovaelena1@mail.ru -direktorcha@mail.ru -ladyplastic@mail.ru -greenstone.app@gmail.com -hodkir@yandex.ru -dansidorov@mail.ru -sokoloff.work@yandex.ru -aleks.2001.murman@mail.ru -amitei@mail.ru -vl.tem@ro.ru -lina.valishina@gmail.com -dimon7773@gmail.com -tryhardpls@gmail.com -kittydiz@mail.ru -antifea@yandex.ru -sek41306@dsiay.com -warfacemed2000@mail.ru -buh@mu-cb.ru -shibanov.71@mail.ru -catto-cat@yandex.ru -sergeycairo@gmail.com -sasha_alex_balashov@mail.ru -ririnlririnld@gmail.com -ya.ewrty@yandex.ru -vysotin_dima@mail.ru -krivenko_s@mail.ru -ilushkeens@yandex.ru -sagidullin.nail@gmail.com -ivanhadas7@gmail.com -belmuz.tv@mail.ru -test524@test.com -auarira@gmail.com -rimo25@yandex.ru -areopaq@gmail.com -katbelova1997@mail.ru -farorunn@gmail.com -3169658@gmail.com -shapka001@bk.ru -andrayosipov@gmail.com -cerf.negfz@mail.ru -tonna100k@gmail.com -lookstuff@yandex.ru -vlad_rym@mail.ru -iamtochka@gmail.com -dmitry@sellry.com -sespangenberg@gmail.com -meta01@icloud.com -kludge.exe@gmail.com -k.babakov4441@mail.ru -praga.2015@bk.ru -zadr03_kz@mail.ru -n.filippova@itech-group.ru -bez.b.unix@gmail.com -nechipury@yandex.ru -kisusha1984@gmail.com -bsv@legacystudio.ru -kormachev88@mail.ru -rostarros41@gmail.com -fenix-17@list.ru -lisin.world@gmail.com -i.cnuke@gmail.com -iborzik@gmail.com -sashagorin1973@mail.ru -uzor1@ukr.net -andy44@mail.ru -hundarenkoa@gmail.com -spec4web@gmail.com -big_zyk@mail.ru -mrsaimen02@gmail.com -stasynyo@mail.ru -yarulin.am@gmail.com -aaturlan@mail.ru -i.bobkov@yahoo.com -timofeeva_sofyya@mail.ru -atsoy85@gmail.com -valera1632@gmail.com -pashtynov@mail.ru -ds.s2017@yandex.ru -d.k.kazakov@gmail.com -igor.naumov1988@gmail.com -jane_crispin@mail.ru -t_j_fish@mail.ru -vivi_bvo@mail.ru -chapay10@gmail.com -dvolir@yandex.ru -plonskaya@gmail.com -andrey04072000@gmail.com -sergeimalinin1@gmail.com -sergey.lysov01@gmail.com -a.mailme@yandex.ru -sadsad2@adas.ru -mori_arti@inbox.ru -jedalus@yandex.ru -sarosekml@yandex.ru -zlata.reznickova@yandex.ru -956768@mail.ru -dirubis@gmail.com -sadykov_artem@icloud.com -smilefacelol08@gmail.com -aplusp@yandex.ru -eit0@mail.ru -lesiawuss@gmail.com -paveldudar@gmail.com -tolikpogorelov@yahoo.com -evegroa@gmail.com -aamlhv@yandex.ru -webkd@yandex.ru -lllil@yandex.ru -san-sanuch@lenta.ru -sovenok06.89@mail.ru -assar2012@rambler.ru -melanchuk2013@mail.ru -s-m-n@mail.ru -poison.antonenko@yandex.ru -glaccount@mail.ru -office.vip@mail.ru -flowkrad21@hotmail.com -mincka4.artem@yandex.ru -kerby@inbox.ru -darwin1974@mail.ru -schokkginter@gmail.com -spambox2200@ya.ru -jekonik26@gmail.com -dan98l@mail.ru -aaaa-0@mail.ru -valinor80@list.ru -a.fomenko81@gmail.com -sch48kzn@mail.ru -taurus19901@mail.ru -denisostrovskis1@gmail.com -sergej.badamshin.1980@mail.ru -reddik535@ya.ru -pervukhinma@yandex.ru -jys.naturoil@yandex.ru -jostallie@yandex.ru -adik69@list.ru -metalsenya@inbox.ru -butter_666@mail.ru -gladosgame@gmail.com -morevaeleonora@gmail.com -kravchukr88@yandex.ru -regredo11@mail.ru -sablin.alexandr@gmail.com -artemmityngov2009@gmail.com -ioffe.am@gmail.com -kirillizmailov@mail.ru -saltsova.nata@yandex.ua -maxrusgm@yandex.ru -mkosyanenko@gmail.com -katya_vazhdaeva@mail.ru -golubets.sergey@gmail.com -gusssmiii@yandex.ru -notusx@mail.ru -sermajor123@yandex.ru -ivp110@yandex.ru -temapoker@yandex.ua -tyom.lazyan@gmail.com -zev3b@yandex.ru -art-and-decor@mail.ru -iri6189na@gmail.com -detrond@mail.ru -zakharov0777@gmail.com -pavelvarigin@mail.ru -margarinr800@gmail.com -bramanthe@gmail.com -maksim.strelnikov999@gmail.com -b-ars07@yandex.ru -vdovin.iluha@mail.ru -nl.vitamin@yandex.ru -artem.puzanov@mail.ru -kromsatel@yandex.ru -zybunovmihail@gmail.com -podliza122@bk.ru -pupsichekk@gmail.com -m_2000@mail.ru -gerazlat.9797@mail.ru -yyttoo@yandex.ru -iperevozkin@gmail.com -2333868@gmail.com -alyans911@mail.ru -julia.prettycat@gmail.com -karasev_semen2@mail.ru -svetboris92@gmail.com -grust332@gmail.com -saliga.myxajlo@gmail.com -kenvoody@gmail.com -bezrukov-2005@inbox.ru -albytime@gmail.com -pr-arm@ya.ru -k.v.berezovsky@yandex.ru -ekalexeeva@rambler.ru -dron_andr_2007@mail.ru -vadim1dmitrievich@gmail.com -fedotovevgeni@yandex.ru -maslov.egenii_75@mail.ru -lubashkamilashka@mail.ru -dembell1982@mail.ru -wies@1312s.ru -tpoheb@gmail.com -jeka-sever88@mail.ru -midda7@mail.ru -nikolay.tkachev.1998@mail.ru -79060720737@yandex.ru -tati.lazareva@yandex.ru -vova.samodelov@mail.ru -turkin1007@mail.ru -louldigger@gmail.com -a.v.vostretsov160@gmail.com -sererg@yandex.ru -antonvasilenko2002@gmail.com -alex09@mail.ru -erzess@gmail.com -ivan@ivanov.ru -oxmirer@mail.ru -yegor.yakovishen@me.com -cprspb@bk.ru -timakova@fistashki.org -nazarov-danis@list.ru -wsr2015kzn@gmail.com -pprivoda@mail.ru -oljas96_kz@mail.ru -pyosha@yandex.ru -mr.vladislavzaripov@mail.ru -mancv904@mail.ru -sasha_evgan@mail.ru -ash@aic.ru -entervit@yandex.ru -pio875190@gmail.com -artdiezz@gmail.com -alia.nat.it@gmail.com -remont.pc.nb@yandex.ru -ks2007a@yandex.ru -hannasukhadolskaya@gmail.com -k0ttee@yandex.ru -vlabuk52@yandex.ru -mirninec@yandex.ru -const-wo@bk.ru -molot877@mail.ru -era.gromov@gmail.com -iam_lex@mail.ru -automirnic@gmail.com -piligrim0898@mail.ru -8931481052@mail.ru -adasd@asds.ru -hasanov85@gmail.com -vazhatu@yahoo.com -mega.bolot@inbox.ru -t_beauty@ukr.net -mixalin@mail.ru -arxiv.my@yandex.ru -ksena@inbox.ru -mailboxua25@gmail.com -veliev-av@mail.ru -web.krage@mail.ru -belashovsergey007@gmail.com -smiley1776@gmail.com -pantera5557@yandex.ru -iguar.k@ya.ru -stark.nonym@yandex.com -bing19@mail.ru -ASteroid2003@list.ru -konstanto33@gmail.com -alekserni73@gmail.com -yaaleck@gmail.com -konasov2000@icloud.com -blinovk@gmail.com -pnz_08@mail.ru -iovomod@inbox.ru -byka72@gmail.com -yugofx@gmail.com -sansey21_03_11@mail.ru -ivlin2000@mail.ru -zhuvagin.pv@gmail.com -d6232@bigmiir.net -unitbox@mail.ru -strategybz@mail.ru -olga.boyko.2001@inbox.ru -f_rest@mail.ru -arisandrey@gmail.com -reg58@bk.ru -viktor.shishkarev@gmail.com -godofwar9325@gmail.com -vladimir_glight@mail.ru -aser721@yandex.ru -ghost013777@yandex.com -alexatro@yandex.ru -evgenia.golubeva2011@yandex.ru -vadimgordenya@mail.ru -uvladz@gmail.com -wanted72rus@gmail.com -so.cute.neko@gmail.com -andrey777@maryno.net -deadprincess4030@gmail.com -mazyar331980@gmail.com -tamtam8420@yahoo.com -nikitin2110@mail.ru -angenispb@mail.ru -v_vyborg@rambler.ru -www.snowfall@mail.ru -cinonyx@mail.ru -zemelka228@mail.ru -ya.iliagusev@gmail.com -nestetion@yandex.ru -ntomiko21@gmail.com -koropov@mokselle.ru -markopops@gmail.com -artem.alekseevich@bk.ru -andreybot@yandex.ru -lyutoev.pavel@yandex.ru -ananimys135@gmail.com -valeriyafrolova21@yandex.ru -yusupowa.alfia2017@yandex.ru -nivshina@mail.ru -aleksk75@mail.ru -gryzhin04@mail.ru -denisbryuhanov@gmail.com -leonov.leonel@gmail.com -mashaivanova123456789@mail.ru -damir@povprib.ru -kalina8208@gmail.com -evgm.mash@gmail.com -pmerkulov_mb@mail.ru -premium15@ya.ru -gardant@list.ru -nkhotyanovich@gmail.com -alex.goncharov@ukr.net -granit98@mail.ru -tramplucker@gmail.com -gor.abrahamyan1993@gmail.com -glanass15@mail.ru -twoflouers@yandex.ru -kaspi@skillbox.ru -galcionok2001@mail.ru -koresh1608@gmail.com -sereginson@gmail.com -megla99@mail.ru -marshikspeed88@yandex.ru -makushatnik@yandex.ru -macwin33@gmail.com -denisshakhtar@gmail.com -bakovandrey@gmail.com -lemma.ka@gmail.com -a.kadyrov@bk.ru -promenergo.ch@gmail.com -shmakov-gennadiy@mail.ru -ole61@yandex.ru -muraveva.julia.2013@gmail.com -aleks-don@mail.ua -mbf23tb@gmail.com -kuprianovao@yandex.ru -rimmabe777@mail.ru -valera.shadrin.1999@mail.ru -nikros2008@mail.ru -i.h8.people@yandex.ru -gaidamak1999@mail.ru -almatast@yandex.kz -selv77@ya.ru -xaker1730@ya.ru -y.foot@yandex.ru -hattam@mail.ru -virt@mokselle.com -www.pepilota@yandex.ru -voypan5@gmail.com -suzuka030@yandex.ru -ikey0172@mail.ru -markovskaya_88@mail.ru -v.korolev87@mail.ru -mishkayemets@gmail.com -hardmade@mail.ru -dilyaasanova@yandex.ru -eurobich@gmail.com -sinlolipop@mail.ru -andreyaa1973@mail.ru -concertfahmi@gmail.com -bakhbk@gmail.com -for_j-o-b@mail.ru -avartru@yandex.ru -mihailov.di@mail.ru -anna_bes@mail.ru -ezhykov@yandex.ru -pr-sido@yandex.ru -kopirayter1@yandex.ru -korotaeva66@bk.ru -axelionex@gmail.com -dimel123@mail.ru -rodion13@list.ru -abdullaiman06@gmail.com -fahtom091@gmail.com -m0chk0z-steam@mail.ru -deluxenight@outlook.com -isomadinovakmal1997@gmail.com -mrsimakoff86@gmail.com -ysh-ysh@rambler.ru -upodolsky@gmail.com -koala@inbox.ru -avs15.15@yandex.ru -cool-lp@mail.ru -maxim1992@yandex.ru -frostoffman@gmail.com -dilyaasanova@gmail.com -vnazarov777@gmail.com -777percyjackson777@gmail.com -shchepv@mail.ru -pyshenko@mail.ru -andykirill@gmail.com -idufvhaslivu@mail.ru -vadim.egorov@gmail.com -sotnikova.iuliia@gmail.com -sfsartiomprogramming@gmail.com -y10b@ya.ru -ahmat.taukenov@gmail.com -maxim_91@inbox.ru -savelev.na@mail.ru -legas888@yandex.ru -agelkaty@gmail.com -sunnyplush@inbox.ru -bb_l@bk.ru -ohanyanart@mail.ru -lesnik900@mail.ru -talgat.alimov@mechta.kz -ibragim.alimgereev@ya.ru -deni.ottoy@gmail.com -stancentrum@gmail.com -timonlondon@hotmail.com -aweqweqe@ao.com -irinfito@mail.ru -sacha_cool@mail.ru -vog888@yandex.ru -faraola_u@outlook.com -mb2043@yandex.ru -omelkate.ok@gmail.com -oreshko_pn@mail.ru -arter_007@mail.ru -forester37@yandex.ru -ufakirill@gmail.com -g.v.snake@mail.ru -web-master-plus@mail.ru -naiveloony@gmail.com -crownblackss@gmail.com -itachi_zzz@mail.ru -work.kireev@gmail.com -mad-dimon@mail.ru -stas.strelets@gmail.com -stanislav.vir@gmail.com -nfeonov@gmail.com -reriza.spb@gmail.com -bhawk3@yandex.ru -manzhulov@gmail.com -iq.panda@ya.ru -pavel.dunaev.1989@mail.ru -pavskaja@mail.ru -sinsilent@outlooik.com -dhany007@bigmir.net -goldmanrodion@gmail.com -proapadnrey228@yandex.ru -bxx01@ya.ru -alexander.emelyanenko.32@yandex.ru -magemypuk@mail.ru -15-91-59@mail.ru -kenchin87@gmail.com -gloomy_sunday@bk.ru -just1bank@gmail.com -backtothelocation@mail.ru -sekvenseralex@mail.ru -bushinskyr@askona.ru -zvuk47@mail.ru -bastion.dom@mail.ru -gasfrom@rambler.ru -alpha-pix@mail.ru -interkapitan74@gmail.com -morkarp@mail.ru -kylezbs@mail.ru -blackghost58@mail.ru -alex2kachev@gmail.com -vlad.odies@gmail.com -yusupova.alfia2014@yandex.ru -kirill.bykov@mail.ru -ksu@dliga.ru -alexdouble@mail.ru -sofiya.volkova1@gmail.com -s.kasatkin92@gmail.com -kpa39l@yandex.ru -jirnikov@yandex.ru -sasha_amelina@mail.ru -oks.krichev@mail.ru -4148070@gmail.com -nik.kasian@gmail.com -idris77@mail.ru -ruslan.sabirov.rb@gmail.com -oleg.akimov@mail.ru -teslykww@gmail.com -mail@parfyonov.com -jahnakonda@mail.ru -shatvladimir@yandex.ru -naladswshnikov@gmail.com -romanbinkovsky@gmail.com -jeffent@gmail.com -roma.ssss.73@mail.ru -aic.analytics@skill-box.ru -madhead_85@mail.ru -igorevich70@gmail.com -d380966626674@gmail.com -ms-tasha@mail.ru -kremlyov1992@gmail.com -krutovdv@gmail.com -palamagala@gmail.com -sapsan2411@yandex.ru -susets96@gmail.com -petrov.oleg.asu@gmail.com -iliya212121@mail.ru -kulya675@yandex.ru -serg.drobzhev@yandex.ru -alexandr_n_year@mail.ru -x_rabbit@tut.by -kyzupic@icloud.com -tuskysha@gmail.com -fan2pr@yandex.ru -gfdsa@mail.ru -srg.serg2013@gmail.com -Kozlov_si55@mail.ru -vitkanye@gmail.com -rudometkin2013@gmail.com -artyom.kalyuzhin@gmail.com -mr.experimentator@mail.ru -altron_new@mail.ru -optic969@tut.by -sasha.melbourne@gmail.com -aleksis.perminov@mail.ru -vip.ms.lera@mail.ru -ruffian1984@mail.ru -tanya200772@mail.ru -o.e.gerasimenko@gmail.com -fenpics@gmail.com -palik777@gmail.com -sadboyrtz@mail.ru -iv.valeriy@rambler.ru -gidstrip2@yandex.ru -davronovdilshod@yahoo.com -eleonorayesipova@gmail.com -iiabejic@gmail.com -histar@inbox.ru -rosspalisan@mail.ru -za-alex@yandex.ru -rulka7@narod.ru -str-ibz@inbox.ru -chaplyginevgeny@mail.ru -3dsx@list.ru -radim0007@mail.ru -designprojectt@gmail.com -ataman-dima79@mail.ru -toma.kudryavtseva@yandex.ru -mvsaint@mail.ru -casha.dryaba@mail.ru -sonixbrutt@ya.ru -dima_orsk1@mail.ru -naruto06@mail.ru -lalaviva@yandex.ru -rus-ale@mail.ru -dropzdead@gmail.com -tardismacbook@gmail.com -mamboo12345@mail.ru -aum-consulting@yandex.ru -petrpavlenko2008@yandex.ru -pirota.lena@yandex.ru -vadimvorobeu@mail.ru -dneprovskiy.nick@gmail.com -alt@baikal-internet.ru -vladis.balandin@mail.ru -tarasokin@tut.by -victoria.nikolaeva@inbox.ru -xumuk123@mail.ru -daria.ardasheva@gmail.com -sortedmap@gmail.com -vip.ryzhenko@bk.ru -inso37@gmail.com -vat@enco72.ru -mirt735@rambler.ru -romanuch.bluznyk@gmail.com -c-z-e-c-h@yandex.ru -zubchikmv4991@mail.ru -d.masineva@gmail.com -cat-www@mail.ru -vovkakunts@gmail.com -katerium@mail.ru -polovincev@gmail.com -da-kabirov@yandex.ru -a-lonehunter@yandex.ru -gubin915@gmail.com -7306692@mail.ru -julia91_yahoo@mail.ru -vite184@rambler.ru -tagfelix500@gmail.com -belocerkovecden@mail.ru -readu2013@yandex.ru -alek5andr.grv@gmail.com -samaraqwerty63@gmail.cpm -dimamail99@bk.ru -stas.krukovsky@gmail.com -p_savinov@list.ru -somalissas@gmail.com -andrey.domakhin88.com@gmail.com -melichaev@gmail.com -pajasu@gmail.com -svettlantik@rambler.ru -latynineugene@gmail.com -nikolletss@gmail.com -shade161001@gmail.com -natzero@mail.ru -ninon.sh@yandex.ru -rs@aic.ru -vaskinanas@gmail.com -a.rybalov@mokselle.ru -sam_smith@inbox.ru -dduren@mail.ua -timoninv13@gmail.com -polisvet.rus@mail.ru -lepon@bk.ru -badaboom_d@mail.ru -89133110144@ya.ru -primo1@bk.ru -designe17@mail.ru -dima-fomenko-1996@mail.ru -hasanshadiev96@mail.ru -kompaniyetsmarina@gmail.com -rdn61@mail.ru -il@bvdp.ru -katherine-shh@yandex.ru -kirillko-inc@yandex.ru -daria-risya@mail.ru -aliona@zmeeva.ru -amuzhichek@bk.ru -teeemke1@gmail.com -alexeimakarow@gmail.com -fabramov@expertsolutions.ru -zhan27.87@gmail.com -vip.proxy2015@mail.ru -fric3lo@mail.ru -khabibulin.t@gmail.com -alla.kolomiets@gmail.com -prograam98@mail.ru -anton.alyoshin@hotmail.com -aliyaibadildina@mail.ru -dante.net@mail.ru -vitos123@gmail.com -d200000@bk.ru -scepteroff@yandex.ru -andrvel@gmail.com -pp123a@yandex.ru -jarik611@mail.ru -zenek_tl@mail.ru -tanyakiss87@yandex.ru -anastasiya.nazemceva@mail.ru -rdateam@yandex.ru -deniszvagin318@gmail.com -roman@proskurnin.ru -ya_arman@bk.ru -rashadan2007@mail.ru -stepanow.tolia2012@yandex.ru -kinash@ro.ru -wecherkinaanna@gmail.com -sasha.lshgo@yandex.ru -klike@bk.ru -zhuk@host-kmv.ru -www.denis545@mail.ru -dretiomz@mail.ru -dine77e@gmail.com -d.aijana@bk.ru -marina.schtanskaya@mail.ru -work-111@mail.ru -vladimir-1044@yandex.ru -8118eee@mail.ru -oborotistova_m@mail.ru -chel200807@yandex.ru -tomsk777@list.ru -aleks.khaikin@gmail.com -dimpolozkov@gmail.com -o.ozerov@bitrix24.ru -regione-2000@ya.ru -guppik0@gmail.com -vladsemuk@gmail.com -bog4o2011@mail.ru -sashachigrinov@gmail.com -aasstr1@mail.ru -aleksey.kapinos@mail.ru -andrettiks@yahoo.com -p_orlov@list.ru -poluakov2010@mail.ru -soft-bi@mail.ru -puponina.irina@gmail.com -resad.mail.ru@mil.ru -macs-templier@mail.ru -polly.kudelya@gmail.com -l.gafurowa88@yandex.ru -info_for_programmers@mail.ru -13malix@gmail.com -smaslenikov@zeptolab.com -pr7485@gmail.com -skiminok2005@rambler.ru -pavelrybin@lenta.ru -sir.superlex@yandex.ru -ilya.raspyatnikov@yandex.ru -ekarniymamay@mail.ru -rinat.it2016@mail.ru -not123t@rootfest.net -temixis@hotmail.com -antonikov.ivan90@mail.ru -annanowo@yandex.ru -eldar-aliev-2017@mail.ru -valogukov@top1mail.ru -jager.flash@gmail.com -9130171848@mail.ru -master1987@mail.ru -npg2009@rambler.ru -sheniachiglazki@gmail.com -delo@jet-mix.ru -ivan@mymediagroup.ru -serena.99@mail.ru -test@test.com -est-pismo@yandex.ru -lexakrut@inbox.ru -alexz1983@mail.ru -ermolova_zaya@mail.ru -photolebedev@gmail.com -chernoblbrains@mail.ru -bringmih@mail.ru -danil.kdo1@gmail.com -znart3@gmail.com -llellcn@yandex.ru -h0044zai488@mail.ru -gag_chv@mail.ru -a-cheap@yandex.ru -pfk083@mail.ru -yota@skillbox.ru -marketolog@webelement.ru -irregularr@mail.ru -masha-may@yandex.ru -sergeyan2007@yandex.ru -minjailo1@gmail.com -shinfo@bk.ru -malenkaya.grafinya@mail.ru -89501940950@mail.ru -jump-and-jump@mail.ru -sandra1509@yandex.ru -messingno@mail.ru -lsergeu@yandex.ua -aleksandroff7@yandex.ru -mihail-kadin@yandex.ru -irisdisel@yandex.ru -glazunov.99@mail.ru -g.zheka2000@mail.ru -yuapollo@yandex.ru -ainf17@ngs.ru -bedew@yandex.ru -niura.mun@yandex.ru -mix201390@mail.ru -anatoly.romanov@bk.ru -nellimaslova2017@yandex.ru -vinigiska@yandex.ru -miriamkrips48@gmail.com -61lased61@gmail.com -aleynikoff@yandex.ru -marinka.ustyanceva@gmail.com -matv-alex@mail.ru -glebmedvedkov@mail.ru -tamarita@list.ru -skp_15@mail.ru -y.robocopov@gmail.com -n0rv@yandex.ru -zet11111@bk.ru -skayler_rays@mail.ru -vladimir_lichko@mail.ru -info@hthelp.ru -iluap@bk.ru -superbentley@mail.ru -grandkseniia@gmail.com -info@profi-26.ru -jack@creo.od.ua -elena@citrus-soft.ru -tretyakov2511@bk.ru -blvi.vladimir@gmail.com -t_garenskikh@mail.ru -sasha_pxa@mail.ru -kvladimird@gmail.com -harikomp@list.ru -egor@povshok.ru -zandlark7@gmail.com -a.fomin@escript.ru -dondo2016@bk.ru -rina2008@mail.ru -poplick@mail.ru -elizavetachernaya@gmail.com -ilya.teterich@yandex.ru -alebor217@yahoo.com -vfmd@mail.ru -tmusina@bk.ru -amamaev12@gmail.com -mihael20@ngs.ru -vovakalypov20@gmail.com -challiho@gmail.com -x.callous@gmail.com -7393251@ngs.ru -tanjushka_1986@mail.ru -info-tehn@lenta.ru -manas012054@gmail.com -zh.i.o@yandex.ru -wiwyndra@gmail.com -koncovenko@mail.ua -tretyakoff.anton@gmail.com -ivanov-55@bk.ru -levkons174@gmail.com -donder@yandex.ru -softmay@inbox.ru -kobajiehko@yandex.ru -7944.79@mail.ru -john1001@mail.ru -i.alekseev@a-pricep.ru -dimab4206@gmail.com -ipolinko@gmail.com -korbolaynen@mail.ru -vika095@yandex.ru -nikita.maximenko.37@gmail.com -anton.alkhimov@mail.ru -ilya.dolgushev@yandex.ru -albertsurikov@yandex.ru -maya.listopad@gmail.com -niki-1@yandex.ru -99mnds@gmail.com -recoil@mail.ru -agressive.channel@gmail.com -andreylovechristana@mail.ru -zhiraf2015@bk.ru -glebkost.dev@gmail.com -kosalexey98@gmail.com -mr.alik73@yandex.ru -ireetr@gmail.com -484900@mail.ru -kobchenko19@gmail.com -seopakc.05@gmail.com -zlojmoderator@mail.ru -whitegamingyt@list.ru -denis.kryukov@cyberiada.com -ruslan-izmaylov@mail.ru -atarara@live.ru -nickiller221@gmail.com -inna.kiryushkina@gmail.com -gorovcova-marija@rambler.ru -dossanbekzhan@mail.ru -aleksandr.sadontcev@gmail.com -svrusyn@icloud.com -fedor.prokhorenkov@mail.ru -allnewalex@yandex.ru -ssv_vs@mail.ru -reveram2@yandex.ru -ildar25057@gmail.com -shapka002@bk.ru -ladytea@yandex.ru -silberby@gmail.com -jalalovna@yandex.ru -dav777ar@bk.ru -nvv543@yandex.ru -goha@kiosov.com -netfox@ya.ru -msvechnikova@mail.ru -petuhovsergei6@gmail.com -kerriduen_music07@mail.ru -vengence98@gmail.com -ilya.v.chernov@gmail.com -alpch@yandex.ru -director@web-kmv.ru -kristinagushtyn@gmail.com -makspirogov@gmail.com -o.scherbak@promodo.com -uzbek_ussur@mail.ru -aljexei@bk.ru -pylliok1@mail.ru -027evgeniy@gmail.com -limonas1@yandex.ru -sankros@rambler.ru -kattia2592@gmail.com -a-poly@ya.ru -inna-shkolnaya@mail.ru -korolnyy@mail.ru -promobaf@gmail.com -anastasiyabd@zeptolab.com -ax1les@mail.ru -alina_love777@mail.ru -agaev616@mail.com -xa23y2001@bk.ru -aptem240@mail.ru -kol2057@yandex.ru -stixxon@yandex.ru -nicoleas88@gmail.com -ildar7sins@gmail.com -ya.vadim-ko2012@yandex.ru -julfreelance@gmail.com -kfrmalkazainsk@mail.ru -d_m_n04@mail.ru -maksimuk86@mail.ru -anton.serx@mail.ru -cooolmanul@yandex.ru -berezinaiv@gmail.com -abdul_0999h@mail.ru -yalchin.t.khalilov@bspb.ru -kfnkt@ya.ru -boss.evdokim@bk.ru -artemyev-gorchitsa@rambler.ru -maxserkov@yandex.ru -aleksey.kor@mail.ru -hobutt.ne@bk.ru -graf2009dracula@mail.ru -kostia.paharukov45@mail.ru -yulenka26@gmail.com -sabirov@worksolutions.ru -appsdao@ya.ru -dmitrij_solonin@mail.ru -danstreltsov@mail.ru -grindsoul@yandex.ru -egor.efimenko@gmail.com -dokus2@mail.ru -1_djdfy@mail.ru -ivan_smelkov@mail.ru -if.jararr@gmail.com -loskutov-sv@mail.ru -oleg4um@mail.ru -dmitry23455.75@mail.ru -fedulov1999@mail.ru -nserogoskaya@bk.ru -lionskaya@yandex.ru -vafellkaaa@gmail.com -hovhannes.mkoyan@gmail.com -fozi70@mail.ru -andrey95.14@mail.ru -denezhka@mail.ru -galushkin-08@mail.ru -fgh5124@mail.ru -surinov.nik@yandex.ru -samarsky.artyom@gmail.com -kunaiti94@mail.ru -8001059@gmail.com -sergeimalini1@gmail.com -natalyaseredova@gmail.com -ral-han@mail.ru -myipodapple1@gmail.com -zonaform@gmail.com -rapfe@mail.ru -o_belokur@bigmir.net -olegator2021@gmail.com -mailsforells@gmail.com -sochi-97@yandex.ru -pashtet116@gmail.com -anidab70@mail.ru -vovahvan9@gmail.com -1sa-artem@mail.ru -madinaxyt@mail.ru -9258686281@mail.ru -ansserg@yandex.ru -baranova.veronika91@gmail.com -regina_ms@bk.ru -ibo.tak@yandex.ru -alexander.lytvynenko@gmail.com -marianna.sheff@mail.ru -ansierra@mail.ru -solotrant@gmail.com -skovalska@mail.ru -kubz2@mail.ru -mf915@mail.ru -rakleed@gmail.com -vlaaa171@gmail.com -2423a@mail.ru -dsukhanova@gmail.com -am@aic.ru -t.0676572385@gmail.com -lovovotto@gmail.com -glushkov.1974@mail.ru -el_teplo@ukr.net -1993georgiy@gmail.com -mosinsv@yandex.ru -bike5@ukr.net -leo94rak@gmail.com -sharapov.nail@gmail.com -katepainter@yandex.ru -ggeorgiy37@gmail.com -antonyan.aleksander@yandex.ru -8956969@gmail.com -ilias_vip_777@mail.ru -dok111@mail.ru -alex.ipgefer@yandex.ru -alexpallid@gmail.com -chizhyura2012@gmail.com -kniaza37@mail.ru -naskras@yandex.ru -evgenergy@gmail.com -kamilaselena2004@mail.ru -gholovieshko@mail.ru -omusienko@yandex.ru -online4ever@e1.ru -grey50cj@gmail.com -artilus.lependin@mail.ru -veronikavick87@gmail.com -alinca.mv@mail.ru -su_globus@mail.ru -leks_aleks@ro.ru -sabrjan_1998@mail.ru -nikamaliish@mail.ru -noble-rap@mail.ru -nkluchyk@gmail.com -oksana.modern@mail.ru -sv.makushin@gmail.com -sl@adindex.ru -promatip@yandex.ru -larisa66as@mail.ru -alsrkn@gmail.com -dmitrii_gerass@mail.ru -simpsoff@yandex.ru -andron070686@yandex.ru -html5css3.pro@gmail.com -lapshinag@gmail.com -vz06@yandex.ru -dastiniru@mail.ru -nikita.salsky@yahoo.com -lukin68@mail.ru -oksanapitlik@gmail.com -scotkrauz@gmail.com -makamaxx@mail.ru -lidusik.08.88@mail.ru -146133@gmail.com -leontiev-andrey@mail.ru -pavelxarchenco@gmail.com -bogoff@bogoff.ru -wizard_of_paintings@mail.ru -studpraktik@mail.ru -pervushin@avis-dc.ru -garik.seyranyan.1985@mail.ru -m_a_g68@mail.ru -sak_aa@mail.ru -dubnyak404@gmail.com -vasey@ya.ru -ivangrachev1016@gmail.com -designer_ken@mail.ru -romzai78@gmail.com -vds-spb@bk.ru -natasolongina@gmail.com -kristi.verem@mail.ru -jekashohirev@gmail.com -alex@corpmail.ws -nadezhda0154@yandex.ru -d.inter-td@mail.ru -super-mario32@mail.ru -packard12tj@gmile.com -kapriz48@mail.ru -orlova@mokselle.ru -coop01@mail.ru -vasilb@inbox.ru -kristinagalockina@gmail.com -pashkin_disk@mail.ru -popovsky1@gmail.com -gad26032@gmail.com -v.egorov.v@mail.ru -tehnobimbo@gmail.com -sstaytrue@yandex.ru -lyba01071989@gmail.com -uri0605@mail.ru -yaremchukmilena@mail.ru -sozhegov@mail.ru -surikoff.ivan@yandex.ru -myyzza@mail.ru -german.nikolishin@gmail.com -o.siltek@gmail.com -optimizup@yandex.ru -y.bugayov@gmail.com -rioduero11@yahoo.com -xnata.d@gmail.com -kazachenko.vlad1998@gmail.com -frankyskiesblog@gmail.com -dalw.joker@gmail.com -sashastalker28@gmail.com -struthionem@yandex.ru -lolosquare@gmail.com -god_world@ex.ua -belosvat@mail.ru -princesskav@gmail.com -moru10885@mail.ru -denq04@ya.ru -pugachev15@gmail.com -collector673@mail.ru -stanislav.vozikov@yandex.ru -702752@gmail.com -elena-politova@mail.ru -proprofi15@yndex.ru -prinpers_94@mail.ru -vladimir_naumov@bk.ru -gleb.08@mail.ru -ap@ds-p.ru -i.zaria@yandex.ru -mari0492ost@gmail.com -art-len40@mail.ru -qwe@qaz.ru -lilasteciv@rambler.ru -galapub@ya.ru -ayanrbk@mail.ru -george@chanin.ru -prproos@yhg.biz -ob080270@voliacable.com -bmm80@mail.ru -ruc1an1228@yandex.ru -moxkot@yandex.ru -westfet@gmail.com -mikhail_efimov@mail.ru -zhenyalime@gmail.com -sandovin@mail.ru -coftoo@gmail.com -contact.david@yandex.ru -doctrine@list.ru -welcomeman@mail.ru -volkov95@mail.ru -mvpconglomerate@gmail.com -laskinaelena@inbox.ru -romagrog@gmail.com -fedor@whitestyle.ua -irina9463010@rambler.ru -e_v_vlasova@mail.ru -yanickel@mail.ru -royal_boy_77@mail.ru -ehg24@outlook.com -lars-ad@mail.ru -aleksey@sebekon.ru -994677@mail.ru -phantomx@yandex.ru -saterovfree@ya.ru -alex-karamyshev@mail.ru -tores-90@mail.ru -spambin@ya.ru -vasilenko-valeriy@yandex.ru -alpha5@yandex.ru -siforov.poland@mail.ru -merkaba.k@yandex.ru -zhuravlev_ov@mail.ru -sifewate@rootfest.net -har.g@list.ru -2000sk@rambler.ru -tehfoxen@yandex.ru -zshoo@mail.ru -annika79@list.ru -ferum_89@mail.ru -bera09@mail.ua -yuliasoukha@hotmail.com.ar -sleepy_valley@mail.ru -dragon-off@dragon-off.ru -tolyanovna93@live.com -sylim17@mail.ru -nevor08.08@mail.ru -sew333la@gmail.com -mr.daniil33@gmail.com -overvad@mail.ru -ashum.net@yandex.ru -makcnmam@gmail.com -seryi-mihei@mail.ru -mr_habuev@icloud.com -jimbox2001@mail.ru -svetk2801@gmail.com -2016besmart@mail.ru -plato_work@mail.ru -tarxanova_09@mail.ru -master.dia@mail.ru -vladokoliynyk@gmail.com -dsias@mail.ru -eremenko.anastasia@gmail.com -kuben@aic.ru -sanchous-93@mail.ru -mariya.gribanova277@gmail.com -rita10@yandex.ru -a875ymn@mail.ru -elsafatt@mail.ru -incom-rieltor-igor@mail.ru -mkapavaeva@mail.ru -kraisman86@yandex.ru -anatoliiandreev19@gmail.com -79096300008@mail.ru -klimashevskiy_pv@mail.ru -bunbich@avtormedia.ru -anton007@anton.ru -davydovajulia1@gmail.com -dsdspam3365728@gmail.com -muhib_it@mail.ru -mykhol1995@gmail.com -elizaveta_vasileva@mail.ua -alekseyskrobot@gmail.com -neva.7@mail.ru -ozzlik@mail.ru -karbach2016@mail.ru -ann300096@mail.ru -akoziy@ya.ru -gordjelin14@gmail.com -onllygodforgives@gmail.com -rim_hairullin@mail.ru -tisetski_vladislav@tut.by -dlinniy1978@gmail.com -pastanko10@gmail.com -sergegalan@ya.ru -pplahov@gmail.com -arutyunova.k.k@gmail.com -artem.panteleev@aol.com -kifal.red@gmail.com -danashakenova@gmail.com -alexander_karpov@bk.ru -ver-spiridonova@yandex.ru -secalol@gmail.com -remix0550@yandex.ru -html@bedev.ru -tema-16@yandex.ru -pitarda15@mail.ru -dronkin.alexei@mail.ru -denyhka@gmail.com -darurium@gmail.com -tardis_19@bk.ru -bbizkfgu9epp@mail.ru -meetstone@yandex.ru -zarit201008578233@gmail.com -mrgraff@mail.ua -baddady228@gmail.com -atree2010@gmail.com -oskol_site@mail.ru -zimamaxim87@yandex.ua -kaiyoo@yandex.ru -nikolaylukich@mail.ru -mariamnamarso@gmail.com -ternowoi.nickita@yandex.ru -sergei.tran@gmail.com -nikech2009@mail.ru -alex1389@bk.ru -lllvalterlll@yan.rudexyandex.ru -kimakenzz@gmail.com -loginovichlogin@yandex.ru -evg72078357@yandex.ru -streiders@mail.ru -salamov.ramzan622@mail.ru -ziv1@yandex.ru -vya4eslav.granit7-31@yandex.ru -moru10995@mail.ru -ceron@mail.ru -polina1304@gmail.com -ulitinigor@yandex.ru -oleg.tihomirov@inbox.ru -cyberfancool@yandex.ru -anastasiya.lu12@gmail.com -sokwork@gmail.com -19871010@mail.ru -kaducium@yandex.ru -janis.vilcins@hotmail.com -spacecool@mail.ru -oleg_alegatar@mail.ru -shanghaisabina@bk.ru -zvetaan@gmail.com -mapbejl@mail.ru -in.horeca@yandex.ru -z_dzhanaeva@bk.ru -a.dobrian@gmail.com -slawnik777@yandex.ru -bengard@yandex.ru -mihailparhomenko@mail.ua -spolaspola@gmail.com -afedyaev@esphere.ru -asvdesign@yandex.ru -gotcha10@yandex.com -vladimir_vinogradov@icloud.com -kiryushamatmat@yandex.ru -dvnovik96@gmail.com -bizjd@narod.ru -shmpart@mail.ru -mara-777@bk.ru -kozlov_si55@mail.ru -pazh91@mail.ru -makini@ya.ru -sofiafrederica@gmail.com -mininiv89@yandex.ru -sa-fx@ya.ru -yeezydiamond@mail.ru -joy76@mail.ru -artyomzykov@gmail.com -olga.solnetchnaya@ya.ru -zeka175@mail.ru -denis.kirillov@gmail.com -nazarov.design@gmail.com -zluka-kluka23@mail.ru -samozvanka.q@gmail.com -79780079086@yandex.ru -i.knaz@yandex.ru -krisredrein@yandex.ru -my-post@mail.ru -baksoo@yandex.ru -mikhail5544@gmail.com -lazarevs39@yandex.ru -todanilin@gmail.com -bud.koalexandra@mail.ru -b_lisenkov@mail.ru -pavelulitin@fmf.ru -ama@it-keeper.ru -karpov.dahila@mail.ru -vip.alex113@mail.ru -tsaplinayus@ya.ru -bmucheba1@yandex.ru -portnova.ok@yandex.ru -daiv5225@gmail.com -d.lexand@gmail.com -svetlanasarby@gmail.com -algeroles@mail.ru -cinema.ua@ukr.net -jul.obraztsova@gmail.com -rodya.max@mail.ru -okonogray@yahoo.com -timromfed@mail.ru -petroinvest63@mail.ru -cherkavski@mail.ua -zhurb95@gmail.com -ogalin@aevrika.ru -grinoder@mail.ru -xelanik@gmail.com -lofitskayan@mail.ru -tatinacher@gmail.com -dashkiev.m@gmail.com -cposo.pr@gmail.com -timuk98@gmail.com -a.isakov@ruslink.pro -annazayidova@gmail.com -freesleeper@gmail.com -bohdan2003.ua@gmail.com -svyatosls@gmail.com -myxomop0.5@tut.by -oleksastremydlovska@gmail.com -mulevan.alfred@yandex.ru -natasha.skulskaia@gmail.com -rizvan.akhmarov@mail.ru -sl.codemy@gmail.com -zulkarnaev_sergei@mail.ru -kislyakov.2017@inbox.ru -gorod.trav@yandex.ru -hellsballs99@gmail.com -alex.kononov.99@mail.ru -mohave518@gmail.com -s-abakarov@mail.ua -amvoronkovv@gmail.com -nikita_freelance@mail.ru -lonlylokley@gmail.com -hajikarel@rootfest.net -rotoyp@gmail.com -rustic_01@mail.ru -aleck.zolotow69@yandex.ru -alpmats@gmail.com -andrievskiydmitriy@gmail.com -seven2200@mail.ru -myunion@rambler.ru -masha.bystrova@inbox.ru -peter.dmitrienko@gmail.com -sp.rusanov@gmail.com -jujka75@gmail.com -evgeny_gavriluk@mail.ru -dimas86@bk.ru -mironma@yandex.ru -andrei_gavrilenko@inbox.ru -arsenii905@mail.ru -dewerlost@gmail.com -wfwef@dawdwad.ru -rudin_aleksandr@mail.ru -valerik2003@mail.ru -dieselmash@lenta.ru -rockon@list.ru -inv@binka.me -slavazhur@yandex.ru -sinsilent@outlook.com -migunovun@yahoo.com -phinymor@gmail.com -chipsonus@gmail.com -avchuk@tut.by -edkanke@gmail.com -dayan97@mail.ru -kukotin.ivan@mail.ru -tdutyb@yandex.ru -vans86@yandex.ru -mainenko845@gmail.com -axnaf@list.ru -andrey.borisenko22@gmail.com -kronos2k4@gmail.com -yt.mashmello2018@yandex.ru -vladimir_volkov@bk.ru -h8meplease@inbox.ru -notremembering@mail.ru -ilya.arkhipov.89@mail.ru -dereviankovlad87@gmail.com -maksimovanb15@gmail.com -leova2010@yandex.ru -vick.ponomarew2016@yandex.ru -maksimov.design@gmail.com -nasti0901i@outlook.com -vya4eslav2008@rambler.ru -mihrutka82@mail.ru -janein2394@gmail.com -belag2000@yandex.ru -dima-gren@yandex.ru -stanierlol@mail.ru -nikgroma100@gmail.com -a.gaynutdinov.mir@gmail.com -immensee@mail.ru -yupynruslanevgenovich@gmail.com -vampire1813@mail.ru -livan@pochta.ru -bess2010@inbox.ru -nitrohlorid@gmail.com -maks-twin@yandex.ru -alina.ncg@gmail.com -aleks_mihalev@list.ru -wcap113@mail.ru -zarat73@yandex.ru -bva_np@mail.ru -fieldytr@gmail.com -try4e5745@gmail.com -andrei@tiutin.ru -magomedov.maga.2011@mail.ru -vip.group.kg@mail.ru -likerpicfriend@yandex.ru -chiganu@gmail.com -nglk_z1k@mail.ru -lisitsa.lisica@yandex.ru -mvalyutin@mail.ru -laborooptimus@mail.ru -skakun.svyatoslav@gmail.com -golbal@mail.ru -ches.lorena@gmail.com -egorkapups6@gmail.com -evd-18@yandex.ru -vvcvvcvvs@gmail.com -a.sn2010@yandex.ru -zkorall@gmail.com -elizaveta.bandalet@gmail.com -troschand@mail.ru -sekin-design@yandex.ua -geimer.1998@mail.ru -kuan_yk@mail.ru -oly261000@mail.ru -anton940800@yandex.ru -en0009@gmail.com -cement21@yandex.ru -qyp68@bk.ru -papua1992@mail.ru -lukashov@mokselle.ru -mr.vanek.shtepenko@mail.ru -fly2sky7777@mail.ru -tania_kulik_2015@mail.ru -mars302@mail.ru -santa65sh2@gmail.com -fedorvl83@mail.ru -jendobas@gmail.com -valorml@gmail.com -fine_raspberry@i.ua -ek_8@mail.ru -nike.versus@mail.ru -vanyamaslow@gmail.com -alexxlefa@mail.ru -f_rest@list.ru -vkhimochka@bk.ru -1672.1725@mail.ru -file.dyfi@icloud.com -alexey.shklianko@gmail.com -vah.bodia@yandex.ru -vlad.syrotyuk@gmail.com -a.egorov@legacystudio.ru -mzhuravleva1308@gmail.com -galyna.pon@gmail.com -321s12311@mail.ru -ekaterina11b@mail.ru -zuich1999@mail.ru -starkov.igor@gmail.com -danil_lahtin@mail.ru -monahov.igor@gmail.com -axemax@ya.ru -zel-mirra@bk.ru -smagambetov.k@mail.ru -ruban90@inbox.ru -sergserg13@yandex.ru -vaplerij2009@yandex.ru -lipas1@yandex.ru -yakimova.design@gmail.com -datin2012@yandex.ru -ipot@list.ru -kirillrumyantsev1971@gmail.com -morzheedov1995@mail.ru -sos@123-tv.ru -_anor_@mail.ru -novikov951@gmail.com -freeman.111@list.ru -sasha0408@icloud.com -79956230@mail.ru -ivan-gavrilov-2004@mail.ru -polozov_pavlik@mail.ru -t-ormanov@mail.ru -marinakor70@mail.ru -fontan@yandex.ru -ab_surd@list.ru -sander001@mail.ru -saveljev.denis07@mail.ru -metaldan@mail.ru -9nkags@gmail.com -manol.94@mail.ru -lenabir68@gmail.com -pochta-2005@mail.ru -mishkakondrashov@yandex.ru -infogive35@mail.ru -rinat@ick.expert -a-mald@mail.ru -hamomel@gmail.com -alekskolr@gmail.com -va@wearewowagency.com -shoodisalimzoda2000@gamil.com -nikolebedev@mail.ru -m.ronin46@gmail.com -jonson-15@mail.ru -ivan.alo@mail.ru -alsair@bk.ru -leha12345krut@mail.ru -ivan@1c-ka.ru -kosikalina@gmail.com -d-111@mail.ru -tatlybaev@mokselle.com -xxxxcvb@bk.ru -111111l@gmail.com -defident39@gmail.com -m.belokursky@yandex.ru -avskoroff@mail.ru -frostaken47@yandex.ru -pischalkina@mokselle.com -almanza@mail.ru -naviko2104@gmail.com -dmitriy__smirnov@mail.ru -firiulina.mar@yandex.ru -artem.mikola@yandex.ru -altunin71@mail.ru -megafonop19@gmail.com -oleg.gaimalov@gmail.com -vk1.cc.katze.ru@gmail.com -aleks.vik@mail.ru -dyanvi14@gmail.com -9889777@gmail.com -bordarsz@yandex.ru -sj_slipknot@bk.ru -uxworkmail@gmail.com -nikolya024@gmail.com -safarov-ar@yandex.ru -roman_16rus1994@mail.ru -tussupovali.at@gmail.com -my.main1987@gmail.com -ditoo316@yandex.ru -nickcatcom@gmail.com -oleksiinovoseltsev@gmail.com -naftasya@tut.by -polet2107@ya.ru -aldiar.tuleugaliev@yandex.kz -b2671936@trbvn.com -hava1hava@mail.ru -knightdeadd@gmail.com -baikeev98@gmail.com -prostoch@i.ua -gyrka@yandex.ru -stan.stp@gmail.com -lycey-iskusstv@yandex.ru -borisbaranov17@gmail.com -mir000@mail.ru -masik_k@mail.ru -oknera@yandex.ru -kalina531345@gmail.com -marinabush@inbox.ru -stavcd@mail.ru -timur05071986@yandex.ru -ingarokoko@gmail.com -ruslan_mulla@mail.ru -telminov-s@mail.ru -geshakh@ya.ru -l-artem-n@mail.ru -surikov.dmitrij@gmail.com -timslife@bk.ru -gen9938@yandex.ru -istinavv@mail.ru -class01041984@gmail.com -romankox1973@gmail.com -inozeolga@yandex.ru -andrey.poprotsky@gmail.com -xidara@yandex.ru -ivanstsots@yandex.ru -akkeinn@mail.ru -tohafrit@gmail.com -sirius1991dav_asa@mail.ru -a-poly@mail.ru -ramzi_93@mail.ru -evgeniy@le-de.ru -nevostrueff.vital2016@yandex.ru -polozova.ira2012@yandex.ua -spiridonovilja@gmail.com -melloriya@gmail.com -nice.euro2012@mail.ru -konoval.7@yandex.ru -r.magomedov@promodo.com -vannodanilov@gmail.com -gogunov00@gmail.com -den-cherednich@mail.ru -sitese2@gmail.com -alex.frolov.dev@yandex.ru -mark_krush123@mail.ru -lavrinov39@gmail.com -nurekkk@yandex.ru -pavlov.rus.ex@gmail.com -s_malinkin@mail.ru -siomin.vadim@mail.ru -alexsls@mail.ru -govor@ukr.net -verakarbovskaya@gmail.com -den-kosarev@mail.ru -victor.eliseev@list.ru -ananelyubina@gmail.com -voron86618@gmail.com -coderm@mail.ru -runningonaspha180@i.ua -sveta.polezaeva@mail.ru -klepa1st@yandex.ru -zenina.annochka@mail.ru -jokimo@yandex.ru -ibrazhnikov@gmail.com -kriss_tinkaa@mail.ru -vicktany@mail.ru -babaev.aviaok@gmail.com -al.tarin@mail.ru -kostylewa.anas@yandex.ru -gendesign@ya.ru -kidiv8979@gmail.com -dirtysmoke@mail.ru -yurchuk2@mail.ru -tonsoftestosterons1@gmail.com -tamaro4ka90@mail.ru -2889776@list.ru -sotadolesov1@mail.ru -smarthaker@inbox.ru -den7839den@gmail.com -ir.gerehon@heh.ru -nikolay.gerzhan@gmail.com -den.denisik@mail.ru -t.m.bekhbudova@gmail.com -sochiit@mail.ru -nailds@mail.ru -filimoncc@ya.ru -pavel.kup123@mail.ru -ta@aic.ru -engoldo@hotmail.com -spongens@rambler.ru -tma2m@mail.ru -yandexru@icloud.com -99900099900@mail.ru -anastasiya_bikya@mail.ru -timjob3@gmail.com -sefrat1@yandex.ru -olya_sko@mail.ru -anya180296@yandex.ru -lavrovii1911@gmail.com -lysov1995@gmail.com -alex.sibilev@tmd.tv -kovzov1@yandex.ru -faust_chis@mail.ru -volcov.augustin@gmail.com -seregei-melehin@mail.ru -rusyadav777@gmail.com -asquerquet@gmail.com -francois_thierry@mail.ru -utk1@list.ru -aniaabroskina@mail.ru -yana.berezhnaya999@gmail.com -freeman.second@gmail.com -antonyatsenkowork@yandex.ru -a.bagaev1989@gmail.com -ildar.khuzin75@mail.ru -cuyubafas@rootfest.net -androgudo@gmail.com -preyzon@mail.ru -ariv@meta.ua -dasha.linx@yandex.ru -valeriinalimov@mail.ru -razum1411@yandex.ru -zerberget@yandex.ru -anstmironov@yandex.ru -soldatik4513@yandex.ru -maksim.hlebnikov.99.04.03@gmail.com -meistrv@gmail.com -zhukov.den89@gmail.com -a.pudakov@yahoo.com -andgl0681@gmail.com -nurtas.astana@gmail.com -e.izmalkova@gmail.com -zubal96@mail.ru -mirgorodsky@freemail.ru -tymur1983@mail.ru -aasserg@yandex.ru -ibutterfly777@gmail.com -slipknot666_666@mail.ru -zelaleksandr2012@yandex.ru -380954639516@yandex.ua -berga_mont@bk.ru -pirozhok1995@list.ru -dima.nasyrov.10@mail.ru -ceo@pride-m.ru -abrakadavr@gmail.com -sss-74@bk.ru -gulimeo@gmail.com -serglookas@yandex.ru -uta191@ya.ru -vechnoe030490@gmail.com -7501840@bk.ru -aizikaev@gmail.com -iren-i-t@yandex.ru -cmex-feel@yandex.ru -kr200892@mail.ru -eyoush@gmail.com -koshmanaleks@ukr.net -b.druzhinin@gmail.com -ahs2004@bk.ru -vorona_1992@bk.ru -rz@aic.ru -4pavlov@list.ru -pein.777@mail.ru -novozhilov163@gmail.com -vlad593@mail.ru -neuclear95@gmail.com -hatter_n@mail.ru -navi8282@mail.ru -dimanpp1991@gmail.com -Bortsova-n@yandex.ru -kenyey1@bk.ru -ritore@mail.ru -timur.bizjaev@mail.ru -de@aic.ru -galivasya007@mail.ru -tema.9609@mail.ru -reklama_vol35@mail.ru -m89m@mail.ru -natahalp@gmail.com -tsaplin_14@mail.ru -aaallleeexxx918@gmail.com -minne77@mail.ru -19660319@mail.ru -kr_alex79@yahoo.com -boronnikov-anton@mail.ru -wineconnoisseur@rambler.ru -zubandor@gmail.com -zarovski.s.n@gmail.com -edvard557@inbox.ru -art.bages@gmail.com -aranoy15@bk.ru -sea@a-real.ru -a.s.tokmakov@mail.ru -dmitriy.mosolov@gmail.com -fashiongirl24@ya.ru -ksardas-zkd@yandex.ru -ale-xey76@yandex.ru -dvgameover@yandex.ru -alesxxxxxx@gmail.com -sveta11.06@mail.ru -ekaterina_pmd@mail.ru -alexey95uhov@gmail.com -dim8623@mail.ru -mrallow@live.ru -okcana1976@mail.ru -bandaletova2014@icloud.com -barchakov@gmail.com -deniskondrashov@yahoo.com -danilabelyakoff@yandex.ru -ampa1r.pl@gmail.com -skorshuns@mail.ru -boyteleport@gmail.com -rostik.vorobev@ya.ru -gangggaster@yandex.ru -goryukhalov@gmail.com -davoevodova@yandex.ru -ksenia.gorodtsova@mail.ru -sheptun_marina@mail.ru -yarik.tarkan@gmail.com -vova@vovavova.ru -ivan550zero@mail.ru -gremlinn22@yandex.ru -mailbox@art-dinamika.ru -siblecocation@yandex.ru -blade-70@yandex.ru -sahion33@gmail.com -teufel1987@mail.ru -gausf2@gmail.com -kirillbeilin@rambler.ru -carina.bungova@mail.ru -rodina-vera@inbox.ru -sokol4eg@mail.ru -kozhekiiin@gmail.com -elm0790@mail.ru -sidiez@ya.ru -for_new_job@bk.ru -poligon461@yandex.ru -zorin86@mail.ru -razor.88@inbox.ru -dmitryko90@mail.ru -deniden10@icloud.com -bessonov.mrtrof@yandex.ru -aidosgd@gmail.com -aksay_sayt@mail.ru -alexgrimm87@gmail.com -sag.di1992@gmail.com -andrew0@list.ru -ugarova@magora-systems.ru -lena@mura-show.com -251.079@gmail.com -bazhenovas@gmail.com -heia87@mail.ru -galkov@mokselle.com -dimrud@mail.ru -bananadeergod@gmail.com -gazovik7@gmail.com -tik.nus@mail.ru -anastasia.lednik@gmail.com -andrusyak.mischa@gmail.com -yusupovaalfia@yandex.ru -charmfactory@yandex.ru -roman.mas2013@yandex.ru -gral@yandex.ru -igor.rodogor@gmail.com -kedrr010@mail.ru -tsb2004@yandex.ru -32ops@mail.ru -alexjordanperm@gmail.com -iluxa889@gmail.com -adante91@mail.ru -tyoma77@yandex.ru -nabelka@ya.ru -gadzhibekov.nariman@mail.ru -i.flinn@yandex.ru -lelikkor96@gmail.com -petrovmatvey198@gmail.com -arslanali.98@mail.ru -arhipov@mokselle.com -sergeshopmail@list.ru -vitaliy.bagrinets@mail.ru -klaus_83@mail.ru -igumnovaira@gmail.com -lan2002@yandex.ru -optatt@yandex.ru -ed121@yandex.ru -daurenanay@gmail.com -pravo@roskvartal.ru -pipopka@bk.ru -ivansuzdalev@gmail.com -narie.umerova.63@mail.ru -sanzharsurshanov@gmail.com -dushka_07@bk.ru -ogniday99@mail.ru -filiansky@mail.ru -lob-zik@mail.ru -vktmb@mail.ru -andrey.vetrov.04@mail.ru -imprint81@gmail.com -heron.i@yandex.ru -aleksklopot@gmail.com -machaon89@mail.ru -input_chet@rambler.ru -blood44ever@gmail.com -zxc_@bk.ru -shaipovartur@gmail.com -gorodni4evayulia@gmail.com -naa37@yandex.ru -dmitrydolgov1982@gmail.com -andrianovaleksandr@gmail.com -heia@yandex.ru -omegaprime@live.ru -avagyan_aj@yahoo.com -ust_irina60@mail.ru -servaredecaelo@gmail.com -kemper95@list.ru -android-plus@mail.ru -eldos_1608@mail.ru -korkinas74@mail.ru -lestex@gmail.com -187953@gmail.com -igrokest@yandex.ru -arifmetovv@gmail.com -lokki939@gmail.com -z.s.79@mail.ru -jossely@yandex.ru -egor@studiofact.ru -cmakept@yandex.ru -rock.kochetok@gmail.com -smoceone@yandex.ru -tudosandrey@mail.ru -plekhanov2930@mail.ru -ipashkov93@yandex.ru -dimkin141279@mail.ru -1cn1tjrufgux@mail.ru -tirus21@yandex.ru -vitalii_myshenko@inbox.ru -ryabukha.unique@gmail.com -d.letko@articul.ru -leo.cherep@gmail.com -infiniticiti@gmail.com -hmurovichvitalik@yandex.ru -alexmname@gmail.com -creative@svkgroup.kz -krivobokovvv@yandex.ru -bkavt@mail.ru -9262386599@mail.ru -black.hound.labs@gmail.com -bigcityline@gmail.com -jsemashko@yandex.ru -electrus@yandex.ru -merflowlive@gmail.com -baktyren@gmail.com -krbv.gennadiy@gmail.com -bespalov_12@mail.ru -yanchus@mail.ru -ruscaxap@gmail.com -burnaev@tutu.ru -nikolaevgg@mail.ru -ahmet_olzhas@mail.ru -meglioth@gmail.com -alfatest@mail.ru -igor_vano@bk.ru -ustyantsev.mi@gmail.com -khalitovildus@mail.ru -dmanzherin@mail.ru -mrustem@mail.ru -preboe@yandex.ru -chernyaevsn@bk.ru -serjtarannn@gmail.com -sens11even@gmail.com -naderevo@list.ru -lpsosnina@mail.ru -79040166659@yandex.ru -jayalila108@mail.ru -para2003.05.257@gmail.com -poll.sol@inbox.ru -aaanischenko@gmail.com -rapaevi2010@yandex.ru -troyan.stavr@yandex.ua -9981331@gmail.com -ilye1997@mail.ru -konstantin.iv@gmail.com -stasya1004@mail.ru -edwantoshin@rambler.ru -dj_death@list.ru -sesyunin@realweb.ru -vorobjova@mokselle.com -swordman85@yandex.ru -650712@mail.ru -virus665599@gmail.com -slizh.a@mail.ru -leningiv@gmail.com -glebsm@list.ru -8student8@gmail.com -whitera_@mail.ru -ripway@ya.ru -megapixxxell@gmail.com -gvn@artcollege.ru -norkensdrommar@yandex.ru -arman.amandykuly@mail.ru -cibis1984@list.ru -passat-soft@mail.ru -dimonnn9675@gmail.com -ipev54@mail.ru -aspincyuk2@mail.ru -kivodisa@divismail.ru -panov95asb@gmail.com -a.olsh@ukr.net -teg100@mail.ru -vetoshnikova.olga@gmail.com -taim777@ya.ru -splek82@gmail.com -ot-15@yandex.ru -kkarim14@gmail.com -andrei000borisenko@mail.ru -mr_dumka@mail.ru -goryunov.2005@bk.ru -lyurik.freelancer@gmail.com -moralcode@bk.ru -sbissengaziyev@gmail.com -netproblem2009@yandex.ru -amoebiusss@gmail.com -blrop@mail.ru -aidosaldashov62@gmail.com -niozuki@mail.ru -ekaterinacarapkina@gmail.com -nevostrueff.vitaly2016@yandex.ru -belosnegniyart@gmail.com -haker.croha@yandex.ru -nice-impact@mail.ru -artjom.lat@gmail.com -tatyshka78@list.ru -kdz97@mail.ru -miht2901@yandex.ru -mashinque2014@yandex.ru -9446726@gmail.com -proven1966@gmail.com -info@d-element.ru -dontsurrender@ya.ru -tanyas@zeptolab.com -harchenkoelena87@gmail.com -korneychuk_toni@mail.ru -aspinchuk52@mail.ru -tkadiraliev@mail.ru -nm_192@mail.ru -games1029@mail.ru -beksultansuiunbaev8@gmail.com -a.ponomarev@peachdesign.ru -taep4ik@mail.ru -auditist@yandex.ru -asadasd.sda@yandex.ru -raynor73@gmail.com -34ekap@mail.ru -kondratenko.xadner@yandex.ru -denis.x404@gmail.com -oleg.2707.go@mail.ru -pagr89@gmail.com -vpetrova21@yandex.ru -timon-inc@mail.ru -ekaterinas97@mail.ru -orazbek--97@mail.ru -info@avtogrant.ru -customs@tuta.io -polikor-n@yandex.ru -paa186@mail.ru -khaipov@gmail.com -dirol779@rambler.ru -olshanslava@gmail.com -stanislavgrishko@gmail.com -isaakfernand@mail.ru -ser81128552@yandex.ru -dima-sit168@mail.ru -lokograf2@gmail.com -murovsev@yandex.ru -ikolechenkov@mail.ru -dmitriy.k1981@gmail.com -oleglosev19@gmail.com -pulya7@gmail.com -kardv@yandex.ru -logitech310@yandex.ru -lizhen037@gmail.com -dima0056@ya.ru -ezavodchikova@me.com -tlegen.abutalip@gmail.com -islam@cinar.ru -tofeg27@gmail.com -3490053@i.ua -aaandroid@yandex.ru -carap197@gmail.com -tobin@yandex.ru -s.malyutin.by@mail.ru -danya.kuliapin@gmail.com -cprof777@gmail.com -i.alimpiev@gmail.com -radiel13@gmail.com -eduard.pedrosov@gmail.com -alex7km@mail.ru -homemaster.ua@gmail.com -mic-90@mail.ru -openanisx@yandex.ru -grey71@bk.ru -wkatsa@gmail.com -andryshe@gmail.com -234@ff.com -belocerkovecden@gmail.com -konopanton08@gmail.com -tuhbatoff@yandex.ru -ramses.82@tut.by -philatovevgeny@mail.ru -solid-ares@mail.ru -ermolaevilia@gmail.com -mdiadiuk@gmail.com -itgs3311@gmail.com -miregor@bk.ru -webprogrammer77@gmail.com -psoops@mail.ru -max.landscape@gmail.com -cathayraht@gmail.com -stafikus@yandex.ru -blcg0re@gmail.com -royline@mail.ru -mr.ser245@yandex.ru -wolwerine19972511@gmail.com -pastuhov_valentin@mail.ru -fcrfh19@gmail.com -maiseishvetsov@gmail.com -aljaskaolga@mail.ru -palm99.ps@gmail.com -mexanizma@gmail.com -mmm@yandex.ru -ewigschatten@yandex.ru -tanylevko@gmail.com -melnikova.nicka2016@yandex.ru -kylych1@yandex.ru -mishim-p@mail.ru -nqanbarov@mail.ru -dmitry.ivanov@artecbpo.com -tasen.kan@mail.ru -ha@brightstudio.ru -gabb@hotbox.ru -starklll@yandex.ru -inna_73_73@mail.ru -romaskillz@gmail.com -versalio.corbeen@gmail.com -o.filly@yandex.ru -sergeioff@mail.ru -galvai@mail.ru -lia4581@gmail.com -all4me4@gmail.com -shura888@mail.ru -rustambeko@gmail.com -denis.kryukov.8924@gmail.com -den@shestov.info -nemtsev@mokselle.ru -andrey_343@mail.ru -natali.tsybulina@yandex.ru -dmakuha@bk.ru -aleeva.khadicha@yandex.ru -lianora77777@mail.ru -carina-a1@mail.ru -kira.kostenko@gmail.com -akourov87@mail.ru -loremipsumbro@gmail.com -vlad.apanasencko@yandex.ru -politika26@gmail.com -viktor21666@gmail.com -ann_swan@mail.ru -nat_alien@bk.ru -k.e.a-83@rambler.ru -proektzero@gmail.com -andreysh@zeptolab.com -dark.bakanov@gmail.com -re9.2xr@gmail.com -elfxf.1978@mail.ru -wefd@fdsfd.ru -alla.sukhostavskaya@gmail.com -al.via@yandex.ru -evgeny.ryabcev@gmail.com -host_63@mail.ru -tarakanov.v@list.ru -rougsig@gmail.com -bongour@mail.ru -ssmirumir@yandex.ru -mam753@mail.ru -karimmamatkazin04@gmail.com -cyberstranger@yandex.ru -amberleyley@gmail.com -redbullkokowa@mail.ru -stealtherr@gmail.com -maragojeep@gmail.com -insidious_vision@mail.ru -fazeful@gmail.com -makslev87@gmail.com -f239981@mvrht.com -katyami90@mail.ru -makguseff@yandex.ru -geogrii-cobolev@mail.ru -v.poliakov2014@yandex.ru -best875@bk.ru -valerik985@gmail.com -timurchek1997@gmail.com -yaroslavzn@gmail.com -luftirina@mail.ru -kamila45@mail.ru -kuznetsov363@mail.ru -vfkmxbr23@yandex.ru -yagyaev87@mail.ru -xycapo4ta@mail.ru -alex@jabbam.net -steel_pipe@mail.ru -hitman43barshis@gmail.com -vitaliy.galkyn@gmail.com -zfalevich@gmail.com -cssc6262@gmail.com -dima.vorobyov2000@gmail.com -chepurnov2010@gmail.com -kirills0902@mail.ru -v200807@yandex.ru -crunchero@gmail.com -toxicink@mail.ru -fghjtgbhy@gmai.com -dinarhalfin@yahoo.com -tatyana.best@list.ru -skovoroda.vitalik@yandex.ru -pear3200@gmail.com -picturemag@ukr.net -gabeda@yandex.ru -sidenkowow@mail.ru -e.nizelsky@gmail.com -protos995@gmail.com -1w3r5y7i9@mail.ru -mstrognev@list.ru -peterprozhuralik@gmail.com -lesiamaksymivna@gmail.com -ksenija_k@onego.ru -bilyy87@bk.ru -nobody.11@inbox.ru -admitriy.tut@inbox.ru -dwclub88@mail.ru -rish07rt@rambler.ru -dinara_cool@bk.ru -oleweb11@yandex.ru -daria.chertilova@gmail.com -sican@mail.ru -eugened@zeptolab.com -janna_kor@mail.ru -uv00@list.ru -kurah1987@mail.ru -kmogutova@mail.ru -plujnik.egor@yandex.ru -pvashkeba@mail.ru -capital4@ya.ru -infolifecom@gmail.com -n_goryacheva@mail.ru -vals_0791@mail.ru -siglanikk@gmail.com -innnsokol@rambler.ru -arthur.subbota@gmail.com -max-11-101@mail.ru -ashtyrkhun@mail.ua -anna.pogoudina@gmail.com -atos_1972@mail.ru -toevilhell@gmail.com -gycyl2000@mail.ru -faith88@mail.ru -marinaboldova@yandex.ru -seruga2014@yandex.ru -sergei.v.bogdanov@gmail.com -georgekairos@gmail.com -mysample@rambler.ru -ivan.yurga@mail.ru -niyaz.nabiev.1996@mail.ru -lens2002@gmail.com -olga.vertey@mail.ru -rtew@mail.ru -dnzvr@me.com -feyorz@gmail.com -andrayvelitchko@gmail.com -goldsanity@gmail.com -efest_ruslan@mail.ru -zloy.jozheg@gmail.com -narekmanukyan1995@mail.ru -alozik@bk.ru -kstrifonova@gmail.com -korobajr@ya.ru -kori10@yandex.ru -den.voronin.02@mail.ru -melostnoy@mail.ru -maxim.v.varlamov@bspb.ru -nikkals@mail.ru -kotov.inferno@yandex.ru -ivanov.geka@gmail.com -marinemaks@yandex.ru -bogdanofandrey@gmail.com -egor.outhead@gmail.com -gotcha10@ya.ru -79814686875@mail.ru -zaxarka115@gmail.com -grosesdorf@gmail.com -y28yulia@gmail.com -maximpanchik2@gmail.com -blackhawk@yapped.net -mila.la.ana@gmail.com -pavlova-yb@bisys.ru -saidmakhmud.sharipov@gmail.com -serebrier@gmail.com -xs4422115@gmail.com -kaza4kin.k@yandex.ru -arabadji.serghei@gmail.com -vadympk@gmail.com -gorovcova-marija@yandex.ru -design@spaceapp.ru -smackthat5@mail.ru -riverrain@mail.ru -todace@mail.ru -mirasovdev@gmail.com -mr.mesteev@mail.ru -kirfnv@yandex.ru -ceo@chipsa.ru -maks.maks.sru.ru@mail.ru -frolll1990@hotmail.com -ilyapokemon@yandex.ru -maximredko91@gmail.com -levkovich_1992@mail.ru -radu_vladislav@mail.ru -gurinovich.polina@energospb.ru -alexsim1703@gmail.com -meb-aga@ukr.net -kkoty@yandex.ru -oleg.plavutsky@gmail.com -eshapiro@mail.ru -fynart@gmail.com -grigoryan.emil2017@yandex.ru -pavel-samocvetov@rambler.ru -esenova.sofiya@mail.ru -belevich1998@mail.ru -nikpley@mail.ru -assayf95@mail.ru -well12done@yandex.ru -ss@bvdp.ru -tima.75.com@gmail.com -trusevich11711@gmail.com -nikusha.nx@gmail.com -belokamens@mail.ru -stastustyugov@mail.ru -a.spark69@gmail.com -gothic311@mail.ru -zlata_ov@mail.ru -thickchineseguy@gmail.com -nikitapartizan13@gmail.com -strig_elena@mail.ru -ilushasafin@gmail.com -as.kretinin@gmail.com -vetlugpavel@gmail.com -is--mail--1995@mail.ru -ivanpokalyuk@gmail.com -tanki.loogl@mail.ru -mislavsky@yandex.ru -a.reznichenko@clientlab.ru -emrahhuseyinov@gmail.com -24sds@mail.ru -glebsapunov@yandex.ru -e-centre@inbox.lv -asinkritik@gmail.com -sami-mir@inbox.ru -sanya.sotnikov.1995@mail.ru -shaspir@mail.ru -timyr91_91@mail.ru -samaraqwerty63@gmail.com -volljsky@yandex.ru -andr.vel@mail.ru -kmk_fly-tech@mail.ru -gasnikov.y@mail.ru -vip.swq@mail.ru -l-potemkina@mail.ru -asadullin.damir@gmail.com -avkan@meta.ua -cb-404@mail.ru -mykolateterya@seznam.cz -bvalera15@gmail.com -sad@asd.ru -darkevil549@gmail.com -masafron@mail.ru -dmitry.mamonov@gmail.com -beck.smithth@gmail.com -dilkeovs@yandex.ru -s@skillbox.ru -ek.design11@gmail.com -yakushenko13a@ukr.net -rita1abramchuk@yandex.ru -velcronkf@gmail.com -copymi@gmail.com -elena.plenkova@gmail.com -temirlan.kuralbaev@mail.ru -dkposttmn@mail.ru -xdimit@rambler.ru -ilya-best7@yandex.ru -kot_optimist@mail.ru -aleksandra.boldyrewa@yandex.ru -sova1938@ya.ru -berkyt.production@gmail.com -gfnrf3@yandex.ru -registrattor@yandex.ru -mikhail.rubashkin@gmail.com -muxammedsaparow@gmail.com -valery.remenyuk@rambler.ru -shklyaeva.o@yandex.ru -vudtver@mail.ru -9990405@gmail.com -veshmish@mail.ru -fed9nin@mail.ru -kas192704@yandex.ru -ruslankko@gmail.com -br201@bk.ru -avmakarov@asuproject.ru -neborodulin@gmail.com -saratov.tema@inbox.ru -aski_vn@mail.ru -segavosegag@gmail.com -artushok125@gmail.com -vod40@mail.ru -serdtsevdv@rambler.ru -pdemchenko03@gmail.com -vgs1000@yandex.ru -zav.olga888@mail.ru -merim.t@mail.ru -koval7@bk.ru -oper.debian@gmail.com -a.chubarkin@gmail.com -art.magomaev@gmail.com -egorcko@yandex.ru -skryval93@gmail.com -sashayenza1996@gmail.com -dvl.66@hotmail.com -opimakh.91@mail.ru -bav84@mail.ru -vitalicus@ukr.net -stepuplive91@gmail.com -ngravel@bk.ru -yanasobol9@gmail.com -arfei88@yandex.ru -slavon2311@gmail.com -maksim.petrikov9@gmail.com -vladfedorovich@gmail.com -mbk_88@mail.ru -midzuoto90@gmail.com -activbrok@yandex.ru -sandra.merezhynska@gmail.com -shura.sergeev.01@mail.ru -pozdin.1985@mail.ru -reraiters@gmail.com -karlvolf88@gmail.com -aviazayac@yandex.ru -sanikanal@gmail.com -juasker@gmail.com -dmitriy_cash_frolov@mail.ru -zahar.terentjew@yandex.ru -1ckaz@mail.ru -ltimur.shulgin@infocraft.ru -theboban@gmail.com -dimarikpolenov@gmail.com -dmitry.eremin7@gmail.com -soonoo@mail.ru -deniskorsun55@mail.ru -aeugeniy@gmail.com -uude100@gmail.com -dem_kh@mail.ru -raf_ufa@mail.ru -eruvrp@inbox.ru -number48system@yandex.ru -ragozina@mokselle.com -gagauz-96-00@mail.ru -sergey.v.trishin@gmail.com -alvis@tut.by -gecik.lg@i.ua -4biden404@mail.ru -arslan.tagirov@mail.ru -jedi-maks@mail.ru -baxrams1988@mail.ru -vikka-p@yandex.ru -lera.morozova.1997@mail.ru -best14.95@mail.ru -gale4ka99@mail.ru -dragnil31@mail.ru -vassyll2016@mail.ua -vv.elle@yandex.ru -vi332323@mail.ru -acidanomaly@yandex.ru -saveliev_d@rambler.ru -voltman.vladislava@yandex.ru -nagval07@mail.ru -tinya95@inbox.ru -annushka.sokol@list.ru -1775012@gmail.com -se@gmail.com -izumovn@gmail.com -artem.potashov@bk.ru -ser.shishkov@gmail.com -randroid005@gmail.com -elvin.mamedov.2013@gmail.com -gordeeva-79@mail.ru -vadim.gluschenko1@gmail.com -ryavin_86@mail.ru -dmitry@senashenko.ru -xana.khazhieva@gmail.com -wavatar@yandex.ru -drix87@mail.ru -umnichkam@mail.ru -andrey.kishkar@yandex.ua -tairinjane@gmail.com -azverev@hse.ru -servitola@gmail.com -mox16@yandex.ru -vaniacool17@gmail.com -serj1ckk@yandex.ru -siorasan@yandex.ru -sv@svoim.org -thrackerzodip@gmail.com -mas.proekt@mail.ru -rilla-da@mail.ru -skugarov@sebbia.com -davoniv@gmail.com -span4a1984@mail.ru -1vasa@ua.fm -koganovsky@yandex.ru -nic.sepanov@mail.ru -ssas5@mail.ru -tr1onix2k@gmail.com -suhanovalida@mail.ru -ganados13@gmail.com -tinitskaya_mg@mail.ru -empaher3@yandex.ru -yuranazarow96@gmail.com -makarichev.aa@gmail.com -it_mebel@mail.ru -nikolaigulyaev@gmail.com -asya.novikova10@yandex.ru -avkupryakov@gmail.com -pestnast@list.ru -besedin_daniil@mail.ru -daonnecr@gmail.com -dgilmanov56@gmail.com -gilevadasha0904@gmail.com -chachin_i@mail.ru -kabzh@mail.ru -cyrius@yandex.ru -gusi_net@mail.ru -denis@zemskix.com -dedylik@mail.ru -d.v.vasiljev@mail.ru -orthodox.forever@yandex.ru -versuszzz95@mail.ru -inslybush@yandex.ru -joneuin@mail.ru -lelya.b@mail.ru -serg_miren@mail.ru -vlasuk10@gmail.com -hitasu@gmail.com -nolich@yandex.ru -e.taychenachev@gmail.com -andrew.shelest@mail.ru -info@darneo.ru -fkaterina82@mail.ru -netbooks@mail.ru -comiconcap@mail.ru -patrontbw@gmail.com -hotdog00@bk.ru -sulim.195@mail.ru -turintsev96@gmail.com -anja.anja.ya@yandex.ru -itogo@mail.ru -andriy.differ776734@gmail.com -antonvikhlyaev@gmail.com -eteriya_a@bk.ru -muratov.nurbol@yandex.ru -skvor.viktor@rambler.ru -4062702@bk.ru -dr.heart@list.ru -salabutinmark@gmail.com -markeloff25@gmail.com -dd_91@list.ru -pavlov@complexsys.ru -xcom6@mail.ru -perepelitsa@mokselle.com -sev.mih.kob@yandex.ru -sobinin.dmirij@yandex.ru -alenalu@inbox.ru -vanzzz@mail.ru -riseagain@inbox.ru -parfenukav@email.ua -andrei.kotel@yandex.by -chinaskih1@gmail.com -art-ylem@mail.ru -serexer2007@mail.ru -houseoftales@mail.ru -audi.087@yandex.ru -zamakh01@ya.ru -jws-89@mail.ru -rvt_oit@mail.ru -tutov.os2001@mail.ru -aldiesel@mail.ru -a.burlaka2011@yandex.ru -galystyan777@gmail.com -shaydullin123@gmail.com -djsergeykovanin@mail.ru -theblowalone@gmail.com -g1677240@mvrht.com -nikorik666@gmail.com -info@aleskeroff.ru -saha99zi@gmail.com -andrei.nikulin@live.com -shura_lipetsk@mail.ru -yarsouz@mail.ru -oleg.erm@gmail.com -nava011235@gmail.com -makarovsergeimc@mail.ru -pro100lehsa@yandex.ru -mctushkan@mail.ru -tuning_a@mail.ru -singlegreywolf@mail.ru -drago1335@yandex.ru -trollface0504@gmail.com -volnov_mv@mail.ru -acteve.sport@yandex.ru -saskorh@mail.ru -dennis.loboda@gmail.com -9096691296@mail.ru -rooolaga@gmail.com -fedotov@tyr24.ru -sergl27@mail.ru -frayfraay@gmail.com -strekozka_l@mail.ru -design-m.white@yandex.ru -ser9999@inbox.ru -bort1019@bort1019.ru -torus.andrey@gmail.com -maryasha53@gmail.com -kashaevr@mail.ru -rudan@zlatoust.en.cx -bolteg86@yandex.ru -grishchenko@mokselle.ru -wkmstr@mail.ru -exsar@ya.ru -vovasoboll@mail.ru -jeka.9393@mail.ru -mrbaggsy@bk.ru -bam36116@yandex.ru -sintiklot@gmail.com -pvpsaha02@gmail.com -pas4o@yandex.ru -andrejj-klepikov98@rambler.ru -poroshina.diana@outlook.com -javamod17@gmail.com -alex.dntv@gmail.com -cobraind@mail.ru -vlad2573@yahoo.com -dem0version@yandex.ru -elfira@me.com -r-gorbunov@list.ru -viacheslav.rybak.pb@gmail.com -gothrider@mail.ru -ilya758122@mail.ru -gafurylias@gmail.com -i.k.borisova@gmail.com -evgenia.dan@mail.ru -adalinadavis@gmail.com -mr.olips@mail.ru -martyr552@mail.ru -vadim.culya@yandex.ru -pr@kidburg.ru -acharne@tut.by -a.sorokina@itelma.su -d651@rambler.ru -zakbuk@yandex.ru -dushaninap@gmail.com -rootkitlink@mail.ru -1616kent1616@gmail.com -igor.n.tomko@gmail.com -potvlad@yandex.ru -vladislav-avdeev@mail.ru -malov@open.ru -gfcx@mail.ru -elina-10v9v2014@yandex.ru -nestetion@ya.ru -andreiod@yahoo.com -binturong93@mail.ru -thestatusqou@gmail.com -dalboyop2@yandex.ru -izmaxs@mail.ru -zelencov.1993@mail.ru -louvor@bk.ru -olgagrek@rambler.ru -artesmenil@gmail.com -igor.ivashkin.88@mail.ru -np-gtn@mail.ru -robo@skill-box.ru -bobor9752@gmail.com -strife88@mail.ru -tpostolova@yahoo.com -od.design.od@gmail.com -salix731@gmail.com -ogoak@mail.ru -miklik@yandex.ru -ovikdevil@gmail.com -duisen.01@bk.ru -serega-s90@mail.ru -trubnikovvadim@gmail.com -eifgustave@gmail.com -tolikgolovach@gmail.com -seva-selin@bk.ru -veewildy@gmail.com -alexvess77@mail.ru -olvisy94@gmail.com -raff.85@mail.ru -rt2animeshka@gmail.com -christin8787@mail.ru -spring.abigail@gmail.com -liza@100up.ru -greatjaaack@gmail.com -shura.shemyakin.97@gmail.com -mongano665824@mail.ua -asya.roxy@mail.ru -ar-t0@ya.ru -gogi_ark@mail.ru -marinatokio33@gmail.com -kto-to_tsss@mail.ru -dimadimych@gmail.com -sp@aic.ru -sema1197@mail.ru -nvestan@hotmail.ru -yu007@mail.ru -vyacheslav0310@gmail.com -olgarogozhnikova@gmail.com -a05@list.ru -lampardromanov@yandex.ru -higleb@bk.ru -colddave@ya.ru -rajnisk@hotmail.com -vip.tarasov2002@inbox.ru -it.is.the.g@list.ru -bkr1@yandex.ru -k58rus@yandex.ru -maximus_5_62@mail.ru -valievaa16@gmail.com -veastea@gmail.com -grigore_sura@yahoo.co.nz -tonyavec@gmail.com -prostoguide@gmail.com -bbr-53@yandex.ru -butey@mail.ru -tkolopkov@mail.ru -anton_semenchuk@rambler.ru -vsevozmozhno128@yandex.ru -jaglin@itsoft.ru -alantex@mail.ru -grinja2828@gmail.com -nikita-pomazkin@mail.ru -svetlana.jigalovskaya@gmail.com -lynx_15@mail.ru -denisvukolov@gmail.com -marishka1612@yandex.ru -ok3080@yandex.ru -s-trace@mail.ru -design4me@yandex.ru -artur4ik2281337@yandex.ru -fedoringleb@yandex.ru -sashalpk1c@gmail.com -gladishev93@mail.ru -con.iackowlev2014@yandex.ru -ksugur@mail.ru -bebeeper@gmail.com -foxaice@yandex.com -jaguarth@mail.ru -uvarov_nv@mail.ru -good_program@mail.ru -grubaya.nastasya@mail.ru -aggr@yandex.ru -ovsepyan.2001.edgar@mail.ru -yours2xx@mail.ru -barbanna@mail.ru -dashunya.andriyanova@mail.ru -denfyz@mail.ru -dale-@mail.ru -machmil@mail.ru -mboxkomarov2012@yandex.ru -maximas.matrosov2@gmail.com -lazfnol2012@yandex.ru -e.larsen@mail.ru -brodion@mail.ru -_german_@mail.ru -cepblu809@mail.ru -cpa.sereda@yandex.ru -rolandvermin@mail.ru -nika.galkina20@gmail.com -baba-yaga96@mail.ru -m89038721511@yandex.ru -emilpoingsaleev@gmail.com -ilyas_kopishev@mail.ru -terekhov.social@gmail.com -yuliya.forte@gmail.com -vicdo.login@gmail.com -leralih97@mail.ru -info@agroprogress.ru -nastya.tarash@mail.ru -qwertqwer@we.we -lunozwetka@gmail.com -avd0nin@inbox.ru -katoklizmo1@gmail.com -kim_mat2015@mail.ru -mari.voronina@inbox.ru -ad@wearewowagency.com -supana1976@gmail.com -lexaiv01@gmail.com -vmajke@gmail.com -mg4755@rambler.ru -yuriklimenko188@gmail.com -9713943@mail.ru -toha2902@mail.ru -rfrostoffman@gmail.com -sonya_korotich@mail.ru -pada-dafa@yandex.ru -studio-126@mail.ru -chesgeorg@gmail.com -funkeet@ya.ru -edaaasuper28@gmail.com -serge-meb@mail.ru -iyol@mail.ru -ceasarium@mail.ru -texzes@gmail.com -votrohum@mail.ru -svarshan@yandex.ru -nyankelevich@gmail.com -sandycat@yandex.ru -mitia2022@gmail.com -timuros1@gmail.com -akson123@yandex.ru -sashakuznetsov@mail.ru -dbelousoff@bk.ru -valerija.budo@inbox.lv -magnestik@rambler.ru -bl-med@bk.ru -kvartira92@yahoo.com -carrera91167@inbox.ru -yankovsky1995@mail.ru -cam@uranruda.ru -winchesterapplepie@gmail.com -kobajiehko@ya.ru -kubatovaalla1@mail.ru -showtime2007@mail.ru -punchedalloy037@gmail.com -andrey.ksenon@gmail.com -tokarev.r@mail.ru -swedkow@yandex.ru -xyivam@gmail.com -mosasfalt1@gmail.com -elperroloco2011@gmail.com -alex@hcube.ru -gexanibo@yahoo.com -vanvlas26@yahoo.com -89168820257@yandex.ru -faridweb23@gmail.com -mmieriezhko@bk.ru -ruselubub@lackmail.ru -gasan.velibekov@gmail.com -mail@good-id.ru -xdisimr@mail.ru -sean_tyas@mail.ru -kukharzaki@gmail.com -maptuhc@mail.ru -hrustiklustik@gmail.com -vlad_vladov_92@mail.ru -lysenko.mi@gmail.com -antonstriz427@gmail.com -acvyatin@mail.ru -anton@anton.com -alexweb85@yandex.ru -mekro17@gmail.com -it79680055019@gmail.com -rudkinohohol@mail.ru -divinanatura@ya.ru -kuliasovdm@yandex.ru -sinitsa.ruslan@gmail.com -k.v.1981@inbox.ru -faren_666@bk.ru -elistratov_andre@mail.ru -churkin.ig@gmail.com -anatoliy.morozov2015@mail.ru -gabitadze1997@yandex.ru -ligeros1@yandex.ru -bayaliev.mar@yandex.ru -mihanik2000@yandex.ru -khv-weiter@yandex.ru -lodwer@yandex.ru -oksana.prozv@mail.ru -evmalygin@gmail.com -suntsov.anton@mail.ru -yatriks@mail.ru -stalevs@gmail.com -robert@mokselle.ru -denant1993@gmail.com -kaa-work@yandex.ru -stas.ko99@mail.ru -r_valeri@list.ru -visualart@mail.ru -koropov@skillbox.ru -creps92@yandex.ru -madjaw@mail.ru -irenegray925@gmail.com -algowork@gmail.com -i_evgeniev@mail.ru -alinarlova@gmail.com -seliverstova@me.com -0zagirovkamil0@gmail.com -alexsplanet@gmail.com -sviatoilukatachniaknana@gmail.com -antonshemyakin97@gmail.com -warks@mail.ru -choksa70@mail.ru -89068767016@mail.ru -torgbuk@mail.ru -mailsoset@mail.ru -beranis@yandex.ru -1694008@gmail.com -ivan.aldush@gmail.com -turay93@mail.ru -rozanov.yuriy@yandex.ru -natalia.polischuk@mail.ru -evfim1234@gmail.com -kropev@rarus.ru -adv.prk@mail.ru -artyom@arsenyan.ru -den-olga77@yandex.ru -kusya87@bk.ru -game-modes@yandex.com -vovan4ik86@i.ua -galina.snagina@gmail.com -killer-pok@yandex.ru -k_mincevich_99@mail.ru -vmiretskaya@gmail.com -s2044907@yandex.ru -neo-quake@ya.ru -iswagger1994@gmail.com -emil.musayev.ru@mail.ru -angelina.losik@mail.ru -e.baranova@make.st -weeki10@gmail.com -danzavorovski@gmail.com -lelya31@rambler.ru -e.sycheva_nn@mail.ru -kulickov@mail.ru -temadorokhov@gmail.com -vtg33@rambler.ru -k.batalov@bk.ru -intresting_adm@mail.ru -srsvet@bk.ru -anna.trotsina@gmail.com -alexius.komnin@gmail.com -nickita.zaytseff@yandex.ru -lex9207@gmail.com -km@colary.ru -batovna@gmail.com -alimatov00@mail.ru -am.24wk@gmail.com -s.donyushko@gmail.com -malinovbox@gmail.com -dru_prist@mail.ru -svetlana@dorohina.yandex.ru -ivanov@ilm.ru -asa280@ukr.net -khadeko@mail.ru -orlenko23@mail.ru -ninyli4ka@yandex.ru -alex33_93@mail.ru -yevgenia.chuchavikova@ipaper.com -andrey.zborenko.2000@mail.ru -jurij.kozlitin@bk.ru -vstrecha71@gmail.com -romanrad529@gmail.com -a.andreev@uplab.ru -ewge_2019@mail.ru -novikov952@gmail.com -marigins@gmail.com -oly_armavir@mail.ru -eremenko-83@mail.ru -aartasbulatov@mail.ru -g.yablonskikh@mail.ru -talgat.asanbaev@gmail.com -solomahinigor@gmail.com -klyonov56@gmail.com -denisgorbunovmsc@gmail.com -cesc0717@gmail.com -litsukovrzd@gmail.com -scrollamount@gmail.com -xxnikolay1@gmail.com -rumig@yandex.ru -a.osip1999@mail.ru -kombikovdamir@gmail.com -dimias@lenta.ru -qwe@qwe.ru -224mmv@gmail.com -captainanch@ya.ru -simple@simple.ru -kniazev2108@mail.ru -illya.kulish@mail.ru -antoha.mashencev@yandex.ru -kostiabaev@gmail.com -ego-go2012@yandex.ru -butenko9595@bk.ru -lucifer1370@gmail.com -ib@aic.ru -s.tihonov9198@gmail.com -vankurov@yandex.ru -kamnium@nm.ru -secretlana@gmail.com -3dmax50@mail.ru -shayhov91@gmail.com -igor.berezhny@gmail.com -work11.77@mail.ru -pavlik3312@gmail.com -hip-hop_newstyleman@mail.ru -crb70@mail.ru -baho9208@mail.ru -mail@greatcoach.ru -k-mal-off@mail.ru -qwe@qwea.ru -daria.malashenko.aiesec@gmail.com -vtisnek@mail.ru -ideafix3@yandex.ru -kaz@udm.ru -marat_mrafikov@mail.ru -lara407@qip.ru -sukceso@yandex.ru -nikilox199812345677654321@yandex.ru -dobrov.n@hotmail.com -pavelstar@rambler.ru -hlopec83@gmail.com -shpakoff21@ya.ru -fkaterina88@mail.ru -lgorkostrow@gmail.com -aitthemes.com@gmail.com -anton056@anton.com -89385382438@mail.ru -8923374342314@mail.ru -d1144@yandex.ru -marasulov.1998@mail.ru -v.hovhannisyann@gmail.com -dorofeeva@mokselle.com -pavelmaxosip@mail.ru -daria_emelina@bk.ru -agent4752@yandex.ru -georgygevorkov@gmail.com -dilan100192@gmail.com -gesigner@yandex.ru -kostya.urenevar@mail.ru -alyona.123.mironova@gmail.com -impulc@gmail.com -my.kiseleva@gmail.com -rock_n_vladok@mail.ru -sirinchuka@gmail.com -marstamyan@mail.ru -sk-1974@yandex.ru -atromex@gmail.com -o.voityuk@mail.ru -cherovik@ya.ru -lini96@rambler.ru -glzdslint@mail.ru -lost_one88@mail.ru -nadezhda89@list.ru -makeweb2.0@gmail.com -kirill.yuldashev@mail.ru -g.r.o.s.s.b1lunder@gmail.com -vaxoninatatyana0000@gmail.cjm -creative_victoria@mail.ru -ifeelpleasure@gmail.com -flakyperm@mail.ru -aleks2211irk@mail.ru -s.shtukaturka@gmail.com -bel.art.v@gmail.com -oi.7892015@yandex.by -antonina1984@mail.ru -ae.shchelokova@gmail.com -den.shershnev@gmail.com -1857980@gmail.com -rishat.neo@mail.ru -154533@mail.ru -maksimspivak@yahoo.com -alinatoptender@gmail.com -linesinthesand@mail.ru -alexander5454@yandex.ru -alhastick@mail.ru -dimon_digin@mail.ru -margarita.shilova@mail.ru -mattcoulins@gmail.com -1@mail.ru -dr.pac2015@yandex.ru -ncelizarov@mail.ru -stels.1334@gmail.com -cyrax2016@yandex.ru -viznov@gmail.com -d@xroomer.be -roghoh@gmail.com -qman_2@mail.ru -mr.gelom@yandex.ru -r_dauranov@mail.ru -lavra095@yandex.ru -vs@aic.ru -yamchenko.y.v@yandex.com -xxc@leeching.net -alp1@list.ru -sofi-sha@yandex.ru -y20299@gmail.com -ann-ruzanov@yandex.ru -skorodymov@mail.ru -shabasvladislav@gmail.com -tolusinsk@yandex.ru -yurik_web@mail.ru -a_rasanof@inbox.ru -dimashevnin@gmail.com -instinct975@gmail.com -ukva.lyonya@yandex.ru -634540879@mail.ru -pupynyn@mail.ru -azizov.nail@gmail.com -premio80@mail.ru -vprazdnike51@mail.ru -hazhovec@gmail.com -ruslan71@bmail.ru -sergey.zamyslaev@gmail.com -spam@mail.ru -destroya44@yandex.ru -dengenich@gmail.com -nazim1972@yandex.ru -ms.tomskyh@gmail.com -eco.pun@gmail.com -d22s@ya.ru -vklimovs@mail.ru -gleb1309@mail.ru -selan_1@mail.ru -drgennadiy@gmail.com -sapfir73@gmail.com -stassyn@yandex.ru -march-space@ya.ru -sabbans@mail.ru -fyodorov.yan@gmail.com -levs01@mail.ru -oleg@pendurov.com -claatu@mail.ru -efendim@mail.ru -borovoy_1971@mail.ru -egor161@mail.ru -miromax21@gmail.com -alekse_sidorenko@ukr.net -iliyasold@gmail.com -antonshahurin@list.ru -andrey-polyakov@mail.ru -a01-12-1949-ng@yandex.ru -skostin@mail.ru -8karats@gmail.com -andriyovao@gmail.com -doniyorm@mail.ru -balikaleksandr@gmail.com -zilda.yusupova@mail.ru -diems@mail.ru -tuhachevski@gmail.com -renardstoms112@inbox.lv -footzi@mail.ru -artsfabrica@gmail.com -scorpion1037@yandex.ru -sofiakelemzina@gmail.com -twicenicetwice@gmail.com -vladtank_0_0_7@mail.ua -bondareva.tanya@inbox.ru -a.s.bragin@yandex.ru -amedyntsev@yandex.ru -odzolalvl@gmail.com -emailanonakk@yandex.com -magic.kalliope@gmail.com -dobriydadkashkolnik@gmail.com -bvv.sgs4@gmail.com -esdeath@openmailbox.org -darya-solo@yandex.ru -sheverginn@yandex.ru -hrumka.lera@gmail.com -azazaz.azaza.00@mail.ru -ovrutskyy96@gmail.com -mr.empoty.life@gmail.com -nomer-161@yandex.ru -wareshkin@gmail.com -isabella.l@mail.ru -shilin@mokselle.com -lilyakov@gmail.com -srfedotov@gmail.com -hinoko@mail.ru -deira@bk.ru -nruneev@mail.ru -nadya.mars.94@mail.ru -trevor34r@mail.ru -zarina444@gmail.com -nehnaev@bk.ru -lexa85252@gmail.com -poksik322@gmail.com -boxice@mail.ru -kolesnikov@budget21.ru -anastasi355@mail.ru -darsaliya-g@mail.ru -jalvosa@gmail.com -svetlanasumtcova@gmail.com -podliza123@gmail.com -margarita.kurilova@gmail.com -stas-panin@mail.ru -zhas_86@mail.ru -bodinstas@mail.ru -aleks-tret@yandex.ru -alexsandr.dotr@gmail.com -tao981@rambler.ru -volodich.v@yandex.ru -arhontissa@mail.ru -m.c@list.ru -denvlkab@gmail.com -burtaleks@yandex.ru -genrih.md@gmail.com -alex.zacepin@gmail.com -sergey.p.sliva@gmail.com -daniljulev@gmail.com -yurij.krot@gmail.com -pendrikov_86@mail.ru -connect@me.com -nadyadulinec@gmail.com -serzh.shomenko@mail.ru -hitzen88@gmail.com -makoron@mail.ru -denmilos@nlstar.com -jnss2013ks@gmail.com -daril87@mail.ru -trjyfel@mail.ru -corvinun@gmail.com -e.kononencko555@gmail.com -xomka2280@gmail.com -stepan-bogomazov@mail.ru -qwoto2015@gmail.com -newstas11@mail.ru -smirnoff.kz@gmail.com -michakoutjakin@gmail.com -4au92@mail.ru -rafeev.pavel@gmail.com -ci4rovik@mail.ru -marixka@mail.ru -sazuprak.s@gmail.com -gena4952@yandex.ru -kolya.demchuk.2015@bk.ru -79262460489@ya.ru -adyank@mail.ru -sabyb8787@mail.ru -gurutng@gmail.com -mobils100@yandex.ru -relix@mail.ru -bashkiby@rambler.ru -trukhinakate@mail.ru -jeremee96@gmail.com -artem.kudra@func.ru -fallen2@yandex.ru -xaoler@gmail.com -keith.river@gmail.com -romanich96@gmail.com -lissy@mail.ru -trukhachev@gmail.com -perepelitsa001@gmail.com -mysteri2017@yandex.ru -halin853@mail.ru -egor2015-6@mail.ru -mikhail.mishan@microchip.com -svaks_spb@gmail.com -fear-king@mail.ru -zzeett@bk.ru -zvaigznulietus@gmail.com -art-aleks40@mail.ru -alinazoryna@gmail.com -chabakvolodya@gmail.com -artichoke.ok@gmail.com -levkam@bk.ru -dudlbizua@gmail.com -nev.1993@mail.ru -nt.magnittorg@gmail.com -alexsandr.ivanov.00@mail.ru -a.reva@qsoft.ru -dsgn.shots@gmail.com -oleksa_razg@mail.ua -baa21v@gmail.com -gryshak0907@gmail.com -baranovgame@rambler.ru -dron84@gmail.com -ilovejazz@ya.ru -alexpashenko@yahoo.com -adrianobuon@mail.ru -orloff.eg@yandex.ru -grubyy@mail.ru -groschelka@mail.ru -hohlov250@gmail.com -julitikhonova@gmail.com -formyspam88@mail.ru -polkanov.alexandr@mail.ru -wellkin@gmail.com -schoolcher@mail.ru -x.box.ru@mail.ru -contrnik@yandex.ru -ms.ulyana.2001@mail.ru -towkalukin@gmail.com -geroi99in@mail.ru -margo.di@mail.ru -pycu4@fastmail.fm -rudometki@phystech.edu -deniskhig@yandex.ru -duplicate@mail.ru -1sthip-hopgirl@rambler.ru -ylkin_list@mail.ru -kohandjo@gmail.com -iv.pasha@ukr.net -pryanikon@gmail.com -k.v.1981@inbcx.ru -xallianz@yandex.ru -sveta.utemova@bk.ru -tailrag@gmail.com -aleksei.serdyuckov@yandex.ru -zabirovvadim@gmail.com -vovamir98@mail.ru -zendarol@mail.ru -jaggon@list.ru -roller25@gmail.com -admin@portix.ru -evgenni_101@rambler.ru -vit.sev@mail.ru -zimin.vl.a@ya.ru -nrrinat@bk.ru -mahneva-mariya@mail.ru -x.djkefir@mail.ru -gun.fever@yandex.ru -alimov171098@gmail.com -unaletvt@gmail.com -vip.sergio007@mail.ru -as.zakup@gmaol.com -aweber@inbox.ru -den-549@mail.ru -vovan_kovalyov@mail.ru -tiny@bk.ru -ivansobchenko@gmail.com -iren50kg@ukr.net -corpas@gmail.com -kirsti-b@yandex.ru -valeevbogdan@gmail.com -efanov_nikitka@mail.ru -ungern@nxt.ru -december3@bk.ru -m.razin2015@yandex.ru -zukoznik@mail.ru -dennforce@gmail.com -for.ewer@mail.ru -adm.kollag@yandex.ru -p0v13@mail.ru -biskota@list.ru -kazanecc.ru@gmail.com -jloboyko@toyota-motor.ru -danilbadanin@mail.ru -kino577@bk.ru -solar.ksart@gmail.com -normalskt@mail.ru -artemis775@mail.ru -neletau1337dailadno@gmail.com -zing-oli@mail.ru -zhaisanbek@mail.ru -t.kadiraliev2016@yandex.com -mdvolg@mail.ru -beradze.xenia@yandex.ru -kvartira20@bk.ru -edline2012@yandex.ru -kasur616@gmail.com -anatol.com444@gmail.com -valera.cot2016@yandex.ru -olshakin86@mail.ru -proquestchannel@gmail.com -davilspro@mail.ru -vitaliyexplorer7@gmail.com -marinaantonova2009@yandex.ru -kravchenkovlad@bk.ru -d.koganovsky@gmail.com -anton2170@mail.ru -chetvertakkk@yandex.ru -alex97121@yandex.ru -elada@bigmir.net -nemu.haibane@gmail.com -dan.da.2001@mail.ru -g3r65@gmail.com -konigin88@gmail.com -onimfa@mail.ru -s.nikolsky@mail.ru -pavel@welovescience.ru -ershovo59@yandex.ru -rudikgurevich@gmail.com -79danil@gmail.com -trotsina@yandex.com -opensusea@gmail.com -goga.kurenkov@yandex.ru -p-kosenko@mail.ua -kirsanovyaya@gmail.com -frizoliena@gmail.com -aivvent@yandex.ru -kpblmckuu_otdblx@mail.ru -dina@hardcore.ru -kichatov.sergey@gmail.com -vasin.alexandr93@gmail.com -samorazvitiye61@mail.ru -disys@list.ru -piterskikhsa@mail.ru -amontart@gmail.com -alexey.ramensky@gmail.com -work.salokin@gmail.com -wildcat.pw@gmail.com -teterin.mymail@gmail.com -pr-tomsk@mail.ru -alenamaps@yandex.ru -sick013@yandex.ru -dkrstudio@gmail.com -krm.sgs4@gmail.com -nadynk923@gmail.com -golodranex@gmail.com -r6design@yandex.ru -danilka_kaminskiy@mail.ru -ron-gulya@mail.ru -avsevolodova@gmail.com -mr.oleg-medwedew@yandex.ru -lop.efim@gmail.com -ellada.yurevna@mail.ru -mrgrafov@yandex.ru -toha357@mail.ru -anton.radko.00@mail.ru -thelostnomad@gmail.com -ariqer@yandex.ru -lauke@mail.ru -sinsin1234@mail.ru -khuputdinov.ilgiz@mail.ru -lostkinetik@gmail.com -katrysihka@gmail.com -vatikan222@gmail.com -lena_as_sister@mail.ru -sergeystaheev@gmail.com -m.abdula.m@yandex.ru -skitale85@gmail.com -remikont@inbox.ru -kirillbugajj98@yandex.ru -1sergij2007@gmail.com -nakami8@gmail.com -admin@pixellab.kz -yandexghy@gmail.com -niko99111@mail.ru -direct-bm2012@yandex.ru -tafury@mail.ru -yakovenko_dimochka@mail.ru -yrginson@gmail.com -anat.yu.77.nk@gmail.com -l_etoile@tut.by -askarbek.amanbaev@mail.ru -axelsher@rambler.ru -pechkirill@mail.ru -nikita-ftf@mail.ru -osafpro@mail.ru -nik.cpi@yandex.ru -symire@list.ru -1radimol1@gmail.com -itsarenko@gmail.com -ph.shamsiev@mail.ru -orgerzin7@gmail.com -rosssadj@gmail.com -projectplan2006@yandex.ru -liya_ru@mail.ru -method89master@mail.ru -febreehz@icloud.com -evgeniy.v.tikhonov@gmail.com -natalya.s.razheva@bspb.ru -tutmos3@yandex.ru -v-cher9@yandex.ru -isitbux@gmail.com -valko.m@bk.ru -alfred.pennyworth@mail.ru -fedotowa.di4@gmail.com -seal.sevastyanova@gmail.com -kretinin1987@gmail.com -enrichment.off@gmail.com -prusov1987@gmail.com -pavlobakum@mail.ru -shurik9903@mail.ru -kuchaeva-av@yandex.ru -shram011@yandex.ru -greeb@land.ru -annapoluektova@yahoo.ca -jeka_profa3@mail.ru -mu4work@gmail.com -kikna@yandex.ru -shatov-sanya@mail.ru -mykhailova.kateryna@gmail.com -scheglova@mokselle.com -vdhrazor@gmail.com -arsenybelosokhov.msu.bios@gmail.com -ansyzranov@yandex.ru -nanikiti@mail.ru -2-broken-hearts@mail.ru -shtefanyuk@gmail.com -cravyst@gmail.com -xopt88@gmail.com -texes@ukr.net -uasam@mail.ru -aqualiveplants@mail.ru -goddam1243@mail.ru -sysadm.nechaev@gmail.com -kannahop@gmail.com -nik-black-dragon@mail.ru -andrej.fin@gmail.com -dmitriy_sergeevych@mail.ru -vv-off83@mail.ru -zurav963@gmail.com -pushkin_vladislav@mail.ru -alexwinner.com@gmail.com -stepanov@simbirsk.ru -pbo39696@dsiay.com -rabegena@gmail.com -sergey.azatyan@inventurepartners.com -nevponya@gmail.com -asylbekzhardekov@gmail.com -arzt2001@mail.ru -anna.golikova@megafon.ru -neonvteni@gmail.com -krrera@mail.ru -fshagiev@yahoo.com -pakulov.slawa@yandex.ru -whitemc696@gmail.com -kamazik453@gmail.com -sheshenya.s@gmail.com -larisochka999@gmail.com -vgtujob@gmail.com -quizzer@yandex.ru -denis.mazaev@mail.ru -dmibudar@gmail.com -diana_da@mail.ru -dolya@mokselle.com -f-507@mail.ru -e.vanchugova@ya.ru -vtoryanik@livemaster.ru -drakonik99@mail.ru -umanets.pawel@yandex.ru -malkolm063@yandex.ru -bigmak_93@bk.ru -chirkov.artkov@yandex.ru -lev0315@mail.ru -karpov.g777@mail.ru -goshavis@gmail.com -temick.pchelyakov@mail.ru -sity.gangster3@mail.ru -kvon@list.ru -kinoproga@gmail.com -216199@mail.ru -psidy@rambler.ru -ledobur69@mail.ru -jtzua.itsucke@yandex.ru -bee.alyona@gmail.com -prexxtor@gmail.com -germanjuk-artm@rambler.ru -belousoffaa@gmail.com -p3400@mail.ru -ivanmarasin@gmail.com -gp@bipon.ru -firstgask@mail.ru -scherbin1990@gmail.com -alexrey2@yandex.ru -zhigaliki@gmail.com -katni@mail.ru -muhanovl@mail.ru -marina_fotos@mail.ru -vr8853@gmail.com -alexanamatveeva@gmail.com -nunkyirv1ne@gmail.com -gerasimenkosv@bk.ru -ftsv-ftsvfts@list.ru -polkovnik51@vail.ru -4-mi@bk.ru -goognin@gmail.com -dremora97@gmail.com -komp_kompik@mail.ru -sci.igor@gmail.com -stigmat84@mail.ru -zartz@yandex.ru -crazy-sunny@live.com -fformula@gmail.com -vuhoanganh1994@yahoo.com -suslova.oleksandra@gmail.com -134123@1.ru -ospelnikov00@mail.ru -fly-club@mail.ru -nbliznyuk33@gmail.com -e.a.kotorova@gmail.com -ya@rl.ru -kostanakis@gmail.com -meiion@bk.ru -gfgaliya@gmail.com -web-26@ya.ru -faks-modem@bk.ru -ivanzidkov7@gmail.com -e.bobyleva@hotmail.com -lagerevda@mail.ru -stsfedosov@gmail.com -khenkinpaul@gmail.com -vadim-kate@mail.ru -kamchatnyvv@mail.ru -musarubas97@mail.ru -ambarvlad@gmail.com -commiisia@mail.ru -bsv1042@gmail.com -runetorg@ukr.net -vak-nastya@yandex.ru -asafinasafin@gmail.com -507720@mail.ru -alisa.sforza666@gmail.com -dinozavrix@gmail.com -rangako@bk.ru -vetldi@gmail.com -demyanovpaul@yandex.ru -komarovataty@yandex.ru -sibrelocation@yandex.ru -litazavr@gmail.com -samusevich2@yandex.by -s-consul@mail.ru -dedtihon@gmail.com -89036995040@mail.ru -velichutin@mail.ru -dzeen.san@gmail.com -ckazki1@mail.ru -denis1a12@yandex.ru -gureev997@gmail.com -iamwellami@gmail.com -adastra.m@yandex.ru -redkuk@gmail.com -margushin.bitrix@gmail.com -kborodavko2009@yandex.ru -jk333@yandex.ru -anton.s.kharitonov@gmail.com -brozimurodov@gmail.com -shulya-12@yandex.ru -zhpogorelov@gmail.com -maxim-info@yandex.ru -snp.005@gmail.com -mpriymak61@gmail.com -alex@adindex.ru -arch4ng3lvog3l@outlook.com -daniktawit@gmail.com -vera.schirokih@yandex.ru -liya.krutikova@gmail.com -anton-leonov@yandex.ru -ulchalove@gmail.com -rost.pro@mail.ru -marseille1306@gmail.com -mozgovoy_1996@inbox.ru -tevpan@mail.ru -tygaric@mail.ru -qwertyantoshu2@gmail.com -otello17@bk.ru -aknoraz@deloitte.ru -vch1954@mail.ru -denis-izvekov84@yandex.ru -krumble1234@gmail.com -kurbandin@mail.ru -mosikhin@gmail.com -artemramenskyi@gmail.com -ischencko.yarik@yandex.ua -bogdanovlev2005@mail.ru -m.petroshenko@ofkbank.ru -yefanovaleksey@gmail.com -abdimalik777@yandex.kz -sergeyarzhaev@gmail.com -kirill123995@gmail.com -syabukovaolga@yahoo.com -lalitara2012@gmail.com -ya161rus@yandex.com -dmitriev.ns@yandex.ru -leonid_leytes@mail.ru -site-911@yandex.ru -vadim.denisov.03@mail.ru -skysamara@gmail.com -ebortnikov@mail.ru -trewrambler@rambler.ru -lizok199613@yandex.ru -almostkaz@spartak.ru -alexandrxvii@gmail.com -yaroslav100001@yandex.ru -olga@adt.ru -w_wasd@mail.ru -anyasidorenko2008@yandex.ru -i.niki.design@gmail.com -nikitakozh@ukr.net -mornedao@gmail.com -joganesyan@yandex.ru -tymanrock@mail.ru -andronovdima@rambler.ru -ivanbato@yandex.ru -lame_line95@mail.ru -stas_shoshkin@rambler.ru -sepeda.rafael@gmail.com -kraton.osn@yandex.ru -agar10@yandex.ru -d.p.voropay@gmail.com -angel-roz@yandex.ru -noboxo@mail.ru -chavrikovev@gmail.com -ali.aslanov.943@mail.ru -otvertka352@gmail.com -okladnikova.91@mail.ru -anton@aevrika.ru -shlenkinr@gmail.com -zhuravlevod@gmail.com -tomeskopavel@mail.ru -gyppi96@gmail.com -judo.rg7@gmail.com -strozhevskaya@gmail.com -waldkatze@mail.ru -nickzaytzev@gmail.com -vikamngmc@mail.ru -alvar63@mail.ru -ovmt72@yandex.ru -jas.j.14@mail.ru -tahir.muraev@gmail.com -dsj304047@gmail.com -lbch2201@gmail.com -dimkut@bk.ru -esk_kras@mail.ru -safar1999@inbox.ru -gsmshik@yandex.ru -alexforts@yandex.ru -79836223439@yandex.ru -isailse957@gmail.com -hiimnatg@gmail.com -igor.kopelev@mail.ru -sdrostov@gmail.com -goto.darya@gmail.com -odessa_osvita@rambler.ru -ig.stepanow@gmail.com -tanking2183@mail.ru -shaginyan.r@gmail.com -focus_0@mail.ru -zdvink@rambler.ru -chernova.tanya.96@gmail.com -viktor.bodnar.961@mail.ru -shtike@mail.ru -barashek27@yandex.ru -bskoone@gmail.com -d.kuprin@mail.ru -itspp@tut.by -radrik369@gmail.com -gamewarface2004@mail.ru -tetenkinka@gmail.com -artem.p.2001@mail.ru -rybich@mail.ru -i_sviridov02@mail.ru -vasilikav@uniweb.ru -xj122@yandex.ru -kate.qu@yandex.ru -contraforce@mail.ru -ap.kushnareva@asi.ru -vano7@yandex.ru -elizaveta.mamochkina@gmail.com -vanyabocharov13@gmail.com -lourv@mail.ru -danilyants@yandex.ru -ajikcey@mail.ru -keyart.inkerman@gmail.com -aliikmail@mail.ru -enullaevasker@mail.ru -askarius2@gmail.com -julywinter@gmail.com -life@i.ua -ir26a@mail.ru -mskorotkov@mail.ru -tyapushkina1976@gmail.com -k.erofeew@gmail.com -13bit69@gmail.com -i.shymanskyi@gmail.com -2906300@inbox.ru -ubivv@rambler.ru -erm.roman@bk.ru -segaxtreme@yandex.ru -lena.prodanets.79@mail.ru -marolat@mail.ru -hello.nastasy@gmail.com -anastasiyaosipova2001@gmail.com -shelalex@mail.ru -r_aleksanyan@mail.ru -zebradigital@inbox.ru -l_maxwell@mail.ru -a@cdnvideo.ru -beloucow8@gmail.com -8erg@mail.ru -andrey_seldyukov@ukr.net -lapucik2009@yandex.ru -frolll1990@gmail.com -hatab200@gmail.com -vladik_1996@yahoo.com -yusha.2002@yandex.ru -mkolanovaa@mail.ru -avzo3@mail.ru -krepyw@rambler.ru -svirkog@mail.ru -michail.antipov@yandex.ru -xman.88@mail.ru -danka.delo@gmail.com -leshikru@mail.ru -witch1159@mail.ru -888817q@gmail.com -zodak95@gmail.com -klmkw@yandex.ru -ucheba.student@yandex.ru -4erni4ka94@mail.ru -pp@aic.ru -vasilevkns@rambler.ru -ms_favorite@mail.ru -bmik9898@gmail.com -lisivets@ya.ru -k-700xxxx@mail.ru -lamba025@mail.ru -sorokina@uniweb.ru -aswes43.ru@mail.ru -navigatoranet@yandex.ru -omsterkhova@rambler.ru -vetarak@gmail.com -kostia.paharukov@mail.ru -cepblu809@yandex.ru -parfenovevgeniy@mail.ru -domino-o@mail.ru -klimko.zlata@yandex.ru -gfazzz@gmail.com -kanvika@mail.ru -den_shak@mail.ru -igrekul@yandex.ru -vitalikymaksimovoi@mail.ru -budakaym@gmail.com -vanoermak@yandex.ru -dokucha@mail.ru -rybinpe@yandex.ru -missis.kapitonencko2015@jandex.ru -anthropos@mail.ru -tovstiy03@mail.ru -device2@yandex.ru -makevkin@mail.ru -homahomahomyachok@gmail.com -poker_better_life@mail.ru -alla.dolhova@gmail.com -sergo979@gmail.com -ksenia.vitkova@gmail.com -centurion6fox@mail.ru -itkost@yandex.ru -strix1985@mail.ru -kimdaychin@yandex.ru -13flowers@mail.ru -admitadtest3@mail.ru -shirshov_kirill@list.ru -koly4ka@gmail.com -yuri.ivanov@ep.ru -maikov.danil@gmail.com -denis.grynko@yandex.ru -smatur98@gmail.com -mifwind@gmail.com -valovevgenii45@mail.ru -petova88@yandex.ru -masha.zmi@gmail.com -liksonov.ecotexe@gmail.com -haykkhechoyan@gmail.com -eastblond@mail.ru -flexflex@yandex.ru -kuklrambler@rambler.ru -samlana@mail.ru -arzek2015@gmail.com -ajazmn@mail.ru -super86555@gmail.com -prqpr@yandex.ru -sergey.sin@list.ru -nadia_demi@mail.ru -brooklyn61@mail.ru -kirikpv12@yandex.ru -konnova@travelerscoffee.ru -ems_ne@mail.ru -kristinasalomidi@mail.ru -anna_titomer@mail.ru -artwhite469@gmail.com -neervosse15@mail.ru -drnvoldemar@mail.ru -iko.08@mail.ru -pleasant@bk.ru -anatolykrylov92@gmail.com -muslukhovadi@mail.ru -jzxf@yandex.ru -zelinskij.i@yandex.ru -julia_fl@inbox.ru -tim.samohwalow2@gmail.com -rufe41@gmail.com -pitunj@mail.ru -kryt124356@gmail.com -voffkach@mail.ru -armangolden75@gmail.com -maria.bukolla@gmail.com -pavel.opv@gmail.com -yaguzhinskaya.ninon@gmail.com -edjanserikov@mail.ru -serzhy93@mail.ru -bb-klub@mail.ru -cc4455@gmail.com -baratov.k@yandex.ru -v-makarov@yandex.ru -lapshina-diana2015@yandex.ru -balaganskiy2002@mail.ru -test1@test.ru -krylov_alexander@mail.ru -big-ruda@mail.ru -rozhkovad@gmail.com -barbos12@i.ua -lisaveta.y@gmail.com -dav1nch@mail.ru -krava.designer@gmail.com -draagooonn@gmail.com -drago-snack@yandex.ru -red.snake@inbox.ru -infdev@yandex.ru -yuriykirstyuk@gmail.com -abayashka1997@mail.ru -iandrey397@gmail.com -rozhkov.dmitry@bk.ru -grash25@mail.ru -kalmurzaev.elzhan@mail.ru -professor.82@inbox.ru -atrnt@yandex.ru -tuilindo95@yandex.ru -bogdan.oxremchuk@mail.ru -testerka@mail.ru -med1mike60@gmail.com -dmokichev@gmail.com -irinasaraeva@mail.ru -uryukovv@gmail.com -a13ksndr@gmail.com -itshepard57574@gmail.com -kk@weekendagency.ru -volgaekb@mail.ru -anatol.ewseev2013@yandex.ru -79035908923@yandex.ru -fiftytwice@gmail.com -boryan198431@gmail.com -shermatov.rahimjon@gmail.com -ainur.orazbekova@gmail.com -akonovalov108@gmail.com -pifan91@gmail.com -lewuschka20071@mail.ru -shamain@gmail.com -alexey.l@ro.ru -anton.cool.patrakov@mail.ru -fayran1723@gmail.com -onion@discard.email -diamontron4752@gmail.com -huliaiev@gmail.com -kazzak2008@rambler.ru -vasiliygoluzinskiy@gmail.com -lord_baa@mail.ru -olga732567@yandex.ru -ivanovus11@gmail.com -sayx.ru@yandex.ru -svetlanaanatolevna.filippova@mail.ru -ketti_home@mail.ru -club19392@mail.ru -ormis37@mail.ru -press@ssros.ru -remenyuk79@gmial.com -dimash125@mail.ru -zilya23@mail.ru -poborcevroma@gmail.com -m.chelyadenkov@gmail.com -kironedu@gmail.com -ap-lissa@yandex.ru -babkindmitrij01@gmail.com -david.rud135@gmail.com -7342213@gmail.com -aleksandrme@gmail.com -shorenko2013@mail.ru -b_104@mail.ru -ikurlykov@mail.ru -1231@123.ru -panda@chelcom.ru -volnin.alexandr@yandex.ru -evvzenkov@gmail.com -fakaury@gmail.com -ergo.pilzner@yandex.ru -olejjek@yandex.ru -4423220@gmail.com -polkovnik51@mail.ru -pinchu_company@mail.ru -inna.spirina@gmail.com -d.pogodin@itech-group.ru -patlatyuk1987@gmail.com -info@itl.com.kz -kudriashov.art@yandex.ru -zhursky16@gmail.com -juniperland@gmail.com -cemenvachekin@mail.ru -aru_sergey@mail.ru -dolphinwhite@mail.ru -bervedon@gmail.com -office@eskd72.ru -uza-88@mail.ru -af-dementev@yandex.ru -vera.nika401@gmail.com -ruslan.budo@mail.ru -lidya@yandex.ru -kva52@rambler.ru -lazi789@gmail.com -step1383@gmail.com -zopa_gopa@mail.ru -efanoffkirill@yandex.ru -igorsemenihin23@gmail.com -senior.perfiliew@ya.ru -einzheev@itl.com.kz -test@mail.ru -bele.niente@gmail.com -kiriieha@gmail.com -f7@list.ru -sugareva@gmail.com -nasha4nadya@gmail.com -demeisenova@gmail.com -moonglad@gmail.com -reachi73@ya.ru -romanvo999@gmail.com -k_alex_kz_87@mail.ru -redyar24@mail.ru -kalnovnikita@yandex.ru -sergey.s.surikov@bspb.ru -b.b.mursalimov@gmail.com -an_b@inbox.ru -vardya@yandex.ru -garikwellness@gmail.com -ritahhhhhh@gmail.com -ihameleo@gmail.com -kurundaeva@gmail.com -seim2012@mail.ru -kutsko.v.v@yandex.ru -kubangk@mail.ru -veneta83@inbox.ru -justoffical@gmail.com -vitaliyrudnko92@gmail.com -maker.ok.mo@gmail.com -vng4@mail.ru -kapital7@mail.ru -dementor.son@gmail.com -trunovaon@gmail.com -andriychernysh1994@gmail.com -beljaevdima@gmail.com -maxshoper@gmail.com -glimmer2009@yandex.ru -tim.phey@gmail.com -ag@lab.ag -kogortuk@mail.ru -sandarchuk@mail.ru -ekde@wide-web.spb.ru -gisstyle@yandex.ru -tuna1706@yandex.ru -morozira21@gmail.com -katty_teslenko@mail.ru -katyxin1@mail.ru -kiper.vladimir@mail.ru -shultsev13@gmail.com -misye_kot3@mail.ru -nopomuk@yandex.ru -annabatina@gmail.com -mikhailova@seznam.cz -pol4et@yandex.ru -ibrohimov083@gmail.com -ilumushark@mail.ru -mikemsn@yandex.ru -87770131212@mail.ru -beksultan_suiunbaev@mail.ru -vital_tty@mail.ru -k.v.sokolov@bk.ru -vlad_x777x@mail.ru -rock--christey@inbox.ru -kgv63@mail.ru -sokolast15@gmail.com -irina-deeva2011.deeva@yandex.ru -bet-ekaterina@mail.ru -zekskorn@gmail.com -pristilaga@mail.ru -tatar001101@gmail.com -info-texn@lenta.ru -leapffrog@gmail.com -igor-torres@yandex.ru -uzbek_ragozina@mokselle.com -badasscanbe@gmail.com -yaroslav429@gmail.com -flashtj2@mail.ru -henrykopanev@gmail.com -adzadru@gmail.com -mastokravec@yandex.ru -itdb@meta.ua -bakoz@mail.ru -boiko.81@list.ru -n-cheparina@yandex.ru -valery9091@bk.ru -fedotov2212@gmail.com -paveldance@mail.ru -vikpointer@yandex.ru -barbasova74@gmail.com -thefierysoul@yandex.ru -enchervinskaya@gmail.com -dilekovs@yandex.ru -aspidtaganrogskij@mail.ru -enemy006@gmail.com -nekrasov03021952@mail.ru -allmam@ya.ru -pankov.100@mail.ru -orlando.76@mail.ru -crivenchuk@gmail.com -vasihina83@mail.ru -tim.gordeev2015@yandex.ru -shammyyt@mail.ru -ragozinaekat@gmail.com -adi.industries@yandex.ru -oleguch@ya.ru -maxsolomatin9161@yandex.ru -mikki1073@gmail.com -vpbotty@gmail.com -irina-dumenko@yandex.ru -karaktica@yahoo.com -spooner1306@gmail.com -afersh@list.ru -diana.magome2016@yandex.ru -neveraif@gmail.com -shiloff.maks2017@yandex.ru -ololosha2060@gmail.com -masha.svintsova@yandex.ru -nikitainin@mail.ru -tony-prots@yandex.ru -kerida@mail.ru -sas145@inbox.ru -lutkovv@bk.ru -attendentofsky@gmail.com -07sima07@gmail.com -karukan2009@mail.ru -romik1985@gmail.com -gkrasnoshlyk@gmail.com -iamkonev@gmail.com -coolfatner@mail.ru -bykovskikh92@gmail.com -kapustina.veronika@gmail.com -kubliy@bk.ru -iliasovusman@gmail.com -0964600@gmail.com -kviva@yandex.ru -sherdog@list.ru -b_ayshat_s@rambler.ru -v.sht1987@gmail.com -s.v.ladygin@gmail.com -skillbox@visjiser.ru -azum23@gmail.com -titarenkoalex89@gmail.com -ns@aic.ru -anton.tim4enko.2014@yandex.ru -novikof.igor@gmail.com -0317804@ukr.net -ol88@bk.ru -ilovebeznickiy@gmail.com -onefreeman1988@mail.ru -sumty@mail.ru -madara159@yandex.ru -kimakorr@gmail.com -maksim.top1989@gmail.com -romanov@iswin.ru -karinta2013@yandex.ru -rubilkina_ev@mail.ru -kmbngzph@emltmp.com -texcomvit@gmail.com -i_barsik@yahoo.com -e.poberezhnik@artw.ru -mukolakolia@gmail.com -kaisarbiceps@mail.ru -zz9087@yandex.ru -vivalabim@gmail.com -mail26mail@mail.ru -alex_moiseev@list.ru -limosiaya@gmail.com -ma.volkovskaya@gmail.com -ekaterina.lokhmatova@together.com -zidanidze91@gmail.com -vre@mail.ru -vk1987de@gmail.com -anas-ganiev@mail.ru -clumsyjester26@gmail.com -vng1969@mail.ru -dj-mail@mail.ru -mikhail.kokorin.2015@mail.ru -vip.masychev@mail.ru -silvestrius@mail.ru -vitaliy.yurchuk.work@gmail.com -dranicheck@gmail.com -sheron.1@mail.ru -gengambit37@gmail.com -lightshade@yandex.ru -questions5@yandex.ru -timurice@mail.ru -1enka@bk.ru -fergussawyer@gmail.com -oo.borh@gmail.com -pasha.matweev2012@yandex.ru -bigzo@mail.ru -xmav@mail.ru -stalkerdima991@gmail.com -bondarets.nastya@gmail.com -kolos.natasha@gmail.com -skoblikov@yandex.ru -jura.karusel@mail.ru -yarfedoseev@gmail.com -miragann@gmail.com -studiozplus@mail.ru -shiki01601@gmail.com -revunovvitalii@mail.ru -elenailushina@mail.ru -chapay555@gmail.com -georg_ry@mail.ru -arazhepa@gmail.com -dmiloslavski@gmail.com -89296628851@yandex.ru -galankin-nikita@lenta.ru -earakelova@gmail.com -castila@bk.ru -vladi.pomozov@yandex.ru -ms774@yandex.ru -tararov.yu@gmail.com -vlad_vvv@ngs.ru -bflmaggot@mail.ru -ekaterinasch@zeptolab.com -rolf_1@bk.ru -dmitroff197@yandex.ru -elena_asp@mail.ru -nnikitos95@mail.ru -katerina12379@mail.ru -anastassia.vassiljeva@gmail.com -oleg.patsey@mail.ru -nati.konovalova@gmail.com -aidar19929@gmail.com -gubaidullina-2011@mail.ru -jinn2000@rambler.ru -info@eplsend.com -smilad@yandex.ru -aniaty11@yandex.ru -daniilepel@gmail.com -trotsina@mokselle.com -kirill.zhiravov@yandex.ru -ivan.gomenyuk1@gmail.com -nastya_pro02@mail.ru -sabatior@yandex.ru -grs1991@icloud.com -silence.mos@gmail.com -dramdler@gmail.com -muhammadisosaidov@gmail.com -a.silyaev@yandex.ru -leshiyifromtheforest@gmail.com -rudenkoko@bk.ru -igormyhome@mail.ru -es@flxmd.by -roman28@inbox.ru -sait_osrc@mail.ru -rrsh@yandex.ru -aiman2_@mail.ru -9265971995@mail.ru -bayzarovdb@mail.ru -info.nekit@mail.ru -roodino@mail.ru -shois_95@mail.ru -appppppple@gmail.com -elena.keb@gmail.com -marta.zheltova@gmail.com -lv9il7l4w3@polyfaust.com -pvlniko@gmail.com -maryana1992@inbox.ru -andrei-presser@yandex.ru -pereshina@mail.ru -ol.ahmerov@gmail.com -yurinbu@mai.ru -budarin.02@bk.ru -yaguar2102@yandex.ru -gashkov.sergey@gmail.com -vlad_pankeev@mail.ru -artishok.ok@gmail.com -oklizh@gmail.com -dkischaev@mail.ru -zverevleha@gmail.com -abdukarim_77@mail.ru -j.kyksenko@gmail.com -ren.kaster@mail.ru -geka13@gmail.com -001zlata@mail.ru -noblz@yahoo.com -nutov2@gmail.com -hursik94@gmail.com -cristina.polyakova@yandex.ru -o.tibirkova@yandex.ru -italianna107@gmail.com -regeta.97@mail.ru -ilya.matytsyn@gmail.com -valeragoof@yandex.ru -ialiyev@me.com -avmakarov91@gmail.com -shkavron940427160@gmail.com -allenmitty@rambler.ru -_julia_87@inbox.ru -rusnf11@mail.ru -zarnicini@mail.ru -bugorpehlec@mail.ru -mikeorro@yandex.ru -shemet-opc@mail.ru -egora@zeptolab.com -antonishandrokha@gmail.com -serenya21@yandex.ru -eugeny2@inbox.ru -olganikit81@mail.ru -vlados-2011@mail.ru -rozzel@mail.ru -lerchdru@gmail.com -gotcha10@yandex.ru -darja.worked@ya.ru -glebmagurin@gmail.com -diksen@bk.ru -pavel.bosko@gmail.com -iwan.mahno2015@yandex.ru -koltyrinasvetlana@mail.ru -mr.root.00@mail.ru -mar_go.06@mail.ru -pokrnikol@gmail.com -raizinal@mail.ru -merabella00@yandex.ru -everestk2@mail.ru -ilnur_ahil@mail.ru -snoorge@mail.ru -classic2122@yandex.ru -chernyshova.vera.92@gmail.com -petyali101@gmail.com -a.trdatyan@yandex.ru -at_alex@bk.ru -golder1973@gmail.com -masisyan85@mail.ru -suchkov98@gmail.com -anton.olya.life@gmail.com -natalia.agafonov@yahoo.de -art.filkov@gmail.com -ksgen1@mail.ru -meridor2@gmail.com -vatruxa@gmail.com -ganin-va@yandex.ru -79296628851@yandex.ru -ez1982@yandex.ru -nikolay.stanislavchuk@gmail.com -hanaro@mail.ru -artemshchurev@gmail.com -tasha@adindex.ru -chevtaeva.k@icloud.com -grubyy.artemiy@mail.ru -bakeevsa@gmail.com -kalisto74@yandex.ru -vad_craft@ukr.net -levonan@rambler.ru -vlyagusha@justclick.ru -sergm83@mail.ru -viktor-eskov@mail.ru -artemelnik007@gmail.com -dpavlov@protonmail.ch -jr.erell@gmail.com -dmit28@yahoo.com -ricca-juliett@mail.ru -suhenkokatya@mail.ru -st.marlin@yandex.ru -evilshot1488@mail.ru -79217667413@yandex.ru -immaaxxii@gmail.com -vovamaliti9@gmail.com -kobrin.victor.1999@yandex.ru -ustinov.kn@mail.ru -zakazy1985@mail.ru -agashkinatg@mail.ru -dima-dubinin@list.ru -alpe@b2bresearch.com -mr.igor030@gmail.com -chvp1@mail.ru -tobin@ya.ru -shachkov.mk@gmail.com -macross80@mail.ru -roman@1lid.ru -dikck.dmitry@yandex.ru -filippnekhaev@gmail.com -cool.hostinger2015@yandex.ru -vl-shum@mail.ru -shemiakovamaria@yandex.ru -micsol@mail.ru -rnet2005@gmail.com -xdisimr@mail.com -sashagrev@ukr.net -fugol@bk.ru -ant-stolyaroff@ya.ru -alevtina_1231@mail.ru -ragnoras@yandex.ru -vladip.work@gmail.com -russkiy.volk.2016@mail.ru -kalina81@list.ru -vanakater@gmail.com -rus.zemskov@mail.ru -dashaskirda@mail.ru -mefodovskiyv@gmail.com -fenikslpt7@gmail.com -rusl94@yandex.ru -illarionarsam@gmail.com -ahfa@list.ru -andrey.lapin.mail@gmail.com -tartykov2012@yandex.ru -np73@rambler.ru -konstantinkovrik@yandex.ru -afedorov70@gmail.com -rina.medyanceva@gmail.com -yui-aoy@mail.ru -dikaya35@gmail.com -rafilkarimov@yandex.ru -memfis1990@gmail.com -kaur4ik2@yandex.ru -kukus2710@yandex.ru -alexeypuzyrnyy@gmail.com -avirds@me.com -alexsanderostrikov@gmail.com -mdvdv83@ya.ru -maksnuts1@gmail.com -solar1303@mail.ru -regina2019@yandex.ru -yar@allforgame.net -abdulay.suleymanov@gmail.com -xvano012@gmail.com -shushumur@gmail.com -andrykov.mike@yandex.ru -kalliope@list.ru -synesthesia94@gmail.com -santoyan-gag@mail.ru -feyakoto@gmail.com -shoarr@gmail.com -nick.norkin@gmail.com -smarthost@mail.ru -almazzar@gmail.com -leonid.levdanov@gmail.com -valicklord981@mail.ru -sergey-1968-spb@mail.ru -stupneff2014@yandex.ru -abdullaev199729@mail.ru -cyanide123@yandex.ru -miha6977@yandex.ru -irina_z_z@mail.ru -glebfen@gmail.com -joe.tank@yandex.ru -liliy93_93@mail.ru -nns7@inbox.ru -sancez3@yandex.ru -dv@ilab.kz -naes.cl@bk.ru -dushin@websolo.ru -nastusha1995is@gmail.com -mari.kravchuk78@mail.ru -peterqg@gmail.com -vadmirr@yandex.ru -yaroslavcev.2000@mail.ru -jonny101@mail.ru -glorygroup@mail.ru -flintl@bk.ru -esli_4to@mail.ru -stomateka123rus@gmail.com -alexander.samofalov@gmail.com -anastasia0607@yandex.ru -capitan-penoplast@yandex.ru -ilya.tymofeev@gmail.com -egornechaev6@gmail.com -cargeh@yandex.ru -sokol-judo92@mail.ru -artemiy.rak@mail.ru -mapsmapsmaps@mail.ru -daryabern@mail.ru -otdeda@gmail.com -akaymanov@yandex.ru -elijah.silich@gmail.com -natalia04011953@yandex.ru -serezzza@gmail.com -reloc.exe@gmail.com -skimer2000@p04ta.ru -perun_87@mail.ru -anferov90@ya.ru -wrusha@yandex.ru -gorelina93@gmail.com -kekcarek@mail.ru -vr@hochev.ru -vaneev_vladik@mail.ru -churiy97@ukr.net -makebanner@bk.ru -abi97kg@yandex.ru -diroy1287@gmail.com -artemich92@mail.ru -o.v.barsukova@gmail.com -s.darbaidze@inostudio.com -spaceman2016@yandex.ru -petrovskii_alex@mail.ru -natazkondra@gmail.com -turukhinsn@mail.ru -sergey2909@gmail.com -rslnshrp@gmail.com -mohov-g@yandex.ru -sbbs55@mail.ru -bakuil011@gmail.com -raskrivuha@mail.ru -yposlavskiy@inbox.ru -svjatik20@yandex.ru -nevseev68@gmail.com -xx@x.ru -plastic_egg@mail.ru -ak_78leon@mail.ru -virer2007@mail.ru -cali_86@mail.ru -petekivanov9563@gmail.com -casinod@ukr.net -v.struts@yahoo.com -azat.hatamow@mail.ru -aartemof@ya.ru -woodenbrand@mail.ru -tespryt@mail.ru -ayrtreg@yandex.ru -nana.akhvlediani.1979@mail.ru -reka2452@mail.ru -ivan@ivanov.ry -vip.fpfkbz@mail.ru -studio3denver@gmail.com -fklfhbc2500@mail.ru -mihail@kucherenko.tel -obraztsova.che@yandex.ru -mezhina2@gmail.com -1con@mail.ru -antoniel7@mail.ru -eihenb3333@gmail.com -yaposha93@gmail.com -okislyakov@gmail.com -bean@ogent.net -mice81@mail.ru -ab6siw6hse7y@mail.ru -larisavalgutova@gmail.com -yscalov22875@gmail.com -codetesting@rambler.ru -dm.medv@gmail.com -talmkom@yandex.ru -amellywood1@yandex.ru -mikhail.amosov@gmail.com -regvltitov@gmail.com -pietri_sasha92j@mail.ru -aleksey.ins@gmail.com -nedbailow@yandex.ru -glomer@bk.ru -yatvoirot_shatal@mail.ru -siliconpf@gmail.com -naye@hostcalls.com -foranymessages@gmail.com -vardanyan.mher.2000@mail.ru -gubinvladislav625@gmail.com -sumona@list.ru -vip.sagaev@inbox.ru -romario_mail2004@mail.ru -allka777@mail.ru -fedorovaau@yandex.ru -utukins@yandex.ru -marunova.vera@gmail.com -dizi.vzh@gmail.com -borisova.dar@gmail.com -ivan.tcheloweckov@yandex.ru -vova.larionov@rambler.ru -maksnoscope@mail.ru -wuyichuan0@gmail.com -mity282@gmail.com -cikrf.ru@mail.ru -nali9@mail.ru -litong-nick@mail.ru -steam_moy002@mail.ru -mail4bsf@gmail.com -box4ivashin@gmail.com -mk@bagur.su -d.vtulkin15@bk.ru -manafov.denis@yandex.ru -id19318265-b13244674b@vkmessenger.com -y.erato@gmail.com -kosior@ukr.net -langinenjura@mail.ru -oleg.lomaev1975@yandex.ru -spinngewebex@gmail.com -freeman13gd@gmail.com -comeandbuy@bk.ru -egorshabatin@gmail.com -serbog968@gmail.com -fedotowfedot@gmail.com -oveschkov.roman@yandex.ru -eril.kun@yandex.ru -skf710@mail.ru -walerock@mail.ru -nikulenkov.ilya@gmail.com -codemy.csharp@gmail.com -danilka040803@mail.ru -ruslan.inform@yandex.ru -guipago@mail.ru -pro_abay@mail.ru -platon23.04@mail.ru -gavrilovsm@gmail.com -dima.krytovych@gmail.com -danil.svetaylo@gmail.com -kovsanechka@yandex.ru -frtwork@gmail.com -perelozhilov@yandex.ru -microf2000@rambler.ru -gb.gayane@gmail.com -anastasy.petrenko@gmail.com -krivotaq1@mail.ru -u.burmistrova@gmail.com -fazikz@mail.ru -lyadovyury@gmail.com -mailforjobs@mail.ru -derpywoolfs@gmail.com -ruigtx@live.ru -89507525939@yandex.ru -ysmirnovy@gmail.com -alexey-cooler@yandex.ru -draxx512@gmail.com -kirillos94@mail.ru -a.v.kurlovich@gmail.com -dvb@dextra.ru -qwizord@yandex.ru -asteroid2003@list.ru -bd667@mail.ru -creoxlab@gmail.com -selezneva@yavtop10.ru -irina_mulenko@mail.ru -wolffood90@gmail.com -pasha17.05.93@mail.ru -m_c_p@mail.ru -priymakrom@gmail.com -iskander_mushta@mail.ru -noga@rootfest.net -timur.shulgin@infocraft.ru -specnazdelta62@mail.ru -net.aleshka@gmail.com -selcuk14@mail.ru -karakan77@yandex.ru -bara-bord@yandex.ru -kiris.2002@mail.ru -andrey.uspenskiy91@gmail.com -detush.kristian@yandex.ru -stealth13@bk.ru -parubetz@gmal.com -bremes@mail.ru -v.ivan.korkin@gmail.com -abulhanof@yandex.kz -denis.str12@gmail.com -foxibit@mail.ru -progavich@gmail.com -demon05psy@mail.ru -kseniya_bagina@mail.ru -tiano_taurus747@mail.ru -land_of_nod@mail.ru -artbag2010@mail.ru -ayselolesya@gmail.com -fastuone@gmail.com -alex.starkov@icloud.com -severexpress7anton@yandex.ru -panterrita@mail.ru -hkeper@mail.ru -egadan1994@mail.ru -natusyk6@gmail.com -aldar.dashiev@gmail.com -arman_ok@mail.ru -ulika95.mi@gmail.com -dimail-box@ya.ru -alexandra@welovescience.ru -1994helga@mail.ru -gulnara_12_95@mail.ru -mikhainsolo01@gmail.com -snoulv@gmail.com -jeadcmve@gmail.com -pertseva@me.com -chipo@mail.ua -dremov30@ya.ru -tabiz2009@gmail.com -likeanne@yandex.ru -mikhail.halai@gmail.com -vip.samosadov@mail.ru -deepst85@gmail.com -andreidem4enko@yandex.ru -galkinil@ya.ru -misterdark514@gmail.com -mandy.yeagle.my@gmail.com -andrey9xxx@rambler.ru -lk@td-bm.com -rezz85@mail.ru -annatitovala@yandex.ru -velboy2002@mail.ru -support@aleskeroff.ru -2zl2o@vmani.com -lexinfox@mail.ru -vladislove19960411@gmail.com -enverdzh@gmail.com -81baxrom@mail.ru -larinv.91@mail.ru -bvk2_43@mail.ru -dmytro.slusarencko@gmail.com -dchoobaka@gmail.com -min-max2000@mail.ru -vlasenko685@yandex.ru -zlk.marjana@gmail.com -jurgeban2@yandex.ua -sven0-0@mail.ru -ivanmechkovsky@mail.ru -dianatovkes@gmail.com -sites@ukr.net -nibumbum_@list.ru -test@test.ru -mishaze@list.ru -kozhemyakinsasha@mail.ru -mansurerubai@gmail.com -boysavva@mail.ru -domovouyasha@bigmir.net -urmanov.imil@mail.ru -tosha.tchapligin@yandex.ru -dsg1491@gmail.com -valerakukk@yandex.ru -dragunfer2000@mail.ru -kirpich-99@mail.ru -psv@yandex.ru -cool3331982@mail.ru -vsevolod.atmazhitov@gmail.com -posmityuh@gmail.com -rummolprod@gmail.com -dilya9899@gmail.com -pavel.sch.nik@gmail.com -belokopitovsss@yandex.ru -4877787@gmail.com -loginovsergeyi@mail.ru -theleonfox@icloud.com -ap180366@gmail.com -biglog1990@gmail.com -semlena1812@yandex.ru -ritaces@inbox.lv -tatajana22@mail.ru -felisia8@yandex.ru -93will93@mail.ru -eivanenko5@gmail.com -chernyshovklim@gmail.com -diana.malysheva@gmail.com -akbartartar@gmail.com -k.n.subochev@gmail.com -dlyavazhnogo@mail.ru -aldoshinivan@yandex.ru -kris-cup@yandex.ru -zhenyusya14@gmail.com -makr1975@yandex.ru -nastya.fatova@mail.ru -spo-56@mail.ru -valuwka91@mail.ru -abdulgamidov.m1972@gmail.com -elena_grigoreva92@mail.ru -the_alexis@mail.ru -itlife005@yandex.ru -ranex@yandex.ru -grafishka@mail.ru -eshudanov@gmail.com -slavawhf@gmail.com -yuriklimenko88@gmail.com -5006212@mail.ru -xmapa777@gmail.com -serega-kokon2@mail.ru -tingaevva@mail.ru -ua_777_1978@ukr.net -artem.rasstrygin@gmail.com -yuralet@mail.ru -petrloshkov@ya.ru -svetlankasergeevna_97@mail.ru -mytryk05@mail.ru -sharauefa@gmail.com -olystory@yandex.ru -petrvkovalev@mail.ru -edgecrasher@gmail.com -dakorahmatullaev@gmail.com -beaubitz@yandex.ru -serhiy132@gmail.com -uytfiufcvhgvb@mail.ru -ponamarev_89@bk.ru -elstheprog@gmail.com -bugi_vugi_denis@mail.ru -irina.v.kim@gmail.com -wingwork@yandex.ru -kyso4ek.sala@gmail.com -lubka95@mail.ru -vlad_pro@icloud.com -juneority@mail.ru -o.gricenko@yandex.ru -andrelickk@gmail.com -nibbenell@mail.ru -olesexclusive@ex.ua -pev231960@mail.ru -latina1997@yandex.ru -innaore@mail.ru -grishind23@yandex.ru -chingiz_ak@mail.ru -timur.dusmatov.2003@mail.ru -katevoitova@gmail.com -sneik_88@mail.ru -bobafas@gmail.com -vadzimbelsky@rambler.ru -propisnova@gmail.com -aleksey.zelentsov@skillbox.ru -bunshywitch@gmail.com -info@wbest.ru -etopist@live.ru -insait07@mail.ru -bstrdn@gmail.com -glimyanov@gmail.com -ilya.i.baziyan@bspb.ru -edouard1202@mail.ru -inyutochkin@bk.ru -tryakshina87@mail.ru -denis-dyukov@yandex.ru -dmitrovfilatov@gmail.com -karimov94@gmail.com -sfilosha@gmail.com -artemaminov@gmail.com -lily_1853@mail.ru -barraki2015@yandex.ru -juli25138@mail.ru -andryushencko-kirill@mail.ru -doccooper15@gmail.com -wgfxer@gmail.com -anastasiagaiduk9@gmail.com -denis_uafin@mail.ru -volkova78@bk.ru -utt2797@gmail.com -jetta-soft@mail.ru -sferalll13@gmail.com -volmav@gmail.com -pol.lebedev@gmail.com -civanov@multicharts.com -erjay_1501@mail.ru -larinalexx@gmail.com -l_sable@ukr.net -match14@yandex.ru -morphus.sherman@gmail.com -lycalope@gmail.com -bulat.93@inbox.ru -brunobanany7@yandex.ru -ruslan@elmeev.ru -whitefenek@yandex.ru -chagbig@mail.ru -alvo_05@mail.ru -mibman77@rambler.ru -ivb96@mail.ru -dgsxg@mail.ru -hurilur@divismail.ru -catalin_1991@mail.ru -dd56io@mail.ru -0008042@gmail.com -algamazov@yandex.ru -fpsmail@ya.ru -silantir@gmail.com -lisovsky.pavel@yandex.ru -vetrofgoscha2017@yandex.ru -psyvoron88@gmail.com -sergej.gavrilovich@skillbox.ru -duvernua@gmail.com -freerinch@gmail.com -xoxol-07@mail.ru -box.lid@mail.ru -semalyur200411@gmail.com -evgeniia.zhu@gmail.com -artemgrigorjev@bk.ru -orchunbek@gmail.com -doccooper.edu@gmail.com -for.klimenko.anna@gmail.com -dzham47@gmail.com -zg@tceh.com -crushoverdrive@mail.ru -avdeeva.xudozhnik@gmail.com -misskajdalova@yandex.ru -ludochkak2017@mail.ru -artdesigntt@yandex.ru -dzakamen@gmail.com -giggslegenda@mail.ru -ferdinand2k4@gmail.com -artur.mandrich.99@mail.ru -yuri.froloff@gmail.com -alsergeevich@gmail.com -kk.to-art@yandex.ru -aspushkin2395@gmail.com -ilyuha86@gmail.com -fraijin@yandex.ru -katy.linde@rambler.ru -rainofmint@gmail.com -evg.trach@gmail.com -nadine.gubko@gmail.com -curtc@ngs.ru -zlvldlv@gmail.com -7aliko212@gmail.com -dimakoval-1997@mail.ru -dimon_891@mail.ru -golovlevk@mail.ru -asd@yandex.ru -turist2015@ya.ru -magnitmotor@mail.ru -linasinger8@gmail.com -pinchuk.web@yandex.ru -savvadesogle@gmail.com -artem102040@gmail.com -xendsell@gmail.com -workpashkovmikhail@gmail.com -ss06032003kk@mail.ru -olgana.design@gmail.com -cologne021@gmail.com -shabashev77@yandex.ru -pserook@gmail.com -ptanasov@gmail.com -beata-71193@yandex.ru -andeangl@yandex.ru -webidea19@gmail.com -03062016k@gmail.ru -kebanzak@mail.ru -dashtoyan@hotmail.com -lombardinio@yandex.ru -d-nurmatov@mail.ua -palma888@bk.ru -89618277655@mail.ru -insafsalaf93@gmail.com -755333@bk.ru -artemov506389@gmail.com -danil.glux@inbox.ru -anvpro80@gmail.com -yuzik.74@gmail.com -kinomankaket@mail.ru -a.frantsiev@mail.ru -mexpert@bk.ru -nea@ierp.ru -olga.nikolaieva@gmail.com -maruta-danil@mail.ru -rhosmarsson@protonmail.com -dim220220telephone@gmail.com -cristiposeletchi@gmail.com -zefaa@mail.ru -janis.urbis@gmail.com -servicecom2014@yandex.ru -aleks.0097@gmail.com -elvinchik.ru@mail.ru -avalongames@outlook.com -mkurski@mail.ru -9857604@mail.ru -wolf.walker.2015@mail.ru -mdouson@list.ru -teacher_m@mail.ru -irina.elene777@gmail.com -dasha@le-de.ru -kirya.tushin1@yandex.ru -chingi3@mail.ru -presnovalexander@gmail.com -sergey.b.bo@gmail.com -helenrouna@gmail.com -shama2004@bk.ru -garashenko95@gmail.com -katus1k@yandex.ru -dinaflox@mail.ru -lightcarrier1@yandex.ru -hi-bro2013@yandex.ru -nikita07050565@gmail.com -poplavski.vika@mail.ru -kat9iku@gmail.com -alberto.man@mail.ru -vk936@bk.ru -gorbachev.ixaro-gorachev@yandex.ru -ronnio337@gmail.com -ozerovoleg92@gmail.com -dusembaev.ot@yandex.ru -lu-33@yandex.ru -aleksandr.kiviselg@gmail.com -maksim_lesovnikov@mail.ru -sergienko_alexs@mail.ru -79818441312@yandex.ru -andreevvdm@gmail.com -artbataev@gmail.com -tarshis.d@gmail.com -muhammad9500@inbox.ru -efomina@msk.vtb.ru -o.lisovyy@gmail.com -evgeniy.ahmedov14@gmail.com -inkeeper@inbox.ru -asiyakuand@gmail.com -alekseevdi1990@gmail.com -mapo4ka@bk.ru -ashotaxmed@mail.ru -batima97@mail.ru -alex.ovsyanni2003@mail.ru -xaba578@mail.ru -ae.89510718527@gmail.com -alexkostrov2012@gmail.com -xxnik@1.ru -prpersii@mail.ru -gr@gmail.com -firetst@gmail.com -anuar-badboy@mail.ru -alexandrpylik1997@yandex.ru -katekorsak@yandex.ru -dmvolik@gmail.com -ingener004@yandex.ru -4gfunk@gmail.com -codemaster74@mail.ru -mosru@skillbox.ru -jenjac@mail.ru -nk.knsh@rambler.ru -svettor@mail.ru -dais96@mail.ru -burunin@gmail.com -artflash55@yandex.ru -murody@mail.ru -eboosh@gmail.com -fatullaev@mokselle.com -yury.tka4@gmail.com -yekaterina@bigmir.net -leviyakkaunt2016@yandex.ru -madinadis@gmail.com -nkabanova@gmail.com -yoning@mail.ru -gennadiy1983@ya.ru -alla_kurishkina@mail.ru -trzone1@gmail.com -tim@immelman.ru -lesxx@ya.ru -ya19na73@yandex.ru -dragoice@gmail.com -acnepuhka@gmail.com -buyebay.24@gmail.com -ivtsygankov@gmail.com -ellena81@mail.ru -rromaneskul@gmail.com -kalimruslan@mail.ru -a2s@ukr.net -gafurovt@gmail.com -isanbet@mail.ru -maxilnaz@ya.ru -ospanovku@gmail.com -step_closer@mail.ru -kbvvrn@yandex.ru -trebukhin.yaroslav@gmail.com -ra4ek.cool.foreve@gmail.com -magaryan2002@mail.ru -pr202016@mail.ru -koftan21@gmail.com -peters2004@yandex.ru -asta219@gmail.com -show.true@gmail.com -rokwud2002@yandex.ru -milahwan@gmail.com -evgenkosenko90@gmail.com -lomakinmaxim@gmail.com -mefdev@gmail.com -gamer1648@yandex.ru -tibekin.pavel@gmail.com -kenny-lida@yandex.ru -poly.kuk@gmail.com -dina.badamshina@gmail.com -aleksey-danilin@mail.ru -pertik@list.ru -verbinegor@gmail.com -shadowfight040@spaces.ru -velesart@gmail.com -ilya_korchagin_90@mail.ru -didrojon@gmail.com -a_mamedova@list.ru -togaro1988@gmail.com -warlego@mail.ru -katerina_pavlenko@mail.ru -rnikbond@gmail.com -vraduir@mail.ru -vlad.eldar@ya.ru -a.zamashnaya@gmail.com -1ngeneer@mail.ru -found2@mail.ru -pestovpvl@mail.ru -robo@skillbox.ru -gpb@skillbox.ru -wuyikug@binka.me -demchenko@anton.ru -shamilss1990@gmail.com -alexandr.gornushkin@yandex.ru -ne4aev.i@gmail.com -tatyana0812@mail.ru -kkvkk@mail.ru -nespov@gmail.com -ekaterinaharito20@gmail.com -mellerilab@gmail.com -alex.v.andreev@gmail.com -deemo475@gmail.com -kalugakuda@mail.ru -daniely@yandex.ru -yaroshenko61182@gmail.com -capsella@inbox.ru -antoxa694@gmail.com -kristinabokovina@yandex.ru -a.nikitin2507@gmail.com -wagashichan@gmail.com -san.crot@yandex.ru -veselov.arseny66612@gmail.com -w00w01654@gmail.com -rmzvigor@gmail.com -alex_424242@mail.ru -ohbiburat@gmail.com -wm5soft@gmail.com -saski@mail.ru -futuremsk2013@gmail.com -maks.kabulov.91@mail.ru -vage_m1@mail.ru -uluaza88@gmail.com -lolo_gorbacheva@mail.ru -dania.sarsenbaev@mail.ru -nurbakyt-boyka@mail.ru -koha-plahotnik@rambler.ru -zem_donguz@mail.ru -sir.s-stepanenko@yandex.ru -eraund22@gmail.com -z.ilnurri@gmail.com -nastya.tamoona@mail.ru -galina-292@mail.ru -blackworldstudio@gmail.com -alexdanger@bk.ru -dashavereshagina@mail.ru -abcxyztelegram@mail.ru -tsubasa@tut.by -svyatoslav.andr@gmail.com -2klarens@gmail.com -yaser-yakove@yandex.ru -90semen@rambler.ru -tibyron93@mail.ru -tusrb@mail.ru -doskana@rambler.ru -teacoffee@i.ua -alisa.l@bk.ru -finik53@mail.ru -puzach@mail.ru -sheremet89@gmail.com -popov-ivan@mail.ru -artgenn@mail.ru -artem-filinov@mail.ru -e.i.sheptukha@gmail.com -hjgzfofa@yomail.info -chuck-ml@mail.ru -karabaev.il@yandex.ru -salamagr@gmail.com -e.b.semenov@gmail.com -bo7pro@gmail.com -eien-no@mail.ru -manyashazapolska@gmail.com -andr@andr.kz -maminamir@mail.ru -simplygraphics@mail.ru -kravchenko-m2010.mikhail@yandex.ru -fr0zen1nside@yandex.ru -gartman.danil321@gmail.com -rivo551@rambler.ru -danil.loginov.2014@inbox.ru -sshavn@yandex.ru -mr.fain4@gmail.com -evgenin0007@yandex.ru -usagi11@ya.ru -prspron95@yandex.ru -nazar.kucheruk@gmail.com -i4747@rambler.ru -arhipova.2014@inbox.ru -5akim@mail.ua -belocerkovecden1@ya.ru -denis.sulimenko@bk.ru -alexey.mishkin@gmail.com -salatikov94@gmail.com -mb17965@rambler.ru -mamajrg@rambler.ru -potylicyn.93@mail.ru -airsoftlisa24@gmail.com -gorelikov.dima1234@yandex.ru -oxioner@mail.ru -jackf31@mail.ru -andkorni@yandex.ru -er.ewew@yandex.ru -glebzaharov1@gmail.com -danil.talipoff2016@yandex.ru -tsvetyjotshek@mail.ru -tim.urazbah1@gmail.com -wkl37rus@yahoo.com -dionis.krasava@gmail.com -rw2wr@mail.ru -movao@mail.ru -allanoy@yandex.ru -anniamonogarova@mail.ru -maksim@jrtaev.ru -nikolay_grand@mail.ru -oleg.parfencik@gmail.com -ka4anbek@gmail.com -electronik.09@mail.ru -andrey_2655@mail.ru -taraday.vladimir@gmail.com -emitrohin@icloud.com -konstitution@ukr.net -hmetsatunyan@mail.ru -evilnic400@gmail.com -honey.chopenko24@gmail.com -n.voronov@bk.ru -virshichs@mail.ru -hheexx@mail.ru -fodlash@mail.ua -trial-15@mail.ru -slavikvredina@gmail.com -dykudyk@ya.ru -asomid3@yandex.ru -evgeniy.m83@yandex.ru -t.natalia_66@mail.ru -roma96com@mail.ru -828sasha@gmail.com -kcjushami@gmail.com -himedzi@gmail.com -dich228@mailforspam.com -belovib2002@gmail.com -sokolopav11@gmail.com -e1virus@yandex.ru -nat.zarechnewa2013@mail.ru -asus2211@gmail.com -nina2011ek@gmail.com -alex_on89@mail.ru -e790@mail.ru -vitaliy.a.2015@mail.ru -zholudev.98@list.ru -alykov87@gmail.com -arshinov2018@yandex.ru -teamaks@mail.ru -romax1000@mail.ru -mtsalka@scnsoft.com -y_r_sl_v@mail.ru -businka_mir@mail.ru -nnthreeb@gmail.com -gawanna.ru@mail.ru -mohij.igor@yandex.ua -ksenija.petriv@gmail.com -tauequa@yandex.ru -nekkit400@gmail.com -andymh@live.com -havage-06@mail.ru -egorstepanow@mail.ru -jjajou@ukr.net -adamchuksa@gmail.com -alp112a@gmail.com -maroonpanda@mail.ru -salamashkina.yulya@mail.ru -vigavno@mat3.pro -einar_kazakov@mail.ru -svu82@mail.ru -iryna.kalmykova@gmail.com -yelenanf@mail.ru -kizilov.s@gmail.com -koshelev.minecraft@yandex.ru -richbvl@mail.ru -sanika94@yandex.ru -andreamedis@gmail.com -ivro_uu@mail.ru -nadezhda-cherdantseva@yandex.ru -amaksdesign@gmail.com -thedimagladkov@gmail.com -botmatvey@gmail.com -paulsapa@mail.ru -mnokli@yandex.ru -neelovdima@gmail.com -bugaevanton96@gmail.com -aryskulova5@gmail.com -intel.brute@gmail.com -namikadzeikita99@mail.ru -d.tiganov@yandex.ru -c0x1ff6@yahoo.com -nastia.schatskaya@yandex.ru -4484864@gmail.com -katymama22@mail.ru -ekarniymamay@mil.ru -marina.opheim@gmail.com -iwan_02_02@mail.ru -abrikozs@gmail.com -tovmilofl540@gmail.com -zalexz1994@gmail.com -e.b.j_99@mail.ru -kindinova7968@mail.ru -techboss@mail.ru -gnngr888@gmail.com -petrograph.ru@gmail.com -kirill77785@gmail.com -volia82@bk.ru -wegav@rootfest.net -stela2@mail.ru -armstrong1209@mail.ru -mrbox2011@yandex.ru -mxr@yandex.ru -kourof.ivan@yandex.ru -marrishay@gmail.com -anut93@mail.ru -steamidplz@mail.ru -real-dag@yandex.ru -barca.100@bk.ru -s.aibulatov@gmail.com -gap_113@mail.ru -nikit_953@mail.ru -ilya.arutyunov.1991@mail.ru -rabmit@yandex.ru -rita-suharenko@mail.ru -9284330043@mail.ru -yakovlev.alex.o@gmail.com -opt2teplokram@gmail.com -dinadiz@ya.ru -pride.v.kolesnikova@hotmail.com -julia_dea@mail.ru -ihrisanov@yandex.ru -devidze.egor@gmail.com -ks-hator@yandex.ru -a@tkachenko.in -mekan.1765@mail.ru -beast.19k@gmail.com -egormasik@gmail.com -pasport21@mail.ru -bulgakov-sergei-1@yande.ru -yakorolevaleksei@yandex.ru -gumanoid8@gmail.com -ganryscout228@gmail.com -aleksserg81@gmail.com -sibsfinx@ya.ru -anashchenkov@gmail.com -dogmatichka@mail.ru -rfrnecjdltybc04@yandex.ru -alikalymmax@gmail.com -yurkbox@gmail.com -bituev@mailu.ru -plutonium_150n@mail.ru -smorozov@qsoft.ru -danzolka4@gmail.com -ivan959595@gmail.com -ushac@mail.ru -ig0r_21@mail.ru -playwithbrains@gmail.com -kaptsova.gala@gmail.com -olgerdvoneverec44@gmail.com -max@repoint.io -alkazance@yandex.ru -wirelines@yandex.ru -solomin.andrey@gmail.com -serega011@gmail.com -f1xent.one@gmail.com -kekson4ik44@gmail.com -sfasff@awdawd.ru -avgustsforza@gmail.com -usurtees@mail.ru -pavel-golovchan@yandex.ru -dmitriyyerin@mail.ru -mytrovska531@ukr.net -zelenyy2015@yandex.ru -maksletterbox@gmail.com -ilyxa983@rambler.ru -sazanova921@yandex.ru -evgenia_malashenkova@mail.ru -mbayrakova@gmail.com -tui462000@gmail.com -volostnykh300@list.ru -asavlukov@maxus.ru -raceoffer@ya.ru -prikol.kotov@gmail.com -go2005@inbox.ru -wormix-80@ya.ru -vv.taskaev@yandex.ru -zzz-zzz@mail.ru -set-site@mail.ru -t9271410411@yandex.ru -lysenko.usue@gmail.com -colan82@bk.ru -sokolov.maksim92@yandex.ru -geraskin@mokselle.ru -nurbekorazov@gmail.com -seregak94@mail.ru -ivanchuvikov@gmail.com -bagov.ali07@gmail.com -aveelik@gmail.com -qooback@mail.ru -kurochalex@yandex.ru -maska312@mail.ru -nu2324310@yandex.ru -katushka69@list.ru -chromanon@gmail.com -46maksim46@bk.ru -nixenx@gmail.com -teddypicker505@yandex.ru -elizaveta-antonova-01@mail.ru -fokusnicevgeni@mail.ru -mizu-mizu@yandex.ru -656486@mail.ru -dmitriy.d.kapaev@gmail.com -a.bakowitsch@gmail.com -cemenovl@gmail.com -misha41192@mail.ru -egor.shumakov@rambler.ru -anya965@yandex.ru -starosta-91@ya.ru -apishvanov@gmail.com -zayzayzay97@gmail.com -kroko2@yandex.ru -xex32@mail.ru -igorkudenko1@gmail.com -k.nurmatov@yandex.ru -romanov.hk@gmail.com -johnnysaph@gmail.com -ilya-1099@mail.ru -dyadyachernomor@gmail.com -gdskostya@yandex.ru -hollowbox@mail.ru -snooper7@yandex.ru -dmitry.gamaiun@yandex.ru -st.wasp@yandex.ru -rienopely@mail.ru -design@prettysites.ru -balashov.vasiliy@gmail.com -andrey.klimash@gmail.com -aminkouibaa@gmail.com -marietmariet1@gmail.com -stanislav.parovoy@gmail.com -zapominay1@mail.ru -mashkaromashka2706@mail.ru -epd63275@dsiay.com -craftworker@rambler.ru -mihailperov90@gmail.com -vlg81@mail.ru -ivan-lupu@mail.ru -enjoydezign@gmail.com -eduardmigal@gmail.com -sasha_shapel_1984@tut.by -naronny12@gmail.com -reabl@me.com -supper_mario@bk.ru -dmitrytimshin@mail.ru -prog.qt@gmail.com -evgwar@yandex.ru -yaros75@ya.ru -vasilevaann97@yandex.ru -da4nikov@yandex.ru -kupa0611@gmail.com -alexandre1962@mail.ru -mopslike@mail.ru -egor@yugs.ru -aivis@ukr.net -etopist@outlook.com -pawel.soko2012@yandex.ru -avakar@inbox.ru -azat1706@gmail.com -vitaliyindesign@gmail.com -ilya.pershin.24@gmail.com -bravo.johnny@ya.ru -jesters@inbox.ru -malov_ili@mail.ru -natalielomail@gmail.com -homevent@gmail.com -vladik.linnik.1999@mail.ru -sheveleff88@mail.ru -maks_fil_97@mail.ru -baigulova.indira@bk.ru -nikkoray@rambler.ru -akatanisis@gmail.com -xweb.pr@gmail.com -kamil2623@gmail.com -mansur.by@gmail.com -sashagol126@gmail.com -yarmievalr@yandex.ru -germionaum@rambler.ru -maks_son_2015@list.ru -www.roxy@list.ru -same.tea@gmail.com -cyber_worms@mail.ru -s.nazhmudinov@mail.ru -daycall@mail.ru -sanja050538@gmail.com -prowaynes@yandex.ru -annax.music@gmail.com -lin09-09@yandex.ru -mary.breus@gmail.com -igor.kiyashchenko@mail.ru -dilshodibodov2002@gmail.com -istercul@gmail.com -annavolkova@at-consulting.ru -mis_tery@ukr.net -no4noioxotnik@gmail.com -laukart35@yandex.ru -my.777@mail.ru -khritavarman@gmail.com -lehasalivan@gmail.com -abbasov.rashad@inbox.ru -wladislaff@yandex.ru -luch3d@gmail.com -vip-dantist@yandex.ru -russia-irk.ponomarev@outlook.com -nikakot50@gmail.com -fl.alesya@mail.ru -lizabarkovskaya@mail.ru -gavrylov88@gmail.com -max21250@mail.ru -ol-bard@yandex.ru -bukovskij93@mail.ru -777007@mail.ru -sanalmaro@yandex.ru -j.haustov@gmail.com -malceva1983@mail.ru -bredikhin01@list.ru -ann_posh@rambler.ru -slim.r35@gmail.com -100mucuk@gmail.com -mr.andreev.artem@gmail.com -luckyguy81@mail.ru -shaluhin.marat@gmail.com -anton.tatarskyy@gmail.com -siizn@yandex.ru -bi695525@gmail.com -baltport@mail.ru -expertnp@yandex.ru -evidyakin@yandex.ru -zer0cool@bk.ru -niker8@yandex-team.ru -led76@list.ru -potylicyna97@mail.ru -tagievsemen@mail.ru -mcdemidov@yandex.ru -light_visionary@mail.ru -super-super-febanachi2014@yandex.ua -komarov_2013@list.ru -gulp-of-air@yandex.ru -slava_ama@list.ru -blik-video@rambler.ru -iris.2704@mail.ru -magasumova_99@list.ru -socialink@ya.ru -d.n.morozova1@gmail.com -adletk6@gmail.com -indrs@rambler.ru -ramzes.mgdn@gmail.com -polgolovy@gmail.com -prutov86@gmail.com -fintrest@yandex.ru -fas908@bk.ru -slm-s@mail.ru -kveladze.kz@mail.ru -coldinc@rambler.ru -twvqlyfqhgfx@mail.ru -borisenko.egor2015@yandex.ru -vshkurenkov@live.ru -ad@aic.ru -kornevai@list.ru -danila8600@mail.ru -sonicmails@yandex.ru -mim_stek@mail.ru -petyan83@mail.ru -cajududaru@rootfest.net -tchorteg@yandex.ru -zinovev-pasha@mail.ru -ivan11031_90@mail.ru -bucefac@gmail.com -rust181081@gmail.com -lunatibetiol@mail.ru -jack_willa@mail.ru -kolosatron@gmail.com -stas_ravskiy-95@mail.ru -relict.adm@gmail.com -m.n.podkopaev@gmail.com -adobrynin_99@mail.ru -kulikov8407@yandex.ru -mark1987filatov@gmail.com -ps@email.su -shikin.a.v@mail.ru -atamanlkl@mail.ru -uvojnovau777@gmail.com -madi_macho97@mail.ru -missdbunny99@gmail.com -ayacho@ukr.net -0684509627@ukr.net -maratzur73@mail.ru -dolininasvetlana@gmail.com -dmitriy.ashin@aiesec.net -ruslan.magomedov.96@mail.ru -ilv.nase@icloud.com -dvdufkhb@gmail.com -karyapkin@gmail.com -ld1995@tut.by -majestic.jazz@yandex.ru -hose1021@gmail.com -7828198@bk.ru -biz.trp@gmail.com -umka_max@mail.ru -universallly@gmail.com -krutolapova@mail.ru -in2love@ya.ru -vahaha.00@mail.ru -w3orks@mail.ru -05ru337@gmail.com -camb@ya.ru -alim.u@rambler.ru -artem-cotsyubko3d@yadnex.ru -rastoman1996@yandex.ru -sergey.petrov@me.com -evgine@inbox.ru -kris.shir@yandex.ru -ar18@inbox.ru -kdanilka2009@mail.ru -zhursinbekov@gmail.com -martceva@mail.ru -pursuit2012@mail.ru -khalil.gumeroff@yandex.ru -kupukctep@mail.ru -pugachiov.serezha@yandex.ru -sergeysamedi@gmail.com -alex.s.fry@gmail.com -a@tickets.ai -rost9300@mail.ru -auganbaev089@gmail.com -razumovich1986@gmail.com -frost.pixel@yandex.ru -templetters@mail.ru -drago16677@gmail.com -olik-lenatik@yandex.ru -legende84@mail.ru -petyanov91@gmail.com -vasikok@yahoo.com -karpushin_al@mail.ru -aijakosha@yandex.ru -andrikll@yandex.ru -iwahnencko1996@yandex.ru -utrobinslavik@gmail.com -saranchaai@gmail.com -iriska-giska@mail.ru -lariboria@gmail.com -svirepyi@mail.ru -alena.clea@gmail.com -dvsvaran@mail.ru -ksenia_yoj@mail.ru -tarneck@gmail.com -evgesha.01.2001@gmail.com -evgeniy.kukunin@gmail.com -annecery@yandex.ru -elvirazaparina@gmail.com -dmitriy_af@mail.ru -andrey.voynov@yandex.ru -anakidze.giorgi@yandex.ru -abbadon18445@gmail.com -alik.nasirov.89@mail.ru -rubininfo@gmail.com -dmitrymakarsky@gmail.com -mvitalim@ukr.net -dhariton2711@mail.ru -2909763@gmail.com -valebuk@inbox.ru -mason3230@gmail.com -aleka196@yandex.ru -gotcha10@narod.ru -tonseliver@gamil.com -motin@braind.agency -kondra_88@mail.ru -abcd2907@mail.ru -natalya.korma@mail.ru -privet@pidor.ru -brendroma@mail.ru -filevav@gmail.com -dr.anastezia@yandex.by -sofalaki@gmail.com -i.am.cblp@gmail.com -9186532244@mail.ru -loylik1987@mail.ru -dimitrijnekrasov@yandex.ru -volosunovmike@gmail.com -de-signed@yandex.ru -olyshahova@yandex.ru -bob23295@gmail.com -viktin11@yandex.ru -zhidkov.denis@gmail.com -tgarenskih@gmail.com -8wicx@msgos.com -dsf@fd.ro -mr.playpixel@gmail.com -o.vakhovskyi@gmail.com -tatastrukaleva@gmail.com -milic93@bk.ru -456363vip@mail.ru -wgw2006@rambler.ru -dabu144@gmail.com -cimba@yandex.ru -dan-novdan@yandex.ru -itigokurosaki@gmail.com -timurberdiev100793@gmail.com -diman@mail2000.ru -dimka1-4@yandex.ua -aav-kerry@mail.ru -abcdesign1@mail.ru -ilyaest7@gmail.com -kuvaldagt@gmail.com -honeychopenko24@gmail.com -sds.pasha@mail.ru -s.s.shuvalova@gmail.com -vitalikbog@gmail.com -polhov2001@mail.ru -tanya.har4enko2711@yandex.ru -0rampa0@gmail.com -mariy-mordvinova@yandex.ru -komichok@mail.ru -kvasha.oleg1962@gmail.com -adamfrank@yandex.ru -remkosten@mail.ru -video-kino@inbox.ru -sanzhiku@gmail.com -s.v.denisov@mail.ru -sluhonya@mail.ru -123qwekir2wl@gmail.com -bsoloveyb@mail.ru -semin.53@mail.ru -egodyston@gmail.com -shar-ki@mail.ru -k.rachimov@mail.ru -reklama40@inbox.ru -belocerkovecden1@yandex.ru -deni5310@mail.ru -nazirget@gmail.com -drunkdiver@yandex.ru -fry12@mail.ru -vladiknk@mail.ru -kira09051987@mail.ru -moriyel@rambler.ru -powershell192.168.1.1@gmail.com -svtbiz@inbox.ru -feric@list.ru -blckg0re@gmail.com -larabogush@gmail.com -polrossi@mail.ru -iwankarawaeff@yandex.ru -vadimka12.02@mail.ru -7769969@gmail.com -mihailantoncev@mail.ru -notarius7777@rambler.ru -exon@bigmir.net -ssprava@ukr.net -shevanov@gmail.com -vysochina_lina@mail.ru -sykalpeter@gmail.com -xa4ik89@mail.ru -panda7495@mail.ru -tamu.gagi@gmail.com -9a_l_m_a_z3@mail.ru -vladislav.katalkin@yandex.ru -anton_bondarenko90@mail.ru -runni007@yandex.ru -eskovbox@gmail.com -deltaz1@mail.ru -ivan.magda@bk.ru -yarik.boyar@yandex.ru -goga.belov.87@mail.ru -bumi@bk.ru -theproxser@gmail.com -deathday90@gmail.com -activegrig@gmail.com -anton.volovyk@jelvix.com -torgerfsen@gmail.com -novoross86@gmail.com -marek111@mail.ua -lyonyakarai@mail.ru -shvidkovaasya@gmail.com -murzinaa1987@gmail.com -ilya.kolmakov.i@mail.ru -basquord@mail.ru -osmusic17@gmail.com -kolenkinroman@gmail.com -lyubimov.vladimir2017@yandex.ru -ozzy9294@gmail.com -satirnatalia@gmail.com -bg.tatina@gmail.com -inhumanbrain@gmail.com -skyover.zzz@yandex.ru -anastassiyapoleshuk2013@gmail.com -marina.salimgareeva@yandex.ru -nooawag@gmail.com -choodick@gmail.com -prohodcik78@gmail.com -nape@wide-web.spb.ru -info@egg-company.ru -slokcin53@mail.ru -kochemasow@mail.ru -maslakov1998@bk.ru -qline.su@gmail.com -bakulin-andriei@mail.ru -y.tiulikhova@gmail.com -ostwersa@yandex.ru -caesarsilver@rambler.ru -annabodyachevskaya@gmail.com -ponomarenkohanna@gmail.com -ivanov.v.rus@yandex.ru -steamilia@mail.ru -sanjarbakhramovich@gmail.com -a.kyrov@gmail.com -kaliolla_kz.95@inbox.ru -pades91@yandex.ru -sanyasanyaaa@mail.ru -shewlid@yandex.ru -nk@aic.ru -shaxzodraimov7@gmail.com -mihairmcr7@gmail.com -moroz0@gmail.com -4erepaha@tut.by -olegmironyk@gmail.com -muh.aliev2016@yandex.ru -samarin_andrej@mail.ru -uzak_uzak@mail.ru -psacruelty@gmail.com -ellinloff@gmail.com -kakzdorovo9@bigmir.net -maltim@mail.ru -fmmail@list.ru -ninediga@gmail.com -ivankolobzarov@gmail.com -sofa-perm2@mail.ru -m@skillbox.ru -battle.city@mail.ru -onemoreamore@gmail.com -mazurovdm@mail.ru -denis.kvashnin.1994@yandex.ru -prizrak24@gmail.com -a.katrukhin@gmail.com -amasovich@yandex.ru -anton.anton1204@mail.ru -halenkorotkevich@gmail.com -bog.compov@mail.ru -podolets.web@gmail.com -zykovkristian@mail.ru -timvjuhin@gmail.com -maxyta22@yandex.ru -evgeneva@gmail.com -zoom-zoom555@mail.ru -trofimova-16@mail.ru -waximov@gmail.com -diloya84@gmail.com -hello@aokunev.com -guzar0979@gmail.com -makarov_sv_@mail.ru -bor.mm2011@yandex.ru -tuapse@bk.ru -akobir.1211@gmail.com -vladimirprasoloff@gmail.com -j.tolkova@yandex.ru -cornelldesign@mail.ru -extazko@gmail.com -s_lobashev@mail.ru -vedbmo4ka888@gmail.com -markovkino@outlook.com -den.volchkevich@gmail.com -gak.anya@mail.ru -vadimgordenya@gmail.com -maxkonushkin6@gmail.com -vtycty@mail.ru -iamundead12@gmail.com -latfullinaif@melonfashion.ru -nikolay.dolenko@gmail.com -jsam1989@yandex.ru -evgenij.kropachev@yandex.ru -grapeperson@inbox.ru -an-nechaeva@mail.ru -avduckart@gmail.com -root@k0d.ru -lorens012@mail.ru -phototabmm@gmail.com -al.mykolyshyn@gmail.com -exstarzii@yandex.ru -vladislav-sahno@inbox.ru -antipov_evgeny@mail.ru -saninfobiz@yandex.ru -karasev.dmitriy.a@gmail.com -grek.andrei87@yandex.ru -karim.uxomyatzhanov.011@mail.ru -mershov72@gmail.com -maxim.shukevitch@yandex.ru -vinaris04@mail.ru -a.a.el@yandex.ru -churicanova.lilya@gmail.com -meloyannn@gmail.com -ssvovs@mail.ru -melnikova295@inbox.ru -suptelov@gmail.com -cool.sistematik@yandex.ru -rbhfb280302@mail.ru -iw366931@mail.ru -izimovtt@outlook.com -dnagikh@mail.ru -den_zx@mail.ru -lolik.in@yandex.ru -valtarnik13@yandex.ru -monctrik@yandex.ru -polina.sentjakova@rambler.ru -dennisgolubev@gmail.com -alexander.majorov@gmail.com -fekuzma@gmail.com -arsen96232333@gmail.com -denis.s.borisov@bspb.ru -wtest@mail.ru -sacrament1989@gmail.com -beresneffsanya@yandex.ru -kolia.pan1229@gmail.com -ildus@navmyatullin.ru -proartpulse@gmail.com -antonnalex1@gmail.com -nitass@mail.ru -vengard1706@mail.ru -krasilove6@gmail.com -expedition500@gmail.com -kuzmindml@mail.ru -soliev.ravshan@mail.ru -ponomarev98@inbox.ru -redhope@mail.ru -me@akorol.ru -nasgul@bk.ru -tyoma77@ya.ru -dimyska@icloud.com -sivaiper65@mail.ru -matvei4uk4uk@mail.ru -o.turewi4@yandex.ru -i.lavrush@gmail.com -evg2369@yandex.ru -web@semiryakov.ru -tenariya@gmail.com -knoppixmeister@gmail.com -yulyavlasova9@gmail.com -miron2000z@mail.ru -ruwprosha@gmail.com -kaonikky@yandex.ru -vovchik_mzokov_15@mail.ru -vsevolod.karass@mail.ru -vinogoria@mail.ru -sagunya8@mail.ru -angel_spb1@rambler.ru -e.magranova@gmail.com -hellodrw@gmail.com -a.lisovik@gmail.com -lina.savenkova@gmail.com -ahnuria@mail.ru -o.slava@gmail.com -playcrazylimon@gmail.com -fancy-panda@yandex.ru -heinol@bk.ru -justenjoythisbeautifulmoment@gmail.com -guga-83@mail.ru -zerbit3@gmail.com -ev.rusinova@mail.ru -blood4085@inbox.ru -timur23626@ya.ru -trubchik@mail.ru -7585375@mail.ru -kolmakovaekaterina@yandex.ru -s.abuov@inbox.ru -com.wix@bk.ru -yourloyallawyer@gmail.com -niatonix@gmail.com -bortsova-n@yandex.ru -tigso@yandex.ru -ruskosha@gmail.com -n-r-v2010@ya.ru -st2969@yandex.ru -nudipesleprosus@gmail.com -evgeni2007@yandex.ru -soldakov.p@yandex.ru -kalina.1441@gmail.com -556899.ok@gmail.com -ssorry@list.ru -bigmike.ua@gmail.com -feromon1001@gmail.com -vk@flxmd.ru -potnoon@gmail.com -vistatoyota@mail.ru -user275301@yandex.ru -fom_iv@list.ru -rcheliru@gmail.com -miovasher@gmail.com -vb2428@yandex.ru -bochkin.91@list.ru -s.stetsyak@gmail.com -sveta.yurova.93@mail.ru -4klinup@gmail.com -nemirovsk@ya.ru -matrix7@mail.ru -terraincod@gmail.com -deathfishfool@ya.ru -kesara23@gmail.com -green1356@yandex.ru -russinet@yandex.ru -k-pastukhova@yandex.ru -d.v.efremov@mail.ru -sv_urich@mail.ru -dura.durova.2001@mail.ru -ealoshinsky@gmail.com -r-lina@yandex.ru -salato7@yandex.ru -sergey-g@mail.ru -kostgr@rambler.ru -gab.super@yandex.ru -dom2933@yandex.ru -iglatypov2010@yandex.ru -kornblumchen@yandex.ru -dakar_94@mail.ru -th3on7ln3g4m3r@yandex.ru -bubazoid@gmail.com -ychpychmak@gmail.com -romanefimov24@mail.ru -erzhankab@mail.ru -cocoton@gmail.com -chriswao@gmail.com -susenko_a@ukr.net -yungamm@yandex.ru -rahman95-18@mail.ru -porova.ksenia@yandex.ru -ekb.den@mail.ru -andr.bondaren@gmail.com -shpreh@mail.ru -brmoney@ya.ru -adler@list.ru -baktybekergabyl@gmail.com -p_stanislav@mail.ru -marysiasm@mail.ru -l.grishin@yandex.ru -gera_28@mail.ru -ivmoiseev2015@yandex.ru -constantine@cjavariya.com -b00sla@mail.ru -kosikooff@yandex.ru -vladejkee@gmail.com -tania.komissarova22@gmail.com -malishh04@rambler.ru -cashbackinsider@gmail.com -110.petr@mail.ru -zplx91@mail.ru -tsvetkovaai@yandex.ru -ddinamit.i@gmail.com -mdanyushin@yandex.ru -anetan1999@mail.ru -azat.studio@gmail.com -nataliya.akimova47@gmail.com -darknessfallsicomealive@gmail.com -kirill-marki@rambler.ru -yaroslav.kulgaev@mail.ru -designervs@mail.ru -step.magnus@mail.ru -kremliova@inbox.ru -muxaul01@mail.ru -79184161155@yandex.ru -ruslankama@mail.ru -vasukhina_av@mail.ru -chumakov.roman@gmail.com -alisa.ve@mail.ru -938008@mail.ru -jeikkowalenko@gmail.com -viktorhnt25@mail.ru -didense@yandex.ru -v.atnagulov@gmail.com -mr.titarev@mail.ru -iyaroslav@yandex.ru -sonya-larina@yandex.ru -ab@aic.ru -horlsgrand@gmail.com -lebedev.guru@yandex.ru -pavel.wh@yandex.ru -thehlopster@gmail.com -phonar0@gmail.com -vvc.vvc.00@mail.ru -aldorrr@yandex.ru -wtf_@inbox.ru -sergeybirz@gmail.com -nastafieva@toyota-motor.ru -1+codemy@javasilev.com -svonik@gmail.com -freequency77@gmail.com -matrix-1975@mail.ru -wies666@bk.ru -uzer1874@rambler.ru -socbbboy@gmail.com -vera.nikal@mail.ru -denis.dreyman@gmail.com -formik52@gmail.com -lcf-84@mail.ru -leeseedlab@gmail.com -chernova.tanya.96@mail.ru -a.michurin1783@mail.ru -j941004@mvrht.com -isaev@mokselle.ru -milyuev@mail.ru -irinacrym@gmail.com -haharoto@gmail.com -vitaliy.polotskiy@gmail.com -wasa97@list.ru -loading@list.ru -alavissta@mail.ru -anton.m.gook@gmail.com -maxiaka4592@yandex.ru -r61boff@mail.ru -checkdata@yandex.ru -u900rr@bk.ru -latipovaguzel@gmail.com -iliasmach@gmail.com -tim9894@mail.ru -do@ds-p.ru -paullyerh@gmail.com -dagomit05@ya.ru -nikitadream@yandex.ru -avovvok@ya.ru -efoa@inbox.ru -tatykolcova@gmail.com -sergh.al@yandex.ru -yorv@mail.ru -ukhin.ag@gmail.com -arteom.petrenko@yandex.ru -00unclevasya00@mail.ru -filchenkov.dima@mail.ru -dima.kiesa@gmail.com -sobko@avtomatizatory.ru -sparomaroma@gmail.com -ikm121232@gmail.com -inq23@rambler.ru -sl444yer@gmail.com -shadrinann8@yandex.ru -bfisher@mail.ru -sss999@narod.ru -c4193530@trbvn.com -muhortov@bluecoins.ru -samoubica@post.ru -tvm82@pochta.ru -hilyk_andriy@mail.ru -arjaana.by93@mail.ru -an.sidnev@gmail.com -diadiasash@mail.ru -snurkassi@gmail.com -yuri.sablatazh@gmail.com -p.active.kud@gmail.com -alo61@mail.ru -mpaint@mail.ru -mary_lay@mail.ru -mr.levaya.pochta@mail.ru -stas.guseynov@gmail.com -patvariali@gmail.com -timofey.ja@gmail.com -site-agon@mail.ru -kotla@inbox.ru -mor.gan@list.ru -potapotamapa@yandex.ru -kochevnik01@mail.ru -yulya.salamashkina@yandex.ru -rosenchinin@mail.ua -fiascot@mail.ru -b.kirill.orel@gmail.com -godenis91@ukr.net -anyuo.91@mail.ru -pitinova.ol@yandex.ru -anna-kouzmishko@yandex.ru -almah2111@yandex.ru -myunion.7@gmail.com -volkov.office@gmail.com -dm.smirnov1660@gmail.com -person.ira@gmail.com -aap98@mail.ru -uw.vadim@yandex.ru -itm0@ya.ru -v.abramova@dexme.by -uraltux@gmail.com -tsarapkabel@mail.ru -zhekayaschik@yandex.ru -ellanik1304@mail.ru -garn.hachatrian@yandex.ru -nastjafeofanova@yandex.ru -paharenko1985@mail.ru -kokavd@gmail.com -shaman31415@mail.ru -stzv78@mail.ru -lapinanatalya@mail.ru -molotilow@yandex.ru -tatsin5in@mail.ru -yelaevevgen@mail.ru -it-a.d.m.i.n.s@ya.ru -okuneva-alena@bk.ru -romasamsonow@yandex.ru -yurakovtun83@gmail.com -gevorgov@list.ru -233868@gmail.com -alexiqus@rambler.ru -delovao@gmail.com -kvn0910@yandex.ru -lonli@inbox.ru -blizzard.k@yandex.ru -bardinaekv@gmail.com -kharsuhina.christina@gmail.com -tokaev.ilya@gmail.com -cooolmans@gmail.com -ekbpotok@gmail.com -vein18@yandex.ru -mobilizer@ya.ru -vorobjoff@yandex.ru -nerecsone@mail.ru -avitomessages@gmail.com -sevostyanovg.d@gmail.com -super.artemchik@ukr.net -andexds@gmail.com -rusakovevgen@gmail.com -silsergej@yandex.ru -diversi93@mail.ru -city10@list.ru -kimalexandr@yandex.ru -albread@yandex.ru -dd.whiller@gmail.com -shtrudle@yandex.ru -alexeyra2010@gmail.com -salidor7@gmail.com -masyamizin@mail.ru -sashakuznetov@mail.ru -morpeh93@gmail.com -9pr@mail.ru -helly_m@rambler.ru -od_89@mail.ru -igvassor@gmail.com -d.work2011@yandex.ru -oxygen213@gmail.com -mr.vladimirdubenko@gmail.com -strongman15@rambler.ru -olgatsikl@yandex.ru -hikikomori20@mail.ru -steamcender@mail.ru -demon.dem69@yandex.ru -vikwebmemo@gmail.com -koin04@mail.ru -othermail04@gmail.com -dmn@isida.com.ru -vitaly.kovel@yandex.ru -synteia@yandex.ru -rainbow.mister@yandex.ru -timur008116@gmail.com -dokar99@mail.ru -a.harmashov@ukr.net -blak_cot@mail.ru -ibleyev@gmail.com -opacheburashka@gmail.com -elabuga-dar@yandex.ru -pathloplo4@mail.ru -jnder@rambler.ru -ax1000002@gmail.com -footzi2014@outlook.com -nn.sidorenko@gmail.com -sectronov@gmail.com -eg0rfull@gmail.com -alexsteptlt@mail.ru -alexeidavljatov3@mail.ru -sawenkow54@mail.ru -buryaknr@gmail.com -vitya.goloktionov@mail.ru -hiirinasheveleva@gmail.com -didenkoks@gmail.com -cophiycuc@gmail.com -niichm@yandex.ru -temik777@bk.ru -dreamshotmail@mail.ru -renald.java@gmail.com -mrrockyracoon@gmail.com -dima_gurov_97@mail.ru -nikeskripko19998@gmail.com -artik.pronko@mail.ru -vitr@list.ru -miller777@mail.ru -valero_sv@mail.ru -inchiik07@gmail.com -sabuhi@nm.ru -tropolinder@mail.ru -novamish@gmail.com -vnatyri@mail.ru -qmach@yandex.ru -elizabeth.evsyukova@mail.ru -tania.balakina2016@yandex.ru -most-i-k@ya.ru -fimaforbiz@gmail.com -hupolla@gmail.com -tatyana.zapivalova@mail.ru -brezhnev01@mail.ru -ekaterinakoloskova589@gmail.com -maksseliverstov1234@gmail.com -ivanovim@mail.ru -ua67850@yandex.ru -mirkwoodrpg@mail.ru -djinni7@yandex.ru -kolo-valera@yandex.ru -aniuta.ermakova@yandex.ru -d77dk@mail.ru -vskavronskiy228@gmai.com -raduga-k-klyuchi@mail.ru -vita78@bk.ru -denisenki@yandex.ru -mirzo92chelsea@gmail.com -a.khadeko@gmail.com -kupcovson@gmail.com -manager@river-studio.ru -supreme-inside@yandex.ru -olmixmix@rambler.ru -fridays365@gmail.com -ivalium@gmail.com -vanes09@bk.ru -sklayrenkonoi@yandex.ru -vadim.derish@gmail.com -kant_2017@mail.ru -akhaikin@yandex.ru -iandrew80@gmail.com -alexander97@inbox.ru -vgric@mail.ru -alexx3000@gmail.com -destor45@yandex.ru -ruslanandreichikov@yandex.ru -sergeinovickaya@gmail.com -vasilii.dez@gmail.com -minigalin.nail.m@yandex.ru -pozitivniyroman@mail.ru -fat0318@gmail.com -tretyakova@live.com -dunelab@yandex.com -art@amado-id.ru -malov.alexsander@yandex.ru -akvellegiia@inbox.ru -zhurakoff@gmail.com -ivzans@gmail.com -sergyn7@gmail.com -ssiglaev@mail.ru -sm@weblive.by -t.tenchurin@mail.ru -bydianahunter@gmail.ru -anastasija_pros@mail.ru -crutlich@mail.ru -artyomzolotykh@gmail.com -igorek_ridder@mail.ru -dobriyknyaz286@gmail.com -sergey.parubets@gmail.com -zimin92@gmail.com -korneva@mokselle.com -emanow.dima@yandex.ru -nataliannovgorod@gmail.com -c_msch@mail.ru -djvagina@mail.ru -ev1745999@yandex.ru -edifier90@rambler.ru -floydanthebeast@gmail.com -sahem@mail.ru -hip-hop-org@yandex.ru -evgen.tulubensky@gmail.com -dmitrochenko.artem@gmail.com -cherepanov.design@gmail.com -jeniagirl@yandex.ru -kononenko.e.p@gmail.com -mcrtchan@mail.ru -arishkaaa@mail.ru -work.dim@gmail.com -uglukfearless@gmail.com -lmr777@bk.ru -serzhpodkolzin@yandex.ru -ds@xroomer.be -gilalia@mail.ru -aleksandr-a-2014@mail.ru -biznice@yandex.ru -genscorpion@mail.ru -michailovna@gmail.com -iusupov1991@mail.ru -ajb47@yandex.ru -melikhov2017@mail.ua -missq2012@yandex.ru -faspo28@mail.ru -ert@we.we -yano4ka.22@mail.ru -gtasamping90@gmail.com -alfunky@gmail.com -sani4-f@yandex.ru -p.zavodov@gmail.com -test13@test.com -itentramble@gmail.com -gwwnldvmxt@gmail.com -panadol00@mail.ru -atihomirov141@yandex.ru -pruftt@gmail.com -s.v.mishenkin@yandex.ru -maru123456@bk.ru -brob0ne@yandex.ru -vetoshnikova.olga@gmail.ru -lilith__92@mail.ru -velsh1@me.com -happy1781@mail.ru -zhuklevich87@gmail.com -vlad.1999doogee@gmail.com -dled.nn@gmail.com -marketing74@yandex.ru -funny__pink@mail.ru -i.sherstiuk@promodo.com -olgamarinutsa@gmail.com -nuastro@mail.ru -terekhov.css-star@yandex.ru -lya.lya.lya@mail.ru -alex-921012@mail.ru -leonvp@mail.ru -konstload@gmail.com -exeypanteleev@gmail.com -tirador93@gmail.com -natalyaplavko@gmail.com -dorogov@bk.ru -ipereyma@yandex.ru -as.plyaskin@gmail.com -windalla@ukr.net -ura-dranik2@yandex.ua -pkeln@bk.ru -elshen.hesenov@gmail.com -dima-kubarko@yandex.by -kakachonok@gmail.com -alexfoli84@mail.ru -bimok1705@gmail.com -vasiliy.moiseenko.64@mail.ru -thejackalsdevisee@gmail.com -2siser1111@gmail.com -b0p0n92@gmail.com -mister.ak90@mail.ru -abroshinam@mail.ru -romi_s@list.ru -mr.alex05@list.ru -mydarlingcat@gmail.com -dmitrypyltsov@outlook.com -damenov.sasha@gmail.com -danutz.02@gmail.com -russian_man87@list.ru -allnewalex@yandex.com -sahib.ismailov@gmail.com -tata3ad.ru@mail.ru -karimov94@ya.ru -garaeff2006@yandex.ru -phazzzy@gmail.com -makarovanton88@yandex.ru -ruslan.gilmetdinov@gmail.com -nichegoya@mail.ru -es@vipro.ru -rightangle@yandex.ru -duloffff@mail.ru -igor.dyachkov89@gmail.om -k-smolencev270688@mail.ru -ilyaa77@mail.ru -eagoshkova@mail.ru -maximov-da@mail.ru -artcatl@yandex.ru -nikobay@mail.ru -knez@mail.ru -nikaqwerty8@gmail.com -rz23050@gmail.com -likerpicfriend@ya.ru -43oleg11@gmail.com -omar.min@mail.ru -neocreystudios@gmail.com -gralle@yandex.ru -didi2113@gmail.com -ninofka@mail.ru -13zhora13@mail.ru -annka-b@bigmir.net -arutinashvili50@gmail.com -ilya.stadnichenko@yandex.ru -lvasiliy01@mail.ru -andrevdron@mail.ru -dub1212398@gmail.com -noor.kozhanov.33@mail.ru -sanak96@list.ru -atom88888@mail.ru -gemophilia@gmail.com -nail20142511@gmail.com -stepalton@bk.ru -kapelka001@ya.ru -fioktistova@bk.ru -iriyamak@ya.ru -seesay808@gmail.com -gekaiigeka123@gmail.com -rnaruzhka@mail.ru -prokosha10@gmail.com -guburov93@gmail.com -vanya.kamzol@gmail.com -ira-shitikova@mail.ru -as505094@mail.ru -code.nagoev@yandex.ru -kuct@mail.ru -antyangel_11@mail.ru -idval@imedia.ru -m792123@mail.ru -ev831411@mail.ru -l-fi-n@mail.ru -vilorovna@yandex.ru -olia-olia-2015@inbox.ru -aleksandra.liapunova@gmail.com -alex@space-o.ru -neoartnew@gmail.com -ibogdanov094@gmail.com -dmitryolizarovich@gmail.com -anton.reznichenko@gmail.com -joshphorlarbh15@yahoo.com -ya.exe1993@yandex.ru -k2604g@gmail.com -bajena.tchernyh@yandex.ru -cuznetsov.ildar@yandex.ru -vip.velox@mail.ru -vadimko2001@gmail.com -bakytbeka@gmail.com -nikita-para.nic@mail.ru -worker.rk@yandex.ru -alex03.02.2002@gmail.com -skyl0l@mail.ru -yohha1972@gmail.com -k2654861@mvrht.com -whysecondjuly@gmail.com -yitxena@mail.ru -radmir.zaripov@gmail.com -sto@100up.ru -yulya.pismenkova.03@mail.ru -shalberkind@mail.ru -stevgen@gmail.com -gnatenko.pavel@gmail.com -332733@mail.ru -kazakovanafilm@gmail.com -tritlex@gmail.com -lilismile.1996@mail.ru -sfall3003@gmail.com -bobrikov.91@mail.ru -bajanow.pav@yandex.ru -sterhova291095@yandex.ru -pakhomovav@mail.ru -akmalov.shohrukh2803@mail.ru -ilimisov.a.t@gmail.com -laimon.fresh7@mail.ru -elena_polyakova84@mail.ru -images88@mail.ru -svlvov@hotmail.com -milene1985@inbox.ru -kriss.1994@inbox.ru -matematichno7@gmail.com -smuglinakatya@gmail.ru -olgasnbrd@gmail.com -amister933@gmail.com -sergey.prisma.web@gmail.com -startup74@yandex.ru -qaz7772010@gmail.com -i-dolgopolova@list.ru -79155521292@yandex.ru -urbanliberty@yandex.ru -mrboogie8995@gmail.com -dyakovb@mail.ru -edwd.mkrv@gmail.com -eddtemirtau@gmail.com -corben1979@mail.ru -lukyanets.ivan@gmail.com -masterdan86@mail.ru -bekramb@gmail.com -alshshaykh@mail.ru -nemethis1990@yandex.ru -uselles25@yandex.ru -shat80@inbox.ru -savelyevartem@yandex.ru -obulygin91@ya.ru -valmerru@yandex.ru -aberdyakova@yandex.ru -van_zoka@mail.ru -shkurenkov.alec@outlook.com -evg-khoroshev@ya.ru -alex_neft77@mail.ru -nyancat462000@gmail.com -vaseninn@mail.ru -sheglova@mokselle.com -forestone@mail.ru -vaalea4wd@gmail.com -harand@mail.ru -sholpantul@gmail.com -doktorovasvetlana@rambler.ru -alexbil@meta.ua -aparshikov@croc.ru -sytormin.anton@gmail.com -korovina_natasha@mail.ru -shrek415@gmail.com -germanchupin@mail.ru -konobis91@mail.ru -bulman45.shm@gmail.com -phenimor@gmail.com -job.76@bk.ru -dsk-kazakov@mail.ru -neo-735@bk.ru -nikita1eremenko@gmail.com -baranovaelenavalerevna@gmail.com -3648525@mail.ru -kashlatch@gmail.com -cantemirdima@yahoo.com -aandreenko1997@gmail.com -caplinos@mail.ru -svetlana.eremeeva@list.ru -k.a.kuznecova@gmail.com -jason_jon@mail.ru -danila.vasilyevsky@yahoo.com -t.sterlik@yandex.ru -vinogr-alexey@yandex.ru -l1fepro@yandex.ru -mague@mail.ru -goryayeva@gmail.com -apricart@mail.ru -r.altuev@yandex.ru -kabashov@rambler.ru -sergito@mail.ru -batias1197g@mail.com -sergey_pavlov98@bk.ru -softdesign63@gmail.com -sergejgrudkin@yandex.ru -dmitry010581@yandex.ru -nafa1104@mail.ru -filemonov@yandex.ru -maxymgold@gmail.com -4ikash@gmail.com -akai-world@narod.ru -ser.antonets@gmail.com -l2id0014@gmail.com -widastali@gmail.com -robertkhisameev@gmail.com -startsev_da@mail.ru -vodim@mail.ru -cooryliof@gmail.com -kuliev_nik@mail.ru -v.tat2010@yandex.ru -zipo-08@mail.ru -irekhan75@gmail.com -agpascal@yandex.ru -ex3xeng@yandex.ru -vladislavkucenkorus@gmail.com -rouslan2004@mail.ru -luckachev.aleksander2014@yandex.ru -podolin_alexandr@mail.ru -shpakova@sebbia.com -olya.madaeva@yandex.ru -zafchik_uz@mail.ru -marina.stefashina@gmail.com -5150303@ukr.net -andreewsky.alexey@yandex.ru -237032@mail.ru -shishlin02@mail.ru -jlia777@yandex.ru -kuznetsov357@mail.ru -ivandomarovskiy@gmail.com -ryzov62@yandex.ru -elena-mironova-01@mail.ru -george.sautin@yandex.ru -jiwo@binka.me -supapawa@ya.ru -maestrost@yandex.ru -max@gmail.com -d.sozarukova7@gmail.com -shinesol2907@gmail.com -kirill4555@mail.ru -kozingleb73@gmail.com -viktorkan@ex.ua -ulatovi@yandex.ru -wonderman2001@mail.ru -alina-panova00@rambler.ru -jazzoo@mail.ru -sovalianna@gmail.com -lebedeanu@gmail.com -meln.slaw@yandex.ru -an4bi0s@mail.ru -www.pepilota@gmail.com -yurinbu@mail.ru -yakovbeng@gmail.com -s.ksu.work@gmail.com -aglerner@walla.com -lz203@rambler.ru -flvmun@gmail.com -skfo.press@ya.ru -azievmaksim@gmail.com -xamed@rambler.ru -el_spirito@bk.ru -nikinikikol@mail.ru -westor123321@mail.ru -spacealexandra74@gmail.com -legrandabbadie@gmail.com -79374411799@ya.ru -corvus-corax@meta.ua -vadim.kutia@gmail.com -dovletatayev.ru@mail.ru -mikhalchanka@gmail.com -smovs@rambler.ru -epolshakova@ya.ru -otik_kurdgelia@mail.ru -mac.house.2543@gmail.com -mr.sam1@ukr.net -myhappstar@gmail.com -mineral2000@yandex.ru -smalyutina@me.ru -lng0@mail.ru -konovchenko@mail.ru -solnyshk0@tut.by -ivakin.aleksandr@mail.ru -shashnia@gmail.com -dwebm@mail.ru -igorek.20035@mail.ru -klopidogigog@gmail.ru -al.zaritsky@gmail.com -chegodar@mail.ru -fyodor_07@mail.ru -rjkz.fear@yandex.ru -rishat.fayzrakhmanov@gmail.com -webconsult.ekb@gmail.com -dukeannenkov@mail.ru -cerebro87@mail.ru -igson@yandex.ru -stigmat1@mail.ru -jediandr@bk.ru -2013ekaterina@mail.ru -andrej.yumashev@mail.ru -prometey700@yandex.ru -pashaivt@mail.ru -hostmas@bk.ru -hello-bue@mail.ru -fedushinpiter@mail.ru -kolesnikov.vasiliy@gmail.com -kozlova.daria2015@mail.ru -rablyatipov@bk.ru -nastya93@bk.ru -2dsonik@gmail.com -profurs@yandex.ru -pavetip@gmail.com -balukdo@rambler.ru -denis260319951@mail.ru -og.box@mail.ru -festelika@gmail.com -m.sorokova@mail.ru -manya-srt@mail.ru -mais.rasul@gmail.com -tanyanider@gmail.com -sting_36@mail.ru -p-na13@mail.ru -formiras@mail.ru -24artem24@gamail.com -novosib_2009@mail.ru -az@aic.ru -stasua12041992@mail.ru -fgeryak@mail.ru -e.chustova@rambler.ru -dimoney2000@yandex.ru -f.mezhenin@yandex.ru -yura.rezvanoss@gmail.com -professional8246@gmail.com -olegator1991@inbox.ru -ivan@ivano.ru -oleg_gaiver@mail.ru -luminiksik@yandex.ru -krokodil500@yandex.ru -m89149455238@yandex.ru -riabovoren@rambler.ru -elpolodediabolo@mail.ru -am@bonoagency.ru -novoghyloff@icloud.com -antosha.trofimov.2004@mail.ru -126jessyjames126@mail.ru -mugen_89@mail.ru -greengreen27@yandex.ru -ilya_myachin@bk.ru -izpodvipod@ya.ru -vanlmshv@gmail.com -spok@bk.ru -ldvmake@gmail.com -karimov.bahtiyor@yahoo.com -silaevegor@mail.ru -tralom@yandex.ru -dima111karakin@mail.ru -159753121@mail.ru -volosnikov@mokselle.com -maximilian_antipenko@mail.ru -zhigalko69@mail.ru -i_nazar@mail.ru -i@medsmedia.ru -andreiionov1996@gmail.com -des_nepa@mail.ru -annasvist@list.ru -protchenkova_dar@mail.ru -j.tsapok@promodo.com -vovka-0195@mail.ru -devaev.89@mail.ru -maks21992199@mail.ru -dr.dami2017@yandex.ru -mtabachnikova@moneks.ru -vasys@yandex.ru -sab33sab@mail.ru -hakimov65@inbox.ru -ewe21@ya.ru -sug00se@outlook.com -3435236@mail.ru -vaavik@bk.ru -faergun16@gmail.com -shsv8@rambler.ru -miglecov@gmail.com -agnosst@gmail.com -sashkako@ukr.net -vladislavwar@gmail.com -rudaev@rambler.ru -heiaheia25+1@gmail.com -gulman.glhf@gmail.com -www.nocok.ru@mail.ru -yevgheny78@gmail.com -grebennikova@mokselle.com -andrey925@yandex.ru -kirillsafonow@gmail.com -marisa.bell.m@mal.ru -ruslancha@inbox.lv -vovasid9@gmail.com -www.rifma@mail.ru -sevcuic7@mail.ru -huks991@rambler.ru -dimar00@list.ru -babyas@yandex.ru -serpass@mail.ru -mihail.sherbank@gmail.com -natfaga@yahoo.de -mulja.nat@mail.ru -max-maslov@ya.ru -gesko56@mail.ru -in_game@mail.ua -re-naissance@mail.ru -ghost_spb@mail.ru -egysakova@gmail.com -anna.posters@gmail.com -jfeoks@mail.ru -mazhirin@gmail.com diff --git a/_utils/bills_migrate.py b/_utils/bills_migrate.py deleted file mode 100644 index d37e961..0000000 --- a/_utils/bills_migrate.py +++ /dev/null @@ -1,20 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from finance.models import Bill - -for i in Bill.objects.filter(manager__is_admin=True): - i.opener = i.manager - i.manager = None - i.save() - -for i in Bill.objects.filter(manager__in_role__in=['M', 'S']): - i._method = 'S' - i.save() - diff --git a/_utils/change_teacher.py b/_utils/change_teacher.py deleted file mode 100644 index 5dc1cb3..0000000 --- a/_utils/change_teacher.py +++ /dev/null @@ -1,121 +0,0 @@ -# coding=utf-8 -import os -import django -import sys -import datetime - -start = datetime.datetime.now() -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from access.models import User -from journals.models import HomeworkTry, TeacherJ, HomeworkJ, ExamJ, ExamTry -from lms.tools import show_progress - -old = User.objects.get(email='raso.practice@gmail.com') -new = User.objects.get(email='nataliya.akimova47@gmail.com') -new2 = User.objects.get(email='html@bedev.ru') - -all = (int(TeacherJ.objects.filter(teacher=old).count()) + - int(HomeworkJ.objects.filter(teacher=old, f_date=None).count()) + - int(HomeworkTry.objects.filter(teacher=old, f_date=None).count()) + - int(ExamJ.objects.filter(teacher=old, f_date=None).count()) + - int(ExamTry.objects.filter(teacher=old, f_date=None).count()) - ) - -works = ( - ('TJ', TeacherJ.objects.filter(teacher=old).exclude(progress=100)), - ('HJ', HomeworkJ.objects.filter(teacher=old, f_date=None)), - ('HT', HomeworkTry.objects.filter(teacher=old, f_date=None)), - ('EJ', ExamJ.objects.filter(teacher=old, f_date=None)), - ('ET', ExamTry.objects.filter(teacher=old, f_date=None)) -) -n = 0 -to_new = set() -to_new2 = set() - -print('Всего работ: %s' % all) -for name, work in works: - for point in work: - if name == 'TJ': - point.teacher = new - to_new.add(point.student.email) - - elif name == 'HJ': - if point.material.theme.sort < 10: - point.teacher = new - else: - point.teacher = new2 - if point.parent.parent.teacher != new2: - point.parent.parent.teacher = new2 - point.parent.parent.save() - - try: - to_new.remove(point.student.email) - except: - pass - to_new2.add(point.student.email) - - elif name == 'HT': - if point.parent.material.theme.sort < 10: - point.teacher = new - else: - point.teacher = new2 - if point.parent.parent.parent.teacher != new2: - point.parent.parent.parent.teacher = new2 - point.parent.parent.parent.save() - - if point.parent.teacher != new2: - point.parent.teacher = new2 - point.parent.save() - - try: - to_new.remove(point.student.email) - except: - pass - to_new2.add(point.student.email) - - elif name == 'EJ': - point.teacher = new2 - if point.parent.parent.teacher != new2: - point.parent.parent.teacher = new2 - point.parent.parent.save() - - try: - to_new.remove(point.student.email) - except: - pass - to_new2.add(point.student.email) - - elif name == 'ET': - point.teacher = new2 - if point.parent.teacher != new2: - point.parent.teacher = new2 - point.parent.save() - - if point.parent.parent.parent.teacher != new2: - point.parent.parent.parent.teacher = new2 - point.parent.parent.parent.save() - - try: - to_new.remove(point.student.email) - except: - pass - to_new2.add(point.student.email) - - point.save() - show_progress(all, n) - n += 1 - -finish = datetime.datetime.now() -print('\nTIME: %s seconds' % (finish - start).seconds) -print('======================') -print(new) -for i in to_new: - print(i) - -print('======================') -print(new2) -for i in to_new2: - print(i) diff --git a/_utils/check_HT.py b/_utils/check_HT.py deleted file mode 100644 index e60e6b3..0000000 --- a/_utils/check_HT.py +++ /dev/null @@ -1,60 +0,0 @@ -# coding=utf-8 -import os - -import datetime -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from journals.models import HomeworkTry, HomeworkJ - - -def good(tr): - if not tr.success: - tr.success = True - if not tr.f_date: - tr.f_date = tr.date - tr.save() - - -def fail(tr): - if tr.success: - tr.success = False - if not tr.f_date: - if tr.date: - tr.f_date = tr.date - else: - tr.f_date = datetime.datetime.now() - tr.save() - - -def empty(tr): - tr.delete() - -for i in HomeworkTry.objects.all(): - if i.comments.all(): - for comment in i.comments.all(): - if comment.owner.in_role == 'T': - if u'Задача принята!' in comment.text: - good(i) - break - elif u'Отправлено на доработку!' in comment.text: - fail(i) - break - else: - print comment.text - result = raw_input(u'Сдано? Y/N: ') - if result in ['y', 'Y', 'н', 'Н']: - good(i) - elif result in ['n', 'N', 'т', 'Т']: - fail(i) - else: - empty(i) - -#for i in HomeworkJ.objects.all(): -# if i.date and i.f_date and not i.success: -# i.success = True -# i.save() diff --git a/_utils/check_course_journal.py b/_utils/check_course_journal.py deleted file mode 100644 index 04c60f2..0000000 --- a/_utils/check_course_journal.py +++ /dev/null @@ -1,64 +0,0 @@ -#! coding: utf-8 - -import os -import django -import sys -import os - -from datetime import datetime - -sys.path.append("/var/www/skillbox") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from lms.settings import BASE_DIR -from courses.models import Course -from finance.models import Price -from journals.models import TeacherJ, check_journal - - -def check_course_journal(course_id): - print('===========\nКурс: %s\n==============\n' % Course.objects.get(id=course_id).title) - - print('Начало проверки журнала курса') - global_start = start = datetime.now() - course = Course.objects.get(id=course_id) - course.build_map() - finish = datetime.now() - print('Конец проверки журнала курса. Длительность: %s мсек\n' % (finish - start).microseconds) - - print('Начало проверки услуг') - start = datetime.now() - all = Price.objects.filter(by_time=0, post_fire=0, course__id=course_id).count() - print('Количество услуг на проверку: %s' % all) - for i in Price.objects.filter(by_time=0, post_fire=0, course__id=course_id): - i.check_points() - finish = datetime.now() - print('Конец проверки услуг. Длительность: %s мсек\n' % (finish - start).microseconds) - - print('Начало очистки двойных журналов') - start = datetime.now() - os.system('python clean_twice_course_journals.py %s' % course_id) - finish = datetime.now() - print('Конец очистки двойных журналов. Длительность: %s\n' % (finish - start).microseconds) - - print('Начало проверки журналов') - all = TeacherJ.objects.filter(progress__gt=0, course__id=course_id).count() - print('Количество журналов на проверку: %s' % all) - for i in TeacherJ.objects.filter(progress__gt=0, course__id=course_id).order_by('-id'): - check_journal(i, from_console=True) - print('Конец проверки журналов. Длительность: %s сек\n' % (finish - start).microseconds) - - print('Начало открытия уроков курса') - start = datetime.now() - os.system('python open_course_lesson.py %s' % course_id) - finish = datetime.now() - print('Конец открытия уроков курса. Длительность: %s\n' % (finish - start).microseconds) - - global_finish = datetime.now() - print('==============================\nДлительность: %s сек' % (global_finish - global_start).seconds) - - -if __name__ == "__main__": - course_id = sys.argv[1] - check_course_journal(course_id) diff --git a/_utils/check_course_map.py b/_utils/check_course_map.py deleted file mode 100644 index 5a8eba3..0000000 --- a/_utils/check_course_map.py +++ /dev/null @@ -1,12 +0,0 @@ - -# coding=utf-8 -import os -import datetime -import django -import sys -sys.path.append("/var/www/skillbox/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from courses.models import Course -for course in Course.objects.all(): - course.build_map() diff --git a/_utils/check_dubble_users_ip.py b/_utils/check_dubble_users_ip.py deleted file mode 100644 index ebffa65..0000000 --- a/_utils/check_dubble_users_ip.py +++ /dev/null @@ -1,21 +0,0 @@ -# coding=utf-8 -import os -import django -import sys -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from access.models import UserRequest - -_in = { - #'user': [] -} - -for i in UserRequest.objects.all(): - if not _in.get(i.user.id): - _in[i.user.id] = [i.ip] - else: - if i.ip in _in[i.user.id]: - i.delete() - else: - _in[i.user.id].append(i.ip) diff --git a/_utils/check_empty_LJ.py b/_utils/check_empty_LJ.py deleted file mode 100644 index 9e358c9..0000000 --- a/_utils/check_empty_LJ.py +++ /dev/null @@ -1,12 +0,0 @@ -import os -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from journals.models import LessonJ - -for lj in LessonJ.objects.filter(parent=None): - print lj - lj.save('only_parent') diff --git a/_utils/check_expired.py b/_utils/check_expired.py deleted file mode 100644 index a45efad..0000000 --- a/_utils/check_expired.py +++ /dev/null @@ -1,24 +0,0 @@ -# coding=utf-8 -import datetime -import os -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from access.models import User -from journals.models import ExamTry, HomeworkTry -from management.letters import sent_new_expired - -for res in (ExamTry.objects.filter(f_date=None).exclude(expired=True), - HomeworkTry.objects.filter(f_date=None).exclude(expired=True)): - #print res - for _try in res: - #print _try - # Проверка экзамена - if _try.date + datetime.timedelta(days=1) < datetime.datetime.now(): - _try.expired = True - _try.save() - for user in User.objects.filter(in_role='S2'): - sent_new_expired(_try, user.email) diff --git a/_utils/check_exsists_journal.py b/_utils/check_exsists_journal.py deleted file mode 100644 index 485ec0d..0000000 --- a/_utils/check_exsists_journal.py +++ /dev/null @@ -1,20 +0,0 @@ -# coding=utf-8 -import os - -import datetime -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from courses.models import Course -from journals.models import TeacherJ -from access.models import User - -for user in User.objects.all(): - for course in Course.objects.all(): - if not TeacherJ.objects.filter(student=user, course=course).exists(): - - print course - print user \ No newline at end of file diff --git a/_utils/check_journal_access.py b/_utils/check_journal_access.py deleted file mode 100644 index 7002cbd..0000000 --- a/_utils/check_journal_access.py +++ /dev/null @@ -1,106 +0,0 @@ -# coding=utf-8 -import os - -import datetime -import django -import sys - - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from journals.models import TeacherJ, LessonJ, HomeworkJ, ExamJ, CourseThemeJ -from courses.models import Course, CourseMap - - -def getMap_journal(_map, student): - ob = None - if _map._type == 'L': - #try: - ob = LessonJ.objects.get(material=_map.lesson, student=student) - #except LessonJ.DoesNotExist: - # print _map.lesson - # print student.email - # raise LessonJ.DoesNotExist - - elif _map._type == 'H': - #try: - ob = HomeworkJ.objects.get(material=_map.homework, student=student) - #except HomeworkJ.DoesNotExist: - # print _map.lesson - # print student.email - # raise HomeworkJ.DoesNotExist - - elif _map._type == 'E': - #try: - ob = ExamJ.objects.get(material=_map.exam, student=student) - #except ExamJ.DoesNotExist: - # print _map.lesson - # print student.email - # raise ExamJ.DoesNotExist - - return ob - - -def rel(j): - j.date = None - j.f_date = None - j.success = False - j.save() - -for course in Course.objects.all(): - print course - for journal in TeacherJ.objects.filter(course=course).order_by('-student__id'): - for theme in CourseThemeJ.objects.filter(parent=journal): - #print theme - theme.date = None - theme.f_date = None - theme.success = False - theme.save() - - last = None - _reload = False - - for _map in CourseMap.objects.filter(course=course).order_by('sort'): - try: - j = getMap_journal(_map, journal.student) - except LessonJ.DoesNotExist: - pass - except HomeworkJ.DoesNotExist: - pass - except ExamJ.DoesNotExist: - pass - else: - status = j.get_status_flag() - - if status == 'F' and j.date and j.f_date and j.success and not _reload: - last = j - - elif _reload: - rel(j) - - elif _map.sort and last: - if getMap_journal(CourseMap.objects.get(course=course, sort=int(_map.sort)-1), journal.student) == last: - _reload = True - s = False - if not j.date: - j.date = datetime.datetime.now() - s = True - - if j.f_date: - j.f_date = None - s = True - - if j.success: - j.success = False - s = True - - if s: - j.save() - - elif _map.sort and not last: - _reload = True - rel(j) - - - diff --git a/_utils/check_journals.py b/_utils/check_journals.py deleted file mode 100644 index 93b0d88..0000000 --- a/_utils/check_journals.py +++ /dev/null @@ -1,38 +0,0 @@ -# coding=utf-8 -import os -import django -import sys -import datetime -import os -start = datetime.datetime.now() -sys.path.append("/var/www/skillbox/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -os.system('python check_course_map.py') -os.system('python check_prices.py') -from lms.settings import BASE_DIR -from journals.models import TeacherJ, check_journal -from lms.tools import show_progress - - -os.system('python clean_twice_journals.py') - -all = TeacherJ.objects.filter(progress__gt=0).count() - -print('Количество журналов на проверку: %s' % all) -n = 0 -f = open(os.path.join(BASE_DIR, 'journals/check_switch'), 'w') -f.write('1\n') -f.close() - -for i in TeacherJ.objects.filter(progress__gt=0).order_by('-id'): - check_journal(i, from_console=True) - show_progress(all, n) - n += 1 - -f = open(os.path.join(BASE_DIR, 'journals/check_switch'), 'w') -f.write('0\n') -f.close() -os.system('python open_lesson.py') -finish = datetime.datetime.now() -print('\nTIME: %s seconds' % (finish-start).seconds) diff --git a/_utils/check_lesson_access.py b/_utils/check_lesson_access.py deleted file mode 100644 index 1fa762d..0000000 --- a/_utils/check_lesson_access.py +++ /dev/null @@ -1,28 +0,0 @@ -# coding=utf-8 -import os -import django -import sys -import datetime - -start = datetime.datetime.now() -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from journals.models import TeacherJ, LessonJ -# Получить все журналы, где начато обучение -for journal in TeacherJ.objects.filter(status='W'): - before = [] - for l in LessonJ.objects.filter(parent__parent=journal).order_by('material__token'): - if l.get_status_flag()=='N': - before.append(l) - else: - if before: - for i in before: - print('Открыл: {0}'.format(i.id)) - i.open_material() - -# Получить -# Найти уроки, находящиеся в статусе N в середине курса - -# Открыть в статус - доступно diff --git a/_utils/check_lesson_open.py b/_utils/check_lesson_open.py deleted file mode 100644 index 8bc8e07..0000000 --- a/_utils/check_lesson_open.py +++ /dev/null @@ -1,16 +0,0 @@ -# coding=utf-8 -import os -import django -import sys -import datetime - -start = datetime.datetime.now() -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from journals.models import HomeworkJ - -for i in HomeworkJ.objects.filter(f_date=None).exclude(date=None): - i.open_next() - diff --git a/_utils/check_lesson_open_near_homework.py b/_utils/check_lesson_open_near_homework.py deleted file mode 100644 index 8965481..0000000 --- a/_utils/check_lesson_open_near_homework.py +++ /dev/null @@ -1,47 +0,0 @@ -# coding=utf-8 -import os -import django -import sys -import datetime -print(1) -start = datetime.datetime.now() -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -print(2) -from courses.models import CourseMap -from journals.models import TeacherJ, LessonJ, HomeworkJ, HomeworkTry, CourseThemeJ -# Получить все журналы, где начато обучение -print(3) -last = TeacherJ.objects.filter(status='W').order_by('-id').last().id -print(4) - -for journal in TeacherJ.objects.filter(id=26933).order_by('-id'): - print(journal.id) - if HomeworkTry.objects.filter(material__course__id=journal.course.id, student__id=journal.student.id).exists(): - print('4a') - hw = int(CourseMap.objects.get( - homework=HomeworkTry.objects.filter(parent__parent__parent=journal).order_by('id').last().material).sort) - print(hw) - for i in LessonJ.objects.filter(parent__parent=journal): - if int(CourseMap.objects.get(lesson=i.material).sort) > hw: - i.date = None - i.f_date = None - i.success = False - i.save() - else: - try: - i.saw_this() - except Exception as e: - print(e) - print(i) - - - for ct in CourseThemeJ.objects.filter(parent=journal): - if LessonJ.objects.filter(parent=ct).count() == LessonJ.objects.filter(parent=ct, date=None).count(): - ct.date = None - ct.save() - -print(5) -#for i in HomeworkJ.objects.filter(f_date=None).exclude(date=None): -# i.open_next() diff --git a/_utils/check_lesson_statuses.py b/_utils/check_lesson_statuses.py deleted file mode 100644 index 0dc15fc..0000000 --- a/_utils/check_lesson_statuses.py +++ /dev/null @@ -1,28 +0,0 @@ -# coding=utf-8 -import os - -import datetime -import django -import sys - - - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from __migrate.post_fixtures import show_progress -from journals.models import HomeworkJ, LessonJ, TeacherJ -from access.models import User -from courses.models import Course - -_now = 0 -big_len = TeacherJ.objects.all().count() -show_progress(big_len, _now) - -for journal in TeacherJ.objects.all(): - for hj in HomeworkJ.objects.filter(student=journal.student): - if hj.get_status_flag() != 'N': - for lj in LessonJ.objects.filter(student=journal.student, material__theme=hj.material.theme): - lj.saw_this() - _now += 1 - show_progress(big_len, _now) diff --git a/_utils/check_many_journals.py b/_utils/check_many_journals.py deleted file mode 100644 index 4d578ba..0000000 --- a/_utils/check_many_journals.py +++ /dev/null @@ -1,8 +0,0 @@ -import os -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - diff --git a/_utils/check_middle_HT.py b/_utils/check_middle_HT.py deleted file mode 100644 index ed81eb6..0000000 --- a/_utils/check_middle_HT.py +++ /dev/null @@ -1,9 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - diff --git a/_utils/check_opens.py b/_utils/check_opens.py deleted file mode 100644 index db0cf36..0000000 --- a/_utils/check_opens.py +++ /dev/null @@ -1,26 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from journals.models import TeacherJ, CourseThemeJ, LessonJ, ExamJ, HomeworkJ - -for i in TeacherJ.objects.all(): - if i.waiting.exists(): - for n in i.waiting.all(): - obj = n.get_obj() - if n._type == 'L': - mj = LessonJ.objects.get(material=obj, student=i.student) - - elif n._type == 'H': - mj = HomeworkJ.objects.get(material=obj, student=i.student) - - elif n._type == 'E': - mj = ExamJ.objects.get(material=obj, student=i.student) - - cj = CourseThemeJ.objects.get(student=i.student, material=obj.theme) - if cj.get_status_flag() == 'N' or mj.get_status_flag() != 'N': - i.waiting.remove(n) diff --git a/_utils/check_prices.py b/_utils/check_prices.py deleted file mode 100644 index a80718b..0000000 --- a/_utils/check_prices.py +++ /dev/null @@ -1,27 +0,0 @@ -# coding=utf-8 -import os -import django -import sys -import datetime - - -start = datetime.datetime.now() -sys.path.append("/var/www/skillbox/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from finance.models import Price -from lms.tools import show_progress - -all = Price.objects.filter(by_time=0, post_fire=0).count() - -print('Количество услуг на проверку: %s' % all) -n = 0 - -for i in Price.objects.filter(by_time=0, post_fire=0): - i.check_points() - show_progress(all, n) - n += 1 - -finish = datetime.datetime.now() -print('\nTIME: %s seconds' % (finish-start).seconds) diff --git a/_utils/check_robo_prep.py b/_utils/check_robo_prep.py deleted file mode 100644 index 5cf8839..0000000 --- a/_utils/check_robo_prep.py +++ /dev/null @@ -1,41 +0,0 @@ -from __future__ import print_function -import datetime -# coding=utf-8 -import os -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from access.models import User -from journals.models import ExamTry, HomeworkTry - - -def check_robo_prep(): - teacher = User.objects.get(email='t@lms.ru') - handler = [] - for journal in HomeworkTry.objects.filter(teacher=teacher, f_date=None).exclude(success=True, date=None).order_by('date'): - if journal.parent.get_status_flag not in ['N', 'F']: - handler.append(journal) - - for journal in ExamTry.objects.filter(teacher=teacher, f_date=None).exclude(success=True, date=None).order_by('date'): - if journal.parent.get_status_flag not in ['N', 'F']: - handler.append(journal) - - print(handler) - for _tr in handler: - for _cm in _tr.comments.all(): - s = False - print(_cm.text) - if 'GO_TO_SUCCESS' in _cm.text: - _tr.success = True - _tr.f_date = datetime.datetime.now() - s = True - elif 'GO_TO_FAIL' in _cm.text: - _tr.f_date = datetime.datetime.now() - s = True - if s: - _tr.save() - -check_robo_prep() \ No newline at end of file diff --git a/_utils/check_robo_teacher.py b/_utils/check_robo_teacher.py deleted file mode 100644 index fde4d2b..0000000 --- a/_utils/check_robo_teacher.py +++ /dev/null @@ -1,24 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -# Переназначение перподавателя -from journals.models import TeacherJ, HomeworkJ, HomeworkTry -from access.models import User -old = User.objects.get(id=1324) -for tj in TeacherJ.objects.filter(teacher=old).exclude(student=None): - if not (tj.student.is_admin and tj.student.is_staff): - print(tj.id) - tj.teacher = None - tj.save() - ht = tj.get_current_ht() - hw = tj.get_last_hw() - hw.teacher=None - hw.save() - ht.teacher=None - ht.save() - print(ht.teacher) diff --git a/_utils/check_storage.py b/_utils/check_storage.py deleted file mode 100644 index 5ef95ab..0000000 --- a/_utils/check_storage.py +++ /dev/null @@ -1,31 +0,0 @@ -# coding=utf-8 -from __future__ import print_function -from __future__ import print_function -import os -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from storage.models import Storage, CroppedImage - -errors = [] -for store in Storage.objects.all(): - # Проверить original, f_format.icon - obj = (store.original.path if store.original else '', - store.f_format.icon.path if store.f_format and store.f_format.icon else '') - for i in obj: - if i and not os.path.exists(i): - print('Storage: {0}'.format(store.id)) - #print 'Ошибки файлов: {0}'.format(len(errors)) - -for store in CroppedImage.objects.all(): - # croppedimage.big, croppedimage.middle, croppedimage.small - obj = (store.big.path if store.big else '', - store.middle.path if store.middle else '', - store.small.path if store.small else '') - for i in obj: - if i and not os.path.exists(i): - print('CroppedImage: {0}'.format(store.id)) - #print 'Ошибки файлов: {0}'.format(len(errors)) diff --git a/_utils/check_waiting.py b/_utils/check_waiting.py deleted file mode 100644 index 90a2197..0000000 --- a/_utils/check_waiting.py +++ /dev/null @@ -1,24 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from journals.models import TeacherJ, ExamJ, HomeworkJ, LessonJ - -for journal in TeacherJ.objects.all(): - if journal.waiting.exists(): - for i in journal.waiting.all(): - j = None - _type, _map = i.get_next() - if _type == 'L': - j = LessonJ.objects.filter(material=_map, student=journal.student) - elif _type == 'H': - j = HomeworkJ.objects.filter(material=_map, student=journal.student) - elif _type == 'E': - j = ExamJ.objects.filter(material=_map, student=journal.student) - - if j and j.first().get_status_flag() == 'N': - journal.waiting.remove(i) diff --git a/_utils/clean_bb_tags.py b/_utils/clean_bb_tags.py deleted file mode 100644 index 3ab77bc..0000000 --- a/_utils/clean_bb_tags.py +++ /dev/null @@ -1,56 +0,0 @@ -# coding=utf-8 -import os -import django -import sys -import datetime - - -start = datetime.datetime.now() -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from management.models import Comment, gen_comment_token -from lms.tools import show_progress - -all = Comment.objects.all().count() - -print('Количество точек на проверку: %s' % all) -n = 0 - -exclude = ['[size=100]', '[/size]', '[size=150]', '[/font]', '[table]', '[/table]', - '[tr]', '[td]', '[/td]', '[/tr]'] -rever = ['[b]', '[i]', '[*]', '[url=', ] -for i in exclude: - rever.append(i) - -for comment in Comment.objects.all().order_by('-date'): - s = False - if not comment.token: - comment.token = gen_comment_token(comment) - s = True - - bb_text = str(comment.bbtext) - if not bb_text: - r = False - for i in rever: - if i in comment.text: - r = True - if r: - bb_text = comment.text - s = True - - for i in exclude: - if i in bb_text: - bb_text = bb_text.replace(i, '') - s = True - - if s: - comment.bbtext = bb_text - comment.save() - - show_progress(all, n) - n += 1 - -finish = datetime.datetime.now() -print('\nTIME: %s seconds' % (finish-start).seconds) diff --git a/_utils/clean_bill.py b/_utils/clean_bill.py deleted file mode 100644 index 1e9c91e..0000000 --- a/_utils/clean_bill.py +++ /dev/null @@ -1,20 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from finance.models import Bill -from access.models import User -from courses.models import Course - -result = {} -for user in User.objects.all(): - result[user.email] = dict({course.id: False for course in Course.objects.all()}) -for bill in Bill.objects.filter(status='F').order_by('date'): - if result[bill.user.email][bill.service.course.id]: - bill.delete() - else: - result[bill.user.email][bill.service.course.id] = True diff --git a/_utils/clean_tj.py b/_utils/clean_tj.py deleted file mode 100644 index a38e867..0000000 --- a/_utils/clean_tj.py +++ /dev/null @@ -1,12 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from journals.models import TeacherJ -for i in TeacherJ.objects.filter(start_date=None): - i.delete() - diff --git a/_utils/clean_twice_course_journals.py b/_utils/clean_twice_course_journals.py deleted file mode 100644 index 41d8d59..0000000 --- a/_utils/clean_twice_course_journals.py +++ /dev/null @@ -1,74 +0,0 @@ -# coding=utf-8 -import os -import django -import sys -import datetime - -start = datetime.datetime.now() -sys.path.append("/var/www/skillbox/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from courses.models import Course, CourseTheme, Exam, Homework, Lesson -from journals.models import TeacherJ, CourseThemeJ, LessonJ, HomeworkJ, ExamJ -from access.models import User -from lms.tools import show_progress - - -def check_this(obj, collection): - if not collection.get(obj.material.id): - collection[obj.material.id] = True - else: - obj.delete() - - -def check_TJ(_course, _user): - try: - _tj = TeacherJ.objects.get(course=_course, student=_user) - except TeacherJ.DoesNotExist: - return None - except TeacherJ.MultipleObjectsReturned: - _tmp = TeacherJ.objects.filter(course=_course, student=_user).order_by('start_date') - _tj = _tmp[0] - for i in _tmp: - if i != _tj: - i.delete() - - return _tj - -course_id = sys.argv[1] - -_all = User.objects.all().count() -_n = 0 -_about_time = [] -for _user in User.objects.all(): # todo only course users - _st = datetime.datetime.now() - _course = Course.objects.filter(id=course_id) - _l = dict({i.id: False for i in Lesson.objects.filter(course=_course)}) - _h = dict({i.id: False for i in Homework.objects.filter(course=_course)}) - _e = dict({i.id: False for i in Exam.objects.filter(course=_course)}) - _t = dict({i.id: False for i in CourseTheme.objects.filter(course=_course)}) - - _tj = check_TJ(_course, _user) - - if _tj: - for _cj in CourseThemeJ.objects.filter(parent=_tj): - check_this(_cj, _t) - - for _lj in LessonJ.objects.filter(parent__parent=_tj): - check_this(_lj, _l) - - for _hj in HomeworkJ.objects.filter(parent__parent=_tj): - check_this(_hj, _h) - - for _ej in ExamJ.objects.filter(parent__parent=_tj): - check_this(_ej, _e) - - _ft = datetime.datetime.now() - _about_time.append((_ft - _st).microseconds) - _average = (((_all - _n) * (sum(_about_time) / len(_about_time)))/1000000)/60 - show_progress(_all, _n, post=' // "Удаление дуближей журналов" // Расчетное оставщееся время Этапа: {0:6.4} мин '.format(_average)) - _n += 1 - -finish = datetime.datetime.now() -print('\nTIME: %s seconds' % (finish - start).seconds) diff --git a/_utils/clean_twice_journals.py b/_utils/clean_twice_journals.py deleted file mode 100644 index 8aa8df5..0000000 --- a/_utils/clean_twice_journals.py +++ /dev/null @@ -1,73 +0,0 @@ -# coding=utf-8 -import os -import django -import sys -import datetime - -start = datetime.datetime.now() -sys.path.append("/var/www/skillbox/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from courses.models import Course, CourseTheme, Exam, Homework, Lesson -from journals.models import TeacherJ, CourseThemeJ, LessonJ, HomeworkJ, ExamJ -from access.models import User -from lms.tools import show_progress - - -def check_this(obj, collection): - if not collection.get(obj.material.id): - collection[obj.material.id] = True - else: - obj.delete() - - -def check_TJ(_course, _user): - try: - _tj = TeacherJ.objects.get(course=_course, student=_user) - except TeacherJ.DoesNotExist: - return None - except TeacherJ.MultipleObjectsReturned: - _tmp = TeacherJ.objects.filter(course=_course, student=_user).order_by('start_date') - _tj = _tmp[0] - for i in _tmp: - if i != _tj: - i.delete() - - return _tj - - -_all = User.objects.all().count() -_n = 0 -_about_time = [] -for _user in User.objects.all(): - _st = datetime.datetime.now() - for _course in Course.objects.all(): - _l = dict({i.id: False for i in Lesson.objects.filter(course=_course)}) - _h = dict({i.id: False for i in Homework.objects.filter(course=_course)}) - _e = dict({i.id: False for i in Exam.objects.filter(course=_course)}) - _t = dict({i.id: False for i in CourseTheme.objects.filter(course=_course)}) - - _tj = check_TJ(_course, _user) - - if _tj: - for _cj in CourseThemeJ.objects.filter(parent=_tj): - check_this(_cj, _t) - - for _lj in LessonJ.objects.filter(parent__parent=_tj): - check_this(_lj, _l) - - for _hj in HomeworkJ.objects.filter(parent__parent=_tj): - check_this(_hj, _h) - - for _ej in ExamJ.objects.filter(parent__parent=_tj): - check_this(_ej, _e) - - _ft = datetime.datetime.now() - _about_time.append((_ft - _st).microseconds) - _average = (((_all - _n) * (sum(_about_time) / len(_about_time)))/1000000)/60 - show_progress(_all, _n, post=' // "Удаление дуближей журналов" // Расчетное оставщееся время Этапа: {0:6.4} мин '.format(_average)) - _n += 1 - -finish = datetime.datetime.now() -print('\nTIME: %s seconds' % (finish - start).seconds) diff --git a/_utils/clear_db.py b/_utils/clear_db.py deleted file mode 100644 index 091e69b..0000000 --- a/_utils/clear_db.py +++ /dev/null @@ -1,20 +0,0 @@ -import os - -APPS = ('management', 'storage', 'access', 'courses', 'finance', 'journals', ) -BASE_DIR = os.path.dirname(os.path.abspath(__file__)) - - -def main(): - #os.system('rm -rf fixtures/') - #os.system('cp -R fixtures_back/ fixtures/') - for i in APPS: - os.chdir(os.path.join(BASE_DIR, i)) - os.system('rm -rf *.pyc') - os.system('rm -rf migrations') - os.chdir(os.path.join(BASE_DIR)) - #os.system('python manage.py makemigrations {0}'.format(i)) - #os.system('python manage.py migrate') - - -if __name__ == '__main__': - main() diff --git a/_utils/copy_user.py b/_utils/copy_user.py deleted file mode 100644 index 368ce33..0000000 --- a/_utils/copy_user.py +++ /dev/null @@ -1,106 +0,0 @@ -# coding=utf-8 -import copy - -import os -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from access.models import User, ActionJ -from journals.models import TeacherJ, CourseThemeJ, AchievementJ, DiplomaJ, ExamTry, HomeworkTry, ExamJ, HomeworkJ, \ - LessonJ -from finance.models import Bill -from management.models import Comment - -_source = User.objects.get(id=2) -_to = User.objects.get(id=465) - -# 1) Скопировать Журнал преподавания -# 2) Журнал тем -# 3) Журнал Уроков -# 4) Журнал ДЗ -# 5) Журнал Экзаменов -# 6) Комментарии -# 7) Журнал Диплома -#Bill.objects.filter(user=_to).delete() -#for bill in Bill.objects.filter(user=_source): -# bill.user = _to -# bill.pk = None -# bill.save() - -#TeacherJ.objects.filter(student=_to).delete() -#CourseThemeJ.objects.filter(student=_to).delete() -##ExamJ.objects.filter(student=_to).delete() -#ExamTry.objects.filter(student=_to).delete() -#HomeworkJ.objects.filter(student=_to).delete() -#HomeworkTry.objects.filter(student=_to).delete() -#LessonJ.objects.filter(student=_to).delete() - -#for tj in TeacherJ.objects.filter(student=_source): -# to = tj -# tj.student = _to -# tj.pk = None -# tj.save() - -# for cj in CourseThemeJ.objects.filter(student=_source, parent=to): -# co = copy.copy(cj) -# cj.student = _to -# cj.parent = tj -# cj.pk = None -# cj.save() - -# for lj in LessonJ.objects.filter(student=_source, parent=co): -# lj.student = _to -# lj.parent = cj -# lj.pk = None -# lj.save() - -# for ej in ExamJ.objects.filter(student=_source, parent=co): -# eo = copy.copy(ej) -# ej.student = _to -# ej.parent = cj -# ej.pk = None -# ej.save() - -# for et in ExamTry.objects.filter(student=_source, parent=eo): -# et.student = _to -# et.parent = ej -# et.pk = None -# et.save() - - #for hj in HomeworkJ.objects.filter(student=_source, parent=co): -# ho = copy.copy(hj) -# hj.student = _to -# hj.parent = cj -# hj.pk = None -# hj.save() - -# for ht in HomeworkTry.objects.filter(student=_source, parent=ho): -# ht.student = _to -# ht.parent = hj -# ht.pk = None -# ht.save() - - - -AchievementJ.objects.filter(student=_to).delete() -for aj in AchievementJ.objects.filter(student=_source): - aj.student = _to - aj.pk = None - aj.save() - -#DiplomaJ.objects.filter(student=_to).delete() -#for dj in DiplomaJ.objects.filter(student=_source): -# dj.student = _to -# dj.gen = False -# dj.key = '' -# dj.pk = None -# dj.save() - -#ActionJ.objects.filter(student=_to).delete() -#for aj in ActionJ.objects.filter(student=_source): -# aj.student = _to -# aj.pk = None -# aj.save() diff --git a/_utils/courses_dump.json b/_utils/courses_dump.json deleted file mode 100644 index 0b45649..0000000 --- a/_utils/courses_dump.json +++ /dev/null @@ -1 +0,0 @@ -[{"model": "courses.course", "pk": 1, "fields": {"level": "A", "direction": null, "public": true, "title": "\u0412\u0435\u0431-\u0414\u0438\u0437\u0430\u0439\u043d PRO", "description": "", "image": "course/Pro_6NrHaSE.jpg", "big_image": "", "page": "", "preview": "", "sort": 0, "use_fail": false, "basic_len": 0, "addition_len": 0, "min_price": 0, "buy_icon": "", "teachers": [1378]}}, {"model": "courses.course", "pk": 2, "fields": {"level": "A", "direction": null, "public": true, "title": "\u041f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u044f PR-\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440", "description": "", "image": "course/pr_BYjR7PM.jpg", "big_image": "", "page": "", "preview": "", "sort": 0, "use_fail": false, "basic_len": 5, "addition_len": 0, "min_price": 19900, "buy_icon": "", "teachers": [1378]}}, {"model": "courses.course", "pk": 3, "fields": {"level": "A", "direction": null, "public": true, "title": "\u041a\u0430\u043a \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u0435\u0431-\u0441\u0442\u0443\u0434\u0438\u044e", "description": "", "image": "course/Studio_zBYthdv.jpg", "big_image": "", "page": "", "preview": "", "sort": 0, "use_fail": false, "basic_len": 15, "addition_len": 0, "min_price": 0, "buy_icon": "", "teachers": [1378]}}, {"model": "courses.course", "pk": 4, "fields": {"level": "A", "direction": null, "public": true, "title": "\u041f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043c\u0430\u0440\u043a\u0435\u0442\u043e\u043b\u043e\u0433 \u043e\u0442 \u0410 \u0434\u043e \u042f", "description": "", "image": "course/marketolog_8vVLeK8.jpg", "big_image": "", "page": "", "preview": "", "sort": 0, "use_fail": false, "basic_len": 11, "addition_len": 0, "min_price": 0, "buy_icon": "", "teachers": [1378]}}, {"model": "courses.course", "pk": 5, "fields": {"level": "B", "direction": null, "public": true, "title": "\u0412\u0435\u0431-\u0414\u0438\u0437\u0430\u0439\u043d \u0434\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445", "description": "", "image": "course/design_g3BEIIZ.jpg", "big_image": "", "page": "", "preview": "", "sort": 0, "use_fail": false, "basic_len": 0, "addition_len": 0, "min_price": 0, "buy_icon": "", "teachers": [1378]}}, {"model": "courses.course", "pk": 6, "fields": {"level": "E", "direction": null, "public": true, "title": "ux design", "description": "", "image": "course/aus_RIR22ba.jpg", "big_image": "", "page": "", "preview": "", "sort": 0, "use_fail": false, "basic_len": 0, "addition_len": 0, "min_price": 0, "buy_icon": "", "teachers": [1378]}}, {"model": "courses.coursetheme", "pk": 1, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 1, "sort": 1, "title": "\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 2, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 1, "sort": 2, "title": "\u0422\u0440\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u0438\u0437\u0430\u0439\u043d\u0430", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 3, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 1, "sort": 3, "title": "\u041f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 4, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 1, "sort": 4, "title": "\u041a\u043e\u043f\u0438\u0440\u0430\u0439\u0442\u0438\u043d\u0433", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 5, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 1, "sort": 5, "title": "\u0421\u0435\u0442\u043a\u0430", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 6, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 1, "sort": 6, "title": "\u0422\u0438\u043f\u043e\u0433\u0440\u0430\u0444\u0438\u043a\u0430", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 7, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 1, "sort": 7, "title": "\u041f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 8, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 1, "sort": 8, "title": "\u0413\u0440\u0430\u0444\u0438\u043a\u0430", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 9, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 1, "sort": 9, "title": "\u041f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 10, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 1, "sort": 10, "title": "\u0421\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 11, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 1, "sort": 11, "title": "\u0420\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u0438 \u0441\u0430\u0439\u0442\u043e\u0432", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 12, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 1, "sort": 12, "title": "\u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0434\u0438\u0437\u0430\u0439\u043d", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 13, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 1, "sort": 13, "title": "\u041f\u043e\u0440\u0442\u0444\u043e\u043b\u0438\u043e", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 14, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 1, "sort": 14, "title": "\u0414\u0438\u0437\u0430\u0439\u043d \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 15, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 1, "sort": 15, "title": "\u041c\u043e\u0431\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 16, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 1, "sort": 16, "title": "\u0420\u0430\u0431\u043e\u0442\u0430 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0438 \u0443\u0440\u043e\u0432\u043d\u0438 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 17, "fields": {"price_type": "B", "_type": "M", "icon": "", "course": 1, "sort": 17, "title": "\u0411\u043e\u043d\u0443\u0441. \u0421\u043a\u0435\u0442\u0447", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 18, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 2, "sort": 1, "title": "\u041f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u044f PR \u0438 \u0435\u0451 \u043e\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 19, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 2, "sort": 2, "title": "\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u0435\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 20, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 2, "sort": 3, "title": "\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 21, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 2, "sort": 4, "title": "\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 22, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 2, "sort": 5, "title": "\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 23, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 3, "sort": 1, "title": "\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u044d\u0442\u0430\u043f", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 24, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 3, "sort": 2, "title": "\u041c\u0430\u0442\u0440\u0438\u0446\u0430 \u0443\u0441\u043b\u0443\u0433", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 25, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 3, "sort": 3, "title": "\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u043d\u0435\u0433 \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0441\u0442\u0430\u0440\u0442\u0430?", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 26, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 3, "sort": 4, "title": "\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0444\u0438\u0440\u043c\u0443", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 27, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 3, "sort": 5, "title": "\u0423\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 28, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 3, "sort": 6, "title": "\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u0441 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043e\u0444\u0438\u0441", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 29, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 3, "sort": 7, "title": "\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438 \u0432 \u043e\u0444\u0438\u0441", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 30, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 3, "sort": 8, "title": "\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u043e\u0434\u0440\u044f\u0434\u0447\u0438\u043a\u0430\u043c\u0438", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 31, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 3, "sort": 9, "title": "\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 32, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 3, "sort": 10, "title": "\u0411\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u044f \u0438 \u0423\u0447\u0435\u0442", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 33, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 3, "sort": 11, "title": "\u042e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 34, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 3, "sort": 12, "title": "\u041f\u0440\u043e\u0434\u0430\u0436\u0438 \u0438 \u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 35, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 3, "sort": 14, "title": "\u0421\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 36, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 3, "sort": 13, "title": "\u041f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 37, "fields": {"price_type": "B", "_type": "E", "icon": "", "course": 3, "sort": 15, "title": "\u0411\u043e\u043d\u0443\u0441", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 38, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 4, "sort": 1, "title": "\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 39, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 4, "sort": 2, "title": "\u041f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 (SEO)", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 40, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 4, "sort": 3, "title": "\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u0430\u044f \u0440\u0435\u043a\u043b\u0430\u043c\u0430 (PPC)", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 41, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 4, "sort": 4, "title": "Email-\u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 42, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 4, "sort": 5, "title": "Social Media Marketing", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 43, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 4, "sort": 6, "title": "\u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0441\u0430\u0439\u0442\u044b", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 44, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 4, "sort": 7, "title": "\u041c\u0435\u0434\u0438\u0439\u043d\u0430\u044f \u0440\u0435\u043a\u043b\u0430\u043c\u0430", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 45, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 4, "sort": 8, "title": "\u0412\u0435\u0431-\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 46, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 4, "sort": 9, "title": "\u041c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 47, "fields": {"price_type": "B", "_type": "B", "icon": "", "course": 4, "sort": 10, "title": "\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435", "description": "", "empty": false}}, {"model": "courses.coursetheme", "pk": 48, "fields": {"price_type": "B", "_type": "E", "icon": "", "course": 4, "sort": 11, "title": "\u041a\u0430\u0440\u044c\u0435\u0440\u0430", "description": "", "empty": false}}, {"model": "courses.lesson", "pk": 1, "fields": {"free": true, "token": "1#0", "title": "\u0418\u043d\u0442\u0440\u043e \u043a \u043a\u0443\u0440\u0441\u0443", "sort": 1, "course": 1, "theme": 1, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 2, "fields": {"free": true, "token": "1#1", "title": "\u042d\u0442\u0430\u043f\u044b \u0442\u0432\u043e\u0440\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430", "sort": 2, "course": 1, "theme": 1, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 3, "fields": {"free": true, "token": "1#2", "title": "\u0413\u0434\u0435 \u0438\u0441\u043a\u0430\u0442\u044c \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0435\u043d\u0438\u0435", "sort": 3, "course": 1, "theme": 1, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 4, "fields": {"free": true, "token": "1#3", "title": "\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u0430 \u0438 \u043a\u0430\u043a \u043d\u0430 \u043d\u0438\u0445 \u043d\u0435 \u043e\u0442\u0432\u043b\u0435\u043a\u0430\u0442\u044c\u0441\u044f", "sort": 4, "course": 1, "theme": 1, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 5, "fields": {"free": true, "token": "1#4", "title": "\u0414\u0435\u043b\u0430\u0435\u043c 3 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438 \u0437\u0430 \u043f\u043e\u043b\u0447\u0430\u0441\u0430", "sort": 5, "course": 1, "theme": 1, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 6, "fields": {"free": false, "token": "1#6", "title": "\u0418\u043d\u0442\u0440\u043e", "sort": 1, "course": 1, "theme": 2, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 7, "fields": {"free": false, "token": "1#7", "title": "\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0439 \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0443\u0440\u043e\u0432\u043d\u044f\u043c\u0438", "sort": 2, "course": 1, "theme": 2, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 8, "fields": {"free": false, "token": "1#8", "title": "\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u0435\u043c \u0443\u0440\u043e\u0432\u043d\u0438 \u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u044f", "sort": 3, "course": 1, "theme": 2, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 9, "fields": {"free": false, "token": "1#9", "title": "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u0433\u0435\u0448\u0442\u0430\u043b\u044c\u0442-\u043f\u0441\u0438\u0445\u043e\u043b\u043e\u0433\u0438\u044e", "sort": 4, "course": 1, "theme": 2, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 10, "fields": {"free": false, "token": "1#10", "title": "\u041f\u0440\u043e\u0431\u0443\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432 \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0433\u0435\u0448\u0442\u0430\u043b\u044c\u0442", "sort": 5, "course": 1, "theme": 2, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 11, "fields": {"free": false, "token": "1#11", "title": "\u0412\u043a\u043b\u044e\u0447\u0430\u0439 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043c\u044b\u0448\u043b\u0435\u043d\u0438\u0435", "sort": 6, "course": 1, "theme": 2, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 12, "fields": {"free": false, "token": "1#12", "title": "\u0418\u043d\u0442\u0440\u043e", "sort": 1, "course": 1, "theme": 3, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 13, "fields": {"free": false, "token": "1#13", "title": "\u0417\u043e\u043b\u043e\u0442\u043e\u0435 \u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438", "sort": 2, "course": 1, "theme": 3, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 14, "fields": {"free": false, "token": "1#14", "title": "1, 10, 15. \u041f\u0440\u043e \u0448\u0430\u0433 \u0438 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f", "sort": 3, "course": 1, "theme": 3, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 15, "fields": {"free": false, "token": "1#15", "title": "\u042e\u0430\u0439 \u043a\u0438\u0442\u044b \u0438 \u0433\u0430\u0439\u0434\u044b (HIG)", "sort": 4, "course": 1, "theme": 3, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 16, "fields": {"free": false, "token": "1#16", "title": "\u0421\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0439 \u044d\u0442\u043e. \u0421\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0435\u043b\u0438\u0447\u0438\u043d", "sort": 5, "course": 1, "theme": 3, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 17, "fields": {"free": false, "token": "1#17", "title": "\u0418\u043d\u0442\u0440\u043e", "sort": 1, "course": 1, "theme": 4, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 18, "fields": {"free": false, "token": "1#18", "title": "\u041f\u043e\u0447\u0435\u043c\u0443 \u0431\u0435\u0437 \u0442\u0435\u043a\u0441\u0442\u0430 \u043d\u0435\u043b\u044c\u0437\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0434\u0438\u0437\u0430\u0439\u043d", "sort": 2, "course": 1, "theme": 4, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 19, "fields": {"free": false, "token": "1#19", "title": "\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u043d\u0435\u0442", "sort": 3, "course": 1, "theme": 4, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 20, "fields": {"free": false, "token": "1#20", "title": "\u041a\u0430\u043a \u043f\u0438\u0441\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438", "sort": 4, "course": 1, "theme": 4, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 21, "fields": {"free": false, "token": "1#21", "title": "\u041a\u0430\u043a \u043e\u0444\u043e\u0440\u043c\u043b\u044f\u0442\u044c \u0442\u0435\u043a\u0441\u0442", "sort": 5, "course": 1, "theme": 4, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 22, "fields": {"free": false, "token": "1#22", "title": "\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u043f\u0438\u0440\u0430\u0439\u0442\u0435\u0440\u0430", "sort": 6, "course": 1, "theme": 4, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 23, "fields": {"free": false, "token": "1#23", "title": "\u0418\u043d\u0442\u0440\u043e", "sort": 1, "course": 1, "theme": 5, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 24, "fields": {"free": false, "token": "1#24", "title": "\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u0430\u044f \u0441\u0435\u0442\u043a\u0430 \u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d\u0430 \u043d\u0443\u0436\u043d\u0430", "sort": 2, "course": 1, "theme": 5, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 25, "fields": {"free": false, "token": "1#25", "title": "\u0414\u043b\u044f \u0447\u0435\u0433\u043e \u043d\u0443\u0436\u0435\u043d \u043c\u043e\u0434\u0443\u043b\u044c", "sort": 3, "course": 1, "theme": 5, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 26, "fields": {"free": false, "token": "1#26", "title": "\u041e\u0442\u043b\u0438\u0447\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0432 \u0442\u0438\u043f\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u0438 \u0432\u0435\u0431\u0435", "sort": 4, "course": 1, "theme": 5, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 27, "fields": {"free": false, "token": "1#27", "title": "\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0432\u043e\u044e \u0441\u0435\u0442\u043a\u0443", "sort": 5, "course": 1, "theme": 5, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 28, "fields": {"free": false, "token": "1#28", "title": "\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0442\u0435\u043a\u0441\u0442 \u0432 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435", "sort": 6, "course": 1, "theme": 5, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 29, "fields": {"free": false, "token": "1#29", "title": "\u0418\u043d\u0442\u0440\u043e", "sort": 1, "course": 1, "theme": 6, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 30, "fields": {"free": false, "token": "1#30", "title": "\u0413\u043b\u0443\u0431\u043e\u043a\u0430\u044f \u0442\u0438\u043f\u043e\u0433\u0440\u0430\u0444\u0438\u043a\u0430. \u041a\u043e\u0440\u043e\u0442\u043a\u043e \u043e\u0431 \u0438\u0441\u0442\u043e\u0440\u0438\u0438, \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u044f\u0445 \u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435.", "sort": 2, "course": 1, "theme": 6, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 31, "fields": {"free": false, "token": "1#31", "title": "\u0428\u0440\u0438\u0444\u0442 \u043f\u043e\u0434 \u0440\u0435\u043d\u0442\u0433\u0435\u043d\u043e\u043c. \u0411\u0435\u0439\u0441\u043b\u0430\u0439\u043d, \u043a\u0435\u0440\u043d\u0438\u043d\u0433, \u0442\u0440\u0435\u043a\u0438\u043d\u0433, \u0438\u043d\u0442\u0435\u0440\u043b\u0438\u043d\u044c\u044f\u0436, \u0448\u043f\u0430\u0446\u0438\u0438, \u0430\u043f\u0440\u043e\u0448\u0438, \u0437\u0430\u043f\u043b\u0435\u0447\u0438\u043a\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0442\u0440\u0430\u0448\u043d\u044b\u0435 \u0441\u043b\u043e\u0432\u0430.", "sort": 3, "course": 1, "theme": 6, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 32, "fields": {"free": false, "token": "1#32", "title": "\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435. \u0422\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u043e\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435, \u0447\u0442\u043e \u0443\u043c\u0435\u0435\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440.", "sort": 4, "course": 1, "theme": 6, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 33, "fields": {"free": false, "token": "1#33", "title": "\u041a\u0430\u043a \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u043f\u043b\u043e\u0445\u043e\u0439 \u0448\u0440\u0438\u0444\u0442 \u043e\u0442 \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e", "sort": 5, "course": 1, "theme": 6, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 34, "fields": {"free": false, "token": "1#34", "title": "\u041f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u043c \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u0448\u0440\u0438\u0444\u0442\u044b \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0430\u0440\u044b", "sort": 6, "course": 1, "theme": 6, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 35, "fields": {"free": false, "token": "1#35", "title": "\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u0443\u044e \u0442\u0438\u043f\u043e\u0433\u0440\u0430\u0444\u0438\u043a\u0443. \u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0438\u0442\u043c \u0438 \u043f\u0440\u043e\u0447\u0435\u0435", "sort": 7, "course": 1, "theme": 6, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 36, "fields": {"free": false, "token": "1#36", "title": "\u0418\u043d\u0442\u0440\u043e", "sort": 1, "course": 1, "theme": 7, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 37, "fields": {"free": false, "token": "1#37", "title": "\u0427\u0442\u043e \u044d\u0442\u043e \u0438 \u0437\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u043d\u043e", "sort": 2, "course": 1, "theme": 7, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 38, "fields": {"free": false, "token": "1#38", "title": "\u042e\u0437\u0430\u0431\u0438\u043b\u0438\u0442\u0438, \u043e\u043f\u044b\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438 \u044d\u043c\u043f\u0430\u0442\u0438\u044f", "sort": 3, "course": 1, "theme": 7, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 39, "fields": {"free": false, "token": "1#39", "title": "\u0412\u0430\u0439\u0440\u0444\u0440\u0435\u0439\u043c \u0438\u043b\u0438 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f", "sort": 4, "course": 1, "theme": 7, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 40, "fields": {"free": false, "token": "1#40", "title": "\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043a\u043b\u0438\u043a\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f", "sort": 5, "course": 1, "theme": 7, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 41, "fields": {"free": false, "token": "1#41", "title": "\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435", "sort": 6, "course": 1, "theme": 7, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 42, "fields": {"free": false, "token": "1#42", "title": "\u0418\u043d\u0442\u0440\u043e", "sort": 1, "course": 1, "theme": 8, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 43, "fields": {"free": false, "token": "1#43", "title": "\u0417\u0430\u0447\u0435\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0443\u0436\u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0430", "sort": 2, "course": 1, "theme": 8, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 44, "fields": {"free": false, "token": "1#44", "title": "\u0413\u0434\u0435 \u0431\u0440\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u044b\u0435 \u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b", "sort": 3, "course": 1, "theme": 8, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 45, "fields": {"free": false, "token": "1#45", "title": "\u0414\u043e\u043b\u0436\u0435\u043d \u043b\u0438 \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440 \u0443\u043c\u0435\u0442\u044c \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c?", "sort": 4, "course": 1, "theme": 8, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 46, "fields": {"free": false, "token": "1#46", "title": "\u041a\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443", "sort": 5, "course": 1, "theme": 8, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 47, "fields": {"free": false, "token": "1#47", "title": "\u041a\u0430\u043a\u0438\u0435 \u0431\u044b\u0432\u0430\u044e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043f\u043e\u0434\u0430\u0447\u0438 \u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b", "sort": 6, "course": 1, "theme": 8, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 48, "fields": {"free": false, "token": "1#48", "title": "\u0418\u043d\u0442\u0440\u043e", "sort": 1, "course": 1, "theme": 9, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 49, "fields": {"free": false, "token": "1#49", "title": "\u041f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0440\u0430\u043d\u044c\u0448\u0435 \u0438 \u0432 \u043d\u0430\u0448\u0438 \u0434\u043d\u0438", "sort": 2, "course": 1, "theme": 9, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 50, "fields": {"free": false, "token": "1#50", "title": "\u041a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0437\u0430 5 \u043c\u0438\u043d\u0443\u0442. \u0425\u0438\u0442\u0440\u043e\u0441\u0442\u0438", "sort": 3, "course": 1, "theme": 9, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 51, "fields": {"free": false, "token": "1#51", "title": "\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c", "sort": 4, "course": 1, "theme": 9, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 52, "fields": {"free": false, "token": "1#52", "title": "\u0413\u0434\u0435 \u043d\u0430\u0439\u0442\u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0435\u0441\u043b\u0438 \u043d\u0430 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0443 \u043d\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438", "sort": 5, "course": 1, "theme": 9, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 53, "fields": {"free": false, "token": "1#53", "title": "\u0418\u043d\u0442\u0440\u043e", "sort": 1, "course": 1, "theme": 10, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 54, "fields": {"free": false, "token": "1#54", "title": "\u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f", "sort": 2, "course": 1, "theme": 10, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 55, "fields": {"free": false, "token": "1#55", "title": "\u041a\u0430\u0440\u0443\u0441\u0435\u043b\u044c \u0438 \u0433\u0430\u043b\u0435\u0440\u0435\u044f", "sort": 3, "course": 1, "theme": 10, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 56, "fields": {"free": false, "token": "1#56", "title": "\u041a\u0430\u0440\u0442\u043e\u0447\u043a\u0438", "sort": 4, "course": 1, "theme": 10, "description": "", "video": "\u041a\u0430\u0440\u0442\u043e\u0447\u043a\u0438", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 57, "fields": {"free": false, "token": "1#57", "title": "\u0424\u043e\u0440\u043c\u044b", "sort": 5, "course": 1, "theme": 10, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 58, "fields": {"free": false, "token": "1#58", "title": "\u0422\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u043f\u0435\u0440\u0435\u0447\u043d\u0438", "sort": 6, "course": 1, "theme": 10, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 59, "fields": {"free": false, "token": "1#59", "title": "\u0418\u043d\u0442\u0440\u043e", "sort": 1, "course": 1, "theme": 11, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 60, "fields": {"free": false, "token": "1#60", "title": "\u041a\u0430\u043a\u0438\u0435 \u0431\u044b\u0432\u0430\u044e\u0442 \u0441\u0430\u0439\u0442\u044b", "sort": 2, "course": 1, "theme": 11, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 61, "fields": {"free": false, "token": "1#61", "title": "\u041b\u0435\u043d\u0434\u0438\u043d\u0433\u0438", "sort": 3, "course": 1, "theme": 11, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 62, "fields": {"free": false, "token": "1#62", "title": "\u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u0430\u0439\u0442\u044b", "sort": 4, "course": 1, "theme": 11, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 63, "fields": {"free": false, "token": "1#63", "title": "\u041f\u0440\u043e\u043c\u043e", "sort": 5, "course": 1, "theme": 11, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 64, "fields": {"free": false, "token": "1#64", "title": "\u041f\u043e\u0440\u0442\u0444\u043e\u043b\u0438\u043e", "sort": 6, "course": 1, "theme": 11, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 65, "fields": {"free": false, "token": "1#65", "title": "\u0418\u043d\u0442\u0440\u043e", "sort": 1, "course": 1, "theme": 12, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 66, "fields": {"free": false, "token": "1#66", "title": "\u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432 \u0432 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0443\u043c\u0435", "sort": 2, "course": 1, "theme": 12, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 67, "fields": {"free": false, "token": "1#67", "title": "\u041a\u0430\u043a \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435", "sort": 3, "course": 1, "theme": 12, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 68, "fields": {"free": false, "token": "1#68", "title": "\u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u0430", "sort": 4, "course": 1, "theme": 12, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 69, "fields": {"free": false, "token": "1#69", "title": "\u0418\u043d\u0442\u0440\u043e", "sort": 1, "course": 1, "theme": 13, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 70, "fields": {"free": false, "token": "1#70", "title": "\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u043d\u0435\u0447\u0435\u0433\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0443", "sort": 2, "course": 1, "theme": 13, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 71, "fields": {"free": false, "token": "1#71", "title": "\u041a\u0430\u043a \u043d\u0430\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0440\u0442\u0444\u043e\u043b\u0438\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u0430\u0441 \u043f\u0440\u043e\u0434\u0430\u0432\u0430\u0442\u044c", "sort": 3, "course": 1, "theme": 13, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 72, "fields": {"free": false, "token": "1#72", "title": "\u041a\u0435\u0439\u0441\u044b \u043d\u0430 \u043a\u043e\u043b\u0435\u043d\u043a\u0435 \u0437\u0430 5 \u043c\u0438\u043d\u0443\u0442", "sort": 4, "course": 1, "theme": 13, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 73, "fields": {"free": false, "token": "1#73", "title": "\u0414\u0435\u043b\u0430\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043f\u043e\u0440\u0442\u0444\u043e\u043b\u0438\u043e", "sort": 5, "course": 1, "theme": 13, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 74, "fields": {"free": false, "token": "1#74", "title": "\u0418\u043d\u0442\u0440\u043e", "sort": 1, "course": 1, "theme": 14, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 75, "fields": {"free": false, "token": "1#75", "title": "\u0422\u0443\u0442 \u043f\u0440\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0437\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e", "sort": 2, "course": 1, "theme": 14, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 76, "fields": {"free": false, "token": "1#76", "title": "\u0414\u0438\u0437\u0430\u0439\u043d\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043c\u0435\u0442\u044c \u0432\u0435\u0440\u0441\u0442\u0430\u0442\u044c", "sort": 3, "course": 1, "theme": 14, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 77, "fields": {"free": false, "token": "1#77", "title": "\u0421\u0435\u0440\u0432\u0438\u0441\u044b \u0434\u043b\u044f \u201c\u043d\u0435\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432\u201d", "sort": 4, "course": 1, "theme": 14, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 78, "fields": {"free": false, "token": "1#78", "title": "\u0422\u043e\u0432\u0430\u0440\u0438\u0449 \u0438\u043d\u0441\u043f\u0435\u043a\u0442\u043e\u0440. \u041f\u0440\u043e \u0434\u0438\u0437\u0430\u0439\u043d \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435", "sort": 5, "course": 1, "theme": 14, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 79, "fields": {"free": false, "token": "1#79", "title": "\u041f\u0440\u0438\u0432\u0435\u0442 SVG, \u043f\u043e\u043a\u0430 PNG", "sort": 6, "course": 1, "theme": 14, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 80, "fields": {"free": false, "token": "1#80", "title": "\u0418\u043d\u0442\u0440\u043e", "sort": 1, "course": 1, "theme": 15, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 81, "fields": {"free": false, "token": "1#81", "title": "\u041c\u0435\u0434\u0438\u0430. \u0420\u0430\u0437\u043c\u0435\u0440\u044b \u043c\u0430\u043a\u0435\u0442\u043e\u0432 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0434\u0435\u0432\u0430\u0439\u0441\u043e\u0432", "sort": 2, "course": 1, "theme": 15, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 82, "fields": {"free": false, "token": "1#82", "title": "\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0438 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432", "sort": 3, "course": 1, "theme": 15, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 83, "fields": {"free": false, "token": "1#83", "title": "\u0423\u0441\u0442\u043e\u044f\u0432\u0448\u0438\u0435\u0441\u044f \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f", "sort": 4, "course": 1, "theme": 15, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 84, "fields": {"free": false, "token": "1#84", "title": "\u0414\u0435\u043b\u0430\u0435\u043c \u043c\u0430\u043a\u0435\u0442\u044b \u043f\u043e\u0434 \u0440\u0430\u0437\u043d\u044b\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f", "sort": 5, "course": 1, "theme": 15, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 85, "fields": {"free": false, "token": "1#85", "title": "\u0418\u043d\u0442\u0440\u043e", "sort": 1, "course": 1, "theme": 16, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 86, "fields": {"free": false, "token": "1#86", "title": "\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u0430\u043c\u0438 \u0438 \u043d\u0435\u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u0430\u043c\u0438", "sort": 2, "course": 1, "theme": 16, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 87, "fields": {"free": false, "token": "1#87", "title": "\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u0430\u043c", "sort": 3, "course": 1, "theme": 16, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 88, "fields": {"free": false, "token": "1#88", "title": "\u041a\u0430\u043a \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438", "sort": 4, "course": 1, "theme": 16, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 89, "fields": {"free": false, "token": "1#89", "title": "\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0432\u0435\u0440\u0441\u0442\u0430\u043b\u044c\u0449\u0438\u043a\u0430\u043c", "sort": 5, "course": 1, "theme": 16, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 90, "fields": {"free": false, "token": "1#90", "title": "\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u044f\u043c\u0443\u044e \u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c", "sort": 6, "course": 1, "theme": 16, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 91, "fields": {"free": false, "token": "3#0", "title": "1.1. \u0412\u0441\u0442\u0443\u043f\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e", "sort": 1, "course": 3, "theme": 23, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 92, "fields": {"free": false, "token": "3#1", "title": "1.2. \u041f\u044f\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0432\u0438\u0434\u043e\u0432 \u0430\u0433\u0435\u043d\u0442\u0441\u0442\u0432", "sort": 2, "course": 3, "theme": 23, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 93, "fields": {"free": false, "token": "3#2", "title": "1.3. \u041f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0435\u0431-\u0441\u0442\u0443\u0434\u0438\u0438", "sort": 3, "course": 3, "theme": 23, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 94, "fields": {"free": false, "token": "3#3", "title": "1.4. \u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435 \u0438 \u043a\u0430\u043a \u0438\u0445 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c", "sort": 4, "course": 3, "theme": 23, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 95, "fields": {"free": false, "token": "3#5", "title": "1.5. \u041b\u0438\u043a\u0431\u0435\u0437. \u041a\u0430\u043a\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u043d\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c", "sort": 5, "course": 3, "theme": 23, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 96, "fields": {"free": false, "token": "3#4", "title": "1.6. \u0414\u043e\u043c\u0430\u0448\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435", "sort": 6, "course": 3, "theme": 23, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 97, "fields": {"free": false, "token": "", "title": "2.1. \u0414\u043e\u043c\u0430\u0448\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435", "sort": 1, "course": 3, "theme": 24, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 98, "fields": {"free": false, "token": "", "title": "2.2. \u041a\u0430\u043a \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0443\u0441\u043b\u0443\u0433", "sort": 2, "course": 3, "theme": 24, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 99, "fields": {"free": false, "token": "", "title": "2.3. \u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u043f\u0440\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0441\u0435?", "sort": 3, "course": 3, "theme": 24, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 100, "fields": {"free": false, "token": "", "title": "2.4. \u0414\u0435\u0441\u044f\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0443\u0441\u043b\u0443\u0433 \u0432\u0435\u0431-\u0441\u0442\u0438\u0434\u0438\u0438", "sort": 4, "course": 3, "theme": 24, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 101, "fields": {"free": false, "token": "", "title": "2.5. \u041a\u0430\u043a \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0438\u0437 \u043e\u0431\u0449\u0435\u0439 \u043c\u0430\u0441\u0441\u044b?", "sort": 5, "course": 3, "theme": 24, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 102, "fields": {"free": false, "token": "", "title": "2.6. \u0426\u0435\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435", "sort": 6, "course": 3, "theme": 24, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 103, "fields": {"free": false, "token": "", "title": "2.7. \u041f\u043b\u0430\u043d \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0443\u0441\u043b\u0443\u0433", "sort": 7, "course": 3, "theme": 24, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.lesson", "pk": 104, "fields": {"free": false, "token": "", "title": "2.8. \u0414\u043e\u043c\u0430\u0448\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435", "sort": 8, "course": 3, "theme": 24, "description": "", "video": "", "video_id": "", "video_date": null, "materials": [], "comments": []}}, {"model": "courses.homework", "pk": 1, "fields": {"token": "1#5", "course": 1, "theme": 1, "description": "

\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445 (Photoshop, Sketch, Word, PowerPoint, InDesignmarvelapp,\u043d\u0430 \u043b\u0438\u0441\u0442\u043a\u0435 \u0431\u0443\u043c\u0430\u0433\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435) \u0438 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 15 \u043c\u0438\u043d\u0443\u0442.

\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430\u043f\u0440\u0430\u0432\u044c\u0442\u0435, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0447\u0435\u0440\u0435\u0437 \u0444\u043e\u0440\u043c\u0443 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u0438 \u043d\u0438\u0436\u0435.

\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u00ab\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0424\u0430\u0439\u043b\u00bb.

\u041b\u0438\u0431\u043e \u0432\u044b\u043b\u043e\u0436\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u00ab\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443\u00bb, \u00ab\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430.

", "sort": 1, "materials": []}}, {"model": "courses.exam", "pk": 1, "fields": {"token": "1#91", "sort": 1, "course": 1, "theme": 17, "description": "

\u0422\u0417 \u0434\u0438\u043f\u043b\u043e\u043c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b

", "materials": []}}, {"model": "courses.coursemap", "pk": 1, "fields": {"_type": "L", "course": 1, "lesson": 1, "homework": null, "exam": null, "sort": 0, "token": "1#0"}}, {"model": "courses.coursemap", "pk": 2, "fields": {"_type": "L", "course": 1, "lesson": 2, "homework": null, "exam": null, "sort": 1, "token": "1#1"}}, {"model": "courses.coursemap", "pk": 3, "fields": {"_type": "L", "course": 1, "lesson": 3, "homework": null, "exam": null, "sort": 2, "token": "1#2"}}, {"model": "courses.coursemap", "pk": 4, "fields": {"_type": "L", "course": 1, "lesson": 4, "homework": null, "exam": null, "sort": 3, "token": "1#3"}}, {"model": "courses.coursemap", "pk": 5, "fields": {"_type": "L", "course": 1, "lesson": 5, "homework": null, "exam": null, "sort": 4, "token": "1#4"}}, {"model": "courses.coursemap", "pk": 6, "fields": {"_type": "H", "course": 1, "lesson": null, "homework": 1, "exam": null, "sort": 5, "token": "1#5"}}, {"model": "courses.coursemap", "pk": 7, "fields": {"_type": "L", "course": 1, "lesson": 6, "homework": null, "exam": null, "sort": 6, "token": "1#6"}}, {"model": "courses.coursemap", "pk": 8, "fields": {"_type": "L", "course": 1, "lesson": 7, "homework": null, "exam": null, "sort": 7, "token": "1#7"}}, {"model": "courses.coursemap", "pk": 9, "fields": {"_type": "L", "course": 1, "lesson": 8, "homework": null, "exam": null, "sort": 8, "token": "1#8"}}, {"model": "courses.coursemap", "pk": 10, "fields": {"_type": "L", "course": 1, "lesson": 9, "homework": null, "exam": null, "sort": 9, "token": "1#9"}}, {"model": "courses.coursemap", "pk": 11, "fields": {"_type": "L", "course": 1, "lesson": 10, "homework": null, "exam": null, "sort": 10, "token": "1#10"}}, {"model": "courses.coursemap", "pk": 12, "fields": {"_type": "L", "course": 1, "lesson": 11, "homework": null, "exam": null, "sort": 11, "token": "1#11"}}, {"model": "courses.coursemap", "pk": 13, "fields": {"_type": "L", "course": 1, "lesson": 12, "homework": null, "exam": null, "sort": 12, "token": "1#12"}}, {"model": "courses.coursemap", "pk": 14, "fields": {"_type": "L", "course": 1, "lesson": 13, "homework": null, "exam": null, "sort": 13, "token": "1#13"}}, {"model": "courses.coursemap", "pk": 15, "fields": {"_type": "L", "course": 1, "lesson": 14, "homework": null, "exam": null, "sort": 14, "token": "1#14"}}, {"model": "courses.coursemap", "pk": 16, "fields": {"_type": "L", "course": 1, "lesson": 15, "homework": null, "exam": null, "sort": 15, "token": "1#15"}}, {"model": "courses.coursemap", "pk": 17, "fields": {"_type": "L", "course": 1, "lesson": 16, "homework": null, "exam": null, "sort": 16, "token": "1#16"}}, {"model": "courses.coursemap", "pk": 18, "fields": {"_type": "L", "course": 1, "lesson": 17, "homework": null, "exam": null, "sort": 17, "token": "1#17"}}, {"model": "courses.coursemap", "pk": 19, "fields": {"_type": "L", "course": 1, "lesson": 18, "homework": null, "exam": null, "sort": 18, "token": "1#18"}}, {"model": "courses.coursemap", "pk": 20, "fields": {"_type": "L", "course": 1, "lesson": 19, "homework": null, "exam": null, "sort": 19, "token": "1#19"}}, {"model": "courses.coursemap", "pk": 21, "fields": {"_type": "L", "course": 1, "lesson": 20, "homework": null, "exam": null, "sort": 20, "token": "1#20"}}, {"model": "courses.coursemap", "pk": 22, "fields": {"_type": "L", "course": 1, "lesson": 21, "homework": null, "exam": null, "sort": 21, "token": "1#21"}}, {"model": "courses.coursemap", "pk": 23, "fields": {"_type": "L", "course": 1, "lesson": 22, "homework": null, "exam": null, "sort": 22, "token": "1#22"}}, {"model": "courses.coursemap", "pk": 24, "fields": {"_type": "L", "course": 1, "lesson": 23, "homework": null, "exam": null, "sort": 23, "token": "1#23"}}, {"model": "courses.coursemap", "pk": 25, "fields": {"_type": "L", "course": 1, "lesson": 24, "homework": null, "exam": null, "sort": 24, "token": "1#24"}}, {"model": "courses.coursemap", "pk": 26, "fields": {"_type": "L", "course": 1, "lesson": 25, "homework": null, "exam": null, "sort": 25, "token": "1#25"}}, {"model": "courses.coursemap", "pk": 27, "fields": {"_type": "L", "course": 1, "lesson": 26, "homework": null, "exam": null, "sort": 26, "token": "1#26"}}, {"model": "courses.coursemap", "pk": 28, "fields": {"_type": "L", "course": 1, "lesson": 27, "homework": null, "exam": null, "sort": 27, "token": "1#27"}}, {"model": "courses.coursemap", "pk": 29, "fields": {"_type": "L", "course": 1, "lesson": 28, "homework": null, "exam": null, "sort": 28, "token": "1#28"}}, {"model": "courses.coursemap", "pk": 30, "fields": {"_type": "L", "course": 1, "lesson": 29, "homework": null, "exam": null, "sort": 29, "token": "1#29"}}, {"model": "courses.coursemap", "pk": 31, "fields": {"_type": "L", "course": 1, "lesson": 30, "homework": null, "exam": null, "sort": 30, "token": "1#30"}}, {"model": "courses.coursemap", "pk": 32, "fields": {"_type": "L", "course": 1, "lesson": 31, "homework": null, "exam": null, "sort": 31, "token": "1#31"}}, {"model": "courses.coursemap", "pk": 33, "fields": {"_type": "L", "course": 1, "lesson": 32, "homework": null, "exam": null, "sort": 32, "token": "1#32"}}, {"model": "courses.coursemap", "pk": 34, "fields": {"_type": "L", "course": 1, "lesson": 33, "homework": null, "exam": null, "sort": 33, "token": "1#33"}}, {"model": "courses.coursemap", "pk": 35, "fields": {"_type": "L", "course": 1, "lesson": 34, "homework": null, "exam": null, "sort": 34, "token": "1#34"}}, {"model": "courses.coursemap", "pk": 36, "fields": {"_type": "L", "course": 1, "lesson": 35, "homework": null, "exam": null, "sort": 35, "token": "1#35"}}, {"model": "courses.coursemap", "pk": 37, "fields": {"_type": "L", "course": 1, "lesson": 36, "homework": null, "exam": null, "sort": 36, "token": "1#36"}}, {"model": "courses.coursemap", "pk": 38, "fields": {"_type": "L", "course": 1, "lesson": 37, "homework": null, "exam": null, "sort": 37, "token": "1#37"}}, {"model": "courses.coursemap", "pk": 39, "fields": {"_type": "L", "course": 1, "lesson": 38, "homework": null, "exam": null, "sort": 38, "token": "1#38"}}, {"model": "courses.coursemap", "pk": 40, "fields": {"_type": "L", "course": 1, "lesson": 39, "homework": null, "exam": null, "sort": 39, "token": "1#39"}}, {"model": "courses.coursemap", "pk": 41, "fields": {"_type": "L", "course": 1, "lesson": 40, "homework": null, "exam": null, "sort": 40, "token": "1#40"}}, {"model": "courses.coursemap", "pk": 42, "fields": {"_type": "L", "course": 1, "lesson": 41, "homework": null, "exam": null, "sort": 41, "token": "1#41"}}, {"model": "courses.coursemap", "pk": 43, "fields": {"_type": "L", "course": 1, "lesson": 42, "homework": null, "exam": null, "sort": 42, "token": "1#42"}}, {"model": "courses.coursemap", "pk": 44, "fields": {"_type": "L", "course": 1, "lesson": 43, "homework": null, "exam": null, "sort": 43, "token": "1#43"}}, {"model": "courses.coursemap", "pk": 45, "fields": {"_type": "L", "course": 1, "lesson": 44, "homework": null, "exam": null, "sort": 44, "token": "1#44"}}, {"model": "courses.coursemap", "pk": 46, "fields": {"_type": "L", "course": 1, "lesson": 45, "homework": null, "exam": null, "sort": 45, "token": "1#45"}}, {"model": "courses.coursemap", "pk": 47, "fields": {"_type": "L", "course": 1, "lesson": 46, "homework": null, "exam": null, "sort": 46, "token": "1#46"}}, {"model": "courses.coursemap", "pk": 48, "fields": {"_type": "L", "course": 1, "lesson": 47, "homework": null, "exam": null, "sort": 47, "token": "1#47"}}, {"model": "courses.coursemap", "pk": 49, "fields": {"_type": "L", "course": 1, "lesson": 48, "homework": null, "exam": null, "sort": 48, "token": "1#48"}}, {"model": "courses.coursemap", "pk": 50, "fields": {"_type": "L", "course": 1, "lesson": 49, "homework": null, "exam": null, "sort": 49, "token": "1#49"}}, {"model": "courses.coursemap", "pk": 51, "fields": {"_type": "L", "course": 1, "lesson": 50, "homework": null, "exam": null, "sort": 50, "token": "1#50"}}, {"model": "courses.coursemap", "pk": 52, "fields": {"_type": "L", "course": 1, "lesson": 51, "homework": null, "exam": null, "sort": 51, "token": "1#51"}}, {"model": "courses.coursemap", "pk": 53, "fields": {"_type": "L", "course": 1, "lesson": 52, "homework": null, "exam": null, "sort": 52, "token": "1#52"}}, {"model": "courses.coursemap", "pk": 54, "fields": {"_type": "L", "course": 1, "lesson": 53, "homework": null, "exam": null, "sort": 53, "token": "1#53"}}, {"model": "courses.coursemap", "pk": 55, "fields": {"_type": "L", "course": 1, "lesson": 54, "homework": null, "exam": null, "sort": 54, "token": "1#54"}}, {"model": "courses.coursemap", "pk": 56, "fields": {"_type": "L", "course": 1, "lesson": 55, "homework": null, "exam": null, "sort": 55, "token": "1#55"}}, {"model": "courses.coursemap", "pk": 57, "fields": {"_type": "L", "course": 1, "lesson": 56, "homework": null, "exam": null, "sort": 56, "token": "1#56"}}, {"model": "courses.coursemap", "pk": 58, "fields": {"_type": "L", "course": 1, "lesson": 57, "homework": null, "exam": null, "sort": 57, "token": "1#57"}}, {"model": "courses.coursemap", "pk": 59, "fields": {"_type": "L", "course": 1, "lesson": 58, "homework": null, "exam": null, "sort": 58, "token": "1#58"}}, {"model": "courses.coursemap", "pk": 60, "fields": {"_type": "L", "course": 1, "lesson": 59, "homework": null, "exam": null, "sort": 59, "token": "1#59"}}, {"model": "courses.coursemap", "pk": 61, "fields": {"_type": "L", "course": 1, "lesson": 60, "homework": null, "exam": null, "sort": 60, "token": "1#60"}}, {"model": "courses.coursemap", "pk": 62, "fields": {"_type": "L", "course": 1, "lesson": 61, "homework": null, "exam": null, "sort": 61, "token": "1#61"}}, {"model": "courses.coursemap", "pk": 63, "fields": {"_type": "L", "course": 1, "lesson": 62, "homework": null, "exam": null, "sort": 62, "token": "1#62"}}, {"model": "courses.coursemap", "pk": 64, "fields": {"_type": "L", "course": 1, "lesson": 63, "homework": null, "exam": null, "sort": 63, "token": "1#63"}}, {"model": "courses.coursemap", "pk": 65, "fields": {"_type": "L", "course": 1, "lesson": 64, "homework": null, "exam": null, "sort": 64, "token": "1#64"}}, {"model": "courses.coursemap", "pk": 66, "fields": {"_type": "L", "course": 1, "lesson": 65, "homework": null, "exam": null, "sort": 65, "token": "1#65"}}, {"model": "courses.coursemap", "pk": 67, "fields": {"_type": "L", "course": 1, "lesson": 66, "homework": null, "exam": null, "sort": 66, "token": "1#66"}}, {"model": "courses.coursemap", "pk": 68, "fields": {"_type": "L", "course": 1, "lesson": 67, "homework": null, "exam": null, "sort": 67, "token": "1#67"}}, {"model": "courses.coursemap", "pk": 69, "fields": {"_type": "L", "course": 1, "lesson": 68, "homework": null, "exam": null, "sort": 68, "token": "1#68"}}, {"model": "courses.coursemap", "pk": 70, "fields": {"_type": "L", "course": 1, "lesson": 69, "homework": null, "exam": null, "sort": 69, "token": "1#69"}}, {"model": "courses.coursemap", "pk": 71, "fields": {"_type": "L", "course": 1, "lesson": 70, "homework": null, "exam": null, "sort": 70, "token": "1#70"}}, {"model": "courses.coursemap", "pk": 72, "fields": {"_type": "L", "course": 1, "lesson": 71, "homework": null, "exam": null, "sort": 71, "token": "1#71"}}, {"model": "courses.coursemap", "pk": 73, "fields": {"_type": "L", "course": 1, "lesson": 72, "homework": null, "exam": null, "sort": 72, "token": "1#72"}}, {"model": "courses.coursemap", "pk": 74, "fields": {"_type": "L", "course": 1, "lesson": 73, "homework": null, "exam": null, "sort": 73, "token": "1#73"}}, {"model": "courses.coursemap", "pk": 75, "fields": {"_type": "L", "course": 1, "lesson": 74, "homework": null, "exam": null, "sort": 74, "token": "1#74"}}, {"model": "courses.coursemap", "pk": 76, "fields": {"_type": "L", "course": 1, "lesson": 75, "homework": null, "exam": null, "sort": 75, "token": "1#75"}}, {"model": "courses.coursemap", "pk": 77, "fields": {"_type": "L", "course": 1, "lesson": 76, "homework": null, "exam": null, "sort": 76, "token": "1#76"}}, {"model": "courses.coursemap", "pk": 78, "fields": {"_type": "L", "course": 1, "lesson": 77, "homework": null, "exam": null, "sort": 77, "token": "1#77"}}, {"model": "courses.coursemap", "pk": 79, "fields": {"_type": "L", "course": 1, "lesson": 78, "homework": null, "exam": null, "sort": 78, "token": "1#78"}}, {"model": "courses.coursemap", "pk": 80, "fields": {"_type": "L", "course": 1, "lesson": 79, "homework": null, "exam": null, "sort": 79, "token": "1#79"}}, {"model": "courses.coursemap", "pk": 81, "fields": {"_type": "L", "course": 1, "lesson": 80, "homework": null, "exam": null, "sort": 80, "token": "1#80"}}, {"model": "courses.coursemap", "pk": 82, "fields": {"_type": "L", "course": 1, "lesson": 81, "homework": null, "exam": null, "sort": 81, "token": "1#81"}}, {"model": "courses.coursemap", "pk": 83, "fields": {"_type": "L", "course": 1, "lesson": 82, "homework": null, "exam": null, "sort": 82, "token": "1#82"}}, {"model": "courses.coursemap", "pk": 84, "fields": {"_type": "L", "course": 1, "lesson": 83, "homework": null, "exam": null, "sort": 83, "token": "1#83"}}, {"model": "courses.coursemap", "pk": 85, "fields": {"_type": "L", "course": 1, "lesson": 84, "homework": null, "exam": null, "sort": 84, "token": "1#84"}}, {"model": "courses.coursemap", "pk": 86, "fields": {"_type": "L", "course": 1, "lesson": 85, "homework": null, "exam": null, "sort": 85, "token": "1#85"}}, {"model": "courses.coursemap", "pk": 87, "fields": {"_type": "L", "course": 1, "lesson": 86, "homework": null, "exam": null, "sort": 86, "token": "1#86"}}, {"model": "courses.coursemap", "pk": 88, "fields": {"_type": "L", "course": 1, "lesson": 87, "homework": null, "exam": null, "sort": 87, "token": "1#87"}}, {"model": "courses.coursemap", "pk": 89, "fields": {"_type": "L", "course": 1, "lesson": 88, "homework": null, "exam": null, "sort": 88, "token": "1#88"}}, {"model": "courses.coursemap", "pk": 90, "fields": {"_type": "L", "course": 1, "lesson": 89, "homework": null, "exam": null, "sort": 89, "token": "1#89"}}, {"model": "courses.coursemap", "pk": 91, "fields": {"_type": "L", "course": 1, "lesson": 90, "homework": null, "exam": null, "sort": 90, "token": "1#90"}}, {"model": "courses.coursemap", "pk": 92, "fields": {"_type": "E", "course": 1, "lesson": null, "homework": null, "exam": 1, "sort": 91, "token": "1#91"}}, {"model": "courses.coursemap", "pk": 93, "fields": {"_type": "L", "course": 3, "lesson": 91, "homework": null, "exam": null, "sort": 0, "token": "3#0"}}, {"model": "courses.coursemap", "pk": 94, "fields": {"_type": "L", "course": 3, "lesson": 92, "homework": null, "exam": null, "sort": 1, "token": "3#1"}}, {"model": "courses.coursemap", "pk": 95, "fields": {"_type": "L", "course": 3, "lesson": 93, "homework": null, "exam": null, "sort": 2, "token": "3#2"}}, {"model": "courses.coursemap", "pk": 96, "fields": {"_type": "L", "course": 3, "lesson": 94, "homework": null, "exam": null, "sort": 3, "token": "3#3"}}, {"model": "courses.coursemap", "pk": 97, "fields": {"_type": "L", "course": 3, "lesson": 96, "homework": null, "exam": null, "sort": 4, "token": "3#4"}}, {"model": "courses.coursemap", "pk": 98, "fields": {"_type": "L", "course": 3, "lesson": 95, "homework": null, "exam": null, "sort": 5, "token": "3#5"}}] \ No newline at end of file diff --git a/_utils/create_comments_bbtext.py b/_utils/create_comments_bbtext.py deleted file mode 100644 index 60941ee..0000000 --- a/_utils/create_comments_bbtext.py +++ /dev/null @@ -1,20 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - -from lms.tools import convert_html_to_bb - -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from management.models import Comment - -errors = [] -for comment in Comment.objects.all(): - try: - comment.bbtext = convert_html_to_bb(comment.text) - except: - errors.append(comment.id) - else: - comment.save() diff --git a/_utils/create_diploms.py b/_utils/create_diploms.py deleted file mode 100644 index 1fe4ce4..0000000 --- a/_utils/create_diploms.py +++ /dev/null @@ -1,46 +0,0 @@ -# coding=utf-8 -import os - -import datetime -import django -import sys -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from courses.models import Diploma, User -from journals.models import DiplomaJ - -u = { - 'medvedward@mail.ru': {'key': '363 005 072', 'date': '29.07.2015'}, - 'oss@inbox.com': {'key': '363 005 074', 'date': '24.08.2015'}, - 'artyomzolotykh@gmail.com': {'key': '363 005 076', 'date': '21.08.2015'}, - 'susenko_a@ukr.net': {'key': '363 005 077', 'date': '25.08.2015'}, - 'ebortnikov@mail.ru': {'key': '363 005 078', 'date': '25.08.2015'}, - 'kovalev.home@mail.ru': {'key': '363 005 079', 'date': '05.10.2015'}, - 'mahneva-mariya@mail.ru': {'key': '365 005 080', 'date': '23.10.2015'}, - 'flintl@bk.ru': {'key': '366 005 081', 'date': '26.10.2015'}, - 'a.michurin1783@mail.ru': {'key': '367 005 082', 'date': '27.10.2015'}, - 'Vals_0791@mail.ru': {'key': '368 005 083', 'date': '07.12.2015'}, - 'artyomzykov@gmail.com': {'key': '369 005 084', 'date': '12.01.2016'}, - 'threed@rsgc.ru': {'key': '370 005 085', 'date': '15.02.2016'}, - 'walerock@mail.ru': {'key': '371 005 086', 'date': '18.02.2016'}, - 'garuskin.dima@gmail.com': {'key': '372 005 087', 'date': '30.01.2016'}, - 'rock_n_vladok@mail.ru': {'key': '373 005 088', 'date': '06.03.2016'}, - 'anton_semenchuk@rambler.ru': {'key': '374 005 089', 'date': '09.03.2016'}, - 'orloff.eg@yandex.ru': {'key': '375 005 090', 'date': '11.03.2016'}, - 'ysenko.mi@gmail.com': {'key': '376 005 091', 'date': '13.03.2016'}, - 'nadin12233@mail.ru': {'key': '377 005 092', 'date': '13.03.2016'}, - 'serge-meb@mail.ru': {'key': '378 005 093', 'date': '02.04.2016'} -} -for key, value in u.items(): - try: - user = User.objects.get(email=key) - except User.DoesNotExist: - print key - else: - key = int(''.join(value['key'].split(' '))) - date = value['date'].split('.') - DiplomaJ.objects.create(date=datetime.date(int(date[2]), int(date[1]), int(date[0])), - key=key, - student=user, - material=Diploma.objects.get(id=1)) diff --git a/_utils/create_letter_result.py b/_utils/create_letter_result.py deleted file mode 100644 index c707616..0000000 --- a/_utils/create_letter_result.py +++ /dev/null @@ -1,25 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from service.models import MailBox - -for letter in MailBox.objects.filter(result=''): - letter.result = u'' \ - u'' \ - u'' \ - u'' \ - u'' \ - u'' \ - u'' \ - u'{0}' \ - u'' \ - u'' \ - u'
С уважением,
Точка кода
' \ - u'' \ - u''.format(letter.text) - letter.save() diff --git a/_utils/create_modal_task.py b/_utils/create_modal_task.py deleted file mode 100644 index 8194dcf..0000000 --- a/_utils/create_modal_task.py +++ /dev/null @@ -1,22 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - - - -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from access.models import User -from management.models import ModalTask -from journals.models import TeacherJ - -manager = User.objects.get(id=2) -errors = [] -task = ModalTask.objects.get(id=29) -for i in TeacherJ.objects.filter(status='W', course__id=16).exclude(student=None): - task.user.add(i.student) -task.save() -print(errors) diff --git a/_utils/create_modals.py b/_utils/create_modals.py deleted file mode 100644 index dbefe24..0000000 --- a/_utils/create_modals.py +++ /dev/null @@ -1,18 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from management.models import ModalStack, Modals -from journals.models import TeacherJ - -general_modal = Modals.objects.get(key='JavaWebinar_mini') - -for i in TeacherJ.objects.filter(course__id=2): - print '%s: %s' % (i.id, i) - if i.teacher and i.student: - general_modal.create_stack(i.student) diff --git a/_utils/create_modals_stack.py b/_utils/create_modals_stack.py deleted file mode 100644 index ae64b25..0000000 --- a/_utils/create_modals_stack.py +++ /dev/null @@ -1,28 +0,0 @@ -# coding=utf-8 -from datetime import datetime, timedelta -import os -import django -import sys - - - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from management.models import Modals, ModalStack -from access.models import User -from finance.models import Bill -user = User.objects.get(id=2) - -#for bill in Bill.objects.filter(modals_show=False, _type='P'): -# if not bill.start_fire: -# bill.start_fire = bill.finish_date + timedelta(days=bill.service.by_time) -# bill.save() - -for bill in Bill.objects.filter(start_fire__lte=datetime.now(), modals_show=False, _type='P'): - for modal in bill.service.modals.all(): - modal.create_stack(bill.user) - bill.modals_show = True - print bill - bill.save() diff --git a/_utils/diplom_nameless.txt b/_utils/diplom_nameless.txt deleted file mode 100644 index e93707f..0000000 --- a/_utils/diplom_nameless.txt +++ /dev/null @@ -1,38 +0,0 @@ -info@sibirix.ru -denisov.s.s@yandex.ru -oleksandrgumeniuk@gmail.com -9990405@gmail.com -uasam@mail.ru -webar4i@gmail.com -vladfedorovich@gmail.com -Gfgaliya@gmail.com -zvetaan@gmail.com -volokos@gmail.com -sp.rusanov@gmail.com -bravo.johnny@yandex.ru -art@amado-id.ru -suonarama@gmail.com -velesart@gmail.com -ceo@pride-m.ru -spinngewebex@gmail.com -lalaviva@yandex.ru -me@flexure.ru -trogatyuk@gmail.com -hello@aokunev.com -krylya@inbox.ru -tiano_taurus747@mail.ru -jaglin@itsoft.ru -994677@mail.ru -rumbeshta@userstory.ru -puponina.irina@gmail.com -zlk.marjana@gmail.com -yana.berezhnaya999@gmail.com -vivi_bvo@mail.ru -lens2002@gmail.com -ohmeinkot@gmail.com -e.poberezhnik@artw.ru -domrachv@gmail.com -Irina.lisofa@gmail.com -natasha.skulskaia@gmail.com -dubnyak404@gmail.com -bez.b.unix@gmail.com \ No newline at end of file diff --git a/_utils/emails_md5.txt b/_utils/emails_md5.txt deleted file mode 100644 index 1e94ff2..0000000 --- a/_utils/emails_md5.txt +++ /dev/null @@ -1 +0,0 @@ -c12ab1b1982545ce871cf63b9eeb78cb, 560ea014b04add2bbc79ab8a926ba1fc, 5cce051ece41431c4c8e8d15d0f11ff1, a58d4c9fa8378ed32f7df480e3c5561b, 5bd77e2b924b2197f6d044854786788b, fcaf61f99c8dad0a3e72212f47fd2b33, b46212398fdfc6bd9a329300cdf8a94a, a6b15a35249d1e376b8640ff6a154f8d, e653f9ae5361fcb9918fd979ee6e1ae4, 90420e34f209c703dceed459656df31e, 9e805f83751dc8b6da509dee0345e26b, e91d23fecf7b504b441641f288ac2950, ae575f24ca064ef23125c21ea34cf55a, f4ec2e4a5968848919f390dd50483515, 380726d637f9d58a706f61f4993cfeea, 612b0c4159d9f99c62315f1b9be37589, 4bcfb05a5ee231323629a2ad34389bd3, 96e62a2514c35def12164315c0e645c8, 284842d2ba55fde6ae925e70c3c1c5c5, 52757adf7c79118542fcf013647aae5e, 0a8f4d88740eecf1518a991c611e36ed, 330168ebcc666297f82336ada2b2d912, 90a612e5c8e514067f6af0fcee45cf75, 23688f9bc1c9f3a323875879875adc92, edbc827074f4d70504dc7329a2819aec, 47e2aa096a7d2355850c5bf705430f14, 31e17b4032db0d5ccbee5bc5f65ee86e, c5fe89456895b16bb9cde92d11715314, 9f7cb8f60a04f518873bf2651aa17e3a, 3898d91c7c7c1a7cd47b29aa50143751, 0fab03d68115bb9c5808a507e5ad92f5, 47321d5e913476bdd607ffc00a0880e7, cbf4f6b85192c647378e8adc71c55f02, 3427283ec6ad3e88cf62be776a925b89, 8d5031adf00530c64d1be0bdcd020a6e, eaee82ba4c40686e19c1b8baafdc8e94, 8dd1ebd79cc9bbcd3be40759ea6d3366, 5d750ba2b7f879fe2035309a0a4b94ed, e1e2b216fbf583fe4a16452ccad634d7, 038c0c4a7478366a1a9cefdc678dccb2, 37860f0611c9a071ae93cce0b845b4da, bbfa3983a1bd0a68e19bbd7834048f0c, 609e08181c5d35a455ff5ec4b4586a61, b400283bbb04779768c171a7ea03e9ea, 661fca58d2d034081400b6bfd704ead3, 310bdb51d71a5b4f20d151d6d487e5d6, e42bf3f7d1e638fc259743af93d42e4e, 1be1a3e508fab79b56fd2f4a2466eb6a, 4ba7659e03a6fbcda0c6038ca116a2ee, 5a4b4e7abf38acb176f54bfc5d52eac5, 585e79e8a437cb55c838a5b37bd231a7, 135af489940795ac58656229eb10adda, fe05ca8609b3758431d861b3298f31f7, 51a9f609b1722ca0007adaef961df123, 1b3cf74b427197bdd510e1b445cccbea, fdbe2778a13b541ea540bf3b72a8fda9, 9494df52a5bcae2bbfc2f4b0a26902fa, 52cdeb103f537d2cca32905b4ad68e03, e8936e2ed0148126b91f68341a1f7e45, adf609dde9304f7efc5f2afd75d046c1, 6d93d18aa1aeb74ffeaf3eae85d3c06b, df0228e04ef85156f4d6c8dbd9cfe16d, 5fad8ed2199907721bfbffb178bfa724, 016db45a452c0c81e0079ad2b0fddde0, 31786c64e9da13fde2bc273c65d386a5, b25cef2297c5151bac9369367c97bfc9, c9ceb8ee95030e619a5bf98c566894fc, ec04960288eea2bfd32cb19851f020c5, 66970edd1209d3da56c9c9eebba5405a, 79405bd161b1ebfd910c7a2a0960502b, 9542f256b91d074df5de10bce93c970b, bf7a397e4301829ceaf83fb66cddfe7a, 7b2a0e43ce2eed2dedf228e8671839b7, 6245275f4221acbecd9cf860ea8f9388, 05d048c93751352b8e39741d89a4d12e, 66b4b9c0127eec0995b786ed6a5ce5bf, 901d4238b953ede0ed332475c0282808, 964d1820e9b39567dfa6111bc88d6384, c924bf50010e3cb34eb4b7ac1fd353e7, 48fc902faf8f6216eb28100a59732757, 7b255c5f88f72d17006583b8ad6cb9bf, 214eab190c2395afcd68f5559affceb6, e65ae7d182fd02965b3ca8ce610dec82, 5fd503902fcd3763861bbcf6cc2726e9, 6b46c8aabf1820416e10e334f5daa441, d8d73c602f7889504aa7407b07ab045c, 6a571afbbcd45b130d1d1917d9d442cc, 58f2db8056d75b6260b9533b12718f4f, 0358610efa61a75b2ee1c77b1375ab8d, d64ef43e5b5592110a86902d5b73a042, 4bb5c12df3a2654b9493eb011a3d94b1, 6a1c3bc1960ba2926499e90c8ca301db, 7c53388bf7bf71536d108044271814c5, 5448846097754ef301c85e7ae23ed7c1, 8367d4c8ae99830c9304ee6b7c845413, d9440257b8556f9c149892e676d5154a, dcd7e36fc5bccf695439eafb714cfa24, 6433022b65dda25d0fdbaae053eac8ee, c951923cad8b29fc634fdc99fa86e409, 88b75a19370fc526b3591f0fe4f48751, ffa1db04ec7b74676ddf698ba80f8a6c, 536863e68525e59b08c852bbc329a06c, 447fa62d040159c410ec7df386d211d2, 65d3378bfd50dde9470947d936982de3, aea91c7c6c5e2f9bcea3edb3d607bccf, 0a8b9c5d43a11f1ae2c4d0307141969b, 96296fc164418a8d916da57b48168b09, 2c7da2ad032d16d5e060088d5be91976, c72f2db4bd902d83fdfaab09623f6b59, 70c77dc08519b218f3e50eee7b932a67, fbf04591d2db10b01b499fbb59de08e9, bb821272bb63619bb122967308bb379b, fae0af0d411785e69274b3439d7c8e19, dbad941cdd32061768dc2e5810949d19, de53e6096e0d4991eb38e6cffef3b853, b46cae0de23157aab7810d1e02dd24ae, 11de7f18b495efd2ea82f2649a444b2f, 23b5ab4113cd1d3789ff45258338ee7d, 10084c6fd2e56904fde9c349e5512e9a, e3f7870445003e799ca7f1ee53eeb88a, 794cbfc1cb97cf5cddc170620f80db91, f3bebf4ca7044adcd30f05fd5318f281, c2cabb87dabbf021c8695adb16b356d0, 89ab04ce324092a4e9ad5eff38eb1621, b8e5505bcb0f1c59c8cd033485dc018e, fee05b5c03ba0a16b2ecdb5c56cc5cad, b10e5065686789d12b6ff2f9fed3c253, 19282d5055d93a77cc0cf0c678642778, 9b3a7bd787e725b46c508cbaf08b8763, efda4f2ad002d533559cc97a08d5ab08, 57116e0f156596a0ad390892a34eca6e, 8c57f7bda416349057d110dd3eb2ba5d, ab25a2e33f801535c94f3a3f14a4e8fc, 3fd3900bb2620c83ff3dc475f870d8c7, e9b64dca2ebb73dc151aab085f46a631, 7146f95dc587729f0595d805c4d7de55, 8a65ab08e1930c2a751dc9de1dc33ee9, 2443c7f95807b68d449c995a92c07b50, b236121ca41a28d3ada3c5b867f8d0cc, 4bb7f052a4a00b238684d8263b0a3336, 9b35e83f1903c6a9d9cd2af2988c737b, ec6b6990c15bf3cb2ff0eb3c1f2ec03a, 83179a238498d49eb18dada18100f6aa, 81b55b2b97601b2a38dcfca6aed2ea41, e4aae341dc134aced7bd29cb7c8c4992, 2df34e5de213530b5036e9dbb31a243d, 1f83905160357fadf6270790555be471, d6449394c21967665cd6a9e547c52d59, 5d948c377f175ef18fd3aaffc6ad765a, 06cf21bc8d28ce5090732cf9154810b7, 2a0609d8aedd49591062af590c922ea0, aa4df6944d93960716d00447bb7a409e, a5ef0b8ecd1b0febf1671d1b3169a858, 3be56deccd01c3a833af07d54a3d56c4, 424e00c6efbc8d1bff82a5ad7667cc1b, 470e6f0d2b95b93be3952f6c00c09bd6, 7edd85835e078cf6c93c1c4fe07c9477, 04bbee22e015afb630ffedd19f2718b9, 4e89615d689189de45a6b6fea66b8577, d15dd64d64cce3f7dbad19a25bfeafdd, 76fdcc586cb53d04146f4bdc29e4cf86, 2d2a4f42d29bf9b9820f2b0cfd793893, 9b9ce0a97ab022f5aa6e0e173fca5fdd, 125a51d458a2febcbded639184af4522, 0b65bc76c0f1ee573917cb3d341bbcec, 230246a4cfa8325c7b694285fee231d6, 3ee9ec564fabf3cd83e57ecb1fce1765, 8f5c6eba182dac4adb33b40da66d3ce5, 6821a292b2325fcb152be0f2bd70b9fe, a6ad3105a196bdbe2ae165b88bafbd9f, 25a118033b4e0f6edc7a9e5b2bfbcf34, 634d4e56bc0036bea72cacec84dbe53f, 8e8297828440b478dd0af10f2bdd36c2, 4da75e59438888b2f4f3a8ae69f0be41, 80d9ed2f32c0f6ec9b0fef4695fe056c, 381f589c82da848f13c9d6587a1f7a67, 6f5081d2d07e1c1e1e48e53984fd4456, 00c124c063bb5bd7a62f5c82b694d8f8, 7d2dd857345f018aaf5f3c7ff0e00464, 33b509c45955664818db399da89c60f5, 034371050a29838cdc0a2110a1a5c478, a7ee60203e89ce432a58cb7c18953f70, d5fc7fa827f4c98b94a1e6a90be826f8, 43cf5c6ece0a94f8aedf1a7526930ac7, 622fb8d5e73312162ad13255b9a05a0e, 17802438079de5511b26204f26e86fcf, 78c94a2ad14999f6480b10c70012a640, 1383e4cec51a9412a6fb8e322d87432f, c89ce664157a7713a03ecb2afd51b604, 15c18fb0c3abb7dbd08685bdcc1e6215, 203965b545e08e6fb67c82b627d50030, d77f6e8008979d4874a8ed7652a10abd, 709a1e309ee7554bf7b4bd6c94df2efe, a2301320cf5c25d585acd864d535e83e, 44fa61dca1a00899400b3fead7ee3e88, bd1d6aabb7a51dad9300b239073a2686, ad3de8e0a0caa39cad26003dc2d1ce5a, 5af8a1f856bd5106ee7441ce8642b0e2, 85415b8909b75d7e7a8ea0e2d0caa3d4, 043c4655b78274af645e706baf49c935, 5e282a3ecd688168dbad7ce75a9a1673, 7e2e7b9fae7a4ab2ca07e4843ed9bf8e, 30c2032b220efa1549c5116c137d7bec, 59b1cc74d0d43fc49fa66a8f499b3a86, 36cdb9ac49c41c16384df98c4030ef01, d57695d0908cd245791b7c9bbe73bad9, b48784a47d3ef23974891c9bb54891c9, cd48d08a79b8d566ddf568d67b232f61, bd4c54a13e28f1f7b5c0a115da81872c, c330d586f17fa86b436c406211ecdb58, 5a60adf7fcb740af4dc3f2b86099dc4d, 1ce3cebc6bdf3460a31229a55207b82b, 36f5600e776bb1d037680b51a6a05071, 0f5c5cc1885e18cd1fcea0ba4e0e7e7f, 0ca1485723b5fff43af10d7960168eba, 994557a963e290c12ec1436b562fde16, 286fcbf7ac07d28252d48e66b31727ed, 3546fa7be1d237e14b09db4842e33e91, 5194f1c328eecc85aa5d6aab5b4e65db, 608ef6449c724d7fbe31e1944cfb9c61, 9024f08236dc23638d0f31a285e04ee7, 59e5eee33f6c2bfde1896bd1eb0d3cbc, acb7b03032d4d68583a5aff15b8b1c0b, 53fbe1b9657a3edf9020623bda76dd80, 8d84d7653559816aef553ccc9f527fbd, 7b7b4921ceff2935fd4bf98ec4a9af80, 2edb3b6af330cd5621067fbb7aa741e4, 9a85597856773355f33fba49516cdca6, 45a5c443604a45d8c375ce35efd5bf44, 89e1144b440f550e03d9f901920a494a, 607bd1e7933b4e2bb3609478c90a5d86, 00de15f7dbf7377453500e89764f2d25, 59d5407173dda8b0bdd517c4b6850459, 0cd0c6d1cf2ff68a2928a8b2d9dee055, 5578cae0ffb0e46070e9d0b447f1b3b9, 0b53fa464313a985c7269eb4caf8ab88, 95f34f580ab59b5b7691b0622f0f2549, e5859e3350818a9b0d9151425bd5169e, 4252d07954c395a498f02fae2ca2390d, 9f3745eae8e81d6a598635126bddf5b8, 5b9b5d905bb9d86de6a08a5f62ffc4a5, 8050520d71c6b4c1f6ac04d12076f600, 7a337076d89dcc91e964f42ad52aeb71, d70fa688af1abf4ed37795c981c69504, cbc4c5829ca103f23a20b31dbf953d05, 116731131b15dfd15b959e523ed0214a, 00a52804ad0a8cc034300e6c0356d714, 92b152f203e00e61b4e0c2b952a40b7f, 0cf1f73703b33cbb9a748e1ff30a343f, 6fb92ba6b0da28e9524814707c0ab977, cce8db5049f82e72823ab0af38efde4b, c96c9099db1f67c6280537b08fca25e0, 2a2471b571147b383f021a2f8cda509b, 0d0d56af48deecd4f7dd94a4987bd4b2, 5ce3d388479f7d96c44ed0f16552f66b, aa7103b860264ce35e0272b9453d7643, 017360034106d3fa0e4902354a335ebd, 356af1b0d6992eff654e1e38347fa8c3, 079d055ff39b589a200295422e9f2999, 58f91c5b101d26a35daa1fa138ff584f, 2d30ed97347e531dbaa65fe7ff76aaef, fef4f6bf34764ca1d3c6def8540e55c5, e12b7c9e0096a08d9a8263136bb1411e, 4701c38ceb4558b1425383653c5750c7, 1a17ec58f36fee33613c370c933fc636, 2efea2addf015fbcc9627ef40194dd5b, e0d59b8c3725457f561016dd749421c4, 4e4c0664093e3f82f0aa87b8c735fcff, 5fcceae78735d5667ee5ac226e324de2, 00e554e0b20bc951003423426a79970d, a270683faa75c717a74b832fe7d9d871, de506cc176715a91288a12ef7d7d73e9, 4c9feda9fa38bb7a5e9eeef833855cda, 971633e8d762d72acab6c0bc29e75905, efab0c34d6c27ccd48aafaeec2f50966, 8def5e93f82e71f78698201a6a3dcaed, 3f4669128499fe5663bb5902d879ccda, ac9c834533ee351f7d3ea940c51dd158, a94026050bd31eb6d2a8002c27e4131d, 6a5d12cdc3c4e0fcc689017983dc9672, ec6be3bd965d5a06b932cc7cd3f1f1a8, 055c7c99200a7606480cddd3d4c47261, 0b3a0963f6909fda5cbcc9d34e0eb973, 75fc0fc82e21226cfc8530363b3246e9, 9c1c1a19bab558789ce6c5e0f26076ab, 62782866e4348ee43d1ba91144f535a0, 9aaddec32d0d479804d8ac5413b72621, 7eabc84be5291df784c462ab9f08792e, 3a092f909e2746e52a9e0fb57d5a0350, 13863731a8354ec98812b4441b7b7b0b, 5311d7981892402c32f238933956a0d4, c5272daa641b1031b9c13a35914d21fd, 4380e33c1c575ead79998c0c1f3ad470, 31b83e2dea4649f3b96b9406b0b6d72c, 0cd0a01377bd343d088c5e349e073023, 31ce6d0e2f9362b144b5db1fbace11fd, ee4ce8357ade51c258f950cd63fb0286, cddc71c930340cf50a0f4becf7dfeede, 8490aaa36d7a52d5b84ae92cfe773041, 9296f8dc36d2f58813f95f1a1d8fa579, 1cb668481b63338f3093cc82c9a6474e, c43592f3228b4f3d4202db129d009493, 9cf7ec9bc90e5edfed663a7fe8051d52, bd7620d7f223aefe8d41ee893c86cc95, bd259d22b8d47c1b33edf011f30e3f18, b19fc2a5e431ea831989e0f7ef94d6b1, 11dbdca7f81e8235d4284717a5d22ca6, e4381e86e374782755163da5f760b6b7, c59c77957473fd9ddac5a2b31fac0cc8, 8e470fcd98b6b69d8a0f00ee80cc3a26, 08310a92633ed3ad7f227178917cb87d, cbd33411229406893f5b37773a22f536, 366556644932e5100e4a47ead489cdac, c389df365dccb981fb542a96ba19dfd5, 295a3bd5cea73e8536856f626b9960c9, 6d16b6b38f955c776823836bf5147a20, 74748b44f635b05e50c266ea1ababa72, a557c55aa958637ef3bc3bac29df663d, 356f718854670b0c7e11fce1ab59b6cb, f82dd1814230956cbbfd035661221602, 3bd73da2e8731afb6cf050519ddf1bac, 154cdb7ee723374ade0795c0db0c85ca, df905e2fd6a1cabd2b44c1fd202f94e8, c40c4a2102aa7fd55b7a178ac96d9b35, d7fcc8f73c2f32f4e969b52ee8720bb6, 2d99e024f4c188b552493b8f8a851342, 97ae3dfa8f915753afef0b81f448b6ac, 3797ee7b6ac7b35100a2eaf876ce8995, 8ab94f9c8fe24c79a07a49c981465791, b6a1845d77c7c1402b0330f9748a8e2c, 66eb07b8bbbaf28858f8188e63fe0590, 16f4598fd458290709017358787d12cd, 87eccb33854f5339f0fa379aaa2be745, 0584ea74f3acd218afe2dd1b95f44dac, 535583545949331e661504475cae02d5, a7fe9784c1d6228c1a071adf4f1cb3e1, 303f3d727b3a4b7d133eca647a92620d, 8801b7ed3e526a166a21a6f97d19f8c7, fe262fa0bec2b04c3aa05449e49c6c6e, cbda2e50f3077e81a51fb247a16e5cc2, fcbb065362b19f0a51360620ee8ec0ba, 70d1e382e0e43ec736d4c80b9580dfca, 069d7ad30c4ebafc85535b4f406dc831, 94db3fb5e0abb92ab35ca9df041f7562, 41dbfe752cb1abd8fa6664d1f3ffe8e9, 4610d46699c5cf84b01b17cc06eb0215, bd6622374a2e0794937b61cd51c5aa68, 95028a1269494d1181fdbb3c6cd30d07, ddc1255e8eb8d1b8d2417f0508885fe8, 4f13c25ade8808a782291c450be3f5a5, 89506b6d57902e60b4f6bfb9f823ffe5, 30bfaa8881818ae80f5bc0c30aec8705, 3779cea95b05e2905263d45c9fa7b814, 9056d34168c0540290b9060b3d52aae2, 8902d36c810371ce6671b24785b3f57a, b483319190e4335da819b4814261f508, 8662aee8d014036748305310e6a36cef, 90969a2851ad1cf4141facabc8fbb068, 83989db10475ff528613c0acaa3310b6, 8ca609ba275cba72fb2ccaec3a3899b7, fc408007816ca40f1bea73311f1d7c7c, 1e055e2412aa00fd922fb02cf8b68bc0, a26f9074b360decbe88c0358e376afbc, 2815c0ca5516ea72dc6eb61c8eba8086, 55e6e658c7fc7afa5baa338b7c5482f4, b97221d597fb652855c532de2d939299, ae0855f74d0e0bccaec241a4cd6ee820, fb884fb63fe2825362243d80581461b3, dd16cf08323977db67ebccccb5476725, c5fb91d38e5c80af342dcc90687905b2, b0f2d8b21b20fd647a4688a83a4a17e4, 3684680689bb6998e26d9eac5d3dc9dc, 34156b905bd6fdb35f73652fa9728262, 8f625964ebb34ee7e72584e52fdc5bdc, c45869015cbafb636eab01897ad407ce, 2d15fd5f4293b17fbcaf0f420e7a5d14, fe5244473f0b8efa2e7d7f4fcb8f9236, 93b570cc273b647a1494584113b15626, ca6b9135250f300cd9fd7c6fc8fb6b44, a1daf7efb6a0871bff0dac217e899f34, bf65258393f402028dca896d0876587c, 630873e5586e4a740a858dede7324f30, 28304ab110637730cbf3d91a1dc623dc, 73425baf68f271ea521b67eee2a6d477, b8505d3bb9d77c26fe041aa1adbd08b3, bd1c2b2acfad254c955642fb718efff6, 454c260d014df94ae3225cf259232c44, 69a8932fa52e496053b684c98b817297, a3a916fac919d074eb029ec181006d1a, b280792b285360c742ea63a7b15b9422, 4156335b99d85b0dced6ab5b348b2262, 756eeb74e437054cfe1bcb8038b69ebb, 5e759ed182d410064bc75c23a73adfcc, dfd83c096b5e6bdb9cdf9d2153f2b6c9, 8e72147dd8e222c2af705ff166db7a78, 042d92c887775d61dc0e374e4484c9d1, 8ce2d1e88bf192b55c300cffb961f16a, 26cf4461c82e13ad0ac65d1c15fa0c83, 897cf2e1c6db4091e33b86f8ff7dd27f, a730e6ff4d97ebe432f5bbeab3730e4e, 3e7c867d9758eb9fc9d7dc6a7b8e6ca1, ccd95ccf937371c9ee3a03a01dd3a1c4, a958f8dccc9236f9c21da0770f89cebc, dbd797ee45305e27acbd3a0fb1696be8, c9b4c24917844a12acb14c8cf9eb5dd6, 6190508b0ca9ce3067ecc6f6f639a718, e8e781c5cdd7fcaccd61d00cfb3c20b7, a38823d105df4e9c2d045c325e30bcc0, de21311a89a14e44851912907c72c9c5, 062905d1ce9e6772449aafb7fce5ebe2, d563dfce8134e598f22b9a41b153f6dc, bf8a6b7144cca330e91e89b2f755ee41, 1e8ad309187763dd2a04e95723c5cb7b, 2784e72055f47126dea8f923d80e1871, b55e1f2337d7ac27eeeac398f2a87649, 35346d51c565cda51a0cc9912c702a4e, af640976474e24f1ea2666804293ff30, 832152a79c5cf681e1384ccbb0435073, 0914dab77dbe8efdda8451bc344a2dfc, 86a6cbe0906d7a7418daafbc6109c50f, 13ce9e4cb84c6470819d78398acd72dd, 18cd831adaf721c281cfe85e703825ed, 4a49d2ef94d41f5485c31a7b6aebff82, ec260db8514b3e0db64d59375e302475, 2cc98e8443a8784465a9caa71878baef, 395a828e6ee75a8751b6b7d7c9aaa8c4, ea4e6c2b7ec4b2f03dbbecc4bc95fa88, 236fb1d48e5b667c846d60cbc3efbebf, 95c076e9f407bb0a798354ffa287b1b1, 64628c407654dd51f86afbde7ec80fe8, 7c6857fa1b96f7ad3c8a838119babe3b, e7ab21ea04c3602b4a2cc92cb28ebd2a, 16f4e9d541fa253f6268feb3b33e65d6, ed703bb438a57b4fed64e48b7a156da1, 3b293a537657e18704c14870f1c60111, 31a42885632f3446c5982e4c2eadda8f, 06ba019b5faea12dabe804e925b3b713, 3daaf3fb49b09416db1a01134f4484c1, 8df9519820a84eda74699e66cf7ecde6, 4faee3e92eac94ed4ce88713962127b1, 095949c7a775ebc9d5388b7e10c04e7a, 252933d077473a8e730d4c602027f6ae, d57b49b0140e1abc3d8fb427b0f14161, 9fe86de8d163a29cc9a107bd43754dc6, da6b52742c11d9325f9acd2b11f35dbf, be66cef86fc8d82c70226342eb656f10, f4614fc2511d9203036e98eff9dcb645, 39a6b4f1f85815ff526131edfe440437, 1935a06d344dc05069c52ca6ea689cfa, 66c84a8f4edb5563f4fefabeb7720a62, 380d9f5626ee82930cad0c9dd86e8549, 7a135e6d0e673a00779e174e08aedaf6, 33ede224d24149042d8eba068171936e, 56b0cbf1782efe205275cb82721a373c, d9678e37b044f15acdca211fcd0ee702, 91228736852cf1ddd9d6bb26592093ce, e1bdf7e69a525017d82f83feb176db9c, c776dcd15bff4f3a24be366c7998414f, fe92afd1b54bf18b6edb8b40a2b51450, 1f09c22cc5878640458a97589d70ba81, 0dbd299c404a7abfbbff526d3f60d58a, 4838e4cbdbdd19cb837c1ff966b22a98, 5992280c10f17f87dce384b89cf95a92, 9c1bea2ad77e49897cf21b5256e7f6d3, ad820acf875e10e2370e022b71b0eee9, bebc011ad9aedb0226e1da539ed73a06, b67b0c687c89a25f731690e401ec6d24, a870d12dd7c743c2fe39d00600086933, 7f0cb59a8cc5df970214cb475891ef69, aaa36330c3ecfb8cfecd6f68176f6114, 3a0c885a16c35eafb586667f4eeeb092, 37dec2e9e9a79869d172f2c6e52b4fd8, 65f6e112e1bf9c9509d744898ffccb0f, 7e025b62a5ec742f493d668100abbf84, 2cb9eba1fdb0ec28aef9f35bbee7644a, e54cef92aa23d7c0d18125a0b9d9cc25, e01ee67bde6ed14e143930d5af1c63d6, 929ef046b7f486c8064e9edf01df0efd, bb327cb1cdc608475fcd5ccf4769fdd1, 21fe42a456c81eb0c53f1034d99ef1a9, 008c77fe3af0af8a80392d4af003acdb, c9692379fe1d8500e585bca13c94244d, 10098fa5f947f88deab3104bb5c4677e, 3acbe774dbaaa443ae54c9320ae89035, b685ea0fbb5523d337446050c71ffdca, ae85b027112da1c55b8aee8bdbcd2112, b8da45ddb3a1fa399f5d48257cca83e3, 57d1c082bb5e085fce5476ed455409d2, f3b610798615c7e59e780fb658c212d3, ad9868df19add66e047614ebdbe1ebaa, ff04969c38024cd7490bac578cc4bba1, 2b8f65d59a024ca34fa680ee8986b399, 692eb3c75b7f59a07c1f1f9615ad1b41, e8f75432a5922612feca7d087ebd28ca, ea22bfb4c7ab113ddc6c699ef6991e02, 38a33c2dad48331a26cb89383c57e213, a2532919cab619a63a02cb20c3371c93, 450e6726419e4ec2cde844548a0afefd, f069447ba68655e3c621ff13e31a7eb8, c47696b784d988f244030c73f3b4185e, 5914baae4bd1a491acfe07b03f97ae81, 98d30b3efe95553f4a1974657dd17992, a9d932df7754bd1a5b35dedba0710d2e, 2f812c8601abbc63d49a725811ed3cec, 152fd9d559227b196089ddc0b2307119, cff05d90e33ee89c2a0b8befe02bbb2d, f971b996e97164e6fbb3b46d70c607f8, 9a08b975f6ca7740b3a9d1745c044aee, 28bdb3b103c6772ec274505b96ca39fd, 221879fd8e21e63a17bc9865b637de3b, ba3ce74d6b030f538aea944b8155b6e4, 405f4e7f337b3a85197b7e6b621ad635, 50f24fc9e068cf9e3ea58b2fbf2957e2, cc9ffb30c80af1b4b54038cf9da51b74, 7ed49184acdd7e7a7075716ac9eac32e, b15f31738f26b2c57fa477da7bb64ecf, 0c003b44bc57be013d7b4b9cb81a4944, 8e06ac6d960445caaed46f0c0fc1a175, afd76d468675b7d82b55263fe954f63e, aa388d7863187562834a11709eefa87b, a5d573f4eec33f7cc7efae20114267b4, e87d0a41da4542f622115b2f2c76989c, c3b2369fed346d512fed5eb181f66822, 14d8d67650eed588bc85b198ed28f7bb, 97941fb160cf197ef4d9016e131d7e6b, 00be3dc8a9ed32b8a914f7e88a07b2a9, 51646823b8fe8984a3724d612f03d239, e659f795f5acd4dd0176a06068f9c594, ddd546c56c6b3ee03017af78bf1830cc, afb63b07332c137ddd543593cbb3eb97, 67a031b535f4e9c520eef28158d83e1b, bd051a281fd1d4b9509a1ca4cfefce83, a498346ec993988a4fe03c7186583edc, 6a84af556b6f74b9b2c5b4e0db2af098, cdc11cb461997950b7a71af13ed7fd16, 598bf4e39457f06ddd4594378e63e601, b5739168bcf386bcb134f1b806f7b6d7, 1416c100c699b9b6a45927a9505ad09f, 9d8ea04bc452f0b5a5fb453bc68da359, 0d75961f7b770b945038a54a0bfe1e8e, 71ee369818845b7c6018f2fd782793c3, d4f6c178949688b4471b7555d320eeed, 32d2ad7a9d37a7054baca145c4422c4b, b1d60e1a3b8cf0b13855b7ee8324b1aa, 09fc130423d1dfed73601524ab1912f2, 3ac7c93082a639c6a7499e95aedb4016, 8d45e266cb3d22663e79a822fb189715, c0ce45a8ed0d4e145b0d4c65576c8004, 8fdcc116bcf55d0ed889723b1c5520f6, 43617d64415b33ec4fc8df6ead49a2b7, 31989ba99d61a91d88207258a84bf099, ada4c84c2ee22367c40ca68c4c1394e0, da8876813f84e6ad33ecb144c7c36b40, a18c007893bfb83b9cef817ac6936459, 0a3676609a318c5006faa099ea7be904, 04d22b29de0fbf48ba0ffe8458ad4ab3, 8d90868912fb854bc426aa792945b2a1, 325f0dd1d05742962be8176cc2cfe0ef, 22600eb0818045b332189210acbda883, 2647f940b8bc5a1638b4c8bd5e10fb49, a206c9a60a770d4f3b255c90f434bfea, 72a4b8ccec9422225610b8f742d18336, 9e563e413006aa62fa08eb481954fe4b, 88a87fe3bb562dff185498f16deba01c, 425a3c675b5c8a7119061dd60941364f, f63e24ad7aa311ca2fe80643ab3d5b80, 4284b3eaebd029228a02343ae1860a77, b37cbb5fa2e27db2c2fd1b1f1c21ed81, 41051ffe4f2faca8552377e54e97f0d4, ebf78b939b226099ce0e70f128b835bb, 0c1da3c5524af70f7c307f79924173c9, 7a2f1737fb6dd0c892707d2c6bfa270a, 9d9f766957e6d022f256453b992b5c42, 7598d9ade7737cca12ed6b9aae3cfa80, 89893f41ed1b021ba8c1ff44a184b1e2, 1b74fcfe8bab0ae23dc14aadbd4f9e18, 79b5700989d6ee211bf4ef350204dc8b, 6b4fd77dbda2335868f4a0336b8dd192, 2728b74960115fd57d0039d9eb951efa, 7c70d6cd66afc61f9e5b39df51839071, 1683ebafb737572ec0f381fa5dd41715, c9fbf234f841176927e030d3d6744720, 942b152563f2ee910430bcd520045abc, 1fe5dcafb4b0f6796434c610a549940e, b6c1998ae62bf4428adad1bf2c9467ed, b2ac1efd7433aa3c2d4e708431f42322, 1cc52d63f84ab46505ce18a96c7fe447, 2098a2b6d4570cc6ee7a4b844b856f8d, 2976fda531eb71c9a0d11d8de5439bb2, cdc907d0529db72c881a230496bf3f6e, 0219900b88971a8ce3c90df112e777a6, 488ac1a755db5188d84bf9c820c95fdb, bb932570e60d7382e0c383d34bdb74b2, 2a1932edfbe3821ba4827c264160e8e6, be5bb5acdf5b94ca87b27f05110ed565, 661ca0c7bdfd45468f95650417fdc6d3, 8860f61a64368eb6e565cba4f6e2839d, 186034f620af3f9274c6288a5b8f81b9, 27a5003f4b44a59f885818f88dcdf2f6, 6b59f631e35f52b3637d661018f0ebc0, 6e0df14b9a9be30701ec52f331372408, 88fcc7e76a6e394e0428e06c1aa42500, ccbe149b7ad046decfa936d737bcc615, 77d0f35c5359b25d1ac2bfc445b9e497, 9c06955389ee0dd122e305a9c33db4e7, 7a848f03778ea5e30de4dc6850c6b67e, 4ddc162f04935d27dee222b8421c4ae1, f0964450c70a521b20cd7712c0ec062b, f77a2498b9046ba9687e96f3259c3cce, 17527e67c0503c5a64872ee308e5ef8f, 264ae727cae72d90e84b0b1d6183bbdb, c529ff0ee2329b3124b43f1719fed221, 7ce55be79a33c5de0cd876a3bf8c535f, e11cb3b757fdfce52bc21a33fe896b0f, fbe094c078e5ce8990952e437a61dd06, 80eac54922fdfd9df46e415ff99ad6e5, 08ed4c7c8773087737364872ab797169, 8c595110ce24daaf2d8c884cb683b0e7, 5e95a9c878cecbf74b5e87bbfffe587e, 762d83fcb284c079c359e3ffe58757d2, 6c68197b19d9153602c911a7a16f9e3a, 26b31dc1bb92a101df746c85b0c1d5dd, 5bd0a886f8765bec500ff528ad7d7862, e93363133affc0f7c1f2a7fe201f06bb, 54f4ba8d4e7d791d8706d1739ff0d81b, 3c80b4e9646af1bbc3d233f4365758de, 131573aedc37c86bee2fb968e62451b4, e2a3dc8be5e68ad8375bee3e6bd4e666, bc073a8f24c298261cd126808119aa09, b33fde13d71608cd3965d21da2a6261c, 187aca85d0518141780f51ea93f5bc8b, a400109a66999ae2c3a294417684ecf9, abef35ffaaeccdb7a458e9f842593988, c6c6b4450e33dd5853020082f6b9ab4a, 4173d3920cc8ab4f558bc0e545d100d4, 1430bcbcd5eb043aafafcaaccbff6d7e, 2fd34d9cca2409b107ce24f75c25fc12, c5add7ca7d0348ad7c24a5f65a41a85f, 30f04a9c48f4d764f17c1b3f4884c82b, 3201e2df6532721ed57c1241790fd16d, 34ba48ceede30e39472f09ea539162a7, d1a8b1cacd9fc9469dcf45de641912b1, 0d985008aec9e100e5dc9c62549aab82, 94e1eb3e0b9bcbf070fbf6257de05df1, 3b7f6ad78526d7372ae133400846d909, c626aa87b5843452ea8e3cfee4ff5ede, e39beaf2227a493776157b383a8e18ef, 906cbd7a80e35284d1aa8e7cb7a60839, ac25e7366b164ead861617bd1b803639, eb0bbd008023ba7300e2b66eaa4a83f3, cf7f77445e3dbb10a15b3f8ffb6d5072, e674f661c5cce1b20d214fb7bd50f572, fadeb110c56471e7f09bd10884419b92, 26e5213e8c9576a82802201e03325a7e, e7a4dcf5b8baf12ed18698a439ef4685, 1ee76c4a6448b525ccb55a66abcc9028, dc8e8782aedaf245544af2043bf5f2b0, 4ed0651df61c68e7195cc80be5f304ea, 71acf4c68453e66f2b5a5677d32c4157, 84d97e68db7d77bb89de41e77e0d7d8d, 9b994b2b027801a4899f512f03e78f91, 4f06fe028df3ce402cb1ce420775bf44, 7c97a3308da99d753fca31fba70b0d1c, f952ce7e7eeb88c67a9dbf38647ceb12, 09959340e29b958c834040db6f38aa71, cc00eb707446c6379d73cbd0b87b00f8, 2b9953b363d140db2b9d99aa6fcdf69d, 71843cdf4441c7281c7fbc1d2a10cb81, d933f51d7e9da9e3e31e1d9888a46d93, 2a533c43269f479c625db48d5441fd62, 994325b8f98614f0ecc628caad9339b8, 0745ff1fe0cbc478ce1fb43a15ab8a3e, b7816f0c76b863eee6e6eb41d0b5a23f, 8b1f53dc47ea63f98ac8205bd2d8931d, 49b0c704510f2579b87c38e3f53e78c1, d47adb83fe46e21a2d1426715eeee18c, 54cc06cb9024c96c2168886df4acc11b, 4bff1134f9fd19a4241a38a7307eba65, 6c7ea14b2d6d0e97ffe154e9e454f1f0, f100afd184425000ddca2e2ed3c12b02, c43d0d2eb9734e4c1a636490bdabf35c, 8e1e2f93ee621d6eca4c2b683abe48a6, aa8818b783535a849dfa425081536433, 4b0db3f8515acc88ff5951f47c9a4ab3, d5ce6677ce59f6b2fb30ad1d30b30c0b, d4774478e832f3625ddc1599138c4149, f0432a20475e182aac0af4f18d54451c, 11f44644ae43a118ae57e1adc2df2635, 2853943490ca723386ab3eb7d18434a7, 82a1db85c24a91286c4d8223af316fd6, e31ab3d0cebb49a80abba2df56d9c56b, dae23fe51bf8a165d9ed6a3bb4aa650d, 2b1a7e1400f8aa15f0ffddfa440fabc8, d7f58c859750ed425096b4e3992212ae, 626d73510043f6cd05befef95a2b46c2, 5b54cb3ec8b177b83963173df75cbd19, 3b864b3701586a3f93394155f75aaa6f, 2deebfc80c5de06dda673a51f9cd7cb6, ffa2364598b93e3487b2d9f41dd0c080, 3f97f754408ddd93960f9c84ae8c3912, 8218b6d2e6aaabddb877190f69764437, ff8c1ccf81fb5725f268bd54b10113a2, 15d81509d5a9b90e6b988181d87e040f, b13dff1c15fcd567c3ee2a330c09451b, 8a5aeb00094373700d55b9550463f200, 1ce1b03aa5381700a8ad5d999ce52fa9, 77ea27da177ca5d95889055e5b9fb127, 839a1c5f159e9e8d86c5e3c0d3ba61d5, d2aee96613400a918e51ab0d5ae5006d, d7a21187fe24d33780e7583dfe4acd13, 9f33c11dcf8afe157a512d9cd5e3d98f, e98a53c57e2741d9719d4a9b4f1225d6, 2968ece13dde2500fcc55aa07581491a, 1b3a661344ac4d27904827dfb1c8f860, 7541413c50ffe89d9427c41f18c60614, eba566b1755666bd66a1fbacdb222fec, 4ae169dd6da3a98b0ab5bb61f9b8b38d, c4bd4407fac2e672e8373ca9d3ce7eae, 89873dfda61609d3e4774b7bbefb10d7, 08300a9a8f779cd4d834edcf5e08fb6d, d33e52cc135f5d2f6f13095e8a0d93c9, 06fb75f78cb296fecd69a9a4a7a06007, 391c2a857e2e135f180cd68c79d8edca, 535c984fc2b4e816fc477093354ac75b, ce0e4b3a6686544d50258ae46f00766c, f154b39495c19ed1b754583090e6f3a1, 537679f95e36ae91355e8bfaf696ab29, 366510042bccf60e57c119894992ba24, b822dd5fbfaaf49d9e03c8007725e9d4, 8e4ca77b4de77a4af226d21814a9cce7, 2e11a87abb711a88c99fb2f72b33ffdd, 5060a347a86cf27b893d36b89cfc6450, 9bf724eea86e680223e0bdc23f24a332, 4459e8a7f72a6a282039046e7ad74144, 65e4de7d21b13984dbd53aa7378c9b46, c289d4269751f273558c8459561525ed, 4baed3d50af3d65760e6453a85d2ba0f, 0590fbd96d260b26b8adbc6c7baec61c, 99c034b0ed0d27c1651bccd319d521f1, ef9bf7fda0a4c5aa13017f3c9d670cef, 1fd5d2221cbf115aea7b306eb2e717b7, 48ae66bd59006cd7a68a1358fb12613e, fd2ff1fd845cf7cbe59eae84cc9a9b8c, 999fa8868b0b71efde9c37ba3f180279, b8413f926b30bda121938f97349210e1, c8b2751ca82ae46266e8d93b10f633e2, a1b45e92617a80e9f88997cbe28e2dd8, 4514f37bfb17de3717a437e263673811, 4c08f8a56d31b718772d4d0cbb6e4a1b, ecfc42bb8da0bccc6b410923c45131f9, 7c7b8ffb36485fe8c63bc2df26e36d79, bd0a9acc14c20e5ec1b64b527242479e, 5fe94184bfa1e4068c2d911b232bd2f5, 9f76e8f3d0e07da56caaf43d9955a8c3, 358eb6f4ac35d2cbc41388ee595df9f3, 8a5a9504ff88cb61c0e8781d576a8361, 5051539adb1d7ac47668f694ce21595d, 035984a90ad67ebde0394fe217d3f16a, 5e4fb672b52ac6e90c4ea269322ed0b8, 2e89e4b1f336f58b1dfa43f2080598f0, 27980bcde2ce016420eb7935b35189c6, c7193c4adfa2a1a516c746149cd93a34, 70560d9c36310e4f110f848b2c0eda51, de38689ea616f851e3858a2c14d204a6, 2afee8b667477ecca6e25541fab81708, fb5f2bf3528eb54daa87aecd5c735fe0, 8b1a8f9643b1052c3870a23e36ee6aea, 013ac49706815b26c419d22cf6251f1c, 05093bbd4bf07f58ca550a9db40351bd, cf519edd8a185f6a75e189eb14577d57, 505513e009db51be1e6ed555fc42f95c, f02cfdff94bfcca06c4fd4f7876f7bc4, 0d54a5397ba4f79acaa2b025b8454654, f95b0df7f07b98bc31da32fa4387dc98, 26c4189e0801b861172381973e58bd09, 55ec3d62940f71d9965226ffdcb53561, f0c02a956316fdd31cd54fe3e2bb2673, 95312d2eec0a4ecc500a583a8fddbc5d, fa7e16a6c4538f9a1986591177d2247a, 6d0cb6a77664f6b521a2182a9d6c41ce, 9de37c41b1c35a8e7459fd2f1ec64b0a, fe0a4ccc0fb8cda3d608addc8aab0b81, a9c9aec0806cb40d1494f855ef92598f, 43d2566132f47d305955b36eab692d4c, c559b9e0b633a91cd0afe40a825fe2c7, 271888f52e3852bf21504dead4d392f5, 838bcb89d114cd58b9be4cb0171e4f54, 3d02db9dcef76f8f906a9aef7a71d72a, 1e97e393e0da014db86f17015cb74b04, eaf5b7174c9cbe71f18fa59fa995eb23, 9b97f1e5c635e5a252fe9cdd887fc0c9, 51cee11ffeb19eca81790b40be3d05a1, 6257b16f48485411527e0fb6a74ae56c, bb022eff3927c280568d191bbf946cc6, 5b38ce62ef2ff1ad9447633c826b0577, cfe3465cf36317c147289b10a65a75ca, c6982a96259d709d04817d97e6312136, 53a81ac587b3fd2cd4bc4a0a38d65191, 8fa9af59dc49ccad9cc024cfeef75486, 675b2b9b957fc1f350f3f24ea51e3fb4, 3580b16571e43fdf1f79f22f513e2fef, 96a372da057580f3b83f45d478e7418e, a1bc9eb00da116b8915fec06859d8593, 6745e83504e6086e52d2803b2162b87f, 8704112175da3431c77af5d5e9a8baff, 81ee049d72b801ea7765a7edf5d97fff, eb97fad62ce4a28fe14af2adf9570745, ea33e06bfc96a8bb74c4812d0150f694, a0de2e065ed8b6395c281400f88b8015, 27b54d4e3dcdab5301b7f78e5299c2d4, 91a74fc447ce6965bc6ed9b1dfd233f2, 9ccfd9edf08c5966fc844dd20aa24b6c, 9c371ec17e6ea55f6ebe895381f43600, b346899c6d751064dcbebfcce6035f98, 5bffd059853e3f8957574110e6ea56e5, a963c814059af412e588560e865a1a80, 6a65c3dcb9dbb52b344b1e7dec98f8e0, 885155974d7b96a5870458a8a6de83fb, 8929ef3fc6b730926993f103c26c2ca7, 60da42ecf45ebe2bdfb88b0a0005389d, 3bce2a258e9b82c69d458f19fd410d46, df9e0102194fab035ce5402e059fb090, e301ecec677750e8de907ea143ab1ea6, 3bd5cc30b31cb10d3c5352d4ba3e7b98, 30abd7a232d9a6f805f362eaf5b160f2, 39a9828759d9db50d8ecb569affbe131, b386b93d832915c54715b5105d4fb309, 9549663129dd4289925222492f5ff6f5, a381e42fb6b0931476c1aa5af1a13c77, c7bd8ef1a109413ddcb151cbcc42b739, bf02587f56e9211b840fe25bad3a66cc, 8b2240c3ca307e23ae179d4177d92c51, 58bb44e79ee0cb05a42e481e661880be, 53d4ba178d855dd873ada7877bd576b8, 09818bfbd860092a9f2cd4dc31454c3c, d9856437f674fc2044bb17c3706e0561, 81f1677ac1e570ccb8cec528ae5c43cb, 48a51bcdf49e3989946ed747d20300ee, 9548dfdca40998405e34f3ed0099db01, d6bf9fd2e0b7903cfab79d33dad83c7c, d3c72921127883c500f8e40a0b00907d, 9f3eba5d649cb1023ce9d6893e6ec734, 6e1c8d11a12c6d79e0d13d5f113e1199, 8240c8cdd2bf301f2a70844afcb29adb, affb3ef14098692b58ab41cbcb94039a, caef5bc2e6ef48c9fd46571b3d13925b, 83b3c0325ceb0ad2c885640726e902c1, f86d9086a595b91ef62c369173351d06, 435bec8e238dff17d9cbe02cc4de53e8, 5111042ded1286e364ff0e9c80ef64ce, c89b9e3388f8ccd170fb8e8abb9db23a, f013d6559e9bac019626b9486aaf91bc, 3070a8a640b841ab26f3fe5f74daccae, 561c4e413a7e536c80811b4a6b6bcb81, 72c010f3ede8fd6e07b94055bc696805, 78e58ba635db9a6b65b3f72b2e9a7200, 9deef829c22c64c0da6d75faa1c40304, 6907976d43b88e0282cba3e07162f09f, b71211cdbddbe3d743a0f3f8d8f434ff, a33a071413edf6286e795f6a8d387dad, ccca259f1b8d08c8c7ae0c38f8f41062, 9e602d353837eb03c9eb6c457217d154, 5a25f1aa737777644129c6a9d755e3d5, 8936311b8ed9abd49ba1e391636b33f6, c199802df9562fbf477ce62656f2b639, d3a28f11e4a0d9517f34dc5f6d0ec278, a146a2289652f3aa1d51807a92824498, 5307c93e439fbff0c4b05c30e4a47f98, 5f6be4830ece691ac96a2bd38a3043dd, 3a74645ea406d7c2957235be78f3e089, 03bef44ac35fe805b492d02053f1cc03, 0044ba5274c162f45e2971635377e69a, 06890eade7d0b8edd0cf266f320baff6, 9272d714a778ea6212e62977e872477a, aa17bc7c49e36b4c7fffa50c4e96d950, 4290abe574246f4779646562d295ae5b, 781a7efed7965dc6eba718f7181951e7, 8a63d22017f6bdc151004f4fec6129d4, 8e7efc7787b742134b10ccd9e6f5c934, ff24f06029e95336ca04c1cf137628fa, f70d0540c153f1bff93e4e9b5ea8f35f, 3ab397452268056472f20389417076a2, e03407fcb02afd137f5cd515b4aa8b94, e819eb815cd76c02b2d0a41981007522, b74acacd22dc695c8eb2e04126377a27, 2ca1e21851790b4a748ad8231bd1c89b, 791886cff3e50c13b5f7056228aa19ab, 4325e47c490e3732947975fc9be4dc31, a45f09c7aeeeb9e744359977fdec0d83, ccf9b8e83f78e8b2b3332c67c59ef6c4, 2e6cacb0d0efb943049386edddbd03a0, cb4e057b6a2f3cacf5c49ad31f47dd3e, 8daefddbb81513a72e971b86b1f606ae, 3b2fcf4a3090583523b2d62d8a6e2e18, 4fada9b963edb3c364fc7701d9fe0801, 608911a9c2778be7b8bee008cbfb9614, fef1b3549986e6d71c28ccf7752cf254, 3e76ee6c611a91646d11ada123b87748, 9f9b6d9659e63118f15903b9f963bec4, 5d36e6f5c4697668bd5b874e9a917b62, 87ae0e85e6133040b00bea8b44f833dd, 068db9f3d81a135a9d5789a07005d70f, 2aae511dd2db6b9caddcdcf1d299ae89, d1e4321bc4829ff0609a152a9d45546d, b12e7f4b3a0758cd2ad896399703e3fe, cde9d23336c2df227514bbe8e4266823, 8163279e75de3ffcd87e0ff6120c313f, a84b818e00a2d0d9d6a5d22a4fb2cfe2, 13bd21e984f83492dd559798c2ff2af1, a13dc3a423534aa3fdc6b62b96cf879b, 2368615711182c9d5624ae26cc2f3c14, c3da32b0c359200eebbe5c751bfb18f5, 12e83409a3e2e6b74a69394232da1d8d, a3b86190af6efbd076c6783f12593982, 5a64fae4523cade616ce306b1d43065b, 99151f49a3160cbd89b79690390390c0, 225f0aed706236c5288704d4f175e94f, c798754ec1a25fc876cc36d3f6befb35, e590edd0887ec1912f5336425963f78b, d31f6dc02fcd50640f29aa27a952a5f8, 0b853895037bba502b5d441a85a54159, bc8c3cca75a913646a27956fe3cf27f4, 0af8240cd8b096bb904d6504f1b548a8, ead12dd554f51174cc10d0f2c318378b, 31321699f9d5489f4202734aa595c901, d9804a2f3724379ac657dae4c1676ff3, 6236eea7a758cac4250b6e340acdb068, 38c4f53212d00202f9e8b43221d94238, 1ca1171a47d388d52cf1f33966d4ded9, 8e26312b81600e69a3fa83bb0751e155, c9ea3ac10b2767dff87a817cbd94a52d, ee2ffd9a6847a61ab4add6b7ef052337, 79192303f92b8be23070bbc66fa2b480, ffe82dcc2b6dd1d615bc0d140cdc263c, 7659caa96bb743aab038ed3c9bc89940, 7a34bb798a74e6c0dd2dbfda2e2a4208, 5abd00032e06ff3feeb1db824ff8b2f6, 337a0b24bb80e9955c8d87b24e9cecb7, 8c311b30f3487c47a522aa14b5632de1, 6837aea3cd15feb431bef9dcc6741b23, 74ca09b42df5119c39fb34c00ab4261e, 968457ff3dac3305525da6b5c8c0c0bd, dde28ebea8f1f8e9bfaa33a1f49c577d, c25d119b0143961f761bc1fd1aefd35f, c607e177f1cc4f9fc972322189d1817b, bb7fb158ec795de62dcff747ab2b7ebf, 6689b36881ed6d5ddc0ddd7f6c51b18f, 973cff2df1d06d373beeb7b739fae3a0, 699bf3ba4c1cdac5fdcb1302eaa85b60, 3d08a77beb45e81a6904229c2fd86603, 321aedf1b1b5d5e1431b0552c27d9033, a7480e1e5a513f6e49cc5a54f50d98fb, e9556f0b07adefda580fc936f6bdb680, d8736123044140caf558c6dc6e28b1cc, b19b307673d152a72788166813baa3a6, 89442f9bae65a51fa58df9dae830ee2f, ef625f3a9edd30c9d9d01a10823be804, 27d4f854d33a5ad95f8c3036efda33c8, bd595ad2b013405cbf3938b9e62734fc, 69724e96a1bfdc75a22ab17ff66c582d, fec503cc00316bcedde2f84686cb65b4, 58890c8ea408fee76af025c22dc9c739, 13f3b486ddf43a8cb9ed12b3ac81910c, 883f0c6d17baa2fd377f2825fab70b18, a723f0a976d9baaddd40fb759509714f, d32c68678a260949a6b89ec58b142280, e039203dcc12d6a25049db18b7d4c3a2, 9617fdbcf5c5c34b15241bd369147967, 3f8b6d78051f2b51ee032a9b1e7a3fe0, 493bb8fa016d7762727fce13279370d6, 312f7ebdf6defaa401f4ccbb3d24fb7c, 9b390e80f8cd7af1d0b28ab7d3abc16a, 697da702fc504bd9b8bfad806d26824a, 1f409cbaa2b1765b5cc5c7cbe402e482, a24db4f2ac448cd195bb68eb963ca728, 61b9da80d7eb59953a48a571c68d0941, d973f59ef5bf248e1f1c900f0a61cd12, b109dac9679f58015afef13ddbcb40a0, 9ad9ff084ee809a621fc87b753395554, 17d13f01fae1fa73e3fa8188abb5e6be, 51c7366db1cc00caeb99516c85b14820, dd06de33dc460b4b1f8f690615d83922, 93250d21bb142f85d55095566bd3d96c, ba8b3862a6b84d42a6d22b684ace3fc3, 7ecf6437b2ebdc6e600873076868c839, 53a3d7be244d014cbeb81ebda073047b, a77c4723be6faf94090ba48c262c50d9, a458fbc6fc324f56d45b314f30cbbafb, 6bba820d2cb4e5e6b2849500e6c58ebc, 1ff5f915bdf46b374629c02918401cab, a5f963d0a41dcacf555bc5fe9f115cbc, 0d7b1ed622fde1b27865a51f99529be4, fc745ae1be66fbe8ce7eb80a4eada2bd, 39cd6450d0f113ade283a8ad44e47afa, 38601ce231d3f28d6f8e0448821406c4, 747ac357efac5fba4ddd947eab0c453a, a23d7bc9269519f723eee116202bf439, 82bdec4e9609a9ceb260c726c17781ad, 2650e9e85e795e6fe2eeb8742eff001b, 405cbc204c72d682c5426414fa5c3ac7, 7280d9e2098bf5b6488b800aef24359a, 6d84150d01e12499a07bb62de816b653, 682c9e7503b6a13ac5385b5dd8648b40, 2ca086e39ff5c450645154451d0ef370, 89359091345fa0d9d562e869203145b6, bc5d7a44515163a7d93bb25225b14796, c89ede37ed12a318a358cc21e06c0239, 1df3fb1f686f32b84f34025debf0ecb4, f3395b261eecd8a32dc26d6759e2ffb6, 2d9b3a06f7f7510d6e217665586ef693, 6c54332fff5774b2b9974c109f055eb8, abd0e2effa75f325cbdfe9204f24012d, 36bf9f8b755ee02c0aad40d720336c52, 4ea903cab10221db9eef245a0c92dce6, 8ba9c3306f4be9629471ebc1571e7194, 2744cff9aab442f50d434bc2462cc07c, f9a478026c095bea4ce51e8bb48a60f3, 456d30958824ec0f01aefddcba61539c, f962131ff63c903dad1c3e28d4f0b1e3, 075a5858c56c20f366d95d52cef58de1, 44b1f80afdabb1622683ab5de8832a8d, e402c45d4e5b2f89839920939dcb486e, 2b9e79fcac578393c9d03af568982ca4, d0e68c3544b39b914fd711ea5042e49e, b59daf5528b5544329d10493290fde9c, da1d469da60f31d6024c5ecb7b77c435, 13d898f073dd9f032930aae95a80e558, 743becf4eaedbdbec86ffcb0574dd685, 8dc6e7869c542b701d7d9f6fa7db0cfe, bd2fb005a5e7923042749f30f8f83222, 469f892cbaef8c814db8659e25146111, 93972d777e82b5842bff48d2aa249c04, 3f45347d4505bb2cb27d85c36c57c11c, 8bb2952b3f0229b54ba7276554ad29b2, 9aaebb665a7d91be1a0bbc48428b189c, 0cb8a099769d836c2c56ce88d89d6c14, 9e98d973e2580a0fc56744403755b4c9, 2ed8c395b8963ae5af5bbbaa581c2d0c, 114de14dedda726f47fe5868e2d1d264, afebed81418b34eb0e1417246c930df1, b264c2b05e253367e8c15444288acb41, 740e0a5ec17b2823c005f0182a97cf44, ed7f1e8ef1e68f1766719d5c86aeec9e, 3f7f5620cf376c0fb6cc6b6a44ba5463, 6d12ab731695edf216edc33700bedd34, 76246a4abe0e9164fcbb3f9a111e3b53, a81f931bb8ad4110837bf4b5cef991b8, 0a97c3f252e892bcc734a27bd80b2f68, b77df20dc5b41fb1c203df440af8fe01, 12e20443d361f88e281c0204bc68b241, 6e9a8568fefc5323245873323c7c1ac5, d858612799792ac88b8baa56b163d725, 6725c916d5b502c01831f3f78bd3ace1, 8d4dce0a409cfad45ae10cf3b1934225, 9f1068d80620d55d5d17ff7100740dc2, 23e81221c7e3a7466a2a625f7cfe253c, 7864fcefa602dee0942b98055802ef61, 9ae1af21182b33e444bdbdd524eb49e9, 9abe7c1294d55db1e3b319cd94e2b6f6, f8f347a54f5aa707a0dae4d39d3c1e87, 3ec48fe6523fbdfbb25106daad0ff158, e35cda8dccc8807d4001a2bea72aef6a, 5decbcc939f82e4ba1818e540d708c99, 28b07d23f60a11fa2c25761ec6da4795, 98b3236ba1a525c1a515ef0e36b7479d, c4f6107d98ea4b7046f4002a7200464c, 75a38a9f773148298cb1ce87af99bf95, 11600fc562852db97e1a454afffcc121, ac6b7856ddfdd7e882e22f2ba261086e, c9d75b63de11c6dbfcffcfc781052b7a, 7da6e9a7a1be539c3640d8400c1f757a, 0c13db7fef44d0efdf8ec0e195a52b3f, d50d43e0a742d9209fc32dc2d34fbe06, 9e0b0bb405b7f9c86425396364cba5e7, 4c798bdf46a7ad97bc4fb62c05985a69, 09f0eef41a3d9c47f025734176734a70, 622617f406444b4f82a104b8a22554a4, 5345bf77b91589a02f85c2931e046317, 71a5395d864b71537f2c9a50538991af, d0a829ee2158ce81189f77a7e4c11384, be5c067d04bf462ce034e950398507eb, b30ff7160905d1572de48263b1517155, b3ab6321d2fdfc00ccbcc26addda3560, 5ff11fa9e48f87bea22a65141535213d, dfe6d534e6025afc2ea8d993aa01a607, aa185db287dce485a57164f717519322, 7cb3ec4eeda66a83f03539b959e17f49, 2c8facbf7fc4b5d485b0643d07dee952, 6d9d9dae36b0a7f1b55f05626116e5be, 769bfe3883adccda5e1e6005b8514071, c9657dbd6dc2c023d83e316c95dadf56, 4e73585491104a3234d8350ea9c2937c, ba79274c1f4da26bc013e92a6c8e88d1, a428869145915d0805ed32ffad496b77, 4108281d6f9e4247fd6dcf38a67c6afd, 292adf6416ce1ae4c371b136975d99e6, dd84303b2bf4a0a46416493b3d4474ac, 230afc607aabd5148b927f03505df94a, 509a81c739a01ab872482d84e0d12ebc, 7636b13137a3ac082ba8444dec4f4886, 6891acbd5e1316975e18a9359fc70ada, bb4750ce80dd28113a0832196d38439d, ecda44e6ba481e5213f35bf03ab06eea, db34c73d624954a55cff57d469fc4a0a, c3a0db3dd1b59003202b63cd4a3d1f9b, 28f88dd6a3fe3af7582aeba3492a8490, 801409e4f7eef32ac30775914da2a833, c4ddabff38ed2fed40aacfa8306f3ab5, 98e459da2ad5a09a829acf9efb0de69e, df878bdeec90975a3ca4aa25cb579ae1, 1e637a53d58df68bad941df866089870, 34ad15fa908d7513f8f57f1891ddf6b2, 5020b109c415e50f0cdbff3566e55ed2, 5dbdf7f948dc87f948eff3b7f701a6f4, 36fcb6489637b7f91a7a761cbebab1dd, db725b56b29f770c9ffa182fa740f839, e9f5813944bc672343fe5b18cdf51cb7, a678e85abbb97722f74c0b8748d356a1, 4588d5272beec2a71dbadc81e1b21ffb, 8e4f9aacc9be5a57e7296fdfb2f7ccc6, 394978915e8c6ca92eb925f17441be32, 087c71cf3ba19aff8705f6f475752fa2, f4e9c5ab9188f6c519e3de6b3f9e4a43, 8ed8f2cbc5e50b1f42813e0eadb4376b, 0d4fbb1621ca9bdfaa0d946d687e6b04, 53343eaf548447953e872c86fd20d20a, 4095c0fccfdb68575b3f806f2bf35d2b, bb354b23138cf2f4584fa4c300a1c5ef, 75ec61bc4009175edd6470ebbf0371ee, b5f0680ad4dc47619a98d726eb944bf8, de188873fa05d5c988ee193f4ae0065a, 620a3bf950a7a13453a670e87182d3e6, 8d539a1d067e75f2d99db5c31bad7726, b511ffd529ad772932382f12dc2ac897, 5eab1ddeb35ecd88b9247309f9375a73, 6cfcdaaa3a6ebf03a41eea6258f105c6, 27dd41a614bd466e6bf476a5cc1c0504, 26aee09a1fcd74fd80fb7703c7948f68, 16d25b5dbe31e4d7166a4362653e0ad1, e034cd9310f72ad3a199475068a9cf45, d650d159b46fc66163ba1c5fbf370e46, 36068095f87756400f899aec2fed4d32, 58e80c4b8b5b00e5423d0cbfc51c35b3, 5610d5e9648abab9633cbbbc6e46bd78, 7f06f8dff867fa482b1ebbe89e0d37e0, 8acaeaa6c870afec163dcdc9fb260d61, 8c51e7aed92e29cb091759708d75074d, ad2b33adc19abb4514d9b83b23a3a480, 02afe0fb38822f21b5e8666eaff12bf2, f56642867710d673a0cb778ebfc20bfb, c419d4114fcd8fa1936e491096462004, 0128f885c614867748531c67ef6fb055, efee9a69d426fb903efe789ca3944ce1, b800d0c98b43ab08ba3b5845eed77b30, 54918fec28311fb22d0c25ae8f9996ae, 8c88ee14b637f13aaed0f388ef8ba5e1, f033ce8298c524a260a8f21c0c76ec4e, 979e7a63320eedac6b644e8fee7f97fb, 7d782709f7409241df932b74f0a82029, e1cd9062a63712b8dec98d6940ca5a74, a8e8e8767f11d988d06a61f3a3834722, a1c08d3b196b20c821bd2d9bd54e9d38, f368a220c3e9ace0f2747bd75eb0e876, 4646cc5b9bbacb218521ea60a84df76f, aeb71dd3ad42fcbd141524f9b132a5da, 6ac0cb0c06f70acdc9a4e6c18a68a9e8, c7739d0eb7cce72eafddff9a940e4bf1, 2fa1ca172ed560b71f32c69e235b29cc, f872370f6d1c2a989539e1c86d36a9fb, a78ae2b8aa852ff1b35676cd661688e6, 9b79a2641129b2611630376f7e36609f, b06e6f343e3adf67bac93d6820afeec1, d42745f179ca35050c58351d37202448, 294a1e77b95daa7432aa0bea62afa9f2, addc20ea6fa85758f829c389ff0c6574, 33d13f063f16424e1e1caf6d48972094, 8857fa53acd1f1652960b2b11c763c96, 11e59193a3fbdfc45a683ff0e76bf855, 4011ce0ce33f7506d33e5ffa35f0857a, de19c536984cd999546f72b4f845656d, 540f7cc1e243544660e4ff30cb455ac0, 4ee2537ce6db3c1cda49c1d28d9942ed, fb43d139f42b876a031dc11499b63ef7, 2be2c20e147aa7c02c418dc2617e39e3, 503e3fdfb866c61ddc31ed670ddd8476, fb5f367dfb16bb17b04597afc7b1218d, bfa2d052289e7d4ab516bf0286cf6eec, f20e9fc75a45325c77aea3fa64f92bae, acbbc5fefd901020dbfc4ff4a2005e7f, 8bd25fc102d83cf5bc4defae681905de, cb218a82038a312796b0a7e538ab736b, a5f9e76e352ce8d1a4f870fad1c8fa67, e834b7e75228e7241e23859a4edeb460, 7a2e014f6448c40bb3997f4fea041f4a, dc2e603e36bad4e7620aa1e63fd6f55f, d3eb7449c2b1cf88fcb3109c15b8be5b, 95c9da06bbbe38b2aa4e896303ec9f68, f672559492a44b67a9184c4f6f3f4faf, bfa56b957b08f52f8a7a609dd9088343, fd311f32fd086f927fd72c7b8a3d3b2f, e5bbd5fdb326d45c2c1c9f960a2c0d4f, 408d7282c2e4a0bccff7dc57afd0431a, fa1e13303bc694cb596dc15697c18eb4, e12c87bd930da384ed41d0faf05bdfc3, 9482f6193838b25d3fad88d7720b0c1f, 4db1105197147d43002b1b7d50966297, 12269a95f6c93fa29fb4d0b9217fe65f, 7eec7511fa57f0fbbcd76ac8fb61965f, 394ae48e20c3482302bcaf089b21048e, 32450ba1d54f49430b875f4c0b144e8d, f2988eb58eecdb4a6ffd589938a8c17e, 61a02036dbc216813e8ecd450142602b, 7cd31bfc9f6a03fac08b120f184d1dad, 80e6dc105c403b5fdac0d4e1cc25654c, f1e0367c0de4917feb9775b596a982ad, 66a6cf66536c0d730ccd6f420bf02e27, 093f6d9d0de1c852ca380563a0a34bdc, 58c394574f6dc2184f1d25f33ea5ccd8, 18b5e964958027e2c7df3c4bc70cd0da, 3ec5beb1b06312af0626f0d94a8a2b03, c3fea13313c5c60db1416c8cd5cf9926, 0cff36a2a0b6e11c997eb50f073b70a3, 1d42a8b158b0eeb9d6d17e32bf50f9aa, bdd0f8be913d24dc0300ea0d7810bcb9, 81806457a83bbb86a6d3ba9454acd0e1, 60bccc2eef5151877195fccf9243823d, 9a82e6241d544d931f128fa012c12291, feefb2f71e0f6fab60d594d5609cfd85, d1071c6d4d9fce47044fdcf581ab3e33, 04cfdec759770b6087f8b7abfb04170c, 6c9f9df646e141becdc10767e56dab5c, e293ca0d2f976f09fdc3f4f08562c750, cecef8a3e00724c3df85a9d951790f34, 7331e104337af4cc6d5d1312f0dd2af1, a78ca70e245f12462b870a8ff0903965, fc3d16ac7ed1a0082038bfd8069c5ae5, d117afdcf5f6603b6f2fdaa992e68096, 8bbd220172ae18fe3a70c1b30f498cf9, 55d03fd1fe154ca722ef9fb0ddf1580f, c85dcaa04af25c731776dff5fe702f77, ab5d4423a649ca3bf4c5357b0f3b8284, cd674b485825a4749d568749bfb33418, 997a8d9009ed5c217d744a577bb2121c, 61e7ed2899eb420b3024dfdd60fcd881, 27a02bbd7dad6f4a67ffc90cfd87c8b1, 1123e06b19aab896a878cab68f70f083, 10e16c430eee67e21737e0984271cc3f, f96aeb9c8e77f0e311830d72634673db, 3e315f5773559877309fcfcfaddc085a, ea4987c321396406be2e8a77787775d0, 4fb8415d673d0bfc08fc31bbe777d840, 001471c38529c6a382f963919b213e2d, ff597ceebc160b98a2286abfbd987208, 72582ca9651663c0a3f817a20c6747a2, 46bbd31a9e20d4e4a451f3a75dd0fa44, 89989ecaa47bbd89c5bc24ed5b991c74, 2d6af34626652da8e204dc5e2dc4ba81, b8e5bd86935c2ea3969194fd6a3662f6, a6aca6c69f140f4529d818f0d57619ff, b3e6ebf212b12e30029b347ba1b2b674, db1b6d1dd74fcd20398ce9bbf3b26ad1, 2d5aa2bda9a1577711b6210aad802b7a, 4f3f822ba4c6d83a500e8a968d407472, e6da56537dbfb8ce30cb5839f68fe639, d1590169ebb5f3e53ac6f0db55ab69a3, 441316e34ee7171194a08ecbd2af3b71, 15129339058310333702cefcb26a08ce, 49cfcbdd5d4432196abf034d82493785, 503497540488680de0b900056fbadf17, ff3f016cdf76ce2797e8c307f1c43387, 9a5a0f1f8d1d8e33a8612ce82c4896f7, bd28cd19bb47cd57350e08c3a388fc6d, 67658879832029d264f436148ea3f615, 3b86be31c4a86ab7d624b1dca2a53f83, b6963f7cc61889b374676d6527273d09, 7a969d5904c1b611c17fa06f915243c0, b78d11e08a6ec812cd51997d68c0d710, 7217e0812ca8de003182bd98ffab65a8, 675c0e661cf71f22efa0169ccd330143, bf10aa41a9603743fdde7938112a185b, 6a8b30a04589f763bf58be69acfc8bd0, 2dcb916017b4901226b14127c5079c53, 51ab12cd5505b0665bc93e4218e09b9c, 84e466072d016ef5aeff38d85c697551, 33f6186f70283c4e1758454c3db456ff, 570c593107efc81de8b1363a81c571b1, a086c0699d0c19e8938b09c9f36de65d, 870deb63086ac1c90d44abb981987423, ee2cca44ae2a8998fcdaeb38fbc3df4f, 27ac89368193a83a8b689d5efb5dd9db, 29b555974ce003bc71a4c21f073c6d6b, 9c450bb027a18461d746a385845d1910, b712f11f9db3d7ba6a0dfe705e9ea25a, 425ce1810d93d010bd351b84c662014c, 673f0ecad28aa7a79f6797ff36422b57, 61e7aa897613e1870ed5e3feff3230e1, 3cd718ce9e566079c867ba176d7a8b46, c301b6e88736236fdb6663465d471aef, 59ad652f660e6ae0f001925fb62f0bf4, 518860a86dc160e2ee5385166cb013e2, 82bf6b7df946c46010b6236849785e59, dea3cc93e2b72e0d38347253ebe6e0e9, 2810ec4f4137172b25eac01a430563af, e341c3bad6255fa7deedb5fdf6f4cce5, 5753b62eb12603379ccf31c765a0fa71, ac8d769f2af84228ea23882d94b866da, 2b8c335a672b7a9a45c17310a061eaae, 3fc5d0aeaae3ac25a219abc9f6dbc115, 6b8d5d463a2174946f61d67c18a9a388, 6bc90d148b3b645395d1f2d1dcfb57f3, 05bc51c4b932e88fa690a6d3c5b160bf, 648e7f37a09a9af1efff2b8e89e077ba, 6bb174447d3216b1f91f5823ee296a79, 5e601881b4cc804c9835481745319154, 1e1f9a639f478be56bbf0538c5430335, 02aff555238c07cf76bf53656a38b620, 5d26f0fded3f75b9566103eb3fc34fd4, f44852513b9e3ac81ebb15a57e444449, d08e5fbb073cc5c5692a072c0354ba2c, ca44ab65d0900979130f9f5b71e92d7a, 6830d6af1d8b683f3a4b2d747ab032a9, 54cdec8b79835067d549b4263bcc8fe5, b99bb37af7e710a6d902ec4942919f29, 9b6ffad0235ac010f38c24c352f30adc, 4a689ceb32faafb94b7c28bc194f2b88, f3c73227fb2ef465f2d163d51bb0150b, bf20ee9822e82021a2a0d73b7ce43bfc, 567f3a2bc0dc47b46393e42c97c03406, ae2bfe2914ddf29f70d1b8eedea29951, f28122edecddc83170bcfd0ad17e99b3, 298ce5e8482088b97c033c1e86e346dd, 53c776e2e3e07ea7ae37ddd2363300ea, df5e9e4313dd008a9e397c4f25eee5b5, 087c5ff407ca98fce19c6c22e33c9da2, 8d27654e6d4e77f27ae4677dfd5cfb02, 5057a8ebadd53ec140b8d2995a43dbdd, a55f22afc8fcebeaebc35bfaf7081b5d, f3cd842af5221d5b15ca1fc66a2c3837, 3a57ca55d0bf52a07008b77bc52ad18a, da5916b5ab95a0bca884ae72b3b41836, 1c185d2eec17fb584145370f4f270eb4, 74e45d200b6003dd607f8d16c50586a6, d65a96163efbc1228530095c6e2fea5d, f2515df138f532f4028cf1263497d0dd, 3765f1eccfe1dea0f968da320503e3ab, 1955e670da618d5831010c7ae1db64b1, 485a95b10a95e8fba87dcdaf20552e04, db3e026c77e4fbd9f5616d305759023e, 5231279871df90eb10bc75d9ddd1b0b2, 0a2d67f6259534bbac06ba8fe3300d86, 282e40c8fda4ac7fdf777228258d3bbe, 9279ee3f5e952d40ef2186f27de4e022, e2cc418fe457b166d6785f5b474492e8, 3091e8e52d448404c9b4192d577516b1, 3a91f84d452df1efaa0ee77db75f654e, c2808626a20079ad8154ccaf80813d94, a927cbb502611c769d109465f9642644, 9d2ef82797b12ebbeebbf008f9524f50, e92c0e50930c19dcd9d395d5d4412543, 7c95e6364fc876859410e200a0a76060, ff8a29f9013f304ed87520ba5e67efb3, 9eb251e4ff0e69295708c3ed20306a04, c5ded797f757e0299ad0f6ac9cd06beb, cf5766fd7e0512aca8595711527313ad, 88250f2e4e2bd85d8f4aa09cfbf54685, ba60f0f2841f35c64a9f5cc7182a48f4, 3d7ba2a9b2dbe35fa9b8ed3d9127a1c1, 3395b2a310d376eda464bdd96ec426eb, 5020953537ffd8f4d2cad5e0243d5849, f82b850b58cbe309fb52c0477002b8a1, 558119aba15711a39991a22263d558f0, a605ae86e49449bea0417be50825d2b0, 880f431a01ca313219207e9fcc052f16, 40d436e02953170d7ada9b08a58a00bb, c14c74a59a514db46efb5dd5579538e9, d6aadcc2eec8f450fe1bd270ee26e1ca, f47e5a4ab38d29c30aa10d0d8a597a41, 9c13dd15e8f88c2f7a9c76fcb265b61f, c36c6436f1adc301b8fddc4eb1afd420, ff9038f423e75576e419d32a7769bda6, 35307c22ea6b9f82a0832fe5858ef1f9, c8800cb51a4bded5f2e38b152ce02f9a, e816e8d81b71862149fab646ff91e37a, 80f4fca5bcdc790d0340c10951441abc, 1152acbd189e34becc839aefd29e95ae, 885c9d84357026fecdf138f84049e0e9, 9d7d100c28e75649aa693c74c304971a, f80804dc43cc12ca111eb9d917fc6f2f, 1c14786e267161b34d58fcaa98e68b1d, 500c893a640d0c2c7899162af342b25c, 1ac347c06da87c0537f37607c31a2424, 2b4778b75eacc784c6bb1b79a98fe340, 1763933b337371984d13b740a55c0ea1, e2cc2000de5cc3fa57efc36ae5ad83ec, ac08121eef9051ca28ad9f925243ad43, 258f63bf1885a4880cf75d6411be9e2a, e40cd02d7edf9dca2c57a8e74e7b2f40, 0ae6cdb8b18824e941f8c04badca46dc, fc6cf1d2704efdbd121417640b086ec7, 3bf71f95a58689e817faf6df0c11d7a3, 03fe473f82049f2b4727d786ca725da2, b96eb5d9fa67663e7d8e64310bf1f8d3, ac05ef3fa8440b1a30c90abe87b50de5, 4ffecf337ae0bd7d8c46bbc082653b3c, b976fec4456b61236eeaf4d517f95941, 704d164aab0ebfd0e258f6c170ca3637, b2868498d83b08908c7d4aac3f55d5db, d0890b8a3941b73d64035438901e9ca3, 12c4f67e01ab062231ba22c2e75d50af, 88d6c96742b7ef6e5fa1934f7bae81f7, 95c3a8b34d20e5fc816d7363afbe68cd, 378d0b4bd86de7fdc4282be481f59693, 3728d3d7191e92b0ef430f483909ac1f, 4d2fd60b54acb1dc64f351fc2f6a5109, 1e76f832adb07dba158bbcb13ca2a9f0, 8b72e8464842ff7969f74be5d8219000, 26667e8cb868b2d84e7b800e48b15d09, f88f31587123efb048525e8fcd30919b, 70a25b39df87777fbe25989f7dca8637, a4b9f0e1872fa17b607eca2b278b2d2b, d47b82433210f8bd39e00700d34ac95b, cacaf57c4f0ce2153cd4d3a0092075cb, 656bb019d839e6b49d1af72d2fbb9558, c5cffabc3a59413ed59ac7836211cbf6, 9c10f5dba5e0165bdc9246caa5236149, 0b2131de56a1991da221bf686ac47592, 6ccb7e8a4ec68f5f107f81be67f79386, c604c05d036914c98a2dbb951a46c202, 9ef22311252cda0c1912ae2f5f801e9a, 37eedeba5f9c2052b0fba3d5a7af72ad, de4fd604fd4cdf46bb96b6d9316021ea, 2be2c1903ab00d2de8cffb10b3da403b, 35597aabe21c5e2ae7203e6bfc342b0f, 68ee494c9be3018df8fb23454d5fc6e6, a3a06b5fcda729bcdca8a969e213aa62, ffe4f304e4aceb2f0fe06d369a3172e0, 10a43cd5e73e577690608786efad922c, 87e74a5c20b606f3359747f15f89dbbf, 75c2b3daa29003df63d237b21549dc22, c63a3bd1ff98b7ec1094d9aa0eeba806, 8f4bdd3cd8a4a83e6b141354f62b6ae3, e165a8be9d14418482bf6651ddf998f8, b6b0f38904858d4f5a354a4db8ad7aff, 7bb31c3e741fbde701eae146a88b157e, 05c92cf021549b980cfebd766a4c6858, bcd0a2bce65fc1d4261ce2a22df8a18d, c2ec76e35fce442dee3e4caf24560605, 3837d272498f1514b702384b5abd9786, d0e6886b4d2cc2876be1ab1533104974, 3b29ee1215c7168713423c8e548ed5e9, 1afe06ff6da8acd5e6876247d7e31596, f6083275742d6e5ffbaef5d6c633f258, 1d801e5ec1d6f0d720a5d82adf18dd28, 80d77807aa05dcf52c604f9da2a3c501, c8837c6b905c300c2b57ae001345a9e1, 60ffc942ec28977ba3cf3d4c2ae81e5a, ca847e740e1dfad932538cd38bdc32cc, 6628920d3bc6a42e5c2a29ceadc8b0d6, 8d4e531684fa53f9756e4214b70edd14, b52090d478094f4806097d90fbf4e311, cd5ab7b5081ba24b31a93e4a37277d5d, 541fe77d64ecb6e6582ea34ecec810b9, 8b35b4c34706f56cbef679eee5298a26, 03acb50b17952611ee952b86439349c8, 04e9b07f8ac05a362b89ad31953cf201, 6f7d5f1b60249fba3530d6759d1cd04b, bf073c138f2686bd1cf967f009499b11, 76bf66ab9081445f91c0ef2ee478b984, 0bcc59b316201a3744fe6bfee32ce101, ba8501461bbe5d2c4eac55a0ae1b48ab, 8960f1bdb9aa7b15a715bc2f98e5cf61, 5496892b28dc753479fad39948c4d2b6, d9de13af86e475f12998d4307124779b, 6abb281459a9492a34308cbe1738172c, c14f95fc6357163c6ee119af4d1791a7, 6802586eaaad7b3dffa68f7dc38fb859, 9c8181ef0ae19a201e10a4c4159cae3d, b45c35ca92d3944bdb143e804a794619, 07dc19d1515848dbb5a3f5f1fb7af769, 8baed6a0d5b2ee3af48b2f18073c6777, 9aed342845bc188eea268f868af327df, c811df3a8549a2bf3f09fd300bd44b9a, 8fa5bd8bdf6112f4393ad1ac5fc94bf0, f644fd927596af0914223aadfacc7530, fa63b8074db9113cea34709cd9bf1475, 941cdc04e8661f733970e51adb7089cc, 5d5a27e8689d18c957f8490e3277a608, a2a9a7d20a42dc2e7d284dae920c5c98, dd9bca102a7ea62478f844e387d82047, 61a25df29bef18acbb62f5ae787fc05a, 4cde6ea082709b55b7a8dbee6adbfa3a, 56b1d962124fe2fa60d6ad0bbc09ed27, 759c3e5d41d0f30b8dd41c5f3ff3713e, 036491f03a947904947c7a08bbeb5e73, 3da89f67b5543d78c731e3227d95e5b8, 48a082f8c720e1df59f04abb3f982019, 3b303e1e8495a65605e1d518851b7eb9, ef23ecb24e446081c0c3119462c2b845, fc983de22e1bfcdce04adfa0fda068b9, 5b446339098984ee5e55933f7544db31, d69ba4c7bebde081947c4e88747671ff, 7a3af84a6c53d5fe43695df90459ef91, 951f9187ee2fff921e9d19ddfd97e0ff, 417846c0d9dd529eb3af45a8462b296d, 04837640b232d9701b7acd87f1832348, d4746cfd9c84df946ebdcb33dd8f1f4b, c71b832610884ee6b06059f6049f099b, f0b34a4e380376a1bcbb8b083bb712e7, 8bd5e7ed5b53c2e91ce3e5b724fa2c7b, df3fd0fae64aee78134a4a9281256603, 2cbf73c80fed2d088d9c265e3f26e39a, 06968c1715dc0b40fec559da7276bf80, 86f057542489ddf59fc3b4844a1b32d9, 4e6c853a98ffe3ee20a124f8cef5bf06, 7d42f29a5758086be16227e41b068156, 18ba4861ffcfab7f1ae8695f5094dd98, 30d8ade7996edb851b334d94a0c8f616, f7ff5a49cb8a2ba01c9d18772e4cd71d, dfa53a741ec18a4014feb335a8cdc710, e84de33be188e666e32b1c5d4057dce1, a0e86a2393e19f18a5aa31302f88d48a, 173dcf62145106aa31e3d76de005bd52, aca25a1c9d4f59af6f06b9b3deb5d846, fbb12c13834b4045f76a244d0b8fb260, 76b36fabe76f1c62c695d99f7c9fe433, 12d5fb1d940a62fe56db9017ea74ad52, 4cf707bf92ffcaa7bbda32da2dc34831, cc4ebd1ff58c8fdb4fd3e78272d7c2a2, 992e636358f5559cf8dcf8b8948fa5ad, fbdb2e679f469ef3a490bdab6c9f8757, a42b514bf359fbc2f191cc36dc51ec73, 5c9cbc8d9a049cc545a7b2565fb559f0, 0531b3ccce4fc10fccc9db1940d4cda9, 2e1a414d38f330df01cbc80a778cde48, 065f4f03cbca323c720dbe2f26f70093, b4e668db26e87766a20d79d942f7f5a0, 928783637022a7f90409a51a63c52543, 13ced178f8014b7cf6243c42d89a5f79, 6e2a11bbe695e917ae444f8d74f64e2c, 935f0060173bcd423a1983fe80cacfc1, 51c414bd35b2a9c543d5ce4c4701c071, 5ea93a9c7568c96f305668d0f00168ce, 5c924f58e2a3e14acca72f6791568534, 1adf757882941e4b27c58deec325c8e5, 05070f7cc9bb41c50326fa2a3053a174, d3c5b0e00382f4cbee1e76b1a0d00b70, 09fe084e6f855c1bf68eb728339d45f8, 12ddabd74ba7596c7cde26c8e77cbbe2, 8ca197c6c1322f0c6646ccf7dce5c430, 16a652f5aea92de12f793d1916661fdb, e396fa97d3f588e76dc4f1cde9e5c27c, b139efd7fe88bc888ca586fa81eedebd, 76bf474a8b8f5daf1db709282db5894d, 9fd8d092c81ef7250329b67396c8c7ac, 0dd1b8ddfeed182ad046c6f1df9bce8e, 9278e802ea134dae400a8f3492c79cd1, 72e0d910dcb91dfa8be5de46a54c576d, 7ef21115541f5b2676978f9cf870398d, a4380fd750b4f30e481062f0491e4969, 0801c4e1fa0dfe157b4f3f0fa0d95545, 41cba0163927de79ef916e49f81db1e6, a1eb0a4b11e97494bfec7ed65f40e348, f2b359905f3b7f28c681ef92bb075b5e, 5e74165d102487ed858edd5278b6edbf, 3be37616ee05f2e29cf4629d597b2189, 244194b5d750f9856f46106a0438b854, ea77c36a61c1c5618325a61c8bbecede, f322087dc74095f53c52976847e4dd2a, ca9cb8377274559eabf5416b50f81721, f7264819ea1ec5ee5f912c379eec19ac, edf210fbe2e2840dc7f7a49ae3c39468, 4c8ac564e74a8a40ea492360e7ccb52d, 36044ced3369f2f355ce007cfe27578f, 0136dc9ccd425ca361fd21cb3ad2b98e, d9d6e4d0ba9846ac5fcbec29736e29d8, 1fec36d98ad29fc8a1969cfd8a4cb6c0, eb2a83b1008e8f6c1a5dd0345720bf4e, 40521dcd28fc6774e7f803eba4c3b140, 416c757d7cb8b2b1a3a595e917deed66, 3735b1d445b08bdb5e2d08e1192345f9, 20cccde8c67a05f20e36a4f4d3172f82, bda41469cf36061223791ff7f86b099a, 4621cc5e2f687bd76ee0a1709dc8f01b, d3d3faa0eaa92364e9e8f6e71e3e7bcb, b75603515f5840627ee3ad646d660bdb, 11635896c38a5931e972d400dcbed4f8, 7a635d503c49cb2e5200be30898a3f98, 8e35ffa205ea0ba33edb8eaead1dbeb0, 1b35d5000784b98f7f092dd751bf77d0, 49899aaaf3a3379810a3415ae82db2c1, 7f2eb6aef95b9d474ac9cd5f01c31a4a, bb385a78fe60f9f9d283517a4eadbec0, dde39e2ec674d813823951976f290d7b, 4af7518c6c53a2108d2ef26ff8fda530, 8db358f1e8cecb0350e49d4e6e3a27fa, 65dfe8ef7cf82588d63b7bb5f7e2a99e, 1af209fb933e344afd137067f18eae42, 54c8ca86dbfae128acd0342506c65838, 6526703ae88a5682f34d681d9344f86d, 71b0fccb44b719275c7082369a944fa4, 04524b08b39502cde289e0baadc617a5, 1dc03a8528d6da5ac406f0de6d561b24, 7eafc359bc7971ff3c73c0bbc66c7c6c, 0ccc47818f82db1018cffc900f7a20c2, 44aa5731d38cac3edafcf9f783972c0a, e7b7bae0b351d1f4b73f238ea9ff5fc8, 6e3b21119708eb73dbc4cce2576dd32e, 607008b9e77f31e00e085684f3b4fb17, 11977b7cfc7e8cc5dc1e6277cace40c3, 700c60bb02458e0243053e263719f45e, d70f7241556b3067f705d82c88ea5b44, 173f4c73bb6852e5c138e0685bdb8c6c, 377d94f5a0e0a81719a16746cd239dd3, 57cda402d9103f86f11198aba9b3d18f, 61f774b7afb54ab652a3fb2ffabb194a, 1b50705aae1f3db9bf36c11a62addbb8, bd4ecc86a75d4e56fea55d78b555b02b, 5babea724c6b89b9fa36613e7b375df9, 2bb3bd454583b6e54042e86795deb841, 5c85eab128df599658470f895467c06a, de3ecc2871f31b29b235446aa2957462, f1dee854027e910fdb1524edcd55aff5, c232701cd6bcb084bb34e1b1f5a31c8d, 9246ee652b24db331b099c35da7061e4, c530cb3742e7fcc1fc0dadc3d7185487, c65f6e8d88c0576e625b88e10a023421, 87959a14d7b4c3badce218d9b2c89252, d3420403814684348a3c4d31e228e532, 0cc91716e8e650827ef8549226e3579c, 1d904231efb4aeb2e249634f47a07966, e92b8c1fc1195dec146ddf8fdfd8e6b0, f28ab00d8a11df903e155b1d695b5968, bc7a24c8dac16809ba8c2591cecf15c7, 3f1d84be4d460596f07636f07ce7f9c5, 3682c428516bbfc8da0a080115ed5686, 17d8528394421c07699d8a5a416b5ba1, 780e74d5c09dc981cb4c263265c6bf9c, 056db930d074a8efacad2386dc43df96, 3972f823685c28928494da053f5a224b, 4144ba0768d3be293373f9506bb607e9, 32499eaa5a3ded0390261aa49b973856, 144903c4d9dd0e205e4b7d6c2e249401, 61f4c08a97b9d0842132da24cea1526d, e87c698e141aaeac109914986611d95f, 1896464bd8a99df02c0f1480d5e1d52c, 871e1eba96c7f7a44d84b2b090fc66c5, afaaca08704bfe705fad0a92a56b5daf, bd353b28bc393494c43966319bed0f79, 30af8b501eafa30b8ad511447fc641a5, 5b774f2e4d6398d13b1ecfc477a77f34, 4a216717991a8fde38e2016adb4f0abe, c38acfba0d7517520077e318911b24f8, b8f143835f37081dae59f89a2ad8e018, 92336ed6735dc92cbcf90db78cb9afb0, ef0b9b99ecfcd0c2d69904db4957d8f4, 102f524f6e98a6007edb295b82819b76, d6a14e0028210a44150a02e66ff4be5f, 6d414dd2787e73035eab19550968bb40, 685b8bbb234f731e1c763fee6a94fb1d, 847e5dd9fdd490faf009ee53f5b904ff, 77cd7dda4dc35434cbe1485de46807e1, 6b1f0bb250bf9bb6ab7bef4bdd996c8f, a3b123c6901ba8fb91c97ab28d9f0b49, 5365a659701c194e8af6f1ff9229cc36, bf8525b2711ece579cdf7cbc752ee9f7, 7a171fb9a0ccedd649b6553fddb15031, 7a0106377b7115ae73b720d3bfb88224, 832a6ef7e4dfb92c36ab4ee5b71d5eb1, b0561055227291dd9dd1da6ce6d494ec, d9ca113d9554bdc7ca7057ecae43fa4a, d167b59798ff6cb929a3d80ef68a17e5, 2c3939daa4c3b34a0964d8d8ac3f6113, c02bd61b38dd6d5fd5db26d135b1577d, 3f19f92a9e432e132270821cd0f50ee6, dbc4694d3be14025d76b0831fa4b9d44, f7a5d80c09d9361038021e5609db4f5e, be3b87d15cf441d2c0f26b21726aee6a, 69fd096e36dc1bf197bb0c69cd107b57, b88364ee6ed91c1162626ddc1faab54a, e45db1c64cfd376ca4e18b412fed6e6f, f85b1424134e535bdcb29efe0e527d00, 0d47b92d05eb2fdf8dc01107a71f17a9, 18a1d0b5abf74ef7cdfeea62f7cea7d0, 1ac8e3ac20b354288fe4cb7801690d72, 43bbaadbe7361ea1f1a106d90c754557, 01ec6cde9db609f7356c33c2e06849f7, 1e45086f6fd582027aedf90687499bce, 952cc66a140bc8981cb5815a5700b062, 5dd7a71ed15e608c8c7389ca7bd9d155, 56699ee3be685456c6d0cccf55438fca, c88455f30d5ea264140acdfe2d203b21, e296bdd0f420bfabc3d67aa32875af78, c97172f2ac66e87bdf70e253367cc933, 8b85bb422ef84ae29eccd7a6b82c5cf1, b831829add1a63e3661278721e507d08, f7c6ac0e933fb5c5dc7e393ea0b07a0b, 9fe051a8c4b221d9b699c7d67fec08c6, 950274f6e3c271bfd1c5bcfbd76aa23f, 75c54040a7c3713b84d174d46e9862ae, fa822177bcfe488baadacc97b76b96ca, f723299fe6c266e021b4141f73864c2c, 90046b6500bb35c1175f2a65dec97fa6, 98c775d8ef10bc3b22cc1ec88bea2b5b, 61f6effb3f48c8522ad7df16ce9ea098, 60de28d580e3b2b83a0d4fbbd11d789f, 22aa7007abf50a743d65b94140761dbb, 7c68b318e875b6389e90ff1a21ed5ad9, 74d131a8bb8ac73b3fad67686afc89f8, 1ed04e151e6ba2fa86db816d33ce45c8, 18e1a2ffd4b1d973d465d3360b4f930f, 203304015a729ab0867a897b96ca404d, 78f8ce50f5633284d64ec73fb47b714e, 07a366422fb3f6896ce6f06b3506a601, 8bf1ca79226b71d3716a50470cdc0808, 699cb048a73b5331d3c221e1e384df00, 1a30911e16b3b03b4c43fac905c05ff3, e25fc5b9c0f87dd27b54804edb7b0fd5, cb2bc55c50e5e9b49829f40f4912a4b4, 3820294deb8cb1941bfa26106691805f, 29d681a45f564dcbd95d5e6e34072c94, 14131967402d16fc505ea6d468e012a9, 1d302259ea3c5f944317d6fcfb0a9630, 7d29fad6465e640ec478449c8b3f5a28, 4891196a848662827220fb70717da1a1, 59f693276ead3f03c4f70259cc0f520a, e68a84f197a37a0c15d861364159e808, ae512f6760f60ae245aacc83def19213, b2b17fc775002e60b8c3747943c26f71, a9bea07d144c0268b688fc8f5d268e52, c90f16d2f0ad08d733d856a5c4b6bd3e, db32f07d342ca0d4f5c939dce413444e, 6ff0e0d1164529fd2eda8c5d60a5e21c, 81d2e91d178c84102b67331cf1bca2ee, f925d09dddbb9b1677e69b9c432f55af, cfd3fc37901eaf2ba9346ef1ab430029, 2cba2f66e461bf0ec581980e1c3119f9, 909870ca082abea2bced2e9d0592b684, 2cd0b4d2a0c3d94b5899e6bdd5ecedb7, 08e38c257b415094264f114c2bbfafe5, 34493e9ad52b14715927725d31f6279f, 66c0108550d2618da8196eb2fad2c6fb, 55bb18744710384eb1c3343bafec7633, 0fe382071ab7ded3d55333aed016c53c, f536a5d98a1096c266390ca9c23af7e5, 57939de45fa027d382549809375bcd26, 670290d331cd3f92a25ad8025e370e0a, a14aa5c896666574fdb94d12828daba6, 9aa693fe2946d88f94213a9d8b0eeb75, 4b0d190354ff9a07bc8cbbc83a7ac41c, f3b05954ec977c528349918c515c7bb3, 22885e4156a16779478154780a634c2c, b7dfbf9985201de1aa242652af6c7c11, e4d16b921faf26272d4f524ec6720fc2, 04af02ccc4e14d9ae4657eec135dbb28, 4ab8b4d65285285c28df46468cc117cf, fdbffb03db7306be728f7a9430e79dff, a01a3ffd1012d2af65ee308cd3f67ca4, 994d711f78470168d47c26ba27bc85e5, db855aa7f16f808774e549be6c6f31b5, 5fbeba980b506a2651062df4a22b2990, ca4bcd80009fe3b763f0ac158e649767, 6567f74c29d299171ee2cab9ff1d2cf4, b3ef04ebc1b96014f25cae07f9025aa3, 593194363cb63013e7ccfc55bb8cb1f1, cdc5d4ba69f88073811c5fc8b7567b63, 01be68f487fd300e577485e498d507c2, 763e128805ca2a19401f7bd95e068d33, 9325ae1ded45d5ed7bb8feeae699698d, 23edd31c932b328e3da8ce470d086b78, ccd92f8b3abff25ed5b7b32f62c01084, 6ee2305496a6ff045dee6ffda30ba1a0, e90e35b72821017cab74eb75f827576a, a51b4e7ba4aa64a4e300e31a93a9daa2, 70649c6b069b827335cea412dee7aa6a, 0e80ddaf49a7e227c3b0cbca5489396c, 5f3340ed722391576d99377e1da05784, 10c153161dcca05d43e7b4bb889fa3f2, 086687ffc53e64aaf0cf74d87d11e084, c1ea8facf208d67349b54bf700389824, 9ac819f59ffe2d025bce2fefeb746415, cb3311078836cdbd58f429fa6661a8c9, ee811e648f8970c99ed9a706eae74195, 75ed4c312379f288c8fe6146a613829c, 1f13fd9e9b476aa674e5934255ac87dd, 6553204c59d02ad45325c368dc0a6eda, 8b476a159c7983615c78ce3354015102, 1c61b4253069b93e86b4eddd661b095a, a45f83d2744a2d571a5e36c72e5a7653, 2310cfc159e4915c9c883e2bde9c7125, 9acce6665451dcbc8093b6068f56caa5, 4fde8b6faff654344abc569e29640550, 766dc39bb89de61da61f79856cabcd98, 22f5fef25ec535863458bafbafdee1b5, 9d304a74b60e52c6a046d3b0bc83a5e8, ee46d32936a44bc2b0d4c36bdfeacb55, a1a52767a71e2fa0f2bf333185a51dfe, 24f7b9de370460833968440fbb4c8fde, 0d8c9a13af34663abf7b093940e421f4, 354d66f0bf2f31d4f6f64b8f51016fa8, b62cc150045167ae30349e3cbefbb05a, ed4261b3007fdd54516e561340206b96, 623091124b7ff0740442b8fa471e57e8, d84078e14125150c5776722362fa5b3d, 37056bdcb9087851b24b903ec4a8b479, ea8bd6466738f3d3cdc7b025654bdd68, 45d6fb4e84e25805a87420944a38b835, ca8ef7d9bacf1bdd4f00fbe415250037, 56235f75fe73acb83386902cdbf7ac2c, 2e4612f89b1bebc7cc3b33c25057e91e, d303805e524d9ea92659d46bf60e630b, cb52de823e378e471f561629d43b0dcb, 3f5655ae16a097bb48350b777d262792, dcb9298d30a0afc6d1f7da94778b2177, 45f892ab46650a40cdcce9d15684cb66, 7ef43f6506ebd904c7f74f6cbd07b17a, 83a0d69e251d4130c806e75238887911, 0a9c58b9b984af5f720f70bd4d6fe386, 9c4e2404390d95ebaa2a0efd5de0194e, 40e3a03a5a9070bda972ddee32b32812, e4c76b8545034f69a45fd46bc89861d2, a42fbefca7382085e8dc611ae33ff75b, f961b76c4494fc085019282cf0c6e97a, d7a0cbb550afff3b5f39969ca63a5449, a9f3e19e2d32a17599659b3bd218b6b6, 755479f1fe048ecc0d8823e4d97edaef, 74b96e736080299178e55eebeb59a812, 82dfc51cc48d018488fe39b86454884b, 034be22b25b983686b91bbdcf1573010, c24f6c264832609b80154b83992bbd54, c5ff6ab3bed6f81e89cac5dd2833d3dd, 2c9cc0f391b5c5378f312d54d94f3a05, 57de18135a2a5d2e6f8de7fa71d04a65, e2d4422d532a29b6368268655990c65d, f94de0a1b5b2295d095765ea6cc3366d, 326dcc54c78a779d64c1ed2922206e16, f045f81b598c8a6fef2b4be7ab909a52, 8f4e9a2670f16e12096ae82f612c8828, 994e909129d9ed9247c6dd40ad503af2, 0751b64d7d0826b82d5e09ab8c5c9772, 8fc3b9d441af1af4a4323ad161ef86cf, de5a0def93dd86a6620495e86ce46c20, ed796158084317edf674af61d2fb0e53, dd0cc7df5dd632cf1df01b625ba5753c, 582832089b6406ce136170d9545b9748, cb2bedf1d3e83afb04a74fed3735a0de, a0a65c8e002f9314ad4a8e1cf44b4537, c199dc9f75698b977b9f79518085f638, 984948f510174daed9c4525c27fd969c, 0b0e49f08ab62e0a88b376fb17eaf75f, 7d03f211d27af36f5f4e3be59704ec67, 4d4c132c35868ba69f98630f0f29b561, 7f5e0961afcb2aae4baada7bf1cf6ad1, 57b50cb0977fd1015ffb365ba266616c, 319a4829ce480bc4d5e2e3146dc6d6b6, 784909d49d3a732506447319294b096e, 733925a42c7bb9735ce212169e2a63e0, f22a41aac9d87fc0fadce2079c85b9dc, a8fdd4d5d417ca4915f4ed667a3202df, 6c0623722a5b98fef55d0680fd31e159, 93ad9db7cb9931a0216d99d5b2dfa8b9, c766dfba40ef12f9bed3a68dfd6b6f40, c0b7852ffcfb827adbf9974a1b2761d2, 748a48ba836674e7d6340f737ff797dc, 376f195776c40e1fda93b995c2f83c4e, fc1aac3c39239e56165ea2ce4626bf9b, 329a855dd49d187cdbd1389242370675, f7e4515ff4f09c2c5b05d9850eb2476f, 7e86f3f0fbe3d1cd3e73ac61c5df062e, bc63d7fa91b3c1719f60fde84cddccac, 99c55e583274eaf46e025685d1a240b4, b28f99b65724de7983af0d1bea1170b6, 6a9c7fe4e316e3030c6499c59d0d50da, efb2ce0aaee9d70e7253a57570e059b1, d5214510621e58cc4ef5d162a6fbbb27, f2fc434031b8873f38a12a7aba33cc8b, 7760fb01295ce0d2546cb64aba916cf2, e05c5e30b33848dc8b0d31f41f26018e, 3123f35dda6b61b06d132eea7b0dde18, 62ce71dc7c83ece211a416efec11fb87, c2db90d407874f0187738917fe304a88, a77309f08af588cd12e4479f5840fbc8, d9c191bd3f38222a4e423ff57d9cd75b, 0fbea863ee6bab59c0396d638ae75e1a, 877136a80bbcb00c311138b35854f0b1, ce6a615e69340aa873304bb3e52eaf1e, 01afc72d08d6c63e5292694ba29422e0, f1ce62e850efecd18d79591257d7f3da, adcc58a1c44c8fdf27d5313943c69434, f77d37ca8d06b91000adf56ec7c8571f, a4dca9a29e5a121bd775b1c2a278d9e0, 9936668d7bd74fe4e08bf50d319c0e90, 46da77d57e06d4cfddebce4762fd0ac5, d1c0d07f324933d6d2d199ab4c6ae3e0, 87e46499986d40b79256be9a1af6f138, 59b2288247fac1d987cf885fd272b7df, a6dea51810f0fba3ff3562518e632dba, 9a0d6d3977a1246c07ed21a31524ca89, feaa98267cdb15993c8dc2985479320e, 3172427beaa545a75fb594d8e69e9a7a, 4c08ccf8c87f1cca33cec5a73014fac3, 54dc3f969560fc1e256a5558f4078679, 008c438bd9321eea6373d98c29330f93, 78f6cceb3a64eb4d845cad82542e7319, 997ed6eb92e0d661508225f30119bce3, 3cc370a8fe413844e72ac67fe9b09837, 658622b7b69f8b6511e915497835d9db, 7e2197474a1adf30e32cda62c4db0a00, 2dd5b4e9196ed5d0d55cebc696ebb8d6, d5a2382f5fc75863fe3c3e0c9c950375, bc1aaba87c751be89ae8bae514f4941e, 3ad2428595b3ae9e52b514701dbff3d5, 57ad894510d7d015023a573070ed80d8, 23830c50819261ace17c9a8753f5e397, 6cee05486c3fd5aa9bf0fd259094c589, d59b6ec9036e559e872bb7bbacd14778, 01abfbd6ef66ce084e9f2b6a56bd0fcd, 2cfb4b2e073b51dd53003de3d38a67e7, 0df27a359618b945f62966b5555ef3ec, fdc0bcd7bf94163d615382033f01ed65, fd11d6d6a3f479c13c754af78d2beb03, 0f7089d079d0eeabb4b049faaeaba289, 0a2615bd879f1efae686b2bd4cb55273, f198a06a8ab0ac61ece9381ca4fac53d, fd51798edf6e5864a56532ebf737e4c0, 846df38843562e75281512c7870fb8bc, 21a117929c63e1ac0a2a264f6242bfe6, 5cfb8c13bf13bffb4ab16bc6a72cec51, 207be57284ee7dc3e68252126f099467, 7078f85c822f9b7599833c35fd7c90dd, ca5200991ea7f144512bbdf770f14114, 1cb22cfef46524dcbd96bf7e321ef8fc, 945b496e059066c326d010a80af6ef34, a58e43f961bd68f51db6e948cb2a53b9, 359734012fcd283d7113bd827f59fc95, c63a74af56688a8da0655eac302c098f, 7b44ad9c8709d345be5c02643129db70, 8880902d1b3f792989e4966b0eb6a561, bbd6bc60f9f0109333201579c323881e, a0abeb3d2a6f16d176b6f542363cae9b, 37c7642c1716936e3f2b380421540a2f, cb4073ae513e0354b52356b033b53e5a, 87eaa54d3007a00622bc15065720f40a, b77500d14b5807009d1a4705bf331802, 5f70b33ab2e3baccadae35c2eefcbae4, e430cfd54c71a4260a4029cec013e866, 5f150740a077a9bfd51a5662209ef56d, b42b1c28e9ded99efa86500e67e94d31, bfe49758237441050604b6e1f1633770, fbddc7f7386f8f334fc833c672bd0ae8, 2f2e25885a5360cd2afac4798ebdd50a, 7a01e7c6ac7d9dae3b4391a90510a3e0, 3053955f9f9377e71477708217eea77a, 7d52b40db0c3b719d61ebe5e15e65ab3, 2bf1bce3e6fe91ea43b3cad0104360c8, a209fd20da4adbdff2c8c82ebe3e9b93, 2882691cc55ba33a1df0dbfefe085366, b5171a4d46d79ef32415131d8389d070, 3365e536a68c75c0e303e5356c0cae51, 8ee84a1842aa6171138495dd39963947, 64e60a4de8e83d0dd93a5836ccbe8c95, 58f941e6aeec1e904f48e8d7bd17321e, 823e307a5e74950e7c69fec58eb39ba8, 2cdda9593b0986c9e118e1de689231f1, 7336ba090997fe6de1e483bd95fb5abb, 6d9bd8631dd0a0390de9e0bbb67b2e26, f0db0774ff70618af4a046ea54c22cf8, 47ace718f08fe04f769ff7b8aae089e2, 1a9f1110c6acb8fa106b58cc5be112ee, d5f7ee34359ff3e308994a22bdd83d03, b5f5ae4c88b31c0a41fdfa756ce512c1, 4ca0c4e2fb806b5f6cc8acaef2cd9697, e46b89e5432de436f60a054791aa5aba, d98844db1b1eec01c1cee45fb7348826, a3e5f79c19cf1cb8c4bf953f2c9f01f6, bc8233e19213fe08f8b120b6c0cbd4cf, 68d4b90b6c35b085c1ad3426a45757cb, b74c19f8fa626835e099933eaa913c0c, 3677d643b522e6e265f6acc4a3ea6e48, f80e7a08a41316abebcb3aee01ff44e3, 30a19ea97c57a582e08725a4519ef26b, c7b532ee181bd4b0532ae30d00677286, 4093a9dee7c92d24bc9d7d2af66b8be8, 6026e9319f234cde33e3f11ea228e255, 2701efc7cc5a5baf89d55329fcf3787e, 6d188f37ed7d0967db49e4bf23ac3ceb, 5a18dd14b746bbcb3325bd7a194f93ec, 2274252f760cc5bce8efe2ec4e293912, d098264609aab0007b90edf56d79be77, 8e66711ab98d6a29b110249e10ad9359, 0f739e3a19afdc29c9bb4b6c747ef1bc, 44dcca607b47197907e7d831db2774e1, 123711404f071c522c3fc0f08640974c, acc8ca65c98ce6853a716e4770d1f1b9, fbb3f246efc36bbefcb8183e770f44e2, 151f82031ffaf36dba52ab6fb6100863, a7bd1987fd336b3110d931d4e336868f, 2221dd952922b9c6cdd3b38d93afaa1c, 9c75dbdf2121caab901ee58b796141a9, 7e4c71f136cb602ab9cc77870567c10a, 12c5cd3f1b7e4283ee975447c77c2783, 8c4e7a5e2f75b3f1b42887e576d34c9d, 8f5fc4fb836ff68e37032e7f3f30ac6d, c15e2aee75407327f3f5defcacbac740, 032d91034eb90092364961ac3e92da4b, fe8378295cd1b7b717e2c780ff3da015, d82b6c705123f6c645f841b3278e50a9, 0397562bde83adad76094a2d2d07506d, 97cc6d00281873957e808ff2ef5abec8, 3c11467799afc74a2e63024b64165521, 5557a94b78fbb438f2d402f13d0c9676, f3ec9728d4a683ace88575a7b74613ae, a1cc847ebdde4818789e248fa3dab9fe, c16083b9efa8dcd84b4367898a677ac6, 86ef85724b964d5869ddc1840fa2b37d, 77bf0f5df892991b0b61f71b29cbc359, ff3bc482c245ae75f30b13c1ab53d738, 343e891b5358422a2e26921dfd7f3f87, 028aa53f21235a38aa0113bad52d3d0b, a28fc305f1309f6090f92d7e8fefaa25, 5294b4ae2b9a3f18d28ebed959a02da2, b1c0f667bc8f2013fa56d81f8c84ad12, 163e958a2f91639a16a7f275ac3efd57, 4c032454f1483929e738e54e2e612430, 7da86fa3231e61678372ceff3380d656, 0c857fbc048cd8155e97b7e22f792aea, 63f82d61a24c63bfe23bd4bfdf576f84, 6479121132a14ab9153e1746d2f4cb75, f26320595c016e0480ff61c9e017d7ce, 193d5443629626ebb0791c1e805bef6c, bf76240e252641579b58b93d96ff0f37, d396183fab79ba0a91e842be2045b829, ade4fb85d96d7def06646a2fe0c6e171, b2ff326887ba2230849e21dcd367a8b5, c3aeb5ac7fccdf7196dce8b6384a4137, c8c9d74edf2bc71201d6c897df867425, 968354e7867f7c9d352b331c0f6a8e3a, 732436b48a9884c1577352f679313f94, 7d43c73274684ab0da90869370ef01b6, d7d8c2462466035f0d537e2bbd1ec481, b530033e250d4f754369db39b7c11b59, 386d6a59b675822c27a654928125e5ab, 9a0afe0102c51c90de719dde4de251b6, 827a109d91d3f0391dff6e4d2bf3b281, 05ab3274d4324b6fac085083fc4b4460, d0819c16bf76cc7e469e220888cad7b4, 130fdd381c6ab6f180de8b813718c891, d190f9cd2627e0a68710d7247d979f93, 08327bb7e91c28d43e39b4101eae24af, 9e569c49ca708842d716dbc4270e23ff, 7770be56f4ffa06ba3ea2520c3e2e1fb, be30560d4252c97b116609a7d56cbee4, a1d323586e5a946a5fd26e3d647255f7, d0d333955dd8fa8a2dd04dd67357cb9b, df76daa0fe56fb688bbc2f064c2120d9, b27ff399d5b23b5c686265bc97c44866, d1e4fb0147fe7645cd4829eac525bc31, 34c9a637d999db94062f2a96657579de, ad621662c255e29eab38db61c46bc033, f66df0cc9c764737ab9b941a50a49c40, 54544b2c71f1b8d947f7a2092a4a30d1, 4a7ea640234df5255c3d6c9a402b28e0, 5ca22af661d87e98b6b21302d3856632, 4502b0eee43cc55a85053ed6026b890d, e969ff1029b44f270d04f6bb527982a7, 00fc3e0b6380128bafa2b25de2202d27, d9c5580293ca38ecb481b029cac5b391, e20cbb44c354ebc01644710aa4fbebc7, 6e4cb5064fcb484939c9652af3ecb95d, 979b4ce081d3aac8eecfe5b62542932f, c798076e53cf8901a5ee451eb0e3a7a3, 537557282503ed44ba0258575821a5d8, 33a9d2766fb7063cb8f32cde1ab14eb8, 4a6cfcab5e3f95ed065747927f447206, 6a950023d065c66da841cdb499908947, e47192b0d16e8b5096d8d96722478739, 40d308542a61c2bc758f8a6035ad66f6, 4c860b284ff7d222522a7be189d85ef0, 3dee620c5848894c6c4af235b821b0e9, 2b618a776161636a5cfee4f4c26e9fb0, 37ad0ff3f66a3950052d8e50a3154fed, 1a0a15338db48c1d4e606a28701cce27, ee69af32886b9073351e903c13486857, 8485467d50779eccd738db4c548bb560, 648247ec79991477b79cfc1d602bba28, 8f0b4706dac48bef4fb9d8ef84619613, ca248e0c218afe2e21d44573b2725bf9, 6d352fe68c34042610c9ccd107e82667, 43a2b3dc739ada44dc44836bfd34f847, 61d8910f9cde7684fa6b944281880fb3, 715cba9d6543a3dc83d93affe094e4f1, cdad0cbc6487d5de3f1e04f69e219b10, 1887d1fcbb8eae3695572c0bf1ac8922, f833df89f65625b09d8d7c67c504d434, 060fa8f8bb5df7ac4d9aad812e4e43ee, c3e65a178c0756678577fe959e303bdd, aa4337e87f1e4b0e20d9ce8a1c36dccc, 7100baa5895ea56998f25f9bd7b3c88c, 553092cb8fd32c8ce40feb934dc64615, a4bb7d487729b447dd739dec96ed30c0, 18270d8bbf434539836bd088bfdc72c0, 6243e9960cd1d16477c18c76fe420403, af4668c1440af8b13eae34644b68a0db, 6818d0df46a0aff679d3574e8d696e35, 7cc04de6c8107b378d80348070f1d702, bb48b3e5e667218bf4b86dc85f657bf9, b4684b5cd72d4fd958fa91ec59c36d2f, 3261e88bd24f531b27754eb9a5a93709, 180e4ede21e4bec3e927afa140a8b47c, 2df2d43de8996c6d3a30ccc7a13e12a7, c53fdcda5c83c0e24f47e25797089275, 2330162729fa1d3f03007216ed894b4f, 4bb5888555c21b9ba4e888347bc7c5be, 62991e20aa053b27bf67b90e1721a74b, abbe5ca669b9a3533f0ad35ded6f9a31, 9481347389d9470c3e7d4d9c360b2d15, 71750c7afd50e6f0101587bc18e4ded3, 7156ddf98c4d7dc44fcd88244357547e, eb3edfa0469daec0ccd58690320651a0, 00f37cc4850a16b006957d91f738f90b, 62a2c8436398c6c10d094eafc6b2bffd, c26eab4a34d5e43130e736b411963845, 6a5560c08156a0b805f97af6ec7710a9, ff498516a6dd4bf34d72fd681eced830, 6389cde3718b22d4f9cc7b2319ffd6f2, 4f7f64c4242487236f19158326b3dcb8, 4ebda857d3c8206bcc05819b3f883eef, de69f99f1705b95070df5bc1590359ea, c7dcf74bedde296bddef809cc60d439d, cc58d362a5025c6afbb3967b36ee8d5d, b68219038aa4bc6eb3194259da52ddf0, 9b9429fd3084e26256386fe60e33f159, 69135d36af0273eb8fc57cb57a261104, 8c0e5f7b6aad615ce9fb660ab6dbc80e, 27988b4a65b36c2f829683ba42f260a6, 8b8e122f0d495037489cf63b2deb5a41, c1a26634d3d014907370a79f2d2fa7a3, 73c256011ccb216f7eba3daec4916b7b, 5666ba0f69be7920320fbd98ecccacd6, 4985188bfc085c81a3500863f9e39d06, 0334fe5c33c4b804b58015317c5a28a1, 949bea4d1921b47817d8f805c66ffd2a, 1a9c07c4b10cd14041482acb992caa8c, 5281238747d935eec76042623b406cc8, 2d2cf33db7e82b329bbf197a4b0429e9, ba77ee41c506d7616cc8647b4e0bd25a, d76473c37da4fa49aa4df2a5d201c6fe, ed19fd5d481f183656da9de1904ee8ed, a78d3d786b4297ea426ad2296e4869dc, 66f490af5c32867f9b9d60672b174e7c, ca6474dfb1e61aa64caa5df28d02e36e, 9c5f82ea6a7878bb7289fcdf2cd1be12, a0c65e94853acc47457219b095cffbc7, f8fc57692f2a4c6307962422337710a3, 0fb63f7a3a89fce41ae1dc76ed952e5b, 88e77468a9a6b3977036eb96dbfed8cb, 034c2386d0b76292cf63a9dcf539f12e, 4825524445023acf41b5805689ed43c5, 3d9bfca3c38075821bd46ba7abfa02ff, 5821c7fb38ebe0021801e43de9e2a4cc, 1f1cda62781953f3ab38d0a674018298, 69abd7e14358f3878d9337124ece30ee, 9042c96aec3c77b84bcfd0331849bbc2, a0757f553b4df09ca17c8fee11d5253c, fe675ca5bd9682529c87384a63a671e7, be3174844d55415c160e0e616fa49e74, e2cc5341411d5bc118e785d93ebf80e9, 96eefc35b798264e2757124868af5fdc, 13d0f2e5da4e867908e4bbd4035d243c, 8b3debebf0054db89cf61b330bc47fec, c1887e3b7567baee02637f8feca8ef3b, 63be93da335abfd67435ab381bbf6a2f, 42c9f9a3147c6f1c322ea5b7f489b162, 2274904cfaec7b4f7fe30b4014460f71, 5df1f2369d901add6d7b64d66391de27, 7c799c13717e24200ea9800df818ffa1, fadc382752380d5d2e68e0fa681225f0, cdc73cb62e8fcc21cf691195a76be1d9, 998bc2b1e22d5b78cbe234e1e65ecee1, 3508d8e01f6948274375b821c39cb338, a1d90d3311d8425cbb63e902cd007854, 073887ea55da19a2fd9b226fa779ce04, d9514e3d8d2ced41ef235622a37eaad0, 4c052e33f2b4aa155e9c910e49f36658, a114071eb24dcecdb284787b26ea13d2, f0fcb57308455cf5cecbea059d175c03, efea45b686f0d7b67b0167873a6cd50b, 5b83660a2f028d88fce6de52cca726fe, 8df863238b575ab8ab9e93d6b548fe66, 42ff3f6fb20a64bf8ebc3b1891ba33a6, bdce686b04b5226fe344c38f087a3f06, 3fe9c76c07020c753589dbeeaabaa481, a4654eef4c9534537f1b81c783411fe6, b53d68dc8c7df0d8fcd4cf2e727b840e, 53dfaad46bdc435ca1735b61b41f293a, cab1d98f154ecdef58f72649b512cee4, 2c30c68566ff4074cc546384a12827a4, 1af0e0295c1dd486597cea2dd083e689, 8eae40b26474f66aaf480c1337aa16d1, 904fdc87dd059df237a9e6538cba4da4, 9209a2bf681dcdce60bc1432ae511026, 1e005642f9f3a11b38ac0aeecbc2fe50, cdd8f239b34c1c3b37f88de9535f1024, 83b959e1e39975353b8801701b4597ce, 305f523d0dc5706cdd6010e108739982, a3f99f5cb347e3e9b963502814bbe53d, b12a140258830396a23953626a819096, a907fda95c2cec0f460dd4b01102fd57, c1aa0cf0ab0cb0f4580488fbe63c72cd, 9893de7f4e51ff6d37b60990f27267b0, 7f290f54c8daeb43aed4821b7576bd13, 249ea4108c4606974e25ba3660560474, c32f1d4afa195cb148ce9ae6436a39a1, cb5309ea2b9cb1ff07475e0e6aaf09a4, f03a0c99c4049f955a64cbcbbf475c60, 7b753f4c07163a3e2921527c759d2ac0, df9c15043bd72e07ed0daa92bbab9bfb, 3006fc84b0e3ebc7b16418c9e2e18264, e9472ff9b9fc7912da5fe7f3028871e0, af5e81e373d78979e79b87014e8bd02e, 41048f0cb6243516a4d75123635da64c, e15e778e87e6c8a0fecc7bb508bc1a55, 0fc0a23fca9afe4db3e8dd0ce74941f9, 29142fa1d158993aea59d405f30d0dc3, ee633d1e349bc9e658ea2f585a8587ca, 4cfe31027d56bbf8a84038e795b6cd04, 2c21ba5663752358490df45b68de8f8f, 16847c8d41067aaffea90287beb932f6, 8932e9e800ef2c8b4360f119f796c026, 1949f280ed4c0b49147945cafb3bbaf1, 1d23ce0c7890a99d91577cfb9192cd87, b77dc5595551f71905d0aa2a4f17df78, 4a81411ec03d0fed4061d22dc1a02e85, c5d57ce66ca172a2cf92cfcd69cdff3e, 87ee44e9461675f7c31ba20c12667f5c, 081a54b06743404ab075b3a674cabb61, b92f0d032208a31dfd6d931ddfd7fc78, 7aa6eb486f8802087a18b9f8bc648523, 1110d7f92428bd18f3ace016bb99dc1b, c36723faddef6b28d0a7405105cb9e7e, af01f1da04b9baa13760c15a22d65b2c, f6f4b67dc0cc5d2bd95daaef9348aedf, 035b63ca83f95171f0b0aa1e35115efc, 4e8a173f6256627f32a89bbd5813d25b, 55f3d640b0fb2921a5ce4bd7e88ab050, 2d52e868c52f00f3bc54985c5620e5e2, b58628091af607c66779b0cfbe3c9efc, 7a48fbea6d2f62d7754cd24beb38ee61, 1a5ab2e6338fa25426b913ec54fdc010, b47a039b6273a7507a15b8ebdca52413, 419870c9270241989c24fb5ab5ff5b01, c2e4902b325defd63fb242e5abbb14df, 999027296da0565d0f3b33ee5d56869d, 9ca0c3c242bc6c57a02f092dea650774, b0d1545fbc92ae9da559f5b4c16361a8, fefd764f69653301beec6346e7ca4583, 6066111061e5cc61ee1cd0e7a07f9719, 22412066d0bc32aed386c5ac98a3929c, 99c926de5101db4da88470f5c5afc9fb, 9267d4e1844325ef89eef8da42da35dc, cd173b34475baffadab5bd412979e205, 6591cf4f15f84a38f4eaf9933726616c, 0dd0f020affb9035b8b3b14a8478ad3c, 6bfed551d613704a49f604580f2f8631, 06dfc404be9123627e429fdef63e3fff, 8549414204cda102dfa000e009ff46e2, 144e69857329d19420b25d04d41dfb88, 6d12f886fc101f303830bd87c03723d8, 5be38f088c62ccff759cb31538066f79, 7864e3856d8593d33e8f2dfe24ed251b, 8aa14db17edc50dbfe27809cdcd0d291, bb10c16e64901074a4f41c4acaa5b403, 60c4ec542d490ed927250bece3ba5e67, 1015d9af5460783f8cc4de19716f655f, 33e42480807411443d28bb67ecfa02f5, 4e66d1a85dd1f66305b930fe68477aea, e6fda3af84c6c9e79faab4b7797c60b0, f48aa4d683cb9cdb44031b4ab61f3f6f, 15176957e06e9ddce29f1f39ac4b5071, 60aadd66d8c4cfc2b989d46e78d02fdd, 9d2c204229022e677f10514c714c2808, 38b1579d900e7fc6968a1f05b66f826e, 6370c98f3fb39afae9a77575932266b0, 64e54c20677e03dde9738a22be35a0b1, 12f593bcc410e74e06d216b0ece9344f, 24c062090a37fe02a22b4941f03e43fe, a4e35a0dca189b1edc4a22c0eaecac27, 856b968a13ca97d352918369f107cc65, 5ef0b77b71566375915134f0674131ad, cb34433c168a288b4ec495048e8f7570, 1b1f94f20e78de7b8b71774e2993aaec, ed02c9d1ca1df9178eda002f78e33b9c, 843d7957746dec6d3b390439e8567d9f, 6e1e76f58c40b4e136d980c1dc5a31f2, 638f3bf05589587e9978464750870e78, d8019662b2cb9ac94938b364e9b3e9cd, 95f5da4731a904bb059e7c6d8cba3b23, 6f0802aad441cec6cfc16f3604a9ab4e, babebbfdbfe66290b5ae3294fb597fd6, 35a2a5a01bb56729e9c39fa4bec9b9b6, 2fa9b18ed301d4141704396928fbc445, 3b554bf2d5320d981650e8b848ac3807, cba8b127d1ed64f97e5ea560fdf6d037, 33cbf3b28f5d37449746efaa969f8a82, 3493b0683bc4239dad03e8274436d189, 9a29fc6ea63b1002b2f872d355cbc586, \ No newline at end of file diff --git a/_utils/emails_ux.txt b/_utils/emails_ux.txt deleted file mode 100644 index 57229a6..0000000 --- a/_utils/emails_ux.txt +++ /dev/null @@ -1 +0,0 @@ -ha@brightstudio.ru, gnatovych@gmail.com, anna.trotsina@gmail.com, robert@mokselle.ru, annazayidova@gmail.com, sharapov.nail@gmail.com, art.magomaev@gmail.com, varvarakravchenko@yandex.ru, 9990405@gmail.com, spinngewebex@gmail.com, ilyuha86@gmail.com, kashlatch@gmail.com, kira.yakuhina@gmail.com, juniperland@gmail.com, aknoraz@deloitte.ru, tuning_a@mail.ru, danila.zarechnev@gmail.com, dmitrij.pastushenko@gmail.com, madjaw@mail.ru, lemma.ka@gmail.com, xxnikolayxx@gmail.com, artnebo@gmail.com, 9330733@mail.ru, velesart@gmail.com, abrakadavr@gmail.com, zyabra@gmail.com, a.fomin@escript.ru, art@amado-id.ru, lepon@bk.ru, timur.shulgin@infocraft.ru, zfalevich@gmail.com, sesyunin@realweb.ru, freesleeper@gmail.com, webar4i@gmail.com, marketolog@webelement.ru, dubnyak404@gmail.com, kropev@rarus.ru, snoorge@mail.ru, gotcha10@narod.ru, flyshtein@gmail.com, vladfedorovich@gmail.com, imickaa@gmail.com, sp.rusanov@gmail.com, mtsalka@scnsoft.com, didenko@braind.agency, natasha.skulskaia@gmail.com, admin@portix.ru, gfgaliya@gmail.com, enchervinskaya@gmail.com, redkuk@gmail.com, str-ibz@inbox.ru, temadorokhov@gmail.com, petrichv@gmail.com, dmytriy.suslov@gmail.com, a.dobrian@gmail.com, trjyfel@mail.ru, info@sibirix.ru, ek.design11@gmail.com, waximov@gmail.com, m.chelyadenkov@gmail.com, a.nikiforov@uplab.ru, feyorz@gmail.com, uasam@mail.ru, einzheev@itl.com.kz, o.tibirkova@yandex.ru, denisov.s.s@yandex.ru, dm.medv@gmail.com, gawanna.ru@mail.ru, maksimov.design@gmail.com, bez.b.unix@gmail.com, \ No newline at end of file diff --git a/_utils/error.log_back b/_utils/error.log_back deleted file mode 100644 index e94ff9b..0000000 --- a/_utils/error.log_back +++ /dev/null @@ -1,57 +0,0 @@ -o.tibirkova@yandex.ru -alexandersvinin@gmail.com -nikonorov@labizum.ru -timakova@fistashki.org -sharapov.nail@gmail.com -soldakov.p@yandex.ru -ap@ds-p.ru -j.tolkova@yandex.ru -as.plyaskin@gmail.com -person.ira@gmail.com -o.tibirkova@yandex.ru -alexandersvinin@gmail.com -nikonorov@labizum.ru -timakova@fistashki.org -sharapov.nail@gmail.com -soldakov.p@yandex.ru -ap@ds-p.ru -j.tolkova@yandex.ru -as.plyaskin@gmail.com -person.ira@gmail.com -pyshenko@mail.ru -ipev54@mail.ru -r_dauranov@mail.ru -didrojon@gmail.com -vlad_rym@mail.ru -levs01@mail.ru -msvechnikova@mail.ru -obraztsova.che@yandex.ru -uraltux@gmail.com -jsam1989@yandex.ru -van_zoka@mail.ru -grash25@mail.ru -garaeff2006@yandex.ru -ungern@nxt.ru -lubka95@mail.ru -pr-sido@yandex.ru -o.tibirkova@yandex.ru -alexandersvinin@gmail.com -nikonorov@labizum.ru -timakova@fistashki.org -sharapov.nail@gmail.com -soldakov.p@yandex.ru -ap@ds-p.ru -j.tolkova@yandex.ru -as.plyaskin@gmail.com -person.ira@gmail.com -kikna@yandex.ru -j.tolkova@yandex.ru -soldakov.p@yandex.ru -ap@ds-p.ru -as.plyaskin@gmail.com -timakova@fistashki.org -nikonorov@labizum.ru -o.tibirkova@yandex.ru -person.ira@gmail.com -alexandersvinin@gmail.com -sharapov.nail@gmail.com diff --git a/_utils/exclude_re_welcome.json b/_utils/exclude_re_welcome.json deleted file mode 100644 index e69de29..0000000 diff --git a/_utils/export_vzaar.py b/_utils/export_vzaar.py deleted file mode 100644 index 771de6a..0000000 --- a/_utils/export_vzaar.py +++ /dev/null @@ -1,29 +0,0 @@ -# coding=utf-8 -import os - -import datetime -import django -import sys -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from courses.models import Lesson, Course - -for course in Course.objects.all(): - print '{0} :{1}'.format(course.id, course) - -c = raw_input(u'CHOICE COURSE. 0 - EXIT: ') -try: - course = Course.objects.get(id=c) -except Course.DoesNotExists: - print u'Курс не найден' -else: - for lesson in Lesson.objects.filter(course=course).order_by('token'): - if not lesson.video_id: - print lesson - result = raw_input(u'VIDEO ID VZAAR. 0 - NO CHANGE: ') - print '==============' - if result != 0: - lesson.video_id = result - lesson.video_date = datetime.datetime.now() - lesson.save() diff --git a/_utils/finish_export_vzaar.py b/_utils/finish_export_vzaar.py deleted file mode 100644 index ffebbf6..0000000 --- a/_utils/finish_export_vzaar.py +++ /dev/null @@ -1,15 +0,0 @@ -# coding=utf-8 -import os - -import datetime -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from courses.models import Lesson - -for lesson in Lesson.objects.exclude(video_id=None): - lesson.video = '' - lesson.save() diff --git a/_utils/func_test.py b/_utils/func_test.py deleted file mode 100644 index 8713474..0000000 --- a/_utils/func_test.py +++ /dev/null @@ -1,8 +0,0 @@ -def test(a, b=50): - print a - print b - return 1, 2 - -test(*test(10, 20)) - -raw_input('1') \ No newline at end of file diff --git a/_utils/gazprom.txt b/_utils/gazprom.txt deleted file mode 100644 index 74804da..0000000 --- a/_utils/gazprom.txt +++ /dev/null @@ -1,48 +0,0 @@ -gawanna.ru@mail.ru -tim.phey@gmail.com -kittydiz@mail.ru -maksimov.design@gmail.com -katepainter@yandex.ru -sasha_amelina@mail.ru -snoorge@mail.ru -mifwind@gmail.com -artur.saakoff@gmail.com -tagfelix500@gmail.com -svelavs@gmail.com -art@magicdesign.ru -srfedotov@gmail.com -o.tibirkova@yandex.ru -aknoraz@deloitte.ru -sesyunin@realweb.ru -9330733@mail.ru -danila.zarechnev@gmail.com -egor@yugs.ru -goha@kiosov.com -Igorfedorenko@mail.ru -es@vipro.ru -soldakov.p@yandex.ru -702752@gmail.com -shpakova@sebbia.com -taranov@sebbia.com -rusakovevgen@gmail.com -Alexpozdnyakof@gmail.com -korobajr@ya.ru -elizaveta.bandalet@gmail.com -prokosha10@gmail.com -salofoot@fermastudio.ru -info@darneo.ru -kayl24brof@gmail.com -lens2002@gmail.com -d22s@ya.ru -masha49@yandex.ru -biz.trp@gmail.com -alexzarkov@gmail.com -ekde@wide-web.spb.ru -vemelin@gmail.com -va@wearewowagency.com -ad@wearewowagency.com -st.wasp@yandex.ru -albytime@gmail.com -as.plyaskin@gmail.com -trunovaon@gmail.com -lemma.ka@gmail.com diff --git a/_utils/gen_diploms.py b/_utils/gen_diploms.py deleted file mode 100644 index 3e099c4..0000000 --- a/_utils/gen_diploms.py +++ /dev/null @@ -1,23 +0,0 @@ -# coding=utf-8 -import os -from django.core.files import File -import django -import sys - -from django.db.models import Q - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from journals.models import DiplomaJ - -for tm in DiplomaJ.objects.filter(Q(in_image=None)|Q(out_image=None)): - if not tm.out_image or not tm.in_image: - _in, _out = tm.draw_key(*tm.draw_name(*tm.draw_date())) - if _in: - _in = open(_in) - tm.in_image.save(File(_in).name, File(_in), save=True) - - if _out: - _out = open(_out) - tm.out_image.save(File(_out).name, File(_out), save=True) diff --git a/_utils/get_big_fake_module.py b/_utils/get_big_fake_module.py deleted file mode 100644 index 8ac9fb8..0000000 --- a/_utils/get_big_fake_module.py +++ /dev/null @@ -1,31 +0,0 @@ -# coding=utf-8 -import django -import sys -import datetime -import os - - -start = datetime.datetime.now() -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from journals.models import CourseThemeJ -from courses.models import CourseTheme -from finance.models import Bill - -_themes = {} - -for i in CourseTheme.objects.filter(course__id=20): - _themes[i.sort] = 0 - for _j in CourseThemeJ.objects.filter(material=i, parent__progress__gt=1, f_date=None, - success=False).exclude(date=None): - if Bill.objects.filter(user=_j.student, status='F', service__course=20).exists(): - _themes[i.sort] += 1 - -_result = 0 -for key, value in _themes.items(): - _result += value - print('{0}:{1}'.format(key, value)) - -print(_result) diff --git a/_utils/get_email_no_exclude_hw_for_course.py b/_utils/get_email_no_exclude_hw_for_course.py deleted file mode 100644 index 8af8f6d..0000000 --- a/_utils/get_email_no_exclude_hw_for_course.py +++ /dev/null @@ -1,27 +0,0 @@ -# coding=utf-8 -import hashlib -import os -import django -import sys - -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from access.models import User -from courses.models import Course -from journals.models import TeacherJ -from finance.models import Bill - -# Получить список почт тех, кто: -# 1) Отплатил счет по курсу -# 2) Не сдал еще ДЗ - -course = Course.objects.get(id=20) -result = open('emails_ux.txt', 'w') -for j in TeacherJ.objects.filter(course=course, teacher=None).exclude(student=None): - if Bill.objects.filter(service__course=course, user=j.student, status='F').exists(): - result.write(j.student.email) - result.write(', ') - -result.close() diff --git a/_utils/get_emails_customers.py b/_utils/get_emails_customers.py deleted file mode 100644 index e6a9373..0000000 --- a/_utils/get_emails_customers.py +++ /dev/null @@ -1,17 +0,0 @@ -# coding=utf-8 -import hashlib -import os -import django -import sys - -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from access.models import User - -result = open('emails_md5.txt', 'w') -for i in User.objects.filter(customer=True): - result.write(hashlib.md5(i.email.encode('utf-8')).hexdigest()) - result.write(', ') - -result.close() diff --git a/_utils/get_no_active_users.py b/_utils/get_no_active_users.py deleted file mode 100644 index 19b77c2..0000000 --- a/_utils/get_no_active_users.py +++ /dev/null @@ -1,18 +0,0 @@ -# coding=utf-8 -import os - -import datetime -import django -import sys - - - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from access.models import User -from django.db.models import Q -date = datetime.datetime(2016, 03, 01) -for user in User.objects.filter(Q(last_login__lte=date, is_active=True)|Q(last_login=None, is_active=True)): - print user.email -print User.objects.filter(Q(last_login__lte=date, is_active=True)|Q(last_login=None, is_active=True)).count() \ No newline at end of file diff --git a/_utils/get_reports.py b/_utils/get_reports.py deleted file mode 100644 index d66e648..0000000 --- a/_utils/get_reports.py +++ /dev/null @@ -1,49 +0,0 @@ -# coding=utf-8 -# Получить список файлов папки reports -# Выдать выбор отчета -# Запустить файл -import os -import sys - -BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) -REPORTS = '/var/www/skillbox/_utils/reports' - - -class CL: - def __init__(self): - print('# Система отчетов') - print('=======================') - print('Дирректория отчетов: {0}'.format(REPORTS)) - self.files = self.get_files_list() - - def get_files_list(self): - # Получение рабочих файлов дирректории - __tmp = [] - for p, dir, files in os.walk(REPORTS): - for f in files: - if f.endswith('.py') and f != '__init__.py': - __tmp.append(os.path.join(p, f)) - return __tmp - - def choise_report(self): - # Выбрать отчет - print('Выберите отчет') - _n = 0 - for _t in self.files: - print('{0}: {1}'.format(_n, _t)) - _n += 1 - _ch = input('Ваш выбор: ') - if _ch == '-': - sys.exit(0) - else: - os.system('python {0}'.format(os.path.join(REPORTS, self.files[int(_ch)]))) - - -def main(): - CL().choise_report() - print('========') - print('Работа закончена. Удачи.') - - -if __name__ == '__main__': - main() diff --git a/_utils/get_teacher_load.py b/_utils/get_teacher_load.py deleted file mode 100644 index dc3abfe..0000000 --- a/_utils/get_teacher_load.py +++ /dev/null @@ -1,27 +0,0 @@ -# coding=utf-8 -import calendar -import datetime -import os -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from journals.models import get_active_tj_count, HomeworkJ -from courses.models import Course - -for course in Course.objects.filter(public=True): - print course.get_title() - for teacher in course.teachers.exclude(email='t@lms.ru'): - print u'{0}: {1}'.format(teacher.get_short_name(), get_active_tj_count(teacher)) - print u'=================' - -for i in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]: - now = datetime.date(2016, i, 1) - print i - print HomeworkJ.objects.filter(date__gte=datetime.datetime(now.year, now.month, 1), - date__lte=datetime.datetime(now.year, now.month, calendar.mdays[i]), - f_date__lte=datetime.datetime(now.year, now.month, calendar.mdays[i]), - f_date__gte=datetime.datetime(now.year, now.month, 1)).count() diff --git a/_utils/get_theme_try_len_result b/_utils/get_theme_try_len_result deleted file mode 100644 index fc0d2e7..0000000 --- a/_utils/get_theme_try_len_result +++ /dev/null @@ -1,99 +0,0 @@ -vtoryanik@livemaster.ru / 7 Сдано -dmitry.sedov@inbox.ru / 6 Требуется доработка -tonyavec@gmail.com / 6 Проверяется преподавателем -avmakarov@asuproject.ru / 6 Сдано -sites@ukr.net / 5 Сдано -katerina.musinova@gmail.com / 5 Проверяется преподавателем -olya.zp@ya.ru / 5 Проверяется преподавателем -ageewa@gmail.com / 5 Сдано -ogalin@aevrika.ru / 5 Проверяется преподавателем -sahem@mail.ru / 4 Сдано -a@tkachenko.in / 4 Сдано -trunovaon@gmail.com / 4 Требуется доработка -artemzig@gmail.com / 4 Сдано -alpha5@yandex.ru / 4 Сдано -fazeful@gmail.com / 4 Сдано -s.darbaidze@inostudio.com / 4 Проверяется преподавателем -ishulga86@gmail.com / 4 Требуется доработка -y.robocopov@gmail.com / 4 Требуется доработка -egysakova@gmail.com / 4 Сдано -sokdis@gmail.com / 4 Сдано -portnova.ok@yandex.ru / 4 Требуется доработка -tagfelix500@gmail.com / 4 Сдано -ekde@wide-web.spb.ru / 4 Сдано -zvetaan@gmail.com / 3 Проверяется преподавателем -emilekeilbach@gmail.com / 3 Сдано -sanzharsurshanov@gmail.com / 3 Сдано -anton.tmur@gmail.com / 3 Сдано -kira.yakuhina@gmail.com / 3 Требуется доработка -olgarafikova00@mail.ru / 3 Сдано -pavlov@complexsys.ru / 3 Проверяется преподавателем -km@colary.ru / 3 Сдано -annazayidova@gmail.com / 3 Сдано -a@cdnvideo.ru / 3 Проверяется преподавателем -iandrew80@gmail.com / 3 Сдано -whysecondjuly@gmail.com / 3 Сдано -designervs@mail.ru / 3 Сдано -lesiawuss@gmail.com / 3 Требуется доработка -ap@ds-p.ru / 3 Сдано -petrova@ydarnic.ru / 2 Сдано -art@magicdesign.ru / 2 Требуется доработка -sasha_amelina@mail.ru / 2 Сдано -denisbryuhanov@gmail.com / 2 Требуется доработка -info@wbest.ru / 2 Требуется доработка -makspirogov@gmail.com / 2 Сдано -onoffbass@yandex.ru / 2 Сдано -jack@creo.od.ua / 2 Сдано -lemma.ka@gmail.com / 2 Сдано -eco.pun@gmail.com / 2 Требуется доработка -blood4085@inbox.ru / 2 Требуется доработка -tuhachevski@gmail.com / 2 Сдано -dmokichev@gmail.com / 2 Сдано -s.shtukaturka@gmail.com / 2 Сдано -k-pastukhova@yandex.ru / 2 Требуется доработка -imickaa@gmail.com / 2 Требуется доработка -art.magomaev@gmail.com / 2 Сдано -jalalovna@yandex.ru / 2 Требуется доработка -niozuki@mail.ru / 2 Сдано -pavelvch@gmail.com / 2 Проверяется преподавателем -svelavs@gmail.com / 2 Сдано -nik-black-dragon@mail.ru / 2 Сдано -same.tea@gmail.com / 2 Сдано -goha@kiosov.com / 2 Требуется доработка -geiz@yandex.ru / 2 Сдано -captainanch@ya.ru / 2 Проверяется преподавателем -felisarmis@gmail.com / 2 Сдано -elena@citrus-soft.ru / 2 Сдано -polgolovy@gmail.com / 2 Сдано -bravo.johnny@ya.ru / 2 Требуется доработка -alexzarkov@gmail.com / 2 Требуется доработка -baho9208@mail.ru / 2 Требуется доработка -jeneva7@gmail.com / 2 Проверяется преподавателем -artur.saakoff@gmail.com / 1 Сдано -katepainter@yandex.ru / 1 Сдано -ikarp84@gmail.com / 1 Проверяется преподавателем -kronos2k4@gmail.com / 1 Сдано -xnata.d@gmail.com / 1 Сдано -mikhail.a.gusev@gmail.com / 1 Сдано -pavelspetrov@ya.ru / 1 Сдано -strife88@mail.ru / 1 Требуется доработка -alekseyskrobot@gmail.com / 1 Проверяется преподавателем -timur.shulgin@infocraft.ru / 1 Требуется доработка -skovalska@mail.ru / 1 Требуется доработка -pplahov@gmail.com / 1 Сдано -sonicmails@yandex.ru / 1 Сдано -kiselev_s_l@mail.ru / 1 Требуется доработка -zionll@yandex.ru / 1 Проверяется преподавателем -alexpozdnyakof@gmail.com / 1 Требуется доработка -kornblumchen@yandex.ru / 1 Сдано -slavinanm@gmail.com / 1 Требуется доработка -ha@brightstudio.ru / 1 Требуется доработка -mamarinna@yandex.ru / 1 Требуется доработка -kayl24brof@gmail.com / 1 Требуется доработка -gb.gayane@gmail.com / 1 Сдано -es@vipro.ru / 1 Сдано -pobiz@inbox.ru / 1 Требуется доработка -9330733@mail.ru / 1 Требуется доработка -9nkags@gmail.com / 1 Проверяется преподавателем -andrievskiydmitriy@gmail.com / 1 Сдано -denis.kryukov@cyberiada.com / 1 Требуется доработка diff --git a/_utils/get_users_with_bills.py b/_utils/get_users_with_bills.py deleted file mode 100644 index dc476c9..0000000 --- a/_utils/get_users_with_bills.py +++ /dev/null @@ -1,34 +0,0 @@ -# coding=utf-8 -import os - -import datetime -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from access.models import User -from django.db.models import Q -from finance.models import Bill -date = datetime.datetime(2016, 03, 01) - -count = 0 - - -def get_bills(user): - for i in Bill.objects.filter(user=user, status='F'): - print u'%s: %s' % (i.id, i.get_name()) - global count - count += 1 - -for user in User.objects.filter(is_active=True): - if Bill.objects.filter(user=user, status='F').exists(): - print u'' - print u'====== %s:%s:%s ' % (user.id, user.email, user.get_short_name()) - get_bills(user) - print u'===========' - -print u'' -print u'===========' -print u'Всего: %s' % count diff --git a/_utils/import_JC/__init__.py b/_utils/import_JC/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/_utils/import_JC/clean_journals.py b/_utils/import_JC/clean_journals.py deleted file mode 100644 index 770d67d..0000000 --- a/_utils/import_JC/clean_journals.py +++ /dev/null @@ -1,21 +0,0 @@ -# coding=utf-8 -import os - -import datetime -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from access.models import User -from journals.models import TeacherJ -from courses.models import Course - -for course in Course.objects.all(): - for user in User.objects.all(): - if user.date_joined.year == datetime.date.today().year and user.date_joined.year == datetime.date.today().month and user.date_joined.year == datetime.date.today().day: - journals = TeacherJ.objects.filter(student=user, course=course) - if journals.count() > 1: - journals.last().delete() - diff --git a/_utils/import_JC/clear_users.py b/_utils/import_JC/clear_users.py deleted file mode 100644 index 86834cd..0000000 --- a/_utils/import_JC/clear_users.py +++ /dev/null @@ -1,20 +0,0 @@ -import os -lines = list([i.strip() for i in open('users_base.txt').readlines()]) -result = [] -_exc = ['# 1', '# 2', '# 3', '# 4', '# 5', '# 6', '# 7', '# 8', '# 9', '# 10', '# 11', '# 12', '# 13', '# 14', '# 15', - '# 16', '# 17', '# 18', '# 19', '# Web', '# Java', '# iOS', '# Excel'] - -for r in range(1, len(lines)): - l = lines[-int(r)] - if l not in result or l in _exc: - result.append(l) - - -f = open('users_base.txt', 'w') -result.reverse() -for line in result: - line += '\n' - if line in _exc: - line += '\r' - f.write(line) -f.close() diff --git a/_utils/import_JC/create_user_map.py b/_utils/import_JC/create_user_map.py deleted file mode 100644 index 3531ab2..0000000 --- a/_utils/import_JC/create_user_map.py +++ /dev/null @@ -1,173 +0,0 @@ -# coding=utf-8 -import os - -import datetime -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from courses.models import Course, CourseTheme - -from django.core.mail import EmailMessage - -from access.models import User -from lms.settings import DEFAULT_FROM_EMAIL -from lms.tools import random_string -from finance.models import Price, Bill -from journals.models import TeacherJ, check_journal, set_opened, CourseThemeJ - -sourse = open('users_base.txt').readlines() -seller = User.objects.get(id=2) -_exc = [ - 'copymi@gmail.com', - 'input_chet@rambler.ru', - 'smirnovm84@gmail.com', - 'appppppple@gmail.com', - 'yurinbu@mail.ru', - 'zoom-zoom555@mail.ru', - 'ulitinigor@yandex.ru', - 'kochevnik01@mail.ru', - 'adrianobuon@mail.ru', - 'allanoy@yandex.ru' -] - -_map = { - '# Java': {'obj': Course.objects.get(id=2), 'id': 2, 'user_map': {}, 'teacher': User.objects.get(id=473), - 'service': Price.objects.get(id=11)}, - '# iOS': {'obj': Course.objects.get(id=3), 'id': 3, 'user_map': {}, 'teacher': User.objects.get(id=17), - 'service': Price.objects.get(id=9)}, - '# Web': {'obj': Course.objects.get(id=1), 'id': 1, 'user_map': {}, 'teacher': User.objects.get(id=705), - 'service': Price.objects.get(id=7)}, - '# Excel': {'obj': Course.objects.get(id=4), 'id': 4, 'user_map': {}, 'teacher': User.objects.get(id=22), - 'service': Price.objects.get(id=10)} -} - -# user_map = {'email', 'fname', 'oname', 'name', 'cur_theme'} - -cur_course = None -cur_theme = None -for i in sourse: - l = i.strip() - if l: - if l[0] == '#': - if l in _map: - cur_course = _map[l] - else: - cur_theme = CourseTheme.objects.get(id=l[1:]) - else: - _tmp = l.split(';') - _user = _tmp[1].split(' ') - _len = len(_user) - cur_course['user_map'][_tmp[0]] = { - 'name': _user[0] if 0 < _len else '', - 'fname': _user[1] if 1 < _len else '', - 'oname': _user[2] if 2 < _len else '', - 'cur_theme': cur_theme, - 'teacher': User.objects.get(id=535) if _tmp[0] in _exc else cur_course['teacher'] - } - -# Создание пользователей -for key, value in _map.items(): - print key - cur_course = value['obj'] - for user, m in value['user_map'].items(): - # Попробовать создать пользователя - _passw = None - _user, c = User.objects.get_or_create(email=user.lower()) - if c: - # Если его нет - присвоить пароль и сделать активным - # Присвоить имена - _passw = random_string(length=6).upper() - _user.set_password(_passw) - _user.is_active = True - _user.reg_status = '4' - _user.fname = m['fname'] - _user.name = m['name'] - _user.oname = m['oname'] - _user.save() - - # Добавить оплату по требуему курсу - bill, bc = Bill.objects.get_or_create(finish_date=datetime.datetime.now(), user=_user, status='F', - service=value['service'], manager=seller) - # Создать или получить журнал - print _user.id - try: - journal, cj = TeacherJ.objects.get_or_create(student=_user, course=cur_course) - except TeacherJ.MultipleObjectsReturned: - journal = TeacherJ.objects.filter(student=_user, course=cur_course) - journal.last().delete() - journal, cj = TeacherJ.objects.get_or_create(student=_user, course=cur_course) - if cj: - journal.teacher = m['teacher'] - journal.save() - # Проверить журнал - check_journal(journal) - # Получить последнюю пройденную тему, если она старше задаваемой - ничего не делать - last_theme = None - for _theme in CourseThemeJ.objects.filter(parent=journal).order_by('material__sort'): - if _theme.get_status_flag() not in 'N': - last_theme = _theme - c3 = False - if last_theme and last_theme.material.sort > 1: - if last_theme.material.sort <= m['cur_theme'].sort: - # Или насильно открыть журнал по заданой теме - set_opened(journal, - CourseThemeJ.objects.get(material=m['cur_theme'], parent=journal).actual_lesson.token) - c3 = True - else: - set_opened(journal, CourseThemeJ.objects.get(material=m['cur_theme'], parent=journal).actual_lesson.token) - c3 = True - - if c3: - journal.teacher = m['teacher'] - journal.save() - - # Если пользователь был создан - отправить одно письмо, если нет, другое - if c: - text = u'' \ - u'' \ - u'' \ - u'' \ - u'' \ - u'' \ - u'' \ - u'' \ - u'' \ - u'' \ - u'' \ - u'' \ - u'


Добрый день!
' \ - u'Рады сообщить, что нами была разработанна собственная площадка для обучения.

' \ - u'Сейчас мы осуществяем перевод вашего курса.

' \ - u'Ваш доступ:' \ - u'

Ссылка на портал: http://lms.ru

' \ - u'

Логин: {0}

' \ - u'

Пароль: {1}


' \ - u'Ваш пароль и другую информацию вы сможете поменять их зайдя на платформе в свой профиль.

' \ - u'Инструкция по работе:
' \ - u'• На главной странице платформы у Вас отображаются все размещенные на ней курсы.
' \ - u'• Выбитете Ваш курс и нажминте кнопку приступить.
' \ - u'• Вы попадете на страницу с курсом, у Вас будет автоматически открыт доступ ко всем урокам которые Вы уже успели пройти.
' \ - u'• К кажой открытой для Вас темы есть кнопка «Открыть лекцию»
' \ - u'Перейдя по ней, Вы увидите размещенные видео к урокам.
' \ - u'Для того что бы открылась страницв с домашним занием, отмемтьте урок просмотренным.
' \ - u'• Во вкладке с домашним заданиям находяться описания работы, файлы для выполнения.
' \ - u'Ниже на этой странице находиться форма обратной связи через которую можно общаться с преподавателем и направлять задание на проверку.
' \ - u'• После принятия рабты, селедующий урок открывается автоматически.
' \ - u'• Оповещение о новых комментариях преподавателя к домашним заданиям так же будут приходить на указанный e-mail.
' \ - u'• ВАЖНО. Если вы использовали на старой платформе несколько электронных адресов, Пришлите нам на support@lms.ru не используемый email.
' \ - u'По всем вопросам, связанным с перездом пишите на почту support@lms.ru


С уважением,
Точка кода
' \ - u'' \ - u''.format(_user.email, _passw) - msg = EmailMessage('Добро пожаловать на новую платформу', - text, - u'ТОЧКА КОДА <{0}>'.format(DEFAULT_FROM_EMAIL), [_user.email]) - msg.content_subtype = "html" # Main content is now text/html - msg.send() diff --git a/_utils/import_JC/create_users.py b/_utils/import_JC/create_users.py deleted file mode 100644 index afcdafe..0000000 --- a/_utils/import_JC/create_users.py +++ /dev/null @@ -1 +0,0 @@ -# Прочитать все записи \ No newline at end of file diff --git a/_utils/import_JC/test_imigrate.txt b/_utils/import_JC/test_imigrate.txt deleted file mode 100644 index 6e6ea51..0000000 --- a/_utils/import_JC/test_imigrate.txt +++ /dev/null @@ -1,3 +0,0 @@ -# Excel -# 18 -root@codemy.ru;Сиглаев Сергей diff --git a/_utils/import_JC/users_base.txt b/_utils/import_JC/users_base.txt deleted file mode 100644 index b71aeab..0000000 --- a/_utils/import_JC/users_base.txt +++ /dev/null @@ -1,751 +0,0 @@ -# Excel -# 18 -ssiglaev@mail.ru;Сиглаев Сергей -ipev54@mail.ru;Евгений Ипатов -# 36 -# 37 -Ekaterinageorgievna@ya.ru;Екатерина Рагозина -KomarovaTaty@yandex.ru;Комарова Татьяна Николаевна -# 38 -gesko56@mail.ru;Геско Игорь -# 39 -pyshenko@mail.ru;Пушенко Сергей -marina.opheim@gmail.com;Marina Opheim -# 40 -varavina@bk.ru;Лариса Варавина -oreshko_pn@mail.ru;Орешко Петр Николаевич -# 41 -pavel-samocvetov@rambler.ru;Самоцветов Павел -# Java -# 19 -elenagum@gmail.com;Elena Gumennikova -koganovsky@yandex.ru;Дмитрий Когановский -d.koganovsky@gmail.com;Дмитрий Когановский -rybkina.ma@gmail.com;Рыбкина Марина -gladiator.maksim1992@mail.ru;Козлов Максим -uzor1@ukr.net;Андрей -baktybekergabyl@gmail.com;Ергабыл Бактыбек -pabls.web@gmail.com;Павел -380734890630@yandex.ru;Обущак Сергей -ipereyma@yandex.ru;igor` -andr.bondaren@gmail.com;Андрей -progres5@yandex.ru;Сергей Зовский -raduga-k-klyuchi@mail.ru;Юлий -vitaliyexplorer7@gmail.com;Виталий -vitr@list.ru;Виталий Иванов -rajnisk@hotmail.com;Людмила -dmitry010581@yandex.ru;Тимофеев Дмитрий -sak_aa@mail.ru;Сак Александр -rapheroes@mail.ru;Корчагин Илья -od_89@mail.ru;Олег -duckart_av@mail.ru;Андрей -dima-sit168@yandex.ru;Дмитрий -klen2277@mail.ru;Евгений Каленов -aleksey.elizaryev@gmail.com;Алексей -c0x1ff6@yahoo.com;Александр -Alexander5454@yandex.ru;Александер Чижиков -msv1108@gmail.com;Станислав -job.76@bk.ru;Сергей Снитко -fan2pr@yandex.ru;Алексей -didrojon@gmail.com;nic -palik777@gmail.com;Pavel Minin -ph.shamsiev@mail.ru;Филипп -yuralet@mail.ru;Юрий -tao981@rambler.ru;Виктор -s_teplom@mail.ru;Екатерина Атаманчук -total100@ya.ru;Валерий -eshudanov@gmail.com;Ержан Шуданов -mihajlovmv@yandex.ru;Михайлов Михаил -manmg87@gmail.com;Дмитрий Гевейлер -valery.remenyuk@rambler.ru;валерий ременюк -ukhin.ag@gmail.com;Ухин Александр -jamil2005.78@mail.ru;зумруд -prusov1987@gmail.com;Андрей -levin_aleksey@mail.ru;Алексей -Roma.Korehov@yandex.ru;Роман Корехов -aav-kerry@mail.ru;Алексей Архипов -v_vyborg@rambler.ru;валерий ременюк -etopist@outlook.com;Александр Забродин -ne-devil@mail.ru;Дмитрий -karakan77@yandex.ru;бахарев сергей -pavel.anix@gmail.com;Токарев Павел Анатольевич -bakeevsa@gmail.com;Станислав Бакеев -remenyuk79@gmial.com;Ременюк Валерий -iterus@rambler.ru;Khogoeva Tatiana -sss-74@bk.ru;Сидоренко Сергей -Abdimalik777@yandex.kz;Абдималик -8student8@gmail.com;Владимир -shevanov@gmail.com;Евгений Шеванов -ekbpotok@gmail.com;Игорь -copymi@gmail.com;Саша -yurinbu@mail.ru;Бушенков Юрий -r_dauranov@mail.ru;Ренат Дауранов -Paa186@mail.ru;Алексей -rabmit@yandex.ru;Ярослав Митин -89091635474@mail.ru;Дудин Андрей -adrianobuon@mail.ru;dmitriy -danikanisa@gmail.com;Давид -allanoy@yandex.ru;Alla -# 20 -PREYZON@mail.ru;Кирилл -ponamarev_89@bk.ru;Юрий -Pvlniko@gmail.com;Павел -sergeioff@mail.ru;Сергей Погорелов -Instinct975@gmail.com;Илья -nikulinag@gmail.com;Андрей Никулин -e.b.j_99@mail.ru;Baktybek -supana1976@gmail.com;Павел -ipereyma@yandex.ru;игорь -kvasha.oleg1962@gmail.com;Квашин Олег Леонидович -epolshakova@ya.ru;Екатерина -d.koganovsky@gmail.com;Дмитрий -didrojon@gmail.com;2урок -job.76@bk.ru;Сергей -my.777@mail.ru;Екатерина -dvinnik@yahoo.com;deividas vinnik -vlad_rym@mail.ru;Влад Римский -nils1968@gmail.com;Виктор -an_var@smtp.ru;Вараксин Андрей -maxrusgm@yandex.ru;Максим -dimkut@bk.ru;Кутный Дмитрий -mity282@gmail.com;Макаров Дмитрий -infdev@yandex.ru;Казинская Надежда -yakovbeng@gmail.com;Николай -zulkarnaev_sergei@mail.ru;Сергей -natzero@mail.ru;Головков Сергей -mysample@rambler.ru;Магазеев Александр -igor_kravchenko@live.ru;Игорь -kudriashov.art@yandex.ru;Артемий -chitinski86@gmail.com;Антон -cut-throat2008@yandex.ru;Филипп Кузнецов -ilya_korchagin_90@mail.ru;Корчагин Илья -Kerby@inbox.ru;Андрей -evg2369@yandex.ru;Евгений Похожаев -bele.niente@gmail.com;Светлана Грибанова -input_chet@rambler.ru;Евгений Мосияченко -smirnovm84@gmail.com;Смирнов Михаил Сергеевич -appppppple@gmail.com;Александр -zoom-zoom555@mail.ru;Ирина -wirelines@yandex.ru;Бикчентаев Шамиль -ulitinigor@yandex.ru;Игорь -ivan@mymediagroup.ru;Иван -vetarak@gmail.com;Дмитрий Каратеев -aptem240@mail.ru;Кирпичев Артем -jnss2013ks@gmail.com;Евгения Ступникова -vadmirr@yandex.ru;Вадим Mугинов -artemshchurev@gmail.com;Щурев Артем -w3orks@mail.ru;Станислав -# 21 -gordjelin14@gmail.com;Антон -yungamm@yandex.ru;Андрей -iglatypov2010@yandex.ru;Ильнур -all4me4@gmail.com;Александр Петров -kardv@yandex.ru;Владимир Кардашин -ffiirreeffooxx@gmail.com;Иванников Игорь Александрович -alex-bedev@ozero.net;Александр Соколов -phantomx@yandex.ru;Андрей -step1383@gmail.com;Дмитрий Степанов -svettlantik@rambler.ru;Svetlana Telepina -rivo551@rambler.ru;Татьяна -istubb@me.com;Андрей Приходько -4-mi@bk.ru;Андрей -aleks_mihalev@list.ru;Алексей Михалев -mbk_88@mail.ru;Болат -vladejkee@gmail.com;Владислав -stalevs@gmail.com;Станислав -cesc0717@gmail.com;Антон Говоров -asavlukov@maxus.ru;Александр -omegaprime@live.ru;Дмитрий -ushac@mail.ru;Алексей -lena_as_sister@mail.ru;Тюнина Елена -valorml@gmail.com;Вячеслав -albert@gestiv.ru;Альберт -baktybekergabyl@gmail.com;Baktybek -jys.naturoil@yandex.ru;Сабельникова Юлия -at_alex@bk.ru;Алексей -mb2043@yandex.ru;Василий -igrix@mail.ru;Погодин Игорь -klaus_83@mail.ru;Павел Афанасьев -rsbk73@gmail.com;Андрей -palik777@gmail.com;Павел Минин -novosib_2009@mail.ru;Алексей -varaksinandrey@yandex.ru;Андрей -romik1985@gmail.com;Роман -dymov33@ya.ru;Эльмар Мирзабаев -ksd921020@yandex.ru;Сергей -symchuk.andriy@gmail.com;Сымчук Андрей -n-samoilov@mail.ru;Никита -urself2015@yandex.ru;Алексеенко Юрий -zshoo@mail.ru;Заурбек -infiniticiti@gmail.com;Oleg Chernivetsky -e.p.aleksandrov@yandex.ru;Евгений -abulhanof@yandex.kz;Шаукат -levis84@mail.ru;Виктор -kochevnik01@mail.ru;Павел -mara-777@bk.ru;Tamara -algamazov@yandex.ru;Александр Гамазов -a.kyrov@gmail.com;Кыров Андрей -remenyuk79@gmail.com;Ременюк Валерий -mirik49@yandex.ru;Иван Белоусов -yorv@mail.ru;Иван -coldinc@rambler.ru;Иван -alp1@list.ru;Владимир Полинский -ld1995@tut.by;Леонид -midda7@mail.ru;Антон -# 22 -la-verne@mail.ru;Иван Фомин -safarov-ar@yandex.ru;Сафаров Алексей Расимович -kimonnick@mail.ru;Александр -madinaxyt@mail.ru;Мадина -iglatypov2010@yandex.ru;Латыпов Ильнур -krrera@mail.ru;Арсен -jackf31@mail.ru;Игорь -alexz1983@mail.ru;Захаров Александр -netbooks@mail.ru;Геннадий -ShoarR@gmail.com;Ульяна Джумок -mad-dimon@mail.ru;Дмитрий -dmitriy.mosolov@gmail.com;Дмитрий Мосолов -pabls@yandex.ru;Павел -sergey@794979.ru;Сергей -Elvis97rus@gmail.com;Артем -cprof777@gmail.com;Алексей Язьков -aeugeniy@gmail.com;Евгений -soft-bi@mail.ru;Сергей -pverbatim@mail.ru;Петр Андреев -alex@titul-spb.ru;Александр Целищев -asavlukov@maxus.ru;Саша -cyberfancool@yandex.ru;Виталий -zamaev.aydrus@yandex.ru;Айдрус -edwd.mkrv@gmail.com;Эдуард Макаров -brmoney@ya.ru;Сергей -# 23 -chabakvolodya@gmail.com;Володимир -grandger@mail.ru;Степанов Александр -ma1m2@mail.ru;Светлана Мажайкина -madinaxyt@mail.ru;Мдина -rm7m@mail.ru;Виталий Дорофеев -andrey.poprotsky@gmail.com;Андрей -public-mail@mail.ru;Тураев Константин -diadiasash@mail.ru;Александр -makoron@mail.ru;Евгений Тимофеев -oglekler@gmail.com;Глеклер Ольга -mbr0969@gmail.com;Михаил -nvladislavn@gmail.com;Нечаев Владислав -vilislac@gmail.com;Григорий -alion.dim@yandex.ru;Людмила -mansur.by@gmail.com;Abilmansur -aspushkin2395@gmail.com;Кирилл -Assarkhaddon@gmail.com;Чупов Александр -i.zaria@yandex.ru;Игорь -pushkinan@yandex.ru;Александр -tsarevvs@bk.ru;Владимир -dmitry.mamonov@gmail.com;Дмитрий Мамонов -avduckart@gmail.com;Дукарт Андрей -kgv63@mail.ru;Геннадий -infdev@yandex.ru;Надежда -mail4bsf@gmail.com;Станислав Быльченко -svirepyi@mail.ru;Вадим Измайлов -# 24 -texcomvit@gmail.com;Виталий -alekskolr@gmail.com;Алексей -d77dk@mail.ru;Дмитрий -mas.proekt@mail.ru;Маслёнок Андрей -prusove@gmail.com;Евгений -misha41192@mail.ru;Михаил Скафенко -sglvzom@gmail.com;Николай -# 26 -malov.alexsander@yandex.ru;Александр -9284330043@mail.ru;Дмитрий -baltport@mail.ru;Илья Агафонов -kaa-work@yandex.ru;Антон -alex.v.andreev@gmail.com;Александр Васильевич Андреев -kutsko.v.v@yandex.ru;Василий -# iOS -# 43 -ivan.infbez@yandex.ru;Иван -igor.dyachkov89@gmail.om;Игорь -iyaroslav@yandex.ru;Ярослав -meres28032000@gmail.com;Евгений -malenkaya.grafinya@mail.ru;Mikhaylova Lyubov -# 44 -2909763@gmail.com;Михаил Палкин -bayaliev.mar@yandex.ru;Мар -rozental.igor@gmail.com;Игорь Розенталь -for_new_job@bk.ru;Абрамян Сергей -Malkolm063@yandex.ru;Андрей -# 45 -mail@greatcoach.ru;Денис -paveldance@mail.ru;павел лонкин -tsomuk@yandex.ru;Никита -bayaliev.mar@yandex.ru;Mar -19871010@mail.ru;Мкртумян Нарек -oleg@pendurov.com;Олег Пендуров -dan98l@mail.ru;Даниил Голубятников -diroy1287@gmail.com;Егор -for_new_job@bk.ru;Сергей Абрамян -zopa_gopa@mail.ru;Ренат -# 46 -bogdanofandrey@gmail.com;Андрей -malkolm063@yandex.ru;Андрей -arzt2001@mail.ru;Михаил Смолиговец -stas_shoshkin@rambler.ru;Шошкин Станислав -AnatoliiAndreev19@gmail.com;Анатолий -dmitry@senashenko.ru;Дмитрий Сенашенко -# 47 -za-alex@yandex.ru;Алексей -wins00k@gmail.com;Андрей Тищенко -bubnyshev@lanit.ru;Бубнышев Сергей -# 48 -o.kubyshkin@gmail.com;Олег -gkrasnoshlyk@gmail.com;Геннадий -asylbekzhardekov@gmail.com;Асылбек -# 50 -alexeyra2010@gmail.com;Alexey Redkin -roman@proskurnin.ru;Роман Проскурнин -madjaw@mail.ru;Андрей -rozental.igor@gmail.com;Игорь -skripkin2410@gmail.com;Дмитрий -# 51 -artbataev@gmail.com;Владимир -nns7@inbox.ru;Nikolay -# Web -# 1 -jeged22@gmail.com;Виталий -secalol@gmail.com;ТЕСТ -8wicx@msgos.com;testJC -vlyagusha@justclick.ru;Вячеслав -dvsvaran@mail.ru;Виталий -mainfilter@ya.ru;Сергей -polkovnik51@vail.ru;Владимир -nivshina@mail.ru;Анастасия Ившина -aksay_sayt@mail.ru;Татьяна Велмакина -nserogoskaya@bk.ru;Серогодская Н. -nestetion@ya.ru;Анастасия -afeldus@mail.ru;Anatoly Feldman -test@test.ru;тест -alexeidavljatov3@mail.ru;алексей -kazzak2008@rambler.ru;задание №1 Алексей Казаков -alvk3@yandex.ru;Алексей Кочанов -vgric@mail.ru;Виктория Гриценко -opti72@ukr.net;Александр -deltaz1@mail.ru;Николай Матюшов -mari.kravchuk78@mail.ru;Мария Кравчук -apishvanov@gmail.com;Александр Пишванов -233868@gmail.com;Николай -yoga@satvasamui.com;Черемикин Александр -edwardb@ngs.ru;Эдуцард Бурлаков -vip.alex113@mail.ru;Александр Андросов -vre@mail.ru;Kalinin -aivis@ukr.net;Щербаков Роман -nadvas0910@gmail.com;Nadezda -teamaks@mail.ru;Maksym -tyapushkina1976@gmail.com;Светлана -dmn@isida.com.ru;Димитрий Милакин -sadness.sv@gmail.com;Vyacheslav -d6232@bugmir.net;Дмитрий Теслюк -Gralle@yandex.ru;Инна Овчинникова -yusupowa.alfia2017@yandex.ru;Альфия Юсупова -homevent@gmail.com;Константин Черепанов -skop.1984@mail.ru;Юлия -ekarniymamay@mil.ru;Анастасия -p_orlov@list.ru;Pavel Orlov -tehfoxen@yandex.ru;Алехина Татьяна -sveta250694@mail.ru;Светлана Спорынина -shevchuka@gmail.com;Алексей -zhuklevich87@gmail.com;Stanislav Zhuklevich -karpov.g777@mail.ru;Карпов Евгений -gnk413666@yandex.ru;Алексей Щукин -a.rassmagin@mail.ru;Алексей -pyosha@yandex.ru;Коваленко Наталья -adik69@list.ru;Алексанр Адеев -# 2 -gotcha10@yandex.ru;Андрей -saliq.ilshat@gmail.com;Ильшат -gyrka@yandex.ru;Андрей Гирка -evgwar@yandex.ru;Евгений -veneta83@inbox.ru;Венета -optimizup@yandex.ru;Роман Марков -alexeidavljatov3@mail.ru;алексей давлятов -kazzak2008@rambler.ru;задание №2 Алексей Казаков -unitbox@mail.ru;Бобух Эдуард -martaw75@mail.ru;Мартыненко Анна -k.erofeew@gmail.com;Кирилл Ерофеев -ksenija.petriv@gmail.com;Ksenia -belokrylov.al@mail.ru;Алексей -strekozec12@gmail.com;Алексей -ua67850@yandex.ru;алексей -Ft_inferno@mail.ru;Евгений -Umi-chan_1992@mail.ru;Марина Куксова -vanologvin@gmail.com;Иван -sirius1991dav_asa@mail.ru;Анастасия Дойникова -akaymanov@yandex.ru;Андрей Кайманов -ghoul666@gmail.com;Дмитрий Алексеенко -# 3 -MAXYTA22@yandex.ru;Ирина -yandexru@icloud.com;Олег -lexinfox@mail.ru;Алексей Анциферов -denis3753@yandex.ru;Денис -kazzak2008@rambler.ru;задание №3 Алексей Казаков -mikhail_efimov@mail.ru;Михаил Ефимов -insait07@mail.ru;Багаутдинов Сергей -igorkudenko1@gmail.com;Игорь Куденко -bb-klub@mail.ru;Алексей Федотов -aleksandr-a-2014@mail.ru;Алексей Федотов -maruta-danil@mail.ru;Марута Даниил -otdeda@gmail.com;Федор Усков -lev0315@mail.ru;Лев Каменев -dsolomennikova@gmail.com;Daria Solomennikova -# 4 -lanarich@mail.ru;Касьянова Руслана -strategybz@mail.ru;Александр -kazzak2008@rambler.ru;задание №4 Алексей Казаков -a.v.kurlovich@gmail.com;Александр -hotmustang@mail.ru;Лебедь Алексей -sovalianna@gmail.com;Natalia Nosanova -mislavsky@yandex.ru;Максим Миславский -adrinalin17@yandex.ru;Сергей -trippleyes@gmail.com;Roman Izotov -sj22@ya.ru;Ольга Белова -Alexander97@inbox.ru;Александр -elena_polyakova84@mail.ru;Полякова Елена -nagval07@mail.ru;Сергей -# 5 -bestway305@yandex.ru;Артур -obraztsova.che@yandex.ru;Екатерина -filchenkov.dima@mail.ru;Дмитрий -wkmstr@mail.ru;Мераб -olgeraski@gmail.com;Ольга Гераськина -skorshuns@mail.ru;Сергей -vorona_1992@bk.ru;Валерия -0964600@gmail.com;Oksana Popova -servaredecaelo@gmail.com;Алина Гайбель -t.natalia_66@mail.ru;Мади -vikraokna@gmail.com;Дмитрий -a05@list.ru;Углев Владимир -vlg81@mail.ru;Галашев Вадим -manamaha@mail.ru;Николай Дёров -tusrb@mail.ru;Тарасов Иван Григорьевич -gnatenko.pavel@gmail.com;Павел Гнатенко -Serenya21@yandex.ru;Сергей -o.lif@gmx.de;Olena Lif -kazzak2008@rambler.ru;задание №5 Алексей Казаков -nabelka@ya.ru;Ната -o.gricenko@yandex.ru;Олег -alpe@b2bresearch.com;Александр Петросян -79296628851@yandex.ru;Дмитрий -creps92@yandex.ru;Максим Гамаюнов -vitaliy.a.2015@mail.ru;Виталий Анищенко -videograf2007@yandex.ru;Андрей -web-school-voicehovich@yandex.ru;Михаил Войцехович -tyapushkina1976@gmail.com;Светлана Cмирнова -Ddinamit.i@gmail.com;Илья Облогин -yusupova.alfia2014@yandex.ru;Альфия Юсупова -evgenia_litvina@mail.ru;Евгения Литвина -npg2009@rambler.ru;Павло Галамейко -julia210384otto@yandex.ru;Юлия Ванина -# 6 -igorevich70@gmail.com;Игорь -alberto.man@mail.ru;Альберт -espoirquebec@gmail.com;Мария Кравчук -d.work2011@yandex.ru;Светлана -indrs@rambler.ru;Сергей -VIP-Dantist@yandex.ru;Вячеслав -vufer@inbox.ru;Сурен Вердиян -acvyatin@mail.ru;Александр -pavel.bosko@gmail.com;Павел -carrera91167@inbox.ru;Елена -otik_kurdgelia@mail.ru;инна -markovskaya_88@mail.ru;Наталья -rorbah91@yandex.ru;Рорбах Олег -nestetion@yandex.ru;Анастасия -Kasyan12@mail.ru;Касьянов Александр -undead.koroleva2012@yandex.ru;Юлия -uvladz@gmail.com;Влад Ущаповский -deniskhig@yandex.ru;Денис -avkan@meta.ua;Андрей Кандыба -dine77e@gmail.com;Роман -romanov.hk@gmail.com;Илья -kazzak2008@rambler.ru;задание №6 Алексей Казаков -anik4366@mail.ru;Анна Борисенко -fom_iv@list.ru;Игорь Фоменко -gak.anya@mail.ru;Ашатhttp://payment.mokselle.ru/training/file/t0vxFP7PL88KC7I50Ij7cROqIuF47J4l/ -katerium@mail.ru;Екатерина -barchakov@gmail.com;Берс -elabuga-dar@yandex.ru;Ольга Шапоренко -konstantinov2006@yandex.ru;Константинов Евгений -elgus2007@yandex.ru;Гусельников Сергей -stacyinner@gmail.com;Анастасия Сергейчук -ansierra@mail.ru;Анна Губарева -ivan_smelkov@mail.ru;Иван -ahnuria@mail.ru;Нурия -edwardb@ngs.ru;Эдуард Бурлаков -kvon@list.ru;Ольга Колодкина -baigulova.indira@bk.ru;Индира Байгулова -codemaster74@mail.ru;Марат Абдуллин -naurale@yandex.ru;Илья -kvn0910@yandex.ru;Nadezda -idval@imedia.ru;Валерий -lapinanatalya@mail.ru;Наталья -vktmb@mail.ru;Валерий Каныгин -harleyhp@mail.ru;Александр -olypash-alians@yandex.ru;Ольга Пашкова -# 7 -pugachiov.serezha@yandex.ru;сергей -danil.kdo1@gmail.com;Даниил -vladsemuk@gmail.com;Владислав -remikont@inbox.ru;Михаил -torgbuk@mail.ru;Hromenko Nikolay -mainfilter@yandex.ru;Сергей -m.b.oper@Gmail.com;Кирилл -sheniachiglazki@gmail.com;Филь Юлия -A.MAILME@YANDEX.RU;Александра Скобелева -9186532244@mail.ru;Кирилл Воронков -s.s.shuvalova@gmail.com;Светлана Шувалова -igor.kiyashchenko@mail.ru;Игорь Киященко -shaspir@mail.ru;Хоха Илья -alxsrtv@gmail.com;Александр -newstas11@mail.ru;Станислав -turist2015@ya.ru;Артем -ks2007a@yandex.ru;Константин -evseev@dubna.ru;Юрий Евсеев -biznice@yandex.ru;Леонид -galapub@ya.ru;Галина Бутенко -artis72@ya.ru;Артем Исаев -petrsushko@mail.ru;Петр Сушко -amberleyley@gmail.com;Софья Прокофьева -vlkuprianov@gmail.com;Владимир Куприянов -akoziy@ya.ru;Андрей Козий -komichok@mail.ru;Андрей Комаров -andreidem4enko@yandex.ru;Демченко Андрей -Germanjuk-artm@rambler.ru;Артём Германюк -# 8 -igorevich70@gmail.com;Игорь Чуркин -romankox1973@gmail.com;Роман -a.silyaev@yandex.ru;Анвер Силяев -okonogray@yahoo.com;Олеся Конограй -sekvenseralex@mail.ru;Вдовин Алексей Сергеевич -lrv92@mail.ru;Лукьянов Роман -galkov@mokselle.com;Максим -skostin@mail.ru;Сергей Костин -pashtynov@mail.ru;Дмитрий Паштынов -korovina_natasha@mail.ru;Наталья Коровина -rkrivtsov@gmail.com;Роман Кривцов -gp@bipon.ru;Геннадий -gabeda@yandex.ru;Юлия Габеда -d.tiganov@yandex.ru;Дмитрий Тиганов -sokol-judo92@mail.ru;Кирилл Соколов -bet-ekaterina@mail.ru;Бетина Екатерина -vasiliy.moiseenko.64@mail.ru;Василий Моисеенко -teacoffee@i.ua;Максим -geogrii-cobolev@mail.ru;Юрий Соболев -svtbiz@inbox.ru;Светлана Титова -promenergo.ch@gmail.com;Андрей Медведев -# 9 -PhilatovEvgeny@mail.ru;Евгений Филатов -strix1985@mail.ru;Анна -k.rachimov@mail.ru;Кирилл Рахимов -nastusha1995is@gmail.com;Анастасия -IVTsygankov@gmail.com;Иван -bkr1@yandex.ru;Карэн -mobils100@yandex.ru;Максим Сурков -ganin-va@yandex.ru;Василий Ганин -iborzik@gmail.com;Ирина Борзик -romagrog@gmail.com;Роман -regione-2000@ya.ru;Калугина Ольга Анатольевна -megafabr@yandex.ru;Николай Беляев -vladvolod@yandex.ru;Владислав Володин -tsvetkovaai@yandex.ru;Цветкова Анна -qman_2@mail.ru;Василий Вдовин -Dron84@gmail.com;Андрей Шарунов -nikitakozh@ukr.net;Кожевников Никита -polikor-n@yandex.ru;Олег Радаев -euro2@yandex.ru;Александр Блохинов -dron_andr_2007@mail.ru;Анлрей -tatyana.best@list.ru;Татьяна Авдеева -# 10 -anton.alyoshin@hotmail.com;Антон Алешин -artem.panteleev@aol.com;Артём -strig_elena@mail.ru;Новикова Елена Владимировна -djsergeykovanin@mail.ru;Кованин Сергей -kviva@yandex.ru;Виктор -Evgeni2007@yandex.ru;Евгений -afonin123@bk.ru;Александр -chel200807@yandex.ru;Анатолий Емельянов -pipopka@bk.ru;Тепляшина Евгения Сергеевна -green2536@yandex.ru;Сергей -dmitriylarin@bk.ru;Дмитрий Ларин -ziv1@yandex.ru;Игорь Золотарев -sheptun_marina@mail.ru;Marina Ovchinnikova -sveta.utemova@bk.ru;Света -ann_posh@rambler.ru;Анна Сысоева -edwardb@mail.ru;Эдуард Бурлаков -valero_sv@mail.ru;Валерий Сорока -artsfabrica@gmail.com;Игорь Донцов -# 11 -5001010@bk.ru;Шемет Дмитрий -lexx59@gmail.com;Александр Пленкин -irina.kisik@gmail.com;Ирина -okislyakov@gmail.com;Олег Кисляков -julia_dea@mail.ru;Юлия Белоусова -adastra.m@yandex.ru;Мокрушин Вячеслав -Usov_88@mail.ru;Сергей -lipsuke@mac.com;Дмитрий Фадеев -andrey777@maryno.net;Улякин Андрей Юрьевич -p0v13@mail.ru;Павел Погодин -kindaleks@gmail.com;Алексей -ngpk_lysenko@mail.ru;Виталий Лысенко -anika2006@yandex.ru;Алексей Аникин -zel-mirra@bk.ru;Вадим -office@eskd72.ru;Дмитрий -peters2004@yandex.ru;Соловьёв Пётр -# 12 -iguar.k@ya.ru;Игорь Кузнецов -hakimov65@inbox.ru;Ринат -Yuriy1357@mail.ru;Юрий -1ckaz@mail.ru;Асет -felix.80808@mail.ru;Евгений -maks2546@mail.ru;Максим -zefaa@mail.ru;Елена Зинченко -sokol4eg@mail.ru;Михаил Соколов -artur.mandrich.99@mail.ru;Мандрич Артур -yglazy@mail.ru;Юрий -sanzhiku@gmail.com;Sanzhar Urazaliyev -# 13 -kira09051987@mail.ru;Гузель -9713943@mail.ru;Леонид -kuznetsovaelena1@mail.ru;Кузнецова Елена -savax@rambler.ru;Дмитрий Савченко -aksay_sayt@mail.ru;Татьяна Вельмакина -vic.bandura@yandex.ru;Виктор Бандура -itshepard57574@gmail.com;Руслан -senior.perfiliew@ya.ru;Иван Перфильев -terraincod@gmail.com;Сергей -galyna.pon@gmail.com;Galina Ponomarenko -polet2107@ya.ru;Вадим -vavilov_alex@mail.ru;alex -# 14 -edwantoshin@rambler.ru;Эдуард Антошин -niki-1@yandex.ru;Сачков Денис -igvassor@gmail.com;Игорь Сорокин -2013ekaterina@mail.ru;Олег Ляшенко -sir.oberst@yandex.ru;сергей -khaaan@mail.ru;Алексей -stas_ravskiy-95@mail.ru;Равский Станислав -dmitroff197@yandex.ru;Дмитрий -brolya@bk.ru;Бражинская Ольга -taurus19901@mail.ru;Вячеслав Скрыпник -makr1975@yandex.ru;Максим -oly_armavir@mail.ru;Ольга -j.haustov@gmail.com;Евгений -# 15 -oleg.akimov@mail.ru;Олег Акимов -ritaces@inbox.lv;Rita Cevere -nikita-ftf@Mail.ru;Nikita Veselov -mkenes_2@mail.ru;Мадияр -blackrum@yandex.ru;Роман Платонов -polkovnik51@mail.ru;Владимир -xaba578@mail.ru;Хава Куркиева -dontsurrender@ya.ru;Сергей Терехов -ci4rovik@mail.ru;Эдуард Фадеев -2906300@inbox.ru;Ильсур -royline@mail.ru;Шаронова Ольга -Slava666-2008@ya.ru;Вячеслав -host510@mail.ru;Михаил Гостищев -osmusic17@gmail.com;Александр Богданович -utk1@list.ru;Владимир Макеев -faridweb23@gmail.com;Фарид -svmc@ya.ru;Владимир -aamlhv@yandex.ru;Малахов Антон -aselya.bekenova@gmail.com;Асель Бекенова -# 16 -mf915@mail.ru;Антон -guipago@mail.ru;Dmitry -profiservic2@yandex.ru;Михаил -zlata.reznickova@yandex.ru;злата резникова -artyomzykov@yandex.ru;Артём -vladimir_glight@mail.ru;Владимир -zev3b@yandex.ru;Евгений Зеленько -Minigalin.nail.M@yandex.ru;Наиль -Dron84@gmail.com;Андрей Шарнуов -# 25 -kylych1@yandex.ru;Кылыч -Yoooda1989@mail.ru;Максим Петров -saski@mail.ru;Сергей Малкин -gisstyle@yandex.ru;Анастасия Гофман -belous.maria@gmail.com;Мария -mk@bagur.su;Кирилл Мещерин -riseagain@inbox.ru;Лина -artyomzykov@gmail.com;Артем -ale-xey76@yandex.ru;Алексей -r61boff@mail.ru;Григорий Шевцов -volnov_mv@mail.ru;Максим -ekbregionetrader@gmail.com;Валентин -shelbyblack37@gmail.com;Екатерина -# 59 -nikolletss@gmail.com;Марина -bestway305@yandex.ru;Артур Нурахметов -puzach@mail.ru;Пузач Влад -makguseff@yandex.ru;Максим Гусев -vadzimbelsky@rambler.ru;Вадим Бельский -my-post@mail.ru;Татьяна -alvar63@mail.ru;Лариса Варавина -# 17 -pertik@list.ru;Александр -ebortnikov@mail.ru;Евгений Бортников -kkvkk@mail.ru;Кирилл -omsterkhova@rambler.ru;Ольга -chiganu@gmail.com;Евгения Гороха -gennadiy1983@ya.ru;Геннадий -tutmos3@yandex.ru;Павел Орловский -artyomzolotykh@gmail.com;Артем -ssprava@ukr.net;Галина Стриженко -dyrnoj@bk.ru;Максим -ob080270@voliacable.com;Олег -marinemaks@yandex.ru;Мария Максимова -kborodavko2009@yandex.ru;Константин Бородавко -blackghost58@mail.ru;Илья -susenko_a@ukr.net;Андрей Сусенко -mahneva-mariya@mail.ru;Мария -a.michurin1783@mail.ru;Артем Мичурин -lcf-84@mail.ru;Сергей Калинкин -flintl@bk.ru;Кулаков Александр -kovalev.home@mail.ru;Владимир Ковалев -alexweb85@yandex.ru;Александр -vmiretskaya@gmail.com;Viktoriia Miretska -irena.kostina@mail.ru;ирина -MAXYTA22@yandex.ru;Максим -bengard@yandex.ru;Наталья -alexatro@yandex.ru;Александра Троянова -walerock@mail.ru;Валерий -www.Rifma@mail.ru;Сергей Мудряков -Vals_0791@mail.ru;Волкова Алиса -ruslan71@bmail.ru;Руслан Мордачев -serzhpodkolzin@yandex.ru;Сергей -webprogrammer77@gmail.com;Прохоров Игорь -hazhaev@gmail.com;Рашид Хажаев -ansserg@yandex.ru;Сергей -klu_lena@list.ru;Елена -serggovs@yandex.ru;Говердовский Сергей -kalina81@list.ru;Анна -donder@yandex.ru;Пастухов Данил -vip.samosadov@mail.ru;Алексей -coop01@mail.ru;Андрей -msp081152@mail.ru;Сергей Малахов -vladislav-avdeev@mail.ru;Владислав -serge-meb@mail.ru;Сергей -nadin12233@mail.ru;Надежда -lysenko.mi@gmail.com;Марк Лысенко -stepanuk1987@yandex.ru;Алексей -rock_n_vladok@mail.ru;Дурин Владислав -threed@rsgc.ru;Дмитрий Панфилов -gamer1648@yandex.ru;Виктор -choodick@gmail.com;Амелин Артем -kostgr@rambler.ru;Константин Гребенюков -vadigoryache@yandex.ru;вадим горячев -kirillrumyantsev1971@gmail.com;Кирилл Румянцев -anton_semenchuk@rambler.ru;Антон -orloff.eg@yandex.ru;Данил -vvuch@ya.ru;Вячеслав Волков -andru_45@list.ru;Андрей -tsubasa@tut.by;Валера -kira.kostenko@gmail.com;Кира Костенко diff --git a/_utils/import_JC/users_base_back b/_utils/import_JC/users_base_back deleted file mode 100644 index 004eb2b..0000000 --- a/_utils/import_JC/users_base_back +++ /dev/null @@ -1,4716 +0,0 @@ - -# Excel -# 1 -ssiglaev@mail.ru;Сиглаев Сергей -ipev54@mail.ru;Евгений Ипатов -# 2 - -# 3 -Ekaterinageorgievna@ya.ru;Екатерина Рагозина -KomarovaTaty@yandex.ru;Комарова Татьяна Николаевна - -# 4 -gesko56@mail.ru;Геско Игорь - -# 5 -pyshenko@mail.ru;Пушенко Сергей -marina.opheim@gmail.com;Marina Opheim - -# 6 -varavina@bk.ru;Лариса Варавина -oreshko_pn@mail.ru;Орешко Петр Николаевич - -# 7 -pavel-samocvetov@rambler.ru;Самоцветов Павел - -# Java -# 1 -grandger@mail.ru;Степанов Александр -PREYZON@mail.ru;Кирилл -elenagum@gmail.com;Elena Gumennikova -safarov-ar@yandex.ru;Сафаров Алексей Расимович -ponamarev_89@bk.ru;Юрий -la-verne@mail.ru;Иван Фомин -19871010@mail.ru;Мкртумян Нарек -aeugeniy@gmail.com;Евгений -all4me4@gmail.com;Александр Петров -mad-dimon@mail.ru;Дмитрий -koganovsky@yandex.ru;Дмитрий Когановский -gordjelin14@gmail.com;Антон -Pvlniko@gmail.com;Павел -d.koganovsky@gmail.com;Дмитрий Когановский -kutsko.v.v@yandex.ru;Василий -niki-1@yandex.ru;Сачков Денис -malov.alexsander@yandex.ru;Александр -kudriashov.art@yandex.ru;Артемий -strategybz@mail.ru;Александр -iglatypov2010@yandex.ru;Ильнур -ShoarR@gmail.com;Ульяна Джумок -texcomvit@gmail.com;Виталий -aspushkin2395@gmail.com;Кирилл -yungamm@yandex.ru;Андрей -rybkina.ma@gmail.com;Рыбкина Марина -kimonnick@mail.ru;Александр -ma1m2@mail.ru;Светлана Мажайкина -krrera@mail.ru;Арсен -9284330043@mail.ru;Дмитрий -gladiator.maksim1992@mail.ru;Козлов Максим -vilislac@gmail.com;Григорий -Instinct975@gmail.com;Илья -sergeioff@mail.ru;Сергей Погорелов -dine77e@gmail.com;Роман -natzero@mail.ru;Головков Сергей -cesc0717@gmail.com;Антон Говоров -netbooks@mail.ru;Геннадий -madinaxyt@mail.ru;Мадина -mas.proekt@mail.ru;Маслёнок Андрей -chitinski86@gmail.com;Антон -mail4bsf@gmail.com;Станислав Быльченко -Elvis97rus@gmail.com;Артем -kardv@yandex.ru;Владимир Кардашин -sergey@794979.ru;Сергей -uzor1@ukr.net;Андрей -rsbk73@gmail.com;Андрей -baktybekergabyl@gmail.com;Ергабыл Бактыбек -nvladislavn@gmail.com;Нечаев Владислав -pabls@yandex.ru;Павел -alion.dim@yandex.ru;Людмила -nikulinag@gmail.com;Андрей Никулин -dmitriy.mosolov@gmail.com;Дмитрий Мосолов -rm7m@mail.ru;Виталий Дорофеев -pabls.web@gmail.com;Павел -380734890630@yandex.ru;Обущак Сергей -step1383@gmail.com;Дмитрий Степанов -pushkinan@yandex.ru;Александр -supana1976@gmail.com;Павел -ipereyma@yandex.ru;igor` -andr.bondaren@gmail.com;Андрей -progres5@yandex.ru;Сергей Зовский -raduga-k-klyuchi@mail.ru;Юлий -vitaliyexplorer7@gmail.com;Виталий -andrey.poprotsky@gmail.com;Андрей -vitr@list.ru;Виталий Иванов -alex-bedev@ozero.net;Александр Соколов -rivo551@rambler.ru;Татьяна -rajnisk@hotmail.com;Людмила -ffiirreeffooxx@gmail.com;Иванников Игорь Александрович -dmitry010581@yandex.ru;Тимофеев Дмитрий -mbr0969@gmail.com;Михаил -ushac@mail.ru;Алексей -e.b.j_99@mail.ru;Baktybek -jackf31@mail.ru;Игорь -alexz1983@mail.ru;Захаров Александр -diadiasash@mail.ru;Александр -baltport@mail.ru;Илья Агафонов -vladejkee@gmail.com;Владислав -bubnyshev@lanit.ru;Бубнышев Сергей -ilya_korchagin_90@mail.ru;Корчагин Илья -svettlantik@rambler.ru;Svetlana Telepina -sak_aa@mail.ru;Сак Александр -rapheroes@mail.ru;Корчагин Илья -od_89@mail.ru;Олег -duckart_av@mail.ru;Андрей -alekskolr@gmail.com;Алексей -apishvanov@gmail.com;Александр Пишванов -my.777@mail.ru;Екатерина -phantomx@yandex.ru;Андрей -dima-sit168@yandex.ru;Дмитрий -dimkut@bk.ru;Кутный Дмитрий -epolshakova@ya.ru;Екатерина -cprof777@gmail.com;Алексей Язьков -klen2277@mail.ru;Евгений Каленов -4-mi@bk.ru;Андрей -albert@gestiv.ru;Альберт -maxrusgm@yandex.ru;Максим -i.zaria@yandex.ru;Игорь -aleksey.elizaryev@gmail.com;Алексей -c0x1ff6@yahoo.com;Александр -kvasha.oleg1962@gmail.com;Квашин Олег Леонидович -kgv63@mail.ru;Геннадий -Alexander5454@yandex.ru;Александер Чижиков -an_var@smtp.ru;Вараксин Андрей -igrix@mail.ru;Погодин Игорь -msv1108@gmail.com;Станислав -urself2015@yandex.ru;Алексеенко Юрий -vic.bandura@yandex.ru;Виктор Бандура -makoron@mail.ru;Евгений Тимофеев -job.76@bk.ru;Сергей Снитко -istubb@me.com;Андрей Приходько -zoom-zoom555@mail.ru;Ирина -iyaroslav@yandex.ru;Ярослав -mbk_88@mail.ru;Болат -fan2pr@yandex.ru;Алексей -soft-bi@mail.ru;Сергей -n-samoilov@mail.ru;Никита -kaa-work@yandex.ru;Антон -d77dk@mail.ru;Дмитрий -threed@rsgc.ru;Дмитрий Панфилов -Assarkhaddon@gmail.com;Чупов Александр -mansur.by@gmail.com;Abilmansur -alex@titul-spb.ru;Александр Целищев -oglekler@gmail.com;Глеклер Ольга -dmitry.mamonov@gmail.com;Дмитрий Мамонов -didrojon@gmail.com;nic -public-mail@mail.ru;Тураев Константин -palik777@gmail.com;Pavel Minin -stalevs@gmail.com;Станислав -nils1968@gmail.com;Виктор -misha41192@mail.ru;Михаил Скафенко -pverbatim@mail.ru;Петр Андреев -edwardb@ngs.ru;Эдуард Бурлаков -infiniticiti@gmail.com;Oleg Chernivetsky -aleks_mihalev@list.ru;Алексей Михалев -dymov33@ya.ru;Эльмар Мирзабаев -brolya@bk.ru;Бражинская Ольга -ph.shamsiev@mail.ru;Филипп -vetarak@gmail.com;Дмитрий Каратеев -roman@proskurnin.ru;Роман Проскурнин -edwardb@mail.ru;Эдуард Бурлаков -yuralet@mail.ru;Юрий -klaus_83@mail.ru;Павел Афанасьев -tao981@rambler.ru;Виктор -s_teplom@mail.ru;Екатерина Атаманчук -coldinc@rambler.ru;Иван -at_alex@bk.ru;Алексей -asavlukov@maxus.ru;Александр -vlad_rym@mail.ru;Влад Римский -mity282@gmail.com;Макаров Дмитрий -lena_as_sister@mail.ru;Тюнина Елена -total100@ya.ru;Валерий -dvinnik@yahoo.com;deividas vinnik -zulkarnaev_sergei@mail.ru;Сергей -omegaprime@live.ru;Дмитрий -eshudanov@gmail.com;Ержан Шуданов -yakovbeng@gmail.com;Николай -mihajlovmv@yandex.ru;Михайлов Михаил -sglvzom@gmail.com;Николай -appppppple@gmail.com;Александр -tsarevvs@bk.ru;Владимир -input_chet@rambler.ru;Евгений Мосияченко -igor_kravchenko@live.ru;Игорь -manmg87@gmail.com;Дмитрий Гевейлер -alex.v.andreev@gmail.com;Александр Васильевич Андреев -levis84@mail.ru;Виктор -cyberfancool@yandex.ru;Виталий -valery.remenyuk@rambler.ru;валерий ременюк -infdev@yandex.ru;Казинская Надежда -jys.naturoil@yandex.ru;Сабельникова Юлия -kochevnik01@mail.ru;Павел -ukhin.ag@gmail.com;Ухин Александр -jamil2005.78@mail.ru;зумруд -romik1985@gmail.com;Роман -brmoney@ya.ru;Сергей -mysample@rambler.ru;Магазеев Александр -mb2043@yandex.ru;Василий -prusov1987@gmail.com;Андрей -valorml@gmail.com;Вячеслав -alp1@list.ru;Владимир Полинский -wirelines@yandex.ru;Бикчентаев Шамиль -levin_aleksey@mail.ru;Алексей -evg2369@yandex.ru;Евгений Похожаев -prusove@gmail.com;Евгений -Roma.Korehov@yandex.ru;Роман Корехов -karpov.g777@mail.ru;Карпов Евгений -zamaev.aydrus@yandex.ru;Айдрус -bele.niente@gmail.com;Светлана Грибанова -aav-kerry@mail.ru;Алексей Архипов -abulhanof@yandex.kz;Шаукат -remenyuk79@gmail.com;Ременюк Валерий -novosib_2009@mail.ru;Алексей -v_vyborg@rambler.ru;валерий ременюк -Kerby@inbox.ru;Андрей -etopist@outlook.com;Александр Забродин -ne-devil@mail.ru;Дмитрий -smirnovm84@gmail.com;Смирнов Михаил Сергеевич -karakan77@yandex.ru;бахарев сергей -pavel.anix@gmail.com;Токарев Павел Анатольевич -bakeevsa@gmail.com;Станислав Бакеев -remenyuk79@gmial.com;Ременюк Валерий -iterus@rambler.ru;Khogoeva Tatiana -sss-74@bk.ru;Сидоренко Сергей -Abdimalik777@yandex.kz;Абдималик -cut-throat2008@yandex.ru;Филипп Кузнецов -e.p.aleksandrov@yandex.ru;Евгений -8student8@gmail.com;Владимир -mirik49@yandex.ru;Иван Белоусов -shevanov@gmail.com;Евгений Шеванов -symchuk.andriy@gmail.com;Сымчук Андрей -artyomzykov@gmail.com;Артем -ulitinigor@yandex.ru;Игорь -zshoo@mail.ru;Заурбек -svirepyi@mail.ru;Вадим Измайлов -edwd.mkrv@gmail.com;Эдуард Макаров -a.kyrov@gmail.com;Кыров Андрей -ekbpotok@gmail.com;Игорь -ksd921020@yandex.ru;Сергей -yorv@mail.ru;Иван -ivan@mymediagroup.ru;Иван -ld1995@tut.by;Леонид -mara-777@bk.ru;Tamara -copymi@gmail.com;Саша -jnss2013ks@gmail.com;Евгения Ступникова -yurinbu@mail.ru;Бушенков Юрий -algamazov@yandex.ru;Александр Гамазов -aptem240@mail.ru;Кирпичев Артем -r_dauranov@mail.ru;Ренат Дауранов -w3orks@mail.ru;Станислав -midda7@mail.ru;Антон -Paa186@mail.ru;Алексей -vadmirr@yandex.ru;Вадим Mугинов -artemshchurev@gmail.com;Щурев Артем -malenkaya.grafinya@mail.ru;Mikhaylova Lyubov -rabmit@yandex.ru;Ярослав Митин -89091635474@mail.ru;Дудин Андрей -adrianobuon@mail.ru;dmitriy -danikanisa@gmail.com;Давид -gennadiy1983@ya.ru;Геннадий -allanoy@yandex.ru;Alla - -# 2 -grandger@mail.ru;Степанов Александр -PREYZON@mail.ru;Кирилл -19871010@mail.ru;Мкртумян Нарек -ponamarev_89@bk.ru;Юрий -la-verne@mail.ru;Иван Фомин -safarov-ar@yandex.ru;Сафаров Алексей Расимович -kutsko.v.v@yandex.ru;Василий -aeugeniy@gmail.com;Евгений -niki-1@yandex.ru;Сачков Денис -gordjelin14@gmail.com;Антон -mad-dimon@mail.ru;Дмитрий -all4me4@gmail.com;Александр Петров -malov.alexsander@yandex.ru;Александр -texcomvit@gmail.com;Виталий -ShoarR@gmail.com;Ульяна Джумок -Pvlniko@gmail.com;Павел -yungamm@yandex.ru;Андрей -aspushkin2395@gmail.com;Кирилл -sergeioff@mail.ru;Сергей Погорелов -krrera@mail.ru;Арсен -Instinct975@gmail.com;Илья -9284330043@mail.ru;Дмитрий -vilislac@gmail.com;Григорий -kimonnick@mail.ru;Александр -iglatypov2010@yandex.ru;Ильнур -madinaxyt@mail.ru;Мадина -netbooks@mail.ru;Геннадий -mail4bsf@gmail.com;Станислав Быльченко -mas.proekt@mail.ru;Маслёнок Андрей -ma1m2@mail.ru;Светлана Мажайкина -cesc0717@gmail.com;Антон Говоров -Elvis97rus@gmail.com;Артем -pabls@yandex.ru;Павел -andrey.poprotsky@gmail.com;Андрей -jackf31@mail.ru;Игорь -dmitriy.mosolov@gmail.com;Дмитрий Мосолов -alion.dim@yandex.ru;Людмила -rm7m@mail.ru;Виталий Дорофеев -baltport@mail.ru;Илья Агафонов -nikulinag@gmail.com;Андрей Никулин -pushkinan@yandex.ru;Александр -mbr0969@gmail.com;Михаил -alexz1983@mail.ru;Захаров Александр -bubnyshev@lanit.ru;Бубнышев Сергей -kardv@yandex.ru;Владимир Кардашин -alex-bedev@ozero.net;Александр Соколов -e.b.j_99@mail.ru;Baktybek -step1383@gmail.com;Дмитрий Степанов -supana1976@gmail.com;Павел -diadiasash@mail.ru;Александр -ushac@mail.ru;Алексей -vladejkee@gmail.com;Владислав -nvladislavn@gmail.com;Нечаев Владислав -rivo551@rambler.ru;Татьяна -ffiirreeffooxx@gmail.com;Иванников Игорь Александрович -sergey@794979.ru;Сергей -rsbk73@gmail.com;Андрей -alekskolr@gmail.com;Алексей -avduckart@gmail.com;Дукарт Андрей -svettlantik@rambler.ru;Svetlana Telepina -phantomx@yandex.ru;Андрей -ipereyma@yandex.ru;игорь -baktybekergabyl@gmail.com;Baktybek -cprof777@gmail.com;Алексей Язьков -i.zaria@yandex.ru;Игорь -kvasha.oleg1962@gmail.com;Квашин Олег Леонидович -d77dk@mail.ru;Дмитрий -kgv63@mail.ru;Геннадий -threed@rsgc.ru;Дмитрий Панфилов -makoron@mail.ru;Евгений Тимофеев -kaa-work@yandex.ru;Антон -soft-bi@mail.ru;Сергей -4-mi@bk.ru;Андрей -Assarkhaddon@gmail.com;Чупов Александр -albert@gestiv.ru;Альберт -mansur.by@gmail.com;Abilmansur -epolshakova@ya.ru;Екатерина -iyaroslav@yandex.ru;Ярослав -mbk_88@mail.ru;Болат -oglekler@gmail.com;Глеклер Ольга -roman@proskurnin.ru;Роман Проскурнин -public-mail@mail.ru;Тураев Константин -vic.bandura@yandex.ru;Виктор Бандура -dmitry.mamonov@gmail.com;Дмитрий Мамонов -d.koganovsky@gmail.com;Дмитрий -pverbatim@mail.ru;Петр Андреев -misha41192@mail.ru;Михаил Скафенко -aleks_mihalev@list.ru;Алексей Михалев -alex@titul-spb.ru;Александр Целищев -istubb@me.com;Андрей Приходько -didrojon@gmail.com;2урок -igrix@mail.ru;Погодин Игорь -job.76@bk.ru;Сергей -my.777@mail.ru;Екатерина -stalevs@gmail.com;Станислав -edwardb@ngs.ru;Эдуард Бурлаков -asavlukov@maxus.ru;Александр -dvinnik@yahoo.com;deividas vinnik -urself2015@yandex.ru;Алексеенко Юрий -tsarevvs@bk.ru;Владимир -vlad_rym@mail.ru;Влад Римский -nils1968@gmail.com;Виктор -palik777@gmail.com;Павел Минин -an_var@smtp.ru;Вараксин Андрей -maxrusgm@yandex.ru;Максим -dimkut@bk.ru;Кутный Дмитрий -infiniticiti@gmail.com;Oleg Chernivetsky -sglvzom@gmail.com;Николай -omegaprime@live.ru;Дмитрий -klaus_83@mail.ru;Павел Афанасьев -n-samoilov@mail.ru;Никита -lena_as_sister@mail.ru;Тюнина Елена -at_alex@bk.ru;Алексей -mity282@gmail.com;Макаров Дмитрий -alex.v.andreev@gmail.com;Александр Васильевич Андреев -dymov33@ya.ru;Эльмар Мирзабаев -infdev@yandex.ru;Казинская Надежда -yakovbeng@gmail.com;Николай -zulkarnaev_sergei@mail.ru;Сергей -brmoney@ya.ru;Сергей -prusove@gmail.com;Евгений -mb2043@yandex.ru;Василий -alp1@list.ru;Владимир Полинский -jys.naturoil@yandex.ru;Сабельникова Юлия -karpov.g777@mail.ru;Карпов Евгений -romik1985@gmail.com;Роман -cyberfancool@yandex.ru;Виталий -coldinc@rambler.ru;Иван -valorml@gmail.com;Вячеслав -natzero@mail.ru;Головков Сергей -mysample@rambler.ru;Магазеев Александр -zamaev.aydrus@yandex.ru;Айдрус -novosib_2009@mail.ru;Алексей -igor_kravchenko@live.ru;Игорь -kudriashov.art@yandex.ru;Артемий -chitinski86@gmail.com;Антон -cut-throat2008@yandex.ru;Филипп Кузнецов -ilya_korchagin_90@mail.ru;Корчагин Илья -levis84@mail.ru;Виктор -kochevnik01@mail.ru;Павел -remenyuk79@gmail.com;Ременюк Валерий -Kerby@inbox.ru;Андрей -evg2369@yandex.ru;Евгений Похожаев -bele.niente@gmail.com;Светлана Грибанова -symchuk.andriy@gmail.com;Сымчук Андрей -edwd.mkrv@gmail.com;Эдуард Макаров -svirepyi@mail.ru;Вадим Измайлов -e.p.aleksandrov@yandex.ru;Евгений -abulhanof@yandex.kz;Шаукат -ksd921020@yandex.ru;Сергей -input_chet@rambler.ru;Евгений Мосияченко -smirnovm84@gmail.com;Смирнов Михаил Сергеевич -zshoo@mail.ru;Заурбек -appppppple@gmail.com;Александр -mirik49@yandex.ru;Иван Белоусов -mara-777@bk.ru;Tamara -zoom-zoom555@mail.ru;Ирина -yorv@mail.ru;Иван -a.kyrov@gmail.com;Кыров Андрей -wirelines@yandex.ru;Бикчентаев Шамиль -algamazov@yandex.ru;Александр Гамазов -artyomzykov@gmail.com;Артем -ld1995@tut.by;Леонид -ulitinigor@yandex.ru;Игорь -ivan@mymediagroup.ru;Иван -vetarak@gmail.com;Дмитрий Каратеев -midda7@mail.ru;Антон -aptem240@mail.ru;Кирпичев Артем -jnss2013ks@gmail.com;Евгения Ступникова -vadmirr@yandex.ru;Вадим Mугинов -artemshchurev@gmail.com;Щурев Артем -w3orks@mail.ru;Станислав - -# 3 -grandger@mail.ru;Степанов Александр -kutsko.v.v@yandex.ru;Василий -niki-1@yandex.ru;Сачков Денис -safarov-ar@yandex.ru;Сафаров Алексей Расимович -la-verne@mail.ru;Иван Фомин -aeugeniy@gmail.com;Евгений -malov.alexsander@yandex.ru;Александр -texcomvit@gmail.com;Виталий -gordjelin14@gmail.com;Антон -aspushkin2395@gmail.com;Кирилл -ShoarR@gmail.com;Ульяна Джумок -krrera@mail.ru;Арсен -9284330043@mail.ru;Дмитрий -yungamm@yandex.ru;Андрей -vilislac@gmail.com;Григорий -kimonnick@mail.ru;Александр -madinaxyt@mail.ru;Мадина -iglatypov2010@yandex.ru;Ильнур -mad-dimon@mail.ru;Дмитрий -all4me4@gmail.com;Александр Петров -mas.proekt@mail.ru;Маслёнок Андрей -jackf31@mail.ru;Игорь -bubnyshev@lanit.ru;Бубнышев Сергей -baltport@mail.ru;Илья Агафонов -Elvis97rus@gmail.com;Артем -netbooks@mail.ru;Геннадий -dmitriy.mosolov@gmail.com;Дмитрий Мосолов -mbr0969@gmail.com;Михаил -rm7m@mail.ru;Виталий Дорофеев -ma1m2@mail.ru;Светлана Мажайкина -alion.dim@yandex.ru;Людмила -kardv@yandex.ru;Владимир Кардашин -alexz1983@mail.ru;Захаров Александр -andrey.poprotsky@gmail.com;Андрей -diadiasash@mail.ru;Александр -pabls@yandex.ru;Павел -pushkinan@yandex.ru;Александр -avduckart@gmail.com;Дукарт Андрей -mail4bsf@gmail.com;Станислав Быльченко -ffiirreeffooxx@gmail.com;Иванников Игорь Александрович -alekskolr@gmail.com;Алексей -alex-bedev@ozero.net;Александр Соколов -nvladislavn@gmail.com;Нечаев Владислав -sergey@794979.ru;Сергей -i.zaria@yandex.ru;Игорь -cprof777@gmail.com;Алексей Язьков -phantomx@yandex.ru;Андрей -d77dk@mail.ru;Дмитрий -step1383@gmail.com;Дмитрий Степанов -kaa-work@yandex.ru;Антон -kgv63@mail.ru;Геннадий -mansur.by@gmail.com;Abilmansur -makoron@mail.ru;Евгений Тимофеев -threed@rsgc.ru;Дмитрий Панфилов -svettlantik@rambler.ru;Svetlana Telepina -misha41192@mail.ru;Михаил Скафенко -dmitry.mamonov@gmail.com;Дмитрий Мамонов -public-mail@mail.ru;Тураев Константин -Assarkhaddon@gmail.com;Чупов Александр -soft-bi@mail.ru;Сергей -rivo551@rambler.ru;Татьяна -iyaroslav@yandex.ru;Ярослав -istubb@me.com;Андрей Приходько -4-mi@bk.ru;Андрей -aleks_mihalev@list.ru;Алексей Михалев -roman@proskurnin.ru;Роман Проскурнин -vic.bandura@yandex.ru;Виктор Бандура -alex@titul-spb.ru;Александр Целищев -oglekler@gmail.com;Глеклер Ольга -sglvzom@gmail.com;Николай -pverbatim@mail.ru;Петр Андреев -mbk_88@mail.ru;Болат -vladejkee@gmail.com;Владислав -stalevs@gmail.com;Станислав -cesc0717@gmail.com;Антон Говоров -tsarevvs@bk.ru;Владимир -brmoney@ya.ru;Сергей -asavlukov@maxus.ru;Александр -alex.v.andreev@gmail.com;Александр Васильевич Андреев -omegaprime@live.ru;Дмитрий -ushac@mail.ru;Алексей -lena_as_sister@mail.ru;Тюнина Елена -prusove@gmail.com;Евгений -valorml@gmail.com;Вячеслав -albert@gestiv.ru;Альберт -cyberfancool@yandex.ru;Виталий -karpov.g777@mail.ru;Карпов Евгений -baktybekergabyl@gmail.com;Baktybek -jys.naturoil@yandex.ru;Сабельникова Юлия -at_alex@bk.ru;Алексей -mb2043@yandex.ru;Василий -igrix@mail.ru;Погодин Игорь -klaus_83@mail.ru;Павел Афанасьев -infdev@yandex.ru;Надежда -zamaev.aydrus@yandex.ru;Айдрус -rsbk73@gmail.com;Андрей -palik777@gmail.com;Павел Минин -novosib_2009@mail.ru;Алексей -varaksinandrey@yandex.ru;Андрей -edwd.mkrv@gmail.com;Эдуард Макаров -romik1985@gmail.com;Роман -dymov33@ya.ru;Эльмар Мирзабаев -svirepyi@mail.ru;Вадим Измайлов -ksd921020@yandex.ru;Сергей -symchuk.andriy@gmail.com;Сымчук Андрей -n-samoilov@mail.ru;Никита -urself2015@yandex.ru;Алексеенко Юрий -zshoo@mail.ru;Заурбек -infiniticiti@gmail.com;Oleg Chernivetsky -e.p.aleksandrov@yandex.ru;Евгений -abulhanof@yandex.kz;Шаукат -levis84@mail.ru;Виктор -kochevnik01@mail.ru;Павел -mara-777@bk.ru;Tamara -algamazov@yandex.ru;Александр Гамазов -a.kyrov@gmail.com;Кыров Андрей -remenyuk79@gmail.com;Ременюк Валерий -mirik49@yandex.ru;Иван Белоусов -yorv@mail.ru;Иван -coldinc@rambler.ru;Иван -artyomzykov@gmail.com;Артем -alp1@list.ru;Владимир Полинский -ld1995@tut.by;Леонид -midda7@mail.ru;Антон - -# 4 -kutsko.v.v@yandex.ru;Василий -niki-1@yandex.ru;Сачков Денис -grandger@mail.ru;Степанов Александр -texcomvit@gmail.com;Виталий -la-verne@mail.ru;Иван Фомин -malov.alexsander@yandex.ru;Александр -safarov-ar@yandex.ru;Сафаров Алексей Расимович -9284330043@mail.ru;Дмитрий -kimonnick@mail.ru;Александр -bubnyshev@lanit.ru;Бубнышев Сергей -madinaxyt@mail.ru;Мадина -baltport@mail.ru;Илья Агафонов -iglatypov2010@yandex.ru;Латыпов Ильнур -ma1m2@mail.ru;Светлана Мажайкина -rm7m@mail.ru;Виталий Дорофеев -krrera@mail.ru;Арсен -aspushkin2395@gmail.com;Кирилл -jackf31@mail.ru;Игорь -mbr0969@gmail.com;Михаил -mas.proekt@mail.ru;Маслёнок Андрей -alexz1983@mail.ru;Захаров Александр -netbooks@mail.ru;Геннадий -ShoarR@gmail.com;Ульяна Джумок -andrey.poprotsky@gmail.com;Андрей -mad-dimon@mail.ru;Дмитрий -alekskolr@gmail.com;Алексей -avduckart@gmail.com;Дукарт Андрей -alion.dim@yandex.ru;Людмила -diadiasash@mail.ru;Александр -d77dk@mail.ru;Дмитрий -nvladislavn@gmail.com;Нечаев Владислав -vilislac@gmail.com;Григорий -mail4bsf@gmail.com;Станислав Быльченко -dmitriy.mosolov@gmail.com;Дмитрий Мосолов -misha41192@mail.ru;Михаил Скафенко -threed@rsgc.ru;Дмитрий Панфилов -public-mail@mail.ru;Тураев Константин -dmitry.mamonov@gmail.com;Дмитрий Мамонов -pabls@yandex.ru;Павел -kaa-work@yandex.ru;Антон -sergey@794979.ru;Сергей -makoron@mail.ru;Евгений Тимофеев -Elvis97rus@gmail.com;Артем -cprof777@gmail.com;Алексей Язьков -pushkinan@yandex.ru;Александр -aeugeniy@gmail.com;Евгений -Assarkhaddon@gmail.com;Чупов Александр -oglekler@gmail.com;Глеклер Ольга -roman@proskurnin.ru;Роман Проскурнин -mansur.by@gmail.com;Abilmansur -sglvzom@gmail.com;Николай -alex.v.andreev@gmail.com;Александр Васильевич Андреев -tsarevvs@bk.ru;Владимир -prusove@gmail.com;Евгений -soft-bi@mail.ru;Сергей -iyaroslav@yandex.ru;Ярослав -i.zaria@yandex.ru;Игорь -kgv63@mail.ru;Геннадий -pverbatim@mail.ru;Петр Андреев -vic.bandura@yandex.ru;Виктор Бандура -alex@titul-spb.ru;Александр Целищев -infdev@yandex.ru;Надежда -svirepyi@mail.ru;Вадим Измайлов -asavlukov@maxus.ru;Саша -karpov.g777@mail.ru;Карпов Евгений -cyberfancool@yandex.ru;Виталий -zamaev.aydrus@yandex.ru;Айдрус -edwd.mkrv@gmail.com;Эдуард Макаров -brmoney@ya.ru;Сергей - -# 5 -kutsko.v.v@yandex.ru;Василий -niki-1@yandex.ru;Сачков Денис -chabakvolodya@gmail.com;Володимир -texcomvit@gmail.com;Виталий -grandger@mail.ru;Степанов Александр -malov.alexsander@yandex.ru;Александр -9284330043@mail.ru;Дмитрий -baltport@mail.ru;Илья Агафонов -bubnyshev@lanit.ru;Бубнышев Сергей -ma1m2@mail.ru;Светлана Мажайкина -madinaxyt@mail.ru;Мдина -alekskolr@gmail.com;Алексей -rm7m@mail.ru;Виталий Дорофеев -andrey.poprotsky@gmail.com;Андрей -kaa-work@yandex.ru;Антон -public-mail@mail.ru;Тураев Константин -threed@rsgc.ru;Дмитрий Панфилов -diadiasash@mail.ru;Александр -makoron@mail.ru;Евгений Тимофеев -oglekler@gmail.com;Глеклер Ольга -mbr0969@gmail.com;Михаил -misha41192@mail.ru;Михаил Скафенко -nvladislavn@gmail.com;Нечаев Владислав -d77dk@mail.ru;Дмитрий -vilislac@gmail.com;Григорий -alion.dim@yandex.ru;Людмила -mansur.by@gmail.com;Abilmansur -mas.proekt@mail.ru;Маслёнок Андрей -alex.v.andreev@gmail.com;Александр Васильевич Андреев -aspushkin2395@gmail.com;Кирилл -Assarkhaddon@gmail.com;Чупов Александр -i.zaria@yandex.ru;Игорь -pushkinan@yandex.ru;Александр -sglvzom@gmail.com;Николай -tsarevvs@bk.ru;Владимир -dmitry.mamonov@gmail.com;Дмитрий Мамонов -prusove@gmail.com;Евгений -avduckart@gmail.com;Дукарт Андрей -iyaroslav@yandex.ru;Ярослав -kgv63@mail.ru;Геннадий -infdev@yandex.ru;Надежда -mail4bsf@gmail.com;Станислав Быльченко -svirepyi@mail.ru;Вадим Измайлов - -# 6 -kutsko.v.v@yandex.ru;Василий -texcomvit@gmail.com;Виталий -niki-1@yandex.ru;Сачков Денис -9284330043@mail.ru;Дмитрий -malov.alexsander@yandex.ru;Александр -baltport@mail.ru;Илья Агафонов -alekskolr@gmail.com;Алексей -d77dk@mail.ru;Дмитрий -alex.v.andreev@gmail.com;Александр Васильевич Андреев -mas.proekt@mail.ru;Маслёнок Андрей -prusove@gmail.com;Евгений -misha41192@mail.ru;Михаил Скафенко -kaa-work@yandex.ru;Антон -sglvzom@gmail.com;Николай - -# 7 -malov.alexsander@yandex.ru;Александр -9284330043@mail.ru;Дмитрий -baltport@mail.ru;Илья Агафонов -kaa-work@yandex.ru;Антон -alex.v.andreev@gmail.com;Александр Васильевич Андреев -kutsko.v.v@yandex.ru;Василий - -# iOS -# 1 -za-alex@yandex.ru;Алексей -o.kubyshkin@gmail.com;Олег -alexeyra2010@gmail.com;Alexey Redkin -mail@greatcoach.ru;Денис -2909763@gmail.com;Михаил Палкин -paveldance@mail.ru;павел лонкин -bogdanofandrey@gmail.com;Андрей -kborodavko2009@yandex.ru;Константин Бородавко -tsomuk@yandex.ru;Никита -okislyakov@gmail.com;Олег Кисляков -ivan.infbez@yandex.ru;Иван -wins00k@gmail.com;Андрей Тищенко -oleg@pendurov.com;Олег Пендуров -nns7@inbox.ru;Nikolay -igor.dyachkov89@gmail.om;Игорь -19871010@mail.ru;Мкртумян Нарек -artbataev@gmail.com;Владимир -dan98l@mail.ru;Даниил Голубятников -skripkin2410@gmail.com;Дмитрий -gkrasnoshlyk@gmail.com;Геннадий -iyaroslav@yandex.ru;Ярослав -rozental.igor@gmail.com;Игорь -for_new_job@bk.ru;Сергей Абрамян -diroy1287@gmail.com;Егор -malkolm063@yandex.ru;Андрей -roman@proskurnin.ru;Роман Проскурнин -bubnyshev@lanit.ru;Бубнышев Сергей -asylbekzhardekov@gmail.com;Асылбек -AnatoliiAndreev19@gmail.com;Анатолий -stas_shoshkin@rambler.ru;Шошкин Станислав -arzt2001@mail.ru;Михаил Смолиговец -madjaw@mail.ru;Андрей -meres28032000@gmail.com;Евгений -zopa_gopa@mail.ru;Ренат -Dron84@gmail.com;Андрей Шарунов -dmitry@senashenko.ru;Дмитрий Сенашенко -malenkaya.grafinya@mail.ru;Mikhaylova Lyubov - -# 2 -za-alex@yandex.ru;Алексей -alexeyra2010@gmail.com;Alexey Redkin -o.kubyshkin@gmail.com;Олег -mail@greatcoach.ru;Денис -2909763@gmail.com;Михаил Палкин -paveldance@mail.ru;павел лонкин -bayaliev.mar@yandex.ru;Мар -bogdanofandrey@gmail.com;Андрей -kborodavko2009@yandex.ru;Константин Бородавко -tsomuk@yandex.ru;Никита -okislyakov@gmail.com;Олег Кисляков -wins00k@gmail.com;Андрей Тищенко -19871010@mail.ru;Мкртумян Нарек -artbataev@gmail.com;Владимир -dan98l@mail.ru;Даниил Голубятников -skripkin2410@gmail.com;Дмитрий -gkrasnoshlyk@gmail.com;Геннадий -rozental.igor@gmail.com;Игорь Розенталь -diroy1287@gmail.com;Егор -for_new_job@bk.ru;Абрамян Сергей -Malkolm063@yandex.ru;Андрей -bubnyshev@lanit.ru;Бубнышев Сергей -roman@proskurnin.ru;Роман Проскурнин -stas_shoshkin@rambler.ru;Шошкин Станислав -asylbekzhardekov@gmail.com;Асылбек -AnatoliiAndreev19@gmail.com;Анатолий -arzt2001@mail.ru;Михаил Смолиговец -zopa_gopa@mail.ru;Ренат - -# 3 -alexeyra2010@gmail.com;Alexey Redkin -mail@greatcoach.ru;Денис -o.kubyshkin@gmail.com;Олег -paveldance@mail.ru;павел лонкин -tsomuk@yandex.ru;Никита -bayaliev.mar@yandex.ru;Mar -kborodavko2009@yandex.ru;Константин Бородавко -okislyakov@gmail.com;Олег Кисляков -bogdanofandrey@gmail.com;Андрей -za-alex@yandex.ru;Алексей -wins00k@gmail.com;Андрей Тищенко -nns7@inbox.ru;Nikolay -19871010@mail.ru;Мкртумян Нарек -artbataev@gmail.com;Владимир -skripkin2410@gmail.com;Дмитрий -oleg@pendurov.com;Олег Пендуров -gkrasnoshlyk@gmail.com;Геннадий -rozental.igor@gmail.com;Игорь -dan98l@mail.ru;Даниил Голубятников -diroy1287@gmail.com;Егор -malkolm063@yandex.ru;Андрей -roman@proskurnin.ru;Роман Проскурнин -bubnyshev@lanit.ru;Бубнышев Сергей -asylbekzhardekov@gmail.com;Асылбек -madjaw@mail.ru;Андрей -arzt2001@mail.ru;Михаил Смолиговец -AnatoliiAndreev19@gmail.com;Анатолий -stas_shoshkin@rambler.ru;Шошкин Станислав -for_new_job@bk.ru;Сергей Абрамян -zopa_gopa@mail.ru;Ренат -dmitry@senashenko.ru;Дмитрий Сенашенко - -# 4 -o.kubyshkin@gmail.com;Олег -kborodavko2009@yandex.ru;Константин Бородавко -bogdanofandrey@gmail.com;Андрей -alexeyra2010@gmail.com;Alexey Redkin -za-alex@yandex.ru;Алексей -nns7@inbox.ru;Nikolay -artbataev@gmail.com;Владимир -wins00k@gmail.com;Андрей Тищенко -gkrasnoshlyk@gmail.com;Геннадий -skripkin2410@gmail.com;Дмитрий -rozental.igor@gmail.com;Игорь -roman@proskurnin.ru;Роман Проскурнин -malkolm063@yandex.ru;Андрей -bubnyshev@lanit.ru;Бубнышев Сергей -arzt2001@mail.ru;Михаил Смолиговец -madjaw@mail.ru;Андрей -asylbekzhardekov@gmail.com;Асылбек -stas_shoshkin@rambler.ru;Шошкин Станислав -AnatoliiAndreev19@gmail.com;Анатолий -dmitry@senashenko.ru;Дмитрий Сенашенко - -# 5 -o.kubyshkin@gmail.com;Олег -alexeyra2010@gmail.com;Alexey Redkin -nns7@inbox.ru;Nikolay -artbataev@gmail.com;Владимир -za-alex@yandex.ru;Алексей -gkrasnoshlyk@gmail.com;Геннадий -skripkin2410@gmail.com;Дмитрий -wins00k@gmail.com;Андрей Тищенко -rozental.igor@gmail.com;Игорь -roman@proskurnin.ru;Роман Проскурнин -madjaw@mail.ru;Андрей -asylbekzhardekov@gmail.com;Асылбек -bubnyshev@lanit.ru;Бубнышев Сергей - -# 6 -o.kubyshkin@gmail.com;Олег -alexeyra2010@gmail.com;Alexey Redkin -nns7@inbox.ru;Nikolay -artbataev@gmail.com;Владимир -gkrasnoshlyk@gmail.com;Геннадий -roman@proskurnin.ru;Роман Проскурнин -rozental.igor@gmail.com;Игорь -madjaw@mail.ru;Андрей -asylbekzhardekov@gmail.com;Асылбек -skripkin2410@gmail.com;Дмитрий - -# 7 -alexeyra2010@gmail.com;Alexey Redkin -nns7@inbox.ru;Nikolay -roman@proskurnin.ru;Роман Проскурнин -rozental.igor@gmail.com;Игорь -artbataev@gmail.com;Владимир -madjaw@mail.ru;Андрей -skripkin2410@gmail.com;Дмитрий - -# 8 -alexeyra2010@gmail.com;Alexey Redkin -nns7@inbox.ru;Nikolay -roman@proskurnin.ru;Роман Проскурнин -artbataev@gmail.com;Владимир -madjaw@mail.ru;Андрей -rozental.igor@gmail.com;Игорь -skripkin2410@gmail.com;Дмитрий - -# 9 -artbataev@gmail.com;Владимир -nns7@inbox.ru;Nikolay - -# Web -# 1 -gennadiy1983@ya.ru;Геннадий -artyomzolotykh@gmail.com;Артем -puzach@mail.ru;Пузач Влад -igorevich70@gmail.com;Игорь -ssprava@ukr.net;Галина Стриженко -mf915@mail.ru;Антон -espoirquebec@gmail.com;Мария Кравчук -artem.panteleev@aol.com;Артём -yandexru@icloud.com;Олег -alberto.man@mail.ru;Альберт -mahneva-mariya@mail.ru;Мария -alexweb85@yandex.ru;Александр -kylych1@yandex.ru;Кылыч -bestway305@yandex.ru;Артур -klu_lena@list.ru;Елена -bengard@yandex.ru;Наталья -jeged22@gmail.com;Виталий -omsterkhova@rambler.ru;Ольга -pugachiov.serezha@yandex.ru;сергей -kalina81@list.ru;Анна -nikolletss@gmail.com;Марина -obraztsova.che@yandex.ru;Екатерина -hakimov65@inbox.ru;Ринат -ob080270@voliacable.com;Олег -MAXYTA22@yandex.ru;Ирина -savax@rambler.ru;Дмитрий Савченко -secalol@gmail.com;ТЕСТ -8wicx@msgos.com;testJC -vlyagusha@justclick.ru;Вячеслав -PhilatovEvgeny@mail.ru;Евгений Филатов -gotcha10@yandex.ru;Андрей -remikont@inbox.ru;Михаил -kborodavko2009@yandex.ru;Константин Бородавко -tutmos3@yandex.ru;Павел Орловский -ebortnikov@mail.ru;Евгений Бортников -0964600@gmail.com;Oksana Popova -danil.kdo1@gmail.com;Даниил -chiganu@gmail.com;Евгения Гороха -wkmstr@mail.ru;Мераб -filchenkov.dima@mail.ru;Дмитрий -anton.alyoshin@hotmail.com;Антон Алешин -indrs@rambler.ru;Сергей -m.b.oper@Gmail.com;Кирилл -vladsemuk@gmail.com;Владислав -choodick@gmail.com;Амелин Артем -dvsvaran@mail.ru;Виталий -skorshuns@mail.ru;Сергей -strix1985@mail.ru;Анна -kira09051987@mail.ru;Гузель -serzhpodkolzin@yandex.ru;Сергей -torgbuk@mail.ru;Hromenko Nikolay -dyrnoj@bk.ru;Максим -vorona_1992@bk.ru;Валерия -susenko_a@ukr.net;Андрей Сусенко -d.work2011@yandex.ru;Светлана -VIP-Dantist@yandex.ru;Вячеслав -evgwar@yandex.ru;Евгений -kkvkk@mail.ru;Кирилл -nastusha1995is@gmail.com;Анастасия -strategybz@mail.ru;Александр -makguseff@yandex.ru;Максим Гусев -profiservic2@yandex.ru;Михаил -saliq.ilshat@gmail.com;Ильшат -9713943@mail.ru;Леонид -royline@mail.ru;Шаронова Ольга -iguar.k@ya.ru;Игорь Кузнецов -lanarich@mail.ru;Касьянова Руслана -lipsuke@mac.com;Дмитрий Фадеев -vmiretskaya@gmail.com;Viktoriia Miretska -acvyatin@mail.ru;Александр -vufer@inbox.ru;Сурен Вердиян -ritaces@inbox.lv;Rita Cevere -alexatro@yandex.ru;Александра Троянова -korovina_natasha@mail.ru;Наталья Коровина -oleg.akimov@mail.ru;Олег Акимов -Minigalin.nail.M@yandex.ru;Наиль -insait07@mail.ru;Багаутдинов Сергей -vip.samosadov@mail.ru;Алексей -5001010@bk.ru;Шемет Дмитрий -k.rachimov@mail.ru;Кирилл Рахимов -IVTsygankov@gmail.com;Иван -nikita-ftf@Mail.ru;Nikita Veselov -pertik@list.ru;Александр -xaba578@mail.ru;Хава Куркиева -carrera91167@inbox.ru;Елена -skostin@mail.ru;Сергей Костин -blackghost58@mail.ru;Илья -pavel.bosko@gmail.com;Павел -lcf-84@mail.ru;Сергей Калинкин -guipago@mail.ru;Dmitry -romankox1973@gmail.com;Роман -olgeraski@gmail.com;Ольга Гераськина -mainfilter@ya.ru;Сергей -mainfilter@yandex.ru;Сергей -kviva@yandex.ru;Виктор -sheniachiglazki@gmail.com;Филь Юлия -lexx59@gmail.com;Александр Пленкин -codemaster74@mail.ru;Марат Абдуллин -Yoooda1989@mail.ru;Максим Петров -chel200807@yandex.ru;Анатолий Емельянов -igor.kiyashchenko@mail.ru;Игорь Киященко -gyrka@yandex.ru;Андрей Гирка -marinemaks@yandex.ru;Мария Максимова -markovskaya_88@mail.ru;Наталья -okonogray@yahoo.com;Олеся Конограй -blackrum@yandex.ru;Роман Платонов -polkovnik51@vail.ru;Владимир -polkovnik51@mail.ru;Владимир -hazhaev@gmail.com;Рашид Хажаев -ci4rovik@mail.ru;Эдуард Фадеев -otik_kurdgelia@mail.ru;инна -a.silyaev@yandex.ru;Анвер Силяев -mkenes_2@mail.ru;Мадияр -servaredecaelo@gmail.com;Алина Гайбель -irena.kostina@mail.ru;ирина -vlg81@mail.ru;Галашев Вадим -ansserg@yandex.ru;Сергей -rorbah91@yandex.ru;Рорбах Олег -coop01@mail.ru;Андрей -nivshina@mail.ru;Анастасия Ившина -kovalev.home@mail.ru;Владимир Ковалев -walerock@mail.ru;Валерий -ngpk_lysenko@mail.ru;Виталий Лысенко -a.michurin1783@mail.ru;Артем Мичурин -tusrb@mail.ru;Тарасов Иван Григорьевич -aksay_sayt@mail.ru;Татьяна Велмакина -Kasyan12@mail.ru;Касьянов Александр -Slava666-2008@ya.ru;Вячеслав -optimizup@yandex.ru;Роман Марков -webprogrammer77@gmail.com;Прохоров Игорь -nserogoskaya@bk.ru;Серогодская Н. -lexinfox@mail.ru;Алексей Анциферов -nestetion@ya.ru;Анастасия -vadzimbelsky@rambler.ru;Вадим Бельский -afeldus@mail.ru;Anatoly Feldman -undead.koroleva2012@yandex.ru;Юлия -1ckaz@mail.ru;Асет -t.natalia_66@mail.ru;Мади -flintl@bk.ru;Кулаков Александр -test@test.ru;тест -afonin123@bk.ru;Александр -sekvenseralex@mail.ru;Вдовин Алексей Сергеевич -s.s.shuvalova@gmail.com;Светлана Шувалова -zlata.reznickova@yandex.ru;злата резникова -gak.anya@mail.ru;Ашатhttp://payment.mokselle.ru/training/file/t0vxFP7PL88KC7I50Ij7cROqIuF47J4l/ -veneta83@inbox.ru;Венета -igvassor@gmail.com;Игорь Сорокин -sir.oberst@yandex.ru;сергей -Vals_0791@mail.ru;Волкова Алиса -zefaa@mail.ru;Елена Зинченко -Yuriy1357@mail.ru;Юрий -galkov@mokselle.com;Максим -Alexander97@inbox.ru;Александр -saski@mail.ru;Сергей Малкин -A.MAILME@YANDEX.RU;Александра Скобелева -a05@list.ru;Углев Владимир -alexeidavljatov3@mail.ru;алексей -belous.maria@gmail.com;Мария -vikraokna@gmail.com;Дмитрий -ale-xey76@yandex.ru;Алексей -kuznetsovaelena1@mail.ru;Кузнецова Елена -9186532244@mail.ru;Кирилл Воронков -uvladz@gmail.com;Влад Ущаповский -bkr1@yandex.ru;Карэн -edwantoshin@rambler.ru;Эдуард Антошин -strig_elena@mail.ru;Новикова Елена Владимировна -ruslan71@bmail.ru;Руслан Мордачев -manamaha@mail.ru;Николай Дёров -igorkudenko1@gmail.com;Игорь Куденко -serggovs@yandex.ru;Говердовский Сергей -fom_iv@list.ru;Игорь Фоменко -www.Rifma@mail.ru;Сергей Мудряков -my-post@mail.ru;Татьяна -gnatenko.pavel@gmail.com;Павел Гнатенко -Serenya21@yandex.ru;Сергей -p0v13@mail.ru;Павел Погодин -regione-2000@ya.ru;Калугина Ольга Анатольевна -o.lif@gmx.de;Olena Lif -Evgeni2007@yandex.ru;Евгений -pipopka@bk.ru;Тепляшина Евгения Сергеевна -lrv92@mail.ru;Лукьянов Роман -irina.kisik@gmail.com;Ирина -denis3753@yandex.ru;Денис -newstas11@mail.ru;Станислав -2013ekaterina@mail.ru;Олег Ляшенко -shelbyblack37@gmail.com;Екатерина -sheptun_marina@mail.ru;Marina Ovchinnikova -senior.perfiliew@ya.ru;Иван Перфильев -kindaleks@gmail.com;Алексей -romanov.hk@gmail.com;Илья -ganin-va@yandex.ru;Василий Ганин -dine77e@gmail.com;Роман -pashtynov@mail.ru;Дмитрий Паштынов -deniskhig@yandex.ru;Денис -kazzak2008@rambler.ru;задание №1 Алексей Казаков -alvk3@yandex.ru;Алексей Кочанов -djsergeykovanin@mail.ru;Кованин Сергей -adastra.m@yandex.ru;Мокрушин Вячеслав -valero_sv@mail.ru;Валерий Сорока -anik4366@mail.ru;Анна Борисенко -maks2546@mail.ru;Максим -elabuga-dar@yandex.ru;Ольга Шапоренко -felix.80808@mail.ru;Евгений -taurus19901@mail.ru;Вячеслав Скрыпник -artur.mandrich.99@mail.ru;Мандрич Артур -kostgr@rambler.ru;Константин Гребенюков -avkan@meta.ua;Андрей Кандыба -green2536@yandex.ru;Сергей -turist2015@ya.ru;Артем -konstantinov2006@yandex.ru;Константинов Евгений -julia_dea@mail.ru;Юлия Белоусова -yglazy@mail.ru;Юрий -gisstyle@yandex.ru;Анастасия Гофман -vladislav-avdeev@mail.ru;Владислав -osmusic17@gmail.com;Александр Богданович -shaspir@mail.ru;Хоха Илья -okislyakov@gmail.com;Олег Кисляков -donder@yandex.ru;Пастухов Данил -nadin12233@mail.ru;Надежда -2906300@inbox.ru;Ильсур -nabelka@ya.ru;Ната -vic.bandura@yandex.ru;Виктор Бандура -andrey777@maryno.net;Улякин Андрей Юрьевич -vgric@mail.ru;Виктория Гриценко -sokol4eg@mail.ru;Михаил Соколов -riseagain@inbox.ru;Лина -Usov_88@mail.ru;Сергей -dmitriylarin@bk.ru;Дмитрий Ларин -hotmustang@mail.ru;Лебедь Алексей -gp@bipon.ru;Геннадий -iborzik@gmail.com;Ирина Борзик -a.v.kurlovich@gmail.com;Александр -mobils100@yandex.ru;Максим Сурков -opti72@ukr.net;Александр -serge-meb@mail.ru;Сергей -andru_45@list.ru;Андрей -evseev@dubna.ru;Юрий Евсеев -mk@bagur.su;Кирилл Мещерин -dontsurrender@ya.ru;Сергей Терехов -niki-1@yandex.ru;Сачков Денис -ansierra@mail.ru;Анна Губарева -anton_semenchuk@rambler.ru;Антон -biznice@yandex.ru;Леонид -tsvetkovaai@yandex.ru;Цветкова Анна -akoziy@ya.ru;Андрей Козий -katerium@mail.ru;Екатерина -rock_n_vladok@mail.ru;Дурин Владислав -alxsrtv@gmail.com;Александр -kirillrumyantsev1971@gmail.com;Кирилл Румянцев -utk1@list.ru;Владимир Макеев -stepanuk1987@yandex.ru;Алексей -dron_andr_2007@mail.ru;Анлрей -elgus2007@yandex.ru;Гусельников Сергей -dmitroff197@yandex.ru;Дмитрий -mislavsky@yandex.ru;Максим Миславский -mikhail_efimov@mail.ru;Михаил Ефимов -julia210384otto@yandex.ru;Юлия Ванина -trippleyes@gmail.com;Roman Izotov -ann_posh@rambler.ru;Анна Сысоева -alpe@b2bresearch.com;Александр Петросян -rkrivtsov@gmail.com;Роман Кривцов -barchakov@gmail.com;Берс -bet-ekaterina@mail.ru;Бетина Екатерина -adrinalin17@yandex.ru;Сергей -deltaz1@mail.ru;Николай Матюшов -sovalianna@gmail.com;Natalia Nosanova -msp081152@mail.ru;Сергей Малахов -stas_ravskiy-95@mail.ru;Равский Станислав -lysenko.mi@gmail.com;Марк Лысенко -itshepard57574@gmail.com;Руслан -ekbregionetrader@gmail.com;Валентин -vladimir_glight@mail.ru;Владимир -orloff.eg@yandex.ru;Данил -artsfabrica@gmail.com;Игорь Донцов -megafabr@yandex.ru;Николай Беляев -ks2007a@yandex.ru;Константин -mari.kravchuk78@mail.ru;Мария Кравчук -apishvanov@gmail.com;Александр Пишванов -nikitakozh@ukr.net;Кожевников Никита -romagrog@gmail.com;Роман -vitaliy.a.2015@mail.ru;Виталий Анищенко -stacyinner@gmail.com;Анастасия Сергейчук -geogrii-cobolev@mail.ru;Юрий Соболев -o.gricenko@yandex.ru;Олег -233868@gmail.com;Николай -artyomzykov@gmail.com;Артем -web-school-voicehovich@yandex.ru;Михаил Войцехович -elena_polyakova84@mail.ru;Полякова Елена -d.tiganov@yandex.ru;Дмитрий Тиганов -ziv1@yandex.ru;Игорь Золотарев -svmc@ya.ru;Владимир -79296628851@yandex.ru;Дмитрий -videograf2007@yandex.ru;Андрей -gabeda@yandex.ru;Юлия Габеда -qman_2@mail.ru;Василий Вдовин -bb-klub@mail.ru;Алексей Федотов -sj22@ya.ru;Ольга Белова -vladvolod@yandex.ru;Владислав Володин -sokol-judo92@mail.ru;Кирилл Соколов -yoga@satvasamui.com;Черемикин Александр -artis72@ya.ru;Артем Исаев -aselya.bekenova@gmail.com;Асель Бекенова -sveta.utemova@bk.ru;Света -vadigoryache@yandex.ru;вадим горячев -alvar63@mail.ru;Лариса Варавина -edwardb@ngs.ru;Эдуцард Бурлаков -volnov_mv@mail.ru;Максим -threed@rsgc.ru;Дмитрий Панфилов -creps92@yandex.ru;Максим Гамаюнов -vip.alex113@mail.ru;Александр Андросов -gamer1648@yandex.ru;Виктор -zev3b@yandex.ru;Евгений Зеленько -petrsushko@mail.ru;Петр Сушко -brolya@bk.ru;Бражинская Ольга -polikor-n@yandex.ru;Олег Радаев -unitbox@mail.ru;Бобух Эдуард -kvon@list.ru;Ольга Колодкина -kira.kostenko@gmail.com;Кира Костенко -galyna.pon@gmail.com;Galina Ponomarenko -galapub@ya.ru;Галина Бутенко -euro2@yandex.ru;Александр Блохинов -zel-mirra@bk.ru;Вадим -anika2006@yandex.ru;Алексей Аникин -vlkuprianov@gmail.com;Владимир Куприянов -vavilov_alex@mail.ru;alex -aamlhv@yandex.ru;Малахов Антон -andreidem4enko@yandex.ru;Демченко Андрей -office@eskd72.ru;Дмитрий -naurale@yandex.ru;Илья -ahnuria@mail.ru;Нурия -r61boff@mail.ru;Григорий Шевцов -vre@mail.ru;Kalinin -makr1975@yandex.ru;Максим -aivis@ukr.net;Щербаков Роман -martaw75@mail.ru;Мартыненко Анна -baigulova.indira@bk.ru;Индира Байгулова -lapinanatalya@mail.ru;Наталья -sanzhiku@gmail.com;Sanzhar Urazaliyev -amberleyley@gmail.com;Софья Прокофьева -nadvas0910@gmail.com;Nadezda -kvn0910@yandex.ru;Nadezda -vasiliy.moiseenko.64@mail.ru;Василий Моисеенко -teamaks@mail.ru;Maksym -tyapushkina1976@gmail.com;Светлана -teacoffee@i.ua;Максим -faridweb23@gmail.com;Фарид -dmn@isida.com.ru;Димитрий Милакин -k.erofeew@gmail.com;Кирилл Ерофеев -otdeda@gmail.com;Федор Усков -svtbiz@inbox.ru;Светлана Титова -ua67850@yandex.ru;алексей -komichok@mail.ru;Андрей Комаров -vvuch@ya.ru;Вячеслав Волков -sadness.sv@gmail.com;Vyacheslav -oly_armavir@mail.ru;Ольга -d6232@bugmir.net;Дмитрий Теслюк -Gralle@yandex.ru;Инна Овчинникова -peters2004@yandex.ru;Соловьёв Пётр -yusupowa.alfia2017@yandex.ru;Альфия Юсупова -ksenija.petriv@gmail.com;Ksenia -polet2107@ya.ru;Вадим -Germanjuk-artm@rambler.ru;Артём Германюк -homevent@gmail.com;Константин Черепанов -skop.1984@mail.ru;Юлия -j.haustov@gmail.com;Евгений -belokrylov.al@mail.ru;Алексей -vktmb@mail.ru;Валерий Каныгин -tsubasa@tut.by;Валера -Ddinamit.i@gmail.com;Илья Облогин -vanologvin@gmail.com;Иван -Dron84@gmail.com;Андрей Шарунов -ekarniymamay@mil.ru;Анастасия -idval@imedia.ru;Валерий -Ft_inferno@mail.ru;Евгений -lev0315@mail.ru;Лев Каменев -tatyana.best@list.ru;Татьяна Авдеева -strekozec12@gmail.com;Алексей -p_orlov@list.ru;Pavel Orlov -tehfoxen@yandex.ru;Алехина Татьяна -sveta250694@mail.ru;Светлана Спорынина -olypash-alians@yandex.ru;Ольга Пашкова -promenergo.ch@gmail.com;Андрей Медведев -Umi-chan_1992@mail.ru;Марина Куксова -shevchuka@gmail.com;Алексей -zhuklevich87@gmail.com;Stanislav Zhuklevich -karpov.g777@mail.ru;Карпов Евгений -gnk413666@yandex.ru;Алексей Щукин -sirius1991dav_asa@mail.ru;Анастасия Дойникова -akaymanov@yandex.ru;Андрей Кайманов -dsolomennikova@gmail.com;Daria Solomennikova -a.rassmagin@mail.ru;Алексей -npg2009@rambler.ru;Павло Галамейко -pyosha@yandex.ru;Коваленко Наталья -harleyhp@mail.ru;Александр -nagval07@mail.ru;Сергей -ghoul666@gmail.com;Дмитрий Алексеенко -adik69@list.ru;Алексанр Адеев - -# 2 -kylych1@yandex.ru;Кылыч -artyomzolotykh@gmail.com;Артем -omsterkhova@rambler.ru;Ольга -igorevich70@gmail.com;Игорь -ssprava@ukr.net;Галина Стриженко -bestway305@yandex.ru;Артур -artem.panteleev@aol.com;Артём -gennadiy1983@ya.ru;Геннадий -obraztsova.che@yandex.ru;Екатерина -kalina81@list.ru;Анна -mahneva-mariya@mail.ru;Мария -mf915@mail.ru;Антон -MAXYTA22@yandex.ru;Ирина -ob080270@voliacable.com;Олег -puzach@mail.ru;Пузач Влад -klu_lena@list.ru;Елена -pugachiov.serezha@yandex.ru;сергей -savax@rambler.ru;Дмитрий Савченко -hakimov65@inbox.ru;Ринат -espoirquebec@gmail.com;Мария Кравчук -alexweb85@yandex.ru;Александр -yandexru@icloud.com;Олег -nikolletss@gmail.com;Марина -alberto.man@mail.ru;Альберт -PhilatovEvgeny@mail.ru;Евгений Филатов -gotcha10@yandex.ru;Андрей -kborodavko2009@yandex.ru;Константин Бородавко -tutmos3@yandex.ru;Павел Орловский -danil.kdo1@gmail.com;Даниил -0964600@gmail.com;Oksana Popova -ebortnikov@mail.ru;Евгений Бортников -remikont@inbox.ru;Михаил -wkmstr@mail.ru;Мераб -chiganu@gmail.com;Евгения Гороха -choodick@gmail.com;Амелин Артем -anton.alyoshin@hotmail.com;Антон Алешин -indrs@rambler.ru;Сергей -serzhpodkolzin@yandex.ru;Сергей -susenko_a@ukr.net;Андрей Сусенко -d.work2011@yandex.ru;Светлана -kira09051987@mail.ru;Гузель -strix1985@mail.ru;Анна -vladsemuk@gmail.com;Владислав -VIP-Dantist@yandex.ru;Вячеслав -torgbuk@mail.ru;Hromenko Nikolay -filchenkov.dima@mail.ru;Дмитрий -m.b.oper@Gmail.com;Кирилл -dyrnoj@bk.ru;Максим -kkvkk@mail.ru;Кирилл -strategybz@mail.ru;Александр -nastusha1995is@gmail.com;Анастасия -makguseff@yandex.ru;Максим Гусев -profiservic2@yandex.ru;Михаил -iguar.k@ya.ru;Игорь Кузнецов -9713943@mail.ru;Леонид -saliq.ilshat@gmail.com;Ильшат -vmiretskaya@gmail.com;Viktoriia Miretska -vorona_1992@bk.ru;Валерия -royline@mail.ru;Шаронова Ольга -vufer@inbox.ru;Сурен Вердиян -lanarich@mail.ru;Касьянова Руслана -lipsuke@mac.com;Дмитрий Фадеев -alexatro@yandex.ru;Александра Троянова -ritaces@inbox.lv;Rita Cevere -acvyatin@mail.ru;Александр -oleg.akimov@mail.ru;Олег Акимов -Minigalin.nail.M@yandex.ru;Наиль -korovina_natasha@mail.ru;Наталья Коровина -k.rachimov@mail.ru;Кирилл Рахимов -5001010@bk.ru;Шемет Дмитрий -vip.samosadov@mail.ru;Алексей -nikita-ftf@Mail.ru;Nikita Veselov -skorshuns@mail.ru;Сергей -IVTsygankov@gmail.com;Иван -pertik@list.ru;Александр -blackghost58@mail.ru;Илья -skostin@mail.ru;Сергей Костин -guipago@mail.ru;Dmitry -pavel.bosko@gmail.com;Павел -lcf-84@mail.ru;Сергей Калинкин -carrera91167@inbox.ru;Елена -olgeraski@gmail.com;Ольга Гераськина -romankox1973@gmail.com;Роман -mainfilter@yandex.ru;Сергей -kviva@yandex.ru;Виктор -sheniachiglazki@gmail.com;Филь Юлия -Yoooda1989@mail.ru;Максим Петров -codemaster74@mail.ru;Марат Абдуллин -xaba578@mail.ru;Хава Куркиева -chel200807@yandex.ru;Анатолий Емельянов -lexx59@gmail.com;Александр Пленкин -gyrka@yandex.ru;Андрей Гирка -marinemaks@yandex.ru;Мария Максимова -blackrum@yandex.ru;Роман Платонов -hazhaev@gmail.com;Рашид Хажаев -okonogray@yahoo.com;Олеся Конограй -markovskaya_88@mail.ru;Наталья -a.silyaev@yandex.ru;Анвер Силяев -ci4rovik@mail.ru;Эдуард Фадеев -mkenes_2@mail.ru;Мадияр -otik_kurdgelia@mail.ru;инна -irena.kostina@mail.ru;ирина -servaredecaelo@gmail.com;Алина Гайбель -polkovnik51@mail.ru;Владимир -vlg81@mail.ru;Галашев Вадим -rorbah91@yandex.ru;Рорбах Олег -ansserg@yandex.ru;Сергей -walerock@mail.ru;Валерий -bengard@yandex.ru;Наталья -a.michurin1783@mail.ru;Артем Мичурин -ngpk_lysenko@mail.ru;Виталий Лысенко -evgwar@yandex.ru;Евгений -insait07@mail.ru;Багаутдинов Сергей -kovalev.home@mail.ru;Владимир Ковалев -aksay_sayt@mail.ru;Татьяна Вельмакина -tusrb@mail.ru;Тарасов Иван Григорьевич -webprogrammer77@gmail.com;Прохоров Игорь -lexinfox@mail.ru;Алексей Анциферов -Slava666-2008@ya.ru;Вячеслав -vadzimbelsky@rambler.ru;Вадим Бельский -nestetion@yandex.ru;Анастасия -igor.kiyashchenko@mail.ru;Игорь Киященко -flintl@bk.ru;Кулаков Александр -t.natalia_66@mail.ru;Мади -afonin123@bk.ru;Александр -undead.koroleva2012@yandex.ru;Юлия -Kasyan12@mail.ru;Касьянов Александр -s.s.shuvalova@gmail.com;Светлана Шувалова -1ckaz@mail.ru;Асет -sir.oberst@yandex.ru;сергей -igvassor@gmail.com;Игорь Сорокин -zlata.reznickova@yandex.ru;злата резникова -sekvenseralex@mail.ru;Вдовин Алексей Сергеевич -Vals_0791@mail.ru;Волкова Алиса -A.MAILME@YANDEX.RU;Александра Скобелева -saski@mail.ru;Сергей Малкин -a05@list.ru;Углев Владимир -zefaa@mail.ru;Елена Зинченко -gak.anya@mail.ru;Ашатhttp://payment.mokselle.ru/training/file/t0vxFP7PL88KC7I50Ij7cROqIuF47J4l/ -Yuriy1357@mail.ru;Юрий -vikraokna@gmail.com;Дмитрий -ale-xey76@yandex.ru;Алексей -belous.maria@gmail.com;Мария -galkov@mokselle.com;Максим -coop01@mail.ru;Андрей -9186532244@mail.ru;Кирилл Воронков -kuznetsovaelena1@mail.ru;Кузнецова Елена -uvladz@gmail.com;Влад Ущаповский -bkr1@yandex.ru;Карэн -ruslan71@bmail.ru;Руслан Мордачев -edwantoshin@rambler.ru;Эдуард Антошин -veneta83@inbox.ru;Венета -strig_elena@mail.ru;Новикова Елена Владимировна -manamaha@mail.ru;Николай Дёров -optimizup@yandex.ru;Роман Марков -www.Rifma@mail.ru;Сергей Мудряков -serggovs@yandex.ru;Говердовский Сергей -my-post@mail.ru;Татьяна -alexeidavljatov3@mail.ru;алексей давлятов -gnatenko.pavel@gmail.com;Павел Гнатенко -Serenya21@yandex.ru;Сергей -regione-2000@ya.ru;Калугина Ольга Анатольевна -fom_iv@list.ru;Игорь Фоменко -Alexander97@inbox.ru;Александр -p0v13@mail.ru;Павел Погодин -irina.kisik@gmail.com;Ирина -Evgeni2007@yandex.ru;Евгений -pipopka@bk.ru;Тепляшина Евгения Сергеевна -lrv92@mail.ru;Лукьянов Роман -kindaleks@gmail.com;Алексей -o.lif@gmx.de;Olena Lif -newstas11@mail.ru;Станислав -senior.perfiliew@ya.ru;Иван Перфильев -romanov.hk@gmail.com;Илья -denis3753@yandex.ru;Денис -sheptun_marina@mail.ru;Marina Ovchinnikova -shelbyblack37@gmail.com;Екатерина -igorkudenko1@gmail.com;Игорь Куденко -ganin-va@yandex.ru;Василий Ганин -2013ekaterina@mail.ru;Олег Ляшенко -djsergeykovanin@mail.ru;Кованин Сергей -deniskhig@yandex.ru;Денис -kazzak2008@rambler.ru;задание №2 Алексей Казаков -elabuga-dar@yandex.ru;Ольга Шапоренко -adastra.m@yandex.ru;Мокрушин Вячеслав -anik4366@mail.ru;Анна Борисенко -artur.mandrich.99@mail.ru;Мандрич Артур -pashtynov@mail.ru;Дмитрий Паштынов -valero_sv@mail.ru;Валерий Сорока -dine77e@gmail.com;Роман -taurus19901@mail.ru;Вячеслав Скрыпник -kostgr@rambler.ru;Константин Гребенюков -avkan@meta.ua;Андрей Кандыба -green2536@yandex.ru;Сергей -felix.80808@mail.ru;Евгений -maks2546@mail.ru;Максим -gisstyle@yandex.ru;Анастасия Гофман -yglazy@mail.ru;Юрий -shaspir@mail.ru;Хоха Илья -konstantinov2006@yandex.ru;Константинов Евгений -julia_dea@mail.ru;Юлия Белоусова -donder@yandex.ru;Пастухов Данил -okislyakov@gmail.com;Олег Кисляков -nabelka@ya.ru;Ната -turist2015@ya.ru;Артем -nadin12233@mail.ru;Надежда -vladislav-avdeev@mail.ru;Владислав -2906300@inbox.ru;Ильсур -andrey777@maryno.net;Улякин Андрей Юрьевич -osmusic17@gmail.com;Александр Богданович -riseagain@inbox.ru;Лина -sokol4eg@mail.ru;Михаил Соколов -vic.bandura@yandex.ru;Виктор Бандура -Usov_88@mail.ru;Сергей -dmitriylarin@bk.ru;Дмитрий Ларин -mobils100@yandex.ru;Максим Сурков -iborzik@gmail.com;Ирина Борзик -gp@bipon.ru;Геннадий -hotmustang@mail.ru;Лебедь Алексей -a.v.kurlovich@gmail.com;Александр -serge-meb@mail.ru;Сергей -andru_45@list.ru;Андрей -mk@bagur.su;Кирилл Мещерин -dontsurrender@ya.ru;Сергей Терехов -niki-1@yandex.ru;Сачков Денис -evseev@dubna.ru;Юрий Евсеев -ansierra@mail.ru;Анна Губарева -biznice@yandex.ru;Леонид -anton_semenchuk@rambler.ru;Антон -tsvetkovaai@yandex.ru;Цветкова Анна -utk1@list.ru;Владимир Макеев -kirillrumyantsev1971@gmail.com;Кирилл Румянцев -alxsrtv@gmail.com;Александр -katerium@mail.ru;Екатерина -mikhail_efimov@mail.ru;Михаил Ефимов -dmitroff197@yandex.ru;Дмитрий -rock_n_vladok@mail.ru;Дурин Владислав -stepanuk1987@yandex.ru;Алексей -akoziy@ya.ru;Андрей Козий -mislavsky@yandex.ru;Максим Миславский -dron_andr_2007@mail.ru;Анлрей -elgus2007@yandex.ru;Гусельников Сергей -ann_posh@rambler.ru;Анна Сысоева -julia210384otto@yandex.ru;Юлия Ванина -rkrivtsov@gmail.com;Роман Кривцов -barchakov@gmail.com;Берс -adrinalin17@yandex.ru;Сергей -trippleyes@gmail.com;Roman Izotov -sovalianna@gmail.com;Natalia Nosanova -msp081152@mail.ru;Сергей Малахов -bet-ekaterina@mail.ru;Бетина Екатерина -stas_ravskiy-95@mail.ru;Равский Станислав -lysenko.mi@gmail.com;Марк Лысенко -ekbregionetrader@gmail.com;Валентин -orloff.eg@yandex.ru;Данил -itshepard57574@gmail.com;Руслан -vladimir_glight@mail.ru;Владимир -alpe@b2bresearch.com;Александр Петросян -artsfabrica@gmail.com;Игорь Донцов -megafabr@yandex.ru;Николай Беляев -ks2007a@yandex.ru;Константин -romagrog@gmail.com;Роман -nikitakozh@ukr.net;Кожевников Никита -terraincod@gmail.com;Сергей -o.gricenko@yandex.ru;Олег -stacyinner@gmail.com;Анастасия Сергейчук -geogrii-cobolev@mail.ru;Юрий Соболев -vitaliy.a.2015@mail.ru;Виталий Анищенко -artyomzykov@gmail.com;Артем -d.tiganov@yandex.ru;Дмитрий Тиганов -ziv1@yandex.ru;Игорь Золотарев -svmc@ya.ru;Владимир -79296628851@yandex.ru;Дмитрий -web-school-voicehovich@yandex.ru;Михаил Войцехович -gabeda@yandex.ru;Юлия Габеда -qman_2@mail.ru;Василий Вдовин -videograf2007@yandex.ru;Андрей -bb-klub@mail.ru;Алексей Федотов -sj22@ya.ru;Ольга Белова -aleksandr-a-2014@mail.ru;Алексей Федотов -artis72@ya.ru;Артем Исаев -sokol-judo92@mail.ru;Кирилл Соколов -aselya.bekenova@gmail.com;Асель Бекенова -vadigoryache@yandex.ru;вадим горячев -sveta.utemova@bk.ru;Света -threed@rsgc.ru;Дмитрий Панфилов -vladvolod@yandex.ru;Владислав Володин -volnov_mv@mail.ru;Максим -alvar63@mail.ru;Лариса Варавина -creps92@yandex.ru;Максим Гамаюнов -edwardb@ngs.ru;Эдуард Бурлаков -gamer1648@yandex.ru;Виктор -zev3b@yandex.ru;Евгений Зеленько -brolya@bk.ru;Бражинская Ольга -kira.kostenko@gmail.com;Кира Костенко -unitbox@mail.ru;Бобух Эдуард -polikor-n@yandex.ru;Олег Радаев -galapub@ya.ru;Галина Бутенко -zel-mirra@bk.ru;Вадим -kvon@list.ru;Ольга Колодкина -euro2@yandex.ru;Александр Блохинов -aamlhv@yandex.ru;Малахов Антон -vlkuprianov@gmail.com;Владимир Куприянов -anika2006@yandex.ru;Алексей Аникин -galyna.pon@gmail.com;Galina Ponomarenko -andreidem4enko@yandex.ru;Демченко Андрей -office@eskd72.ru;Дмитрий -ahnuria@mail.ru;Нурия -petrsushko@mail.ru;Петр Сушко -naurale@yandex.ru;Илья -r61boff@mail.ru;Григорий Шевцов -makr1975@yandex.ru;Максим -sanzhiku@gmail.com;Sanzhar Urazaliyev -martaw75@mail.ru;Мартыненко Анна -vasiliy.moiseenko.64@mail.ru;Василий Моисеенко -lapinanatalya@mail.ru;Наталья -faridweb23@gmail.com;Фарид -k.erofeew@gmail.com;Кирилл Ерофеев -baigulova.indira@bk.ru;Индира Байгулова -kvn0910@yandex.ru;Nadezda -teacoffee@i.ua;Максим -tyapushkina1976@gmail.com;Светлана Cмирнова -otdeda@gmail.com;Федор Усков -vvuch@ya.ru;Вячеслав Волков -oly_armavir@mail.ru;Ольга -svtbiz@inbox.ru;Светлана Титова -komichok@mail.ru;Андрей Комаров -elena_polyakova84@mail.ru;Полякова Елена -peters2004@yandex.ru;Соловьёв Пётр -ksenija.petriv@gmail.com;Ksenia -polet2107@ya.ru;Вадим -vavilov_alex@mail.ru;alex -Germanjuk-artm@rambler.ru;Артём Германюк -amberleyley@gmail.com;Софья Прокофьева -j.haustov@gmail.com;Евгений -tsubasa@tut.by;Валера -belokrylov.al@mail.ru;Алексей -Ddinamit.i@gmail.com;Илья Облогин -yusupova.alfia2014@yandex.ru;Альфия Юсупова -Dron84@gmail.com;Андрей Шарунов -vktmb@mail.ru;Валерий Каныгин -idval@imedia.ru;Валерий -tatyana.best@list.ru;Татьяна Авдеева -lev0315@mail.ru;Лев Каменев -strekozec12@gmail.com;Алексей -ua67850@yandex.ru;алексей -olypash-alians@yandex.ru;Ольга Пашкова -Ft_inferno@mail.ru;Евгений -promenergo.ch@gmail.com;Андрей Медведев -Umi-chan_1992@mail.ru;Марина Куксова -evgenia_litvina@mail.ru;Евгения Литвина -vanologvin@gmail.com;Иван -dsolomennikova@gmail.com;Daria Solomennikova -sirius1991dav_asa@mail.ru;Анастасия Дойникова -npg2009@rambler.ru;Павло Галамейко -harleyhp@mail.ru;Александр -akaymanov@yandex.ru;Андрей Кайманов -nagval07@mail.ru;Сергей -ghoul666@gmail.com;Дмитрий Алексеенко - -# 3 -omsterkhova@rambler.ru;Ольга -gennadiy1983@ya.ru;Геннадий -artyomzolotykh@gmail.com;Артем -ob080270@voliacable.com;Олег -mf915@mail.ru;Антон -kalina81@list.ru;Анна -igorevich70@gmail.com;Игорь -kylych1@yandex.ru;Кылыч -MAXYTA22@yandex.ru;Ирина -bestway305@yandex.ru;Артур -obraztsova.che@yandex.ru;Екатерина -pugachiov.serezha@yandex.ru;сергей -alexweb85@yandex.ru;Александр -klu_lena@list.ru;Елена -nikolletss@gmail.com;Марина -savax@rambler.ru;Дмитрий Савченко -mahneva-mariya@mail.ru;Мария -puzach@mail.ru;Пузач Влад -ssprava@ukr.net;Галина Стриженко -artem.panteleev@aol.com;Артём -hakimov65@inbox.ru;Ринат -alberto.man@mail.ru;Альберт -espoirquebec@gmail.com;Мария Кравчук -yandexru@icloud.com;Олег -PhilatovEvgeny@mail.ru;Евгений Филатов -kborodavko2009@yandex.ru;Константин Бородавко -tutmos3@yandex.ru;Павел Орловский -danil.kdo1@gmail.com;Даниил -ebortnikov@mail.ru;Евгений Бортников -chiganu@gmail.com;Евгения Гороха -remikont@inbox.ru;Михаил -0964600@gmail.com;Oksana Popova -anton.alyoshin@hotmail.com;Антон Алешин -wkmstr@mail.ru;Мераб -susenko_a@ukr.net;Андрей Сусенко -choodick@gmail.com;Амелин Артем -kira09051987@mail.ru;Гузель -d.work2011@yandex.ru;Светлана -indrs@rambler.ru;Сергей -serzhpodkolzin@yandex.ru;Сергей -VIP-Dantist@yandex.ru;Вячеслав -dyrnoj@bk.ru;Максим -strix1985@mail.ru;Анна -strategybz@mail.ru;Александр -kkvkk@mail.ru;Кирилл -makguseff@yandex.ru;Максим Гусев -filchenkov.dima@mail.ru;Дмитрий -9713943@mail.ru;Леонид -vladsemuk@gmail.com;Владислав -profiservic2@yandex.ru;Михаил -iguar.k@ya.ru;Игорь Кузнецов -torgbuk@mail.ru;Hromenko Nikolay -m.b.oper@Gmail.com;Кирилл -vmiretskaya@gmail.com;Viktoriia Miretska -vufer@inbox.ru;Сурен Вердиян -royline@mail.ru;Шаронова Ольга -alexatro@yandex.ru;Александра Троянова -nastusha1995is@gmail.com;Анастасия -oleg.akimov@mail.ru;Олег Акимов -ritaces@inbox.lv;Rita Cevere -lipsuke@mac.com;Дмитрий Фадеев -acvyatin@mail.ru;Александр -lanarich@mail.ru;Касьянова Руслана -Minigalin.nail.M@yandex.ru;Наиль -vorona_1992@bk.ru;Валерия -k.rachimov@mail.ru;Кирилл Рахимов -vip.samosadov@mail.ru;Алексей -nikita-ftf@Mail.ru;Nikita Veselov -5001010@bk.ru;Шемет Дмитрий -korovina_natasha@mail.ru;Наталья Коровина -pertik@list.ru;Александр -IVTsygankov@gmail.com;Иван -blackghost58@mail.ru;Илья -guipago@mail.ru;Dmitry -lcf-84@mail.ru;Сергей Калинкин -skostin@mail.ru;Сергей Костин -pavel.bosko@gmail.com;Павел -mainfilter@yandex.ru;Сергей -carrera91167@inbox.ru;Елена -olgeraski@gmail.com;Ольга Гераськина -romankox1973@gmail.com;Роман -Yoooda1989@mail.ru;Максим Петров -kviva@yandex.ru;Виктор -sheniachiglazki@gmail.com;Филь Юлия -skorshuns@mail.ru;Сергей -codemaster74@mail.ru;Марат Абдуллин -chel200807@yandex.ru;Анатолий Емельянов -xaba578@mail.ru;Хава Куркиева -marinemaks@yandex.ru;Мария Максимова -lexx59@gmail.com;Александр Пленкин -hazhaev@gmail.com;Рашид Хажаев -blackrum@yandex.ru;Роман Платонов -okonogray@yahoo.com;Олеся Конограй -a.silyaev@yandex.ru;Анвер Силяев -markovskaya_88@mail.ru;Наталья -irena.kostina@mail.ru;ирина -mkenes_2@mail.ru;Мадияр -otik_kurdgelia@mail.ru;инна -vlg81@mail.ru;Галашев Вадим -ansserg@yandex.ru;Сергей -a.michurin1783@mail.ru;Артем Мичурин -polkovnik51@mail.ru;Владимир -ci4rovik@mail.ru;Эдуард Фадеев -bengard@yandex.ru;Наталья -rorbah91@yandex.ru;Рорбах Олег -ngpk_lysenko@mail.ru;Виталий Лысенко -kovalev.home@mail.ru;Владимир Ковалев -servaredecaelo@gmail.com;Алина Гайбель -walerock@mail.ru;Валерий -aksay_sayt@mail.ru;Татьяна Вельмакина -vadzimbelsky@rambler.ru;Вадим Бельский -webprogrammer77@gmail.com;Прохоров Игорь -flintl@bk.ru;Кулаков Александр -Slava666-2008@ya.ru;Вячеслав -Kasyan12@mail.ru;Касьянов Александр -undead.koroleva2012@yandex.ru;Юлия -nestetion@yandex.ru;Анастасия -afonin123@bk.ru;Александр -s.s.shuvalova@gmail.com;Светлана Шувалова -igor.kiyashchenko@mail.ru;Игорь Киященко -sir.oberst@yandex.ru;сергей -t.natalia_66@mail.ru;Мади -A.MAILME@YANDEX.RU;Александра Скобелева -Vals_0791@mail.ru;Волкова Алиса -zlata.reznickova@yandex.ru;злата резникова -igvassor@gmail.com;Игорь Сорокин -lexinfox@mail.ru;Алексей Анциферов -saski@mail.ru;Сергей Малкин -sekvenseralex@mail.ru;Вдовин Алексей Сергеевич -zefaa@mail.ru;Елена Зинченко -1ckaz@mail.ru;Асет -vikraokna@gmail.com;Дмитрий -tusrb@mail.ru;Тарасов Иван Григорьевич -Yuriy1357@mail.ru;Юрий -ale-xey76@yandex.ru;Алексей -a05@list.ru;Углев Владимир -belous.maria@gmail.com;Мария -galkov@mokselle.com;Максим -kuznetsovaelena1@mail.ru;Кузнецова Елена -uvladz@gmail.com;Влад Ущаповский -9186532244@mail.ru;Кирилл Воронков -ruslan71@bmail.ru;Руслан Мордачев -edwantoshin@rambler.ru;Эдуард Антошин -strig_elena@mail.ru;Новикова Елена Владимировна -manamaha@mail.ru;Николай Дёров -www.Rifma@mail.ru;Сергей Мудряков -serggovs@yandex.ru;Говердовский Сергей -coop01@mail.ru;Андрей -my-post@mail.ru;Татьяна -bkr1@yandex.ru;Карэн -regione-2000@ya.ru;Калугина Ольга Анатольевна -gnatenko.pavel@gmail.com;Павел Гнатенко -fom_iv@list.ru;Игорь Фоменко -Evgeni2007@yandex.ru;Евгений -irina.kisik@gmail.com;Ирина -kindaleks@gmail.com;Алексей -Serenya21@yandex.ru;Сергей -lrv92@mail.ru;Лукьянов Роман -newstas11@mail.ru;Станислав -senior.perfiliew@ya.ru;Иван Перфильев -o.lif@gmx.de;Olena Lif -shelbyblack37@gmail.com;Екатерина -ganin-va@yandex.ru;Василий Ганин -pipopka@bk.ru;Тепляшина Евгения Сергеевна -romanov.hk@gmail.com;Илья -sheptun_marina@mail.ru;Marina Ovchinnikova -djsergeykovanin@mail.ru;Кованин Сергей -denis3753@yandex.ru;Денис -p0v13@mail.ru;Павел Погодин -2013ekaterina@mail.ru;Олег Ляшенко -artur.mandrich.99@mail.ru;Мандрич Артур -kazzak2008@rambler.ru;задание №3 Алексей Казаков -deniskhig@yandex.ru;Денис -pashtynov@mail.ru;Дмитрий Паштынов -taurus19901@mail.ru;Вячеслав Скрыпник -dine77e@gmail.com;Роман -adastra.m@yandex.ru;Мокрушин Вячеслав -kostgr@rambler.ru;Константин Гребенюков -felix.80808@mail.ru;Евгений -anik4366@mail.ru;Анна Борисенко -maks2546@mail.ru;Максим -shaspir@mail.ru;Хоха Илья -okislyakov@gmail.com;Олег Кисляков -gisstyle@yandex.ru;Анастасия Гофман -green2536@yandex.ru;Сергей -donder@yandex.ru;Пастухов Данил -avkan@meta.ua;Андрей Кандыба -nadin12233@mail.ru;Надежда -yglazy@mail.ru;Юрий -vladislav-avdeev@mail.ru;Владислав -2906300@inbox.ru;Ильсур -osmusic17@gmail.com;Александр Богданович -julia_dea@mail.ru;Юлия Белоусова -gak.anya@mail.ru;Ашатhttp://payment.mokselle.ru/training/file/t0vxFP7PL88KC7I50Ij7cROqIuF47J4l/ -andrey777@maryno.net;Улякин Андрей Юрьевич -konstantinov2006@yandex.ru;Константинов Евгений -sokol4eg@mail.ru;Михаил Соколов -valero_sv@mail.ru;Валерий Сорока -elabuga-dar@yandex.ru;Ольга Шапоренко -turist2015@ya.ru;Артем -vic.bandura@yandex.ru;Виктор Бандура -Usov_88@mail.ru;Сергей -riseagain@inbox.ru;Лина -nabelka@ya.ru;Ната -dmitriylarin@bk.ru;Дмитрий Ларин -mobils100@yandex.ru;Максим Сурков -gp@bipon.ru;Геннадий -iborzik@gmail.com;Ирина Борзик -serge-meb@mail.ru;Сергей -mk@bagur.su;Кирилл Мещерин -dontsurrender@ya.ru;Сергей Терехов -niki-1@yandex.ru;Сачков Денис -hotmustang@mail.ru;Лебедь Алексей -andru_45@list.ru;Андрей -biznice@yandex.ru;Леонид -anton_semenchuk@rambler.ru;Антон -Alexander97@inbox.ru;Александр -a.v.kurlovich@gmail.com;Александр -tsvetkovaai@yandex.ru;Цветкова Анна -utk1@list.ru;Владимир Макеев -katerium@mail.ru;Екатерина -mikhail_efimov@mail.ru;Михаил Ефимов -stepanuk1987@yandex.ru;Алексей -dmitroff197@yandex.ru;Дмитрий -kirillrumyantsev1971@gmail.com;Кирилл Румянцев -alxsrtv@gmail.com;Александр -rock_n_vladok@mail.ru;Дурин Владислав -ansierra@mail.ru;Анна Губарева -mislavsky@yandex.ru;Максим Миславский -ann_posh@rambler.ru;Анна Сысоева -insait07@mail.ru;Багаутдинов Сергей -elgus2007@yandex.ru;Гусельников Сергей -evseev@dubna.ru;Юрий Евсеев -dron_andr_2007@mail.ru;Анлрей -igorkudenko1@gmail.com;Игорь Куденко -barchakov@gmail.com;Берс -rkrivtsov@gmail.com;Роман Кривцов -akoziy@ya.ru;Андрей Козий -adrinalin17@yandex.ru;Сергей -msp081152@mail.ru;Сергей Малахов -sovalianna@gmail.com;Natalia Nosanova -lysenko.mi@gmail.com;Марк Лысенко -ekbregionetrader@gmail.com;Валентин -itshepard57574@gmail.com;Руслан -vladimir_glight@mail.ru;Владимир -stas_ravskiy-95@mail.ru;Равский Станислав -trippleyes@gmail.com;Roman Izotov -bet-ekaterina@mail.ru;Бетина Екатерина -megafabr@yandex.ru;Николай Беляев -artsfabrica@gmail.com;Игорь Донцов -alpe@b2bresearch.com;Александр Петросян -ks2007a@yandex.ru;Константин -orloff.eg@yandex.ru;Данил -romagrog@gmail.com;Роман -terraincod@gmail.com;Сергей -o.gricenko@yandex.ru;Олег -nikitakozh@ukr.net;Кожевников Никита -stacyinner@gmail.com;Анастасия Сергейчук -artyomzykov@gmail.com;Артем -geogrii-cobolev@mail.ru;Юрий Соболев -vitaliy.a.2015@mail.ru;Виталий Анищенко -d.tiganov@yandex.ru;Дмитрий Тиганов -svmc@ya.ru;Владимир -ziv1@yandex.ru;Игорь Золотарев -79296628851@yandex.ru;Дмитрий -bb-klub@mail.ru;Алексей Федотов -qman_2@mail.ru;Василий Вдовин -web-school-voicehovich@yandex.ru;Михаил Войцехович -aleksandr-a-2014@mail.ru;Алексей Федотов -gabeda@yandex.ru;Юлия Габеда -videograf2007@yandex.ru;Андрей -maruta-danil@mail.ru;Марута Даниил -artis72@ya.ru;Артем Исаев -aselya.bekenova@gmail.com;Асель Бекенова -vadigoryache@yandex.ru;вадим горячев -sveta.utemova@bk.ru;Света -threed@rsgc.ru;Дмитрий Панфилов -alvar63@mail.ru;Лариса Варавина -volnov_mv@mail.ru;Максим -creps92@yandex.ru;Максим Гамаюнов -sj22@ya.ru;Ольга Белова -sokol-judo92@mail.ru;Кирилл Соколов -gamer1648@yandex.ru;Виктор -zev3b@yandex.ru;Евгений Зеленько -brolya@bk.ru;Бражинская Ольга -vladvolod@yandex.ru;Владислав Володин -kira.kostenko@gmail.com;Кира Костенко -galapub@ya.ru;Галина Бутенко -edwardb@ngs.ru;Эдуард Бурлаков -zel-mirra@bk.ru;Вадим -aamlhv@yandex.ru;Малахов Антон -polikor-n@yandex.ru;Олег Радаев -anika2006@yandex.ru;Алексей Аникин -galyna.pon@gmail.com;Galina Ponomarenko -kvon@list.ru;Ольга Колодкина -vlkuprianov@gmail.com;Владимир Куприянов -euro2@yandex.ru;Александр Блохинов -office@eskd72.ru;Дмитрий -ahnuria@mail.ru;Нурия -andreidem4enko@yandex.ru;Демченко Андрей -r61boff@mail.ru;Григорий Шевцов -naurale@yandex.ru;Илья -petrsushko@mail.ru;Петр Сушко -makr1975@yandex.ru;Максим -sanzhiku@gmail.com;Sanzhar Urazaliyev -faridweb23@gmail.com;Фарид -lapinanatalya@mail.ru;Наталья -vasiliy.moiseenko.64@mail.ru;Василий Моисеенко -baigulova.indira@bk.ru;Индира Байгулова -teacoffee@i.ua;Максим -tyapushkina1976@gmail.com;Светлана Cмирнова -vvuch@ya.ru;Вячеслав Волков -otdeda@gmail.com;Федор Усков -oly_armavir@mail.ru;Ольга -julia210384otto@yandex.ru;Юлия Ванина -komichok@mail.ru;Андрей Комаров -polet2107@ya.ru;Вадим -peters2004@yandex.ru;Соловьёв Пётр -elena_polyakova84@mail.ru;Полякова Елена -svtbiz@inbox.ru;Светлана Титова -vavilov_alex@mail.ru;alex -kvn0910@yandex.ru;Nadezda -Germanjuk-artm@rambler.ru;Артём Германюк -j.haustov@gmail.com;Евгений -amberleyley@gmail.com;Софья Прокофьева -tsubasa@tut.by;Валера -Ddinamit.i@gmail.com;Илья Облогин -Dron84@gmail.com;Андрей Шарунов -vktmb@mail.ru;Валерий Каныгин -tatyana.best@list.ru;Татьяна Авдеева -idval@imedia.ru;Валерий -lev0315@mail.ru;Лев Каменев -yusupova.alfia2014@yandex.ru;Альфия Юсупова -promenergo.ch@gmail.com;Андрей Медведев -evgenia_litvina@mail.ru;Евгения Литвина -dsolomennikova@gmail.com;Daria Solomennikova -olypash-alians@yandex.ru;Ольга Пашкова -npg2009@rambler.ru;Павло Галамейко -harleyhp@mail.ru;Александр -nagval07@mail.ru;Сергей - -# 4 -gennadiy1983@ya.ru;Геннадий -kylych1@yandex.ru;Кылыч -omsterkhova@rambler.ru;Ольга -igorevich70@gmail.com;Игорь -artyomzolotykh@gmail.com;Артем -mf915@mail.ru;Антон -obraztsova.che@yandex.ru;Екатерина -bestway305@yandex.ru;Артур -MAXYTA22@yandex.ru;Максим -ob080270@voliacable.com;Олег -pugachiov.serezha@yandex.ru;сергей -savax@rambler.ru;Дмитрий Савченко -klu_lena@list.ru;Елена -nikolletss@gmail.com;Марина -kalina81@list.ru;Анна -mahneva-mariya@mail.ru;Мария -puzach@mail.ru;Пузач Влад -alexweb85@yandex.ru;Александр -artem.panteleev@aol.com;Артём -hakimov65@inbox.ru;Ринат -alberto.man@mail.ru;Альберт -ssprava@ukr.net;Галина Стриженко -espoirquebec@gmail.com;Мария Кравчук -PhilatovEvgeny@mail.ru;Евгений Филатов -tutmos3@yandex.ru;Павел Орловский -danil.kdo1@gmail.com;Даниил -kborodavko2009@yandex.ru;Константин Бородавко -ebortnikov@mail.ru;Евгений Бортников -chiganu@gmail.com;Евгения Гороха -anton.alyoshin@hotmail.com;Антон Алешин -remikont@inbox.ru;Михаил -susenko_a@ukr.net;Андрей Сусенко -wkmstr@mail.ru;Мераб -d.work2011@yandex.ru;Светлана -choodick@gmail.com;Амелин Артем -kkvkk@mail.ru;Кирилл -serzhpodkolzin@yandex.ru;Сергей -kira09051987@mail.ru;Гузель -dyrnoj@bk.ru;Максим -strix1985@mail.ru;Анна -VIP-Dantist@yandex.ru;Вячеслав -iguar.k@ya.ru;Игорь Кузнецов -vladsemuk@gmail.com;Владислав -profiservic2@yandex.ru;Михаил -makguseff@yandex.ru;Максим Гусев -indrs@rambler.ru;Сергей -filchenkov.dima@mail.ru;Дмитрий -9713943@mail.ru;Леонид -torgbuk@mail.ru;Hromenko Nikolay -vmiretskaya@gmail.com;Viktoriia Miretska -0964600@gmail.com;Oksana Popova -m.b.oper@Gmail.com;Кирилл -vufer@inbox.ru;Сурен Вердиян -alexatro@yandex.ru;Александра Троянова -royline@mail.ru;Шаронова Ольга -oleg.akimov@mail.ru;Олег Акимов -ritaces@inbox.lv;Rita Cevere -lipsuke@mac.com;Дмитрий Фадеев -acvyatin@mail.ru;Александр -nastusha1995is@gmail.com;Анастасия -Minigalin.nail.M@yandex.ru;Наиль -k.rachimov@mail.ru;Кирилл Рахимов -nikita-ftf@Mail.ru;Nikita Veselov -vip.samosadov@mail.ru;Алексей -lanarich@mail.ru;Касьянова Руслана -pertik@list.ru;Александр -5001010@bk.ru;Шемет Дмитрий -IVTsygankov@gmail.com;Иван -vorona_1992@bk.ru;Валерия -blackghost58@mail.ru;Илья -guipago@mail.ru;Dmitry -lcf-84@mail.ru;Сергей Калинкин -skostin@mail.ru;Сергей Костин -mainfilter@yandex.ru;Сергей -carrera91167@inbox.ru;Елена -korovina_natasha@mail.ru;Наталья Коровина -olgeraski@gmail.com;Ольга Гераськина -Yoooda1989@mail.ru;Максим Петров -romankox1973@gmail.com;Роман -pavel.bosko@gmail.com;Павел -kviva@yandex.ru;Виктор -marinemaks@yandex.ru;Мария Максимова -xaba578@mail.ru;Хава Куркиева -skorshuns@mail.ru;Сергей -sheniachiglazki@gmail.com;Филь Юлия -blackrum@yandex.ru;Роман Платонов -hazhaev@gmail.com;Рашид Хажаев -okonogray@yahoo.com;Олеся Конограй -a.silyaev@yandex.ru;Анвер Силяев -irena.kostina@mail.ru;ирина -chel200807@yandex.ru;Анатолий Емельянов -mkenes_2@mail.ru;Мадияр -lexx59@gmail.com;Александр Пленкин -strategybz@mail.ru;Александр -codemaster74@mail.ru;Марат Абдуллин -otik_kurdgelia@mail.ru;инна -markovskaya_88@mail.ru;Наталья -polkovnik51@mail.ru;Владимир -a.michurin1783@mail.ru;Артем Мичурин -ansserg@yandex.ru;Сергей -bengard@yandex.ru;Наталья -walerock@mail.ru;Валерий -ci4rovik@mail.ru;Эдуард Фадеев -ngpk_lysenko@mail.ru;Виталий Лысенко -servaredecaelo@gmail.com;Алина Гайбель -kovalev.home@mail.ru;Владимир Ковалев -aksay_sayt@mail.ru;Татьяна Вельмакина -vadzimbelsky@rambler.ru;Вадим Бельский -rorbah91@yandex.ru;Рорбах Олег -flintl@bk.ru;Кулаков Александр -webprogrammer77@gmail.com;Прохоров Игорь -Kasyan12@mail.ru;Касьянов Александр -s.s.shuvalova@gmail.com;Светлана Шувалова -Slava666-2008@ya.ru;Вячеслав -afonin123@bk.ru;Александр -nestetion@yandex.ru;Анастасия -undead.koroleva2012@yandex.ru;Юлия -t.natalia_66@mail.ru;Мади -A.MAILME@YANDEX.RU;Александра Скобелева -saski@mail.ru;Сергей Малкин -Vals_0791@mail.ru;Волкова Алиса -zefaa@mail.ru;Елена Зинченко -sir.oberst@yandex.ru;сергей -igvassor@gmail.com;Игорь Сорокин -1ckaz@mail.ru;Асет -sekvenseralex@mail.ru;Вдовин Алексей Сергеевич -vikraokna@gmail.com;Дмитрий -Yuriy1357@mail.ru;Юрий -ale-xey76@yandex.ru;Алексей -a05@list.ru;Углев Владимир -belous.maria@gmail.com;Мария -kuznetsovaelena1@mail.ru;Кузнецова Елена -tusrb@mail.ru;Тарасов Иван Григорьевич -uvladz@gmail.com;Влад Ущаповский -ruslan71@bmail.ru;Руслан Мордачев -9186532244@mail.ru;Кирилл Воронков -galkov@mokselle.com;Максим -vlg81@mail.ru;Галашев Вадим -zlata.reznickova@yandex.ru;злата резникова -strig_elena@mail.ru;Новикова Елена Владимировна -www.Rifma@mail.ru;Сергей Мудряков -edwantoshin@rambler.ru;Эдуард Антошин -serggovs@yandex.ru;Говердовский Сергей -my-post@mail.ru;Татьяна -manamaha@mail.ru;Николай Дёров -bkr1@yandex.ru;Карэн -coop01@mail.ru;Андрей -Evgeni2007@yandex.ru;Евгений -gnatenko.pavel@gmail.com;Павел Гнатенко -fom_iv@list.ru;Игорь Фоменко -kindaleks@gmail.com;Алексей -igor.kiyashchenko@mail.ru;Игорь Киященко -lrv92@mail.ru;Лукьянов Роман -regione-2000@ya.ru;Калугина Ольга Анатольевна -senior.perfiliew@ya.ru;Иван Перфильев -newstas11@mail.ru;Станислав -Serenya21@yandex.ru;Сергей -shelbyblack37@gmail.com;Екатерина -o.lif@gmx.de;Olena Lif -ganin-va@yandex.ru;Василий Ганин -irina.kisik@gmail.com;Ирина -djsergeykovanin@mail.ru;Кованин Сергей -pipopka@bk.ru;Тепляшина Евгения Сергеевна -sheptun_marina@mail.ru;Marina Ovchinnikova -2013ekaterina@mail.ru;Олег Ляшенко -artur.mandrich.99@mail.ru;Мандрич Артур -p0v13@mail.ru;Павел Погодин -deniskhig@yandex.ru;Денис -romanov.hk@gmail.com;Илья -kazzak2008@rambler.ru;задание №4 Алексей Казаков -pashtynov@mail.ru;Дмитрий Паштынов -adastra.m@yandex.ru;Мокрушин Вячеслав -kostgr@rambler.ru;Константин Гребенюков -maks2546@mail.ru;Максим -taurus19901@mail.ru;Вячеслав Скрыпник -donder@yandex.ru;Пастухов Данил -felix.80808@mail.ru;Евгений -gisstyle@yandex.ru;Анастасия Гофман -dine77e@gmail.com;Роман -okislyakov@gmail.com;Олег Кисляков -green2536@yandex.ru;Сергей -avkan@meta.ua;Андрей Кандыба -anik4366@mail.ru;Анна Борисенко -2906300@inbox.ru;Ильсур -vladislav-avdeev@mail.ru;Владислав -nadin12233@mail.ru;Надежда -osmusic17@gmail.com;Александр Богданович -julia_dea@mail.ru;Юлия Белоусова -shaspir@mail.ru;Хоха Илья -sokol4eg@mail.ru;Михаил Соколов -andrey777@maryno.net;Улякин Андрей Юрьевич -Usov_88@mail.ru;Сергей -yglazy@mail.ru;Юрий -riseagain@inbox.ru;Лина -nabelka@ya.ru;Ната -gak.anya@mail.ru;Ашатhttp://payment.mokselle.ru/training/file/t0vxFP7PL88KC7I50Ij7cROqIuF47J4l/ -turist2015@ya.ru;Артем -dmitriylarin@bk.ru;Дмитрий Ларин -vic.bandura@yandex.ru;Виктор Бандура -valero_sv@mail.ru;Валерий Сорока -mobils100@yandex.ru;Максим Сурков -konstantinov2006@yandex.ru;Константинов Евгений -elabuga-dar@yandex.ru;Ольга Шапоренко -serge-meb@mail.ru;Сергей -iborzik@gmail.com;Ирина Борзик -mk@bagur.su;Кирилл Мещерин -niki-1@yandex.ru;Сачков Денис -gp@bipon.ru;Геннадий -dontsurrender@ya.ru;Сергей Терехов -andru_45@list.ru;Андрей -biznice@yandex.ru;Леонид -tsvetkovaai@yandex.ru;Цветкова Анна -anton_semenchuk@rambler.ru;Антон -utk1@list.ru;Владимир Макеев -stepanuk1987@yandex.ru;Алексей -katerium@mail.ru;Екатерина -dmitroff197@yandex.ru;Дмитрий -kirillrumyantsev1971@gmail.com;Кирилл Румянцев -rock_n_vladok@mail.ru;Дурин Владислав -alxsrtv@gmail.com;Александр -a.v.kurlovich@gmail.com;Александр -ann_posh@rambler.ru;Анна Сысоева -barchakov@gmail.com;Берс -rkrivtsov@gmail.com;Роман Кривцов -dron_andr_2007@mail.ru;Анлрей -hotmustang@mail.ru;Лебедь Алексей -elgus2007@yandex.ru;Гусельников Сергей -msp081152@mail.ru;Сергей Малахов -evseev@dubna.ru;Юрий Евсеев -ansierra@mail.ru;Анна Губарева -sovalianna@gmail.com;Natalia Nosanova -lysenko.mi@gmail.com;Марк Лысенко -akoziy@ya.ru;Андрей Козий -ekbregionetrader@gmail.com;Валентин -itshepard57574@gmail.com;Руслан -stas_ravskiy-95@mail.ru;Равский Станислав -vladimir_glight@mail.ru;Владимир -mislavsky@yandex.ru;Максим Миславский -megafabr@yandex.ru;Николай Беляев -adrinalin17@yandex.ru;Сергей -ks2007a@yandex.ru;Константин -o.gricenko@yandex.ru;Олег -artsfabrica@gmail.com;Игорь Донцов -terraincod@gmail.com;Сергей -romagrog@gmail.com;Роман -orloff.eg@yandex.ru;Данил -stacyinner@gmail.com;Анастасия Сергейчук -artyomzykov@gmail.com;Артем -alpe@b2bresearch.com;Александр Петросян -nikitakozh@ukr.net;Кожевников Никита -bet-ekaterina@mail.ru;Бетина Екатерина -vitaliy.a.2015@mail.ru;Виталий Анищенко -d.tiganov@yandex.ru;Дмитрий Тиганов -ziv1@yandex.ru;Игорь Золотарев -79296628851@yandex.ru;Дмитрий -svmc@ya.ru;Владимир -geogrii-cobolev@mail.ru;Юрий Соболев -qman_2@mail.ru;Василий Вдовин -trippleyes@gmail.com;Roman Izotov -artis72@ya.ru;Артем Исаев -gabeda@yandex.ru;Юлия Габеда -vadigoryache@yandex.ru;вадим горячев -threed@rsgc.ru;Дмитрий Панфилов -alvar63@mail.ru;Лариса Варавина -volnov_mv@mail.ru;Максим -gamer1648@yandex.ru;Виктор -aselya.bekenova@gmail.com;Асель Бекенова -sveta.utemova@bk.ru;Света -creps92@yandex.ru;Максим Гамаюнов -brolya@bk.ru;Бражинская Ольга -zev3b@yandex.ru;Евгений Зеленько -sj22@ya.ru;Ольга Белова -vladvolod@yandex.ru;Владислав Володин -galapub@ya.ru;Галина Бутенко -kira.kostenko@gmail.com;Кира Костенко -sokol-judo92@mail.ru;Кирилл Соколов -aamlhv@yandex.ru;Малахов Антон -videograf2007@yandex.ru;Андрей -zel-mirra@bk.ru;Вадим -polikor-n@yandex.ru;Олег Радаев -galyna.pon@gmail.com;Galina Ponomarenko -edwardb@ngs.ru;Эдуард Бурлаков -anika2006@yandex.ru;Алексей Аникин -web-school-voicehovich@yandex.ru;Михаил Войцехович -euro2@yandex.ru;Александр Блохинов -kvon@list.ru;Ольга Колодкина -ahnuria@mail.ru;Нурия -vlkuprianov@gmail.com;Владимир Куприянов -office@eskd72.ru;Дмитрий -andreidem4enko@yandex.ru;Демченко Андрей -r61boff@mail.ru;Григорий Шевцов -Alexander97@inbox.ru;Александр -petrsushko@mail.ru;Петр Сушко -makr1975@yandex.ru;Максим -naurale@yandex.ru;Илья -faridweb23@gmail.com;Фарид -sanzhiku@gmail.com;Sanzhar Urazaliyev -vasiliy.moiseenko.64@mail.ru;Василий Моисеенко -vvuch@ya.ru;Вячеслав Волков -teacoffee@i.ua;Максим -oly_armavir@mail.ru;Ольга -tyapushkina1976@gmail.com;Светлана Cмирнова -polet2107@ya.ru;Вадим -komichok@mail.ru;Андрей Комаров -peters2004@yandex.ru;Соловьёв Пётр -baigulova.indira@bk.ru;Индира Байгулова -vavilov_alex@mail.ru;alex -svtbiz@inbox.ru;Светлана Титова -lapinanatalya@mail.ru;Наталья -kvn0910@yandex.ru;Nadezda -j.haustov@gmail.com;Евгений -amberleyley@gmail.com;Софья Прокофьева -tsubasa@tut.by;Валера -Germanjuk-artm@rambler.ru;Артём Германюк -Dron84@gmail.com;Андрей Шарунов -Ddinamit.i@gmail.com;Илья Облогин -tatyana.best@list.ru;Татьяна Авдеева -vktmb@mail.ru;Валерий Каныгин -idval@imedia.ru;Валерий -yusupova.alfia2014@yandex.ru;Альфия Юсупова -promenergo.ch@gmail.com;Андрей Медведев -elena_polyakova84@mail.ru;Полякова Елена -julia210384otto@yandex.ru;Юлия Ванина -evgenia_litvina@mail.ru;Евгения Литвина -olypash-alians@yandex.ru;Ольга Пашкова -npg2009@rambler.ru;Павло Галамейко -harleyhp@mail.ru;Александр -nagval07@mail.ru;Сергей - -# 5 -omsterkhova@rambler.ru;Ольга -savax@rambler.ru;Дмитрий Савченко -mf915@mail.ru;Антон -MAXYTA22@yandex.ru;Максим -gennadiy1983@ya.ru;Геннадий -nikolletss@gmail.com;Марина -bestway305@yandex.ru;Артур -pugachiov.serezha@yandex.ru;сергей -igorevich70@gmail.com;Игорь -artyomzolotykh@gmail.com;Артем -ob080270@voliacable.com;Олег -kylych1@yandex.ru;Кылыч -kalina81@list.ru;Анна -klu_lena@list.ru;Елена -obraztsova.che@yandex.ru;Екатерина -puzach@mail.ru;Пузач Влад -mahneva-mariya@mail.ru;Мария -alexweb85@yandex.ru;Александр -ssprava@ukr.net;Галина Стриженко -alberto.man@mail.ru;Альберт -hakimov65@inbox.ru;Ринат -artem.panteleev@aol.com;Артём -espoirquebec@gmail.com;Мария Кравчук -PhilatovEvgeny@mail.ru;Евгений Филатов -tutmos3@yandex.ru;Павел Орловский -kborodavko2009@yandex.ru;Константин Бородавко -ebortnikov@mail.ru;Евгений Бортников -danil.kdo1@gmail.com;Даниил -chiganu@gmail.com;Евгения Гороха -susenko_a@ukr.net;Андрей Сусенко -anton.alyoshin@hotmail.com;Антон Алешин -kkvkk@mail.ru;Кирилл -remikont@inbox.ru;Михаил -serzhpodkolzin@yandex.ru;Сергей -dyrnoj@bk.ru;Максим -d.work2011@yandex.ru;Светлана -choodick@gmail.com;Амелин Артем -VIP-Dantist@yandex.ru;Вячеслав -makguseff@yandex.ru;Максим Гусев -strix1985@mail.ru;Анна -iguar.k@ya.ru;Игорь Кузнецов -indrs@rambler.ru;Сергей -profiservic2@yandex.ru;Михаил -filchenkov.dima@mail.ru;Дмитрий -9713943@mail.ru;Леонид -vladsemuk@gmail.com;Владислав -wkmstr@mail.ru;Мераб -kira09051987@mail.ru;Гузель -vmiretskaya@gmail.com;Viktoriia Miretska -vufer@inbox.ru;Сурен Вердиян -torgbuk@mail.ru;Hromenko Nikolay -royline@mail.ru;Шаронова Ольга -oleg.akimov@mail.ru;Олег Акимов -alexatro@yandex.ru;Александра Троянова -lipsuke@mac.com;Дмитрий Фадеев -m.b.oper@Gmail.com;Кирилл -ritaces@inbox.lv;Rita Cevere -nastusha1995is@gmail.com;Анастасия -acvyatin@mail.ru;Александр -Minigalin.nail.M@yandex.ru;Наиль -k.rachimov@mail.ru;Кирилл Рахимов -nikita-ftf@Mail.ru;Nikita Veselov -pertik@list.ru;Александр -vip.samosadov@mail.ru;Алексей -blackghost58@mail.ru;Илья -IVTsygankov@gmail.com;Иван -5001010@bk.ru;Шемет Дмитрий -lcf-84@mail.ru;Сергей Калинкин -guipago@mail.ru;Dmitry -mainfilter@yandex.ru;Сергей -skostin@mail.ru;Сергей Костин -Yoooda1989@mail.ru;Максим Петров -carrera91167@inbox.ru;Елена -olgeraski@gmail.com;Ольга Гераськина -pavel.bosko@gmail.com;Павел -romankox1973@gmail.com;Роман -marinemaks@yandex.ru;Мария Максимова -hazhaev@gmail.com;Рашид Хажаев -korovina_natasha@mail.ru;Наталья Коровина -xaba578@mail.ru;Хава Куркиева -kviva@yandex.ru;Виктор -blackrum@yandex.ru;Роман Платонов -a.silyaev@yandex.ru;Анвер Силяев -sheniachiglazki@gmail.com;Филь Юлия -okonogray@yahoo.com;Олеся Конограй -skorshuns@mail.ru;Сергей -mkenes_2@mail.ru;Мадияр -vorona_1992@bk.ru;Валерия -irena.kostina@mail.ru;ирина -chel200807@yandex.ru;Анатолий Емельянов -lexx59@gmail.com;Александр Пленкин -a.michurin1783@mail.ru;Артем Мичурин -polkovnik51@mail.ru;Владимир -ansserg@yandex.ru;Сергей -bengard@yandex.ru;Наталья -markovskaya_88@mail.ru;Наталья -walerock@mail.ru;Валерий -0964600@gmail.com;Oksana Popova -servaredecaelo@gmail.com;Алина Гайбель -ci4rovik@mail.ru;Эдуард Фадеев -otik_kurdgelia@mail.ru;инна -aksay_sayt@mail.ru;Татьяна Вельмакина -codemaster74@mail.ru;Марат Абдуллин -ngpk_lysenko@mail.ru;Виталий Лысенко -kovalev.home@mail.ru;Владимир Ковалев -flintl@bk.ru;Кулаков Александр -webprogrammer77@gmail.com;Прохоров Игорь -rorbah91@yandex.ru;Рорбах Олег -vadzimbelsky@rambler.ru;Вадим Бельский -s.s.shuvalova@gmail.com;Светлана Шувалова -afonin123@bk.ru;Александр -nestetion@yandex.ru;Анастасия -Kasyan12@mail.ru;Касьянов Александр -Vals_0791@mail.ru;Волкова Алиса -A.MAILME@YANDEX.RU;Александра Скобелева -saski@mail.ru;Сергей Малкин -zefaa@mail.ru;Елена Зинченко -Slava666-2008@ya.ru;Вячеслав -sir.oberst@yandex.ru;сергей -1ckaz@mail.ru;Асет -sekvenseralex@mail.ru;Вдовин Алексей Сергеевич -ale-xey76@yandex.ru;Алексей -igvassor@gmail.com;Игорь Сорокин -t.natalia_66@mail.ru;Мади -Yuriy1357@mail.ru;Юрий -vikraokna@gmail.com;Дмитрий -a05@list.ru;Углев Владимир -kuznetsovaelena1@mail.ru;Кузнецова Елена -belous.maria@gmail.com;Мария -undead.koroleva2012@yandex.ru;Юлия -ruslan71@bmail.ru;Руслан Мордачев -9186532244@mail.ru;Кирилл Воронков -galkov@mokselle.com;Максим -www.Rifma@mail.ru;Сергей Мудряков -vlg81@mail.ru;Галашев Вадим -edwantoshin@rambler.ru;Эдуард Антошин -strig_elena@mail.ru;Новикова Елена Владимировна -manamaha@mail.ru;Николай Дёров -serggovs@yandex.ru;Говердовский Сергей -my-post@mail.ru;Татьяна -zlata.reznickova@yandex.ru;злата резникова -uvladz@gmail.com;Влад Ущаповский -bkr1@yandex.ru;Карэн -coop01@mail.ru;Андрей -Evgeni2007@yandex.ru;Евгений -tusrb@mail.ru;Тарасов Иван Григорьевич -kindaleks@gmail.com;Алексей -senior.perfiliew@ya.ru;Иван Перфильев -gnatenko.pavel@gmail.com;Павел Гнатенко -lrv92@mail.ru;Лукьянов Роман -Serenya21@yandex.ru;Сергей -newstas11@mail.ru;Станислав -irina.kisik@gmail.com;Ирина -djsergeykovanin@mail.ru;Кованин Сергей -igor.kiyashchenko@mail.ru;Игорь Киященко -fom_iv@list.ru;Игорь Фоменко -shelbyblack37@gmail.com;Екатерина -o.lif@gmx.de;Olena Lif -pipopka@bk.ru;Тепляшина Евгения Сергеевна -artur.mandrich.99@mail.ru;Мандрич Артур -regione-2000@ya.ru;Калугина Ольга Анатольевна -sheptun_marina@mail.ru;Marina Ovchinnikova -ganin-va@yandex.ru;Василий Ганин -romanov.hk@gmail.com;Илья -2013ekaterina@mail.ru;Олег Ляшенко -pashtynov@mail.ru;Дмитрий Паштынов -kazzak2008@rambler.ru;задание №5 Алексей Казаков -deniskhig@yandex.ru;Денис -kostgr@rambler.ru;Константин Гребенюков -adastra.m@yandex.ru;Мокрушин Вячеслав -donder@yandex.ru;Пастухов Данил -gisstyle@yandex.ru;Анастасия Гофман -felix.80808@mail.ru;Евгений -taurus19901@mail.ru;Вячеслав Скрыпник -maks2546@mail.ru;Максим -avkan@meta.ua;Андрей Кандыба -2906300@inbox.ru;Ильсур -okislyakov@gmail.com;Олег Кисляков -anik4366@mail.ru;Анна Борисенко -dine77e@gmail.com;Роман -p0v13@mail.ru;Павел Погодин -nadin12233@mail.ru;Надежда -vladislav-avdeev@mail.ru;Владислав -julia_dea@mail.ru;Юлия Белоусова -green2536@yandex.ru;Сергей -shaspir@mail.ru;Хоха Илья -osmusic17@gmail.com;Александр Богданович -sokol4eg@mail.ru;Михаил Соколов -Usov_88@mail.ru;Сергей -andrey777@maryno.net;Улякин Андрей Юрьевич -yglazy@mail.ru;Юрий -riseagain@inbox.ru;Лина -nabelka@ya.ru;Ната -dmitriylarin@bk.ru;Дмитрий Ларин -gak.anya@mail.ru;Ашатhttp://payment.mokselle.ru/training/file/t0vxFP7PL88KC7I50Ij7cROqIuF47J4l/ -vic.bandura@yandex.ru;Виктор Бандура -mobils100@yandex.ru;Максим Сурков -valero_sv@mail.ru;Валерий Сорока -serge-meb@mail.ru;Сергей -mk@bagur.su;Кирилл Мещерин -turist2015@ya.ru;Артем -niki-1@yandex.ru;Сачков Денис -iborzik@gmail.com;Ирина Борзик -gp@bipon.ru;Геннадий -elabuga-dar@yandex.ru;Ольга Шапоренко -dontsurrender@ya.ru;Сергей Терехов -andru_45@list.ru;Андрей -konstantinov2006@yandex.ru;Константинов Евгений -biznice@yandex.ru;Леонид -anton_semenchuk@rambler.ru;Антон -utk1@list.ru;Владимир Макеев -tsvetkovaai@yandex.ru;Цветкова Анна -stepanuk1987@yandex.ru;Алексей -dmitroff197@yandex.ru;Дмитрий -katerium@mail.ru;Екатерина -kirillrumyantsev1971@gmail.com;Кирилл Румянцев -alxsrtv@gmail.com;Александр -rock_n_vladok@mail.ru;Дурин Владислав -barchakov@gmail.com;Берс -ann_posh@rambler.ru;Анна Сысоева -rkrivtsov@gmail.com;Роман Кривцов -msp081152@mail.ru;Сергей Малахов -dron_andr_2007@mail.ru;Анлрей -lysenko.mi@gmail.com;Марк Лысенко -ekbregionetrader@gmail.com;Валентин -itshepard57574@gmail.com;Руслан -stas_ravskiy-95@mail.ru;Равский Станислав -vladimir_glight@mail.ru;Владимир -elgus2007@yandex.ru;Гусельников Сергей -ansierra@mail.ru;Анна Губарева -megafabr@yandex.ru;Николай Беляев -evseev@dubna.ru;Юрий Евсеев -ks2007a@yandex.ru;Константин -o.gricenko@yandex.ru;Олег -romagrog@gmail.com;Роман -artyomzykov@gmail.com;Артем -terraincod@gmail.com;Сергей -artsfabrica@gmail.com;Игорь Донцов -stacyinner@gmail.com;Анастасия Сергейчук -orloff.eg@yandex.ru;Данил -bet-ekaterina@mail.ru;Бетина Екатерина -alpe@b2bresearch.com;Александр Петросян -nikitakozh@ukr.net;Кожевников Никита -ziv1@yandex.ru;Игорь Золотарев -svmc@ya.ru;Владимир -d.tiganov@yandex.ru;Дмитрий Тиганов -79296628851@yandex.ru;Дмитрий -qman_2@mail.ru;Василий Вдовин -akoziy@ya.ru;Андрей Козий -gabeda@yandex.ru;Юлия Габеда -vadigoryache@yandex.ru;вадим горячев -threed@rsgc.ru;Дмитрий Панфилов -gamer1648@yandex.ru;Виктор -volnov_mv@mail.ru;Максим -geogrii-cobolev@mail.ru;Юрий Соболев -alvar63@mail.ru;Лариса Варавина -aselya.bekenova@gmail.com;Асель Бекенова -zev3b@yandex.ru;Евгений Зеленько -sveta.utemova@bk.ru;Света -galapub@ya.ru;Галина Бутенко -vladvolod@yandex.ru;Владислав Володин -creps92@yandex.ru;Максим Гамаюнов -brolya@bk.ru;Бражинская Ольга -kira.kostenko@gmail.com;Кира Костенко -vitaliy.a.2015@mail.ru;Виталий Анищенко -sokol-judo92@mail.ru;Кирилл Соколов -aamlhv@yandex.ru;Малахов Антон -artis72@ya.ru;Артем Исаев -edwardb@ngs.ru;Эдуард Бурлаков -zel-mirra@bk.ru;Вадим -galyna.pon@gmail.com;Galina Ponomarenko -ahnuria@mail.ru;Нурия -anika2006@yandex.ru;Алексей Аникин -polikor-n@yandex.ru;Олег Радаев -euro2@yandex.ru;Александр Блохинов -kvon@list.ru;Ольга Колодкина -office@eskd72.ru;Дмитрий -andreidem4enko@yandex.ru;Демченко Андрей -r61boff@mail.ru;Григорий Шевцов -videograf2007@yandex.ru;Андрей -vlkuprianov@gmail.com;Владимир Куприянов -makr1975@yandex.ru;Максим -petrsushko@mail.ru;Петр Сушко -faridweb23@gmail.com;Фарид -sanzhiku@gmail.com;Sanzhar Urazaliyev -vasiliy.moiseenko.64@mail.ru;Василий Моисеенко -vvuch@ya.ru;Вячеслав Волков -naurale@yandex.ru;Илья -teacoffee@i.ua;Максим -oly_armavir@mail.ru;Ольга -polet2107@ya.ru;Вадим -web-school-voicehovich@yandex.ru;Михаил Войцехович -komichok@mail.ru;Андрей Комаров -peters2004@yandex.ru;Соловьёв Пётр -vavilov_alex@mail.ru;alex -baigulova.indira@bk.ru;Индира Байгулова -tyapushkina1976@gmail.com;Светлана Cмирнова -j.haustov@gmail.com;Евгений -tsubasa@tut.by;Валера -lapinanatalya@mail.ru;Наталья -amberleyley@gmail.com;Софья Прокофьева -svtbiz@inbox.ru;Светлана Титова -kvn0910@yandex.ru;Nadezda -Dron84@gmail.com;Андрей Шарунов -Ddinamit.i@gmail.com;Илья Облогин -Germanjuk-artm@rambler.ru;Артём Германюк -tatyana.best@list.ru;Татьяна Авдеева -idval@imedia.ru;Валерий -vktmb@mail.ru;Валерий Каныгин -promenergo.ch@gmail.com;Андрей Медведев -yusupova.alfia2014@yandex.ru;Альфия Юсупова -olypash-alians@yandex.ru;Ольга Пашкова -evgenia_litvina@mail.ru;Евгения Литвина -harleyhp@mail.ru;Александр -npg2009@rambler.ru;Павло Галамейко -julia210384otto@yandex.ru;Юлия Ванина - -# 6 -gennadiy1983@ya.ru;Геннадий -artyomzolotykh@gmail.com;Артем -MAXYTA22@yandex.ru;Максим -puzach@mail.ru;Пузач Влад -mf915@mail.ru;Антон -omsterkhova@rambler.ru;Ольга -ob080270@voliacable.com;Олег -mahneva-mariya@mail.ru;Мария -ssprava@ukr.net;Галина Стриженко -alexweb85@yandex.ru;Александр -igorevich70@gmail.com;Игорь -pugachiov.serezha@yandex.ru;сергей -nikolletss@gmail.com;Марина -klu_lena@list.ru;Елена -kylych1@yandex.ru;Кылыч -hakimov65@inbox.ru;Ринат -kalina81@list.ru;Анна -savax@rambler.ru;Дмитрий Савченко -artem.panteleev@aol.com;Артём -alberto.man@mail.ru;Альберт -PhilatovEvgeny@mail.ru;Евгений Филатов -bestway305@yandex.ru;Артур Нурахметов -tutmos3@yandex.ru;Павел Орловский -ebortnikov@mail.ru;Евгений Бортников -kborodavko2009@yandex.ru;Константин Бородавко -espoirquebec@gmail.com;Мария Кравчук -susenko_a@ukr.net;Андрей Сусенко -chiganu@gmail.com;Евгения Гороха -anton.alyoshin@hotmail.com;Антон Алешин -danil.kdo1@gmail.com;Даниил -kkvkk@mail.ru;Кирилл -dyrnoj@bk.ru;Максим -serzhpodkolzin@yandex.ru;Сергей -makguseff@yandex.ru;Максим Гусев -iguar.k@ya.ru;Игорь Кузнецов -choodick@gmail.com;Амелин Артем -profiservic2@yandex.ru;Михаил -strix1985@mail.ru;Анна -vladsemuk@gmail.com;Владислав -kira09051987@mail.ru;Гузель -d.work2011@yandex.ru;Светлана -vmiretskaya@gmail.com;Viktoriia Miretska -indrs@rambler.ru;Сергей -VIP-Dantist@yandex.ru;Вячеслав -vufer@inbox.ru;Сурен Вердиян -oleg.akimov@mail.ru;Олег Акимов -remikont@inbox.ru;Михаил -alexatro@yandex.ru;Александра Троянова -royline@mail.ru;Шаронова Ольга -ritaces@inbox.lv;Rita Cevere -torgbuk@mail.ru;Hromenko Nikolay -Minigalin.nail.M@yandex.ru;Наиль -acvyatin@mail.ru;Александр -k.rachimov@mail.ru;Кирилл Рахимов -nikita-ftf@Mail.ru;Nikita Veselov -nastusha1995is@gmail.com;Анастасия -pertik@list.ru;Александр -9713943@mail.ru;Леонид -lipsuke@mac.com;Дмитрий Фадеев -vip.samosadov@mail.ru;Алексей -blackghost58@mail.ru;Илья -5001010@bk.ru;Шемет Дмитрий -lcf-84@mail.ru;Сергей Калинкин -IVTsygankov@gmail.com;Иван -guipago@mail.ru;Dmitry -m.b.oper@Gmail.com;Кирилл -skostin@mail.ru;Сергей Костин -mainfilter@yandex.ru;Сергей -Yoooda1989@mail.ru;Максим Петров -marinemaks@yandex.ru;Мария Максимова -pavel.bosko@gmail.com;Павел -carrera91167@inbox.ru;Елена -hazhaev@gmail.com;Рашид Хажаев -romankox1973@gmail.com;Роман -kviva@yandex.ru;Виктор -blackrum@yandex.ru;Роман Платонов -xaba578@mail.ru;Хава Куркиева -mkenes_2@mail.ru;Мадияр -a.silyaev@yandex.ru;Анвер Силяев -irena.kostina@mail.ru;ирина -a.michurin1783@mail.ru;Артем Мичурин -lexx59@gmail.com;Александр Пленкин -sheniachiglazki@gmail.com;Филь Юлия -chel200807@yandex.ru;Анатолий Емельянов -bengard@yandex.ru;Наталья -walerock@mail.ru;Валерий -ansserg@yandex.ru;Сергей -polkovnik51@mail.ru;Владимир -okonogray@yahoo.com;Олеся Конограй -otik_kurdgelia@mail.ru;инна -ci4rovik@mail.ru;Эдуард Фадеев -markovskaya_88@mail.ru;Наталья -kovalev.home@mail.ru;Владимир Ковалев -flintl@bk.ru;Кулаков Александр -webprogrammer77@gmail.com;Прохоров Игорь -rorbah91@yandex.ru;Рорбах Олег -vadzimbelsky@rambler.ru;Вадим Бельский -aksay_sayt@mail.ru;Татьяна Вельмакина -s.s.shuvalova@gmail.com;Светлана Шувалова -A.MAILME@YANDEX.RU;Александра Скобелева -saski@mail.ru;Сергей Малкин -zefaa@mail.ru;Елена Зинченко -Vals_0791@mail.ru;Волкова Алиса -nestetion@yandex.ru;Анастасия -ale-xey76@yandex.ru;Алексей -1ckaz@mail.ru;Асет -Yuriy1357@mail.ru;Юрий -Slava666-2008@ya.ru;Вячеслав -afonin123@bk.ru;Александр -sekvenseralex@mail.ru;Вдовин Алексей Сергеевич -belous.maria@gmail.com;Мария -kuznetsovaelena1@mail.ru;Кузнецова Елена -ruslan71@bmail.ru;Руслан Мордачев -Kasyan12@mail.ru;Касьянов Александр -igvassor@gmail.com;Игорь Сорокин -sir.oberst@yandex.ru;сергей -9186532244@mail.ru;Кирилл Воронков -www.Rifma@mail.ru;Сергей Мудряков -ngpk_lysenko@mail.ru;Виталий Лысенко -edwantoshin@rambler.ru;Эдуард Антошин -strig_elena@mail.ru;Новикова Елена Владимировна -undead.koroleva2012@yandex.ru;Юлия -serggovs@yandex.ru;Говердовский Сергей -my-post@mail.ru;Татьяна -coop01@mail.ru;Андрей -bkr1@yandex.ru;Карэн -galkov@mokselle.com;Максим -kindaleks@gmail.com;Алексей -Evgeni2007@yandex.ru;Евгений -zlata.reznickova@yandex.ru;злата резникова -senior.perfiliew@ya.ru;Иван Перфильев -uvladz@gmail.com;Влад Ущаповский -djsergeykovanin@mail.ru;Кованин Сергей -irina.kisik@gmail.com;Ирина -lrv92@mail.ru;Лукьянов Роман -korovina_natasha@mail.ru;Наталья Коровина -artur.mandrich.99@mail.ru;Мандрич Артур -pipopka@bk.ru;Тепляшина Евгения Сергеевна -ganin-va@yandex.ru;Василий Ганин -newstas11@mail.ru;Станислав -shelbyblack37@gmail.com;Екатерина -sheptun_marina@mail.ru;Marina Ovchinnikova -kostgr@rambler.ru;Константин Гребенюков -gisstyle@yandex.ru;Анастасия Гофман -donder@yandex.ru;Пастухов Данил -pashtynov@mail.ru;Дмитрий Паштынов -felix.80808@mail.ru;Евгений -2906300@inbox.ru;Ильсур -okislyakov@gmail.com;Олег Кисляков -nadin12233@mail.ru;Надежда -adastra.m@yandex.ru;Мокрушин Вячеслав -maks2546@mail.ru;Максим -igor.kiyashchenko@mail.ru;Игорь Киященко -regione-2000@ya.ru;Калугина Ольга Анатольевна -julia_dea@mail.ru;Юлия Белоусова -taurus19901@mail.ru;Вячеслав Скрыпник -vladislav-avdeev@mail.ru;Владислав -2013ekaterina@mail.ru;Олег Ляшенко -deniskhig@yandex.ru;Денис -avkan@meta.ua;Андрей Кандыба -dine77e@gmail.com;Роман -sokol4eg@mail.ru;Михаил Соколов -Usov_88@mail.ru;Сергей -green2536@yandex.ru;Сергей -osmusic17@gmail.com;Александр Богданович -romanov.hk@gmail.com;Илья -kazzak2008@rambler.ru;задание №6 Алексей Казаков -p0v13@mail.ru;Павел Погодин -riseagain@inbox.ru;Лина -dmitriylarin@bk.ru;Дмитрий Ларин -andrey777@maryno.net;Улякин Андрей Юрьевич -shaspir@mail.ru;Хоха Илья -vic.bandura@yandex.ru;Виктор Бандура -mobils100@yandex.ru;Максим Сурков -anik4366@mail.ru;Анна Борисенко -mk@bagur.su;Кирилл Мещерин -serge-meb@mail.ru;Сергей -niki-1@yandex.ru;Сачков Денис -fom_iv@list.ru;Игорь Фоменко -dontsurrender@ya.ru;Сергей Терехов -iborzik@gmail.com;Ирина Борзик -gp@bipon.ru;Геннадий -valero_sv@mail.ru;Валерий Сорока -gak.anya@mail.ru;Ашатhttp://payment.mokselle.ru/training/file/t0vxFP7PL88KC7I50Ij7cROqIuF47J4l/ -yglazy@mail.ru;Юрий -andru_45@list.ru;Андрей -utk1@list.ru;Владимир Макеев -anton_semenchuk@rambler.ru;Антон -stepanuk1987@yandex.ru;Алексей -dmitroff197@yandex.ru;Дмитрий -tsvetkovaai@yandex.ru;Цветкова Анна -kirillrumyantsev1971@gmail.com;Кирилл Румянцев -katerium@mail.ru;Екатерина -biznice@yandex.ru;Леонид -alxsrtv@gmail.com;Александр -turist2015@ya.ru;Артем -rock_n_vladok@mail.ru;Дурин Владислав -ann_posh@rambler.ru;Анна Сысоева -rkrivtsov@gmail.com;Роман Кривцов -msp081152@mail.ru;Сергей Малахов -barchakov@gmail.com;Берс -lysenko.mi@gmail.com;Марк Лысенко -ekbregionetrader@gmail.com;Валентин -dron_andr_2007@mail.ru;Анлрей -itshepard57574@gmail.com;Руслан -elabuga-dar@yandex.ru;Ольга Шапоренко -stas_ravskiy-95@mail.ru;Равский Станислав -vladimir_glight@mail.ru;Владимир -konstantinov2006@yandex.ru;Константинов Евгений -megafabr@yandex.ru;Николай Беляев -artyomzykov@gmail.com;Артем -terraincod@gmail.com;Сергей -elgus2007@yandex.ru;Гусельников Сергей -ks2007a@yandex.ru;Константин -romagrog@gmail.com;Роман -ziv1@yandex.ru;Игорь Золотарев -artsfabrica@gmail.com;Игорь Донцов -orloff.eg@yandex.ru;Данил -stacyinner@gmail.com;Анастасия Сергейчук -d.tiganov@yandex.ru;Дмитрий Тиганов -svmc@ya.ru;Владимир -gabeda@yandex.ru;Юлия Габеда -bet-ekaterina@mail.ru;Бетина Екатерина -vadigoryache@yandex.ru;вадим горячев -threed@rsgc.ru;Дмитрий Панфилов -gamer1648@yandex.ru;Виктор -volnov_mv@mail.ru;Максим -qman_2@mail.ru;Василий Вдовин -evseev@dubna.ru;Юрий Евсеев -zev3b@yandex.ru;Евгений Зеленько -alvar63@mail.ru;Лариса Варавина -nikitakozh@ukr.net;Кожевников Никита -aselya.bekenova@gmail.com;Асель Бекенова -sveta.utemova@bk.ru;Света -galapub@ya.ru;Галина Бутенко -brolya@bk.ru;Бражинская Ольга -ansierra@mail.ru;Анна Губарева -vladvolod@yandex.ru;Владислав Володин -kira.kostenko@gmail.com;Кира Костенко -sokol-judo92@mail.ru;Кирилл Соколов -aamlhv@yandex.ru;Малахов Антон -geogrii-cobolev@mail.ru;Юрий Соболев -artis72@ya.ru;Артем Исаев -ivan_smelkov@mail.ru;Иван -ahnuria@mail.ru;Нурия -zel-mirra@bk.ru;Вадим -edwardb@ngs.ru;Эдуард Бурлаков -anika2006@yandex.ru;Алексей Аникин -galyna.pon@gmail.com;Galina Ponomarenko -akoziy@ya.ru;Андрей Козий -r61boff@mail.ru;Григорий Шевцов -makr1975@yandex.ru;Максим -faridweb23@gmail.com;Фарид -office@eskd72.ru;Дмитрий -polikor-n@yandex.ru;Олег Радаев -euro2@yandex.ru;Александр Блохинов -andreidem4enko@yandex.ru;Демченко Андрей -sanzhiku@gmail.com;Sanzhar Urazaliyev -vvuch@ya.ru;Вячеслав Волков -teacoffee@i.ua;Максим -vlkuprianov@gmail.com;Владимир Куприянов -vasiliy.moiseenko.64@mail.ru;Василий Моисеенко -oly_armavir@mail.ru;Ольга -polet2107@ya.ru;Вадим -kvon@list.ru;Ольга Колодкина -petrsushko@mail.ru;Петр Сушко -vavilov_alex@mail.ru;alex -peters2004@yandex.ru;Соловьёв Пётр -komichok@mail.ru;Андрей Комаров -tsubasa@tut.by;Валера -j.haustov@gmail.com;Евгений -baigulova.indira@bk.ru;Индира Байгулова -Dron84@gmail.com;Андрей Шарунов -amberleyley@gmail.com;Софья Прокофьева -codemaster74@mail.ru;Марат Абдуллин -naurale@yandex.ru;Илья -svtbiz@inbox.ru;Светлана Титова -kvn0910@yandex.ru;Nadezda -Germanjuk-artm@rambler.ru;Артём Германюк -tatyana.best@list.ru;Татьяна Авдеева -idval@imedia.ru;Валерий -lapinanatalya@mail.ru;Наталья -promenergo.ch@gmail.com;Андрей Медведев -vktmb@mail.ru;Валерий Каныгин -harleyhp@mail.ru;Александр -olypash-alians@yandex.ru;Ольга Пашкова - -# 7 -gennadiy1983@ya.ru;Геннадий -artyomzolotykh@gmail.com;Артем -omsterkhova@rambler.ru;Ольга -puzach@mail.ru;Пузач Влад -ssprava@ukr.net;Галина Стриженко -nikolletss@gmail.com;Марина -alexweb85@yandex.ru;Александр -klu_lena@list.ru;Елена -kylych1@yandex.ru;Кылыч -ob080270@voliacable.com;Олег -mahneva-mariya@mail.ru;Мария -MAXYTA22@yandex.ru;Максим -mf915@mail.ru;Антон -kalina81@list.ru;Анна -hakimov65@inbox.ru;Ринат -artem.panteleev@aol.com;Артём -igorevich70@gmail.com;Игорь Чуркин -savax@rambler.ru;Дмитрий Савченко -PhilatovEvgeny@mail.ru;Евгений Филатов -tutmos3@yandex.ru;Павел Орловский -pugachiov.serezha@yandex.ru;сергей -bestway305@yandex.ru;Артур Нурахметов -ebortnikov@mail.ru;Евгений Бортников -susenko_a@ukr.net;Андрей Сусенко -chiganu@gmail.com;Евгения Гороха -anton.alyoshin@hotmail.com;Антон Алешин -kkvkk@mail.ru;Кирилл -kborodavko2009@yandex.ru;Константин Бородавко -dyrnoj@bk.ru;Максим -danil.kdo1@gmail.com;Даниил -serzhpodkolzin@yandex.ru;Сергей -makguseff@yandex.ru;Максим Гусев -iguar.k@ya.ru;Игорь Кузнецов -profiservic2@yandex.ru;Михаил -oleg.akimov@mail.ru;Олег Акимов -strix1985@mail.ru;Анна -vmiretskaya@gmail.com;Viktoriia Miretska -choodick@gmail.com;Амелин Артем -kira09051987@mail.ru;Гузель -vladsemuk@gmail.com;Владислав -ritaces@inbox.lv;Rita Cevere -alexatro@yandex.ru;Александра Троянова -royline@mail.ru;Шаронова Ольга -pertik@list.ru;Александр -remikont@inbox.ru;Михаил -k.rachimov@mail.ru;Кирилл Рахимов -blackghost58@mail.ru;Илья -nastusha1995is@gmail.com;Анастасия -9713943@mail.ru;Леонид -Minigalin.nail.M@yandex.ru;Наиль -nikita-ftf@Mail.ru;Nikita Veselov -lcf-84@mail.ru;Сергей Калинкин -guipago@mail.ru;Dmitry -vip.samosadov@mail.ru;Алексей -torgbuk@mail.ru;Hromenko Nikolay -5001010@bk.ru;Шемет Дмитрий -IVTsygankov@gmail.com;Иван -Yoooda1989@mail.ru;Максим Петров -mainfilter@yandex.ru;Сергей -lipsuke@mac.com;Дмитрий Фадеев -marinemaks@yandex.ru;Мария Максимова -irena.kostina@mail.ru;ирина -hazhaev@gmail.com;Рашид Хажаев -xaba578@mail.ru;Хава Куркиева -mkenes_2@mail.ru;Мадияр -blackrum@yandex.ru;Роман Платонов -a.michurin1783@mail.ru;Артем Мичурин -lexx59@gmail.com;Александр Пленкин -romankox1973@gmail.com;Роман -kviva@yandex.ru;Виктор -a.silyaev@yandex.ru;Анвер Силяев -bengard@yandex.ru;Наталья -walerock@mail.ru;Валерий -polkovnik51@mail.ru;Владимир -ansserg@yandex.ru;Сергей -m.b.oper@Gmail.com;Кирилл -kovalev.home@mail.ru;Владимир Ковалев -sheniachiglazki@gmail.com;Филь Юлия -ci4rovik@mail.ru;Эдуард Фадеев -flintl@bk.ru;Кулаков Александр -vadzimbelsky@rambler.ru;Вадим Бельский -webprogrammer77@gmail.com;Прохоров Игорь -chel200807@yandex.ru;Анатолий Емельянов -okonogray@yahoo.com;Олеся Конограй -Vals_0791@mail.ru;Волкова Алиса -saski@mail.ru;Сергей Малкин -zefaa@mail.ru;Елена Зинченко -aksay_sayt@mail.ru;Татьяна Вельмакина -ale-xey76@yandex.ru;Алексей -ruslan71@bmail.ru;Руслан Мордачев -belous.maria@gmail.com;Мария -Yuriy1357@mail.ru;Юрий -afonin123@bk.ru;Александр -1ckaz@mail.ru;Асет -igvassor@gmail.com;Игорь Сорокин -A.MAILME@YANDEX.RU;Александра Скобелева -www.Rifma@mail.ru;Сергей Мудряков -kuznetsovaelena1@mail.ru;Кузнецова Елена -edwantoshin@rambler.ru;Эдуард Антошин -9186532244@mail.ru;Кирилл Воронков -s.s.shuvalova@gmail.com;Светлана Шувалова -sekvenseralex@mail.ru;Вдовин Алексей Сергеевич -sir.oberst@yandex.ru;сергей -serggovs@yandex.ru;Говердовский Сергей -ngpk_lysenko@mail.ru;Виталий Лысенко -strig_elena@mail.ru;Новикова Елена Владимировна -my-post@mail.ru;Татьяна -Slava666-2008@ya.ru;Вячеслав -coop01@mail.ru;Андрей -bkr1@yandex.ru;Карэн -Evgeni2007@yandex.ru;Евгений -djsergeykovanin@mail.ru;Кованин Сергей -kindaleks@gmail.com;Алексей -galkov@mokselle.com;Максим -irina.kisik@gmail.com;Ирина -senior.perfiliew@ya.ru;Иван Перфильев -korovina_natasha@mail.ru;Наталья Коровина -lrv92@mail.ru;Лукьянов Роман -pipopka@bk.ru;Тепляшина Евгения Сергеевна -zlata.reznickova@yandex.ru;злата резникова -gisstyle@yandex.ru;Анастасия Гофман -donder@yandex.ru;Пастухов Данил -nadin12233@mail.ru;Надежда -2906300@inbox.ru;Ильсур -sheptun_marina@mail.ru;Marina Ovchinnikova -okislyakov@gmail.com;Олег Кисляков -felix.80808@mail.ru;Евгений -maks2546@mail.ru;Максим -artur.mandrich.99@mail.ru;Мандрич Артур -ganin-va@yandex.ru;Василий Ганин -vladislav-avdeev@mail.ru;Владислав -pashtynov@mail.ru;Дмитрий Паштынов -kostgr@rambler.ru;Константин Гребенюков -skostin@mail.ru;Сергей Костин -taurus19901@mail.ru;Вячеслав Скрыпник -julia_dea@mail.ru;Юлия Белоусова -adastra.m@yandex.ru;Мокрушин Вячеслав -green2536@yandex.ru;Сергей -sokol4eg@mail.ru;Михаил Соколов -Usov_88@mail.ru;Сергей -p0v13@mail.ru;Павел Погодин -riseagain@inbox.ru;Лина -mk@bagur.su;Кирилл Мещерин -regione-2000@ya.ru;Калугина Ольга Анатольевна -mobils100@yandex.ru;Максим Сурков -2013ekaterina@mail.ru;Олег Ляшенко -niki-1@yandex.ru;Сачков Денис -serge-meb@mail.ru;Сергей -shelbyblack37@gmail.com;Екатерина -andrey777@maryno.net;Улякин Андрей Юрьевич -dmitriylarin@bk.ru;Дмитрий Ларин -dontsurrender@ya.ru;Сергей Терехов -osmusic17@gmail.com;Александр Богданович -igor.kiyashchenko@mail.ru;Игорь Киященко -andru_45@list.ru;Андрей -vic.bandura@yandex.ru;Виктор Бандура -utk1@list.ru;Владимир Макеев -stepanuk1987@yandex.ru;Алексей -iborzik@gmail.com;Ирина Борзик -dmitroff197@yandex.ru;Дмитрий -anton_semenchuk@rambler.ru;Антон -shaspir@mail.ru;Хоха Илья -tsvetkovaai@yandex.ru;Цветкова Анна -kirillrumyantsev1971@gmail.com;Кирилл Румянцев -valero_sv@mail.ru;Валерий Сорока -alxsrtv@gmail.com;Александр -newstas11@mail.ru;Станислав -yglazy@mail.ru;Юрий -msp081152@mail.ru;Сергей Малахов -rock_n_vladok@mail.ru;Дурин Владислав -rkrivtsov@gmail.com;Роман Кривцов -lysenko.mi@gmail.com;Марк Лысенко -gp@bipon.ru;Геннадий -ekbregionetrader@gmail.com;Валентин -itshepard57574@gmail.com;Руслан -vladimir_glight@mail.ru;Владимир -stas_ravskiy-95@mail.ru;Равский Станислав -artyomzykov@gmail.com;Артем -ann_posh@rambler.ru;Анна Сысоева -dron_andr_2007@mail.ru;Анлрей -romagrog@gmail.com;Роман -turist2015@ya.ru;Артем -ziv1@yandex.ru;Игорь Золотарев -megafabr@yandex.ru;Николай Беляев -terraincod@gmail.com;Сергей -ks2007a@yandex.ru;Константин -d.tiganov@yandex.ru;Дмитрий Тиганов -vadigoryache@yandex.ru;вадим горячев -svmc@ya.ru;Владимир -orloff.eg@yandex.ru;Данил -gamer1648@yandex.ru;Виктор -gabeda@yandex.ru;Юлия Габеда -volnov_mv@mail.ru;Максим -threed@rsgc.ru;Дмитрий Панфилов -zev3b@yandex.ru;Евгений Зеленько -evseev@dubna.ru;Юрий Евсеев -biznice@yandex.ru;Леонид -qman_2@mail.ru;Василий Вдовин -sveta.utemova@bk.ru;Света -aselya.bekenova@gmail.com;Асель Бекенова -alvar63@mail.ru;Лариса Варавина -artsfabrica@gmail.com;Игорь Донцов -brolya@bk.ru;Бражинская Ольга -galapub@ya.ru;Галина Бутенко -kira.kostenko@gmail.com;Кира Костенко -aamlhv@yandex.ru;Малахов Антон -vladvolod@yandex.ru;Владислав Володин -sokol-judo92@mail.ru;Кирилл Соколов -artis72@ya.ru;Артем Исаев -zel-mirra@bk.ru;Вадим -edwardb@mail.ru;Эдуард Бурлаков -r61boff@mail.ru;Григорий Шевцов -faridweb23@gmail.com;Фарид -anika2006@yandex.ru;Алексей Аникин -galyna.pon@gmail.com;Galina Ponomarenko -makr1975@yandex.ru;Максим -sanzhiku@gmail.com;Sanzhar Urazaliyev -vvuch@ya.ru;Вячеслав Волков -office@eskd72.ru;Дмитрий -euro2@yandex.ru;Александр Блохинов -geogrii-cobolev@mail.ru;Юрий Соболев -teacoffee@i.ua;Максим -nikitakozh@ukr.net;Кожевников Никита -polikor-n@yandex.ru;Олег Радаев -polet2107@ya.ru;Вадим -vavilov_alex@mail.ru;alex -vasiliy.moiseenko.64@mail.ru;Василий Моисеенко -oly_armavir@mail.ru;Ольга -bet-ekaterina@mail.ru;Бетина Екатерина -petrsushko@mail.ru;Петр Сушко -tsubasa@tut.by;Валера -j.haustov@gmail.com;Евгений -peters2004@yandex.ru;Соловьёв Пётр -Dron84@gmail.com;Андрей Шарунов -amberleyley@gmail.com;Софья Прокофьева -vlkuprianov@gmail.com;Владимир Куприянов -akoziy@ya.ru;Андрей Козий -komichok@mail.ru;Андрей Комаров -andreidem4enko@yandex.ru;Демченко Андрей -tatyana.best@list.ru;Татьяна Авдеева -svtbiz@inbox.ru;Светлана Титова -Germanjuk-artm@rambler.ru;Артём Германюк -promenergo.ch@gmail.com;Андрей Медведев - -# 8 -artyomzolotykh@gmail.com;Артем -gennadiy1983@ya.ru;Геннадий -omsterkhova@rambler.ru;Ольга -alexweb85@yandex.ru;Александр -ob080270@voliacable.com;Олег -mahneva-mariya@mail.ru;Мария -puzach@mail.ru;Пузач Влад -nikolletss@gmail.com;Марина -mf915@mail.ru;Антон -kalina81@list.ru;Анна -ssprava@ukr.net;Галина Стриженко -kylych1@yandex.ru;Кылыч -MAXYTA22@yandex.ru;Максим -klu_lena@list.ru;Елена -igorevich70@gmail.com;Игорь Чуркин -artem.panteleev@aol.com;Артём -hakimov65@inbox.ru;Ринат -tutmos3@yandex.ru;Павел Орловский -PhilatovEvgeny@mail.ru;Евгений Филатов -bestway305@yandex.ru;Артур Нурахметов -savax@rambler.ru;Дмитрий Савченко -susenko_a@ukr.net;Андрей Сусенко -ebortnikov@mail.ru;Евгений Бортников -kkvkk@mail.ru;Кирилл -anton.alyoshin@hotmail.com;Антон Алешин -chiganu@gmail.com;Евгения Гороха -kborodavko2009@yandex.ru;Константин Бородавко -dyrnoj@bk.ru;Максим -makguseff@yandex.ru;Максим Гусев -serzhpodkolzin@yandex.ru;Сергей -iguar.k@ya.ru;Игорь Кузнецов -profiservic2@yandex.ru;Михаил -oleg.akimov@mail.ru;Олег Акимов -strix1985@mail.ru;Анна -ritaces@inbox.lv;Rita Cevere -vmiretskaya@gmail.com;Viktoriia Miretska -alexatro@yandex.ru;Александра Троянова -pertik@list.ru;Александр -royline@mail.ru;Шаронова Ольга -choodick@gmail.com;Амелин Артем -kira09051987@mail.ru;Гузель -k.rachimov@mail.ru;Кирилл Рахимов -blackghost58@mail.ru;Илья -nastusha1995is@gmail.com;Анастасия -Minigalin.nail.M@yandex.ru;Наиль -guipago@mail.ru;Dmitry -nikita-ftf@Mail.ru;Nikita Veselov -lcf-84@mail.ru;Сергей Калинкин -vip.samosadov@mail.ru;Алексей -Yoooda1989@mail.ru;Максим Петров -IVTsygankov@gmail.com;Иван -5001010@bk.ru;Шемет Дмитрий -marinemaks@yandex.ru;Мария Максимова -9713943@mail.ru;Леонид -irena.kostina@mail.ru;ирина -xaba578@mail.ru;Хава Куркиева -mkenes_2@mail.ru;Мадияр -a.michurin1783@mail.ru;Артем Мичурин -hazhaev@gmail.com;Рашид Хажаев -romankox1973@gmail.com;Роман -blackrum@yandex.ru;Роман Платонов -polkovnik51@mail.ru;Владимир -walerock@mail.ru;Валерий -bengard@yandex.ru;Наталья -a.silyaev@yandex.ru;Анвер Силяев -kovalev.home@mail.ru;Владимир Ковалев -flintl@bk.ru;Кулаков Александр -ci4rovik@mail.ru;Эдуард Фадеев -lexx59@gmail.com;Александр Пленкин -ansserg@yandex.ru;Сергей -vadzimbelsky@rambler.ru;Вадим Бельский -webprogrammer77@gmail.com;Прохоров Игорь -lipsuke@mac.com;Дмитрий Фадеев -okonogray@yahoo.com;Олеся Конограй -kviva@yandex.ru;Виктор -chel200807@yandex.ru;Анатолий Емельянов -Vals_0791@mail.ru;Волкова Алиса -zefaa@mail.ru;Елена Зинченко -saski@mail.ru;Сергей Малкин -ale-xey76@yandex.ru;Алексей -ruslan71@bmail.ru;Руслан Мордачев -aksay_sayt@mail.ru;Татьяна Вельмакина -Yuriy1357@mail.ru;Юрий -belous.maria@gmail.com;Мария -afonin123@bk.ru;Александр -igvassor@gmail.com;Игорь Сорокин -www.Rifma@mail.ru;Сергей Мудряков -1ckaz@mail.ru;Асет -edwantoshin@rambler.ru;Эдуард Антошин -sekvenseralex@mail.ru;Вдовин Алексей Сергеевич -serggovs@yandex.ru;Говердовский Сергей -kuznetsovaelena1@mail.ru;Кузнецова Елена -strig_elena@mail.ru;Новикова Елена Владимировна -ngpk_lysenko@mail.ru;Виталий Лысенко -my-post@mail.ru;Татьяна -sir.oberst@yandex.ru;сергей -coop01@mail.ru;Андрей -djsergeykovanin@mail.ru;Кованин Сергей -bkr1@yandex.ru;Карэн -kindaleks@gmail.com;Алексей -senior.perfiliew@ya.ru;Иван Перфильев -irina.kisik@gmail.com;Ирина -Slava666-2008@ya.ru;Вячеслав -Evgeni2007@yandex.ru;Евгений -gisstyle@yandex.ru;Анастасия Гофман -pipopka@bk.ru;Тепляшина Евгения Сергеевна -donder@yandex.ru;Пастухов Данил -2906300@inbox.ru;Ильсур -nadin12233@mail.ru;Надежда -zlata.reznickova@yandex.ru;злата резникова -okislyakov@gmail.com;Олег Кисляков -felix.80808@mail.ru;Евгений -maks2546@mail.ru;Максим -lrv92@mail.ru;Лукьянов Роман -vladislav-avdeev@mail.ru;Владислав -galkov@mokselle.com;Максим -sheptun_marina@mail.ru;Marina Ovchinnikova -artur.mandrich.99@mail.ru;Мандрич Артур -skostin@mail.ru;Сергей Костин -ganin-va@yandex.ru;Василий Ганин -pashtynov@mail.ru;Дмитрий Паштынов -korovina_natasha@mail.ru;Наталья Коровина -sokol4eg@mail.ru;Михаил Соколов -green2536@yandex.ru;Сергей -taurus19901@mail.ru;Вячеслав Скрыпник -julia_dea@mail.ru;Юлия Белоусова -Usov_88@mail.ru;Сергей -adastra.m@yandex.ru;Мокрушин Вячеслав -mk@bagur.su;Кирилл Мещерин -mobils100@yandex.ru;Максим Сурков -kostgr@rambler.ru;Константин Гребенюков -serge-meb@mail.ru;Сергей -niki-1@yandex.ru;Сачков Денис -riseagain@inbox.ru;Лина -dmitriylarin@bk.ru;Дмитрий Ларин -dontsurrender@ya.ru;Сергей Терехов -andru_45@list.ru;Андрей -p0v13@mail.ru;Павел Погодин -utk1@list.ru;Владимир Макеев -2013ekaterina@mail.ru;Олег Ляшенко -stepanuk1987@yandex.ru;Алексей -andrey777@maryno.net;Улякин Андрей Юрьевич -anton_semenchuk@rambler.ru;Антон -shelbyblack37@gmail.com;Екатерина -kirillrumyantsev1971@gmail.com;Кирилл Румянцев -dmitroff197@yandex.ru;Дмитрий -vic.bandura@yandex.ru;Виктор Бандура -iborzik@gmail.com;Ирина Борзик -valero_sv@mail.ru;Валерий Сорока -msp081152@mail.ru;Сергей Малахов -rock_n_vladok@mail.ru;Дурин Владислав -lysenko.mi@gmail.com;Марк Лысенко -rkrivtsov@gmail.com;Роман Кривцов -ekbregionetrader@gmail.com;Валентин -regione-2000@ya.ru;Калугина Ольга Анатольевна -vladimir_glight@mail.ru;Владимир -artyomzykov@gmail.com;Артем -itshepard57574@gmail.com;Руслан -yglazy@mail.ru;Юрий -osmusic17@gmail.com;Александр Богданович -ann_posh@rambler.ru;Анна Сысоева -ziv1@yandex.ru;Игорь Золотарев -stas_ravskiy-95@mail.ru;Равский Станислав -gp@bipon.ru;Геннадий -romagrog@gmail.com;Роман -terraincod@gmail.com;Сергей -vadigoryache@yandex.ru;вадим горячев -orloff.eg@yandex.ru;Данил -gamer1648@yandex.ru;Виктор -svmc@ya.ru;Владимир -threed@rsgc.ru;Дмитрий Панфилов -volnov_mv@mail.ru;Максим -zev3b@yandex.ru;Евгений Зеленько -gabeda@yandex.ru;Юлия Габеда -d.tiganov@yandex.ru;Дмитрий Тиганов -alvar63@mail.ru;Лариса Варавина -megafabr@yandex.ru;Николай Беляев -sveta.utemova@bk.ru;Света -aselya.bekenova@gmail.com;Асель Бекенова -kira.kostenko@gmail.com;Кира Костенко -tsvetkovaai@yandex.ru;Цветкова Анна -brolya@bk.ru;Бражинская Ольга -aamlhv@yandex.ru;Малахов Антон -sokol-judo92@mail.ru;Кирилл Соколов -r61boff@mail.ru;Григорий Шевцов -faridweb23@gmail.com;Фарид -vladvolod@yandex.ru;Владислав Володин -zel-mirra@bk.ru;Вадим -edwardb@mail.ru;Эдуард Бурлаков -galyna.pon@gmail.com;Galina Ponomarenko -vvuch@ya.ru;Вячеслав Волков -sanzhiku@gmail.com;Sanzhar Urazaliyev -anika2006@yandex.ru;Алексей Аникин -qman_2@mail.ru;Василий Вдовин -makr1975@yandex.ru;Максим -office@eskd72.ru;Дмитрий -artsfabrica@gmail.com;Игорь Донцов -dron_andr_2007@mail.ru;Анлрей -polet2107@ya.ru;Вадим -oly_armavir@mail.ru;Ольга -polikor-n@yandex.ru;Олег Радаев -nikitakozh@ukr.net;Кожевников Никита -bet-ekaterina@mail.ru;Бетина Екатерина -tsubasa@tut.by;Валера -euro2@yandex.ru;Александр Блохинов -vasiliy.moiseenko.64@mail.ru;Василий Моисеенко -teacoffee@i.ua;Максим -j.haustov@gmail.com;Евгений -Dron84@gmail.com;Андрей Шарунов -geogrii-cobolev@mail.ru;Юрий Соболев -vavilov_alex@mail.ru;alex -peters2004@yandex.ru;Соловьёв Пётр -tatyana.best@list.ru;Татьяна Авдеева -svtbiz@inbox.ru;Светлана Титова -promenergo.ch@gmail.com;Андрей Медведев - -# 9 -gennadiy1983@ya.ru;Геннадий -omsterkhova@rambler.ru;Ольга -artyomzolotykh@gmail.com;Артем -ob080270@voliacable.com;Олег -mahneva-mariya@mail.ru;Мария -puzach@mail.ru;Пузач Влад -nikolletss@gmail.com;Марина -alexweb85@yandex.ru;Александр -mf915@mail.ru;Антон -kalina81@list.ru;Анна -kylych1@yandex.ru;Кылыч -ssprava@ukr.net;Галина Стриженко -klu_lena@list.ru;Елена -tutmos3@yandex.ru;Павел Орловский -savax@rambler.ru;Дмитрий Савченко -susenko_a@ukr.net;Андрей Сусенко -bestway305@yandex.ru;Артур Нурахметов -PhilatovEvgeny@mail.ru;Евгений Филатов -ebortnikov@mail.ru;Евгений Бортников -kkvkk@mail.ru;Кирилл -chiganu@gmail.com;Евгения Гороха -artem.panteleev@aol.com;Артём -MAXYTA22@yandex.ru;Максим -dyrnoj@bk.ru;Максим -hakimov65@inbox.ru;Ринат -kborodavko2009@yandex.ru;Константин Бородавко -makguseff@yandex.ru;Максим Гусев -iguar.k@ya.ru;Игорь Кузнецов -serzhpodkolzin@yandex.ru;Сергей -oleg.akimov@mail.ru;Олег Акимов -anton.alyoshin@hotmail.com;Антон Алешин -profiservic2@yandex.ru;Михаил -strix1985@mail.ru;Анна -ritaces@inbox.lv;Rita Cevere -vmiretskaya@gmail.com;Viktoriia Miretska -pertik@list.ru;Александр -k.rachimov@mail.ru;Кирилл Рахимов -alexatro@yandex.ru;Александра Троянова -blackghost58@mail.ru;Илья -kira09051987@mail.ru;Гузель -choodick@gmail.com;Амелин Артем -guipago@mail.ru;Dmitry -lcf-84@mail.ru;Сергей Калинкин -nikita-ftf@Mail.ru;Nikita Veselov -Yoooda1989@mail.ru;Максим Петров -vip.samosadov@mail.ru;Алексей -marinemaks@yandex.ru;Мария Максимова -Minigalin.nail.M@yandex.ru;Наиль -royline@mail.ru;Шаронова Ольга -irena.kostina@mail.ru;ирина -5001010@bk.ru;Шемет Дмитрий -nastusha1995is@gmail.com;Анастасия -xaba578@mail.ru;Хава Куркиева -a.michurin1783@mail.ru;Артем Мичурин -9713943@mail.ru;Леонид -mkenes_2@mail.ru;Мадияр -hazhaev@gmail.com;Рашид Хажаев -bengard@yandex.ru;Наталья -flintl@bk.ru;Кулаков Александр -kovalev.home@mail.ru;Владимир Ковалев -walerock@mail.ru;Валерий -polkovnik51@mail.ru;Владимир -ci4rovik@mail.ru;Эдуард Фадеев -ansserg@yandex.ru;Сергей -vadzimbelsky@rambler.ru;Вадим Бельский -blackrum@yandex.ru;Роман Платонов -webprogrammer77@gmail.com;Прохоров Игорь -Vals_0791@mail.ru;Волкова Алиса -lexx59@gmail.com;Александр Пленкин -saski@mail.ru;Сергей Малкин -IVTsygankov@gmail.com;Иван -ruslan71@bmail.ru;Руслан Мордачев -lipsuke@mac.com;Дмитрий Фадеев -www.Rifma@mail.ru;Сергей Мудряков -Yuriy1357@mail.ru;Юрий -igvassor@gmail.com;Игорь Сорокин -belous.maria@gmail.com;Мария -1ckaz@mail.ru;Асет -edwantoshin@rambler.ru;Эдуард Антошин -aksay_sayt@mail.ru;Татьяна Вельмакина -zefaa@mail.ru;Елена Зинченко -kuznetsovaelena1@mail.ru;Кузнецова Елена -serggovs@yandex.ru;Говердовский Сергей -ale-xey76@yandex.ru;Алексей -strig_elena@mail.ru;Новикова Елена Владимировна -my-post@mail.ru;Татьяна -kviva@yandex.ru;Виктор -coop01@mail.ru;Андрей -afonin123@bk.ru;Александр -djsergeykovanin@mail.ru;Кованин Сергей -chel200807@yandex.ru;Анатолий Емельянов -senior.perfiliew@ya.ru;Иван Перфильев -irina.kisik@gmail.com;Ирина -gisstyle@yandex.ru;Анастасия Гофман -Evgeni2007@yandex.ru;Евгений -ngpk_lysenko@mail.ru;Виталий Лысенко -donder@yandex.ru;Пастухов Данил -2906300@inbox.ru;Ильсур -sir.oberst@yandex.ru;сергей -nadin12233@mail.ru;Надежда -pipopka@bk.ru;Тепляшина Евгения Сергеевна -maks2546@mail.ru;Максим -bkr1@yandex.ru;Карэн -felix.80808@mail.ru;Евгений -vladislav-avdeev@mail.ru;Владислав -sheptun_marina@mail.ru;Marina Ovchinnikova -zlata.reznickova@yandex.ru;злата резникова -Slava666-2008@ya.ru;Вячеслав -green2536@yandex.ru;Сергей -mk@bagur.su;Кирилл Мещерин -serge-meb@mail.ru;Сергей -okislyakov@gmail.com;Олег Кисляков -niki-1@yandex.ru;Сачков Денис -taurus19901@mail.ru;Вячеслав Скрыпник -julia_dea@mail.ru;Юлия Белоусова -riseagain@inbox.ru;Лина -Usov_88@mail.ru;Сергей -adastra.m@yandex.ru;Мокрушин Вячеслав -dmitriylarin@bk.ru;Дмитрий Ларин -utk1@list.ru;Владимир Макеев -kostgr@rambler.ru;Константин Гребенюков -dontsurrender@ya.ru;Сергей Терехов -andru_45@list.ru;Андрей -stepanuk1987@yandex.ru;Алексей -andrey777@maryno.net;Улякин Андрей Юрьевич -mobils100@yandex.ru;Максим Сурков -kirillrumyantsev1971@gmail.com;Кирилл Румянцев -2013ekaterina@mail.ru;Олег Ляшенко -sokol4eg@mail.ru;Михаил Соколов -vic.bandura@yandex.ru;Виктор Бандура -msp081152@mail.ru;Сергей Малахов -artur.mandrich.99@mail.ru;Мандрич Артур -dmitroff197@yandex.ru;Дмитрий -anton_semenchuk@rambler.ru;Антон -p0v13@mail.ru;Павел Погодин -lysenko.mi@gmail.com;Марк Лысенко -rock_n_vladok@mail.ru;Дурин Владислав -valero_sv@mail.ru;Валерий Сорока -artyomzykov@gmail.com;Артем -ekbregionetrader@gmail.com;Валентин -vladimir_glight@mail.ru;Владимир -shelbyblack37@gmail.com;Екатерина -ganin-va@yandex.ru;Василий Ганин -itshepard57574@gmail.com;Руслан -iborzik@gmail.com;Ирина Борзик -ziv1@yandex.ru;Игорь Золотарев -stas_ravskiy-95@mail.ru;Равский Станислав -osmusic17@gmail.com;Александр Богданович -vadigoryache@yandex.ru;вадим горячев -gamer1648@yandex.ru;Виктор -orloff.eg@yandex.ru;Данил -terraincod@gmail.com;Сергей -threed@rsgc.ru;Дмитрий Панфилов -svmc@ya.ru;Владимир -romagrog@gmail.com;Роман -regione-2000@ya.ru;Калугина Ольга Анатольевна -volnov_mv@mail.ru;Максим -zev3b@yandex.ru;Евгений Зеленько -sveta.utemova@bk.ru;Света -ann_posh@rambler.ru;Анна Сысоева -yglazy@mail.ru;Юрий -alvar63@mail.ru;Лариса Варавина -kira.kostenko@gmail.com;Кира Костенко -aselya.bekenova@gmail.com;Асель Бекенова -brolya@bk.ru;Бражинская Ольга -aamlhv@yandex.ru;Малахов Антон -r61boff@mail.ru;Григорий Шевцов -faridweb23@gmail.com;Фарид -vvuch@ya.ru;Вячеслав Волков -megafabr@yandex.ru;Николай Беляев -vladvolod@yandex.ru;Владислав Володин -galyna.pon@gmail.com;Galina Ponomarenko -edwardb@mail.ru;Эдуард Бурлаков -office@eskd72.ru;Дмитрий -sanzhiku@gmail.com;Sanzhar Urazaliyev -makr1975@yandex.ru;Максим -tsvetkovaai@yandex.ru;Цветкова Анна -polet2107@ya.ru;Вадим -kindaleks@gmail.com;Алексей -tsubasa@tut.by;Валера -zel-mirra@bk.ru;Вадим -anika2006@yandex.ru;Алексей Аникин -artsfabrica@gmail.com;Игорь Донцов -j.haustov@gmail.com;Евгений -qman_2@mail.ru;Василий Вдовин -oly_armavir@mail.ru;Ольга -Dron84@gmail.com;Андрей Шарунов -nikitakozh@ukr.net;Кожевников Никита -vavilov_alex@mail.ru;alex -polikor-n@yandex.ru;Олег Радаев -euro2@yandex.ru;Александр Блохинов -peters2004@yandex.ru;Соловьёв Пётр -dron_andr_2007@mail.ru;Анлрей -tatyana.best@list.ru;Татьяна Авдеева - -# 10 -gennadiy1983@ya.ru;Геннадий -artyomzolotykh@gmail.com;Артем -nikolletss@gmail.com;Марина -omsterkhova@rambler.ru;Ольга -puzach@mail.ru;Пузач Влад -mahneva-mariya@mail.ru;Мария -alexweb85@yandex.ru;Александр -ob080270@voliacable.com;Олег -kylych1@yandex.ru;Кылыч -mf915@mail.ru;Антон -kalina81@list.ru;Анна -klu_lena@list.ru;Елена -savax@rambler.ru;Дмитрий Савченко -ssprava@ukr.net;Галина Стриженко -susenko_a@ukr.net;Андрей Сусенко -tutmos3@yandex.ru;Павел Орловский -bestway305@yandex.ru;Артур Нурахметов -kkvkk@mail.ru;Кирилл -ebortnikov@mail.ru;Евгений Бортников -MAXYTA22@yandex.ru;Максим -chiganu@gmail.com;Евгения Гороха -hakimov65@inbox.ru;Ринат -dyrnoj@bk.ru;Максим -kborodavko2009@yandex.ru;Константин Бородавко -makguseff@yandex.ru;Максим Гусев -iguar.k@ya.ru;Игорь Кузнецов -serzhpodkolzin@yandex.ru;Сергей -oleg.akimov@mail.ru;Олег Акимов -anton.alyoshin@hotmail.com;Антон Алешин -profiservic2@yandex.ru;Михаил -ritaces@inbox.lv;Rita Cevere -pertik@list.ru;Александр -vmiretskaya@gmail.com;Viktoriia Miretska -artem.panteleev@aol.com;Артём -alexatro@yandex.ru;Александра Троянова -blackghost58@mail.ru;Илья -choodick@gmail.com;Амелин Артем -guipago@mail.ru;Dmitry -nikita-ftf@Mail.ru;Nikita Veselov -lcf-84@mail.ru;Сергей Калинкин -Yoooda1989@mail.ru;Максим Петров -kira09051987@mail.ru;Гузель -marinemaks@yandex.ru;Мария Максимова -Minigalin.nail.M@yandex.ru;Наиль -vip.samosadov@mail.ru;Алексей -xaba578@mail.ru;Хава Куркиева -a.michurin1783@mail.ru;Артем Мичурин -mkenes_2@mail.ru;Мадияр -9713943@mail.ru;Леонид -hazhaev@gmail.com;Рашид Хажаев -irena.kostina@mail.ru;ирина -flintl@bk.ru;Кулаков Александр -walerock@mail.ru;Валерий -5001010@bk.ru;Шемет Дмитрий -kovalev.home@mail.ru;Владимир Ковалев -bengard@yandex.ru;Наталья -polkovnik51@mail.ru;Владимир -vadzimbelsky@rambler.ru;Вадим Бельский -ci4rovik@mail.ru;Эдуард Фадеев -blackrum@yandex.ru;Роман Платонов -ansserg@yandex.ru;Сергей -webprogrammer77@gmail.com;Прохоров Игорь -Vals_0791@mail.ru;Волкова Алиса -saski@mail.ru;Сергей Малкин -ruslan71@bmail.ru;Руслан Мордачев -www.Rifma@mail.ru;Сергей Мудряков -igvassor@gmail.com;Игорь Сорокин -belous.maria@gmail.com;Мария -Yuriy1357@mail.ru;Юрий -lexx59@gmail.com;Александр Пленкин -edwantoshin@rambler.ru;Эдуард Антошин -kuznetsovaelena1@mail.ru;Кузнецова Елена -ale-xey76@yandex.ru;Алексей -serggovs@yandex.ru;Говердовский Сергей -zefaa@mail.ru;Елена Зинченко -1ckaz@mail.ru;Асет -strig_elena@mail.ru;Новикова Елена Владимировна -my-post@mail.ru;Татьяна -royline@mail.ru;Шаронова Ольга -lipsuke@mac.com;Дмитрий Фадеев -coop01@mail.ru;Андрей -aksay_sayt@mail.ru;Татьяна Вельмакина -djsergeykovanin@mail.ru;Кованин Сергей -kviva@yandex.ru;Виктор -gisstyle@yandex.ru;Анастасия Гофман -Evgeni2007@yandex.ru;Евгений -afonin123@bk.ru;Александр -senior.perfiliew@ya.ru;Иван Перфильев -irina.kisik@gmail.com;Ирина -chel200807@yandex.ru;Анатолий Емельянов -donder@yandex.ru;Пастухов Данил -2906300@inbox.ru;Ильсур -nadin12233@mail.ru;Надежда -felix.80808@mail.ru;Евгений -vladislav-avdeev@mail.ru;Владислав -maks2546@mail.ru;Максим -niki-1@yandex.ru;Сачков Денис -mk@bagur.su;Кирилл Мещерин -pipopka@bk.ru;Тепляшина Евгения Сергеевна -serge-meb@mail.ru;Сергей -sir.oberst@yandex.ru;сергей -Slava666-2008@ya.ru;Вячеслав -green2536@yandex.ru;Сергей -okislyakov@gmail.com;Олег Кисляков -zlata.reznickova@yandex.ru;злата резникова -riseagain@inbox.ru;Лина -utk1@list.ru;Владимир Макеев -kostgr@rambler.ru;Константин Гребенюков -dmitriylarin@bk.ru;Дмитрий Ларин -dontsurrender@ya.ru;Сергей Терехов -Usov_88@mail.ru;Сергей -taurus19901@mail.ru;Вячеслав Скрыпник -julia_dea@mail.ru;Юлия Белоусова -adastra.m@yandex.ru;Мокрушин Вячеслав -stepanuk1987@yandex.ru;Алексей -andrey777@maryno.net;Улякин Андрей Юрьевич -msp081152@mail.ru;Сергей Малахов -kirillrumyantsev1971@gmail.com;Кирилл Румянцев -andru_45@list.ru;Андрей -vic.bandura@yandex.ru;Виктор Бандура -anton_semenchuk@rambler.ru;Антон -sokol4eg@mail.ru;Михаил Соколов -dmitroff197@yandex.ru;Дмитрий -lysenko.mi@gmail.com;Марк Лысенко -2013ekaterina@mail.ru;Олег Ляшенко -rock_n_vladok@mail.ru;Дурин Владислав -artyomzykov@gmail.com;Артем -ekbregionetrader@gmail.com;Валентин -vladimir_glight@mail.ru;Владимир -p0v13@mail.ru;Павел Погодин -ziv1@yandex.ru;Игорь Золотарев -osmusic17@gmail.com;Александр Богданович -vadigoryache@yandex.ru;вадим горячев -gamer1648@yandex.ru;Виктор -threed@rsgc.ru;Дмитрий Панфилов -itshepard57574@gmail.com;Руслан -terraincod@gmail.com;Сергей -svmc@ya.ru;Владимир -orloff.eg@yandex.ru;Данил -volnov_mv@mail.ru;Максим -zev3b@yandex.ru;Евгений Зеленько -stas_ravskiy-95@mail.ru;Равский Станислав -sheptun_marina@mail.ru;Marina Ovchinnikova -sveta.utemova@bk.ru;Света -alvar63@mail.ru;Лариса Варавина -shelbyblack37@gmail.com;Екатерина -aselya.bekenova@gmail.com;Асель Бекенова -artur.mandrich.99@mail.ru;Мандрич Артур -brolya@bk.ru;Бражинская Ольга -kira.kostenko@gmail.com;Кира Костенко -ann_posh@rambler.ru;Анна Сысоева -r61boff@mail.ru;Григорий Шевцов -aamlhv@yandex.ru;Малахов Антон -faridweb23@gmail.com;Фарид -vvuch@ya.ru;Вячеслав Волков -ngpk_lysenko@mail.ru;Виталий Лысенко -makr1975@yandex.ru;Максим -tsubasa@tut.by;Валера -sanzhiku@gmail.com;Sanzhar Urazaliyev -kindaleks@gmail.com;Алексей -galyna.pon@gmail.com;Galina Ponomarenko -office@eskd72.ru;Дмитрий -yglazy@mail.ru;Юрий -j.haustov@gmail.com;Евгений -oly_armavir@mail.ru;Ольга -edwardb@mail.ru;Эдуард Бурлаков -polet2107@ya.ru;Вадим -Dron84@gmail.com;Андрей Шарнуов -anika2006@yandex.ru;Алексей Аникин -valero_sv@mail.ru;Валерий Сорока -zel-mirra@bk.ru;Вадим -artsfabrica@gmail.com;Игорь Донцов -vavilov_alex@mail.ru;alex -peters2004@yandex.ru;Соловьёв Пётр - -# 11 -gennadiy1983@ya.ru;Геннадий -artyomzolotykh@gmail.com;Артем -nikolletss@gmail.com;Марина -mahneva-mariya@mail.ru;Мария -omsterkhova@rambler.ru;Ольга -alexweb85@yandex.ru;Александр -kylych1@yandex.ru;Кылыч -kalina81@list.ru;Анна -mf915@mail.ru;Антон -ob080270@voliacable.com;Олег -klu_lena@list.ru;Елена -tutmos3@yandex.ru;Павел Орловский -ebortnikov@mail.ru;Евгений Бортников -susenko_a@ukr.net;Андрей Сусенко -puzach@mail.ru;Пузач Влад -savax@rambler.ru;Дмитрий Савченко -kkvkk@mail.ru;Кирилл -ssprava@ukr.net;Галина Стриженко -chiganu@gmail.com;Евгения Гороха -bestway305@yandex.ru;Артур Нурахметов -kborodavko2009@yandex.ru;Константин Бородавко -dyrnoj@bk.ru;Максим -oleg.akimov@mail.ru;Олег Акимов -makguseff@yandex.ru;Максим Гусев -serzhpodkolzin@yandex.ru;Сергей -hakimov65@inbox.ru;Ринат -iguar.k@ya.ru;Игорь Кузнецов -pertik@list.ru;Александр -profiservic2@yandex.ru;Михаил -ritaces@inbox.lv;Rita Cevere -vmiretskaya@gmail.com;Viktoriia Miretska -MAXYTA22@yandex.ru;Максим -alexatro@yandex.ru;Александра Троянова -blackghost58@mail.ru;Илья -guipago@mail.ru;Dmitry -nikita-ftf@Mail.ru;Nikita Veselov -Yoooda1989@mail.ru;Максим Петров -lcf-84@mail.ru;Сергей Калинкин -marinemaks@yandex.ru;Мария Максимова -Minigalin.nail.M@yandex.ru;Наиль -choodick@gmail.com;Амелин Артем -xaba578@mail.ru;Хава Куркиева -kira09051987@mail.ru;Гузель -a.michurin1783@mail.ru;Артем Мичурин -mkenes_2@mail.ru;Мадияр -flintl@bk.ru;Кулаков Александр -walerock@mail.ru;Валерий -irena.kostina@mail.ru;ирина -kovalev.home@mail.ru;Владимир Ковалев -vip.samosadov@mail.ru;Алексей -bengard@yandex.ru;Наталья -vadzimbelsky@rambler.ru;Вадим Бельский -hazhaev@gmail.com;Рашид Хажаев -polkovnik51@mail.ru;Владимир -5001010@bk.ru;Шемет Дмитрий -blackrum@yandex.ru;Роман Платонов -ansserg@yandex.ru;Сергей -Vals_0791@mail.ru;Волкова Алиса -ci4rovik@mail.ru;Эдуард Фадеев -9713943@mail.ru;Леонид -webprogrammer77@gmail.com;Прохоров Игорь -ruslan71@bmail.ru;Руслан Мордачев -saski@mail.ru;Сергей Малкин -www.Rifma@mail.ru;Сергей Мудряков -igvassor@gmail.com;Игорь Сорокин -Yuriy1357@mail.ru;Юрий -belous.maria@gmail.com;Мария -edwantoshin@rambler.ru;Эдуард Антошин -kuznetsovaelena1@mail.ru;Кузнецова Елена -serggovs@yandex.ru;Говердовский Сергей -ale-xey76@yandex.ru;Алексей -my-post@mail.ru;Татьяна -coop01@mail.ru;Андрей -1ckaz@mail.ru;Асет -gisstyle@yandex.ru;Анастасия Гофман -donder@yandex.ru;Пастухов Данил -aksay_sayt@mail.ru;Татьяна Вельмакина -lexx59@gmail.com;Александр Пленкин -nadin12233@mail.ru;Надежда -2906300@inbox.ru;Ильсур -vladislav-avdeev@mail.ru;Владислав -felix.80808@mail.ru;Евгений -maks2546@mail.ru;Максим -niki-1@yandex.ru;Сачков Денис -mk@bagur.su;Кирилл Мещерин -senior.perfiliew@ya.ru;Иван Перфильев -serge-meb@mail.ru;Сергей -royline@mail.ru;Шаронова Ольга -irina.kisik@gmail.com;Ирина -riseagain@inbox.ru;Лина -utk1@list.ru;Владимир Макеев -okislyakov@gmail.com;Олег Кисляков -zlata.reznickova@yandex.ru;злата резникова -dontsurrender@ya.ru;Сергей Терехов -zefaa@mail.ru;Елена Зинченко -julia_dea@mail.ru;Юлия Белоусова -kostgr@rambler.ru;Константин Гребенюков -stepanuk1987@yandex.ru;Алексей -adastra.m@yandex.ru;Мокрушин Вячеслав -taurus19901@mail.ru;Вячеслав Скрыпник -kirillrumyantsev1971@gmail.com;Кирилл Румянцев -msp081152@mail.ru;Сергей Малахов -Slava666-2008@ya.ru;Вячеслав -sir.oberst@yandex.ru;сергей -anton_semenchuk@rambler.ru;Антон -andru_45@list.ru;Андрей -lysenko.mi@gmail.com;Марк Лысенко -artyomzykov@gmail.com;Артем -rock_n_vladok@mail.ru;Дурин Владислав -vic.bandura@yandex.ru;Виктор Бандура -Usov_88@mail.ru;Сергей -sokol4eg@mail.ru;Михаил Соколов -dmitroff197@yandex.ru;Дмитрий -vladimir_glight@mail.ru;Владимир -lipsuke@mac.com;Дмитрий Фадеев -2013ekaterina@mail.ru;Олег Ляшенко -andrey777@maryno.net;Улякин Андрей Юрьевич -ekbregionetrader@gmail.com;Валентин -vadigoryache@yandex.ru;вадим горячев -gamer1648@yandex.ru;Виктор -osmusic17@gmail.com;Александр Богданович -threed@rsgc.ru;Дмитрий Панфилов -itshepard57574@gmail.com;Руслан -zev3b@yandex.ru;Евгений Зеленько -orloff.eg@yandex.ru;Данил -volnov_mv@mail.ru;Максим -svmc@ya.ru;Владимир -terraincod@gmail.com;Сергей -stas_ravskiy-95@mail.ru;Равский Станислав -alvar63@mail.ru;Лариса Варавина -brolya@bk.ru;Бражинская Ольга -aselya.bekenova@gmail.com;Асель Бекенова -r61boff@mail.ru;Григорий Шевцов -kira.kostenko@gmail.com;Кира Костенко -shelbyblack37@gmail.com;Екатерина -khaaan@mail.ru;Алексей -faridweb23@gmail.com;Фарид -artur.mandrich.99@mail.ru;Мандрич Артур -vvuch@ya.ru;Вячеслав Волков -aamlhv@yandex.ru;Малахов Антон -tsubasa@tut.by;Валера -p0v13@mail.ru;Павел Погодин -makr1975@yandex.ru;Максим -Dron84@gmail.com;Андрей Шарнуов -kindaleks@gmail.com;Алексей -galyna.pon@gmail.com;Galina Ponomarenko -yglazy@mail.ru;Юрий -oly_armavir@mail.ru;Ольга -j.haustov@gmail.com;Евгений -polet2107@ya.ru;Вадим -sanzhiku@gmail.com;Sanzhar Urazaliyev -ngpk_lysenko@mail.ru;Виталий Лысенко -anika2006@yandex.ru;Алексей Аникин -vavilov_alex@mail.ru;alex -zel-mirra@bk.ru;Вадим -office@eskd72.ru;Дмитрий -peters2004@yandex.ru;Соловьёв Пётр - -# 12 -gennadiy1983@ya.ru;Геннадий -artyomzolotykh@gmail.com;Артем -mahneva-mariya@mail.ru;Мария -nikolletss@gmail.com;Марина -omsterkhova@rambler.ru;Ольга -kylych1@yandex.ru;Кылыч -alexweb85@yandex.ru;Александр -kalina81@list.ru;Анна -ob080270@voliacable.com;Олег -mf915@mail.ru;Антон -susenko_a@ukr.net;Андрей Сусенко -savax@rambler.ru;Дмитрий Савченко -ebortnikov@mail.ru;Евгений Бортников -tutmos3@yandex.ru;Павел Орловский -kkvkk@mail.ru;Кирилл -chiganu@gmail.com;Евгения Гороха -bestway305@yandex.ru;Артур Нурахметов -puzach@mail.ru;Пузач Влад -klu_lena@list.ru;Елена -dyrnoj@bk.ru;Максим -kborodavko2009@yandex.ru;Константин Бородавко -oleg.akimov@mail.ru;Олег Акимов -ssprava@ukr.net;Галина Стриженко -makguseff@yandex.ru;Максим Гусев -serzhpodkolzin@yandex.ru;Сергей -pertik@list.ru;Александр -ritaces@inbox.lv;Rita Cevere -vmiretskaya@gmail.com;Viktoriia Miretska -profiservic2@yandex.ru;Михаил -blackghost58@mail.ru;Илья -alexatro@yandex.ru;Александра Троянова -iguar.k@ya.ru;Игорь Кузнецов -Yoooda1989@mail.ru;Максим Петров -guipago@mail.ru;Dmitry -nikita-ftf@Mail.ru;Nikita Veselov -lcf-84@mail.ru;Сергей Калинкин -marinemaks@yandex.ru;Мария Максимова -MAXYTA22@yandex.ru;Максим -hakimov65@inbox.ru;Ринат -Minigalin.nail.M@yandex.ru;Наиль -a.michurin1783@mail.ru;Артем Мичурин -xaba578@mail.ru;Хава Куркиева -kira09051987@mail.ru;Гузель -flintl@bk.ru;Кулаков Александр -walerock@mail.ru;Валерий -kovalev.home@mail.ru;Владимир Ковалев -mkenes_2@mail.ru;Мадияр -irena.kostina@mail.ru;ирина -vadzimbelsky@rambler.ru;Вадим Бельский -bengard@yandex.ru;Наталья -choodick@gmail.com;Амелин Артем -hazhaev@gmail.com;Рашид Хажаев -polkovnik51@mail.ru;Владимир -Vals_0791@mail.ru;Волкова Алиса -vip.samosadov@mail.ru;Алексей -blackrum@yandex.ru;Роман Платонов -ruslan71@bmail.ru;Руслан Мордачев -ci4rovik@mail.ru;Эдуард Фадеев -webprogrammer77@gmail.com;Прохоров Игорь -saski@mail.ru;Сергей Малкин -www.Rifma@mail.ru;Сергей Мудряков -9713943@mail.ru;Леонид -ansserg@yandex.ru;Сергей -igvassor@gmail.com;Игорь Сорокин -belous.maria@gmail.com;Мария -edwantoshin@rambler.ru;Эдуард Антошин -kuznetsovaelena1@mail.ru;Кузнецова Елена -serggovs@yandex.ru;Говердовский Сергей -ale-xey76@yandex.ru;Алексей -Yuriy1357@mail.ru;Юрий -my-post@mail.ru;Татьяна -coop01@mail.ru;Андрей -gisstyle@yandex.ru;Анастасия Гофман -donder@yandex.ru;Пастухов Данил -1ckaz@mail.ru;Асет -nadin12233@mail.ru;Надежда -aksay_sayt@mail.ru;Татьяна Вельмакина -2906300@inbox.ru;Ильсур -felix.80808@mail.ru;Евгений -niki-1@yandex.ru;Сачков Денис -maks2546@mail.ru;Максим -vladislav-avdeev@mail.ru;Владислав -mk@bagur.su;Кирилл Мещерин -serge-meb@mail.ru;Сергей -riseagain@inbox.ru;Лина -utk1@list.ru;Владимир Макеев -dontsurrender@ya.ru;Сергей Терехов -royline@mail.ru;Шаронова Ольга -zefaa@mail.ru;Елена Зинченко -zlata.reznickova@yandex.ru;злата резникова -kostgr@rambler.ru;Константин Гребенюков -msp081152@mail.ru;Сергей Малахов -kirillrumyantsev1971@gmail.com;Кирилл Румянцев -senior.perfiliew@ya.ru;Иван Перфильев -stepanuk1987@yandex.ru;Алексей -andru_45@list.ru;Андрей -lysenko.mi@gmail.com;Марк Лысенко -Slava666-2008@ya.ru;Вячеслав -artyomzykov@gmail.com;Артем -sir.oberst@yandex.ru;сергей -rock_n_vladok@mail.ru;Дурин Владислав -vic.bandura@yandex.ru;Виктор Бандура -anton_semenchuk@rambler.ru;Антон -sokol4eg@mail.ru;Михаил Соколов -vladimir_glight@mail.ru;Владимир -2013ekaterina@mail.ru;Олег Ляшенко -ekbregionetrader@gmail.com;Валентин -vadigoryache@yandex.ru;вадим горячев -gamer1648@yandex.ru;Виктор -threed@rsgc.ru;Дмитрий Панфилов -zev3b@yandex.ru;Евгений Зеленько -orloff.eg@yandex.ru;Данил -taurus19901@mail.ru;Вячеслав Скрыпник -volnov_mv@mail.ru;Максим -itshepard57574@gmail.com;Руслан -dmitroff197@yandex.ru;Дмитрий -svmc@ya.ru;Владимир -osmusic17@gmail.com;Александр Богданович -stas_ravskiy-95@mail.ru;Равский Станислав -terraincod@gmail.com;Сергей -r61boff@mail.ru;Григорий Шевцов -khaaan@mail.ru;Алексей -kira.kostenko@gmail.com;Кира Костенко -faridweb23@gmail.com;Фарид -vvuch@ya.ru;Вячеслав Волков -brolya@bk.ru;Бражинская Ольга -alvar63@mail.ru;Лариса Варавина -aselya.bekenova@gmail.com;Асель Бекенова -shelbyblack37@gmail.com;Екатерина -artur.mandrich.99@mail.ru;Мандрич Артур -aamlhv@yandex.ru;Малахов Антон -tsubasa@tut.by;Валера -makr1975@yandex.ru;Максим -Dron84@gmail.com;Андрей Шарнуов -oly_armavir@mail.ru;Ольга -j.haustov@gmail.com;Евгений -polet2107@ya.ru;Вадим -galyna.pon@gmail.com;Galina Ponomarenko -yglazy@mail.ru;Юрий -sanzhiku@gmail.com;Sanzhar Urazaliyev -vavilov_alex@mail.ru;alex - -# 13 -artyomzolotykh@gmail.com;Артем -gennadiy1983@ya.ru;Геннадий -mahneva-mariya@mail.ru;Мария -omsterkhova@rambler.ru;Ольга -nikolletss@gmail.com;Марина -kylych1@yandex.ru;Кылыч -alexweb85@yandex.ru;Александр -kalina81@list.ru;Анна -susenko_a@ukr.net;Андрей Сусенко -ebortnikov@mail.ru;Евгений Бортников -tutmos3@yandex.ru;Павел Орловский -mf915@mail.ru;Антон -kkvkk@mail.ru;Кирилл -bestway305@yandex.ru;Артур Нурахметов -chiganu@gmail.com;Евгения Гороха -puzach@mail.ru;Пузач Влад -ob080270@voliacable.com;Олег -dyrnoj@bk.ru;Максим -kborodavko2009@yandex.ru;Константин Бородавко -oleg.akimov@mail.ru;Олег Акимов -pertik@list.ru;Александр -serzhpodkolzin@yandex.ru;Сергей -makguseff@yandex.ru;Максим Гусев -ritaces@inbox.lv;Rita Cevere -ssprava@ukr.net;Галина Стриженко -vmiretskaya@gmail.com;Viktoriia Miretska -profiservic2@yandex.ru;Михаил -blackghost58@mail.ru;Илья -klu_lena@list.ru;Елена -alexatro@yandex.ru;Александра Троянова -Yoooda1989@mail.ru;Максим Петров -marinemaks@yandex.ru;Мария Максимова -guipago@mail.ru;Dmitry -lcf-84@mail.ru;Сергей Калинкин -nikita-ftf@Mail.ru;Nikita Veselov -a.michurin1783@mail.ru;Артем Мичурин -MAXYTA22@yandex.ru;Максим -kira09051987@mail.ru;Гузель -flintl@bk.ru;Кулаков Александр -kovalev.home@mail.ru;Владимир Ковалев -walerock@mail.ru;Валерий -bengard@yandex.ru;Наталья -mkenes_2@mail.ru;Мадияр -xaba578@mail.ru;Хава Куркиева -irena.kostina@mail.ru;ирина -vadzimbelsky@rambler.ru;Вадим Бельский -Vals_0791@mail.ru;Волкова Алиса -polkovnik51@mail.ru;Владимир -choodick@gmail.com;Амелин Артем -ruslan71@bmail.ru;Руслан Мордачев -blackrum@yandex.ru;Роман Платонов -www.Rifma@mail.ru;Сергей Мудряков -hazhaev@gmail.com;Рашид Хажаев -webprogrammer77@gmail.com;Прохоров Игорь -vip.samosadov@mail.ru;Алексей -saski@mail.ru;Сергей Малкин -9713943@mail.ru;Леонид -ci4rovik@mail.ru;Эдуард Фадеев -ansserg@yandex.ru;Сергей -Minigalin.nail.M@yandex.ru;Наиль -kuznetsovaelena1@mail.ru;Кузнецова Елена -igvassor@gmail.com;Игорь Сорокин -belous.maria@gmail.com;Мария -serggovs@yandex.ru;Говердовский Сергей -edwantoshin@rambler.ru;Эдуард Антошин -my-post@mail.ru;Татьяна -ale-xey76@yandex.ru;Алексей -savax@rambler.ru;Дмитрий Савченко -gisstyle@yandex.ru;Анастасия Гофман -coop01@mail.ru;Андрей -donder@yandex.ru;Пастухов Данил -nadin12233@mail.ru;Надежда -2906300@inbox.ru;Ильсур -niki-1@yandex.ru;Сачков Денис -aksay_sayt@mail.ru;Татьяна Вельмакина -vladislav-avdeev@mail.ru;Владислав -mk@bagur.su;Кирилл Мещерин -serge-meb@mail.ru;Сергей -dontsurrender@ya.ru;Сергей Терехов -utk1@list.ru;Владимир Макеев -riseagain@inbox.ru;Лина -msp081152@mail.ru;Сергей Малахов -zlata.reznickova@yandex.ru;злата резникова -royline@mail.ru;Шаронова Ольга -artyomzykov@gmail.com;Артем -kostgr@rambler.ru;Константин Гребенюков -lysenko.mi@gmail.com;Марк Лысенко -kirillrumyantsev1971@gmail.com;Кирилл Румянцев -stepanuk1987@yandex.ru;Алексей -Slava666-2008@ya.ru;Вячеслав -andru_45@list.ru;Андрей -rock_n_vladok@mail.ru;Дурин Владислав -vladimir_glight@mail.ru;Владимир -sir.oberst@yandex.ru;сергей -2013ekaterina@mail.ru;Олег Ляшенко -vic.bandura@yandex.ru;Виктор Бандура -anton_semenchuk@rambler.ru;Антон -vadigoryache@yandex.ru;вадим горячев -gamer1648@yandex.ru;Виктор -ekbregionetrader@gmail.com;Валентин -threed@rsgc.ru;Дмитрий Панфилов -zev3b@yandex.ru;Евгений Зеленько -orloff.eg@yandex.ru;Данил -volnov_mv@mail.ru;Максим -taurus19901@mail.ru;Вячеслав Скрыпник -svmc@ya.ru;Владимир -osmusic17@gmail.com;Александр Богданович -itshepard57574@gmail.com;Руслан -stas_ravskiy-95@mail.ru;Равский Станислав -senior.perfiliew@ya.ru;Иван Перфильев -r61boff@mail.ru;Григорий Шевцов -faridweb23@gmail.com;Фарид -khaaan@mail.ru;Алексей -vvuch@ya.ru;Вячеслав Волков -brolya@bk.ru;Бражинская Ольга -dmitroff197@yandex.ru;Дмитрий -kira.kostenko@gmail.com;Кира Костенко -shelbyblack37@gmail.com;Екатерина -alvar63@mail.ru;Лариса Варавина -terraincod@gmail.com;Сергей -aselya.bekenova@gmail.com;Асель Бекенова -tsubasa@tut.by;Валера -aamlhv@yandex.ru;Малахов Антон -Dron84@gmail.com;Андрей Шарнуов -oly_armavir@mail.ru;Ольга -makr1975@yandex.ru;Максим -galyna.pon@gmail.com;Galina Ponomarenko -j.haustov@gmail.com;Евгений -polet2107@ya.ru;Вадим -vavilov_alex@mail.ru;alex - -# 14 -artyomzolotykh@gmail.com;Артем -gennadiy1983@ya.ru;Геннадий -mahneva-mariya@mail.ru;Мария -nikolletss@gmail.com;Марина -omsterkhova@rambler.ru;Ольга -kylych1@yandex.ru;Кылыч -susenko_a@ukr.net;Андрей Сусенко -kalina81@list.ru;Анна -ebortnikov@mail.ru;Евгений Бортников -bestway305@yandex.ru;Артур Нурахметов -tutmos3@yandex.ru;Павел Орловский -mf915@mail.ru;Антон -chiganu@gmail.com;Евгения Гороха -alexweb85@yandex.ru;Александр -dyrnoj@bk.ru;Максим -puzach@mail.ru;Пузач Влад -kkvkk@mail.ru;Кирилл -kborodavko2009@yandex.ru;Константин Бородавко -oleg.akimov@mail.ru;Олег Акимов -ob080270@voliacable.com;Олег -pertik@list.ru;Александр -serzhpodkolzin@yandex.ru;Сергей -ritaces@inbox.lv;Rita Cevere -makguseff@yandex.ru;Максим Гусев -ssprava@ukr.net;Галина Стриженко -vmiretskaya@gmail.com;Viktoriia Miretska -profiservic2@yandex.ru;Михаил -alexatro@yandex.ru;Александра Троянова -blackghost58@mail.ru;Илья -Yoooda1989@mail.ru;Максим Петров -marinemaks@yandex.ru;Мария Максимова -lcf-84@mail.ru;Сергей Калинкин -nikita-ftf@Mail.ru;Nikita Veselov -guipago@mail.ru;Dmitry -a.michurin1783@mail.ru;Артем Мичурин -klu_lena@list.ru;Елена -flintl@bk.ru;Кулаков Александр -MAXYTA22@yandex.ru;Максим -kovalev.home@mail.ru;Владимир Ковалев -walerock@mail.ru;Валерий -irena.kostina@mail.ru;ирина -bengard@yandex.ru;Наталья -mkenes_2@mail.ru;Мадияр -vadzimbelsky@rambler.ru;Вадим Бельский -Vals_0791@mail.ru;Волкова Алиса -ruslan71@bmail.ru;Руслан Мордачев -xaba578@mail.ru;Хава Куркиева -choodick@gmail.com;Амелин Артем -polkovnik51@mail.ru;Владимир -hazhaev@gmail.com;Рашид Хажаев -blackrum@yandex.ru;Роман Платонов -www.Rifma@mail.ru;Сергей Мудряков -vip.samosadov@mail.ru;Алексей -webprogrammer77@gmail.com;Прохоров Игорь -saski@mail.ru;Сергей Малкин -ansserg@yandex.ru;Сергей -serggovs@yandex.ru;Говердовский Сергей -ci4rovik@mail.ru;Эдуард Фадеев -belous.maria@gmail.com;Мария -edwantoshin@rambler.ru;Эдуард Антошин -my-post@mail.ru;Татьяна -donder@yandex.ru;Пастухов Данил -gisstyle@yandex.ru;Анастасия Гофман -Minigalin.nail.M@yandex.ru;Наиль -coop01@mail.ru;Андрей -nadin12233@mail.ru;Надежда -niki-1@yandex.ru;Сачков Денис -igvassor@gmail.com;Игорь Сорокин -vladislav-avdeev@mail.ru;Владислав -2906300@inbox.ru;Ильсур -dontsurrender@ya.ru;Сергей Терехов -mk@bagur.su;Кирилл Мещерин -serge-meb@mail.ru;Сергей -utk1@list.ru;Владимир Макеев -riseagain@inbox.ru;Лина -ale-xey76@yandex.ru;Алексей -msp081152@mail.ru;Сергей Малахов -artyomzykov@gmail.com;Артем -kostgr@rambler.ru;Константин Гребенюков -zlata.reznickova@yandex.ru;злата резникова -lysenko.mi@gmail.com;Марк Лысенко -royline@mail.ru;Шаронова Ольга -stepanuk1987@yandex.ru;Алексей -kirillrumyantsev1971@gmail.com;Кирилл Румянцев -andru_45@list.ru;Андрей -rock_n_vladok@mail.ru;Дурин Владислав -vladimir_glight@mail.ru;Владимир -2013ekaterina@mail.ru;Олег Ляшенко -vadigoryache@yandex.ru;вадим горячев -gamer1648@yandex.ru;Виктор -threed@rsgc.ru;Дмитрий Панфилов -Slava666-2008@ya.ru;Вячеслав -zev3b@yandex.ru;Евгений Зеленько -anton_semenchuk@rambler.ru;Антон -sir.oberst@yandex.ru;сергей -volnov_mv@mail.ru;Максим -orloff.eg@yandex.ru;Данил -osmusic17@gmail.com;Александр Богданович -ekbregionetrader@gmail.com;Валентин -svmc@ya.ru;Владимир -r61boff@mail.ru;Григорий Шевцов -khaaan@mail.ru;Алексей -vvuch@ya.ru;Вячеслав Волков -faridweb23@gmail.com;Фарид -shelbyblack37@gmail.com;Екатерина -stas_ravskiy-95@mail.ru;Равский Станислав -dmitroff197@yandex.ru;Дмитрий -brolya@bk.ru;Бражинская Ольга -tsubasa@tut.by;Валера -kira.kostenko@gmail.com;Кира Костенко -aselya.bekenova@gmail.com;Асель Бекенова -alvar63@mail.ru;Лариса Варавина -aamlhv@yandex.ru;Малахов Антон -Dron84@gmail.com;Андрей Шарнуов -taurus19901@mail.ru;Вячеслав Скрыпник -makr1975@yandex.ru;Максим -oly_armavir@mail.ru;Ольга -j.haustov@gmail.com;Евгений - -# 15 -artyomzolotykh@gmail.com;Артем -gennadiy1983@ya.ru;Геннадий -omsterkhova@rambler.ru;Ольга -mahneva-mariya@mail.ru;Мария -nikolletss@gmail.com;Марина -susenko_a@ukr.net;Андрей Сусенко -kylych1@yandex.ru;Кылыч -ebortnikov@mail.ru;Евгений Бортников -bestway305@yandex.ru;Артур Нурахметов -kalina81@list.ru;Анна -tutmos3@yandex.ru;Павел Орловский -chiganu@gmail.com;Евгения Гороха -alexweb85@yandex.ru;Александр -dyrnoj@bk.ru;Максим -puzach@mail.ru;Пузач Влад -kborodavko2009@yandex.ru;Константин Бородавко -mf915@mail.ru;Антон -pertik@list.ru;Александр -kkvkk@mail.ru;Кирилл -oleg.akimov@mail.ru;Олег Акимов -ssprava@ukr.net;Галина Стриженко -ob080270@voliacable.com;Олег -serzhpodkolzin@yandex.ru;Сергей -makguseff@yandex.ru;Максим Гусев -vmiretskaya@gmail.com;Viktoriia Miretska -profiservic2@yandex.ru;Михаил -marinemaks@yandex.ru;Мария Максимова -alexatro@yandex.ru;Александра Троянова -blackghost58@mail.ru;Илья -lcf-84@mail.ru;Сергей Калинкин -Yoooda1989@mail.ru;Максим Петров -a.michurin1783@mail.ru;Артем Мичурин -flintl@bk.ru;Кулаков Александр -guipago@mail.ru;Dmitry -ritaces@inbox.lv;Rita Cevere -kovalev.home@mail.ru;Владимир Ковалев -MAXYTA22@yandex.ru;Максим -walerock@mail.ru;Валерий -nikita-ftf@Mail.ru;Nikita Veselov -mkenes_2@mail.ru;Мадияр -irena.kostina@mail.ru;ирина -Vals_0791@mail.ru;Волкова Алиса -vadzimbelsky@rambler.ru;Вадим Бельский -bengard@yandex.ru;Наталья -ruslan71@bmail.ru;Руслан Мордачев -www.Rifma@mail.ru;Сергей Мудряков -klu_lena@list.ru;Елена -blackrum@yandex.ru;Роман Платонов -hazhaev@gmail.com;Рашид Хажаев -saski@mail.ru;Сергей Малкин -webprogrammer77@gmail.com;Прохоров Игорь -polkovnik51@mail.ru;Владимир -choodick@gmail.com;Амелин Артем -ansserg@yandex.ru;Сергей -serggovs@yandex.ru;Говердовский Сергей -belous.maria@gmail.com;Мария -my-post@mail.ru;Татьяна -gisstyle@yandex.ru;Анастасия Гофман -Minigalin.nail.M@yandex.ru;Наиль -donder@yandex.ru;Пастухов Данил -xaba578@mail.ru;Хава Куркиева -coop01@mail.ru;Андрей -vip.samosadov@mail.ru;Алексей -vladislav-avdeev@mail.ru;Владислав -dontsurrender@ya.ru;Сергей Терехов -mk@bagur.su;Кирилл Мещерин -riseagain@inbox.ru;Лина -serge-meb@mail.ru;Сергей -ci4rovik@mail.ru;Эдуард Фадеев -nadin12233@mail.ru;Надежда -msp081152@mail.ru;Сергей Малахов -artyomzykov@gmail.com;Артем -lysenko.mi@gmail.com;Марк Лысенко -stepanuk1987@yandex.ru;Алексей -zlata.reznickova@yandex.ru;злата резникова -2906300@inbox.ru;Ильсур -ale-xey76@yandex.ru;Алексей -royline@mail.ru;Шаронова Ольга -vladimir_glight@mail.ru;Владимир -rock_n_vladok@mail.ru;Дурин Владислав -gamer1648@yandex.ru;Виктор -andru_45@list.ru;Андрей -threed@rsgc.ru;Дмитрий Панфилов -kostgr@rambler.ru;Константин Гребенюков -zev3b@yandex.ru;Евгений Зеленько -vadigoryache@yandex.ru;вадим горячев -kirillrumyantsev1971@gmail.com;Кирилл Румянцев -Slava666-2008@ya.ru;Вячеслав -volnov_mv@mail.ru;Максим -orloff.eg@yandex.ru;Данил -anton_semenchuk@rambler.ru;Антон -host510@mail.ru;Михаил Гостищев -osmusic17@gmail.com;Александр Богданович -utk1@list.ru;Владимир Макеев -ekbregionetrader@gmail.com;Валентин -r61boff@mail.ru;Григорий Шевцов -vvuch@ya.ru;Вячеслав Волков -faridweb23@gmail.com;Фарид -shelbyblack37@gmail.com;Екатерина -tsubasa@tut.by;Валера -svmc@ya.ru;Владимир -Dron84@gmail.com;Андрей Шарнуов -kira.kostenko@gmail.com;Кира Костенко -alvar63@mail.ru;Лариса Варавина -aamlhv@yandex.ru;Малахов Антон -aselya.bekenova@gmail.com;Асель Бекенова - -# 16 -gennadiy1983@ya.ru;Геннадий -artyomzolotykh@gmail.com;Артем -mahneva-mariya@mail.ru;Мария -susenko_a@ukr.net;Андрей Сусенко -nikolletss@gmail.com;Марина -omsterkhova@rambler.ru;Ольга -kylych1@yandex.ru;Кылыч -ebortnikov@mail.ru;Евгений Бортников -bestway305@yandex.ru;Артур Нурахметов -tutmos3@yandex.ru;Павел Орловский -chiganu@gmail.com;Евгения Гороха -puzach@mail.ru;Пузач Влад -kborodavko2009@yandex.ru;Константин Бородавко -dyrnoj@bk.ru;Максим -kkvkk@mail.ru;Кирилл -pertik@list.ru;Александр -mf915@mail.ru;Антон -alexweb85@yandex.ru;Александр -ssprava@ukr.net;Галина Стриженко -makguseff@yandex.ru;Максим Гусев -ob080270@voliacable.com;Олег -marinemaks@yandex.ru;Мария Максимова -blackghost58@mail.ru;Илья -vmiretskaya@gmail.com;Viktoriia Miretska -alexatro@yandex.ru;Александра Троянова -a.michurin1783@mail.ru;Артем Мичурин -Yoooda1989@mail.ru;Максим Петров -flintl@bk.ru;Кулаков Александр -lcf-84@mail.ru;Сергей Калинкин -kovalev.home@mail.ru;Владимир Ковалев -guipago@mail.ru;Dmitry -irena.kostina@mail.ru;ирина -MAXYTA22@yandex.ru;Максим -Vals_0791@mail.ru;Волкова Алиса -profiservic2@yandex.ru;Михаил -bengard@yandex.ru;Наталья -vadzimbelsky@rambler.ru;Вадим Бельский -walerock@mail.ru;Валерий -www.Rifma@mail.ru;Сергей Мудряков -ruslan71@bmail.ru;Руслан Мордачев -webprogrammer77@gmail.com;Прохоров Игорь -saski@mail.ru;Сергей Малкин -serzhpodkolzin@yandex.ru;Сергей -hazhaev@gmail.com;Рашид Хажаев -kalina81@list.ru;Анна -ansserg@yandex.ru;Сергей -serggovs@yandex.ru;Говердовский Сергей -klu_lena@list.ru;Елена -my-post@mail.ru;Татьяна -donder@yandex.ru;Пастухов Данил -gisstyle@yandex.ru;Анастасия Гофман -coop01@mail.ru;Андрей -belous.maria@gmail.com;Мария -vip.samosadov@mail.ru;Алексей -mk@bagur.su;Кирилл Мещерин -riseagain@inbox.ru;Лина -serge-meb@mail.ru;Сергей -nadin12233@mail.ru;Надежда -vladislav-avdeev@mail.ru;Владислав -msp081152@mail.ru;Сергей Малахов -artyomzykov@gmail.com;Артем -zlata.reznickova@yandex.ru;злата резникова -artyomzykov@yandex.ru;Артём -ale-xey76@yandex.ru;Алексей -lysenko.mi@gmail.com;Марк Лысенко -stepanuk1987@yandex.ru;Алексей -rock_n_vladok@mail.ru;Дурин Владислав -choodick@gmail.com;Амелин Артем -threed@rsgc.ru;Дмитрий Панфилов -vladimir_glight@mail.ru;Владимир -gamer1648@yandex.ru;Виктор -vadigoryache@yandex.ru;вадим горячев -kostgr@rambler.ru;Константин Гребенюков -zev3b@yandex.ru;Евгений Зеленько -Minigalin.nail.M@yandex.ru;Наиль -kirillrumyantsev1971@gmail.com;Кирилл Румянцев -anton_semenchuk@rambler.ru;Антон -andru_45@list.ru;Андрей -r61boff@mail.ru;Григорий Шевцов -orloff.eg@yandex.ru;Данил -volnov_mv@mail.ru;Максим -vvuch@ya.ru;Вячеслав Волков -ekbregionetrader@gmail.com;Валентин -tsubasa@tut.by;Валера -kira.kostenko@gmail.com;Кира Костенко -alvar63@mail.ru;Лариса Варавина -shelbyblack37@gmail.com;Екатерина -Dron84@gmail.com;Андрей Шарнуов - -# 17 -artyomzolotykh@gmail.com;Артем -gennadiy1983@ya.ru;Геннадий -mahneva-mariya@mail.ru;Мария -susenko_a@ukr.net;Андрей Сусенко -omsterkhova@rambler.ru;Ольга -ebortnikov@mail.ru;Евгений Бортников -nikolletss@gmail.com;Марина -kylych1@yandex.ru;Кылыч -tutmos3@yandex.ru;Павел Орловский -bestway305@yandex.ru;Артур Нурахметов -chiganu@gmail.com;Евгения Гороха -puzach@mail.ru;Пузач Влад -pertik@list.ru;Александр -dyrnoj@bk.ru;Максим -kkvkk@mail.ru;Кирилл -alexweb85@yandex.ru;Александр -ssprava@ukr.net;Галина Стриженко -kborodavko2009@yandex.ru;Константин Бородавко -ob080270@voliacable.com;Олег -marinemaks@yandex.ru;Мария Максимова -blackghost58@mail.ru;Илья -vmiretskaya@gmail.com;Viktoriia Miretska -a.michurin1783@mail.ru;Артем Мичурин -Yoooda1989@mail.ru;Максим Петров -flintl@bk.ru;Кулаков Александр -lcf-84@mail.ru;Сергей Калинкин -kovalev.home@mail.ru;Владимир Ковалев -makguseff@yandex.ru;Максим Гусев -irena.kostina@mail.ru;ирина -MAXYTA22@yandex.ru;Максим -alexatro@yandex.ru;Александра Троянова -bengard@yandex.ru;Наталья -Vals_0791@mail.ru;Волкова Алиса -www.Rifma@mail.ru;Сергей Мудряков -walerock@mail.ru;Валерий -vadzimbelsky@rambler.ru;Вадим Бельский -ruslan71@bmail.ru;Руслан Мордачев -saski@mail.ru;Сергей Малкин -webprogrammer77@gmail.com;Прохоров Игорь -serzhpodkolzin@yandex.ru;Сергей -hazhaev@gmail.com;Рашид Хажаев -ansserg@yandex.ru;Сергей -kalina81@list.ru;Анна -klu_lena@list.ru;Елена -serggovs@yandex.ru;Говердовский Сергей -my-post@mail.ru;Татьяна -donder@yandex.ru;Пастухов Данил -gisstyle@yandex.ru;Анастасия Гофман -coop01@mail.ru;Андрей -vip.samosadov@mail.ru;Алексей -belous.maria@gmail.com;Мария -mk@bagur.su;Кирилл Мещерин -riseagain@inbox.ru;Лина -nadin12233@mail.ru;Надежда -serge-meb@mail.ru;Сергей -artyomzykov@gmail.com;Артем -vladislav-avdeev@mail.ru;Владислав -msp081152@mail.ru;Сергей Малахов -ale-xey76@yandex.ru;Алексей -lysenko.mi@gmail.com;Марк Лысенко -stepanuk1987@yandex.ru;Алексей -rock_n_vladok@mail.ru;Дурин Владислав -choodick@gmail.com;Амелин Артем -threed@rsgc.ru;Дмитрий Панфилов -gamer1648@yandex.ru;Виктор -kostgr@rambler.ru;Константин Гребенюков -vadigoryache@yandex.ru;вадим горячев -kirillrumyantsev1971@gmail.com;Кирилл Румянцев -anton_semenchuk@rambler.ru;Антон -r61boff@mail.ru;Григорий Шевцов -orloff.eg@yandex.ru;Данил -volnov_mv@mail.ru;Максим -vvuch@ya.ru;Вячеслав Волков -andru_45@list.ru;Андрей -ekbregionetrader@gmail.com;Валентин -tsubasa@tut.by;Валера -kira.kostenko@gmail.com;Кира Костенко -shelbyblack37@gmail.com;Екатерина -alvar63@mail.ru;Лариса Варавина - -# 18 -gennadiy1983@ya.ru;Геннадий -artyomzolotykh@gmail.com;Артем -susenko_a@ukr.net;Андрей Сусенко -mahneva-mariya@mail.ru;Мария -ebortnikov@mail.ru;Евгений Бортников -nikolletss@gmail.com;Марина -tutmos3@yandex.ru;Павел Орловский -chiganu@gmail.com;Евгения Гороха -bestway305@yandex.ru;Артур Нурахметов -puzach@mail.ru;Пузач Влад -omsterkhova@rambler.ru;Ольга -dyrnoj@bk.ru;Максим -pertik@list.ru;Александр -kkvkk@mail.ru;Кирилл -alexweb85@yandex.ru;Александр -kborodavko2009@yandex.ru;Константин Бородавко -ssprava@ukr.net;Галина Стриженко -ob080270@voliacable.com;Олег -marinemaks@yandex.ru;Мария Максимова -blackghost58@mail.ru;Илья -a.michurin1783@mail.ru;Артем Мичурин -vmiretskaya@gmail.com;Viktoriia Miretska -flintl@bk.ru;Кулаков Александр -lcf-84@mail.ru;Сергей Калинкин -kovalev.home@mail.ru;Владимир Ковалев -makguseff@yandex.ru;Максим Гусев -irena.kostina@mail.ru;ирина -MAXYTA22@yandex.ru;Максим -bengard@yandex.ru;Наталья -alexatro@yandex.ru;Александра Троянова -www.Rifma@mail.ru;Сергей Мудряков -Vals_0791@mail.ru;Волкова Алиса -walerock@mail.ru;Валерий -vadzimbelsky@rambler.ru;Вадим Бельский -ruslan71@bmail.ru;Руслан Мордачев -serzhpodkolzin@yandex.ru;Сергей -webprogrammer77@gmail.com;Прохоров Игорь -hazhaev@gmail.com;Рашид Хажаев -ansserg@yandex.ru;Сергей -klu_lena@list.ru;Елена -serggovs@yandex.ru;Говердовский Сергей -donder@yandex.ru;Пастухов Данил -kalina81@list.ru;Анна -coop01@mail.ru;Андрей -vip.samosadov@mail.ru;Алексей -my-post@mail.ru;Татьяна -nadin12233@mail.ru;Надежда -vladislav-avdeev@mail.ru;Владислав -msp081152@mail.ru;Сергей Малахов -serge-meb@mail.ru;Сергей -lysenko.mi@gmail.com;Марк Лысенко -stepanuk1987@yandex.ru;Алексей -rock_n_vladok@mail.ru;Дурин Владислав -choodick@gmail.com;Амелин Артем -threed@rsgc.ru;Дмитрий Панфилов -gamer1648@yandex.ru;Виктор -kostgr@rambler.ru;Константин Гребенюков -vadigoryache@yandex.ru;вадим горячев -kirillrumyantsev1971@gmail.com;Кирилл Румянцев -anton_semenchuk@rambler.ru;Антон -orloff.eg@yandex.ru;Данил -vvuch@ya.ru;Вячеслав Волков -andru_45@list.ru;Андрей -tsubasa@tut.by;Валера -kira.kostenko@gmail.com;Кира Костенко -alvar63@mail.ru;Лариса Варавина - -# 19 -pertik@list.ru;Александр -ebortnikov@mail.ru;Евгений Бортников -kkvkk@mail.ru;Кирилл -omsterkhova@rambler.ru;Ольга -chiganu@gmail.com;Евгения Гороха -gennadiy1983@ya.ru;Геннадий -tutmos3@yandex.ru;Павел Орловский -artyomzolotykh@gmail.com;Артем -ssprava@ukr.net;Галина Стриженко -dyrnoj@bk.ru;Максим -ob080270@voliacable.com;Олег -marinemaks@yandex.ru;Мария Максимова -kborodavko2009@yandex.ru;Константин Бородавко -blackghost58@mail.ru;Илья -susenko_a@ukr.net;Андрей Сусенко -mahneva-mariya@mail.ru;Мария -a.michurin1783@mail.ru;Артем Мичурин -lcf-84@mail.ru;Сергей Калинкин -flintl@bk.ru;Кулаков Александр -kovalev.home@mail.ru;Владимир Ковалев -alexweb85@yandex.ru;Александр -vmiretskaya@gmail.com;Viktoriia Miretska -irena.kostina@mail.ru;ирина -MAXYTA22@yandex.ru;Максим -bengard@yandex.ru;Наталья -alexatro@yandex.ru;Александра Троянова -walerock@mail.ru;Валерий -www.Rifma@mail.ru;Сергей Мудряков -Vals_0791@mail.ru;Волкова Алиса -ruslan71@bmail.ru;Руслан Мордачев -serzhpodkolzin@yandex.ru;Сергей -webprogrammer77@gmail.com;Прохоров Игорь -hazhaev@gmail.com;Рашид Хажаев -ansserg@yandex.ru;Сергей -klu_lena@list.ru;Елена -serggovs@yandex.ru;Говердовский Сергей -kalina81@list.ru;Анна -donder@yandex.ru;Пастухов Данил -vip.samosadov@mail.ru;Алексей -coop01@mail.ru;Андрей -msp081152@mail.ru;Сергей Малахов -vladislav-avdeev@mail.ru;Владислав -serge-meb@mail.ru;Сергей -nadin12233@mail.ru;Надежда -lysenko.mi@gmail.com;Марк Лысенко -stepanuk1987@yandex.ru;Алексей -rock_n_vladok@mail.ru;Дурин Владислав -threed@rsgc.ru;Дмитрий Панфилов -gamer1648@yandex.ru;Виктор -choodick@gmail.com;Амелин Артем -kostgr@rambler.ru;Константин Гребенюков -vadigoryache@yandex.ru;вадим горячев -kirillrumyantsev1971@gmail.com;Кирилл Румянцев -anton_semenchuk@rambler.ru;Антон -orloff.eg@yandex.ru;Данил -vvuch@ya.ru;Вячеслав Волков -andru_45@list.ru;Андрей -tsubasa@tut.by;Валера -kira.kostenko@gmail.com;Кира Костенко diff --git a/_utils/import_lesson_comments_to_hc.py b/_utils/import_lesson_comments_to_hc.py deleted file mode 100644 index 81bd24d..0000000 --- a/_utils/import_lesson_comments_to_hc.py +++ /dev/null @@ -1,56 +0,0 @@ -# coding=utf-8 -import datetime -import os -import django -import sys - -start = datetime.datetime.now() -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from courses.models import Lesson -from lms.tools import show_progress - -result = open('lessons_comments_hc.xml', 'w') -result.write('\n') -result.write('\n') -all = 0 -n = 0 - -for l in Lesson.objects.all(): - all += l.comments.count() if l.comments.exists() else 0 - -print('Количество комментариев: %s' % all) - -for lesson in Lesson.objects.all(): - if lesson.comments.exists(): - result.write('\n') - result.write('{0} / {1}\n'.format(lesson.course.get_title(), lesson.get_title())) - result.write('http://go.skillbox.ru/courses/lesson/{0}\n'.format(lesson.id)) - result.write('\n') - - for comment in lesson.comments.all(): - result.write('\n') - result.write('{0}\n'.format(comment.id)) - result.write('{0}\n'.format(comment.parent_id)) - result.write('{0}\n'.format(comment.get_root_id() if comment.get_root_id() else '')) - result.write('{0}\n'.format(comment.get_text())) - result.write('{0}\n'.format(comment.owner.get_name())) - result.write('\n'.format('')) - result.write('{0}\n'.format(comment.owner.get_ip())) - result.write('{0}\n'.format(comment.owner.id)) - result.write('{0}\n'.format('true' if comment.owner.is_admin else 'false')) - result.write('{0}\n'.format(comment.owner.get_image_url())) - result.write('\n\n') - show_progress(all, n) - n += 1 - - result.write('\n') - result.write('\n') - -result.write('') - - -finish = datetime.datetime.now() -print('\nTIME: %s seconds' % (finish-start).seconds) \ No newline at end of file diff --git a/_utils/import_profile_to_new_profile.py b/_utils/import_profile_to_new_profile.py deleted file mode 100644 index 345c4d6..0000000 --- a/_utils/import_profile_to_new_profile.py +++ /dev/null @@ -1,42 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - - - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from courses.models import Course as C -from journals.models import TeacherJ, CourseThemeJ, HomeworkJ, HomeworkTry, LessonJ, ExamTry, ExamJ -from access.models import User -s = User.objects.get(email='alvar63@mail.ru') -c = C.objects.get(id=4) -for ht in HomeworkTry.objects.filter(student__email='varavina@bk.ru', material__course=c): - ht.student = s - ht.save() - -for hj in HomeworkJ.objects.filter(student__email='varavina@bk.ru', material__course=c): - hj.student = s - hj.save() - -for et in ExamTry.objects.filter(student__email='varavina@bk.ru', material__course=c): - et.student = s - et.save() - -for et in ExamJ.objects.filter(student__email='varavina@bk.ru', material__course=c): - et.student = s - et.save() - -for et in CourseThemeJ.objects.filter(student__email='varavina@bk.ru', material__course=c): - et.student = s - et.save() - -for et in LessonJ.objects.filter(student__email='varavina@bk.ru', material__course=c): - et.student = s - et.save() - -tj = TeacherJ.objects.get(student__email='varavina@bk.ru', course=c) -tj.student = s -tj.save() diff --git a/_utils/kaspi.txt b/_utils/kaspi.txt deleted file mode 100644 index 5d60d35..0000000 --- a/_utils/kaspi.txt +++ /dev/null @@ -1 +0,0 @@ -{'petrichv@gmail.com', 'skovalska@mail.ru', 'irina_z_z@mail.ru irina.huchak@gmail.com', 'a@tkachenko.in', '146133@gmail.com', 'Flyshtein@gmail.com', 'nik-black-dragon@mail.ru', 'ikey0172@mail.ru', 'gb.gayane@gmail.com', 'andrievskiydmitriy@gmail.com', 'zfalevich@gmail.com', 'nava011235@gmail.com', 'anastasy.petrenko87@gmail.com', 'vd@wearewowagency.com', 'sasha.melbourne@gmail.com', 'bobafas@gmail.com', 'egor@studiofact.ru', 'km@colary.ru', 'einzheev@itl.com.kz', 'zvetaan@gmail.com', 'dmitrij.pastushenko@gmail.com', 'smiley1776@gmail.com', 'ek.design11@gmail.com', 'lepon@bk.ru', 'mtsalka@scnsoft.com', 'baho9208@mail.ru', 's.shtukaturka@gmail.com', 'pobiz@inbox.ru', 'Nikolebedev@mail.ru', 'bershonok@gmail.com', 'waximov@gmail.com', 'dsukhanova@gmail.com', 'kira.yakuhina@gmail.com', 'info@wbest.ru', 'ap@ds-p.ru', 'dinozavrix@gmail.com', 'a.reznichenko@clientlab.ru', 'mmaslennikov@mail.ru', 'ishulga86@gmail.com', 'vovkakunts@gmail.com', 'wRUSha@yandex.ru', 'sanzharsurshanov@gmail.com', 'makspirogov@gmail.com', 'yuri.a.k.design@gmail.com', 'Dmitry.eremin7@gmail.com', 'eco.pun@gmail.com', 'dmytriy.suslov@gmail.com', 'arthur.subbota@gmail.com', 'A.dobrian@gmail.com', 'trjyfel@mail.ru', 'mikhail.a.gusev@gmail.com', 'ilyuha86@gmail.com', 'den.volchkevich@gmail.com', 'i.shymanskyi@gmail.com', 'jalalovna@yandex.ru'} \ No newline at end of file diff --git a/_utils/lessons_comments_hc.xml b/_utils/lessons_comments_hc.xml deleted file mode 100644 index 375fc1d..0000000 --- a/_utils/lessons_comments_hc.xml +++ /dev/null @@ -1,321 +0,0 @@ - - - -Веб-разработчик / Javascript — знакомство, концепция, логика выполнения скриптов браузером -http://go.skillbox.ru/courses/lesson/6 - - -1766 -0 - -
Вот когда Вы говорите одно, а на доске печатается совсем другое (слишком большая задержка от того, когда Вы набираете текст, до того, как он набирается на доске) не очень хорошо. прям взрыв мозга.


-Игорь - -109.254.49.199 -152 -false -http://go.skillbox.ru/media/personal_files/dad49cb914ac438eb98db95eca7faa81.jpg -
- - -1857 -4328 - -
Поддерживаю! Крайне не удобно!
-Сергей - -None -144 -false -http://go.skillbox.ru/media/personal_files/be41478e389f431a9540c4f99705323d.jpg -
- - -2138 -4328 - -
И, кажется, что с каждым видео эта задержка всё больше и больше :( Крайне неудобно смотреть
-Ольга - -94.25.171.19 -159 -false -http://go.skillbox.ru//media/ava_iYBxnlP -
- - -2301 -0 - -
Как оказалось,я не один обратил внимание на факт отсутсвия синхронизации текста с изображением.Теряется нить восприятия материала .



Может быть было бы лучше,если бы лектор комментировал написание кода на экране,а не наоборот.



Полность согласен с авторами сообщений .



С уважением ко всем.



Леонид Филатов.




-Леонид - -89.146.80.154 -169 -false -http://go.skillbox.ru/media/personal_files/2f161e7a744b4e7caabfbd2fcc973c13.jpg -
- - -2678 -0 - -
Да логики как-то нет!!!! Получается что тупо читают лекцию... ((((( Ожидал большего. В начале была в лекциях жизнь, интерес... желание... А сейчас как-то это напоминает вебинар, на котором рассказывают обо всем, но не о чем. Хотя где-то и затрагиваться моменты и логика работы скрипта. Я понимаю что нельзя все рассказать за 1,5 часа, но можно было бы тогда хоть материал дать, шпаргалку в которой бы написано было все что надо знать.
-Иван - -None -177 -false -http://go.skillbox.ru/media/personal_files/8c596fd013a646d39e50c84f5b940868.jpg -
- - -2805 -0 - -
Очень не удобно просматривать видео , Во первых иногда нет на доске ,о чем говорят. Во вторых очень мелко , Нельзя ли убрать лектора и сделать доску больше.Соглашаюсь с написанным выше.
-Харсан - -None -140 -false -http://go.skillbox.ru/media/personal_files/37161c700fae4c9abc05dd04b5ac2da9.jpg -
- - -3602 -0 - -

Я уже писал об этом и после четвёртого урока, и после пятого,  но рассинхронизация становится всё хуже и хуже. Что-то понять, когда ты видишь одно, а слышишь совсем другое - это просто взрыв мозга.

- -

Кроме того, не было ни слова сказано о

- -
    -
  • Вопросы кроссбраузерности – логика введения новых компонентнов Javascript ведущими браузерами
  • -
  • Практическая сторона процесса стандартизации,
  • -
- -

хотя это было анонсировано в описании урока. Или только я этого не услышал?

-
-Михаил - -None -168 -false -http://go.skillbox.ru//media/ava_NYTYW1A -
- - -3841 -0 - -

К сожалению, на 30 минуте просто взял и закрыл. и стал смотреть подобные видео уроки на ютубе. Просто невозможно смотреть из-за этого рассинхрона. Очень жаль. Писали выше "Да логики как-то нет!!!! Получается что тупо читают лекцию... ((((( Ожидал большего. В начале была в лекциях жизнь, интерес... желание... А сейчас как-то это напоминает вебинар, на котором рассказывают обо всем, но не о чем. Хотя где-то и затрагиваться моменты и логика работы скрипта. Я понимаю что нельзя все рассказать за 1,5 часа, но можно было бы тогда хоть материал дать, шпаргалку в которой бы написано было все что надо знать." - полностью с этим согласен :(

-
-Кирилл - -None -244 -false -http://go.skillbox.ru/media/personal_files/bda12f186fd04a4f9c46106b00e6ec12.jpg -
- - -3948 -0 - -

- полностью с этим согласен :( s vami siwu В начале была в лекциях жизнь, интерес... желание... А сейчас как-то это напоминает вебинар, на котором рассказывают обо всем, но не о чем.

-
-Без имени - -None -203 -false -http://go.skillbox.ru//media/ava_2lldj1S -
- - -4439 -0 - -

На многих бесплатных курсах на ютубе и то доходчивее обьясняют и видео от звука не отстаёт:(( 

-
-Роман - -None -234 -false -http://go.skillbox.ru/media/personal_files/352052e572e9464fa0bc14a2f3568722.jpg -
- - -4593 -0 - -

Всем привет!

- -

Мне то-же не понравилась рассинхронизация звука и видео, просто монтаж видео делался не программистом :)

- -

Преподаватель дает материал компактно и доходчиво. Мне нравится.

- -

Предлагаю перередактировать видео всего курса с нормальной синхронизацией, убрать косяки и добавить оптимизацию пространства картинки как на рисунке (ссылка). Готов выполнить.

-
-Сергей - -95.52.232.200 -283 -false -http://go.skillbox.ru/media/personal_files/fd54983362be4a43a76c8ac03e4bbdcb.jpg -
- - -5494 -0 - -

Я просто возмущена тем, что в таком режиме (рассинхронизации) невозможно учиться и что-то вообще понять... А главное, рассказывает преподаватель доходчиво... и очень обидно, что просто кто-то слепил все тяп-ляп, испортив хорошую вещь... А еще - переделать всё это элементарно, имея исходники... Почему ничего не меняется как минимум месяц, судя по первым комментариям?  Кто-нибудь кроме недовольных учеников вообще их читает?

-
-Анастасия - -217.118.78.38 -324 -false -http://go.skillbox.ru//media/ava_ScyRJWj -
- - -5495 -0 - -

Интересно, а у всех получается повторить, что демонстрируется на лекции, у меня уже на предыдущей и этой лекции некоторые элементы не работают как у лектора. Делал все как и лектор, на прошлом занятии даже сравнивал с "рыбой" присланной к заданию - визуально всё правильно, но у меня, в отличие от "рыбы" не все работает!

-
-Сергей - -None -249 -false -http://go.skillbox.ru/media/personal_files/2db827adf76f4cbca66e6ee036bf7f0f.jpg -
- - -5653 -8096 - -

Пару раз за прошлую лекцию он делал опечатки и у него тоже не работало. Потом их поправлял "незаметно", по ходу рассказа о других вещах. А еще попробуйте пропустить Ваш код через HTML-валидатор, вот этот: https://validator.w3.org/#validate_by_upload . Возможно выдаваемые им ошибки подскажут, где Вы ошиблись. А так обычное для программирования дело: опечатки в одной букве, пропущенная точка с запятой и т.п.

-
-Вячеслав - -94.29.71.153 -368 -false -http://go.skillbox.ru/media/personal_files/310119aed6a2495397c7c868ced03ba3.jpg -
- - -5654 -0 - -

P.S. Если Вы так и не сможете найти почему не работает, попробуйте еще открыть текст в "умном" текстовом редакторе, например Notepad++. Он подсвечивает синтаксис, возможно заметите опечатку или незакрытый тег. Еще есть средства разработчика во  всех популярных браузерах, тоже полезны для поиска ошибок.

-
-Вячеслав - -94.29.71.153 -368 -false -http://go.skillbox.ru/media/personal_files/310119aed6a2495397c7c868ced03ba3.jpg -
- - -5940 -8256 - -

" Потом их поправлял "незаметно", по ходу рассказа о других вещах. " - тоже подметил. Правильнее, грамотнее и полезнее для новичков было бы, если б лектор указывал на ошибки, опечатки и их исправление, а не делал бы это молча, как бы тайком. 

-
-Константин - -5.167.79.248 -362 -false -http://go.skillbox.ru/media/personal_files/65b3123d0c664635af0dfd34599ab803.jpg -
- - -6181 -0 - -

Запись уже невозможно открыть. Может быть на ремонте?

-
-ANATOLY - -None -288 -false -http://go.skillbox.ru/media/personal_files/8980c1dc14364eba9ef0872384d6200d.jpg -
- - -7719 -0 - -

Вторая часть лекции - очень сумбурная и непонятная. Похоже, что чем сложнее тема - тем хуже объяснение!

- -

Кто-нибудь, кроме студентов, видит, что изображение и речь рассинхронизированы!

- -

С уважением,
-D

-
-Без имени - -None -226 -false -http://go.skillbox.ru//media/ava_XClkG9G -
- - -8843 -0 - -

Когда с рассинхроном разберётесь?? Вообще теряется нить повествования. Невозможно так обучаться.

-
-Вячеслав - -None -246 -false -http://go.skillbox.ru//media/ava_q6Pgjib -
- - -9236 -0 - -

Сильно раздражает не соответствие лекции и "рыбы", а так же отставание экрана. Куда теперь отправлять ДЗ тоже не понятно.Подскажите!

-
-Ольга - -95.153.130.117 -522 -false -http://go.skillbox.ru/media/personal_files/076604222a9c424eac05253820d91670.png -
- - -9345 -0 - -

Мое предложение - подать совместную жалобу и запросить возврат средств. Никакой обратной связи, обучаться невозможно изза недостатка информации, услуга оказывается не должным образом. Кто за - пишите whatsapp 79251879198 будем придумывать что делать)

-
-Леонид - -None -794 -false -http://go.skillbox.ru//media/ava_f5psFo5 -
- - -9483 -0 - -

Вот люди пишут:"Я понимаю что нельзя все рассказать за 1,5 часа", а за 50 минут? Лекции становятся все короче и сумбурнее, полностью согласна, что качество услуги никак не соответствует цене.

-
-Елизавета diff --git a/_utils/load_as_customer.py b/_utils/load_as_customer.py deleted file mode 100644 index 3624bdb..0000000 --- a/_utils/load_as_customer.py +++ /dev/null @@ -1,14 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from finance.models import Bill - -for bill in Bill.objects.filter(status='F'): - if not bill.user.customer: - bill.user.customer = True - bill.user.save() diff --git a/_utils/load_bills_excel.py b/_utils/load_bills_excel.py deleted file mode 100644 index 850fa09..0000000 --- a/_utils/load_bills_excel.py +++ /dev/null @@ -1,152 +0,0 @@ -# coding=utf-8 -import os -import django -import sys -from django.core.files import File - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -import openpyxl -from finance.models import Price -from access.models import User - -EXEL_PATH = 'data.xlsx' -USERS = {'point': 'id'} -USERS_P = {} -USERS_E = {} -SERVICES = {'point': 'id'} -BOOK = openpyxl.load_workbook(filename=EXEL_PATH) -SHEET = BOOK.active - - -def check_exists_row(index): - columns = ['A', 'B', 'C', 'D', 'E', 'F', 'J', 'H', 'I', 'J'] - for i in columns: - if SHEET['%s%i' % (i, index)].value: - return True - return False - - -def get_user_name(id): - result = u'' - try: - user = User.objects.get(id=id) - except User.DoesNotExist: - return u'Пользователь не найден' - except ValueError: - return u'Студент' - else: - result = user.get_full_name() - return result - - -def get_user_email(id): - result = u'' - try: - user = User.objects.get(id=id) - except User.DoesNotExist: - return u'Пользователь не найден' - except ValueError: - return u'Студент' - else: - result = user.email - return result - - -def get_user_phone(id): - result = u'' - try: - user = User.objects.get(id=id) - except User.DoesNotExist: - return u'Пользователь не найден' - except ValueError: - return u'Студент' - else: - result = user.get_phone() - return result - - -def get_service_data(id): - result = u'' - try: - service = Price.objects.get(id=id) - except Price.DoesNotExist: - return u'Пользователь не найден' - except ValueError: - return u'Услуга' - else: - result = service.get_name() - return result - - -####### -def read_users(): - i = 1 - while check_exists_row(i): - box = 'I%i' % i - USERS[box] = SHEET[box].value - USERS_P['J%s' % i] = USERS[box] - USERS_E['K%s' % i] = USERS[box] - print u'Читаю' - print box - print USERS[box] - i += 1 - - -def read_services(): - i = 1 - while check_exists_row(i): - box = 'H%i' % i - SERVICES[box] = SHEET[box].value - print u'Читаю' - print box - print SERVICES[box] - i += 1 - - -def write_users(): - for box, value in USERS.items(): - data = get_user_name(value) - try: - SHEET[box] = data - except openpyxl.utils.exceptions.CellCoordinatesException: - print u'Ошибка' - - print u'Пишу' - print box - print data - - for box, value in USERS_P.items(): - data = get_user_phone(value) - try: - SHEET[box] = data - except openpyxl.utils.exceptions.CellCoordinatesException: - print u'Ошибка' - - for box, value in USERS_E.items(): - data = get_user_email(value) - try: - SHEET[box] = data - except openpyxl.utils.exceptions.CellCoordinatesException: - print u'Ошибка' - - -def write_services(): - for box, value in SERVICES.items(): - data = get_service_data(value) - try: - SHEET[box] = data - except openpyxl.utils.exceptions.CellCoordinatesException: - print u'Ошибка' - - print u'Пишу' - print box - print data - - -read_users() -write_users() -read_services() -write_services() -BOOK.save(EXEL_PATH) diff --git a/_utils/load_courses.py b/_utils/load_courses.py deleted file mode 100644 index 6bfdaa7..0000000 --- a/_utils/load_courses.py +++ /dev/null @@ -1,67 +0,0 @@ -# coding=utf-8 -import os -import django -import sys -import simplejson - - -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from courses.models import Course, CourseTheme, Lesson, Exam, Homework - -excludes = ['teachers', 'image', 'big_image', 'token', 'public', 'comments', 'materials', ] -data = simplejson.load(open('courses_dump.json')) -_map = {} -results = [] - - -def get_kwargs(fields): - result = {} - for key, value in fields.items(): - print(key, value) - if key not in excludes: - if key in _map: - if type(value) == list: - _result = [] - for _tmp in value: - _result.append(_map[key][_tmp]) - value = _result - else: - value = _map[key][value] if key in _map else value - - result[key] = value - results.append(result) - return result - - -def add_in_map(model, key, value): - if model not in _map: - _map[model] = {} - _map[model][key] = value - -for model in data: - if model['model'] == 'courses.course': - course, c = Course.objects.get_or_create(**(dict(get_kwargs(model['fields'])))) - add_in_map('course', model['pk'], course) - - elif model['model'] == 'courses.coursetheme': - course, c = CourseTheme.objects.get_or_create(**(dict(get_kwargs(model['fields'])))) - add_in_map('theme', model['pk'], course) - - elif model['model'] == 'courses.lesson': - course, c = Lesson.objects.get_or_create(**(dict(get_kwargs(model['fields'])))) - add_in_map('lesson', model['pk'], course) - - elif model['model'] == 'courses.exam': - course, c = Exam.objects.get_or_create(**(dict(get_kwargs(model['fields'])))) - add_in_map('exam', model['pk'], course) - - elif model['model'] == 'courses.homework': - course, c = Homework.objects.get_or_create(**(dict(get_kwargs(model['fields'])))) - add_in_map('homework', model['pk'], course) - -print(results) - -#print(data[0]) \ No newline at end of file diff --git a/_utils/load_modal_task.py b/_utils/load_modal_task.py deleted file mode 100644 index 46be62e..0000000 --- a/_utils/load_modal_task.py +++ /dev/null @@ -1,55 +0,0 @@ -# coding=utf-8 -# Загрузить в задачу модального окна пользователей -import os -import django -import sys - -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from management.models import ModalTask -from access.models import User - -users = ['artem.kudra@func.ru', - 'aaa_rostov@rambler.ru', - 'delo@jet-mix.ru', - 'artemaminov@gmail.com', - 'gresmik@yandex.ru', - 'dimpolozkov@gmail.com', - 'visualart@mail.ru', - 'vr8853@gmail.com', - 'makini@ya.ru', - 'katyami90@mail.ru', - 'rolandvermin@mail.ru', - '9990405@gmail.com', - 'andrey732@gmail.com', - 'goha@kiosov.com', - 'dmitry@shaludin.ru', - 'alyans911@mail.ru', - 'zkorall@gmail.com', - 'me@flexure.ru', - 'natazkondra@gmail.com', - 'dvb@dextra.ru', - 'sherdog@list.ru', - 'romagrog@gmail.com', - 'a.cherniak@dexme.by', - 'cyberspacedee@gmail.com', - 'almazzar@gmail.com', - 'pavlova-yb@bisys.ru', - 'soloveev@yandex.ru', - 'asta219@gmail.com', - 'allmam@ya.ru', - 'civanov@multicharts.com', - 'hellonasnas@gmail.com', - 'webidea19@gmail.com', - 'a@tickets.ai', 'bez.b.unix@gmail.com'] - -m = ModalTask.objects.get(id=18) -for i in users: - try: - m.user.add(User.objects.get(email=i)) - except User.DoesNotExist: - print(i) - -m.save() diff --git a/_utils/load_report_deep.py b/_utils/load_report_deep.py deleted file mode 100644 index a79c191..0000000 --- a/_utils/load_report_deep.py +++ /dev/null @@ -1,35 +0,0 @@ -# coding=utf-8 -from __future__ import print_function -from __future__ import print_function -import os -import django -import sys - - - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from journals.models import ReportDepth as RD, HomeworkJ as HJ, LessonJ as LJ, ExamJ as EJ -from courses.models import CourseMap -for les in LJ.objects.exclude(student=None): - if les.date: - print(les) - RD.objects.get_or_create(token=CourseMap.objects.get(token=les.material.token), student=les.student, course=les.material.course, - s_date=les.date, f_date=les.f_date) - -for hw in HJ.objects.exclude(student=None): - if hw.date: - print(hw) - RD.objects.get_or_create(token=CourseMap.objects.get(token=hw.material.token), student=hw.student, - course=hw.material.course, - teacher=hw.teacher, - s_date=hw.date, f_date=hw.f_date) - -for ex in EJ.objects.exclude(student=None): - if ex.date: - print(ex) - RD.objects.get_or_create(token=CourseMap.objects.get(token=ex.material.token), student=ex.student, - course=ex.material.course, - teacher=ex.teacher, - s_date=ex.date, f_date=ex.f_date) diff --git a/_utils/mosru.txt b/_utils/mosru.txt deleted file mode 100644 index 5707e26..0000000 --- a/_utils/mosru.txt +++ /dev/null @@ -1,26 +0,0 @@ -bravo.johnny@ya.ru -emilekeilbach@gmail.com -dmitry.sedov@inbox.ru -ivanpokalyuk@gmail.com -mbf23tb@gmail.com -nikonorov@labizum.ru -kuzzzal@gmail.com -y.robocopov@gmail.com -alex.dntv@gmail.com -timakova@fistashki.org -geiz@yandex.ru -alexandersvinin@gmail.com -juniperland@gmail.com -niozuki@mail.ru -sahem@mail.ru -kiselev_s_l@mail.ru -frostoffman@gmail.com -hello@aokunev.com -i.flinn@yandex.ru -alevtina.i.danilova@gmail.com -dsgn.shots@gmail.com -person.ira@gmail.com -leo55506@gmail.com -gausf2@gmail.com -Kornblumchen@yandex.ru -abrakadavr@gmail.com diff --git a/_utils/open_bills.py b/_utils/open_bills.py deleted file mode 100644 index 739ac10..0000000 --- a/_utils/open_bills.py +++ /dev/null @@ -1,49 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - -sys.path.append("/var/www/skillbox/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from access.models import User -from finance.models import Price, Bill - -users ={'kirillcapote@gmail.com', 'skyfallorigin@gmail.com', 'sadovnikoff@yandex.ru', 'grondarrin@gmail.com', 'fkaterina82@mail.ru', 'frtwork@gmail.com', 'yury.matskevich@gmail.com', 'ecoprint@mail.ru', 'yana1330@yandex.ru', 'rivera1985@mail.ru', 'paul.glukhov@gmail.com', 'elena.markina@xpage.ru', 'polinakomolova@gmail.com', 'etartakovskiy@gmail.com', 'p.jakubovskiy@gmail.com', 'malivanov@bk.ru', 'timplay@mail.ru', 'hello.kurban@gmail.com', 'ovm@aplayweb.ru', 'ux.dozer@gmail.com', 'pk.common@gmail.com', 'annapoluektova@yahoo.ca', 'nasti.vv@gmail.com', 'l4bor@protonmail.com', 'bogdashow@gmail.com', 'zhuck182@gmail.com', 'smannic@yandex.ru', 'victoriabutova@gmail.com', 'designprojectt@gmail.com', 'gartibald@gmail.com', 'alimova.lira@ya.ru', 'zaharenkoaleksey@yandex.ru', 'nataliannovgorod@gmail.com', 'kravtsova.kateryna@gmail.com', 'andrerm@ya.ru'} - - -no_exists = [] -no_active = [] -no_bill = set() -service = list(Price.objects.filter(course__id=20).values_list('id', flat=True)) - -for i in users: - try: - user = User.objects.get(email=i) - except User.DoesNotExist: - no_exists.append(i) - else: - if not user.is_active: - no_active.append(i) - else: - if Bill.objects.filter(user=user, service__id__in=service).exists(): - for bill in Bill.objects.filter(user=user, service__id__in=service): - if bill and bill.status != 'F': - bill.status = 'F' - bill.save() - print(u'Смена статуса заказа: {0}'.format(bill.id)) - else: - no_bill.add(user.email) - -print('u===============') -print(u'Не существует:') -print(no_exists) -print('u===============') -print(u'Не активен') -print(no_active) -print('u================') -print(u"Нет счета") -print(no_bill) - - diff --git a/_utils/open_comments.py b/_utils/open_comments.py deleted file mode 100644 index 130236b..0000000 --- a/_utils/open_comments.py +++ /dev/null @@ -1,16 +0,0 @@ -# coding=utf-8 -import os - -import datetime -import django -import sys - - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from management.models import Comment - -for comment in Comment.objects.all(): - comment.closed = False - comment.save() diff --git a/_utils/open_course_lesson.py b/_utils/open_course_lesson.py deleted file mode 100644 index 5e9325b..0000000 --- a/_utils/open_course_lesson.py +++ /dev/null @@ -1,199 +0,0 @@ -# coding=utf-8 -import os -import django -import sys -import datetime - -sys.path.append("/var/www/skillbox") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from journals.models import CourseMap, LessonJ, TeacherJ, HomeworkTry -from lms.tools import show_progress - -_NEED_OPEN = LessonJ.objects.get(material__id='1154', student__email='parabellum07@gmail.com') - -_TEACHERJ_FILTER = {'progress__gte': 0} -_TEACHERJ_EXCLUDE = {'teacher': None} - -_READL_FILTER = {'f_date': None} -_READL_EXCLUDE = {'date': None} - -_SUCCESSL_FILTER = {'success': True} -_SUCCESSL_EXCLUDE = {'date': None} - - -def get_all_journals(course_id): - return TeacherJ.objects.filter(**_TEACHERJ_FILTER, course__id=course__id).exclude(**_TEACHERJ_EXCLUDE).order_by('id') - - -def get_all_journals_count(): - return TeacherJ.objects.filter(**_TEACHERJ_FILTER).exclude(**_TEACHERJ_EXCLUDE).count() - - -def get_last_lessons(__journal): - # Получить последний читаемый уроки и выполненный - _READL_FILTER['student'] = __journal.student - _READL_FILTER['material__course'] = __journal.course - _SUCCESSL_FILTER['student'] = __journal.student - _SUCCESSL_FILTER['material__course'] = __journal.course - return (LessonJ.objects.filter(**_READL_FILTER).exclude(**_READL_EXCLUDE).order_by('id').last(), - LessonJ.objects.filter(**_SUCCESSL_FILTER).exclude(**_SUCCESSL_EXCLUDE).order_by('id').last()) - - -def open_lesson_befor_this(_lessonJ): - # Погружается объект последнего журнала урока - # Получаем все уроки этого журнала - _map = CourseMap.objects.get(lesson=_lessonJ.material) - for i in CourseMap.objects.filter(course=_map.course).exclude(lesson=None): - if i.sort < _map.sort: - try: - _j = LessonJ.objects.get( - material__token=i.token, - student=_lessonJ.student, - material__course=i.course - ) - except LessonJ.DoesNotExist as e: - print(e) - else: - check_to_success(_j) - - -def check_to_access(_journal): - # Проверка материала на доступ в прохождению - _journal.open_material() - - -def check_to_success(_journal): - # Проверка материала на завершенность - _journal.saw_this() - - -def check_lesson_after_hw(__journal, _target): - # Проверить - доступны ли уроки до ДЗ со статусом success - # Проверить - доступны ли видео до ДЗ не блокированного или пройденного - _last = HomeworkTry.objects.filter( - student=__journal.student, - material__course=__journal.course - ).order_by('id').last() - # Если стутс - success - _candidate = None - if _last: - try: - _candidate = CourseMap.objects.get( - sort=int(CourseMap.objects.get(token=_last.material.token).sort)+1, - course=__journal.course - ) - except CourseMap.DoesNotExist: - print('Ошибка получения карты журнала') - - else: - # Проверить - доступен ли журнал для чтения - if _candidate.lesson: - __candidate = LessonJ.objects.get( - material__token=_candidate.token, - student=_target.student, - material__course=__journal.course - ) - check_to_access(__candidate) - - if _candidate and _candidate.lesson and \ - int(CourseMap.objects.get( - token=_target.material.token, - course=__journal.course).sort) \ - < int(_candidate.sort): - - _target = LessonJ.objects.get( - material__token=_candidate.token, - student=_target.student, - material__course=__journal.course) - print('Цель изменена: %s' % _target.material.title) - - return _target - - -def main(course_id): - start = datetime.datetime.now() - _ERRORS = set() - _WARNING = set() - #for i in open('error.log'): - # _ERRORS.add(i.strip()) - _GOOD = 0 - _now = 0 - big = [] - if _NEED_OPEN: - open_lesson_befor_this(_NEED_OPEN) - - else: - if not _ERRORS: - _journals = get_all_journals(course_id) - _jcount = get_all_journals_count() - print('Количество журналов на проверку: %s' % _jcount) - else: - _journals = list([i for i in TeacherJ.objects.filter(student__email__in=_ERRORS)]) - _jcount = len(_journals) - print('Журналы с ошибками: %s' % _jcount) - - for __journal in _journals: - _start = datetime.datetime.now() - show_progress(_jcount, _now) - print('\nЖурнал: %s' % __journal.student.email) - try: - read, success = get_last_lessons(__journal) - - except Exception as e: - print('!!! Ошибка обработки') - print(e) - if __journal.course.id == 20: - _WARNING.add(__journal.student.email) - _ERROR_MAILS = open('error.log', 'a+') - _ERROR_MAILS.write('%s\n' % __journal.student.email) - _ERROR_MAILS.close() - - else: - print('%s // %s' % (read.material.title if read else ' - ', success.material.title if success else ' - ')) - - if not success and read: - _target = read - - elif read and (int(CourseMap.objects.get(lesson=read.material).sort) > int(CourseMap.objects.get(lesson=success.material).sort)): - _target = read - - elif success: - _target = success - - else: - _target = None - - if _target: - open_lesson_befor_this(check_lesson_after_hw(__journal, _target)) - - _GOOD += 1 - - _now += 1 - _finish = datetime.datetime.now() - _time_result = (_finish - _start).seconds - print('\nTIME: %s seconds' % _time_result) - if int(_time_result) > 1: - big.append(__journal.student.email) - print('Добавлено на проверку') - - print('===========\n') - - finish = datetime.datetime.now() - print('\nTIME: %s seconds' % (finish - start).seconds) - print('Нужно обратить внимание:') - for i in _WARNING: - print(i) - #print('Самые длительные записи:') - #print(big) - if _ERRORS: - if _GOOD == _now: - print('Все ошибки исправлены') - else: - print('Количество ошибок: %s' % int(_now - _GOOD)) - - -if __name__ == '__main__': - course_id = sys.argv[1] - main(course_id) diff --git a/_utils/open_journals.py b/_utils/open_journals.py deleted file mode 100644 index 5041c94..0000000 --- a/_utils/open_journals.py +++ /dev/null @@ -1,57 +0,0 @@ -# coding=utf-8 -import datetime - -import os -import django -import sys - - -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from access.models import User -from courses.models import Course -from journals.models import TeacherJ, check_journal, CourseThemeJ, LessonJ, HomeworkJ, ExamJ - -user = User.objects.get(email='mosru@skillbox.ru') -print(user) -course = Course.objects.get(id=25) -print(course) - -journal, created = TeacherJ.objects.get_or_create(course=course, student=user) -print(journal) -while True: - if check_journal(journal): - break -print('Журнал обновлен') -now = datetime.datetime.now() - -for journal in CourseThemeJ.objects.filter(parent=journal).order_by('material__sort'): - print(journal) - print('== Обновление темы %s' % journal.material.sort) - for lesson in LessonJ.objects.filter(parent=journal): - print(lesson) - lesson.date = now - lesson.f_date = now - lesson.success = True - lesson.save() - - print('==') - for homework in HomeworkJ.objects.filter(parent=journal): - print(homework) - homework.date = now - homework.f_date = now - homework.success = True - homework.save() - - print('==') - for exam in ExamJ.objects.filter(parent=journal): - print(exam) - exam.date = now - exam.f_date = now - exam.success = True - exam.save() - - print('================') -print('Задача выполнена') diff --git a/_utils/open_lesson.py b/_utils/open_lesson.py deleted file mode 100644 index 636913e..0000000 --- a/_utils/open_lesson.py +++ /dev/null @@ -1,198 +0,0 @@ -# coding=utf-8 -import os -import django -import sys -import datetime - -sys.path.append("/var/www/skillbox/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from journals.models import CourseMap, LessonJ, TeacherJ, HomeworkTry -from lms.tools import show_progress - -_NEED_OPEN = None#LessonJ.objects.get(material__id='1154', student__email='parabellum07@gmail.com'.lower()) - -_TEACHERJ_FILTER = {'progress__gte': 0} -_TEACHERJ_EXCLUDE = {'teacher': None} - -_READL_FILTER = {'f_date': None} -_READL_EXCLUDE = {'date': None} - -_SUCCESSL_FILTER = {'success': True} -_SUCCESSL_EXCLUDE = {'date': None} - - -def get_all_journals(): - return TeacherJ.objects.filter(**_TEACHERJ_FILTER).exclude(**_TEACHERJ_EXCLUDE).order_by('id') - - -def get_all_journals_count(): - return TeacherJ.objects.filter(**_TEACHERJ_FILTER).exclude(**_TEACHERJ_EXCLUDE).count() - - -def get_last_lessons(__journal): - # Получить последний читаемый уроки и выполненный - _READL_FILTER['student'] = __journal.student - _READL_FILTER['material__course'] = __journal.course - _SUCCESSL_FILTER['student'] = __journal.student - _SUCCESSL_FILTER['material__course'] = __journal.course - return (LessonJ.objects.filter(**_READL_FILTER).exclude(**_READL_EXCLUDE).order_by('id').last(), - LessonJ.objects.filter(**_SUCCESSL_FILTER).exclude(**_SUCCESSL_EXCLUDE).order_by('id').last()) - - -def open_lesson_befor_this(_lessonJ): - # Погружается объект последнего журнала урока - # Получаем все уроки этого журнала - _map = CourseMap.objects.get(lesson=_lessonJ.material) - for i in CourseMap.objects.filter(course=_map.course).exclude(lesson=None): - if i.sort < _map.sort: - try: - _j = LessonJ.objects.get( - material__token=i.token, - student=_lessonJ.student, - material__course=i.course - ) - except LessonJ.DoesNotExist as e: - print(e) - else: - check_to_success(_j) - - -def check_to_access(_journal): - # Проверка материала на доступ в прохождению - _journal.open_material() - - -def check_to_success(_journal): - # Проверка материала на завершенность - _journal.saw_this() - - -def check_lesson_after_hw(__journal, _target): - # Проверить - доступны ли уроки до ДЗ со статусом success - # Проверить - доступны ли видео до ДЗ не блокированного или пройденного - _last = HomeworkTry.objects.filter( - student=__journal.student, - material__course=__journal.course - ).order_by('id').last() - # Если стутс - success - _candidate = None - if _last: - try: - _candidate = CourseMap.objects.get( - sort=int(CourseMap.objects.get(token=_last.material.token).sort)+1, - course=__journal.course - ) - except CourseMap.DoesNotExist: - print('Ошибка получения карты журнала') - - else: - # Проверить - доступен ли журнал для чтения - if _candidate.lesson: - __candidate = LessonJ.objects.get( - material__token=_candidate.token, - student=_target.student, - material__course=__journal.course - ) - check_to_access(__candidate) - - if _candidate and _candidate.lesson and \ - int(CourseMap.objects.get( - token=_target.material.token, - course=__journal.course).sort) \ - < int(_candidate.sort): - - _target = LessonJ.objects.get( - material__token=_candidate.token, - student=_target.student, - material__course=__journal.course) - print('Цель изменена: %s' % _target.material.title) - - return _target - - -def main(): - start = datetime.datetime.now() - _ERRORS = set() - _WARNING = set() - #for i in open('error.log'): - # _ERRORS.add(i.strip()) - _GOOD = 0 - _now = 0 - big = [] - if _NEED_OPEN: - open_lesson_befor_this(_NEED_OPEN) - - else: - if not _ERRORS: - _journals = get_all_journals() - _jcount = get_all_journals_count() - print('Количество журналов на проверку: %s' % _jcount) - else: - _journals = list([i for i in TeacherJ.objects.filter(student__email__in=_ERRORS)]) - _jcount = len(_journals) - print('Журналы с ошибками: %s' % _jcount) - - for __journal in _journals: - _start = datetime.datetime.now() - show_progress(_jcount, _now) - print('\nЖурнал: %s' % __journal.student.email) - try: - read, success = get_last_lessons(__journal) - - except Exception as e: - print('!!! Ошибка обработки') - print(e) - if __journal.course.id == 20: - _WARNING.add(__journal.student.email) - _ERROR_MAILS = open('error.log', 'a+') - _ERROR_MAILS.write('%s\n' % __journal.student.email) - _ERROR_MAILS.close() - - else: - print('%s // %s' % (read.material.title if read else ' - ', success.material.title if success else ' - ')) - - if not success and read: - _target = read - - elif read and (int(CourseMap.objects.get(lesson=read.material).sort) > int(CourseMap.objects.get(lesson=success.material).sort)): - _target = read - - elif success: - _target = success - - else: - _target = None - - if _target: - open_lesson_befor_this(check_lesson_after_hw(__journal, _target)) - - _GOOD += 1 - - _now += 1 - _finish = datetime.datetime.now() - _time_result = (_finish - _start).seconds - print('\nTIME: %s seconds' % _time_result) - if int(_time_result) > 1: - big.append(__journal.student.email) - print('Добавлено на проверку') - - print('===========\n') - - finish = datetime.datetime.now() - print('\nTIME: %s seconds' % (finish - start).seconds) - print('Нужно обратить внимание:') - for i in _WARNING: - print(i) - #print('Самые длительные записи:') - #print(big) - if _ERRORS: - if _GOOD == _now: - print('Все ошибки исправлены') - else: - print('Количество ошибок: %s' % int(_now - _GOOD)) - - -if __name__ == '__main__': - main() diff --git a/_utils/reload_HT.py b/_utils/reload_HT.py deleted file mode 100644 index 1526dd1..0000000 --- a/_utils/reload_HT.py +++ /dev/null @@ -1,85 +0,0 @@ -# coding=utf-8 -import os - -import datetime -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from journals.models import HomeworkTry, HomeworkJ -all_ht = set() - - -def good(tr, comment): - if not tr.success: - tr.success = True - if not tr.f_date: - tr.f_date = comment.date - if not tr.date: - tr.date = comment.date - tr.save() - all_ht.add(tr.id) - tr.comments.add(comment) - - -def fail(tr, comment): - if tr.success: - tr.success = False - if not tr.f_date: - tr.f_date = comment.date - if not tr.date: - tr.date = comment.date - tr.save() - all_ht.add(tr.id) - tr.comments.add(comment) - - -def append_comment(tr, comment): - if not tr.date: - tr.date = comment.date - tr.save() - all_ht.add(tr.id) - tr.comments.add(comment) - - -def get_comments(journal): - comments = {} - for tr in HomeworkTry.objects.filter(parent=journal): - for i in tr.comments.all(): - comments[i.date] = i - sort_list = list(comments.keys()) - sort_list.sort() - return comments, sort_list - - -def create_ht(journal): - return HomeworkTry.objects.create(student=journal.student, parent=journal, material=journal.material) - - -for i in HomeworkJ.objects.all(): - comments, sort_list = get_comments(i) - if comments: - ht = create_ht(i) - for n in sort_list: - if not ht: ht = create_ht(i) - if comments[n].owner.in_role == 'T': - if u'Задача принята!' in comments[n].text: - good(ht, comments[n]) - elif u'Отправлено на доработку!' in comments[n].text: - fail(ht, comments[n]) - ht = None - else: - print comments[n].text - result = raw_input(u'Сдано? Y/N: ') - if result in ['y', 'Y', 'н', 'Н']: - good(ht, comments[n]) - elif result in ['n', 'N', 'т', 'Т']: - fail(ht, comments[n]) - ht = None - else: - append_comment(ht, comments[n]) - -HomeworkTry.objects.all().exclude(id__in=all_ht).delete() diff --git a/_utils/reload_TJ_as_report.py b/_utils/reload_TJ_as_report.py deleted file mode 100644 index 5f3ec22..0000000 --- a/_utils/reload_TJ_as_report.py +++ /dev/null @@ -1,35 +0,0 @@ -# coding=utf-8 -import os -import django -import sys -import datetime - -start = datetime.datetime.now() -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from django.db.models import Q -from journals.models import TeacherJ, LessonJ, HomeworkJ -from lms.tools import show_progress - -all = TeacherJ.objects.exclude(Q(teacher=None)|Q(student=None)).count() -print('Количество журналов на проверку: %s' % all) -n = 0 -for tj in TeacherJ.objects.exclude(Q(teacher=None)|Q(student=None)): - if LessonJ.objects.filter(success=True, parent__parent=tj).exclude(date=None).exists(): - tj.lesson = LessonJ.objects.filter(success=True, parent__parent=tj).exclude(date=None).order_by('f_date').last().material - else: - tj.lesson = None - - if HomeworkJ.objects.filter(success=True, parent__parent=tj).exclude(Q(date=None)|Q(f_date=None)).exists(): - tj.homework = HomeworkJ.objects.filter(success=True, parent__parent=tj).exclude(Q(date=None)|Q(f_date=None)).order_by('f_date').last().material - else: - tj.homework = None - - tj.save() - show_progress(all, n) - n += 1 - - -finish = datetime.datetime.now() -print('\nTIME: %s seconds' % (finish-start).seconds) diff --git a/_utils/reload_bills.py b/_utils/reload_bills.py deleted file mode 100644 index 600c348..0000000 --- a/_utils/reload_bills.py +++ /dev/null @@ -1,29 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from finance.models import Price -from courses.models import CourseMap - -for price in Price.objects.filter(included=None): - if not price.included.exists(): - inc_type = [] - - if price.m_type == 'B': - inc_type = ['B'] - elif price.m_type == 'E': - inc_type = ['B', 'E'] - elif price.m_type == 'P': - inc_type = ['B', 'E', 'P'] - for m in CourseMap.objects.filter(course=price.course): - if m.get_obj().theme.price_type in inc_type: - price.included.add(m) -l=0 -for price in Price.objects.filter(included=None): - l += 1 - -print l diff --git a/_utils/report_for_one_material.py b/_utils/report_for_one_material.py deleted file mode 100644 index 282c2c8..0000000 --- a/_utils/report_for_one_material.py +++ /dev/null @@ -1,27 +0,0 @@ -# coding=utf-8 -import os -import django -import sys -import datetime - - -start = datetime.datetime.now() -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from journals.models import HomeworkJ - -f = open('4.txt') - -users = set() -for email in f.readlines(): - users.add(email.strip()) - -result = set() - -for user in users: - if HomeworkJ.objects.filter(material__id=83, student__email=user).exclude(f_date=None).exists(): - result.add(user) - -print(result) diff --git a/_utils/reports/__init__.py b/_utils/reports/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/_utils/reports/get_all_students_emails.py b/_utils/reports/get_all_students_emails.py deleted file mode 100644 index e74a6ec..0000000 --- a/_utils/reports/get_all_students_emails.py +++ /dev/null @@ -1,16 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - - -sys.path.append("/var/www/skillbox/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -print('## Формирование списка почт всех студентов системы') - -from access.models import User -_f = open('all_users', 'w') -for i in {_user.email for _user in User.objects.all()}: - _f.write('%s\n' % i) -_f.close() diff --git a/_utils/reports/get_learn_balance b/_utils/reports/get_learn_balance deleted file mode 100644 index e037e43..0000000 --- a/_utils/reports/get_learn_balance +++ /dev/null @@ -1,641 +0,0 @@ -uasam@mail.ru -asiri.unholy@gmail.com -alexpallid@gmail.com -vladimirprasoloff@gmail.com -jayalila108@mail.ru -Hlebb@mail.ru -o.tibirkova@yandex.ru -proschebud@gmail.com -blckg0re@gmail.com -hannakulikovast@gmail.com -pavelulitin@fmf.ru -89226890628.sda@gmail.com -annavolkova@at-consulting.ru -appsdao@ya.ru -lampardromanov@yandex.ru -yuri.sablatazh@gmail.com -me@leonidpotapov.com -ilya@iskros.com -kupa0611@gmail.com -smaslenikov@zeptolab.com -Andreysh@zeptolab.com -eugened@zeptolab.com -irinash@zeptolab.com -juliag@zeptolab.com -kaiyoo@yandex.ru -dirubis@gmail.com -Pvashkeba@mail.ru -artem.kudra@func.ru -d.lugansky@gmail.com -Aka@make.st -e.baranova@make.st -anastasiyabd@zeptolab.com -ekaterinasch@zeptolab.com -tanyas@zeptolab.com -ivans@zeptolab.com -egora@zeptolab.com -ipashkov93@yandex.ru -perepelkin.serge@gmail.com -singlegreywolf@mail.ru -cornelldesign@mail.ru -nazarova-evg@yandex.ru -vetldi@gmail.com -andrej.fin@gmail.com -vaynberg.a@gmail.com -axnaf@list.ru -evgeneva@gmail.com -kk.to-art@yandex.ru -markina108@gmail.com -giggslegenda@mail.ru -delo@jet-mix.ru -hellodrw@gmail.com -chaocharly@gmail.com -merabella00@yandex.ru -miragann@gmail.com -rodina-vera@inbox.ru -tingaevva@mail.ru -Kozingleb73@gmail.com -s.zorin@artsofte.ru -zukoznik@mail.ru -shavcat@ya.ru -olga@adt.ru -supreme1609@yandex.ru -artemaminov@gmail.com -azalmazal1@mail.ru -mihail@kucherenko.tel -qq-brand@rambler.ru -nasgul@bk.ru -gresmik@yandex.ru -contrnik@yandex.ru -neo-quake@yandex.ru -sidenkowow@mail.ru -ottomy@bk.ru -j4gg3rnaut@gmail.com -ninon.sh@yandex.ru -d.p.voropay@gmail.com -lllil@yandex.ru -alik.vayner@gmail.com -litazavr@gmail.com -akonovalov108@gmail.com -denis.mazaev@mail.ru -freesleeper@gmail.com -reachi73@ya.ru -dimpolozkov@gmail.com -anton.m.gook@gmail.com -Grondarrin@gmail.com -alexander.samofalov@gmail.com -strekozka_l@mail.ru -mister.ak90@mail.ru -asylov@gmail.com -bebeeper@gmail.com -tteya@mail.ru -el_spirito@bk.ru -bara-bord@yandex.ru -designprojectt@gmail.com -rozzuvaeva@gmail.com -azatdraw@gmail.com -meetstone@yandex.ru -chavrikovev@gmail.com -igor.n.tomko@gmail.com -vr8853@gmail.com -anastasia.lednik@gmail.com -chriswao@gmail.com -ggsurkov@gmail.com -bvdesign@mail.ru -agnosst@gmail.com -hiirinasheveleva@gmail.com -ikarp84@gmail.com -julia.fedyaeva@mail.ru -o.slava@gmail.com -e.vanchugova@ya.ru -tiano_taurus747@mail.ru -mydarlingcat@gmail.com -rozhkovad@gmail.com -gesigner@yandex.ru -ldvmake@gmail.com -deni.ottoy@gmail.com -manzhulov@gmail.com -rolandvermin@mail.ru -web@semiryakov.ru -Enrich-Tov@yandex.ru -deni.ottoy@gmail.com -verbinegor@gmail.com -burunin@gmail.com -jeniagirl@yandex.ru -yakovlev.alex.o@gmail.com -vvooster@gmail.com -mezhina2@gmail.com -onemoreamore@gmail.com -makini@ya.ru -afedyaev@esphere.ru -asuhoverhova@esphere.ru -niker8@yandex-team.ru -polina1304@gmail.com -fenpics@gmail.com -A.Burakov@modulbank.ru -polgolovy@gmail.com -lu-33@yandex.ru -yugofx@gmail.com -nika.galkina20@gmail.com -rufe41@gmail.com -mydarlingcat@gmail.com -starkov.igor@gmail.com -stevgen@gmail.com -kmogutova@mail.ru -k.pavljukov@gmail.com -ermolova_zaya@mail.ru -andrey732@gmail.com -i.k.borisova@gmail.com -FAbramov@expertsolutions.ru -9990405@gmail.com -voron86618@gmail.com -ilushasafin@gmail.com -elshen.hesenov@gmail.com -dmitry@shaludin.ru -y.foot@yandex.ru -konstantinkovrik@yandex.ru -merim.t@mail.ru -dilyaasanova@gmail.com -Daniely@yandex.ru -goryayeva@gmail.com -alyans911@mail.ru -elizavetachernaya@gmail.com -a-cheap@yandex.ru -zkorall@gmail.com -mary@ihome.ru -zonaform@gmail.com -site-911@yandex.ru -ek_8@mail.ru -natazkondra@gmail.com -mail@parfyonov.com -Fridays365@gmail.com -hello.nastasy@gmail.com -missymary@mail.ru -gawanna.ru@mail.ru -nnbsnt@gmail.com -z.ilnurri@gmail.com -tim.phey@gmail.com -alevova@gmail.com -ogalin@aevrika.ru -aytigor@gmail.com -uryukovv@gmail.com -agarzaeva@yandex.ru -kononenko.e.p@gmail.com -aplusp@yandex.ru -ugarova@magora-systems.ru -skoryk.yulia@gmail.com -skorodymov@mail.ru -xnia.nik@gmail.com -yuliyahil@gmail.com -alex@space-o.ru -pae1@europlan.ru -stasya1004@mail.ru -design@spaceapp.ru -alexey.g.demchuk@gmail.com -ovodesign82@gmail.com -nushamenshikova@gmail.com -am@bonoagency.ru -il@bvdp.ru -ss@bvdp.ru -makarichev.aa@gmail.com -kombikovdamir@gmail.com -khakifeva@croc.ru -AParshikov@croc.ru -info@d-element.ru -lesiawuss@gmail.com -iskan153@gmail.com -era.gromov@gmail.com -ya@rl.ru -ysmirnovy@gmail.com -gavrylov88@gmail.com -alexandrshum@gmail.com -raceoffer@ya.ru -yuri.froloff@gmail.com -siv11@mail.ru -vpetrova21@yandex.ru -13malix@gmail.com -execer@mail.ru -itsarenko@gmail.com -segavosegag@gmail.com -kolos.natasha@gmail.com -limosiaya@gmail.com -andrayvelitchko@gmail.com -lina.savenkova@gmail.com -stanislav.vir@gmail.com -lentyaev.m@yandex.ru -artemich92@mail.ru -89169113911@mail.ru -marina.kavetskaya@gmail.com -mobester@gmail.com -fedotov@tyr24.ru -zyabra@gmail.com -todanilin@gmail.com -pplahov@gmail.com -sokwork@gmail.com -kukva@me.com -ilyaa77@mail.ru -krutolapova@mail.ru -alekseyskrobot@gmail.com -godortneo@gmail.com -volkova78@bk.ru -mako731@ya.ru -denisbryuhanov@gmail.com -alexsteptlt@mail.ru -abcdesign1@mail.ru -veronikavick87@gmail.com -jeneva7@gmail.com -as.kretinin@gmail.com -skp_15@mail.ru -k-pastukhova@yandex.ru -onimfa@mail.ru -alla.sukhostavskaya@gmail.com -kirsti-b@yandex.ru -babyas@yandex.ru -kosan81@yandex.ru -beruchie@yandex.ru -petrusevich-vladimir@yandex.ru, -shama2004@bk.ru -alex@hcube.ru -sens11even@gmail.com -fessdew@gmail.com -skorodymov@mail.ru -ageewa@gmail.com -sokolov.maksim92@yandex.ru -shtrudle@yandex.ru -tooob52@gmail.com -sonicmails@yandex.ru -ezavodchikova@me.com -alinarlova@gmail.com -artteq@gmail.com -azazello@inbox.ru -rasulmhk@gmail.com -serglookas@yandex.ru -edgecrasher@gmail.com -a.isakov@ruslink.pro -tuna1706@yandex.ru -jekashohirev@gmail.com -nazarov.design@gmail.com -alpmats@gmail.com -sarosekml@yandex.ru -norkensdrommar@yandex.ru -andrei_gavrilenko@inbox.ru -galadriel2007@mail.ru -protchenkova_dar@mail.ru -dseliverstov@yandex.ru -priymakdmitry@gmail.com -empaher3@yandex.ru -m.chelyadenkov@gmail.com -natfaga@yahoo.de -yakorolevaleksei@yandex.ru -zi_zind@hotmail.com -lileklive@mail.ru -pavelvch@gmail.com -shashnia@gmail.com -nifakt1@gmail.com -andreyy2010@ya.ru -pravo@roskvartal.ru -pervushin@avis-dc.ru -ag@lab.ag -hitzen88@gmail.com -yuriy.chetverikov@gmail.com -atree2010@gmail.com -jamadharma13@gmail.com -spolaspola@gmail.com -ok.msaavedra@gmail.com -Kitt.diz@gmail.com -goto.darya@gmail.com -mbf23tb@gmail.com -letterca@gmail.com -mary@ihome.ru -info@legacystudio.ru -lens2002@gmail.com -susannafeisal6@gmail.com -alexmname@gmail.com -petrichv@gmail.com -dmitrij.pastushenko@gmail.com -juniperland@gmail.com -einzheev@itl.com.kz -j.tolkova@yandex.ru -irina_z_z@mail.ru irina.huchak@gmail.com -a.reznichenko@clientlab.ru -e.taychenachev@gmail.com -waximov@gmail.com -dina@vega.nsk.ru -andrii.dev@gmail.com -vasukhina_av@mail.ru -millie.mk5@gmail.com -goto.darya@gmail.com -vova@vovavova.ru -Loki2d@gmail.com -ilya.tymofeev@gmail.com -alpha5@yandex.ru -Sepeda.rafael@gmail.com -zionll@yandex.ru -strife88@mail.ru -ele-bulavinceva@yandex.ru -jack@creo.od.ua -d.lexand@gmail.com -captainanch@ya.ru -denisgorbunovmsc@gmail.com -goshamanasyan@gmail.com -katerina.musinova@gmail.com -dmokichev@gmail.com -andr@andr.kz -tingmann@gmail.com -romazzz@me.com -egysakova@gmail.com -portnova.ok@yandex.ru -vtoryanik@livemaster.ru -alinazoryna@gmail.com -wellkin@gmail.com -noc-engineer@outlook.com -denis.kryukov@cyberiada.com -tonyavec@gmail.com -artemzig@gmail.com -asvdesign@yandex.ru -1ngeneer@mail.ru -fynart@gmail.com -pnz_08@mail.ru -a@cdnvideo.ru -sokdis@gmail.com -blood4085@inbox.ru -goryayeva@gmail.com -vlkitov@gmail.com -aveelik@gmail.com -lida.pihora@gmail.com -yanchus@mail.ru -olgarafikova00@mail.ru -lena@mura-show.com -wm5soft@gmail.com -torus.andrey@gmail.com -romameteva@azoft.com -dim@gifts.ru -9nkags@gmail.com -iandrew80@gmail.com -irynagillis@gmail.com -evgenia.deg@gmail.com -tarshis.d@gmail.com -art.filkov@gmail.com -connect@me.com -emelyanova.olena@gmail.com -pd4774@yandex.ru -wizzzart@gmail.com -tuhachevski@gmail.com -fazeful@gmail.com -molot877@mail.ru -vklimovs@mail.ru -slavinanm@gmail.com -diems@mail.ru -efomina@msk.vtb.ru -xnata.d@gmail.com -avmakarov@asuproject.ru -corvinun@gmail.com -navelis@mail.ru -glebkost.dev@gmail.com -nicknatochiev@me.com -romagrog@gmail.com -d.letko@articul.ru -batovd@gmail.com -nikolay.stanislavchuk@gmail.com -iamkonev@gmail.com -zaroman1989@gmail.com -cat.kubasova@yandex.ru -same.tea@gmail.com -irina.medyanceva@gmail.com -kattia2592@gmail.com -olya.zp@ya.ru -olgasnbrd@gmail.com -Dhopkins@ya.ru -yulenka26@gmail.com -anton.tmur@gmail.com -egodyston@gmail.com -bel.art@mail.ru -evgeniy@le-de.ru -yakimova.design@gmail.com -olga@le-de.ru -ereshko.igor@gmail.com -tn@bitek.ru -gafurovt@gmail.com -dv@ilab.kz -tahir.muraev@gmail.com -rozhkovad@gmail.com -ypolyakova1@yandex.ru -enjoydezign@gmail.com -nali9@mail.ru -cooryliof@gmail.com -romqa.guard@gmail.com -ksenia.vitkova@gmail.com -dennis.loboda@gmail.com -redkuk@gmail.com -ek.design11@gmail.com -whysecondjuly@gmail.com -deniskondrashov@yahoo.com -ivanpokalyuk@gmail.com -bravo.johnny@ya.ru -me@flexure.ru -i.flinn@yandex.ru -yuzik.74@gmail.com -hello@aokunev.com -polgolovy@gmail.com -b2sty@yandex.ru -mtsalka@scnsoft.com -abrakadavr@gmail.com -info@darneo.ru -dmitry.sedov@inbox.ru -frostoffman@gmail.com -smiley1776@gmail.com -elizaveta.bandalet@gmail.com -alex.dntv@gmail.com -makspirogov@gmail.com -velesart@gmail.com -pavlov@complexsys.ru -ceo@pride-m.ru -spinngewebex@gmail.com -an_b@inbox.ru -ilyuha86@gmail.com -egor@yugs.ru -kashlatch@gmail.com -niozuki@mail.ru -Gnatovych@gmail.com -sahem@mail.ru -zfalevich@gmail.com -lalaviva@yandex.ru -mmaslennikov@mail.ru -info@wbest.ru -arthur.subbota@gmail.com -goha@kiosov.com -Igorfedorenko@mail.ru -annazayidova@gmail.com -es@vipro.ru -km@colary.ru -kiselev_s_l@mail.ru -soldakov.p@yandex.ru -ap@ds-p.ru -702752@gmail.com -shpakova@sebbia.com -skugarov@sebbia.com -taranov@sebbia.com -rusakovevgen@gmail.com -frostoffman@gmail.com -a.khadeko@gmail.com -trogatyuk@gmail.com -Alexpozdnyakof@gmail.com -korobajr@ya.ru -elizaveta.bandalet@gmail.com -prokosha10@gmail.com -s.darbaidze@inostudio.com -zhurakoff@gmail.com -krylya@inbox.ru -146133@gmail.com -sasha.melbourne@gmail.com -hip-hop-org@yandex.ru -jaglin@itsoft.ru -den.volchkevich@gmail.com -yakimov.dmitriy@gmail.com -994677@mail.ru -rumbeshta@userstory.ru -ylkin_list@mail.ru -salofoot@fermastudio.ru -smiley1776@gmail.com -info@darneo.ru -egor@studiofact.ru -alevtina.i.danilova@gmail.com -puponina.irina@gmail.com -yevseev@mail.ru -corpas@gmail.com -nitrohlorid@gmail.com -kayl24brof@gmail.com -skovalska@mail.ru -Dmitry.eremin7@gmail.com -Nikolebedev@mail.ru -ishulga86@gmail.com -bobafas@gmail.com -kalina531345@gmail.com -dsgn.shots@gmail.com -dsukhanova@gmail.com -kizilov.s@gmail.com -zlk.marjana@gmail.com -nava011235@gmail.com -i.shymanskyi@gmail.com -anastasy.petrenko87@gmail.com -dinozavrix@gmail.com -yana.berezhnaya999@gmail.com -person.ira@gmail.com -bershonok@gmail.com -vivi_bvo@mail.ru -ohmeinkot@gmail.com -d22s@ya.ru -masha49@yandex.ru -biz.trp@gmail.com -leo55506@gmail.com -e.poberezhnik@artw.ru -alexzarkov@gmail.com -ekde@wide-web.spb.ru -vemelin@gmail.com -gausf2@gmail.com -vd@wearewowagency.com -va@wearewowagency.com -domrachv@gmail.com -ad@wearewowagency.com -jalalovna@yandex.ru -mohov-g@yandex.ru -st.wasp@yandex.ru -Irina.lisofa@gmail.com -Kornblumchen@yandex.ru -albytime@gmail.com -as.plyaskin@gmail.com -trunovaon@gmail.com -yuri.a.k.design@gmail.com -fkaterina82@mail.ru -natasha.skulskaia@gmail.com -dubnyak404@gmail.com -felixbag@gmail.com -lemma.ka@gmail.com -nikita.nadzharov@gmail.com -Pserook@gmail.com -petrova@ydarnic.ru -sites@ukr.net -nik-black-dragon@mail.ru -m.n.podkopaev@gmail.com -kittydiz@mail.ru -maksimov.design@gmail.com -info@sibirix.ru -denisov.s.s@yandex.ru -oleksandrgumeniuk@gmail.com -alivo4ka1244@yandex.ru -mamarinna@yandex.ru -felisarmis@gmail.com -pavelspetrov@ya.ru -A.dobrian@gmail.com -katepainter@yandex.ru -pobiz@inbox.ru -9990405@gmail.com -vovkakunts@gmail.com -kronos2k4@gmail.com -sasha_amelina@mail.ru -wRUSha@yandex.ru -snoorge@mail.ru -marketolog@webelement.ru -onoffbass@yandex.ru -mifwind@gmail.com -artur.saakoff@gmail.com -emilekeilbach@gmail.com -a@tkachenko.in -str-ibz@inbox.ru -dmitry.sedov@inbox.ru -baho9208@mail.ru -feyorz@gmail.com -alvo_05@mail.ru -tagfelix500@gmail.com -ikey0172@mail.ru -gb.gayane@gmail.com -eco.pun@gmail.com -sanzharsurshanov@gmail.com -webar4i@gmail.com -zvetaan@gmail.com -svelavs@gmail.com -art@magicdesign.ru -kuzzzal@gmail.com -andrievskiydmitriy@gmail.com -pulya7@gmail.com -mikhail.a.gusev@gmail.com -elena@citrus-soft.ru -kropev@rarus.ru -nikonorov@labizum.ru -gulin@labizum.ru -vladfedorovich@gmail.com -Gfgaliya@gmail.com -srfedotov@gmail.com -vinjuli4ka2008@rambler.ru -lepon@bk.ru -y.robocopov@gmail.com -enchervinskaya@gmail.com -volokos@gmail.com -a.nikiforov@uplab.ru -dmytriy.suslov@gmail.com -s.shtukaturka@gmail.com -alex.dntv@gmail.com -timur.shulgin@infocraft.ru -sp.rusanov@gmail.com -timakova@fistashki.org -aknoraz@deloitte.ru -sesyunin@realweb.ru -bravo.johnny@yandex.ru -didenko@braind.agency -art@amado-id.ru -9330733@mail.ru -danila.zarechnev@gmail.com -kira.yakuhina@gmail.com -geiz@yandex.ru -tuning_a@mail.ru -suonarama@gmail.com -ha@brightstudio.ru -alexandersvinin@gmail.com -trjyfel@mail.ru -d.pogodin@itech-group.ru -designervs@mail.ru -smorozov@qsoft.ru -a.reva@qsoft.ru -semashko@yandex.ru -art.magomaev@gmail.com -imickaa@gmail.com \ No newline at end of file diff --git a/_utils/reports/get_learn_balance.py b/_utils/reports/get_learn_balance.py deleted file mode 100644 index 393e003..0000000 --- a/_utils/reports/get_learn_balance.py +++ /dev/null @@ -1,34 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - -sys.path.append("/var/www/skillbox/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -print('## Отчет по распределению слушателей по курсу') -from courses.models import Course, CourseTheme -from finance.models import Bill -from journals.models import TeacherJ, HomeworkJ, CourseThemeJ - -_courses = Course.objects.filter(public=True).order_by('id') -for _c in _courses: - print('{0}: {1}'.format(_c.id, _c.get_title())) - -_c = input('Выберите курс: ') - -_course = Course.objects.get(id=int(_c)) -print('======') -print('# Курс: {0}'.format(_course.get_title())) -print('Оплеченых счетов: {0}'.format(Bill.objects.filter(service__course=_course, status='F').count())) -_journals = TeacherJ.objects.filter(course=_course, progress__gt=10).exclude(progress=100) -print('Студентов: {0}'.format(_journals.count())) - -print('======') - -# Получить количество ДЗ в статусе прохождения -_homeworks = HomeworkJ.objects.filter(f_date=None, parent__parent__in=_journals).exclude(date=None) -print('ДЗ в статусе прохождения: {0}'.format(_homeworks.count())) - -for i in CourseTheme.objects.filter(course=_course).order_by('sort'): - print('{0}: {2} [{1}]'.format(i.sort, i.get_title(), HomeworkJ.objects.filter(f_date=None, parent__material=i).exclude(date=None).count())) diff --git a/_utils/reports/get_success_for_theme.py b/_utils/reports/get_success_for_theme.py deleted file mode 100644 index 4d32012..0000000 --- a/_utils/reports/get_success_for_theme.py +++ /dev/null @@ -1,37 +0,0 @@ -# coding=utf-8 -# Получить почты пользователей с темой в статусе сдано -import os -import django -import sys -BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - -sys.path.append("/var/www/skillbox/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from access.models import User -from courses.models import Course, CourseTheme -from journals.models import HomeworkTry, HomeworkJ, CourseThemeJ - -print('## Почты пользователей в статусе сдано по теме') - -_courses = Course.objects.filter(public=True).order_by('id') - -for _c in _courses: - print('{0}: {1}'.format(_c.id, _c.get_title())) - -_c = input('Выберите курс: ') -_course = Course.objects.get(id=int(_c)) - -_themes = CourseTheme.objects.filter(course=_course).order_by('sort') -for _t in _themes: - print('{0}: {2}/{1}'.format(_t.id, _t.get_title(), _t.sort)) - -_t = input('Выберите тему: ') -_theme = CourseTheme.objects.get(id=int(_t)) - -_result = CourseThemeJ.objects.filter(material=_theme).exclude(date=None, f_date=None).values_list('student__email', flat=True) - -for i in _result: - print(i) - -print('Количество пользователей: {0}'.format(len(_result))) diff --git a/_utils/reports/get_success_hw_themes.py b/_utils/reports/get_success_hw_themes.py deleted file mode 100644 index 3ac4532..0000000 --- a/_utils/reports/get_success_hw_themes.py +++ /dev/null @@ -1,45 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - -sys.path.append("/var/www/skillbox/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -print('## Отчет по распределению слушателей по курсу') -from courses.models import Course, CourseTheme -from finance.models import Bill -from journals.models import TeacherJ, HomeworkJ, CourseThemeJ, HomeworkTry - -_courses = Course.objects.filter(public=True).order_by('id') -for _c in _courses: - print('{0}: {1}'.format(_c.id, _c.get_title())) - -_c = input('Выберите курс: ') - -_course = Course.objects.get(id=int(_c)) -print('======') -print('# Курс: {0}'.format(_course.get_title())) -print('Оплеченых счетов: {0}'.format(Bill.objects.filter(service__course=_course, status='F').count())) -_journals = TeacherJ.objects.filter(course=_course, progress__gt=10).exclude(progress=100) -print('Студентов: {0}'.format(_journals.count())) - -print('======') - - -def check_hj(hj): - if hj: - if HomeworkTry.objects.filter(parent=hj).exists(): - return hj - - return False - - -for i in CourseTheme.objects.filter(course=_course).order_by('sort'): - hj = map(check_hj, HomeworkJ.objects.filter(parent__material=i).exclude(f_date=None)) - _hj = set() - for r in hj: - if r: - _hj.add(r) - print('{0}: {2} [{1}]'.format(i.sort, i.get_title(), len(_hj))) - diff --git a/_utils/reports/get_theme_try_len b/_utils/reports/get_theme_try_len deleted file mode 100644 index e037e43..0000000 --- a/_utils/reports/get_theme_try_len +++ /dev/null @@ -1,641 +0,0 @@ -uasam@mail.ru -asiri.unholy@gmail.com -alexpallid@gmail.com -vladimirprasoloff@gmail.com -jayalila108@mail.ru -Hlebb@mail.ru -o.tibirkova@yandex.ru -proschebud@gmail.com -blckg0re@gmail.com -hannakulikovast@gmail.com -pavelulitin@fmf.ru -89226890628.sda@gmail.com -annavolkova@at-consulting.ru -appsdao@ya.ru -lampardromanov@yandex.ru -yuri.sablatazh@gmail.com -me@leonidpotapov.com -ilya@iskros.com -kupa0611@gmail.com -smaslenikov@zeptolab.com -Andreysh@zeptolab.com -eugened@zeptolab.com -irinash@zeptolab.com -juliag@zeptolab.com -kaiyoo@yandex.ru -dirubis@gmail.com -Pvashkeba@mail.ru -artem.kudra@func.ru -d.lugansky@gmail.com -Aka@make.st -e.baranova@make.st -anastasiyabd@zeptolab.com -ekaterinasch@zeptolab.com -tanyas@zeptolab.com -ivans@zeptolab.com -egora@zeptolab.com -ipashkov93@yandex.ru -perepelkin.serge@gmail.com -singlegreywolf@mail.ru -cornelldesign@mail.ru -nazarova-evg@yandex.ru -vetldi@gmail.com -andrej.fin@gmail.com -vaynberg.a@gmail.com -axnaf@list.ru -evgeneva@gmail.com -kk.to-art@yandex.ru -markina108@gmail.com -giggslegenda@mail.ru -delo@jet-mix.ru -hellodrw@gmail.com -chaocharly@gmail.com -merabella00@yandex.ru -miragann@gmail.com -rodina-vera@inbox.ru -tingaevva@mail.ru -Kozingleb73@gmail.com -s.zorin@artsofte.ru -zukoznik@mail.ru -shavcat@ya.ru -olga@adt.ru -supreme1609@yandex.ru -artemaminov@gmail.com -azalmazal1@mail.ru -mihail@kucherenko.tel -qq-brand@rambler.ru -nasgul@bk.ru -gresmik@yandex.ru -contrnik@yandex.ru -neo-quake@yandex.ru -sidenkowow@mail.ru -ottomy@bk.ru -j4gg3rnaut@gmail.com -ninon.sh@yandex.ru -d.p.voropay@gmail.com -lllil@yandex.ru -alik.vayner@gmail.com -litazavr@gmail.com -akonovalov108@gmail.com -denis.mazaev@mail.ru -freesleeper@gmail.com -reachi73@ya.ru -dimpolozkov@gmail.com -anton.m.gook@gmail.com -Grondarrin@gmail.com -alexander.samofalov@gmail.com -strekozka_l@mail.ru -mister.ak90@mail.ru -asylov@gmail.com -bebeeper@gmail.com -tteya@mail.ru -el_spirito@bk.ru -bara-bord@yandex.ru -designprojectt@gmail.com -rozzuvaeva@gmail.com -azatdraw@gmail.com -meetstone@yandex.ru -chavrikovev@gmail.com -igor.n.tomko@gmail.com -vr8853@gmail.com -anastasia.lednik@gmail.com -chriswao@gmail.com -ggsurkov@gmail.com -bvdesign@mail.ru -agnosst@gmail.com -hiirinasheveleva@gmail.com -ikarp84@gmail.com -julia.fedyaeva@mail.ru -o.slava@gmail.com -e.vanchugova@ya.ru -tiano_taurus747@mail.ru -mydarlingcat@gmail.com -rozhkovad@gmail.com -gesigner@yandex.ru -ldvmake@gmail.com -deni.ottoy@gmail.com -manzhulov@gmail.com -rolandvermin@mail.ru -web@semiryakov.ru -Enrich-Tov@yandex.ru -deni.ottoy@gmail.com -verbinegor@gmail.com -burunin@gmail.com -jeniagirl@yandex.ru -yakovlev.alex.o@gmail.com -vvooster@gmail.com -mezhina2@gmail.com -onemoreamore@gmail.com -makini@ya.ru -afedyaev@esphere.ru -asuhoverhova@esphere.ru -niker8@yandex-team.ru -polina1304@gmail.com -fenpics@gmail.com -A.Burakov@modulbank.ru -polgolovy@gmail.com -lu-33@yandex.ru -yugofx@gmail.com -nika.galkina20@gmail.com -rufe41@gmail.com -mydarlingcat@gmail.com -starkov.igor@gmail.com -stevgen@gmail.com -kmogutova@mail.ru -k.pavljukov@gmail.com -ermolova_zaya@mail.ru -andrey732@gmail.com -i.k.borisova@gmail.com -FAbramov@expertsolutions.ru -9990405@gmail.com -voron86618@gmail.com -ilushasafin@gmail.com -elshen.hesenov@gmail.com -dmitry@shaludin.ru -y.foot@yandex.ru -konstantinkovrik@yandex.ru -merim.t@mail.ru -dilyaasanova@gmail.com -Daniely@yandex.ru -goryayeva@gmail.com -alyans911@mail.ru -elizavetachernaya@gmail.com -a-cheap@yandex.ru -zkorall@gmail.com -mary@ihome.ru -zonaform@gmail.com -site-911@yandex.ru -ek_8@mail.ru -natazkondra@gmail.com -mail@parfyonov.com -Fridays365@gmail.com -hello.nastasy@gmail.com -missymary@mail.ru -gawanna.ru@mail.ru -nnbsnt@gmail.com -z.ilnurri@gmail.com -tim.phey@gmail.com -alevova@gmail.com -ogalin@aevrika.ru -aytigor@gmail.com -uryukovv@gmail.com -agarzaeva@yandex.ru -kononenko.e.p@gmail.com -aplusp@yandex.ru -ugarova@magora-systems.ru -skoryk.yulia@gmail.com -skorodymov@mail.ru -xnia.nik@gmail.com -yuliyahil@gmail.com -alex@space-o.ru -pae1@europlan.ru -stasya1004@mail.ru -design@spaceapp.ru -alexey.g.demchuk@gmail.com -ovodesign82@gmail.com -nushamenshikova@gmail.com -am@bonoagency.ru -il@bvdp.ru -ss@bvdp.ru -makarichev.aa@gmail.com -kombikovdamir@gmail.com -khakifeva@croc.ru -AParshikov@croc.ru -info@d-element.ru -lesiawuss@gmail.com -iskan153@gmail.com -era.gromov@gmail.com -ya@rl.ru -ysmirnovy@gmail.com -gavrylov88@gmail.com -alexandrshum@gmail.com -raceoffer@ya.ru -yuri.froloff@gmail.com -siv11@mail.ru -vpetrova21@yandex.ru -13malix@gmail.com -execer@mail.ru -itsarenko@gmail.com -segavosegag@gmail.com -kolos.natasha@gmail.com -limosiaya@gmail.com -andrayvelitchko@gmail.com -lina.savenkova@gmail.com -stanislav.vir@gmail.com -lentyaev.m@yandex.ru -artemich92@mail.ru -89169113911@mail.ru -marina.kavetskaya@gmail.com -mobester@gmail.com -fedotov@tyr24.ru -zyabra@gmail.com -todanilin@gmail.com -pplahov@gmail.com -sokwork@gmail.com -kukva@me.com -ilyaa77@mail.ru -krutolapova@mail.ru -alekseyskrobot@gmail.com -godortneo@gmail.com -volkova78@bk.ru -mako731@ya.ru -denisbryuhanov@gmail.com -alexsteptlt@mail.ru -abcdesign1@mail.ru -veronikavick87@gmail.com -jeneva7@gmail.com -as.kretinin@gmail.com -skp_15@mail.ru -k-pastukhova@yandex.ru -onimfa@mail.ru -alla.sukhostavskaya@gmail.com -kirsti-b@yandex.ru -babyas@yandex.ru -kosan81@yandex.ru -beruchie@yandex.ru -petrusevich-vladimir@yandex.ru, -shama2004@bk.ru -alex@hcube.ru -sens11even@gmail.com -fessdew@gmail.com -skorodymov@mail.ru -ageewa@gmail.com -sokolov.maksim92@yandex.ru -shtrudle@yandex.ru -tooob52@gmail.com -sonicmails@yandex.ru -ezavodchikova@me.com -alinarlova@gmail.com -artteq@gmail.com -azazello@inbox.ru -rasulmhk@gmail.com -serglookas@yandex.ru -edgecrasher@gmail.com -a.isakov@ruslink.pro -tuna1706@yandex.ru -jekashohirev@gmail.com -nazarov.design@gmail.com -alpmats@gmail.com -sarosekml@yandex.ru -norkensdrommar@yandex.ru -andrei_gavrilenko@inbox.ru -galadriel2007@mail.ru -protchenkova_dar@mail.ru -dseliverstov@yandex.ru -priymakdmitry@gmail.com -empaher3@yandex.ru -m.chelyadenkov@gmail.com -natfaga@yahoo.de -yakorolevaleksei@yandex.ru -zi_zind@hotmail.com -lileklive@mail.ru -pavelvch@gmail.com -shashnia@gmail.com -nifakt1@gmail.com -andreyy2010@ya.ru -pravo@roskvartal.ru -pervushin@avis-dc.ru -ag@lab.ag -hitzen88@gmail.com -yuriy.chetverikov@gmail.com -atree2010@gmail.com -jamadharma13@gmail.com -spolaspola@gmail.com -ok.msaavedra@gmail.com -Kitt.diz@gmail.com -goto.darya@gmail.com -mbf23tb@gmail.com -letterca@gmail.com -mary@ihome.ru -info@legacystudio.ru -lens2002@gmail.com -susannafeisal6@gmail.com -alexmname@gmail.com -petrichv@gmail.com -dmitrij.pastushenko@gmail.com -juniperland@gmail.com -einzheev@itl.com.kz -j.tolkova@yandex.ru -irina_z_z@mail.ru irina.huchak@gmail.com -a.reznichenko@clientlab.ru -e.taychenachev@gmail.com -waximov@gmail.com -dina@vega.nsk.ru -andrii.dev@gmail.com -vasukhina_av@mail.ru -millie.mk5@gmail.com -goto.darya@gmail.com -vova@vovavova.ru -Loki2d@gmail.com -ilya.tymofeev@gmail.com -alpha5@yandex.ru -Sepeda.rafael@gmail.com -zionll@yandex.ru -strife88@mail.ru -ele-bulavinceva@yandex.ru -jack@creo.od.ua -d.lexand@gmail.com -captainanch@ya.ru -denisgorbunovmsc@gmail.com -goshamanasyan@gmail.com -katerina.musinova@gmail.com -dmokichev@gmail.com -andr@andr.kz -tingmann@gmail.com -romazzz@me.com -egysakova@gmail.com -portnova.ok@yandex.ru -vtoryanik@livemaster.ru -alinazoryna@gmail.com -wellkin@gmail.com -noc-engineer@outlook.com -denis.kryukov@cyberiada.com -tonyavec@gmail.com -artemzig@gmail.com -asvdesign@yandex.ru -1ngeneer@mail.ru -fynart@gmail.com -pnz_08@mail.ru -a@cdnvideo.ru -sokdis@gmail.com -blood4085@inbox.ru -goryayeva@gmail.com -vlkitov@gmail.com -aveelik@gmail.com -lida.pihora@gmail.com -yanchus@mail.ru -olgarafikova00@mail.ru -lena@mura-show.com -wm5soft@gmail.com -torus.andrey@gmail.com -romameteva@azoft.com -dim@gifts.ru -9nkags@gmail.com -iandrew80@gmail.com -irynagillis@gmail.com -evgenia.deg@gmail.com -tarshis.d@gmail.com -art.filkov@gmail.com -connect@me.com -emelyanova.olena@gmail.com -pd4774@yandex.ru -wizzzart@gmail.com -tuhachevski@gmail.com -fazeful@gmail.com -molot877@mail.ru -vklimovs@mail.ru -slavinanm@gmail.com -diems@mail.ru -efomina@msk.vtb.ru -xnata.d@gmail.com -avmakarov@asuproject.ru -corvinun@gmail.com -navelis@mail.ru -glebkost.dev@gmail.com -nicknatochiev@me.com -romagrog@gmail.com -d.letko@articul.ru -batovd@gmail.com -nikolay.stanislavchuk@gmail.com -iamkonev@gmail.com -zaroman1989@gmail.com -cat.kubasova@yandex.ru -same.tea@gmail.com -irina.medyanceva@gmail.com -kattia2592@gmail.com -olya.zp@ya.ru -olgasnbrd@gmail.com -Dhopkins@ya.ru -yulenka26@gmail.com -anton.tmur@gmail.com -egodyston@gmail.com -bel.art@mail.ru -evgeniy@le-de.ru -yakimova.design@gmail.com -olga@le-de.ru -ereshko.igor@gmail.com -tn@bitek.ru -gafurovt@gmail.com -dv@ilab.kz -tahir.muraev@gmail.com -rozhkovad@gmail.com -ypolyakova1@yandex.ru -enjoydezign@gmail.com -nali9@mail.ru -cooryliof@gmail.com -romqa.guard@gmail.com -ksenia.vitkova@gmail.com -dennis.loboda@gmail.com -redkuk@gmail.com -ek.design11@gmail.com -whysecondjuly@gmail.com -deniskondrashov@yahoo.com -ivanpokalyuk@gmail.com -bravo.johnny@ya.ru -me@flexure.ru -i.flinn@yandex.ru -yuzik.74@gmail.com -hello@aokunev.com -polgolovy@gmail.com -b2sty@yandex.ru -mtsalka@scnsoft.com -abrakadavr@gmail.com -info@darneo.ru -dmitry.sedov@inbox.ru -frostoffman@gmail.com -smiley1776@gmail.com -elizaveta.bandalet@gmail.com -alex.dntv@gmail.com -makspirogov@gmail.com -velesart@gmail.com -pavlov@complexsys.ru -ceo@pride-m.ru -spinngewebex@gmail.com -an_b@inbox.ru -ilyuha86@gmail.com -egor@yugs.ru -kashlatch@gmail.com -niozuki@mail.ru -Gnatovych@gmail.com -sahem@mail.ru -zfalevich@gmail.com -lalaviva@yandex.ru -mmaslennikov@mail.ru -info@wbest.ru -arthur.subbota@gmail.com -goha@kiosov.com -Igorfedorenko@mail.ru -annazayidova@gmail.com -es@vipro.ru -km@colary.ru -kiselev_s_l@mail.ru -soldakov.p@yandex.ru -ap@ds-p.ru -702752@gmail.com -shpakova@sebbia.com -skugarov@sebbia.com -taranov@sebbia.com -rusakovevgen@gmail.com -frostoffman@gmail.com -a.khadeko@gmail.com -trogatyuk@gmail.com -Alexpozdnyakof@gmail.com -korobajr@ya.ru -elizaveta.bandalet@gmail.com -prokosha10@gmail.com -s.darbaidze@inostudio.com -zhurakoff@gmail.com -krylya@inbox.ru -146133@gmail.com -sasha.melbourne@gmail.com -hip-hop-org@yandex.ru -jaglin@itsoft.ru -den.volchkevich@gmail.com -yakimov.dmitriy@gmail.com -994677@mail.ru -rumbeshta@userstory.ru -ylkin_list@mail.ru -salofoot@fermastudio.ru -smiley1776@gmail.com -info@darneo.ru -egor@studiofact.ru -alevtina.i.danilova@gmail.com -puponina.irina@gmail.com -yevseev@mail.ru -corpas@gmail.com -nitrohlorid@gmail.com -kayl24brof@gmail.com -skovalska@mail.ru -Dmitry.eremin7@gmail.com -Nikolebedev@mail.ru -ishulga86@gmail.com -bobafas@gmail.com -kalina531345@gmail.com -dsgn.shots@gmail.com -dsukhanova@gmail.com -kizilov.s@gmail.com -zlk.marjana@gmail.com -nava011235@gmail.com -i.shymanskyi@gmail.com -anastasy.petrenko87@gmail.com -dinozavrix@gmail.com -yana.berezhnaya999@gmail.com -person.ira@gmail.com -bershonok@gmail.com -vivi_bvo@mail.ru -ohmeinkot@gmail.com -d22s@ya.ru -masha49@yandex.ru -biz.trp@gmail.com -leo55506@gmail.com -e.poberezhnik@artw.ru -alexzarkov@gmail.com -ekde@wide-web.spb.ru -vemelin@gmail.com -gausf2@gmail.com -vd@wearewowagency.com -va@wearewowagency.com -domrachv@gmail.com -ad@wearewowagency.com -jalalovna@yandex.ru -mohov-g@yandex.ru -st.wasp@yandex.ru -Irina.lisofa@gmail.com -Kornblumchen@yandex.ru -albytime@gmail.com -as.plyaskin@gmail.com -trunovaon@gmail.com -yuri.a.k.design@gmail.com -fkaterina82@mail.ru -natasha.skulskaia@gmail.com -dubnyak404@gmail.com -felixbag@gmail.com -lemma.ka@gmail.com -nikita.nadzharov@gmail.com -Pserook@gmail.com -petrova@ydarnic.ru -sites@ukr.net -nik-black-dragon@mail.ru -m.n.podkopaev@gmail.com -kittydiz@mail.ru -maksimov.design@gmail.com -info@sibirix.ru -denisov.s.s@yandex.ru -oleksandrgumeniuk@gmail.com -alivo4ka1244@yandex.ru -mamarinna@yandex.ru -felisarmis@gmail.com -pavelspetrov@ya.ru -A.dobrian@gmail.com -katepainter@yandex.ru -pobiz@inbox.ru -9990405@gmail.com -vovkakunts@gmail.com -kronos2k4@gmail.com -sasha_amelina@mail.ru -wRUSha@yandex.ru -snoorge@mail.ru -marketolog@webelement.ru -onoffbass@yandex.ru -mifwind@gmail.com -artur.saakoff@gmail.com -emilekeilbach@gmail.com -a@tkachenko.in -str-ibz@inbox.ru -dmitry.sedov@inbox.ru -baho9208@mail.ru -feyorz@gmail.com -alvo_05@mail.ru -tagfelix500@gmail.com -ikey0172@mail.ru -gb.gayane@gmail.com -eco.pun@gmail.com -sanzharsurshanov@gmail.com -webar4i@gmail.com -zvetaan@gmail.com -svelavs@gmail.com -art@magicdesign.ru -kuzzzal@gmail.com -andrievskiydmitriy@gmail.com -pulya7@gmail.com -mikhail.a.gusev@gmail.com -elena@citrus-soft.ru -kropev@rarus.ru -nikonorov@labizum.ru -gulin@labizum.ru -vladfedorovich@gmail.com -Gfgaliya@gmail.com -srfedotov@gmail.com -vinjuli4ka2008@rambler.ru -lepon@bk.ru -y.robocopov@gmail.com -enchervinskaya@gmail.com -volokos@gmail.com -a.nikiforov@uplab.ru -dmytriy.suslov@gmail.com -s.shtukaturka@gmail.com -alex.dntv@gmail.com -timur.shulgin@infocraft.ru -sp.rusanov@gmail.com -timakova@fistashki.org -aknoraz@deloitte.ru -sesyunin@realweb.ru -bravo.johnny@yandex.ru -didenko@braind.agency -art@amado-id.ru -9330733@mail.ru -danila.zarechnev@gmail.com -kira.yakuhina@gmail.com -geiz@yandex.ru -tuning_a@mail.ru -suonarama@gmail.com -ha@brightstudio.ru -alexandersvinin@gmail.com -trjyfel@mail.ru -d.pogodin@itech-group.ru -designervs@mail.ru -smorozov@qsoft.ru -a.reva@qsoft.ru -semashko@yandex.ru -art.magomaev@gmail.com -imickaa@gmail.com \ No newline at end of file diff --git a/_utils/reports/get_theme_try_len.py b/_utils/reports/get_theme_try_len.py deleted file mode 100644 index 3316a12..0000000 --- a/_utils/reports/get_theme_try_len.py +++ /dev/null @@ -1,74 +0,0 @@ -# coding=utf-8 -# Получить количество попыток сдачи ДЗ и статус ДЗ по студентам из файла -import os -import django -import sys -BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - -sys.path.append("/var/www/skillbox/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from access.models import User -from courses.models import Course, CourseTheme -from journals.models import HomeworkTry, HomeworkJ - -print('## Отчет по теме курса') - -_mails = [i.strip().lower() for i in open(os.path.join(BASEDIR, 'reports/get_theme_try_len')).readlines()] -_users = [] -_no_exist = [] -_result = {} # Пользователь: Попыток, статус -result_file = open('get_theme_try_len_result', 'w') - - -_courses = Course.objects.filter(public=True).order_by('id') - -for _c in _courses: - print('{0}: {1}'.format(_c.id, _c.get_title())) - -_c = input('Выберите курс: ') -_course = Course.objects.get(id=int(_c)) - -_themes = CourseTheme.objects.filter(course=_course).order_by('sort') -for _t in _themes: - print('{0}: {2}/{1}'.format(_t.id, _t.get_title(), _t.sort)) - -_t = input('Выберите тему: ') -_theme = CourseTheme.objects.get(id=int(_t)) - -for i in _mails: - try: - u = User.objects.get(email=i) - except User.DoesNotExist: - _no_exist.append(i) - else: - _users.append(u) - -print('Не найденные пользователи:') -print(_no_exist) - -print('======') -print('# Курс: {0}'.format(_course.get_title())) -print('# Тема: {0}'.format(_theme.get_title())) -print('# Пользователей в отчете: {0}'.format(len(_users))) - -_average = [] -for _u in _users: - _count = HomeworkTry.objects.filter(material__theme=_theme, student=_u).count() - _result[_u.email] = _count - if _count > 0: - _average.append(_count) - - -_result = sorted(_result.items(), key=lambda x: x[1], reverse=True) - -_n = 0 -for key, value in _result: - if value > 0: - _n += 1 - result_file.write('{0} / {1} {2} \n'.format(key, value, HomeworkJ.objects.filter(material__theme=_theme, student__email=key).last().get_status()['title'] if HomeworkJ.objects.filter(material__theme=_theme, student__email=key).exists() else 'Не преступил')) - -result_file.close() - -print('Пользователей в отчете: {0}'.format(_n)) -print('Среднее количество попыток, исключая нулевые: {0:4.2}'.format(sum(_average) / len(_average))) diff --git a/_utils/reports/post_sale.py b/_utils/reports/post_sale.py deleted file mode 100644 index 9291422..0000000 --- a/_utils/reports/post_sale.py +++ /dev/null @@ -1,31 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - -sys.path.append("/var/www/skillbox/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from finance.models import Bill -from django.db.models import Q - -packs = [67, 66, 64, 65, 68, 69] -print('## Скольким пользователям было продано более, чем 1 курс. Исключая пакеты.') -print('Всего оплаченых счетов: {0}'.format(Bill.objects.filter(status='F', user__in_role='U').exclude(Q(service__id__in=packs) | - Q(service__course=None)).count())) - -_u = {} -for _b in Bill.objects.filter(status='F', user__in_role='U').exclude(service__id__in=packs): - if _u.get(_b.user.email): - _u[_b.user.email] += 1 - else: - _u[_b.user.email] = 1 - -_c = 0 - -for k, v in _u.items(): - if v > 1: - _c += 1 - -print('Повторных счетов: {0}'.format(_c)) diff --git a/_utils/resave_HT_ET.py b/_utils/resave_HT_ET.py deleted file mode 100644 index 50464e3..0000000 --- a/_utils/resave_HT_ET.py +++ /dev/null @@ -1,15 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from journals.models import HomeworkTry, ExamTry - -for tr in HomeworkTry.objects.all(): - tr.save() - -for er in ExamTry.objects.all(): - tr.save() diff --git a/_utils/resave_homeworkJ.py b/_utils/resave_homeworkJ.py deleted file mode 100644 index 0d9480a..0000000 --- a/_utils/resave_homeworkJ.py +++ /dev/null @@ -1,15 +0,0 @@ -# coding=utf-8 -import os -import django -import sys -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from journals.models import HomeworkJ, HomeworkTry - -for tr in HomeworkJ.objects.filter(teacher=None).exclude(date=None): - t = HomeworkTry.objects.filter(parent=tr).exclude(teacher=None).last() - if t: - tr.teacher = t.teacher - tr.save() diff --git a/_utils/resave_week_bill.py b/_utils/resave_week_bill.py deleted file mode 100644 index 251eaaf..0000000 --- a/_utils/resave_week_bill.py +++ /dev/null @@ -1,13 +0,0 @@ -# coding=utf-8 -import os - -import datetime -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from finance.models import Bill -for bill in Bill.objects.exclude(service__by_time=0): - bill.save() diff --git a/_utils/reset_HT_HW_data.py b/_utils/reset_HT_HW_data.py deleted file mode 100644 index b879221..0000000 --- a/_utils/reset_HT_HW_data.py +++ /dev/null @@ -1,31 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from journals.models import HomeworkTry, HomeworkJ - -for ht in HomeworkTry.objects.all(): - c = ht.comments.all().order_by('date').first() - if ht.date != c.date: - ht.date = c.date - ht.save() - -for hw in HomeworkJ.objects.all(): - if HomeworkTry.objects.filter(parent=hw).exists(): - f = HomeworkTry.objects.filter(parent=hw).order_by('date').first() - l = HomeworkTry.objects.filter(parent=hw).order_by('date').last() - s = False - if hw.date and hw.date != f.date: - hw.date = f.date - s = True - - if hw.f_date and hw.f_date != l.f_date: - hw.f_date = l.f_date - s = True - - if s: hw.save() diff --git a/_utils/script.py b/_utils/script.py deleted file mode 100644 index f7d1785..0000000 --- a/_utils/script.py +++ /dev/null @@ -1 +0,0 @@ -print('Hello world') diff --git a/_utils/send_re_welcome_mails.py b/_utils/send_re_welcome_mails.py deleted file mode 100644 index b8ea273..0000000 --- a/_utils/send_re_welcome_mails.py +++ /dev/null @@ -1,73 +0,0 @@ -# coding=utf-8 -import smtplib - -import os -import django -import sys - -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from management.mails import letter_decor -from django.db.models import Q -from journals.models import TeacherJ -from lms.settings import DEFAULT_FROM_EMAIL, NAME -from django.core.mail import EmailMessage -from access.models import User - - -@letter_decor() -def send_mail(user): - print('Отправляю') - data = { - 'title': u'Закрытый вебинар по Java Разработке', - 'text': u'Привет, {0}' - u'

Четверг. 8 сентября 20:00

' - u'Закрытый вебинар.
' - u'Только для слушателей курса Java Разработчик.

' - u'Рады сообщить, что мы запускаем формат еженедельных вебинаров для слушателей курса «Java разработчик».

' - u'В ходе вебинаров наш старший преподаватель Сергей Гаевой, ответит на вопросы по выполнению домашних заданий, а так же на вопросы связанные с изученным материалом.

' - u'Уже в эту среду 7.08 в 20.00 состоится вебинар для слушателей начальных модулей.

' - u'В ходе вебинара будут разобраны все возникшие у вас вопросы:
' - u'— Выполнение домашних работ
' - u'— По изученному в ходе обучения материалу

' - u'Для участия в вебинаре, — просто пройдите по ссылке https://ucancode.ru/education/online/
' - u'Чтобы оставлять комментарии, авторизуйтесь через любую социальную сеть.
'.format(user.name if user.name else u'студент'), - 'email': user.email, - 'type': 'Рассылка' - } - return data - -exclude = [] - -l = 0 -#sourse = open('exclude_re_welcome.json', 'a').readlines() -source = [] -#test = [User.objects.get(email='abushik@mokselle.com'), User.objects.get(email='bez.b.unix@gmail.com'), User.objects.get(email='ragozina@mokselle.com')] -test = None -users = TeacherJ.objects.filter(course__id=2).exclude(Q(teacher=None)|Q(student=None)) -for journal in users if not test else test: - user = journal.student if not test else journal - if (user.email not in exclude) and (user.reg_status == '4' and user.is_active) and not test: - if user.email not in source: - #send_mail(user) - source.append(user.email) - else: - print('ИСКЛЮЧЕН ПОЛЬЗОВАТЕЛЬ') - print(user.email) - l += 1 - elif test: - if user.email not in source: - print('Отправляю') - send_mail(user) - source.append(user.email) - else: - print('ИСКЛЮЧЕН ПОЛЬЗОВАТЕЛЬ') - print(user.email) - l += 1 -print(l) -print(source) -print('=============') -for i in source: - print(i) - diff --git a/_utils/sent_all_letters.py b/_utils/sent_all_letters.py deleted file mode 100644 index b5fd051..0000000 --- a/_utils/sent_all_letters.py +++ /dev/null @@ -1,36 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from management.letters import sent_new_service_request, sent_new_self_bill, sent_registration, sent_active_new_email, \ - sent_good_activation, sent_forgot_password, sent_accept_forgot, sent_comment_news, sent_teacher_answer, \ - sent_created_self_bill, sent_new_bill, sent_new_comment, sent_new_feedback, sent_new_expired, letter_delete_comment, \ - block_warning - -request = None -email = None -user = None -comment = None - -sent_new_service_request(request, email) -sent_new_self_bill(request, email) -sent_registration(user, title=u'Добро пожаловать в Точку кода') -sent_active_new_email(user) -sent_good_activation(user) -sent_forgot_password(user, None) -sent_accept_forgot(user) -sent_comment_news(comment, None, None) -sent_teacher_answer(None) -sent_new_service_request(request, email) -sent_new_self_bill(request, email) -sent_created_self_bill(request, email) -sent_new_bill(user) -sent_new_comment(comment, email) -sent_new_feedback(None, email) -sent_new_expired(None, email) -block_warning(None, None, email) -letter_delete_comment(None, None) diff --git a/_utils/sent_fire_bill_letters.py b/_utils/sent_fire_bill_letters.py deleted file mode 100644 index a31c4fe..0000000 --- a/_utils/sent_fire_bill_letters.py +++ /dev/null @@ -1,16 +0,0 @@ -# coding=utf-8 -import os - -import datetime -import django -import sys -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from access.models import User -from management.letters import free_week_end -from finance.models import Bill - -for bill in Bill.objects.filter(status='H'): - for user in User.objects.filter(in_role='S'): - free_week_end(bill, user.email) diff --git a/_utils/sent_newsletter.py b/_utils/sent_newsletter.py deleted file mode 100644 index 4220651..0000000 --- a/_utils/sent_newsletter.py +++ /dev/null @@ -1,38 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - -import time - -from django.db.models import Q - -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from journals.models import TeacherJ -from management.letters import sent_welcome_to_webinar -from access.models import User -from lms.regex import check_email - -test = False -test_users = [User.objects.get(id=1), User.objects.get(id=2)] -users = [user.student for user in TeacherJ.objects.filter(course__id=16).exclude(Q(student=None)|Q(teacher=None))] -TITLE = 'Домашние задания курс PR-менеджер' - -excludes = [] -count = 0 - -print(len(users)) -for user in test_users if test else users: - if check_email(user.email): - sent_welcome_to_webinar(user, TITLE) - time.sleep(10) - else: - excludes.append(user.email) - -print(count) -print('==========') -print('Не верная почта:') -for i in excludes: - print(i) diff --git a/_utils/sent_re_welcome_history b/_utils/sent_re_welcome_history deleted file mode 100644 index e20c3e6..0000000 --- a/_utils/sent_re_welcome_history +++ /dev/null @@ -1,1255 +0,0 @@ -Using username "root". -root@codemy.ru's password: -Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-85-generic x86_64) - - * Documentation: https://help.ubuntu.com/ -Last login: Fri May 6 13:05:14 2016 from 85.93.153.206 -root@web:~# ls -nginx_signing.key rabbitmq-signing-key-public.asc -root@web:~# cd /var/www -root@web:/var/www# source .envs/codemy/bin/activate -(codemy)root@web:/var/www# cd projects/ -(codemy)root@web:/var/www/projects# ls -codemy test_db -(codemy)root@web:/var/www/projects# cd codemy/ -(codemy)root@web:/var/www/projects/codemy# ls -26.04.2016.backup conf finance manage.py storage -access courses img_creator media templates -celerybeat.pid damp.json journals migrate utils -codemy docker-compose.yml management static Vagrantfile -(codemy)root@web:/var/www/projects/codemy# cd utils/ -(codemy)root@web:/var/www/projects/codemy/utils# ls -check_course_map.py finish_export_vzaar.py -check_empty_LJ.py gen_diploms.py -check_expired.py import_JC -check_exsists_journal.py import_profile_to_new_profile.py -check_HT.py __init__.py -check_journal_access.py load_as_customer.py -check_journals.py open_comments.py -check_lesson_statuses.py reload_HT.py -check_opens.py resave_HT_ET.py -check_robo_prep.py reset_HT_HW_data.py -check_storage.py send_re_welcome_mails.py -check_waiting.py sent_all_letters.py -clean_bill.py test_check_bill.py -clear_db.py test_comment_fabric.py -create_diploms.py test_diploma.py -export_vzaar.py write_interactive_key.py -(codemy)root@web:/var/www/projects/codemy/utils# python send_re_welcome_mails.py -alexbil@meta.ua -ghost013777@yandex.com -gotcha10@ya.ru -gotcha10@yandex.kz -aqsrub@gmail.com -gotcha10@yandex.by -rozzel@mail.ru -kalzone@mail.ru -lukashov@mokselle.ru -dikaya35@gmail.com -mikemsn@yandex.ru -qwa@tut.by -y.bugayov@gmail.com -maiseishvetsov@gmail.com -eduard.s.1984@gmail.com -mihailov.di@mail.ru -drago16677@gmail.com -dremov30@ya.ru -gethrik@yandex.ru -mr.ken87@yandex.ru -bukovskij93@mail.ru -mr.levaya.pochta@mail.ru -intel.brute@gmail.com -gotcha10@narod.ru -fedotov@tyr24.ru -ks2007a@yandex.ru -xenanova@gmail.com -dragon_87.07@mail.ru -2333868@gmail.com -boltyn4ik@gmail.com -fenix-17@list.ru -Bess2010@inbox.ru -denisrudnitskiy10@gmail.com -jostallie@yandex.ru -cool.hostinger2015@yandex.ru -lia4581@gmail.com -aza-1991@inbox.ru -dima-tf@mail.ru -pereshina@mail.ru -constantine@cjavariya.com -p0v13@mail.ru -ale-xey76@yandex.ru -c0x1ff6@yahoo.com -sungirl6969@mail.ru -jfeoks@mail.ru -agromis@yandex.ru -cepblu809@yandex.ru -insafsalaf93@gmail.com -runetorg@ukr.net -bairamov-azat@mail.ru -supapawa@ya.ru -cuznetsov.ildar@yandex.ru -yours2xx@mail.ru -sveta.utemova@bk.ru -job.76@bk.ru -d.v.vasiljev@mail.ru -kirfnv@yandex.ru -timurberdiev100793@gmail.com -romasamsonow@yandex.ru -wonder.uix@gmail.com -k_koli_k@mail.ru -orazbek--97@mail.ru -mish6@yandex.ru -prproos@yhg.biz -khaaan@mail.ru -zver707zver@gmail.com -berdyugina69@mail.ru -maxrusgm@yandex.ru -bess2010@inbox.ru -svetohna3@gmail.com -chulkovave@yandex.ru -agressive.channel@gmail.com -rishat.fayzrakhmanov@gmail.com -maxiaka4592@yandex.ru -serstalk@rambler.ru -852416@e1.ru -irishashvez@mail.ru -dmi3x.work@gmail.com -ivanstsots@yandex.ru -tararov.yu@gmail.com -perferium@gmail.com -pasha2.05.97@mail.ru -legende84@mail.ru -1161302@mail.ru -barashek27@yandex.ru -bogdan.oxremchuk@mail.ru -artesmenil@gmail.com -yakovenko_dimochka@mail.ru -komarov_2013@list.ru -mikemegomail@gmail.com -90semen@rambler.ru -avebhs.ru@gmail.com -ayrtreg@yandex.ru -doctrine@list.ru -89507525939@yandex.ru -lan2002@yandex.ru -sergey-g@mail.ru -akhaikin@yandex.ru -nemirovsk@ya.ru -qyp68@bk.ru -pyshenko@mail.ru -afeldus@mail.ru -sstaytrue@yandex.ru -sochiit@mail.ru -iskhakov@novitate.ru -s-trace@mail.ru -tarneck@gmail.com -sanak96@list.ru -gralle@yandex.ru -k.erofeew@gmail.com -Bortsova-n@yandex.ru -esli_4to@mail.ru -kaducium@yandex.ru -baa21v@gmail.com -mr_dumka@mail.ru -yoning@mail.ru -kirill.bykov@mail.ru -city10@list.ru -kurashov-oleg@mail.ru -pursuit2012@mail.ru -karbach2016@mail.ru -mark_duo@mail.ru -yokano.banimoto@gmail.com -alexmtu@bk.ru -4erni4ka94@mail.ru -serzhpodkolzin@yandex.ru -sss-74@bk.ru -denant1993@gmail.com -saimovs@mail.ru -pidlabuznyk_sancho@ukr.net -kubliy@bk.ru -navi8282@mail.ru -pupynyn@mail.ru -zendarol@mail.ru -9265371071@mail.ru -dive-sharm@yandex.ru -meron-kz@yandex.ru -rafaelmusic@yandex.ru -xumuk123@mail.ru -skop.1984@mail.ru -novosib_2009@mail.ru -dzk-man.ru@rambler.ru -xoxol-07@mail.ru -eagoshkova@mail.ru -ar18@inbox.ru -dieselmash@lenta.ru -l1fepro@yandex.ru -ddinamit.i@gmail.com -rock.kochetok@gmail.com -daniktawit@gmail.com -i.h8.people@yandex.ru -corben1979@mail.ru -njarkih@gmail.com -iamthe@bk.ru -karioster@mail.ru -baryshnikov@mokselle.com -arzt2001@mail.ru -vsd71@yandex.ru -pirveliev76@mail.ru -tralom@yandex.ru -jazzoo@mail.ru -hitasu@gmail.com -bakoz@mail.ru -businka_mir@mail.ru -nnikitos95@mail.ru -akula@list.ru -m0chk0z-steam@mail.ru -lessxx@ya.ru -slavazhur@yandex.ru -bekramb@gmail.com -gadzila2.valeev@yandex.ru -p_orlov@list.ru -edline2012@yandex.ru -sergey.v.trishin@gmail.com -np-gtn@mail.ru -tsaplinayus@ya.ru -ilya-best7@yandex.ru -sam_smith@inbox.ru -serega87rus@yandex.ru -mikhail.amosov@gmail.com -joneuin@mail.ru -dondo2016@bk.ru -dimas86@bk.ru -glavbuh.tv@mail.ru -228rega@mail.ru -s-consul@mail.ru -sirius1991dav_asa@mail.ru -adalinadavis@gmail.com -likofffa@yandex.ru -narekmanukyan1995@mail.ru -v-cher9@yandex.ru -asteroid2003@list.ru -runningonaspha180@i.ua -cc4455@gmail.com -vasilikav@uniweb.ru -trup807@mail.ru -elena_grigoreva92@mail.ru -anton.kabachkov@gmail.com -maxymgold@gmail.com -kfnkt@ya.ru -marysiasm@mail.ru -deira@bk.ru -vasilya-85@mail.ru -ahnuria@mail.ru -wod42rus@mail.ru -vikwebmemo@gmail.com -maxsolomatin9161@yandex.ru -art.bages@gmail.com -karpov.dahila@mail.ru -nailds@mail.ru -gusev-74@mail.ru -antonnalex1@gmail.com -susets96@gmail.com -kefir2204nikiforov@gmail.com -ivansuzdalev@gmail.com -ensly@yandex.ru -coftoo@gmail.com -ubivv@rambler.ru -trifanchev@yandex.ru -axelionex@gmail.com -nickiller221@gmail.com -kukotin.ivan@mail.ru -zelentsov@mokselle.com -ilyaest7@gmail.com -yarulin.am@gmail.com -burenkov1972@mail.ru -detrond@mail.ru -a.trdatyan@yandex.ru -bera09@mail.ua -vitaliy.polotskiy@gmail.com -showtime2007@mail.ru -elstheprog@gmail.com -nokushova@bk.ru -kifal.red@gmail.com -mkostenova@ya.ru -ilya.matytsyn@gmail.com -stas_shoshkin@rambler.ru -p.active.kud@gmail.com -vadzimbelsky@rambler.ru -artyomzolotykh@gmail.com -komarovataty@yandex.ru -pavel-samocvetov@rambler.ru -ekaterinageorgievna@ya.ru -hakimov65@inbox.ru -lexinfox@mail.ru -anton.alyoshin@hotmail.com -sovalianna@gmail.com -pyosha@yandex.ru -vktmb@mail.ru -ivtsygankov@gmail.com -vals_0791@mail.ru -strix1985@mail.ru -chel200807@yandex.ru -osmusic17@gmail.com -vmiretskaya@gmail.com -vadigoryache@yandex.ru -r61boff@mail.ru -kkvkk@mail.ru -sokol4eg@mail.ru -artyomzykov@yandex.ru -wkmstr@mail.ru -vip-dantist@yandex.ru -geogrii-cobolev@mail.ru -djsergeykovanin@mail.ru -belous.maria@gmail.com -www.rifma@mail.ru -kviva@yandex.ru -torgbuk@mail.ru -d.work2011@yandex.ru -mkenes_2@mail.ru -web-school-voicehovich@yandex.ru -lipsuke@mac.com -9713943@mail.ru -dyrnoj@bk.ru -ebortnikov@mail.ru -sekvenseralex@mail.ru -green2536@yandex.ru -vufer@inbox.ru -elabuga-dar@yandex.ru -codemaster74@mail.ru -artis72@ya.ru -gak.anya@mail.ru -9186532244@mail.ru -turist2015@ya.ru -yandexru@icloud.com -sir.oberst@yandex.ru -yusupova.alfia2014@yandex.ru -kvon@list.ru -vladsemuk@gmail.com -gp@bipon.ru -adastra.m@yandex.ru -ruslan71@bmail.ru -0964600@gmail.com -okislyakov@gmail.com -danil.kdo1@gmail.com -elena_polyakova84@mail.ru -obraztsova.che@yandex.ru -nastusha1995is@gmail.com -ob080270@voliacable.com -olgeraski@gmail.com -stas_ravskiy-95@mail.ru -mikhail_efimov@mail.ru -riseagain@inbox.ru -anton_semenchuk@rambler.ru -t.natalia_66@mail.ru -markovskaya_88@mail.ru -vip.alex113@mail.ru -alexander97@inbox.ru -a.mailme@yandex.ru -oleg.akimov@mail.ru -omsterkhova@rambler.ru -alvk3@yandex.ru -irina.kisik@gmail.com -bestway305@yandex.ru -s.s.shuvalova@gmail.com -opti72@ukr.net -vlg81@mail.ru -lanarich@mail.ru -kylych1@yandex.ru -sokol-judo92@mail.ru -vikraokna@gmail.com -korovina_natasha@mail.ru -1ckaz@mail.ru -dontsurrender@ya.ru -alberto.man@mail.ru -2906300@inbox.ru -maxyta22@yandex.ru -insait07@mail.ru -otik_kurdgelia@mail.ru -strig_elena@mail.ru -guipago@mail.ru -kira09051987@mail.ru -akoziy@ya.ru -kostgr@rambler.ru -gisstyle@yandex.ru -kasyan12@mail.ru -bkr1@yandex.ru -stepanuk1987@yandex.ru -mainfilter@yandex.ru -nikolletss@gmail.com -konstantinov2006@yandex.ru -webprogrammer77@gmail.com -irena.kostina@mail.ru -veneta83@inbox.ru -evgwar@yandex.ru -saski@mail.ru -rorbah91@yandex.ru -dmitriylarin@bk.ru -kalina81@list.ru -mainfilter@ya.ru -gyrka@yandex.ru -ann_posh@rambler.ru -dvsvaran@mail.ru -vorona_1992@bk.ru -igor.kiyashchenko@mail.ru -artem.panteleev@aol.com -puzach@mail.ru -a.v.kurlovich@gmail.com -8wicx@msgos.com -philatovevgeny@mail.ru -gamer1648@yandex.ru -servaredecaelo@gmail.com -zefaa@mail.ru -evseev@dubna.ru -carrera91167@inbox.ru -anik4366@mail.ru -ganin-va@yandex.ru -a05@list.ru -videograf2007@yandex.ru -galkov@mokselle.com -bengard@yandex.ru -aksay_sayt@mail.ru -alexatro@yandex.ru -5001010@bk.ru -mislavsky@yandex.ru -niki-1@yandex.ru -kazzak2008@rambler.ru -hazhaev@gmail.com -ssprava@ukr.net -hotmustang@mail.ru -aleksandr-a-2014@mail.ru -utk1@list.ru -d.tiganov@yandex.ru -katerium@mail.ru -fom_iv@list.ru -test@test.ru -gnatenko.pavel@gmail.com -ekarniymamay@mil.ru -dron_andr_2007@mail.ru -uvladz@gmail.com -sadness.sv@gmail.com -indrs@rambler.ru -rkrivtsov@gmail.com -ci4rovik@mail.ru -dine77e@gmail.com -edwantoshin@rambler.ru -yuriy1357@mail.ru -filchenkov.dima@mail.ru -2013ekaterina@mail.ru -pavel.bosko@gmail.com -mf915@mail.ru -nestetion@yandex.ru -klu_lena@list.ru -vlyagusha@justclick.ru -deniskhig@yandex.ru -edwardb@ngs.ru -undead.koroleva2012@yandex.ru -vladvolod@yandex.ru -igvassor@gmail.com -acvyatin@mail.ru -mk@bagur.su -regione-2000@ya.ru -iborzik@gmail.com -kuznetsovaelena1@mail.ru -denis3753@yandex.ru -o.lif@gmx.de -a.michurin1783@mail.ru -yusupowa.alfia2017@yandex.ru -sheniachiglazki@gmail.com -senior.perfiliew@ya.ru -stacyinner@gmail.com -apishvanov@gmail.com -adrinalin17@yandex.ru -marinemaks@yandex.ru -trippleyes@gmail.com -jeged22@gmail.com -dsolomennikova@gmail.com -xaba578@mail.ru -nestetion@ya.ru -romankox1973@gmail.com -secalol@gmail.com -gabeda@yandex.ru -elgus2007@yandex.ru -alexeidavljatov3@mail.ru -233868@gmail.com -optimizup@yandex.ru -lcf-84@mail.ru -polkovnik51@vail.ru -susenko_a@ukr.net -teamaks@mail.ru -baigulova.indira@bk.ru -vip.samosadov@mail.ru -donder@yandex.ru -teacoffee@i.ua -paveldance@mail.ru -za-alex@yandex.ru -nns7@inbox.ru -2909763@gmail.com -19871010@mail.ru -oleg@pendurov.com -o.kubyshkin@gmail.com -meres28032000@gmail.com -mail@greatcoach.ru -bogdanofandrey@gmail.com -igor.dyachkov89@gmail.om -alexeyra2010@gmail.com -step1383@gmail.com -progres5@yandex.ru -elenagum@gmail.com -vitr@list.ru -ph.shamsiev@mail.ru -sak_aa@mail.ru -igrix@mail.ru -aeugeniy@gmail.com -duckart_av@mail.ru -epolshakova@ya.ru -kvasha.oleg1962@gmail.com -raduga-k-klyuchi@mail.ru -v_vyborg@rambler.ru -cprof777@gmail.com -iterus@rambler.ru -gordjelin14@gmail.com -msv1108@gmail.com -tao981@rambler.ru -fan2pr@yandex.ru -ukhin.ag@gmail.com -sergeioff@mail.ru -my.777@mail.ru -4-mi@bk.ru -dimkut@bk.ru -od_89@mail.ru -mihajlovmv@yandex.ru -vetarak@gmail.com -remenyuk79@gmial.com -uzor1@ukr.net -ma1m2@mail.ru -valery.remenyuk@rambler.ru -iglatypov2010@yandex.ru -preyzon@mail.ru -grandger@mail.ru -dima-sit168@yandex.ru -alexander5454@yandex.ru -nikulinag@gmail.com -all4me4@gmail.com -jackf31@mail.ru -instinct975@gmail.com -kimonnick@mail.ru -aleksey.elizaryev@gmail.com -andr.bondaren@gmail.com -rajnisk@hotmail.com -pabls.web@gmail.com -ponamarev_89@bk.ru -mbr0969@gmail.com -roma.korehov@yandex.ru -e.b.j_99@mail.ru -lena_as_sister@mail.ru -tam-tam@bk.ru -podlipskiy@list.ru -paharenko1985@mail.ru -sherbakpn@gmail.com -nikita_freelance@mail.ru -nikita-ftf@mail.ru -megafabr@yandex.ru -gkrasnoshlyk@gmail.com -kurochalex@yandex.ru -lk@td-bm.com -com.wix@bk.ru -wecherkinaanna@gmail.com -evgenni_101@rambler.ru -zimamaxim87@yandex.ua -lera.morozova.1997@mail.ru -salabutinmark@gmail.com -hattam@mail.ru -vanologvin@gmail.com -prosto_sasha_senin@mail.ru -ssiglaev@mail.ru -eshudanov@gmail.com -etopist@outlook.com -orloff.eg@yandex.ru -ziv1@yandex.ru -afonin123@bk.ru -alexweb85@yandex.ru -vasiliy.moiseenko.64@mail.ru -vlkuprianov@gmail.com -blackrum@yandex.ru -d6232@bugmir.net -tusrb@mail.ru -pipopka@bk.ru -polkovnik51@mail.ru -lev0315@mail.ru -sj22@ya.ru -infiniticiti@gmail.com -dmitry010581@yandex.ru -rapheroes@mail.ru -380734890630@yandex.ru -9981331@gmail.com -igorkudenko1@gmail.com -a.silyaev@yandex.ru -evgeni2007@yandex.ru -chitinski86@gmail.com -belosvat@mail.ru -sergey.sin@list.ru -veewildy@gmail.com -tryhardpls@gmail.com -panda7495@mail.ru -s-murad85@mail.ru -disys@list.ru -unitbox@mail.ru -89296628851@yandex.ru -iyaroslav@yandex.ru -s-m-n@mail.ru -scorpion1037@yandex.ru -ekaterinakoloskova589@gmail.com -smarthaker@inbox.ru -timonlondon@hotmail.com -sorokina@uniweb.ru -shikhnabiev90@mail.ru -vladimir_volkov@bk.ru -zlata.reznickova@yandex.ru -yoooda1989@mail.ru -ritaces@inbox.lv -alxsrtv@gmail.com -pugachiov.serezha@yandex.ru -makguseff@yandex.ru -nserogoskaya@bk.ru -iguar.k@ya.ru -alpe@b2bresearch.com -felix.80808@mail.ru -itkost@yandex.ru -entervit@yandex.ru -tuapse@bk.ru -leench-r@mail.ru -asedletskiy@yandex.ru -svjatik20@yandex.ru -riddle84@mail.ru -marina.opheim@gmail.com -julia_dea@mail.ru -skorshuns@mail.ru -79296628851@yandex.ru -andrey777@maryno.net -okonogray@yahoo.com -skostin@mail.ru -pashtynov@mail.ru -nivshina@mail.ru -vitaliy.a.2015@mail.ru -maks2546@mail.ru -azohnvej@yandex.ru -597 -(codemy)root@web:/var/www/projects/codemy/utils# ls -check_course_map.py gen_diploms.py -check_empty_LJ.py import_JC -check_expired.py import_profile_to_new_profile.py -check_exsists_journal.py __init__.py -check_HT.py load_as_customer.py -check_journal_access.py open_comments.py -check_journals.py reload_HT.py -check_lesson_statuses.py resave_HT_ET.py -check_opens.py reset_HT_HW_data.py -check_robo_prep.py send_re_welcome_mails.py -check_storage.py sent_all_letters.py -check_waiting.py test_check_bill.py -clean_bill.py test_comment_fabric.py -clear_db.py test_diploma.py -create_diploms.py users_base.txt -export_vzaar.py write_interactive_key.py -finish_export_vzaar.py -(codemy)root@web:/var/www/projects/codemy/utils# python send_re_welcome_mails.py -Отправляю -Отправляю -2 -[u'abushik@mokselle.com', u'bez.b.unix@gmail.com'] -(codemy)root@web:/var/www/projects/codemy/utils# python send_re_welcome_mails.py -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -Отправляю -592 -[u'alexbil@meta.ua', u'ghost013777@yandex.com', u'gotcha10@ya.ru', u'gotcha10@yandex.kz', u'aqsrub@gmail.com', u'gotcha10@yandex.by', u'rozzel@mail.ru', u'kalzone@mail.ru', u'lukashov@mokselle.ru', u'dikaya35@gmail.com', u'mikemsn@yandex.ru', u'qwa@tut.by', u'y.bugayov@gmail.com', u'maiseishvetsov@gmail.com', u'eduard.s.1984@gmail.com', u'mihailov.di@mail.ru', u'drago16677@gmail.com', u'dremov30@ya.ru', u'gethrik@yandex.ru', u'mr.ken87@yandex.ru', u'bukovskij93@mail.ru', u'mr.levaya.pochta@mail.ru', u'intel.brute@gmail.com', u'gotcha10@narod.ru', u'fedotov@tyr24.ru', u'ks2007a@yandex.ru', u'xenanova@gmail.com', u'dragon_87.07@mail.ru', u'2333868@gmail.com', u'boltyn4ik@gmail.com', u'fenix-17@list.ru', u'Bess2010@inbox.ru', u'denisrudnitskiy10@gmail.com', u'jostallie@yandex.ru', u'cool.hostinger2015@yandex.ru', u'lia4581@gmail.com', u'aza-1991@inbox.ru', u'dima-tf@mail.ru', u'pereshina@mail.ru', u'constantine@cjavariya.com', u'p0v13@mail.ru', u'ale-xey76@yandex.ru', u'c0x1ff6@yahoo.com', u'sungirl6969@mail.ru', u'jfeoks@mail.ru', u'agromis@yandex.ru', u'cepblu809@yandex.ru', u'insafsalaf93@gmail.com', u'runetorg@ukr.net', u'bairamov-azat@mail.ru', u'supapawa@ya.ru', u'cuznetsov.ildar@yandex.ru', u'yours2xx@mail.ru', u'sveta.utemova@bk.ru', u'job.76@bk.ru', u'd.v.vasiljev@mail.ru', u'kirfnv@yandex.ru', u'timurberdiev100793@gmail.com', u'romasamsonow@yandex.ru', u'wonder.uix@gmail.com', u'k_koli_k@mail.ru', u'orazbek--97@mail.ru', u'mish6@yandex.ru', u'prproos@yhg.biz', u'khaaan@mail.ru', u'zver707zver@gmail.com', u'berdyugina69@mail.ru', u'maxrusgm@yandex.ru', u'bess2010@inbox.ru', u'svetohna3@gmail.com', u'chulkovave@yandex.ru', u'agressive.channel@gmail.com', u'rishat.fayzrakhmanov@gmail.com', u'maxiaka4592@yandex.ru', u'serstalk@rambler.ru', u'852416@e1.ru', u'irishashvez@mail.ru', u'dmi3x.work@gmail.com', u'ivanstsots@yandex.ru', u'tararov.yu@gmail.com', u'perferium@gmail.com', u'pasha2.05.97@mail.ru', u'legende84@mail.ru', u'1161302@mail.ru', u'barashek27@yandex.ru', u'bogdan.oxremchuk@mail.ru', u'artesmenil@gmail.com', u'yakovenko_dimochka@mail.ru', u'komarov_2013@list.ru', u'mikemegomail@gmail.com', u'90semen@rambler.ru', u'avebhs.ru@gmail.com', u'ayrtreg@yandex.ru', u'doctrine@list.ru', u'89507525939@yandex.ru', u'lan2002@yandex.ru', u'sergey-g@mail.ru', u'akhaikin@yandex.ru', u'nemirovsk@ya.ru', u'qyp68@bk.ru', u'pyshenko@mail.ru', u'afeldus@mail.ru', u'sstaytrue@yandex.ru', u'sochiit@mail.ru', u'iskhakov@novitate.ru', u's-trace@mail.ru', u'tarneck@gmail.com', u'sanak96@list.ru', u'gralle@yandex.ru', u'k.erofeew@gmail.com', u'Bortsova-n@yandex.ru', u'esli_4to@mail.ru', u'kaducium@yandex.ru', u'baa21v@gmail.com', u'mr_dumka@mail.ru', u'yoning@mail.ru', u'kirill.bykov@mail.ru', u'city10@list.ru', u'kurashov-oleg@mail.ru', u'pursuit2012@mail.ru', u'karbach2016@mail.ru', u'mark_duo@mail.ru', u'yokano.banimoto@gmail.com', u'alexmtu@bk.ru', u'4erni4ka94@mail.ru', u'serzhpodkolzin@yandex.ru', u'sss-74@bk.ru', u'denant1993@gmail.com', u'saimovs@mail.ru', u'pidlabuznyk_sancho@ukr.net', u'kubliy@bk.ru', u'navi8282@mail.ru', u'pupynyn@mail.ru', u'zendarol@mail.ru', u'9265371071@mail.ru', u'dive-sharm@yandex.ru', u'meron-kz@yandex.ru', u'rafaelmusic@yandex.ru', u'xumuk123@mail.ru', u'skop.1984@mail.ru', u'novosib_2009@mail.ru', u'dzk-man.ru@rambler.ru', u'xoxol-07@mail.ru', u'eagoshkova@mail.ru', u'ar18@inbox.ru', u'dieselmash@lenta.ru', u'l1fepro@yandex.ru', u'ddinamit.i@gmail.com', u'rock.kochetok@gmail.com', u'daniktawit@gmail.com', u'i.h8.people@yandex.ru', u'corben1979@mail.ru', u'njarkih@gmail.com', u'iamthe@bk.ru', u'karioster@mail.ru', u'baryshnikov@mokselle.com', u'arzt2001@mail.ru', u'vsd71@yandex.ru', u'pirveliev76@mail.ru', u'tralom@yandex.ru', u'jazzoo@mail.ru', u'hitasu@gmail.com', u'bakoz@mail.ru', u'businka_mir@mail.ru', u'nnikitos95@mail.ru', u'akula@list.ru', u'm0chk0z-steam@mail.ru', u'lessxx@ya.ru', u'slavazhur@yandex.ru', u'bekramb@gmail.com', u'gadzila2.valeev@yandex.ru', u'p_orlov@list.ru', u'edline2012@yandex.ru', u'sergey.v.trishin@gmail.com', u'np-gtn@mail.ru', u'tsaplinayus@ya.ru', u'ilya-best7@yandex.ru', u'sam_smith@inbox.ru', u'serega87rus@yandex.ru', u'mikhail.amosov@gmail.com', u'joneuin@mail.ru', u'dondo2016@bk.ru', u'dimas86@bk.ru', u'glavbuh.tv@mail.ru', u'228rega@mail.ru', u's-consul@mail.ru', u'sirius1991dav_asa@mail.ru', u'adalinadavis@gmail.com', u'likofffa@yandex.ru', u'narekmanukyan1995@mail.ru', u'v-cher9@yandex.ru', u'asteroid2003@list.ru', u'runningonaspha180@i.ua', u'cc4455@gmail.com', u'vasilikav@uniweb.ru', u'trup807@mail.ru', u'elena_grigoreva92@mail.ru', u'anton.kabachkov@gmail.com', u'maxymgold@gmail.com', u'kfnkt@ya.ru', u'marysiasm@mail.ru', u'deira@bk.ru', u'vasilya-85@mail.ru', u'ahnuria@mail.ru', u'wod42rus@mail.ru', u'vikwebmemo@gmail.com', u'maxsolomatin9161@yandex.ru', u'art.bages@gmail.com', u'karpov.dahila@mail.ru', u'nailds@mail.ru', u'gusev-74@mail.ru', u'antonnalex1@gmail.com', u'susets96@gmail.com', u'kefir2204nikiforov@gmail.com', u'ivansuzdalev@gmail.com', u'ensly@yandex.ru', u'coftoo@gmail.com', u'ubivv@rambler.ru', u'trifanchev@yandex.ru', u'axelionex@gmail.com', u'nickiller221@gmail.com', u'kukotin.ivan@mail.ru', u'zelentsov@mokselle.com', u'ilyaest7@gmail.com', u'yarulin.am@gmail.com', u'burenkov1972@mail.ru', u'detrond@mail.ru', u'a.trdatyan@yandex.ru', u'bera09@mail.ua', u'vitaliy.polotskiy@gmail.com', u'showtime2007@mail.ru', u'elstheprog@gmail.com', u'nokushova@bk.ru', u'kifal.red@gmail.com', u'mkostenova@ya.ru', u'ilya.matytsyn@gmail.com', u'stas_shoshkin@rambler.ru', u'p.active.kud@gmail.com', u'vadzimbelsky@rambler.ru', u'komarovataty@yandex.ru', u'pavel-samocvetov@rambler.ru', u'ekaterinageorgievna@ya.ru', u'hakimov65@inbox.ru', u'lexinfox@mail.ru', u'anton.alyoshin@hotmail.com', u'sovalianna@gmail.com', u'pyosha@yandex.ru', u'vktmb@mail.ru', u'ivtsygankov@gmail.com', u'vals_0791@mail.ru', u'strix1985@mail.ru', u'chel200807@yandex.ru', u'osmusic17@gmail.com', u'vmiretskaya@gmail.com', u'vadigoryache@yandex.ru', u'r61boff@mail.ru', u'kkvkk@mail.ru', u'sokol4eg@mail.ru', u'artyomzykov@yandex.ru', u'wkmstr@mail.ru', u'vip-dantist@yandex.ru', u'geogrii-cobolev@mail.ru', u'djsergeykovanin@mail.ru', u'belous.maria@gmail.com', u'www.rifma@mail.ru', u'kviva@yandex.ru', u'torgbuk@mail.ru', u'd.work2011@yandex.ru', u'mkenes_2@mail.ru', u'web-school-voicehovich@yandex.ru', u'lipsuke@mac.com', u'9713943@mail.ru', u'dyrnoj@bk.ru', u'sekvenseralex@mail.ru', u'green2536@yandex.ru', u'vufer@inbox.ru', u'elabuga-dar@yandex.ru', u'codemaster74@mail.ru', u'artis72@ya.ru', u'gak.anya@mail.ru', u'9186532244@mail.ru', u'turist2015@ya.ru', u'yandexru@icloud.com', u'sir.oberst@yandex.ru', u'yusupova.alfia2014@yandex.ru', u'kvon@list.ru', u'vladsemuk@gmail.com', u'gp@bipon.ru', u'adastra.m@yandex.ru', u'ruslan71@bmail.ru', u'0964600@gmail.com', u'okislyakov@gmail.com', u'danil.kdo1@gmail.com', u'elena_polyakova84@mail.ru', u'obraztsova.che@yandex.ru', u'nastusha1995is@gmail.com', u'ob080270@voliacable.com', u'olgeraski@gmail.com', u'stas_ravskiy-95@mail.ru', u'mikhail_efimov@mail.ru', u'riseagain@inbox.ru', u'anton_semenchuk@rambler.ru', u't.natalia_66@mail.ru', u'markovskaya_88@mail.ru', u'vip.alex113@mail.ru', u'alexander97@inbox.ru', u'a.mailme@yandex.ru', u'oleg.akimov@mail.ru', u'omsterkhova@rambler.ru', u'alvk3@yandex.ru', u'irina.kisik@gmail.com', u'bestway305@yandex.ru', u's.s.shuvalova@gmail.com', u'opti72@ukr.net', u'vlg81@mail.ru', u'lanarich@mail.ru', u'kylych1@yandex.ru', u'sokol-judo92@mail.ru', u'vikraokna@gmail.com', u'korovina_natasha@mail.ru', u'1ckaz@mail.ru', u'dontsurrender@ya.ru', u'alberto.man@mail.ru', u'2906300@inbox.ru', u'maxyta22@yandex.ru', u'insait07@mail.ru', u'otik_kurdgelia@mail.ru', u'strig_elena@mail.ru', u'guipago@mail.ru', u'kira09051987@mail.ru', u'akoziy@ya.ru', u'kostgr@rambler.ru', u'gisstyle@yandex.ru', u'kasyan12@mail.ru', u'bkr1@yandex.ru', u'stepanuk1987@yandex.ru', u'mainfilter@yandex.ru', u'nikolletss@gmail.com', u'konstantinov2006@yandex.ru', u'webprogrammer77@gmail.com', u'irena.kostina@mail.ru', u'veneta83@inbox.ru', u'evgwar@yandex.ru', u'saski@mail.ru', u'rorbah91@yandex.ru', u'dmitriylarin@bk.ru', u'kalina81@list.ru', u'mainfilter@ya.ru', u'gyrka@yandex.ru', u'ann_posh@rambler.ru', u'dvsvaran@mail.ru', u'vorona_1992@bk.ru', u'igor.kiyashchenko@mail.ru', u'artem.panteleev@aol.com', u'puzach@mail.ru', u'a.v.kurlovich@gmail.com', u'8wicx@msgos.com', u'philatovevgeny@mail.ru', u'gamer1648@yandex.ru', u'servaredecaelo@gmail.com', u'zefaa@mail.ru', u'evseev@dubna.ru', u'carrera91167@inbox.ru', u'anik4366@mail.ru', u'ganin-va@yandex.ru', u'a05@list.ru', u'videograf2007@yandex.ru', u'galkov@mokselle.com', u'bengard@yandex.ru', u'aksay_sayt@mail.ru', u'alexatro@yandex.ru', u'5001010@bk.ru', u'mislavsky@yandex.ru', u'niki-1@yandex.ru', u'kazzak2008@rambler.ru', u'hazhaev@gmail.com', u'ssprava@ukr.net', u'hotmustang@mail.ru', u'aleksandr-a-2014@mail.ru', u'utk1@list.ru', u'd.tiganov@yandex.ru', u'katerium@mail.ru', u'fom_iv@list.ru', u'test@test.ru', u'gnatenko.pavel@gmail.com', u'ekarniymamay@mil.ru', u'dron_andr_2007@mail.ru', u'uvladz@gmail.com', u'sadness.sv@gmail.com', u'indrs@rambler.ru', u'rkrivtsov@gmail.com', u'ci4rovik@mail.ru', u'dine77e@gmail.com', u'edwantoshin@rambler.ru', u'yuriy1357@mail.ru', u'filchenkov.dima@mail.ru', u'2013ekaterina@mail.ru', u'pavel.bosko@gmail.com', u'mf915@mail.ru', u'nestetion@yandex.ru', u'klu_lena@list.ru', u'vlyagusha@justclick.ru', u'deniskhig@yandex.ru', u'edwardb@ngs.ru', u'undead.koroleva2012@yandex.ru', u'vladvolod@yandex.ru', u'igvassor@gmail.com', u'acvyatin@mail.ru', u'mk@bagur.su', u'regione-2000@ya.ru', u'iborzik@gmail.com', u'kuznetsovaelena1@mail.ru', u'denis3753@yandex.ru', u'o.lif@gmx.de', u'yusupowa.alfia2017@yandex.ru', u'sheniachiglazki@gmail.com', u'senior.perfiliew@ya.ru', u'stacyinner@gmail.com', u'apishvanov@gmail.com', u'adrinalin17@yandex.ru', u'marinemaks@yandex.ru', u'trippleyes@gmail.com', u'jeged22@gmail.com', u'dsolomennikova@gmail.com', u'xaba578@mail.ru', u'nestetion@ya.ru', u'romankox1973@gmail.com', u'secalol@gmail.com', u'gabeda@yandex.ru', u'elgus2007@yandex.ru', u'alexeidavljatov3@mail.ru', u'233868@gmail.com', u'optimizup@yandex.ru', u'lcf-84@mail.ru', u'polkovnik51@vail.ru', u'teamaks@mail.ru', u'baigulova.indira@bk.ru', u'vip.samosadov@mail.ru', u'donder@yandex.ru', u'teacoffee@i.ua', u'paveldance@mail.ru', u'za-alex@yandex.ru', u'nns7@inbox.ru', u'2909763@gmail.com', u'19871010@mail.ru', u'oleg@pendurov.com', u'o.kubyshkin@gmail.com', u'meres28032000@gmail.com', u'mail@greatcoach.ru', u'bogdanofandrey@gmail.com', u'igor.dyachkov89@gmail.om', u'alexeyra2010@gmail.com', u'step1383@gmail.com', u'progres5@yandex.ru', u'elenagum@gmail.com', u'vitr@list.ru', u'ph.shamsiev@mail.ru', u'sak_aa@mail.ru', u'igrix@mail.ru', u'aeugeniy@gmail.com', u'duckart_av@mail.ru', u'epolshakova@ya.ru', u'kvasha.oleg1962@gmail.com', u'raduga-k-klyuchi@mail.ru', u'v_vyborg@rambler.ru', u'cprof777@gmail.com', u'iterus@rambler.ru', u'gordjelin14@gmail.com', u'msv1108@gmail.com', u'tao981@rambler.ru', u'fan2pr@yandex.ru', u'ukhin.ag@gmail.com', u'sergeioff@mail.ru', u'my.777@mail.ru', u'4-mi@bk.ru', u'dimkut@bk.ru', u'od_89@mail.ru', u'mihajlovmv@yandex.ru', u'vetarak@gmail.com', u'remenyuk79@gmial.com', u'uzor1@ukr.net', u'ma1m2@mail.ru', u'valery.remenyuk@rambler.ru', u'iglatypov2010@yandex.ru', u'preyzon@mail.ru', u'grandger@mail.ru', u'dima-sit168@yandex.ru', u'alexander5454@yandex.ru', u'nikulinag@gmail.com', u'all4me4@gmail.com', u'jackf31@mail.ru', u'instinct975@gmail.com', u'kimonnick@mail.ru', u'aleksey.elizaryev@gmail.com', u'andr.bondaren@gmail.com', u'rajnisk@hotmail.com', u'pabls.web@gmail.com', u'ponamarev_89@bk.ru', u'mbr0969@gmail.com', u'roma.korehov@yandex.ru', u'e.b.j_99@mail.ru', u'lena_as_sister@mail.ru', u'tam-tam@bk.ru', u'podlipskiy@list.ru', u'paharenko1985@mail.ru', u'sherbakpn@gmail.com', u'nikita_freelance@mail.ru', u'nikita-ftf@mail.ru', u'megafabr@yandex.ru', u'gkrasnoshlyk@gmail.com', u'kurochalex@yandex.ru', u'lk@td-bm.com', u'com.wix@bk.ru', u'wecherkinaanna@gmail.com', u'evgenni_101@rambler.ru', u'zimamaxim87@yandex.ua', u'lera.morozova.1997@mail.ru', u'salabutinmark@gmail.com', u'hattam@mail.ru', u'vanologvin@gmail.com', u'prosto_sasha_senin@mail.ru', u'ssiglaev@mail.ru', u'eshudanov@gmail.com', u'etopist@outlook.com', u'ziv1@yandex.ru', u'afonin123@bk.ru', u'alexweb85@yandex.ru', u'vasiliy.moiseenko.64@mail.ru', u'vlkuprianov@gmail.com', u'blackrum@yandex.ru', u'd6232@bugmir.net', u'tusrb@mail.ru', u'pipopka@bk.ru', u'polkovnik51@mail.ru', u'lev0315@mail.ru', u'sj22@ya.ru', u'infiniticiti@gmail.com', u'dmitry010581@yandex.ru', u'rapheroes@mail.ru', u'380734890630@yandex.ru', u'9981331@gmail.com', u'igorkudenko1@gmail.com', u'a.silyaev@yandex.ru', u'evgeni2007@yandex.ru', u'chitinski86@gmail.com', u'belosvat@mail.ru', u'sergey.sin@list.ru', u'veewildy@gmail.com', u'tryhardpls@gmail.com', u'panda7495@mail.ru', u's-murad85@mail.ru', u'disys@list.ru', u'unitbox@mail.ru', u'89296628851@yandex.ru', u'iyaroslav@yandex.ru', u's-m-n@mail.ru', u'scorpion1037@yandex.ru', u'ekaterinakoloskova589@gmail.com', u'smarthaker@inbox.ru', u'timonlondon@hotmail.com', u'sorokina@uniweb.ru', u'shikhnabiev90@mail.ru', u'vladimir_volkov@bk.ru', u'zlata.reznickova@yandex.ru', u'yoooda1989@mail.ru', u'ritaces@inbox.lv', u'alxsrtv@gmail.com', u'pugachiov.serezha@yandex.ru', u'makguseff@yandex.ru', u'nserogoskaya@bk.ru', u'iguar.k@ya.ru', u'alpe@b2bresearch.com', u'felix.80808@mail.ru', u'itkost@yandex.ru', u'entervit@yandex.ru', u'tuapse@bk.ru', u'leench-r@mail.ru', u'asedletskiy@yandex.ru', u'svjatik20@yandex.ru', u'riddle84@mail.ru', u'marina.opheim@gmail.com', u'julia_dea@mail.ru', u'skorshuns@mail.ru', u'79296628851@yandex.ru', u'andrey777@maryno.net', u'okonogray@yahoo.com', u'skostin@mail.ru', u'pashtynov@mail.ru', u'nivshina@mail.ru', u'vitaliy.a.2015@mail.ru', u'maks2546@mail.ru', u'azohnvej@yandex.ru'] -(codemy)root@web:/var/www/projects/codemy/utils# diff --git a/_utils/teacher_report.py b/_utils/teacher_report.py deleted file mode 100644 index 1a139ab..0000000 --- a/_utils/teacher_report.py +++ /dev/null @@ -1,70 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - -from datetime import datetime, date - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from lms.tools import out_date_format -from management.letters import sent_teacher_report -from journals.models import JournalsReports, HomeworkJ, HomeworkTry, ExamJ, ExamTry - -for self in JournalsReports.objects.filter(sent=False): - if not self.sent: - filt = {'teacher': self.teacher, 'date__gte': self.s_date} - if self.course: - filt['material__course'] = self.course - if self.student: - filt['student'] = self.student - if self.f_date: - filt['date__lt'] = self.f_date - else: - filt['date__lt'] = datetime.now() - - result = {'id': self.teacher.id, - 'face': {'name': self.teacher.get_full_name(), - 'ava': self.teacher.get_image_url(), - 'last_date': self.teacher.last_login}, - 'hw': [], - 'ew': [], - 'counts': {}, - 's_date': out_date_format(self.s_date, no_time=True), - 'f_date': out_date_format(self.f_date if self.f_date else date.today(), no_time=True)} - hw_expr = 0 - hw_progress = [] - student_count = [] - ex_expr = 0 - ex_progress = [] - ex_success = 0 - for i in HomeworkJ.objects.filter(**filt).order_by('date'): - if HomeworkTry.objects.filter(parent=i).exists(): - result['hw'].append(i.get_face(None)) - hw_expr += HomeworkTry.objects.filter(parent=i, expired=True).count() - if i.get_status_flag() not in ['N', 'F'] and i.parent.id not in hw_progress: hw_progress.append( - i.id) - if i.student.id not in student_count: student_count.append(i.student.id) - - for i in ExamJ.objects.filter(**filt).order_by('date'): - if ExamTry.objects.filter(parent=i).exists(): - result['ew'].append(i.get_face(None)) - ex_expr += ExamTry.objects.filter(parent=i, expired=True).count() - if i.get_status_flag() not in ['N', 'F'] and i.parent.id not in ex_progress: ex_progress.append( - i.id) - if i.student.id not in student_count: student_count.append(i.student.id) - if i.get_status_flag() == 'F': - ex_success += 1 - result['counts'] = {'hw_progress': len(hw_progress), - 'hw_work': HomeworkJ.objects.filter(**filt).count(), - 'student_count': len(student_count), - 'hw_expr': hw_expr, - 'ex_progress': len(ex_progress), - 'ex_expr': ex_expr, - 'ex_success': ex_success, - 'ex_work': ExamJ.objects.filter(**filt).count()} - sent_teacher_report(self.to.email, result) - self.sent = True - self.save() diff --git a/_utils/test_check_bill.py b/_utils/test_check_bill.py deleted file mode 100644 index c5acc87..0000000 --- a/_utils/test_check_bill.py +++ /dev/null @@ -1,60 +0,0 @@ -# coding=utf-8 -import os - -import datetime -import django -import sys -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from courses.models import CourseMap -from finance.models import Price, Bill -from access.models import User -__point = CourseMap.objects.get(token='1#6') -course = __point.course -prices = Price.objects.filter(included=__point).values_list('included__token', flat=True) -user = User.objects.get(email='t@lms.ru') -bill = Bill.objects.filter(service__included__token__in=prices, user=user, status='F') -for b in bill: - if b: - if b.service.by_time: - if b.finish_date + datetime.timedelta(days=b.service.by_time) > datetime.datetime.now(): - print '1 True' - else: - print '1 False' - else: - print '1 True' - -m_type = [''] -theme_type = 'B' -if theme_type == 'B' or theme_type == 'M': - m_type = ['B', 'E', 'P'] - -elif theme_type == 'E': - m_type = ['E', 'P'] - -elif theme_type == 'P': - m_type = ['P'] - -if m_type: - bill = Bill.objects.filter(service__included=None, service__course=course, user=user, status='F', - service__m_type__in=m_type) - if bill.exists(): - check = [] - for b in bill: - if b.service.by_time: - check.append(b) - if not check: - print '2 True' - - else: - result = False - for b in check: - if b.finish_date + datetime.timedelta(days=b.service.by_time) > datetime.datetime.now(): - result = True - if result: - print '3 True' - else: - print '4 False' -print '5 False' diff --git a/_utils/test_comment_fabric.py b/_utils/test_comment_fabric.py deleted file mode 100644 index d983433..0000000 --- a/_utils/test_comment_fabric.py +++ /dev/null @@ -1,13 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - -from courses.models import Lesson - -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -Lesson.objects.first() - diff --git a/_utils/test_diploma.py b/_utils/test_diploma.py deleted file mode 100644 index 9f8eeff..0000000 --- a/_utils/test_diploma.py +++ /dev/null @@ -1,16 +0,0 @@ -from PIL import Image, ImageDraw, ImageFont -import os - -BASE_DIR = '/var/www/projects/lms/' -PATH = os.path.join(BASE_DIR, 'img_creator/') -FONT_PATH = os.path.join(BASE_DIR, 'static/fonts/') -logo = Image.open('/var/www/projects/lms/utils/web_temp_print.png').convert('RGBA') -img = Image.new('RGBA', logo.size, (255, 255, 255, 000)) -fnt = ImageFont.truetype(os.path.join(FONT_PATH, 'Exo2-Bold-webfont.ttf'), 70) -d = ImageDraw.Draw(img) -d.text((1000, 60), 'test', font=fnt, fill=(0, 0, 0)) -out = Image.alpha_composite(logo, img) -out.show() -path = os.path.join(PATH, '{0}.png'.format('test')) -out.save(path) -f = open(path, 'r') diff --git a/_utils/translit_comments_to_bb_from_date.py b/_utils/translit_comments_to_bb_from_date.py deleted file mode 100644 index 5105f5c..0000000 --- a/_utils/translit_comments_to_bb_from_date.py +++ /dev/null @@ -1,16 +0,0 @@ -# coding=utf-8 -import datetime -import os -import django -import sys - - -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from management.models import Comment - -errors = [] -for comment in Comment.objects.filter(date__gte=datetime.datetime.strptime('08.11.2016', '%d.%m.%Y')).exclude(text=None): - comment.bbtext = comment.text - comment.save() diff --git a/_utils/web_temp_print.png b/_utils/web_temp_print.png deleted file mode 100644 index 8e81f43..0000000 Binary files a/_utils/web_temp_print.png and /dev/null differ diff --git a/_utils/welcome_users_without_password.py b/_utils/welcome_users_without_password.py deleted file mode 100644 index 488e960..0000000 --- a/_utils/welcome_users_without_password.py +++ /dev/null @@ -1,37 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from access.out_api import self_create_user -from management.letters import sent_welcome_without_password -from access.models import User -from finance.models import Price, Bill -from lms.regex import check_email - -users2 = ['pischalkina@mokselle.com'] -users = ['knez@mail.ru', 'ananelyubina@gmail.com', 'usurtees@mail.ru', 'olya_sko@mail.ru', 'recoil@mail.ru', 'lora136@mail.ru', 'sofi-sha@yandex.ru', 'avakar@inbox.ru', 'malceva1983@mail.ru', 'osagadieva@mail.ru', 'afedotovskikh@gmail.com', 'shtefanyuk@gmail.com', 'dolya@mokselle.com', 'marianna.sheff@mail.ru', 'anna.golikova@megafon.ru', 'anut93@mail.ru', 'masko_elena@mail.ru', 'davoevodova@yandex.ru', 'tryakshina87@mail.ru', 'kalugakuda@mail.ru', 'aponomarev@rambler.ru', 'wildcat.pw@gmail.com', 'valitova.linura@gmail.com', 'davydovajulia1@gmail.com', 'shemiakovamaria@yandex.ru', 'aliyaibadildina@mail.ru', 'zg@tceh.com', 'latipovaguzel@gmail.com', 'pr-sido@yandex.ru', 'abrochinam@mail.ru', 'marina.kontaurova@lge.com', 'wies@1312s.ru', 'uran_alien@mail.ru', 'nataliya.akimova47@gmail.com', 'akhmalisheva@mail.ru', 'nur2f@mail.ru', 'ainur.orazbekova@gmail.com', '7501840@bk.ru', 'demeisenova@gmail.com', 'marunova.vera@gmail.com', 'talgat.alimov@mechta.kz', 'lazarevs39@yandex.ru', 'activegrig@gmail.com', 'ivansobchenko@gmail.com'] - - -excludes = [] -count = 0 -price = Price.objects.get(id=43) - -for i in users: - if check_email(i): - count += 1 - result, user = self_create_user(i, sent_letter=False) - Bill.objects.get_or_create(service=price, user=user, status='F', manager=User.objects.get(id=2)) - print(i) - sent_welcome_without_password(user, 'Регистрация на курс Профессия PR-менеджер') - else: - excludes.append(i) - -print(count) -print('==========') -print('Не верная почта:') -for i in excludes: - print(i) diff --git a/_utils/write_interactive_key.py b/_utils/write_interactive_key.py deleted file mode 100644 index a9c4e83..0000000 --- a/_utils/write_interactive_key.py +++ /dev/null @@ -1,14 +0,0 @@ -# coding=utf-8 -import os - -import datetime -import django -import sys -sys.path.append("/var/www/projects/lms/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from access.models import gen_interactive_key, User - -for user in User.objects.all(): - user.interactive_key = gen_interactive_key(user) - user.save() diff --git a/_utils/yota.txt b/_utils/yota.txt deleted file mode 100644 index 3db4f43..0000000 --- a/_utils/yota.txt +++ /dev/null @@ -1,51 +0,0 @@ -petrova@ydarnic.ru -b2sty@yandex.ru -m.n.podkopaev@gmail.com -alivo4ka1244@yandex.ru -mamarinna@yandex.ru -felisarmis@gmail.com -pavelspetrov@ya.ru -kronos2k4@gmail.com -marketolog@webelement.ru -onoffbass@yandex.ru -str-ibz@inbox.ru -feyorz@gmail.com -alvo_05@mail.ru -pulya7@gmail.com -elena@citrus-soft.ru -kropev@rarus.ru -gulin@labizum.ru -vinjuli4ka2008@rambler.ru -enchervinskaya@gmail.com -a.nikiforov@uplab.ru -timur.shulgin@infocraft.ru -didenko@braind.agency -whysecondjuly@gmail.com -yuzik.74@gmail.com -tuning_a@mail.ru -ha@brightstudio.ru -d.pogodin@itech-group.ru -pavlov@complexsys.ru -an_b@inbox.ru -kashlatch@gmail.com -Gnatovych@gmail.com -z.ilnurri@gmail.com -annazayidova@gmail.com -skugarov@sebbia.com -a.khadeko@gmail.com -dengenich@gmail.com -deniskondrashov@yahoo.com -s.darbaidze@inostudio.com -zhurakoff@gmail.com -hip-hop-org@yandex.ru -j.tolkova@yandex.ru -yakimov.dmitriy@gmail.com -ylkin_list@mail.ru -yevseev@mail.ru -corpas@gmail.com -nitrohlorid@gmail.com -kalina531345@gmail.com -kizilov.s@gmail.com -mohov-g@yandex.ru -fkaterina82@mail.ru -dubnyak404@gmail.com diff --git a/access/access_update.py b/access/access_update.py deleted file mode 100644 index 8795f55..0000000 --- a/access/access_update.py +++ /dev/null @@ -1,77 +0,0 @@ -import os, sys -import django - -sys.path.append("../") -os.environ['PG_PORT_5432_TCP_ADDR'] = '127.0.0.1' -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from access.models import ActiveObject -from courses.models import Vertex, Lesson, Homework, Exam -from journals.models import TeacherJ, LessonJ, HomeworkJ, ExamJ -from finance.models import Bill -from django.contrib.auth import get_user_model - - -def get_first(course,): - l = Lesson.objects.filter(course=course).order_by('sort') - hw = Homework.objects.filter(course=course).order_by('sort') - e = Exam.objects.filter(course=course).order_by('sort') - try: - old_id = 'l_' + str(l[0].id) if l.exists() else ('h_' + str(hw[0].id) if hw.exists() else 'e_' + str(e[0].id)) - return Vertex.manager.get(old_id=old_id) - except IndexError: - return None - -if __name__ == '__main__': - for user in get_user_model().objects.all(): - bills = Bill.objects.filter(user=user, status='F') - if bills.exists(): - for i in bills: - try: - tj = TeacherJ.objects.get(course=i.service.course, student=user) - if tj.status == 'F': - ActiveObject.objects.create(course=i.service.course, user=user, success=True) - else: - lesson = LessonJ.objects.filter(parent__parent=tj, success=True, student=tj.student) - homework = HomeworkJ.objects.filter(parent__parent=tj, success=True, student=tj.student) - exam = ExamJ.objects.filter(parent__parent=tj, success=True, student=tj.student) - - lesson = lesson.order_by('-material__sort', '-parent__material__sort')[0] if lesson.exists() else None - homework = homework.order_by('-material__sort', '-parent__material__sort')[0] if homework.exists() else None - exam = exam.order_by('-material__sort', '-parent__material__sort')[0] if exam.exists() else None - - lesson_p = lesson.parent.material.sort if lesson else 0 - homework_p = homework.parent.material.sort + 0.5 if homework else 0 - exam_p = exam.parent.material.sort + 0.75 if exam else 0 - - obj = (lesson_p > homework_p and lesson_p > exam_p and 'l_' + str(lesson.material.id)) or \ - (homework_p > exam_p and 'h_' + str(homework.material.id)) or \ - (exam and 'e_' + str(exam.material.id)) or\ - None - - if not obj: - active_obj = get_first(i.service.course) - if active_obj: - ActiveObject.objects.create( - course=i.service.course, - user=user, - active_obj=active_obj, - ) - - else: - vertex = Vertex.manager.get(old_id=obj) - ActiveObject.objects.create( - course=i.service.course, - user=user, - active_obj=vertex.get_next() - ) - - except TeacherJ.DoesNotExist: - active_obj = get_first(i.service.course) - if active_obj: - ActiveObject.objects.create( - course=i.service.course, - user=user, - active_obj=active_obj, - ) \ No newline at end of file diff --git a/access/admin.py b/access/admin.py index 7b86a76..d056aeb 100755 --- a/access/admin.py +++ b/access/admin.py @@ -1,73 +1,7 @@ from django.contrib import admin -from access.models import User, Subscription, ActionJ, TrafSource, TrafHistory, TrafTokenHistory, Questionnaire, \ - UserRequest, UserRequestData, Document, ActiveObject, ExtraPrivilege -from django.contrib.auth.admin import Group - +from access.models import ActiveObject, ExtraPrivilege, User, Account +admin.site.register(User) +admin.site.register(Account) admin.site.register(ExtraPrivilege) admin.site.register(ActiveObject) - - -class UserAdmin(admin.ModelAdmin): - list_filter = ['in_role', 'refer', 'date_joined', 'last_time', 'status', 'customer'] - list_display = ('id', 'email', 'is_active', 'fname', 'name', 'reg_status', 'phone', 'refer', 'date_joined', 'status', ) - search_fields = ['email', 'fname', 'name', 'oname', 'id'] - - -class ActionJAdmin(admin.ModelAdmin): - list_display = ('a_type', 'place', 'date', ) - search_fields = ('student__email',) - - -class SubscriptionAdmin(admin.ModelAdmin): - list_display = ('owner', ) - - -class TrafSourceAdmin(admin.ModelAdmin): - list_display = ('url', 'live_time', 'date_start', 'token', 'on', ) - - -class TrafHistoryAdmin(admin.ModelAdmin): - list_display = ('source', 'action', 'result', 'result_description', 'date') - list_filter = ('action', 'source', 'result', 'date',) - search_fields = ('source__url', 'token') - - -class TrafTokenHistoryAdmin(admin.ModelAdmin): - list_display = ('source', 'token', 'live_time', 'date_start', 'date_end', ) - - -class QuestionnaireAdmin(admin.ModelAdmin): - list_display = ('user', 'male', 'age', 'city', 'experience', 'aim', 'fully', 'steps', ) - search_fields = ['user__email', 'user__fname', 'user__name', 'user__oname'] - list_filter = ['steps', 'fully'] - - -class DocumentAdmin(admin.ModelAdmin): - list_display = ('title', 'user', 'date', 'in_date', 'status', 'file',) - search_fields = ('user__email', 'user__id', 'user__fname', 'user__name', 'user__oname', ) - list_filter = ('title', 'in_date', 'date',) - raw_id_fields = ['user'] - - -class UserRequestAdmin(admin.ModelAdmin): - list_display = ('ip', 'user', 'count', 'date', ) - list_filter = ['date'] - search_fields = ('ip', 'user__email', 'user__fname', 'user__name', 'user__oname', 'user__id',) - - -class UserRequestDataAdmin(admin.ModelAdmin): - search_fields = ('row__ip', ) - - -admin.site.register(UserRequest, UserRequestAdmin) -admin.site.register(UserRequestData, UserRequestDataAdmin) -admin.site.register(Document, DocumentAdmin) -admin.site.register(Questionnaire, QuestionnaireAdmin) -admin.site.register(TrafTokenHistory, TrafTokenHistoryAdmin) -admin.site.register(TrafHistory, TrafHistoryAdmin) -admin.site.register(ActionJ, ActionJAdmin) -admin.site.register(TrafSource, TrafSourceAdmin) -admin.site.register(Subscription, SubscriptionAdmin) -admin.site.register(User, UserAdmin) -admin.site.unregister(Group) diff --git a/access/api.py b/access/api.py deleted file mode 100755 index 9eb678d..0000000 --- a/access/api.py +++ /dev/null @@ -1,497 +0,0 @@ -# coding=utf-8 -import datetime -from django.contrib import auth -from django.http import Http404 -from access.models import User, Subscription, sent_registration, UserRequest -from lms.decors import api_decor -from lms.regex import check_email -from lms.tools import condition_factory, check_set_password -from management.letters import sent_active_new_email, sent_good_activation, sent_accept_forgot - - -@api_decor(without_auth=True) -def search_user(request, context): - context['code'] = '0' - if request.user.is_authenticated(): - if request.GET.get('user'): - context['code'] = '1' if User.objects.filter(email=request.GET.get('user')).exists() else '0' - - return context - - -@api_decor(without_auth=False) -def find_user(request, context): - if request.user.is_authenticated() and request.user.in_role in ['T', 'S2', 'A']: - if request.GET.get('user'): - context['code'] = '1' - context['data'] = [{'str': str(user), 'ava': user.get_image_url(), 'email': user.get_email(), 'id': user.id} for user in User.objects.filter(email__icontains=request.GET['user'])] - else: - context['response'] = u'Параметры не переданы' - context['code'] = '0' - return context - else: - raise Http404 - - -@api_decor(without_auth=False) -def change_private(request, context): - if 'type' in request.POST: - request.user.private = request.POST['type'] - request.user.save() - return context - - -@api_decor(without_auth=False) -def resent_active_email(request, context): - sent_registration(request.user, title=u'Повторное письмо активации') - context['code'] = '1' - return context - - -@api_decor(without_auth=True) -def check_auth(request, context): - if request.user.is_authenticated(): - context['code'] = '0' - else: - context['code'] = '1' - - return context - - -@api_decor(without_auth=True) -def logout(request, context): - if request.user.is_authenticated(): - context['code'] = '0' - else: - context['code'] = '1' - - return context - - -@api_decor(without_auth=False) -def send_settings_data(request, context): - # Изменение данных пользователя - context['code'] = '0' - request.user.oname = request.POST['user_settings_oname'] - request.user.avatar = request.POST['avatar_code'] - request.user.city = request.POST['user_settings_city'] - if request.POST.get('user_settings_bday'): - try: - request.user.b_day = datetime.datetime.strptime(request.POST['user_settings_bday'], '%d.%m.%Y').date() - except ValueError: - context['response'] = u'Дата рождения указана в неверном формате. Пример: 18.11.1990' - return context - - if request.POST.get('user_settings_fname'): - request.user.fname = request.POST['user_settings_fname'] - else: - context['response'] = u'Укажите вашу фамилию' - return context - - if request.POST.get('user_settings_name'): - request.user.name = request.POST['user_settings_name'] - else: - context['response'] = u'Укажите ваше имя' - return context - - if request.POST.get('user_settings_phone'): - if request.user.phone != request.POST['user_settings_phone']: - request.user.back_phone = request.user.phone - request.user.phone = request.POST['user_settings_phone'] - else: - context['response'] = u'Укажите ваш телефон' - return context - - if request.POST.get('user_settings_email') and check_email(request.POST['user_settings_email']): - if request.POST['user_settings_email'].lower() != request.user.get_email(): - email = request.POST['user_settings_email'].lower() - if not User.objects.filter(email=email).exists(): - request.user.changed_email = request.POST['user_settings_email'].lower() - request.user.change_token() - sent_active_new_email(request.user) - context['response'] = u'Данные изменены. Для изменения поля email, необходимо подтвердить владение ' \ - u'им. На указанный почтовый ящик выслано письмо активации.' - else: - context['response'] = u'Пользователь с таким email уже существует' - return context - - else: - context['response'] = u'Укажите ваш email' - return context - - context['code'] = '1' - request.user.save() - return context - - -@api_decor(without_auth=False) -def get_settings_data(request, context): - # Отправка данных пользователя - context['code'] = '1' - context['data'] = { - 'short_name': request.user.get_short_name(), - 'avatar_code': request.user.avatar, - 'avatar': request.user.get_image_url(type_in='big'), - 'fname': request.user.fname, - 'name': request.user.name, - 'oname': request.user.oname, - 'phone': request.user.get_phone(), - 'email': request.user.get_email(), - 'city': request.user.city, - 'bday': '' - } - if request.user.b_day: - context['data']['bday'] = '{0}.{1}.{2}'.format(request.user.b_day.day, request.user.b_day.month, request.user.b_day.year) - - return context - - -@api_decor(without_auth=False) -def send_subscription_data(request, context): - # Сохранение выбора подписок - context['code'] = '1' - subscription = Subscription.objects.get(owner=request.user) - right_map = subscription.right_map(None) - context['data'] = [] - for i, x in right_map.items(): - if 'subscription_{0}'.format(i) in request.POST: - if not x: - subscription.set_right(i, True) - else: - if x: - subscription.set_right(i, False) - - return context - - -@api_decor(without_auth=False) -def get_subscription_data(request, context): - # Получение подписок пользователя - context['code'] = '1' - context['data'] = {} - subscription, c = Subscription.objects.get_or_create(owner=request.user) - for i, n in subscription.right_map(None).items(): - context['data'][i] = n - return context - - -@api_decor(without_auth=False) -def change_password(request, context): - # Изменение данных о профиле - context['data'] = [] - if request.POST.get('old_password'): - old_password = request.POST['old_password'] - if request.user.check_password(old_password): - if request.POST.get('password1'): - password1 = request.POST['password1'] - ps, ms = check_set_password(request.POST['password1']) - if not ps: - context['response'] = ms - context['code'] = '0' - else: - if request.POST.get('password2'): - password2 = request.POST['password2'] - if password1 == password2: - user = User.objects.get(id=request.user.id) - user.set_password(password1) - user.save() - context['response'] = u'Пароль изменен. Авторизуйтесь используя новый пароль.' - context['code'] = '1' - else: - context['response'] = u'Новые пароли не совпадают' - context['code'] = '0' - else: - context['response'] = u'Повторите введеный пароль' - context['code'] = '0' - else: - context['response'] = u'Поле нового пароля не заполнено' - context['code'] = '0' - else: - context['response'] = u'Старый пароль введен не верно' - context['code'] = '0' - else: - context['response'] = u'Поле старого пароля не заполнено' - context['code'] = '0' - return context - - -@api_decor(without_auth=False, need_keys=['id'], method='GET', check_request=True) -def get_user_role(request, context): - # Получение роли пользователя для руководителя в его профиле - # TODO: Убрать изменение ролей из профиля пользователя - if request.user.in_role == 'S' or request.user.in_role == 'A': - try: - user = User.objects.get(id=request.GET['id']) - except User.DoesNotExist: - context['code'] = '0' - else: - context['code'] = '1' - context['data'] = user.in_role - else: - raise Http404 - return context - - -@api_decor(without_auth=False, need_keys=['new_role_user_id', 'new_role_name'], method='GET', check_request=True) -def new_role(request, context): - # Присвоение роли в профиле руководителя - # TODO: Убрать присвоение - if request.user.in_role == 'S' or request.user.in_role == 'A': - try: - user = User.objects.get(id=request.GET['new_role_user_id']) - except User.DoesNotExist: - raise Http404 - else: - user.in_role = request.GET['new_role_name'] - user.save() - context['code'] = '1' - else: - raise Http404 - return context - - -@api_decor(without_auth=True) -def check_active(request, context): - # Проверка статуса активации пользователя - # Используется для доступов - if request.user.is_active and request.user.reg_status == '4': - context['code'] = '1' - else: - context['code'] = '0' - return context - - -@api_decor(without_auth=True) -def reg_step(request, context): - # Процедура активации пользователя - condition = condition_factory([ - {'condition': request.POST.get('email'), 'error': u'Не верно передан email'}, - {'condition': request.POST.get('token'), 'error': u'Не верно передан токен'}, - {'condition': request.POST.get('step'), 'error': u'Не верно передн этап'}, ]) - context['data'] = {} - if condition['code'] == '1': - try: - email = request.POST['email'].lower() - user = User.objects.get(email=email, token=request.POST['token']) - except User.DoesNotExist: - context['code'] = '0' - context['data']['message'] = u'Запрашиваемый пользователь не найден' - else: - context['code'] = '0' - if request.POST['step'] == '1': - # Проверка пароля - if request.POST.get('password1'): - if request.POST.get('password2'): - if request.POST['password1'] == request.POST['password2']: - ps, ms = check_set_password(request.POST['password1']) - if not ps: - context['data']['message'] = ms - context['data']['inputs'] = ['password1', 'password2'] - context['code'] = '0' - else: - user.set_password(request.POST['password1']) - user.reg_status = '2' - user.save() - context['code'] = '1' - else: - context['data']['message'] = u'Введеные пароли не совпадают' - context['data']['inputs'] = ['password1', 'password2'] - else: - context['data']['message'] = u'Повторите введеный пароль' - context['data']['inputs'] = ['password2'] - else: - context['data']['message'] = u'Введите пароль' - context['data']['inputs'] = ['password1'] - - return context - - elif request.POST['step'] == '2': - # Проверка Телефона - if request.POST.get('fname'): - if request.POST.get('name'): - if request.POST.get('phone'): - user.phone = request.POST['phone'] - user.name = request.POST['name'] - user.fname = request.POST['fname'] - user.city = request.POST['city'] - if request.POST.get('bday'): - try: - user.b_day = datetime.datetime.strptime(request.POST['bday'], '%d.%m.%Y').date() - except ValueError: - user.b_day = datetime.datetime.strptime(request.POST['bday'], '%d.%m.%y').date() - user.reg_status = '3' - user.save() - context['code'] = '1' - else: - context['data']['message'] = u'Введите Телефон' - context['data']['inputs'] = ['phone'] - else: - context['data']['message'] = u'Введите Имя' - context['data']['inputs'] = ['name'] - else: - context['data']['message'] = u'Введите Фамилию' - context['data']['inputs'] = ['fname'] - - elif request.POST['step'] == '3': - # Проверка фотографии - if request.POST.get('avatar_code'): - user.avatar = request.POST['avatar_code'] - user.reg_status = '4' - user.is_active = True - user.save() - user._set_to_sync() - sent_good_activation(user) - context['code'] = '1' - - else: - context['code'] = '0' - context['data']['message'] = u'Этап активации указан не верно' - else: - context['data']['message'] = condition['response'] - context['code'] = '0' - return context - - -@api_decor(without_auth=True) -def registration(request, context): - # Форма стандартногоз аведения пользователя - condition = condition_factory([ - {'condition': request.POST.get('email'), 'error': u'Вы не ввели email'}]) - - if condition['code'] == '1': - try: - email = request.POST['email'].lower() - user = User.objects.get(email=email) - except User.DoesNotExist: - if request.POST.get('password1'): - if request.POST.get('password2'): - if request.POST['password1'] == request.POST['password2']: - ps, ms = check_set_password(request.POST['password1']) - if not ps: - context['response'] = ms - context['code'] = '0' - else: - email = request.POST['email'].lower() - user = User.objects.create_user(email=email) - user.set_password(request.POST['password1']) - user.reg_status = '2' - user.save() - context['code'] = '1' - else: - context['response'] = u'Введеные пароли не совпадают' - context['code'] = '0' - else: - context['response'] = u'Повторите введеный пароль' - context['code'] = '0' - else: - context['response'] = u'Введите пароль' - context['code'] = '0' - else: - if user.is_active and user.reg_status == '4': - context['code'] = '0' - context[ - 'response'] = u'Пользователь с таким email уже существует и активен. ' \ - u'Авторизуйтесь или попробуйте восстановить пароль.' - else: - context['code'] = '0' - sent_registration(user, title=u'Повторное письмо активации') - context[ - 'response'] = u'Пользователь с таким email уже существует, но не был активирован. ' \ - u'Вам было выслано повторное письмо активации.' - else: - context['response'] = condition['response'] - context['code'] = '0' - return context - - -@api_decor(without_auth=True) -def auth_in(request, context): - # Авторизация - condition = condition_factory([ - {'condition': request.POST.get('email'), 'error': u'Вы не ввели email'}, - {'condition': request.POST.get('password'), 'error': u'Вы не ввели пароль'} - ]) - if condition['code'] == '1': - email = request.POST['email'].lower() - user = auth.authenticate(email=email, password=request.POST.get('password')) - - if user is not None: - if user.block: - context['code'] = '0' - context['data'] = [] - context['data']['ERROR'] = 'BLOCK' - context['data']['data'] = UserRequest.objects.filter(user__email=email).count() - - else: - context['code'] = '1' - auth.login(request, user) - user.set_request_data(request) - - elif user is None: - context['response'] = u'По введенным данным пользователь не найден' - context['code'] = '0' - - else: - context['response'] = u"Не верные данные. Повторите попытку" - context['code'] = '0' - else: - context['response'] = condition['response'] - context['code'] = '0' - return context - - -@api_decor(without_auth=True) -def auth_from_admin(request, context): - # Авторизация - condition = condition_factory([ - {'condition': request.POST.get('email'), 'error': u'Вы не ввели email'}, - {'condition': request.POST.get('password'), 'error': u'Вы не ввели пароль'}, - {'condition': request.POST.get('token'), 'error': u'Вы не ввели свой токен'}, - {'condition': request.user.is_staff and request.user.is_admin, 'error': u'У вас нет прав'} - ]) - if condition['code'] == '1': - email = request.POST['email'].lower() - user = auth.authenticate(email=email, - password=request.POST.get('password'), - token=request.POST.get('token')) - - if user is not None: - context['code'] = '1' - auth.login(request, user) - request.user.change_token() - - elif user is None: - context['response'] = u'По введенным данным пользователь не найден' - context['code'] = '0' - - else: - context['response'] = u"Не верные данные. Повторите попытку" - context['code'] = '0' - else: - context['response'] = condition['response'] - context['code'] = '0' - return context - - -@api_decor(without_auth=True) -def forgot(request, context): - # Форма восстановления пароля - condition = condition_factory([ - {'condition': request.GET.get('email'), 'error': u'Email не указан'}, - {'condition': check_email(request.GET['email']), 'error': u'Email введен не верно'} - ]) - if condition['code'] == '1': - try: - email = request.GET['email'].lower() - user = User.objects.get(email=email) - except User.DoesNotExist: - context['response'] = u'Пользователя с таким email не существует.' - context['code'] = '0' - else: - user.change_token() - sent_accept_forgot(user) - context['code'] = '1' - else: - context['response'] = condition['response'] - context['code'] = '0' - return context diff --git a/access/forms.py b/access/forms.py deleted file mode 100755 index 4d28d1a..0000000 --- a/access/forms.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- -from access.models import User -from django.contrib.auth.forms import ReadOnlyPasswordHashField -from django import forms - - -class UserCreationForm(forms.ModelForm): - password1 = forms.CharField(label='Password', widget=forms.PasswordInput) - password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput) - - class Meta: - model = User - fields = '__all__' - - def clean_password2(self): - password1 = self.cleaned_data.get("password1") - password2 = self.cleaned_data.get("password2") - if password1 and password2 and password1 != password2: - raise forms.ValidationError("Passwords don't match") - return password2 - - def save(self, commit=True): - user = super(UserCreationForm, self).save(commit=False) - user.set_password(self.cleaned_data["password1"]) - if commit: - user.save() - return user - - -class UserChangeForm(forms.ModelForm): - password = ReadOnlyPasswordHashField() - - class Meta: - model = User - fields = '__all__' - - def clean_password(self): - return self.initial["password"] \ No newline at end of file diff --git a/access/init_group.py b/access/init_group.py new file mode 100644 index 0000000..d6a6b22 --- /dev/null +++ b/access/init_group.py @@ -0,0 +1,12 @@ +import os, sys, django + +sys.path.append("../") +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") +django.setup() + + +from django.contrib.auth.models import Group + +if __name__ == '__main__': + Group.objects.get_or_create(name='students') + Group.objects.get_or_create(name='teachers') \ No newline at end of file diff --git a/access/migrations/0001_initial.py b/access/migrations/0001_initial.py old mode 100755 new mode 100644 index d8faae9..0d274e8 --- a/access/migrations/0001_initial.py +++ b/access/migrations/0001_initial.py @@ -1,90 +1,55 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-03-18 16:46 -from __future__ import unicode_literals - -import access.models -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='User', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('password', models.CharField(max_length=128, verbose_name='password')), - ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), - ('deactivate', models.BooleanField(default=False, verbose_name='\u0423\u0432\u043e\u043b\u0438\u0442\u044c')), - ('email', models.EmailField(blank=True, db_index=True, editable=False, max_length=255, unique=True, verbose_name=b'email')), - ('changed_email', models.EmailField(blank=True, max_length=254, null=True, verbose_name='\u042f\u0449\u0438\u043a \u043d\u0430 \u0437\u0430\u043c\u0435\u043d\u0443')), - ('phone', models.CharField(default=b'', max_length=255, verbose_name='\u0422\u0435\u043b\u0435\u0444\u043e\u043d')), - ('back_phone', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041f\u0440\u0435\u0434\u0438\u0434\u0443\u0449\u0438\u0439 \u0442\u0435\u043b\u0435\u0444\u043e\u043d')), - ('status', models.CharField(choices=[(b'ON', b'on-line'), (b'OFF', b'off-line')], default=b'ON', max_length=9)), - ('in_role', models.CharField(choices=[(b'U', '\u0421\u0442\u0443\u0434\u0435\u043d\u0442 \u0448\u043a\u043e\u043b\u044b'), (b'T', '\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c'), (b'M', '\u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440'), (b'S', '\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c'), (b'S2', '\u041e\u043a\u043e \u0441\u0430\u0443\u0440\u043e\u043d\u0430'), (b'A', '\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440')], default=b'U', max_length=2, verbose_name='\u0420\u043e\u043b\u044c')), - ('city', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0413\u043e\u0440\u043e\u0434')), - ('b_day', models.DateField(blank=True, null=True, verbose_name='\u0414\u0435\u043d\u044c \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f')), - ('token', models.CharField(blank=True, default=b'', max_length=255)), - ('activate_time', models.DateTimeField(default=access.models.get_activate_time, verbose_name='\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e')), - ('reg_status', models.CharField(choices=[(b'1', b'\xd0\x9f\xd0\xb0\xd1\x80\xd0\xbe\xd0\xbb\xd1\x8c'), (b'2', b'\xd0\x9e \xd1\x81\xd0\xb5\xd0\xb1\xd0\xb5'), (b'3', b'\xd0\xa4\xd0\xbe\xd1\x82\xd0\xbe'), (b'4', b'\xd0\x97\xd0\xb0\xd0\xba\xd0\xbe\xd0\xbd\xd1\x87\xd0\xb5\xd0\xbd\xd0\xb0')], default=b'1', max_length=1, verbose_name='\u0421\u0442\u0430\u0442\u0443\u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438')), - ('is_active', models.BooleanField(default=False)), - ('is_admin', models.BooleanField(default=False)), - ('is_staff', models.BooleanField(default=False)), - ('avatar', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041a\u043b\u044e\u0447 \u0430\u0432\u0430\u0442\u0430\u0440\u0430')), - ('in_avatar', models.ImageField(blank=True, editable=False, null=True, upload_to=b'', verbose_name='\u041d\u0430\u0448 \u0430\u0432\u0430\u0442\u0430\u0440')), - ('fname', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0424\u0430\u043c\u0438\u043b\u0438\u044f')), - ('name', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0418\u043c\u044f')), - ('oname', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041e\u0442\u0447\u0435\u0441\u0442\u0432\u043e')), - ('skype', models.CharField(blank=True, default=b'', max_length=300)), - ('facebook', models.CharField(blank=True, default=b'', max_length=255)), - ('vk', models.CharField(blank=True, default=b'', max_length=255)), - ('linkedin', models.CharField(blank=True, default=b'', max_length=255)), - ('odnoklassniki', models.CharField(blank=True, default=b'', max_length=255)), - ('date_joined', models.DateTimeField(default=datetime.datetime.now)), - ], - options={ - 'verbose_name': '\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f', - 'verbose_name_plural': '\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438', - }, - ), - migrations.CreateModel( - name='ActionJ', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('a_type', models.CharField(choices=[(b'B', b'b-default'), (b'P', b'b-primary'), (b'S', b'b-success'), (b'I', b'b-info'), (b'W', b'b-warning'), (b'D', b'b-danger')], default=b'B', max_length=1, verbose_name='\u0422\u0438\u043f \u0441\u043e\u0431\u044b\u0442\u0438\u044f')), - ('place', models.CharField(max_length=100, verbose_name='\u041c\u0435\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f')), - ('date', models.DateTimeField(default=django.utils.timezone.now, verbose_name='\u0412\u0440\u0435\u043c\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f')), - ('text', models.TextField(verbose_name='\u0422\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f')), - ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='\u0421\u0442\u0443\u0434\u0435\u043d\u0442')), - ], - options={ - 'verbose_name': '\u0416\u0443\u0440\u043d\u0430\u043b \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438', - 'verbose_name_plural': '\u0416\u0443\u0440\u043d\u0430\u043b\u044b \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0435\u0439', - }, - ), - migrations.CreateModel( - name='Subscription', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('news', models.BooleanField(default=True, verbose_name='\u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043d\u0430 \u043d\u043e\u0432\u043e\u0441\u0442\u0438')), - ('teacher', models.BooleanField(default=True, verbose_name='\u041e\u0442\u0432\u0435\u0442\u044b \u043f\u0440\u0435\u043f\u043e\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044f')), - ('new_comments', models.BooleanField(default=True, verbose_name='\u041e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438')), - ('send_sms', models.BooleanField(default=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c sms')), - ('courses', models.BooleanField(default=True, verbose_name='\u041d\u043e\u0432\u044b\u0435 \u043a\u0443\u0440\u0441\u044b')), - ('owner', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='rights_owner', to=settings.AUTH_USER_MODEL, verbose_name='\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446')), - ], - options={ - 'verbose_name': '\u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0430', - 'verbose_name_plural': '\u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0438', - }, - ), - ] +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2017-10-13 11:18 +from __future__ import unicode_literals + +import access.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='User', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('password', models.CharField(max_length=128, verbose_name='password')), + ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), + ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), + ('email', models.EmailField(max_length=254, unique=True, verbose_name='email address')), + ('first_name', models.CharField(blank=True, default='Guest', max_length=30, verbose_name='first name')), + ('last_name', models.CharField(blank=True, max_length=30, verbose_name='last name')), + ('date_joined', models.DateTimeField(auto_now_add=True, verbose_name='date joined')), + ('is_staff', models.BooleanField(default=False, help_text='Определяет разрешение пользователя на вход в административную часть.', verbose_name='флаг персонала')), + ('is_active', models.BooleanField(default=False, help_text='Определяет активен ли пользователь в системе. Снимите флаг, вместо удаления пользователя.', verbose_name='активен')), + ('photo', models.ImageField(blank=True, default='user/photo/default_avatar.png', null=True, upload_to='user/photo/')), + ('phone', models.CharField(blank=True, max_length=15)), + ], + options={ + 'verbose_name': 'user', + 'verbose_name_plural': 'users', + }, + managers=[ + ('objects', access.models.CustomUserManager()), + ], + ), + migrations.CreateModel( + name='ActiveObject', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('success', models.BooleanField(default=False, verbose_name='Завершён ли курс')), + ], + ), + migrations.CreateModel( + name='ExtraPrivilege', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('is_done', models.BooleanField(default=False, verbose_name='Выполнено?')), + ], + ), + ] diff --git a/access/migrations/0002_auto_20160405_2045.py b/access/migrations/0002_auto_20160405_2045.py deleted file mode 100755 index c7c1f13..0000000 --- a/access/migrations/0002_auto_20160405_2045.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-04-05 20:45 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='in_role', - field=models.CharField(choices=[(b'U', '\u0421\u0442\u0443\u0434\u0435\u043d\u0442 \u0448\u043a\u043e\u043b\u044b'), (b'T', '\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c'), (b'M', '\u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440'), (b'S', '\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c'), (b'S2', '\u041e\u043a\u043e \u0441\u0430\u0443\u0440\u043e\u043d\u0430'), (b'A', '\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440'), (b'Ts', '\u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c')], default=b'U', max_length=2, verbose_name='\u0420\u043e\u043b\u044c'), - ), - ] diff --git a/access/migrations/0003_account.py b/access/migrations/0003_account.py new file mode 100644 index 0000000..bee2dfd --- /dev/null +++ b/access/migrations/0003_account.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2017-10-13 11:56 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('access', '0002_auto_20171013_1118'), + ] + + operations = [ + migrations.CreateModel( + name='Account', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('b_day', models.DateTimeField(blank=True, null=True)), + ('city', models.CharField(max_length=63, null=True)), + ('gender', models.SmallIntegerField(choices=[(2, 'female'), (1, 'male'), (0, 'undefined')], default=0)), + ('owner', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/access/migrations/0003_user_delay.py b/access/migrations/0003_user_delay.py deleted file mode 100755 index 8d7e759..0000000 --- a/access/migrations/0003_user_delay.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-12 21:45 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0002_auto_20160405_2045'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='delay', - field=models.BooleanField(default=False, verbose_name='\u041c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438'), - ), - ] diff --git a/access/migrations/0004_auto_20160412_2152.py b/access/migrations/0004_auto_20160412_2152.py deleted file mode 100755 index bb0ce33..0000000 --- a/access/migrations/0004_auto_20160412_2152.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-12 21:52 -from __future__ import unicode_literals - -from django.db import migrations, models -import redactor.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0003_user_delay'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='delay_description', - field=redactor.fields.RedactorField(blank=True, verbose_name='\u041f\u043e\u0432\u043e\u0434 \u043f\u0440\u043e\u0441\u0440\u043e\u0447\u043a\u0438'), - ), - migrations.AlterField( - model_name='user', - name='delay', - field=models.BooleanField(default=False, help_text='\u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u043c\u0438', verbose_name='\u041c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438'), - ), - ] diff --git a/access/migrations/0004_auto_20171013_1200.py b/access/migrations/0004_auto_20171013_1200.py new file mode 100644 index 0000000..855a539 --- /dev/null +++ b/access/migrations/0004_auto_20171013_1200.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2017-10-13 12:00 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('access', '0003_account'), + ] + + operations = [ + migrations.AlterField( + model_name='account', + name='b_day', + field=models.DateField(blank=True, null=True), + ), + migrations.AlterField( + model_name='account', + name='gender', + field=models.SmallIntegerField(choices=[(0, 'undefined'), (1, 'male'), (2, 'female')], default=0), + ), + ] diff --git a/access/migrations/0005_auto_20160414_1527.py b/access/migrations/0005_auto_20160414_1527.py deleted file mode 100755 index 84149ec..0000000 --- a/access/migrations/0005_auto_20160414_1527.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-14 15:27 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0004_auto_20160412_2152'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_description', - field=models.TextField(blank=True, verbose_name='\u041f\u043e\u0432\u043e\u0434 \u043f\u0440\u043e\u0441\u0440\u043e\u0447\u043a\u0438'), - ), - ] diff --git a/access/migrations/0005_auto_20171013_1222.py b/access/migrations/0005_auto_20171013_1222.py new file mode 100644 index 0000000..d1cc937 --- /dev/null +++ b/access/migrations/0005_auto_20171013_1222.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2017-10-13 12:22 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('access', '0004_auto_20171013_1200'), + ] + + operations = [ + migrations.RemoveField( + model_name='user', + name='phone', + ), + migrations.RemoveField( + model_name='user', + name='photo', + ), + migrations.AddField( + model_name='account', + name='phone', + field=models.CharField(blank=True, max_length=15), + ), + migrations.AddField( + model_name='account', + name='photo', + field=models.ImageField(blank=True, default='user/photo/default_avatar.png', null=True, upload_to='user/photo/'), + ), + migrations.AlterField( + model_name='account', + name='gender', + field=models.SmallIntegerField(choices=[(1, 'male'), (0, 'undefined'), (2, 'female')], default=0), + ), + ] diff --git a/access/migrations/0006_auto_20171013_1242.py b/access/migrations/0006_auto_20171013_1242.py new file mode 100644 index 0000000..22543db --- /dev/null +++ b/access/migrations/0006_auto_20171013_1242.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2017-10-13 12:42 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('access', '0005_auto_20171013_1222'), + ] + + operations = [ + migrations.AddField( + model_name='user', + name='is_blocked', + field=models.BooleanField(default=False, help_text='Определяет заблокирован ли пользователь. Поставьте флаг, если знаете, что это нехороший человек.', verbose_name='заблочен'), + ), + migrations.AlterField( + model_name='account', + name='gender', + field=models.SmallIntegerField(choices=[(2, 'female'), (0, 'undefined'), (1, 'male')], default=0), + ), + ] diff --git a/access/migrations/0006_user_delay_date.py b/access/migrations/0006_user_delay_date.py deleted file mode 100755 index a5f18be..0000000 --- a/access/migrations/0006_user_delay_date.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-14 15:42 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0005_auto_20160414_1527'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='delay_date', - field=models.TextField(blank=True, default=datetime.datetime(2016, 4, 14, 15, 42, 6, 457603), verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0007_auto_20160414_1543.py b/access/migrations/0007_auto_20160414_1543.py deleted file mode 100755 index f828383..0000000 --- a/access/migrations/0007_auto_20160414_1543.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-14 15:43 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0006_user_delay_date'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.TextField(blank=True, default=datetime.datetime(2016, 4, 14, 15, 43, 33, 80232), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0007_auto_20171013_1247.py b/access/migrations/0007_auto_20171013_1247.py new file mode 100644 index 0000000..51d0a56 --- /dev/null +++ b/access/migrations/0007_auto_20171013_1247.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2017-10-13 12:47 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('access', '0006_auto_20171013_1242'), + ] + + operations = [ + migrations.CreateModel( + name='Invite', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('hash', models.CharField(default='ukCbBjPYGTGLOGs', max_length=15)), + ('owner', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.AlterField( + model_name='account', + name='gender', + field=models.SmallIntegerField(choices=[(2, 'female'), (1, 'male'), (0, 'undefined')], default=0), + ), + ] diff --git a/access/migrations/0008_auto_20160414_1547.py b/access/migrations/0008_auto_20160414_1547.py deleted file mode 100755 index dc1ad3b..0000000 --- a/access/migrations/0008_auto_20160414_1547.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-14 15:47 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0007_auto_20160414_1543'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 14, 15, 47, 18, 142514), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0009_auto_20160414_1941.py b/access/migrations/0009_auto_20160414_1941.py deleted file mode 100755 index caaba9d..0000000 --- a/access/migrations/0009_auto_20160414_1941.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-14 19:41 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0008_auto_20160414_1547'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 14, 19, 41, 21, 863845), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0010_auto_20160414_1944.py b/access/migrations/0010_auto_20160414_1944.py deleted file mode 100755 index 0f1fab0..0000000 --- a/access/migrations/0010_auto_20160414_1944.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-14 19:44 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0009_auto_20160414_1941'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 14, 19, 44, 42, 129160), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0011_auto_20160420_1749.py b/access/migrations/0011_auto_20160420_1749.py deleted file mode 100755 index 873ea53..0000000 --- a/access/migrations/0011_auto_20160420_1749.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-20 17:49 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0010_auto_20160414_1944'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 20, 17, 49, 55, 401859), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0012_auto_20160420_1819.py b/access/migrations/0012_auto_20160420_1819.py deleted file mode 100755 index 3d9bdec..0000000 --- a/access/migrations/0012_auto_20160420_1819.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-20 18:19 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0011_auto_20160420_1749'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 20, 18, 19, 6, 238659), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0013_auto_20160421_1808.py b/access/migrations/0013_auto_20160421_1808.py deleted file mode 100755 index 720be78..0000000 --- a/access/migrations/0013_auto_20160421_1808.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-21 18:08 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0012_auto_20160420_1819'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='interactive_key', - field=models.CharField(blank=True, max_length=255, verbose_name='\u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u044b\u0439 \u043a\u043b\u044e\u0447'), - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 21, 18, 8, 50, 535390), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0014_auto_20160421_1824.py b/access/migrations/0014_auto_20160421_1824.py deleted file mode 100755 index 72cd100..0000000 --- a/access/migrations/0014_auto_20160421_1824.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-21 18:24 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0013_auto_20160421_1808'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 21, 18, 24, 46, 904871), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0015_auto_20160421_1829.py b/access/migrations/0015_auto_20160421_1829.py deleted file mode 100755 index cbf25b4..0000000 --- a/access/migrations/0015_auto_20160421_1829.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-21 18:29 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0014_auto_20160421_1824'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 21, 18, 29, 23, 185173), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0016_auto_20160421_2009.py b/access/migrations/0016_auto_20160421_2009.py deleted file mode 100755 index eb13ff7..0000000 --- a/access/migrations/0016_auto_20160421_2009.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-21 20:09 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0015_auto_20160421_1829'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='private', - field=models.CharField(choices=[(b'A', b'\xd0\x92\xd1\x81\xd0\xb5\xd0\xbc\xd1\x83 \xd0\xb8\xd0\xbd\xd1\x82\xd0\xb5\xd1\x80\xd0\xbd\xd0\xb5\xd1\x82\xd1\x83'), (b'U', b'\xd0\xa2\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xba\xd0\xbe \xd0\xbf\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xb5\xd0\xbb\xd1\x8f\xd0\xbc lms'), (b'L', b'\xd0\x9f\xd0\xbe \xd0\xbf\xd1\x80\xd1\x8f\xd0\xbc\xd0\xbe\xd0\xb9 \xd1\x81\xd1\x81\xd1\x8b\xd0\xbb\xd0\xba\xd0\xb5'), (b'B', b'\xd0\xa2\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xba\xd0\xbe \xd0\xbc\xd0\xbd\xd0\xb5')], default=b'A', max_length=1, verbose_name='\u041f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044f'), - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 21, 20, 9, 41, 221779), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0017_auto_20160421_2135.py b/access/migrations/0017_auto_20160421_2135.py deleted file mode 100755 index 9c57c09..0000000 --- a/access/migrations/0017_auto_20160421_2135.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-21 21:35 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0016_auto_20160421_2009'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='last_time', - field=models.DateTimeField(default=datetime.datetime.now, verbose_name='\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c'), - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 21, 21, 35, 2, 761309), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0018_auto_20160422_1555.py b/access/migrations/0018_auto_20160422_1555.py deleted file mode 100755 index 9269c37..0000000 --- a/access/migrations/0018_auto_20160422_1555.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-22 15:55 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0017_auto_20160421_2135'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='unique_role', - field=models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u043e\u043b\u044c'), - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 22, 15, 55, 55, 944230), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0019_auto_20160424_1646.py b/access/migrations/0019_auto_20160424_1646.py deleted file mode 100755 index dada5e7..0000000 --- a/access/migrations/0019_auto_20160424_1646.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-04-24 16:46 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0018_auto_20160422_1555'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='customer', - field=models.BooleanField(default=False, verbose_name='\u041f\u043e\u043a\u0443\u043f\u0430\u0442\u0435\u043b\u044c'), - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 4, 24, 16, 46, 31, 25686), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0020_auto_20160506_1303.py b/access/migrations/0020_auto_20160506_1303.py deleted file mode 100755 index 188b3f3..0000000 --- a/access/migrations/0020_auto_20160506_1303.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-05-06 13:03 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0019_auto_20160424_1646'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 6, 13, 3, 19, 582728), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0021_auto_20160509_1331.py b/access/migrations/0021_auto_20160509_1331.py deleted file mode 100755 index a86c891..0000000 --- a/access/migrations/0021_auto_20160509_1331.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-05-09 13:31 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0020_auto_20160506_1303'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='refer', - field=models.CharField(choices=[(b'S', b'\xd0\xa1\xd0\xb0\xd0\xbc \xd0\xb7\xd0\xb0\xd1\x80\xd0\xb5\xd0\xb3\xd0\xb8\xd1\x81\xd1\x82\xd0\xb8\xd1\x80\xd0\xbe\xd0\xb2\xd0\xb0\xd0\xbb\xd1\x81\xd1\x8f'), (b'B', b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xbb\xd0\xb5\xd1\x87\xd0\xb5\xd0\xbd')], default=b'S', max_length=1, null=True, verbose_name='\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a'), - ), - migrations.AddField( - model_name='user', - name='refer_source', - field=models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f'), - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 9, 13, 31, 31, 19346), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0022_auto_20160509_1401.py b/access/migrations/0022_auto_20160509_1401.py deleted file mode 100755 index 549c467..0000000 --- a/access/migrations/0022_auto_20160509_1401.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-05-09 14:01 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0021_auto_20160509_1331'), - ] - - operations = [ - migrations.CreateModel( - name='TrafSource', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('on', models.BooleanField(default=True, verbose_name='\u0410\u0442\u0438\u0432\u0435\u043d')), - ('url', models.URLField(verbose_name='\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0442\u0440\u0430\u0444\u0438\u043a\u0430')), - ('token', models.CharField(max_length=255, verbose_name='\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430')), - ('live_time', models.IntegerField(blank=True, verbose_name='\u0412\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u0442\u043e\u043a\u0435\u043d\u0430')), - ('date_start', models.DateTimeField(default=datetime.datetime.now, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430')), - ], - options={ - 'verbose_name': '\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0442\u0440\u0430\u0444\u0438\u043a\u0430', - 'verbose_name_plural': '\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0442\u0440\u0430\u0444\u0438\u043a\u0430', - }, - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 9, 14, 1, 37, 826573), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - migrations.AlterField( - model_name='user', - name='refer', - field=models.CharField(choices=[(b'S', b'\xd0\x9e\xd1\x80\xd0\xb3\xd0\xb0\xd0\xbd\xd0\xb8\xd1\x87\xd0\xbd\xd0\xbe'), (b'B', b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xbb\xd0\xb5\xd1\x87\xd0\xb5\xd0\xbd')], default=b'S', max_length=1, null=True, verbose_name='\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a'), - ), - ] diff --git a/access/migrations/0023_auto_20160509_1408.py b/access/migrations/0023_auto_20160509_1408.py deleted file mode 100755 index 551c3cb..0000000 --- a/access/migrations/0023_auto_20160509_1408.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-05-09 14:08 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0022_auto_20160509_1401'), - ] - - operations = [ - migrations.CreateModel( - name='TrafHistory', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('action', models.CharField(choices=[(b'G', b'\xd0\x9f\xd0\xbe\xd0\xbb\xd1\x83\xd1\x87\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd1\x85'), (b'C', b'\xd0\xa1\xd0\xbe\xd0\xb7\xd0\xb4\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xbf\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xb5\xd0\xbb\xd1\x8f'), (b'O', b'\xd0\xa1\xd0\xbe\xd0\xb7\xd0\xb4\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5 \xd1\x81\xd1\x87\xd0\xb5\xd1\x82\xd0\xb0')], max_length=1, verbose_name='\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435')), - ('data', models.TextField(verbose_name='\u0414\u0430\u043d\u043d\u044b\u0435 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435')), - ('result', models.BooleanField(default=False, verbose_name='\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430')), - ('result_description', models.CharField(blank=True, max_length=255, verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430')), - ('date', models.DateTimeField(default=datetime.datetime.now, verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f')), - ('source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='access.TrafSource', verbose_name='\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0430')), - ], - options={ - 'verbose_name': '\u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430', - 'verbose_name_plural': '\u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432', - }, - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 9, 14, 8, 4, 599702), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0024_auto_20160509_1537.py b/access/migrations/0024_auto_20160509_1537.py deleted file mode 100755 index b3b76fa..0000000 --- a/access/migrations/0024_auto_20160509_1537.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-05-09 15:37 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0023_auto_20160509_1408'), - ] - - operations = [ - migrations.CreateModel( - name='TrafTokenHistory', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('token', models.CharField(editable=False, max_length=255, verbose_name='\u0422\u043e\u043a\u0435\u043d')), - ('live_time', models.IntegerField(editable=False, help_text='\u0412 \u0447\u0430\u0441\u0430\u0445', verbose_name='\u0412\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438')), - ('date_start', models.DateTimeField(editable=False, verbose_name='\u0414\u0430\u0442\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0442\u043e\u043a\u0435\u043d\u0430')), - ('date_end', models.DateTimeField(editable=False, verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f')), - ], - options={ - 'verbose_name': '\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0441\u043c\u0435\u043d\u044b \u0442\u043e\u043a\u0435\u043d\u0430', - 'verbose_name_plural': '\u0418\u0441\u0442\u043e\u0440\u0438\u0438 \u0441\u043c\u0435\u043d\u044b \u0442\u043e\u043a\u0435\u043d\u043e\u0432', - }, - ), - migrations.AddField( - model_name='trafhistory', - name='token', - field=models.CharField(max_length=255, null=True, verbose_name='\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0442\u043e\u043a\u0435\u043d'), - ), - migrations.AddField( - model_name='trafsource', - name='token_start', - field=models.DateTimeField(editable=False, null=True, verbose_name='\u0422\u043e\u0447\u043a\u0430 \u043e\u0442\u0441\u0447\u0435\u0442\u0430 \u0436\u0438\u0437\u043d\u0438 \u0442\u043e\u043a\u0435\u043d\u0430'), - ), - migrations.AlterField( - model_name='trafsource', - name='live_time', - field=models.IntegerField(blank=True, help_text='\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0447\u0430\u0441\u0430\u0445. \u043f\u0443\u0441\u0442\u043e\u0435 \u043f\u043e\u043b\u0435 - \u043f\u043e\u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e', verbose_name='\u0412\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u0442\u043e\u043a\u0435\u043d\u0430'), - ), - migrations.AlterField( - model_name='trafsource', - name='token', - field=models.CharField(editable=False, max_length=255, verbose_name='\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430'), - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 9, 15, 37, 34, 495507), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - migrations.AddField( - model_name='traftokenhistory', - name='sources', - field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='access.TrafSource', verbose_name='\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a'), - ), - ] diff --git a/access/migrations/0025_auto_20160509_1539.py b/access/migrations/0025_auto_20160509_1539.py deleted file mode 100755 index 51cd29a..0000000 --- a/access/migrations/0025_auto_20160509_1539.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-05-09 15:39 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0024_auto_20160509_1537'), - ] - - operations = [ - migrations.RenameField( - model_name='traftokenhistory', - old_name='sources', - new_name='source', - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 9, 15, 39, 30, 69095), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0026_auto_20160509_1803.py b/access/migrations/0026_auto_20160509_1803.py deleted file mode 100755 index 2e0848a..0000000 --- a/access/migrations/0026_auto_20160509_1803.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-05-09 18:03 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0025_auto_20160509_1539'), - ] - - operations = [ - migrations.AlterField( - model_name='trafsource', - name='live_time', - field=models.IntegerField(blank=True, help_text='\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0447\u0430\u0441\u0430\u0445. \u043f\u0443\u0441\u0442\u043e\u0435 \u043f\u043e\u043b\u0435 - \u043f\u043e\u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e', null=True, verbose_name='\u0412\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u0442\u043e\u043a\u0435\u043d\u0430'), - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 9, 18, 3, 57, 586863), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0027_auto_20160510_1823.py b/access/migrations/0027_auto_20160510_1823.py deleted file mode 100755 index 4b10ad4..0000000 --- a/access/migrations/0027_auto_20160510_1823.py +++ /dev/null @@ -1,46 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-05-10 18:23 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0026_auto_20160509_1803'), - ] - - operations = [ - migrations.CreateModel( - name='Questionnaire', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('fully', models.CharField(choices=[(b'1', b'\xd0\xa4\xd0\xbb\xd0\xb0\xd0\xb3\xd0\xb8'), (b'2', b'\xd0\xa1\xd0\xb2\xd0\xbe\xd0\xb1\xd0\xbe\xd0\xb4\xd0\xbd\xd1\x8b\xd0\xb9 \xd0\xbe\xd1\x82\xd0\xb2\xd0\xb5\xd1\x82'), (b'3', b'\xd0\x97\xd0\xb0\xd0\xb2\xd0\xb5\xd1\x80\xd1\x88\xd0\xb5\xd0\xbd\xd0\xbe')], default=1, max_length=1, verbose_name='\u0421\u0442\u0430\u0434\u0438\u044f')), - ('steps', models.IntegerField(default=0, help_text='\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043a\u0430\u0437\u043e\u0432 \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f', verbose_name='\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043a\u0430\u0437\u043e\u0432')), - ('male', models.CharField(blank=True, choices=[(b'M', b'\xd0\x9c\xd1\x83\xd0\xb6\xd1\x87\xd0\xb8\xd0\xbd\xd0\xb0'), (b'W', b'\xd0\x96\xd0\xb5\xd0\xbd\xd1\x89\xd0\xb8\xd0\xbd\xd0\xb0')], max_length=1, null=True, verbose_name='\u041f\u043e\u043b')), - ('city', models.CharField(blank=True, max_length=255, null=True, verbose_name='\u0413\u043e\u0440\u043e\u0434')), - ('experience', models.CharField(blank=True, choices=[(b'1', b'\xd0\xa2\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xba\xd0\xbe \xd0\xbd\xd0\xb0\xd1\x87\xd0\xb8\xd0\xbd\xd0\xb0\xd1\x8e'), (b'2', b'\xd0\x94\xd0\xb0, \xd0\xbc\xd0\xb5\xd0\xbd\xd0\xb5\xd0\xb5 \xd0\xb3\xd0\xbe\xd0\xb4\xd0\xb0'), (b'3', b'\xd0\x94\xd0\xb0, 1-2 \xd0\xb3\xd0\xbe\xd0\xb4\xd0\xb0'), (b'4', b'\xd0\x94\xd0\xb0, \xd0\xb1\xd0\xbe\xd0\xbb\xd0\xb5\xd0\xb5 2 \xd0\xbb\xd0\xb5\xd1\x82')], max_length=1, null=True, verbose_name='\u041e\u043f\u044b\u0442')), - ('aim', models.CharField(blank=True, choices=[(b'1', b'\xd0\x94\xd0\xb0, \xd0\xb2 \xd0\xbe\xd1\x84\xd0\xb8\xd1\x81\xd0\xb5'), (b'2', b'\xd0\x94\xd0\xb0, \xd1\x81\xd0\xb2\xd0\xbe\xd0\xb9 \xd0\xbf\xd1\x80\xd0\xbe\xd0\xb5\xd0\xba\xd1\x82'), (b'3', b'\xd0\x94\xd0\xb0, \xd0\xbd\xd0\xb0 \xd1\x84\xd1\x80\xd0\xb8\xd0\xbb\xd0\xb0\xd0\xbd\xd1\x81\xd0\xb5'), (b'4', b'\xd0\x9d\xd0\xb5\xd1\x82, \xd0\xb8\xd0\xb7\xd1\x83\xd1\x87\xd0\xb0\xd1\x8e \xd0\xb4\xd0\xbb\xd1\x8f \xd1\x81\xd0\xb5\xd0\xb1\xd1\x8f')], max_length=1, null=True, verbose_name='\u0426\u0435\u043b\u044c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f')), - ('age', models.CharField(blank=True, choices=[(b'1', b'\xd0\xb4\xd0\xbe 18'), (b'2', b'18-25'), (b'3', b'25-30'), (b'4', b'30-40'), (b'5', b'\xd0\xb1\xd0\xbe\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 40')], max_length=1, null=True, verbose_name='\u0412\u043e\u0437\u0440\u0430\u0441\u0442')), - ('description', models.TextField(blank=True, verbose_name='\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u044b \u043e\u0442\u0432\u0435\u0442')), - ], - options={ - 'verbose_name': '\u0410\u043a\u0435\u0442\u0430', - 'verbose_name_plural': '\u0410\u043d\u043a\u0435\u0442\u044b', - }, - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 10, 18, 23, 39, 577802), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - migrations.AddField( - model_name='questionnaire', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c'), - ), - ] diff --git a/access/migrations/0028_auto_20160526_1427.py b/access/migrations/0028_auto_20160526_1427.py deleted file mode 100755 index c29a72f..0000000 --- a/access/migrations/0028_auto_20160526_1427.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-05-26 14:27 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0027_auto_20160510_1823'), - ] - - operations = [ - migrations.CreateModel( - name='Document', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=255, verbose_name='\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a')), - ('status', models.CharField(choices=[(b'W', '\u041d\u0430 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0438'), (b'F', '\u041e\u0444\u043e\u0440\u043c\u043b\u0435\u043d')], default=b'W', editable=False, max_length=1, verbose_name='\u0421\u0442\u0430\u0442\u0443\u0441')), - ('date', models.DateField(default=datetime.datetime.now, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f')), - ('in_date', models.DateTimeField(default=datetime.datetime.now, verbose_name='\u0414\u0430\u0442\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f')), - ], - options={ - 'verbose_name': '\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442', - 'verbose_name_plural': '\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b', - }, - ), - migrations.CreateModel( - name='DocumentScan', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('page', models.CharField(max_length=255, verbose_name='\u2116 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b')), - ('file', models.ImageField(upload_to=b'documents', verbose_name='\u0421\u043a\u0430\u043d')), - ('date', models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='\u0412\u0440\u0435\u043c\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f')), - ], - options={ - 'ordering': ['page'], - 'verbose_name': '\u0421\u043a\u0430\u043d \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430', - 'verbose_name_plural': '\u0421\u043a\u0430\u043d\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432', - }, - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 26, 14, 27, 8, 278824), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - migrations.AddField( - model_name='document', - name='scans', - field=models.ManyToManyField(blank=True, to='access.DocumentScan', verbose_name='\u0421\u043a\u0430\u043d\u044b'), - ), - migrations.AddField( - model_name='document', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c'), - ), - ] diff --git a/access/migrations/0029_auto_20160526_1435.py b/access/migrations/0029_auto_20160526_1435.py deleted file mode 100755 index 72a2bb7..0000000 --- a/access/migrations/0029_auto_20160526_1435.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-05-26 14:35 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0028_auto_20160526_1427'), - ] - - operations = [ - migrations.RemoveField( - model_name='document', - name='scans', - ), - migrations.AddField( - model_name='document', - name='file', - field=models.ImageField(null=True, upload_to=b'documents', verbose_name='\u0421\u043a\u0430\u043d'), - ), - migrations.AlterField( - model_name='document', - name='in_date', - field=models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='\u0414\u0430\u0442\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f'), - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 26, 14, 35, 38, 532166), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - migrations.DeleteModel( - name='DocumentScan', - ), - ] diff --git a/access/migrations/0030_auto_20160526_1727.py b/access/migrations/0030_auto_20160526_1727.py deleted file mode 100755 index a311d2b..0000000 --- a/access/migrations/0030_auto_20160526_1727.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-05-26 17:27 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0029_auto_20160526_1435'), - ] - - operations = [ - migrations.AlterField( - model_name='document', - name='file', - field=models.FileField(blank=True, null=True, upload_to=b'documents', verbose_name='\u0421\u043a\u0430\u043d'), - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 26, 17, 27, 27, 217966), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0031_auto_20160531_1240.py b/access/migrations/0031_auto_20160531_1240.py deleted file mode 100755 index 7587774..0000000 --- a/access/migrations/0031_auto_20160531_1240.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-05-31 12:40 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0030_auto_20160526_1727'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 5, 31, 12, 40, 17, 702246), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - migrations.AlterField( - model_name='user', - name='in_role', - field=models.CharField(choices=[(b'U', '\u0421\u0442\u0443\u0434\u0435\u043d\u0442 \u0448\u043a\u043e\u043b\u044b'), (b'T', '\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c'), (b'M', '\u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440'), (b'S', '\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c'), (b'S2', '\u041e\u043a\u043e \u0441\u0430\u0443\u0440\u043e\u043d\u0430'), (b'A', '\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440'), (b'Ts', '\u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c'), (b'F', '\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430')], default=b'U', max_length=2, verbose_name='\u0420\u043e\u043b\u044c'), - ), - ] diff --git a/access/migrations/0032_auto_20160601_1256.py b/access/migrations/0032_auto_20160601_1256.py deleted file mode 100755 index 5bc7eb2..0000000 --- a/access/migrations/0032_auto_20160601_1256.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-01 12:56 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0031_auto_20160531_1240'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 1, 12, 56, 55, 630156), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0033_auto_20160607_1614.py b/access/migrations/0033_auto_20160607_1614.py deleted file mode 100755 index b86a02f..0000000 --- a/access/migrations/0033_auto_20160607_1614.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-07 16:14 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0032_auto_20160601_1256'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 7, 16, 14, 9, 853317), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0034_auto_20160607_2002.py b/access/migrations/0034_auto_20160607_2002.py deleted file mode 100755 index eeac88f..0000000 --- a/access/migrations/0034_auto_20160607_2002.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-07 20:02 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0033_auto_20160607_1614'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 7, 20, 2, 41, 564255), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0035_auto_20160607_2034.py b/access/migrations/0035_auto_20160607_2034.py deleted file mode 100755 index 66e9075..0000000 --- a/access/migrations/0035_auto_20160607_2034.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-07 20:34 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0034_auto_20160607_2002'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 7, 20, 34, 43, 673956), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0036_auto_20160607_2051.py b/access/migrations/0036_auto_20160607_2051.py deleted file mode 100755 index 7c7e96d..0000000 --- a/access/migrations/0036_auto_20160607_2051.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-07 20:51 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0035_auto_20160607_2034'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 7, 20, 51, 37, 90991), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0037_auto_20160608_1700.py b/access/migrations/0037_auto_20160608_1700.py deleted file mode 100755 index 96c64d7..0000000 --- a/access/migrations/0037_auto_20160608_1700.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-08 17:00 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0036_auto_20160607_2051'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 8, 16, 59, 59, 621057), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0038_auto_20160608_1705.py b/access/migrations/0038_auto_20160608_1705.py deleted file mode 100755 index 75e6ae2..0000000 --- a/access/migrations/0038_auto_20160608_1705.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-08 17:05 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0037_auto_20160608_1700'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 8, 17, 5, 4, 809207), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0039_auto_20160608_1804.py b/access/migrations/0039_auto_20160608_1804.py deleted file mode 100755 index 0ced3c1..0000000 --- a/access/migrations/0039_auto_20160608_1804.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-08 18:04 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0038_auto_20160608_1705'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 8, 18, 4, 57, 435515), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0040_auto_20160608_1841.py b/access/migrations/0040_auto_20160608_1841.py deleted file mode 100755 index 3a71be2..0000000 --- a/access/migrations/0040_auto_20160608_1841.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-08 18:41 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0039_auto_20160608_1804'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 8, 18, 41, 17, 775100), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0041_auto_20160609_1429.py b/access/migrations/0041_auto_20160609_1429.py deleted file mode 100755 index 843bac2..0000000 --- a/access/migrations/0041_auto_20160609_1429.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 14:29 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0040_auto_20160608_1841'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 14, 29, 17, 471762), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0042_auto_20160609_1442.py b/access/migrations/0042_auto_20160609_1442.py deleted file mode 100755 index ef23d38..0000000 --- a/access/migrations/0042_auto_20160609_1442.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 14:42 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0041_auto_20160609_1429'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 14, 42, 25, 538404), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0043_auto_20160609_1534.py b/access/migrations/0043_auto_20160609_1534.py deleted file mode 100755 index 49b94a5..0000000 --- a/access/migrations/0043_auto_20160609_1534.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 15:34 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0042_auto_20160609_1442'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 15, 34, 28, 437751), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0044_auto_20160609_1536.py b/access/migrations/0044_auto_20160609_1536.py deleted file mode 100755 index 5346e16..0000000 --- a/access/migrations/0044_auto_20160609_1536.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 15:36 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0043_auto_20160609_1534'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 15, 36, 24, 57777), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0045_auto_20160609_1536.py b/access/migrations/0045_auto_20160609_1536.py deleted file mode 100755 index 788dd3b..0000000 --- a/access/migrations/0045_auto_20160609_1536.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 15:36 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0044_auto_20160609_1536'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 15, 36, 29, 820351), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0046_auto_20160609_1546.py b/access/migrations/0046_auto_20160609_1546.py deleted file mode 100755 index e4700f1..0000000 --- a/access/migrations/0046_auto_20160609_1546.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 15:46 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0045_auto_20160609_1536'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 15, 46, 17, 181201), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0047_auto_20160609_1627.py b/access/migrations/0047_auto_20160609_1627.py deleted file mode 100755 index 50e944a..0000000 --- a/access/migrations/0047_auto_20160609_1627.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 16:27 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0046_auto_20160609_1546'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 16, 27, 14, 187304), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0048_auto_20160609_2224.py b/access/migrations/0048_auto_20160609_2224.py deleted file mode 100755 index 5909b2d..0000000 --- a/access/migrations/0048_auto_20160609_2224.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 22:24 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0047_auto_20160609_1627'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 9, 22, 24, 43, 724608), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0049_auto_20160628_1731.py b/access/migrations/0049_auto_20160628_1731.py deleted file mode 100755 index 4040d21..0000000 --- a/access/migrations/0049_auto_20160628_1731.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-28 17:31 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0048_auto_20160609_2224'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 6, 28, 17, 31, 12, 186349), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0050_auto_20160711_1518.py b/access/migrations/0050_auto_20160711_1518.py deleted file mode 100755 index c756561..0000000 --- a/access/migrations/0050_auto_20160711_1518.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-11 15:18 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0049_auto_20160628_1731'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 7, 11, 15, 18, 42, 159532), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0051_auto_20160713_2038.py b/access/migrations/0051_auto_20160713_2038.py deleted file mode 100755 index e411c9e..0000000 --- a/access/migrations/0051_auto_20160713_2038.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-13 20:38 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0050_auto_20160711_1518'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 7, 13, 20, 38, 33, 272929), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0052_auto_20160718_1714.py b/access/migrations/0052_auto_20160718_1714.py deleted file mode 100755 index 9c0ae5b..0000000 --- a/access/migrations/0052_auto_20160718_1714.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-18 17:14 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0051_auto_20160713_2038'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 7, 18, 17, 14, 45, 907017), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0053_auto_20160718_1714.py b/access/migrations/0053_auto_20160718_1714.py deleted file mode 100755 index 81e91dc..0000000 --- a/access/migrations/0053_auto_20160718_1714.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-18 17:14 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0052_auto_20160718_1714'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 7, 18, 17, 14, 57, 300386), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0054_auto_20160725_1551.py b/access/migrations/0054_auto_20160725_1551.py deleted file mode 100755 index 6085f62..0000000 --- a/access/migrations/0054_auto_20160725_1551.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-25 15:51 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0053_auto_20160718_1714'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 7, 25, 15, 51, 36, 404906), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - migrations.AlterField( - model_name='user', - name='is_admin', - field=models.BooleanField(default=False, editable=False), - ), - migrations.AlterField( - model_name='user', - name='is_staff', - field=models.BooleanField(default=False, editable=False), - ), - ] diff --git a/access/migrations/0055_auto_20160809_1653.py b/access/migrations/0055_auto_20160809_1653.py deleted file mode 100755 index 8f10fb3..0000000 --- a/access/migrations/0055_auto_20160809_1653.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-08-09 16:53 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0054_auto_20160725_1551'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='sync', - field=models.BooleanField(default=False, verbose_name='\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d'), - ), - migrations.AlterField( - model_name='trafhistory', - name='action', - field=models.CharField(choices=[(b'G', b'\xd0\x9f\xd0\xbe\xd0\xbb\xd1\x83\xd1\x87\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd1\x85'), (b'D', b'\xd0\x97\xd0\xb0\xd0\xbf\xd0\xb8\xd1\x81\xd1\x8c \xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd1\x85'), (b'C', b'\xd0\xa1\xd0\xbe\xd0\xb7\xd0\xb4\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xbf\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xb5\xd0\xbb\xd1\x8f'), (b'O', b'\xd0\xa1\xd0\xbe\xd0\xb7\xd0\xb4\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5 \xd1\x81\xd1\x87\xd0\xb5\xd1\x82\xd0\xb0')], max_length=1, verbose_name='\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435'), - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 8, 9, 16, 53, 12, 35311), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - migrations.AlterField( - model_name='user', - name='private', - field=models.CharField(choices=[(b'A', b'\xd0\x92\xd1\x81\xd0\xb5\xd0\xbc\xd1\x83 \xd0\xb8\xd0\xbd\xd1\x82\xd0\xb5\xd1\x80\xd0\xbd\xd0\xb5\xd1\x82\xd1\x83'), (b'U', b'\xd0\xa2\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xba\xd0\xbe \xd0\xbf\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xb5\xd0\xbb\xd1\x8f\xd0\xbc \xd1\x81\xd0\xb8\xd1\x81\xd1\x82\xd0\xb5\xd0\xbc\xd1\x8b'), (b'L', b'\xd0\x9f\xd0\xbe \xd0\xbf\xd1\x80\xd1\x8f\xd0\xbc\xd0\xbe\xd0\xb9 \xd1\x81\xd1\x81\xd1\x8b\xd0\xbb\xd0\xba\xd0\xb5'), (b'B', b'\xd0\xa2\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xba\xd0\xbe \xd0\xbc\xd0\xbd\xd0\xb5')], default=b'A', max_length=1, verbose_name='\u041f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044f'), - ), - ] diff --git a/access/migrations/0056_auto_20160809_1659.py b/access/migrations/0056_auto_20160809_1659.py deleted file mode 100755 index 20db0e8..0000000 --- a/access/migrations/0056_auto_20160809_1659.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-08-09 16:59 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0055_auto_20160809_1653'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='sync_date', - field=models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e'), - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 8, 9, 16, 59, 0, 490315), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0057_auto_20160810_1234.py b/access/migrations/0057_auto_20160810_1234.py deleted file mode 100755 index 4bfca78..0000000 --- a/access/migrations/0057_auto_20160810_1234.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-08-10 12:34 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0056_auto_20160809_1659'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 8, 10, 12, 34, 1, 608983), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0058_auto_20160814_1736.py b/access/migrations/0058_auto_20160814_1736.py deleted file mode 100755 index 79374b6..0000000 --- a/access/migrations/0058_auto_20160814_1736.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-08-14 17:36 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0057_auto_20160810_1234'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 8, 14, 17, 36, 41, 669896), null=True, verbose_name='\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e. \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c.'), - ), - ] diff --git a/access/migrations/0059_auto_20160815_1853.py b/access/migrations/0059_auto_20160815_1853.py deleted file mode 100755 index 3d7e4a2..0000000 --- a/access/migrations/0059_auto_20160815_1853.py +++ /dev/null @@ -1,198 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-08-15 18:53 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0058_auto_20160814_1736'), - ] - - operations = [ - migrations.CreateModel( - name='UserSync', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('date', models.DateTimeField(default=datetime.datetime.now, verbose_name='Дата начала')), - ('f_date', models.DateTimeField(blank=True, null=True, verbose_name='Дата завершения процеса')), - ('source', models.CharField(max_length=255, verbose_name='Источник синхронизации')), - ('dist', models.CharField(max_length=255, verbose_name='Получатель синхронизации')), - ('result', models.BooleanField(default=False, verbose_name='Результат синхронизации')), - ], - options={ - 'verbose_name': 'Задача синхронизации', - 'verbose_name_plural': 'Задачи синхронизации', - }, - ), - migrations.AlterField( - model_name='actionj', - name='a_type', - field=models.CharField(choices=[('B', 'b-default'), ('P', 'b-primary'), ('S', 'b-success'), ('I', 'b-info'), ('W', 'b-warning'), ('D', 'b-danger')], default='B', max_length=1, verbose_name='Тип события'), - ), - migrations.AlterField( - model_name='document', - name='file', - field=models.FileField(blank=True, null=True, upload_to='documents', verbose_name='Скан'), - ), - migrations.AlterField( - model_name='document', - name='status', - field=models.CharField(choices=[('W', 'На оформлении'), ('F', 'Оформлен')], default='W', editable=False, max_length=1, verbose_name='Статус'), - ), - migrations.AlterField( - model_name='questionnaire', - name='age', - field=models.CharField(blank=True, choices=[('1', 'до 18'), ('2', '18-25'), ('3', '25-30'), ('4', '30-40'), ('5', 'больше 40')], max_length=1, null=True, verbose_name='Возраст'), - ), - migrations.AlterField( - model_name='questionnaire', - name='aim', - field=models.CharField(blank=True, choices=[('1', 'Да, в офисе'), ('2', 'Да, свой проект'), ('3', 'Да, на фрилансе'), ('4', 'Нет, изучаю для себя')], max_length=1, null=True, verbose_name='Цель обучения'), - ), - migrations.AlterField( - model_name='questionnaire', - name='experience', - field=models.CharField(blank=True, choices=[('1', 'Только начинаю'), ('2', 'Да, менее года'), ('3', 'Да, 1-2 года'), ('4', 'Да, более 2 лет')], max_length=1, null=True, verbose_name='Опыт'), - ), - migrations.AlterField( - model_name='questionnaire', - name='fully', - field=models.CharField(choices=[('1', 'Флаги'), ('2', 'Свободный ответ'), ('3', 'Завершено')], default=1, max_length=1, verbose_name='Стадия'), - ), - migrations.AlterField( - model_name='questionnaire', - name='male', - field=models.CharField(blank=True, choices=[('M', 'Мужчина'), ('W', 'Женщина')], max_length=1, null=True, verbose_name='Пол'), - ), - migrations.AlterField( - model_name='trafhistory', - name='action', - field=models.CharField(choices=[('G', 'Получение данных'), ('D', 'Запись данных'), ('C', 'Создание пользователя'), ('O', 'Создание счета')], max_length=1, verbose_name='Действие'), - ), - migrations.AlterField( - model_name='user', - name='avatar', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Ключ аватара'), - ), - migrations.AlterField( - model_name='user', - name='back_phone', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Предидущий телефон'), - ), - migrations.AlterField( - model_name='user', - name='city', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Город'), - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 8, 15, 18, 53, 53, 111817), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - migrations.AlterField( - model_name='user', - name='email', - field=models.EmailField(blank=True, db_index=True, editable=False, max_length=255, unique=True, verbose_name='email'), - ), - migrations.AlterField( - model_name='user', - name='facebook', - field=models.CharField(blank=True, default='', max_length=255), - ), - migrations.AlterField( - model_name='user', - name='fname', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Фамилия'), - ), - migrations.AlterField( - model_name='user', - name='in_avatar', - field=models.ImageField(blank=True, editable=False, null=True, upload_to='', verbose_name='Наш аватар'), - ), - migrations.AlterField( - model_name='user', - name='in_role', - field=models.CharField(choices=[('U', 'Студент школы'), ('T', 'Преподаватель'), ('M', 'Менеджер'), ('S', 'Руководитель'), ('S2', 'Око саурона'), ('A', 'Администратор'), ('Ts', 'Тестовый пользователь'), ('F', 'Пользователь свободного счета')], default='U', max_length=2, verbose_name='Роль'), - ), - migrations.AlterField( - model_name='user', - name='linkedin', - field=models.CharField(blank=True, default='', max_length=255), - ), - migrations.AlterField( - model_name='user', - name='name', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Имя'), - ), - migrations.AlterField( - model_name='user', - name='odnoklassniki', - field=models.CharField(blank=True, default='', max_length=255), - ), - migrations.AlterField( - model_name='user', - name='oname', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Отчество'), - ), - migrations.AlterField( - model_name='user', - name='phone', - field=models.CharField(default='', max_length=255, verbose_name='Телефон'), - ), - migrations.AlterField( - model_name='user', - name='private', - field=models.CharField(choices=[('A', 'Всему интернету'), ('U', 'Только пользователям системы'), ('L', 'По прямой ссылке'), ('B', 'Только мне')], default='A', max_length=1, verbose_name='Приватность профиля'), - ), - migrations.AlterField( - model_name='user', - name='refer', - field=models.CharField(choices=[('S', 'Органично'), ('B', 'Привлечен')], default='S', max_length=1, null=True, verbose_name='Источник'), - ), - migrations.AlterField( - model_name='user', - name='refer_source', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Источник пользователя'), - ), - migrations.AlterField( - model_name='user', - name='reg_status', - field=models.CharField(choices=[('1', 'Пароль'), ('2', 'О себе'), ('3', 'Фото'), ('4', 'Закончена')], default='1', max_length=1, verbose_name='Статус регистрации'), - ), - migrations.AlterField( - model_name='user', - name='skype', - field=models.CharField(blank=True, default='', max_length=300), - ), - migrations.AlterField( - model_name='user', - name='status', - field=models.CharField(choices=[('ON', 'on-line'), ('OFF', 'off-line')], default='ON', max_length=9), - ), - migrations.AlterField( - model_name='user', - name='token', - field=models.CharField(blank=True, default='', max_length=255), - ), - migrations.AlterField( - model_name='user', - name='unique_role', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Уникальная роль'), - ), - migrations.AlterField( - model_name='user', - name='vk', - field=models.CharField(blank=True, default='', max_length=255), - ), - migrations.AddField( - model_name='usersync', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Синхронизируемый'), - ), - ] diff --git a/access/migrations/0060_auto_20160815_1855.py b/access/migrations/0060_auto_20160815_1855.py deleted file mode 100755 index c0d42b7..0000000 --- a/access/migrations/0060_auto_20160815_1855.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-08-15 18:55 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0059_auto_20160815_1853'), - ] - - operations = [ - migrations.AddField( - model_name='usersync', - name='data', - field=models.TextField(blank=True, default='', verbose_name='Сырые данные'), - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 8, 15, 18, 55, 46, 279309), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - ] diff --git a/access/migrations/0061_auto_20160831_1638.py b/access/migrations/0061_auto_20160831_1638.py deleted file mode 100644 index 61b423c..0000000 --- a/access/migrations/0061_auto_20160831_1638.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-08-31 16:38 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0060_auto_20160815_1855'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 8, 31, 16, 38, 23, 105783), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - ] diff --git a/access/migrations/0062_auto_20160908_0045.py b/access/migrations/0062_auto_20160908_0045.py deleted file mode 100644 index 8cf51e6..0000000 --- a/access/migrations/0062_auto_20160908_0045.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 00:45 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0061_auto_20160831_1638'), - ] - - operations = [ - migrations.RemoveField( - model_name='usersync', - name='user', - ), - migrations.RemoveField( - model_name='user', - name='sync', - ), - migrations.RemoveField( - model_name='user', - name='sync_date', - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 9, 8, 0, 45, 45, 873022), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - migrations.DeleteModel( - name='UserSync', - ), - ] diff --git a/access/migrations/0063_auto_20160908_0051.py b/access/migrations/0063_auto_20160908_0051.py deleted file mode 100644 index 66d1fc1..0000000 --- a/access/migrations/0063_auto_20160908_0051.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 00:51 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0062_auto_20160908_0045'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 9, 8, 0, 51, 2, 110598), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - migrations.AlterField( - model_name='user', - name='email', - field=models.EmailField(blank=True, db_index=True, help_text='Будьте аккуратны. Менять почту можно. Но только если очень нужно.', max_length=255, unique=True, verbose_name='email'), - ), - ] diff --git a/access/migrations/0064_auto_20160908_0118.py b/access/migrations/0064_auto_20160908_0118.py deleted file mode 100644 index f0ff5bf..0000000 --- a/access/migrations/0064_auto_20160908_0118.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 01:18 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0063_auto_20160908_0051'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 9, 8, 1, 18, 30, 601100), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - ] diff --git a/access/migrations/0065_auto_20160908_0331.py b/access/migrations/0065_auto_20160908_0331.py deleted file mode 100644 index 399297b..0000000 --- a/access/migrations/0065_auto_20160908_0331.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 03:31 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0064_auto_20160908_0118'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 9, 8, 3, 31, 41, 622129), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - ] diff --git a/access/migrations/0066_auto_20160908_1834.py b/access/migrations/0066_auto_20160908_1834.py deleted file mode 100644 index 88bff63..0000000 --- a/access/migrations/0066_auto_20160908_1834.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 18:34 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0065_auto_20160908_0331'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 9, 8, 18, 34, 4, 509785), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - ] diff --git a/access/migrations/0067_auto_20160908_1919.py b/access/migrations/0067_auto_20160908_1919.py deleted file mode 100644 index c2700b2..0000000 --- a/access/migrations/0067_auto_20160908_1919.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 19:19 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0066_auto_20160908_1834'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 9, 8, 19, 19, 49, 87071), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - ] diff --git a/access/migrations/0068_auto_20160909_1816.py b/access/migrations/0068_auto_20160909_1816.py deleted file mode 100644 index 67a49c0..0000000 --- a/access/migrations/0068_auto_20160909_1816.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-09 18:16 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0067_auto_20160908_1919'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 9, 9, 18, 16, 11, 571015), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - ] diff --git a/access/migrations/0069_auto_20160912_1324.py b/access/migrations/0069_auto_20160912_1324.py deleted file mode 100644 index b83b7fc..0000000 --- a/access/migrations/0069_auto_20160912_1324.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-12 13:24 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0068_auto_20160909_1816'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 9, 12, 13, 24, 6, 984924), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - ] diff --git a/access/migrations/0070_auto_20160913_1658.py b/access/migrations/0070_auto_20160913_1658.py deleted file mode 100644 index e1cdfb4..0000000 --- a/access/migrations/0070_auto_20160913_1658.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-13 16:58 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0069_auto_20160912_1324'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 9, 13, 16, 58, 57, 866115), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - ] diff --git a/access/migrations/0071_auto_20160913_1701.py b/access/migrations/0071_auto_20160913_1701.py deleted file mode 100644 index 617a025..0000000 --- a/access/migrations/0071_auto_20160913_1701.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-13 17:01 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0070_auto_20160913_1658'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='traf_source', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='access.TrafHistory', verbose_name='Обращение'), - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 9, 13, 17, 1, 21, 809671), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - ] diff --git a/access/migrations/0072_auto_20160914_1517.py b/access/migrations/0072_auto_20160914_1517.py deleted file mode 100644 index ea499bb..0000000 --- a/access/migrations/0072_auto_20160914_1517.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-14 15:17 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0071_auto_20160913_1701'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 9, 14, 15, 17, 56, 683824), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - migrations.AlterField( - model_name='user', - name='in_avatar', - field=models.ImageField(blank=True, editable=False, null=True, upload_to='in_ava', verbose_name='Наш аватар'), - ), - ] diff --git a/access/migrations/0073_auto_20160917_0757.py b/access/migrations/0073_auto_20160917_0757.py deleted file mode 100644 index 7af865c..0000000 --- a/access/migrations/0073_auto_20160917_0757.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-17 07:57 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0072_auto_20160914_1517'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 9, 17, 7, 57, 11, 224926), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - ] diff --git a/access/migrations/0074_auto_20160919_2349.py b/access/migrations/0074_auto_20160919_2349.py deleted file mode 100644 index ca6baa0..0000000 --- a/access/migrations/0074_auto_20160919_2349.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-19 23:49 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0073_auto_20160917_0757'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='deactivate', - field=models.BooleanField(default=False, verbose_name='Не давать новых студентов'), - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 9, 19, 23, 49, 48, 478001), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - ] diff --git a/access/migrations/0075_auto_20160919_2352.py b/access/migrations/0075_auto_20160919_2352.py deleted file mode 100644 index 8cb8b18..0000000 --- a/access/migrations/0075_auto_20160919_2352.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-19 23:52 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0074_auto_20160919_2349'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 9, 19, 23, 52, 26, 838003), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - ] diff --git a/access/migrations/0076_auto_20160924_0154.py b/access/migrations/0076_auto_20160924_0154.py deleted file mode 100644 index 384a2d6..0000000 --- a/access/migrations/0076_auto_20160924_0154.py +++ /dev/null @@ -1,59 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-24 01:54 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0075_auto_20160919_2352'), - ] - - operations = [ - migrations.CreateModel( - name='UserRequest', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('ip', models.CharField(max_length=255, verbose_name='IP')), - ('count', models.IntegerField(default=0, verbose_name='Количество использований')), - ('date', models.DateTimeField(default=datetime.datetime.now, verbose_name='Дата')), - ], - options={ - 'verbose_name': 'Данные сессии при авторизации', - 'verbose_name_plural': 'Данные сессий при авторизации', - }, - ), - migrations.CreateModel( - name='UserRequestData', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('data', models.TextField(verbose_name='Данные')), - ('date', models.DateTimeField(default=datetime.datetime.now, verbose_name='Дата')), - ('row', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='access.UserRequest', verbose_name='Запрос')), - ], - options={ - 'verbose_name': 'Данные запроса', - 'verbose_name_plural': 'Данные запроса', - }, - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 9, 24, 1, 54, 12, 356056), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - migrations.AddField( - model_name='userrequest', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Пользователь'), - ), - migrations.AddField( - model_name='user', - name='last_ip', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='user_last_ip', to='access.UserRequest', verbose_name='Последний IP'), - ), - ] diff --git a/access/migrations/0077_auto_20160926_0748.py b/access/migrations/0077_auto_20160926_0748.py deleted file mode 100644 index 2a076e6..0000000 --- a/access/migrations/0077_auto_20160926_0748.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-26 07:48 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0076_auto_20160924_0154'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 9, 26, 7, 48, 40, 286075), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - migrations.AlterField( - model_name='userrequest', - name='user', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Пользователь'), - ), - ] diff --git a/access/migrations/0078_auto_20160926_0751.py b/access/migrations/0078_auto_20160926_0751.py deleted file mode 100644 index 2dbfb31..0000000 --- a/access/migrations/0078_auto_20160926_0751.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-26 07:51 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0077_auto_20160926_0748'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 9, 26, 7, 51, 13, 987572), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - migrations.AlterField( - model_name='userrequest', - name='user', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL, verbose_name='Пользователь'), - ), - ] diff --git a/access/migrations/0079_auto_20160926_0801.py b/access/migrations/0079_auto_20160926_0801.py deleted file mode 100644 index 3a49d63..0000000 --- a/access/migrations/0079_auto_20160926_0801.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-26 08:01 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0078_auto_20160926_0751'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 9, 26, 8, 1, 40, 582273), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - migrations.AlterField( - model_name='userrequest', - name='user', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Пользователь'), - ), - ] diff --git a/access/migrations/0080_auto_20160926_0804.py b/access/migrations/0080_auto_20160926_0804.py deleted file mode 100644 index 54e0409..0000000 --- a/access/migrations/0080_auto_20160926_0804.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-26 08:04 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0079_auto_20160926_0801'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 9, 26, 8, 4, 15, 992342), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - migrations.AlterField( - model_name='user', - name='last_ip', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='user_last_ip', to='access.UserRequest', verbose_name='Последний IP'), - ), - migrations.AlterField( - model_name='userrequest', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Пользователь'), - ), - ] diff --git a/access/migrations/0081_auto_20161110_2152.py b/access/migrations/0081_auto_20161110_2152.py deleted file mode 100644 index 5262a4c..0000000 --- a/access/migrations/0081_auto_20161110_2152.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-10 21:52 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0080_auto_20160926_0804'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 11, 10, 21, 52, 46, 898127), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - migrations.AlterField( - model_name='user', - name='in_role', - field=models.CharField(choices=[('U', 'Студент школы'), ('T', 'Преподаватель'), ('M', 'Менеджер'), ('S', 'Руководитель'), ('S2', 'Куратор'), ('A', 'Администратор'), ('Ts', 'Тестовый пользователь'), ('F', 'Пользователь свободного счета')], default='U', max_length=2, verbose_name='Роль'), - ), - ] diff --git a/access/migrations/0082_auto_20161110_2156.py b/access/migrations/0082_auto_20161110_2156.py deleted file mode 100644 index 8c552c7..0000000 --- a/access/migrations/0082_auto_20161110_2156.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-10 21:56 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0081_auto_20161110_2152'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 11, 10, 21, 56, 58, 370173), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - ] diff --git a/access/migrations/0083_auto_20161115_1714.py b/access/migrations/0083_auto_20161115_1714.py deleted file mode 100644 index bc23410..0000000 --- a/access/migrations/0083_auto_20161115_1714.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-15 17:14 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0082_auto_20161110_2156'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='study_status', - field=models.CharField(default='', max_length=255, verbose_name='Статус обучения'), - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 11, 15, 17, 14, 35, 727120), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - ] diff --git a/access/migrations/0084_auto_20161124_1342.py b/access/migrations/0084_auto_20161124_1342.py deleted file mode 100644 index 4205fa4..0000000 --- a/access/migrations/0084_auto_20161124_1342.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-24 13:42 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0083_auto_20161115_1714'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 11, 24, 13, 42, 14, 870114), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - ] diff --git a/access/migrations/0085_auto_20161124_1342.py b/access/migrations/0085_auto_20161124_1342.py deleted file mode 100644 index 5263c0e..0000000 --- a/access/migrations/0085_auto_20161124_1342.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-24 13:42 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0084_auto_20161124_1342'), - ] - - operations = [ - migrations.RemoveField( - model_name='user', - name='study_status', - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 11, 24, 13, 42, 28, 87583), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - ] diff --git a/access/migrations/0086_auto_20161202_0338.py b/access/migrations/0086_auto_20161202_0338.py deleted file mode 100644 index bdc69d9..0000000 --- a/access/migrations/0086_auto_20161202_0338.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-12-02 03:38 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0085_auto_20161124_1342'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 12, 2, 3, 38, 6, 282942), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - migrations.AlterField( - model_name='user', - name='phone', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Телефон'), - ), - ] diff --git a/access/migrations/0087_auto_20161202_1202.py b/access/migrations/0087_auto_20161202_1202.py deleted file mode 100644 index 62975bf..0000000 --- a/access/migrations/0087_auto_20161202_1202.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-12-02 12:02 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0086_auto_20161202_0338'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2016, 12, 2, 12, 2, 56, 383782), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - ] diff --git a/access/migrations/0088_auto_20170123_1947.py b/access/migrations/0088_auto_20170123_1947.py deleted file mode 100644 index a181deb..0000000 --- a/access/migrations/0088_auto_20170123_1947.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-01-23 19:47 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0087_auto_20161202_1202'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='block', - field=models.BooleanField(default=False, verbose_name='Заблокировать'), - ), - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2017, 1, 23, 19, 47, 13, 169143), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - ] diff --git a/access/migrations/0089_auto_20170810_0904.py b/access/migrations/0089_auto_20170810_0904.py deleted file mode 100644 index e8358fd..0000000 --- a/access/migrations/0089_auto_20170810_0904.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-08-10 09:04 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0088_auto_20170123_1947'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=datetime.datetime(2017, 8, 10, 9, 4, 29, 732661), null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - ] diff --git a/access/migrations/0090_auto_20170918_0811.py b/access/migrations/0090_auto_20170918_0811.py deleted file mode 100644 index abd841b..0000000 --- a/access/migrations/0090_auto_20170918_0811.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-09-18 08:11 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.utils.timezone - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0089_auto_20170810_0904'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='delay_date', - field=models.DateTimeField(blank=True, default=django.utils.timezone.now, null=True, verbose_name='Задержка до. Не включая этот день.'), - ), - ] diff --git a/access/migrations/0091_privilege.py b/access/migrations/0091_privilege.py deleted file mode 100644 index 3ba3ba7..0000000 --- a/access/migrations/0091_privilege.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-09-25 18:29 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0090_auto_20170918_0811'), - ] - - operations = [ - migrations.CreateModel( - name='Privilege', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('value', models.CharField(choices=[('r', 'Доступно для выполнению'), ('w', 'Ждёт ответа'), ('d', 'Выполнено')], default='r', max_length=1, verbose_name='Права')), - ], - ), - ] diff --git a/access/migrations/0092_auto_20170925_1829.py b/access/migrations/0092_auto_20170925_1829.py deleted file mode 100644 index 29ef648..0000000 --- a/access/migrations/0092_auto_20170925_1829.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-09-25 18:29 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0046_auto_20170925_1829'), - ('access', '0091_privilege'), - ] - - operations = [ - migrations.AddField( - model_name='privilege', - name='subject', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Vertex', verbose_name='Объект'), - ), - migrations.AddField( - model_name='privilege', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Правообладатель'), - ), - ] diff --git a/access/migrations/0094_auto_20170929_1026.py b/access/migrations/0094_auto_20170929_1026.py deleted file mode 100644 index 46edf82..0000000 --- a/access/migrations/0094_auto_20170929_1026.py +++ /dev/null @@ -1,47 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-09-29 10:26 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0048_auto_20170929_1026'), - ('access', '0093_auto_20170928_1625'), - ] - - operations = [ - migrations.CreateModel( - name='ActiveObject', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('active_obj', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Vertex', verbose_name='Активный объект')), - ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='Курс')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Студент')), - ], - ), - migrations.CreateModel( - name='ExtraPrivilege', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('is_done', models.BooleanField(default=False, verbose_name='Выполнено?')), - ('subject', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Vertex', verbose_name='Объект')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Правообладатель')), - ], - ), - migrations.RemoveField( - model_name='privilege', - name='subject', - ), - migrations.RemoveField( - model_name='privilege', - name='user', - ), - migrations.DeleteModel( - name='Privilege', - ), - ] diff --git a/access/migrations/0095_auto_20170929_1545.py b/access/migrations/0095_auto_20170929_1545.py deleted file mode 100644 index cb3f7a0..0000000 --- a/access/migrations/0095_auto_20170929_1545.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-09-29 15:45 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0094_auto_20170929_1026'), - ] - - operations = [ - migrations.AddField( - model_name='activeobject', - name='success', - field=models.BooleanField(default=False, verbose_name='Завершён ли курс'), - ), - migrations.AlterField( - model_name='activeobject', - name='active_obj', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Vertex', verbose_name='Активный объект'), - ), - ] diff --git a/access/models.py b/access/models.py index 5eab050..7839342 100755 --- a/access/models.py +++ b/access/models.py @@ -1,632 +1,117 @@ # encoding=utf-8 import random -from django.conf import settings -from django.db import models -from django.contrib.auth.models import BaseUserManager, AbstractBaseUser -import datetime - -from django.db.models import SET_NULL - +import string from courses.models import Vertex, Course -from lms.regex import check_email -from lms.settings import STATIC_ROOT, DOMAIN -from lms.tools import random_string, random_int, out_date_format, get_client_ip -import os -from management.letters import sent_registration from storage.models import Storage -import django.utils.timezone -from django.core.files.base import File -from django.utils.deconstruct import deconstructible -from uuid import uuid4 - -ROLE = ( - ('U', u'Студент школы'), - ('T', u'Преподаватель'), - ('M', u'Менеджер'), - ('S', u'Руководитель'), - ('S2', u'Куратор'), - ('A', u'Администратор'), - ('Ts', u'Тестовый пользователь'), - ('F', u'Пользователь свободного счета') -) - -@deconstructible -class PathAndRename(object): - - def __init__(self, sub_path): - self.path = sub_path - - def __call__(self, instance, filename): - ext = filename.split('.')[-1] - # set filename as random string - filename = '{}.{}'.format(uuid4().hex, ext) - # return the whole path to the file - return os.path.join(self.path, filename) - -path_and_rename = PathAndRename("personal_files") - - -def insert_in_system(user, sent_letter=True): - if sent_letter: - sent_registration(user) - user.subscription = Subscription.objects.create(owner=user) - user.interactive_key = gen_interactive_key(user) - user.save() - - -def random_avatar(): - ava_dir = os.path.join(STATIC_ROOT, 'img/avs') - files = os.listdir(ava_dir) - return os.path.join(ava_dir, random.choice(files)) - - -class UserManager(BaseUserManager): - def create_user(self, email, password=None, sent_letter=True): - if not email: - raise ValueError(u"Пользователь должен иметь email") - if not check_email(email): - raise ValueError(u"Email введен не верно") +from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager +from django.contrib.auth.models import PermissionsMixin - user = self.model(email=email) - user.set_password(password) - user.token = random_string(length=10, postfix=user.get_email()) - user.save(using=self._db) - insert_in_system(user, sent_letter=sent_letter) - return user - - def create_superuser(self, email, password): - user = self.create_user(email, password=password) - user.is_admin = True - user.is_active = True - user.superuser = True - user.is_staff = True - user.token = random_string(length=10, postfix=user.get_email()) - user.save(using=self._db) - return user - - def __unicode__(self): - return u'%s %s' % (self.get_short_name(), self.email) - - -def get_activate_time(): - return datetime.datetime.now() + datetime.timedelta(days=7) - - -def gen_interactive_key(user): - # 1 Надпись ID - # 2 id в системе - # 3 # - # 4 5 случайных чисел - return 'ID{0}-{1}'.format(user.id, random_int(length=5)) - - -class User(AbstractBaseUser): - STATUS_CHOICES = ( - ('ON', 'on-line'), - ('OFF', 'off-line') - ) - REG_STATUS = ( - ('1', 'Пароль'), - ('2', 'О себе'), - ('3', 'Фото'), - ('4', 'Закончена') - ) - PRIVATE = ( - ('A', 'Всему интернету'), - ('U', 'Только пользователям системы'), - ('L', 'По прямой ссылке'), - ('B', 'Только мне') - ) - SOURCE = ( - ('S', 'Органично'), - ('B', 'Привлечен') - ) - #sync = models.BooleanField(verbose_name=u'Синхронизирован', default=False) - #sync_date = models.DateTimeField(verbose_name=u'Дата постановки на синхронизацию', blank=True, null=True) - block = models.BooleanField(verbose_name=u'Заблокировать', default=False) - refer = models.CharField(verbose_name=u'Источник', max_length=1, choices=SOURCE, default='S', null=True) - refer_source = models.CharField(verbose_name=u'Источник пользователя', blank=True, max_length=255, default='') - traf_source = models.ForeignKey('TrafHistory', verbose_name=u'Обращение', blank=True, null=True) - private = models.CharField(verbose_name=u'Приватность профиля', max_length=1, choices=PRIVATE, default='A') - customer = models.BooleanField(verbose_name=u'Покупатель', default=False) - interactive_key = models.CharField(verbose_name=u'Интерактивый ключ', max_length=255, blank=True) - deactivate = models.BooleanField(verbose_name=u'Не давать новых студентов', default=False) - delay = models.BooleanField(verbose_name=u'Могут быть задержки', default=False, help_text=u'Если возможны задержки с проверками') - delay_description = models.TextField(verbose_name=u'Повод просрочки', blank=True) - delay_date = models.DateTimeField(verbose_name=u'Задержка до. Не включая этот день.', blank=True, default=django.utils.timezone.now, null=True) - email = models.EmailField(verbose_name='email', max_length=255, blank=True, db_index=True, unique=True, - help_text=u'Будьте аккуратны. Менять почту можно. Но только если очень нужно.') - changed_email = models.EmailField(verbose_name=u'Ящик на замену', blank=True, null=True) - phone = models.CharField(verbose_name=u'Телефон', max_length=255, default='', blank=True) - back_phone = models.CharField(verbose_name=u'Предидущий телефон', max_length=255, default='', blank=True) - status = models.CharField(max_length=9, choices=STATUS_CHOICES, default='ON') - in_role = models.CharField(verbose_name=u'Роль', choices=ROLE, max_length=2, default='U') - unique_role = models.CharField(verbose_name=u'Уникальная роль', max_length=255, blank=True, default='') - city = models.CharField(verbose_name=u'Город', max_length=255, default='', blank=True) - b_day = models.DateField(verbose_name=u'День рождения', null=True, blank=True) - token = models.CharField(max_length=255, default='', blank=True) - activate_time = models.DateTimeField(verbose_name=u"Активировать до", default=get_activate_time) - reg_status = models.CharField(verbose_name=u'Статус регистрации', choices=REG_STATUS, max_length=1, default='1') - is_active = models.BooleanField(default=False) - is_admin = models.BooleanField(default=False, editable=False) - is_staff = models.BooleanField(default=False, editable=False) - objects = UserManager() - avatar = models.CharField(verbose_name=u"Ключ аватара", max_length=255, blank=True, default='') - in_avatar = models.ImageField(verbose_name=u'Наш аватар', blank=True, null=True, editable=False, upload_to='in_ava') - fname = models.CharField(verbose_name=u"Фамилия", max_length=255, blank=True, default='') - name = models.CharField(verbose_name=u"Имя", max_length=255, blank=True, default='') - oname = models.CharField(verbose_name=u"Отчество", max_length=255, blank=True, default='') - # - skype = models.CharField(max_length=300, blank=True, default='') - facebook = models.CharField(default='', max_length=255, blank=True) - vk = models.CharField(max_length=255, default='', blank=True) - linkedin = models.CharField(max_length=255, default='', blank=True) - odnoklassniki = models.CharField(max_length=255, default='', blank=True) - # - last_time = models.DateTimeField(verbose_name=u'Последняя активность', default=datetime.datetime.now) - date_joined = models.DateTimeField(default=datetime.datetime.now) - last_ip = models.ForeignKey('UserRequest', verbose_name=u'Последний IP', blank=True, null=True, related_name='user_last_ip', on_delete=SET_NULL) - - USERNAME_FIELD = 'email' - - def save(self, *args, **kwargs): - if self.in_role in ['A', 'S2'] and not self.is_admin: - self.is_admin = True - self.is_staff = True - - if self.in_role in ['M']: - self.is_staff = True - - if not self.interactive_key: - self.interactive_key = gen_interactive_key(self) - - super(User, self).save(*args, **kwargs) - - def get_ip_len(self): - UserRequest.objects.filter(user=self).count() - - def full_name(self): - return str(self.id) + ": " + self.fname + " " + self.name + " " + self.oname - - def set_request_data(self, request): - ip = get_client_ip(request) - try: - _request = UserRequest.objects.get(ip=ip, user=self) - except UserRequest.DoesNotExist: - _request = UserRequest.objects.create(ip=ip, user=self) - - _request.new_count(request) - self.last_ip = _request - self.save() - - def get_ip(self): - return self.last_ip.ip if self.last_ip else None - - def get_activation_url(self): - return u'{3}/access/activate/?step=1&token={0}&email={1}'.format(self.token, self.email, self.reg_status, DOMAIN) - - def _set_to_sync(self): - self.sync = False - self.sync_date = datetime.datetime.now() - self.save() - - def _set_synced(self): - self.sync = True - self.sync_date = None - self.save() - - def change_token(self): - self.token = random_string(length=10, postfix=self.email) - self.save() - - def get_status_point(self): - return {'title': self.get_status_display(), - 'color': 'green' if self.status == 'ON' else 'red', - 'point': 'glyphicon glyphicon-ok-sign' if self.status == 'ON' else 'glyphicon glyphicon-remove-sign'} - - def get_full_data(self): - return self.full_data() - - def full_data(self): - return 'Имя: {0} - Телефон: {1} - Почта: {2}'.format(self.get_full_name(), self.get_phone(), self.email) - - def get_name(self): - if self.name: - return self.name - else: - return 'Без имени' - - def get_face(self): - return {'full_name': self.get_full_name(), - 'short_name': self.get_short_name(), - 'name': self.name if self.name else '', - 'fname': self.fname if self.fname else '', - 'oname': self.oname if self.oname else '', - 'email': self.email, - 'phone': self.get_phone(), - 'ava': self.get_image_url(), - 'date_joined': out_date_format(self.date_joined), - 'status': self.get_status_point(), - 'id': self.id, - 'interactive_key': self.interactive_key, - 'is_staff': self.is_staff or self.is_admin, - 'role': self.unique_role if self.unique_role else self.get_in_role_display(), - 'is_unique_role': bool(self.unique_role), - 'profile': self.get_profile()} - - def get_username(self): - return self.get_short_name() - - def get_image_url(self, type_in=None): - try: - image = Storage.objects.get(key=self.avatar) - except Storage.DoesNotExist: - if not self.in_avatar: - self.in_avatar.save('ava', File(open(random_avatar(), 'rb')), save=True) - return '{0}/{1}'.format(DOMAIN, self.in_avatar.url) - else: - try: - image = image.get_url(type_in) - except IOError: - if not self.in_avatar: - self.in_avatar.save('ava', File(open(random_avatar(), 'rb')), save=True) - return '{0}/{1}'.format(DOMAIN, self.in_avatar.url) - return image - - def clean_image(self): - self.avatar = '' - self.save() - - def get_phone(self): - return self.phone - - def get_back_phone(self): - return self.back_phone - - def get_email(self): - return self.email - - def get_full_name(self): - result = u"" - # Если есть фамилия пишем: Фамилия Имя Отчество - if self.fname: - result += u"%s" % self.fname - if self.name: - result += u" %s" % self.name - if self.oname: - result += u" %s" % self.oname - - if result: - return result - else: - return self.email - - def get_short_name(self): - result = u"" - # Если есть фамилия пишем: Фамилия И.О. - if self.fname: - result += u"%s" % self.fname - if self.name: - result += u" %s." % self.name[0].upper() - if self.oname: - result += u" %s." % self.oname[0].upper() - - # Если нет фамилии пишем: Имя Отчество - elif not self.fname and self.name: - if self.name: - result += u"%s" % self.name - if self.oname: - result += u" %s" % self.oname - - if result: - return result - else: - return self.email - - def has_perm(self, perm, obj=None): - return True - - def has_module_perms(self, app_label): - return True - - def check_subscription(self, right): - return Subscription.objects.get_or_create(owner=self)[0].check_right(right) - - def get_profile(self): - return u'{0}/{1}'.format(DOMAIN, self.interactive_key) - - def __unicode__(self): return u'%s:%s' % (self.id, self.get_short_name()) - - def __str__(self): return '%s:%s' % (self.id, self.get_short_name()) - - def name_to_html(self, user): - if user == self: - return u"Вы" - else: - return u"%s" \ - % (self.id, self.get_short_name()) - - def check_phone(self, _type='actual'): # actual = self.phone, back = self.back_phone - phone = self.phone if _type == 'actual' else self.back_phone - return bool(len(''.join([n for n in phone if n in [str(x) for x in range(0,10)]])) > 9) - - def clean_phone(self, _type='actual'): - return ''.join([n for n in self.phone if n in [str(x) for x in range(0,10)]]) if self.check_phone() else '' - - - class Meta: - verbose_name = u"Пользователя" - verbose_name_plural = u"Пользователи" - - -class UserRequest(models.Model): - # Информация о сессиях пользователей при авторизации - ip = models.CharField(verbose_name=u'IP', max_length=255) - user = models.ForeignKey(User, verbose_name=u'Пользователь') - count = models.IntegerField(verbose_name=u'Количество использований', default=0) - date = models.DateTimeField(verbose_name=u'Дата', default=datetime.datetime.now) - - def __str__(self): - return self.ip - - def new_count(self, request): - self.count += 1 - UserRequestData.objects.create(row=self, data=request) - self.save() - - class Meta: - verbose_name = u'Данные сессии при авторизации' - verbose_name_plural = u'Данные сессий при авторизации' - - -class UserRequestData(models.Model): - # Содержимое сессии пользователя - row = models.ForeignKey(UserRequest, verbose_name=u'Запрос') - data = models.TextField(verbose_name=u'Данные') - date = models.DateTimeField(verbose_name=u'Дата', default=datetime.datetime.now) +from django.db import models - def __str__(self): - return str(self.row) +from django.conf import settings +from django.utils import timezone +from django.utils.translation import ugettext_lazy as _ +from lms.global_decorators import transaction_decorator +from django.contrib.auth.models import Group - class Meta: - verbose_name = u'Данные запроса' - verbose_name_plural = u'Данные запроса' - - -class Subscription(models.Model): - # Подписки - owner = models.OneToOneField(User, verbose_name=u"Владелец", unique=True, related_name='rights_owner') - news = models.BooleanField(verbose_name=u"Подписка на новости", default=True) - teacher = models.BooleanField(verbose_name=u'Ответы преподователя', default=True) - new_comments = models.BooleanField(verbose_name=u'Ответы на комментарии', default=True) - send_sms = models.BooleanField(verbose_name=u'Отправлять sms', default=False) - courses = models.BooleanField(verbose_name=u'Новые курсы', default=True) - - def __str__(self): return "%s: %s" % (self.id, self.owner) - - def __unicode__(self): return u"%s: %s" % (self.id, self.owner) - - def check_right(self, right): - # Проверка указанного права для пользователя - return self.right_map(right) - - def set_right(self, right, value): - # Установка права - if right == 'news': - self.news = value - elif right == 'teacher': - self.teacher = value - elif right == 'send_sms': - self.send_sms = value - elif right == 'courses': - self.courses = value - elif right == 'new_comments': - self.new_comments = value - self.save() - - def set_default_values(self): - # Установка дефолтных значений - for field in self._meta.fields: - if field.has_default: - self.set_right(field.name, field.default) - - def right_map(self, right): - # Карта проверки прав - __right_map = { - 'news': self.news, - 'teacher': self.teacher, - 'send_sms': self.send_sms, - 'courses': self.courses, - 'new_comments': self.new_comments - } - if right in __right_map: - return __right_map[right] - else: - return __right_map - class Meta: - verbose_name = u"Подписка" - verbose_name_plural = u"Подписки" - - -class ActionJ(models.Model): - ACTION_TYPE = ( - ('B', 'b-default'), - ('P', 'b-primary'), - ('S', 'b-success'), - ('I', 'b-info'), - ('W', 'b-warning'), - ('D', 'b-danger') +class Invite(models.Model): + owner = models.OneToOneField(to=settings.AUTH_USER_MODEL) + hash = models.CharField( + max_length=15, default=''.join(random.choice(string.ascii_letters) for x in range(15)) ) - student = models.ForeignKey(User, verbose_name=u'Студент') - a_type = models.CharField(verbose_name=u'Тип события', choices=ACTION_TYPE, max_length=1, default='B') - place = models.CharField(verbose_name=u'Место создания события', max_length=100) - date = models.DateTimeField(verbose_name=u'Время создания', default=django.utils.timezone.now) - text = models.TextField(verbose_name=u'Текст сообщения') - - def __str__(self): - return '%s %s %s' % (self.get_a_type_display(), self.place, self.date) - - def __unicode__(self): - return u'%s %s %s' % (self.get_a_type_display(), self.place, self.date) - - class Meta: - verbose_name = u'Журнал активности' - verbose_name_plural = u'Журналы активностей' - -class TrafSource(models.Model): - on = models.BooleanField(verbose_name=u'Ативен', default=True) - url = models.URLField(verbose_name=u'Источник трафика') - token = models.CharField(verbose_name=u'Токен доступа', max_length=255, editable=False) - token_start = models.DateTimeField(verbose_name=u'Точка отсчета жизни токена', editable=False, null=True) - live_time = models.IntegerField(verbose_name=u'Время жизни токена', blank=True, help_text=u'Указывается в часах. пустое поле - пожизненно', null=True) - date_start = models.DateTimeField(verbose_name=u'Дата запуска источника', default=datetime.datetime.now) - def __str__(self): - return '%s' % self.url - - def __unicode__(self): - return u'%s' % self.url - - def save(self, *args, **kwargs): - if not self.token: - self.token = random_string(length=20) - self.token_start = datetime.datetime.now() - super(TrafSource, self).save(*args, **kwargs) - - class Meta: - verbose_name = u'Источник трафика' - verbose_name_plural = u'Источники трафика' +class Account(models.Model): + GENDER_CHOICES = { + (0, 'undefined'), + (1, 'male'), + (2, 'female'), + } + b_day = models.DateField(blank=True, null=True) + city = models.CharField(max_length=63, null=True) + gender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0) + owner = models.OneToOneField(to=settings.AUTH_USER_MODEL) + photo = models.ImageField(null=True, blank=True, default='user/photo/default_avatar.png', upload_to='user/photo/') + phone = models.CharField(max_length=15, blank=True) -class TrafTokenHistory(models.Model): - token = models.CharField(verbose_name=u'Токен', max_length=255, editable=False) - live_time = models.IntegerField(verbose_name=u'Время жизни', help_text=u'В часах', editable=False) - date_start = models.DateTimeField(verbose_name=u'Дата установки токена', editable=False) - date_end = models.DateTimeField(verbose_name=u'Дата отключения', editable=False) - source = models.ForeignKey(TrafSource, verbose_name=u'Использующий источник', editable=False) +class CustomUserManager(BaseUserManager): + use_in_migrations = True - def __str__(self): - return '%s %s:%s %s' % (self.token, self.date_start, self.date_end, self.sources) - - def __unicode__(self): - return u'%s %s:%s %s' % (self.token, self.date_start, self.date_end, self.sources) + @transaction_decorator + def _create_user(self, email, password=None, is_staff=False, is_superuser=False, is_active=False, + first_name='Guest', **extra_fields): - class Meta: - verbose_name = u'История смены токена' - verbose_name_plural = u'Истории смены токенов' + now = timezone.now() + if not email: + raise ValueError('The given email must be set') -class TrafHistory(models.Model): - TRAF_ACTION = ( - ('G', 'Получение данных'), - ('D', 'Запись данных'), - ('C', 'Создание пользователя'), - ('O', 'Создание счета') - ) - action = models.CharField(verbose_name=u'Действие', choices=TRAF_ACTION, max_length=1) - source = models.ForeignKey(TrafSource, verbose_name=u'Источник запроса') - token = models.CharField(verbose_name=u'Используемый токен', max_length=255, null=True) - data = models.TextField(verbose_name=u'Данные в запросе') - result = models.BooleanField(verbose_name=u'Результат запроса', default=False) - result_description = models.CharField(verbose_name=u'Описание результата', max_length=255, blank=True) - date = models.DateTimeField(verbose_name=u'Дата обращения', default=datetime.datetime.now) - - def __str__(self): - return '%s %s %s' % (self.source, self.action, self.result) + email = self.normalize_email(email) - def __unicode__(self): - return u'%s %s %s' % (self.source, self.action, self.result) + user = self.model(email=email, is_staff=is_staff, is_active=is_active, first_name=first_name, + is_superuser=is_superuser, last_login=now, **extra_fields) - class Meta: - verbose_name = u'Обращение источника' - verbose_name_plural = u'Обращения источников' + if not password: + password = ''.join(random.choice(string.ascii_letters) for x in range(8)) + user.set_password(password) + user.save(using=self._db) + group = Group.objects.create(name=user.email) + user.groups.add(group) + Account.objects.create(owner=user) + Invite.objects.create(owner=user) + # Должна идти отбивка + return user -class Document(models.Model): - DOC_STATUS = ( - ('W', u'На оформлении'), - ('F', u'Оформлен') - ) - title = models.CharField(verbose_name=u'Заголовок', max_length=255) - status = models.CharField(verbose_name=u'Статус', choices=DOC_STATUS, default='W', editable=False, max_length=1) - user = models.ForeignKey(User, verbose_name=u'Пользователь') - date = models.DateField(verbose_name=u'Дата заключения', default=datetime.datetime.now) - file = models.FileField(verbose_name=u'Скан', upload_to='documents', null=True, blank=True) - in_date = models.DateTimeField(verbose_name=u'Дата добавления', default=datetime.datetime.now, editable=False) + def create_user(self, email, password, **extra_fields): + return self._create_user(email=email, password=password, **extra_fields) - def __str__(self): - return u'%s %s' % (self.title, self.date) + def create_superuser(self, email, password): + return self._create_user(email=email, password=password, is_superuser=True, is_staff=True, is_active=True) - def __unicode__(self): - return u'%s %s' % (self.title, self.date) + def create_student(self, email, password, **extra_fields): + user = self.create_user(email=email, password=password, **extra_fields) + group = Group.objects.get(name='students') + user.groups.add(group) + return user - def save(self, *args, **kwargs): - if self.file and self.status != 'F': - self.status = 'F' - elif not self.file and self.status != 'W': - self.status = 'W' - super(Document, self).save(*args, **kwargs) - class Meta: - verbose_name = u'Документ' - verbose_name_plural = u'Документы' +class User(AbstractBaseUser, PermissionsMixin): + social_choices = ((0, "Facebook"), (1, "Vk"), (2, "Однокласники"), (3, "Gmail"),) + email = models.EmailField(_('email address'), unique=True) + first_name = models.CharField(_('first name'), max_length=30, blank=True, default='Guest') + last_name = models.CharField(_('last name'), max_length=30, blank=True) + date_joined = models.DateTimeField(_('date joined'), auto_now_add=True) + is_staff = models.BooleanField(verbose_name='флаг персонала', default=False, + help_text='Определяет разрешение пользователя на вход в административную часть.') + is_active = models.BooleanField(verbose_name='активен', default=False, + help_text='Определяет активен ли пользователь в системе. Снимите флаг, ' + 'вместо удаления пользователя.') + is_blocked = models.BooleanField(verbose_name='заблочен', default=False, + help_text='Определяет заблокирован ли пользователь. Поставьте флаг, ' + 'если знаете, что это нехороший человек.') -class Questionnaire(models.Model): - GENDER = ( - ('M', 'Мужчина'), - ('W', 'Женщина') - ) - EXP = ( - ('1', 'Только начинаю'), - ('2', 'Да, менее года'), - ('3', 'Да, 1-2 года'), - ('4', 'Да, более 2 лет') - ) + objects = CustomUserManager() - AIM = ( - ('1', 'Да, в офисе'), - ('2', 'Да, свой проект'), - ('3', 'Да, на фрилансе'), - ('4', 'Нет, изучаю для себя') - ) - AGE = ( - ('1', 'до 18'), - ('2', '18-25'), - ('3', '25-30'), - ('4', '30-40'), - ('5', 'больше 40') - ) - FULLY = ( - ('1', 'Флаги'), - ('2', 'Свободный ответ'), - ('3', 'Завершено') - ) - fully = models.CharField(verbose_name=u'Стадия', max_length=1, choices=FULLY, default=1) # Завершенность заполения - steps = models.IntegerField(verbose_name=u'Количество показов', default=0, help_text=u'Количество показов для заполнения') - user = models.ForeignKey(User, verbose_name=u'Пользователь') - male = models.CharField(verbose_name=u'Пол', choices=GENDER, max_length=1, null=True, blank=True) - city = models.CharField(verbose_name=u'Город', max_length=255, null=True, blank=True) - experience = models.CharField(verbose_name=u'Опыт', max_length=1, choices=EXP, null=True, blank=True) - aim = models.CharField(verbose_name=u'Цель обучения', max_length=1, choices=AIM, null=True, blank=True) - age = models.CharField(verbose_name=u'Возраст', max_length=1, choices=AGE, null=True, blank=True) - description = models.TextField(verbose_name=u'Свободны ответ', blank=True) + USERNAME_FIELD = 'email' + REQUIRED_FIELDS = [] - def __str__(self): - return u'%s %s' % (self.user, self.get_fully_display()) + def get_full_name(self): + full_name = '%s %s' % (self.first_name, self.last_name) + return full_name.strip() - def __unicode__(self): - return u'%s %s' % (self.user, self.get_fully_display()) + def get_short_name(self): + return self.first_name class Meta: - verbose_name = u'Акета' - verbose_name_plural = u'Анкеты' + verbose_name = _('user') + verbose_name_plural = _('users') -# Новое API class ActiveObject(models.Model): user = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Студент') course = models.ForeignKey(to=Course, verbose_name=u'Курс') diff --git a/access/new_urls.py b/access/new_urls.py deleted file mode 100644 index dea2ecb..0000000 --- a/access/new_urls.py +++ /dev/null @@ -1,12 +0,0 @@ -from django.conf.urls import url -from access import new_view as views - -urlpatterns = [ - url(r'teachers/$', views.TeacherListView.as_view()), - url(r'info/$', views.InfoUserView.as_view()), - url(r'check/$', views.CheckUserView.as_view()), - url(r'registration/$', views.RegistrationView.as_view()), - url(r'change_password/$', views.ChangePasswordView.as_view()), - url(r'login/$', views.LoginView.as_view()), - url(r'logout/$', views.LogoutView.as_view()), -] \ No newline at end of file diff --git a/access/new_view.py b/access/new_view.py deleted file mode 100644 index 6df40c0..0000000 --- a/access/new_view.py +++ /dev/null @@ -1,101 +0,0 @@ -from django.contrib.auth import get_user_model -from django.contrib import auth -from rest_framework.views import APIView -from rest_framework.renderers import JSONRenderer -from rest_framework.response import Response - -from access.serializers import UserInitSerializer -from courses.models import Course - - -class TeacherListView(APIView): - renderer_classes = (JSONRenderer,) - status_code = 200 - - def get(self, request): - kwargs = dict( - in_role='T', - is_active=True, - reg_status=4, - ) - res = [] - course_id = request.GET.get('course_id', 0) - if course_id: - kwargs['course_teachers'] = Course.objects.get(id=course_id) - for teacher in get_user_model().objects.filter(**kwargs): - res.append(teacher.full_name()) - return Response(res, self.status_code) - - -class CheckUserView(APIView): - renderer_classes = (JSONRenderer,) - status_code = 200 - - def get(self, request): - if request.user.is_authenticated() and\ - (request.user.in_role in ['M', 'S', 'S2', 'A', 'T'] or request.user.is_admin): - return Response(True, status=self.status_code) - return Response(False, status=self.status_code) - - -class InfoUserView(APIView): - renderer_classes = (JSONRenderer,) - status_code = 200 - - def get(self, request): - if request.user.is_authenticated(): - return Response(UserInitSerializer(request.user).data, status=self.status_code) - return Response('anonymous', status=self.status_code) - - -class RegistrationView(APIView): - renderer_classes = (JSONRenderer,) - - @staticmethod - def post(request): - try: - user = get_user_model().objects.get(email=request.JSON['email'].lower()) - except get_user_model().DoesNotExist: - user = get_user_model().objects.create_user( - email=request.JSON['email'].lower(), - ) - user.set_password(request.JSON['password']) - user.reg_status = '2' - user.save() - return Response(UserInitSerializer(user).data, status=200) - - -class ChangePasswordView(APIView): - renderer_classes = (JSONRenderer,) - - @staticmethod - def post(request): - if request.user.is_authenticated and not request.user.check_password(request.JSON['old_password']): - return Response("Неверный пароль", status=404) - request.user.set_password(request.JSON['new_password']) - request.user.save() - return Response("Пароль был изменён", status=200) - - -class LoginView(APIView): - renderer_classes = (JSONRenderer,) - - @staticmethod - def post(request): - if not request.user.is_authenticated(): - user = auth.authenticate(email=request.JSON.get('email'), password=request.JSON.get('password')) - try: - auth.login(request, user) - except AttributeError: - return Response("Неверный пароль", status=404) - return Response(UserInitSerializer(request.user).data, status=200) - - -class LogoutView(APIView): - renderer_classes = (JSONRenderer,) - - @staticmethod - def post(request): - if request.user.is_authenticated(): - auth.logout(request) - return Response(status=204) \ No newline at end of file diff --git a/access/out_api.py b/access/out_api.py deleted file mode 100755 index e434316..0000000 --- a/access/out_api.py +++ /dev/null @@ -1,448 +0,0 @@ -# coding=utf-8 -import datetime - -from lms.decors import out_api_decor, api_decor -from access.models import TrafSource, User, TrafHistory # , UserSync -from lms.regex import check_email -from management.letters import sent_registration -from finance.models import Price, Bill -from lms.tools import out_date_format -import hashlib -from django.contrib import auth -from lms.settings import SECRET_KEY, SUPERVISOR, MANAGER -from django.http import Http404 - - -@api_decor(without_auth=False) -def set_in_user(request, context): - # Наша установка - data = None - context['code'] = '0' - context['response'] = '' - if request.user and request.user.is_authenticated() and request.user.is_admin: - if request.method: - if request.method == 'POST': - data = request.POST - elif request.method == 'GET': - data = request.GET - else: - raise Http404 - - if not data or not (data.get('SERVICE') or data.get('USER')) or (data.get('SERVICE') and not data.get('USER')): - context['response'] = u'REQUEST IS NOT VALID. ' \ - u'USER - user email (required) / ' \ - u'SERVICE - service token / ' \ - u'GIFT - will set bill in a payed status / ' \ - u'PRICE - set self price to the service' - return context - - service = None - if data.get('SERVICE'): - try: - service = Price.objects.get(key=data.get('SERVICE')) - except Price.DoesNotExist: - context['response'] = u'SERVICE NOT FOUND' - return context - - if data.get('USER') and check_email(data.get('USER')): - result, user = self_create_user(data.get('USER'), sent_letter=True) - context['response'] = 'USER CREATED.' if result else 'USER ALREADY EXISTS.' - - elif not check_email(data.get('USER')): - context['response'] = 'USER EMAIL IS NOT VALID' - - if service and user: - bill, created = Bill.objects.get_or_create(service=service, - gift=bool(data.get('GIFT')), - user=user, - status='F' if data.get('GIFT') else 'W', - manager=User.objects.get(email=MANAGER), - price=data['PRICE'] if data.get('PRICE') else service.cost) - if created: - if data.get('GIFT'): - context['response'] += ' ACCESS OPENED. IT IS A GIFT.' - else: - context['response'] += ' THIS OFFER SENT TO THE USER. THE SERVICE PRICE: %s' % str(bill.price) - - else: - context['response'] += ' BILL ALREADY EXISTS id:%s' % str(bill.id) - - return context - - -def self_check_token(token): - try: - source = TrafSource.objects.get(on=True, token=token) - except TrafSource.DoesNotExist: - return [False, None] - else: - return [True, source] - - -def self_check_user_exists(email): - email = email.lower() - try: - user = User.objects.get(email=email) - except User.DoesNotExist: - return [False, None] - else: - return [True, user] - - -def self_create_user(email, phone=None, sent_letter=True): - email = email.lower() - try: - user = User.objects.get(email=email) - except User.DoesNotExist: - user = User.objects.create_user(email=email, sent_letter=sent_letter) - user.reg_status = '1' - user.refer = 'B' - user.is_active = False - if phone: - user.phone = phone - user.save() - return [True, user] - - else: - return [False, user] - - -def self_create_bill(user, service_key, uid=None): - # Создание счета для пользователя по ключу услуги - description = u'' - bill = None - result = False - try: - price = Price.objects.get(key=service_key) - except Price.DoesNotExist: - description = u'Счет по ключу не найден' - else: - bill, c = Bill.objects.get_or_create(user=user, manager=User.objects.get(email=SUPERVISOR), service=price) - - if bill.status == 'F': - description = u'Счет для данного пользователя уже был создан {0}'.format( - out_date_format(bill.finish_date, no_time=True)) - result = False - else: - result = True - description = u'Счет успешно создан. Приятного обучения' - if bill.status in ['C', 'H']: - bill.status = 'P' - bill.status_changed = datetime.datetime.now() - bill.save() - - if uid: - bill.admitad_uid = uid - bill.save() - - return [result, description, bill] - - -def code_dict(d): - # Преобразование словаря для передачи по HTTP - return u'||'.join(list([u'{0}|{1}'.format(key, value) for key, value in d.items()])) - - -def decode_dict(s): - # Расшифровка словаря из строки, переданого по HTTP - result = {} - for one in s.split(u'||'): - __tmp = one.split(u'|') - result[__tmp[0]] = __tmp[1] - return result - - -def get_sync_data(user): - # Синхронизировать пользователя с остальными LMS - # Отправить в LMS измнениея по пользователю или нового пользователя - # POST['user'] = {} # Поля с полной информацией пользователя - _data = {} - _keys = [] - exclude = ['id', 'customer', 'deactivate', 'delay', 'delay_description', 'delay_date', 'changed_email', 'status', - 'last_time', 'date_joined', 'avatar', 'last_login', 'activate_time', 'in_avatar'] - - for key in user._meta.local_concrete_fields: - if key.name not in exclude: - _tmp = key.value_to_string(user) - if _tmp: - _keys.append(key.name) - _data[key.name] = _tmp - - _tmp = code_dict(_data) - return {'data': _tmp, - 'hash': hashlib.md5(_tmp.encode('utf-8')).hexdigest()} - - -''' -def sent_sync_user(user): - data = get_sync_data(user) - data['secret_key'] = SECRET_KEY - data['source'] = DOMAIN - ## Если провал на одном из этапов - пропустить синхронизацию этого пользователя - # Авторизация на сервисе под системным пользователем - result = 0 - for HOST in REL_LMS: - __tmp = HOST['protocol'] + HOST['url'] - if __tmp != DOMAIN: - log = UserSync.objects.create(user=user, source=DOMAIN, dist=__tmp, data=str(data)) - _request = requests.post(__tmp + 'access/sync_user/', data=data) - if _request.status_code == 200: - _tmp = ast.literal_eval(_request.text) - if _tmp['code'] == '1': - result += 1 - log.good_sync() - else: - log.fail_sync() - else: - log.fail_sync() - - return result == len(REL_LMS)-1 -''' - - -@out_api_decor(without_auth=True, method='POST', need_keys=['email', 'password', 'secret_key'], check_request=True) -def service_auth(request, context): - # Удаленная авторизация для внутренних процессов - # Авторизация - if request.POST['secret_key'] == SECRET_KEY: - email = request.POST['email'].lower() - user = auth.authenticate(email=email, password=request.POST.get('password')) - - if user is not None: - context['code'] = '1' - context['response'] = u'AUTH_SUCCESS' - auth.login(request, user) - - elif user is None: - context['response'] = u'По введенным данным пользователь не найден' - context['code'] = '0' - - else: - context['response'] = u"Не верные данные. Повторите попытку" - context['code'] = '0' - else: - context['response'] = u'AUTH SUCCESS' - context['code'] = '0' - return context - - -''' -@out_api_decor(without_auth=True, method='POST', need_keys=['secret_key', 'data', 'hash', 'source'], check_request=True) -def sync_user(request, context): - if request.POST['secret_key'] == SECRET_KEY: - - if hashlib.md5(request.POST['data'].encode('utf-8')).hexdigest() != request.POST['hash']: - context['code'] = '0' - context['data'] = '' - context['response'] = u'Не сходится хеш данных' - return context - - data = decode_dict(request.POST['data']) - - # Получение пользователя для вставки - try: - user = User.objects.get(email=data['email']) - except User.DoesNotExist: - # Создать пользователя - user = User.objects.create(email=data['email']) - log = UserSync.objects.create(user=user, source=request.POST['source'], dist=DOMAIN, data=str(request.POST['data'])) - save = False - if 'refer' in data and user.refer != data['refer']: - user.refer = data['refer'] - save = True - - if 'refer_source' in data and user.refer_source != data['refer_source']: - user.refer_source = data['refer_source'] - save = True - - if 'private' in data and user.private != data['private']: - user.private = data['private'] - save = True - - if 'interactive_key' in data and user.interactive_key != data['interactive_key']: - user.interactive_key = data['interactive_key'] - save = True - - if 'email' in data and user.email != data['email']: - user.email = data['email'] - save = True - - if 'phone' in data and user.phone != data['phone']: - user.phone = data['phone'] - save = True - - if 'back_phone' in data and user.back_phone != data['back_phone']: - user.back_phone = data['back_phone'] - save = True - - if 'in_role' in data and user.in_role != data['in_role']: - user.in_role = data['in_role'] - save = True - - if 'unique_role' in data and user.unique_role != data['unique_role']: - user.unique_role = data['unique_role'] - save = True - - if 'city' in data and user.city != data['city']: - user.city = data['city'] - save = True - - if 'b_day' in data and user.b_day != data['b_day']: - user.b_day = data['b_day'] - save = True - - if 'token' in data and user.token != data['token']: - user.token = data['token'] - save = True - - if 'reg_status' in data and user.reg_status != data['reg_status']: - user.reg_status = data['reg_status'] - save = True - - if 'is_active' in data and user.is_active != data['is_active']: - user.is_active = data['is_active'] - save = True - - if 'is_admin' in data and user.is_admin != data['is_admin']: - user.is_admin = data['is_admin'] - save = True - - if 'is_staff' in data and user.is_staff != data['is_staff']: - user.is_staff = data['is_staff'] - save = True - - if 'fname' in data and user.fname != data['fname']: - user.fname = data['fname'] - save = True - - if 'name' in data and user.name != data['name']: - user.name = data['name'] - save = True - - if 'oname' in data and user.oname != data['oname']: - user.oname = data['oname'] - save = True - - if 'skype' in data and user.skype != data['skype']: - user.skype = data['skype'] - save = True - - if 'facebook' in data and user.facebook != data['facebook']: - user.facebook = data['facebook'] - save = True - - if 'vk' in data and user.vk != data['vk']: - user.vk = data['vk'] - save = True - - if 'linkedin' in data and user.linkedin != data['linkedin']: - user.linkedin = data['linkedin'] - save = True - - if 'odnoklassniki' in data and user.odnoklassniki != data['odnoklassniki']: - user.odnoklassniki = data['odnoklassniki'] - save = True - - if 'password' in data and user.password != data['password']: - user.password = data['password'] - save = True - - if save: - user.save() - log.good_sync() - context['code'] = '1' - else: - log.fail_sync() - - else: - raise Http404 - return context -''' - - -@out_api_decor(without_auth=True, need_keys=['token', 'email'], method='POST', check_request=True) -def create_user(request, context): - # Создание пользователя - # TODO: Политика использования токена - res = False - result, source = self_check_token(request.POST['token']) - if not result: - context['code'] = '0' - description = u'Не найден активный источник' - context['response'] = description - return context - - result, user = self_check_user_exists(request.POST['email']) - if result: - if user.is_active and user.reg_status == '4': - context['code'] = '0' - description = u'Пользователь уже существует и активен' - context['response'] = description - else: - context['code'] = '1' - res = True - description = u'Пользователь уже существует. Отправлено повторное письмо активации' - context['response'] = description - sent_registration(user, title=u'Повторное письмо активации') - return context - else: - result, user = self_create_user(request.POST['email'], - phone=request.POST['phone'] if request.POST.get('phone') else None) - context['code'] = '1' - res = True - description = u'Пользователь создан. На указанный email отправлено письмо активации' - context['response'] = description - - ref_history = TrafHistory.objects.create(action='C', source=source, token=request.POST['token'], data=request.POST, - result_description=description, result=res) - user.traf_source = ref_history - user.save() - return context - - -@out_api_decor(without_auth=True, check_request=True, need_keys=['token', 'service', 'email'], method='POST') -def create_bill(request, context): - # TODO: Политика использования токена - result, source = self_check_token(request.POST['token']) - if not result: - context['code'] = '0' - context['response'] = u'Не найден активный источник' - return context - - result, user = self_check_user_exists(request.POST['email']) - if result: - if not user.is_active or user.reg_status != '4': - sent_registration(user, title=u'Повторное письмо активации') - if request.POST.get('phone') and user.phone != request.POST.get('phone'): - user.phone = request.POST['phone'] - user.save() - else: - result, user = self_create_user(request.POST['email'], - phone=request.POST['phone'] if request.POST.get('phone') else None) - - result, description, bill = self_create_bill(user, request.POST['service'], - request.POST['uid'] if request.POST.get('uid') else None) - context['code'] = '1' if result else '0' - context['response'] = description - context['data'] = bill.get_face() - rel_source = TrafHistory.objects.create(action='O', source=source, token=request.POST['token'], data=request.POST, - result_description=description, result=True if result else False) - bill.traf_source = rel_source - bill.save() - return context - - -@out_api_decor(without_auth=True, need_keys=['token', 'data'], method='POST', check_request=True) -def set_lendos_data(request, context): - # Создание пользователя - res = False - result, source = self_check_token(request.POST['token']) - if not result: - context['code'] = '0' - description = u'Не найден активный источник' - context['response'] = description - return context - - TrafHistory.objects.create(action='D', source=source, token=request.POST['token'], data=request.POST['data'], - result_description='Данные из форм', result=res) - return context diff --git a/access/serializers.py b/access/serializers.py index 86df184..c1d9582 100644 --- a/access/serializers.py +++ b/access/serializers.py @@ -1,22 +1,33 @@ from django.contrib.auth import get_user_model from rest_framework import serializers -from access.models import ExtraPrivilege +from access.models import ExtraPrivilege, Account + + +class AccountSerializer(serializers.ModelSerializer): + gender = serializers.SerializerMethodField() + + class Meta: + model = Account + exclude = ('owner', 'id', ) + + @staticmethod + def get_gender(self): + return self.get_gender_display() class UserInitSerializer(serializers.ModelSerializer): - in_role = serializers.SerializerMethodField() + account = serializers.SerializerMethodField() class Meta: model = get_user_model() - fields = ['id', 'email', 'phone', 'name', 'in_avatar', - 'fname', 'oname', 'city', 'b_day', 'in_role',] + fields = ('id', 'email', 'first_name', 'last_name', 'account', ) @staticmethod - def get_in_role(self): - return self.get_in_role_display() + def get_account(self): + return AccountSerializer(self.account).data class ExtraPrivilegeSerializer(serializers.ModelSerializer): class Meta: model = ExtraPrivilege - exclude = ('user',) \ No newline at end of file + exclude = ('user', ) \ No newline at end of file diff --git a/access/teach_urls.py b/access/teach_urls.py deleted file mode 100755 index d8f83b8..0000000 --- a/access/teach_urls.py +++ /dev/null @@ -1,13 +0,0 @@ -from access import teach_views as views -from django.conf.urls import url - -urlpatterns = [ - url(r'profile/$', views.profile), - url(r'homeworks/([0-9]{1,99})$', views.homeworks), - url(r'comments/([0-9]{1,99})$', views.comments), - url(r'exams/([0-9]{1,99})$', views.exams), - url(r'materials/([0-9]{1,99})$', views.materials), - url(r'workshop/homework/([0-9]{1,99})$', views.homework_workshop), - url(r'workshop/exam/([0-9]{1,99})$', views.exam_workshop), - url(r'history/', views.history) -] \ No newline at end of file diff --git a/access/teach_views.py b/access/teach_views.py deleted file mode 100755 index e454c24..0000000 --- a/access/teach_views.py +++ /dev/null @@ -1,150 +0,0 @@ -# coding=utf-8 -from django.http import Http404 -from lms.decors import response_decor -from lms.tools import check_role -from courses.models import Course -from journals.models import HomeworkJ, ExamJ, HomeworkTry, ExamTry - - -@response_decor(template='teach_profile.html') -def profile(request): - checker = check_role(request.user, 'T') - if checker['result']: - # Быстрый список активных студентов - all_homeworks = [] - homeworks = {} - exams = {} - - for journal in HomeworkTry.objects.filter(teacher=request.user, f_date=None).exclude(success=True, date=None - ).order_by('date'): - if journal.parent.get_status_flag() not in ['N', 'F']: - title = (journal.material.course.get_title(), - journal.material.get_title(), - journal.material.id, - journal.material.theme.sort, - journal.material.get_icon()) - if not title in homeworks: homeworks[title] = [] - homeworks[title].append(journal) - - for journal in HomeworkTry.objects.filter(teacher=request.user, f_date=None).exclude(success=True, date=None - ).order_by('date'): - if journal.parent.get_status_flag() not in ['N', 'F']: - all_homeworks.append(journal) - - for journal in ExamTry.objects.filter(teacher=request.user, f_date=None).exclude(success=True, date=None - ).order_by('date'): - - if journal.parent.get_status_flag() not in ['N', 'F']: - title = (journal.material.course.get_title(), - journal.material.get_title(), - journal.material.id) - if not title in exams: exams[title] = [] - exams[title].append(journal) - - return { - 'courses': Course.objects.filter(teachers__in=[request.user]).values('title', 'id'), - 'active_themes': homeworks, - 'active_exams': exams, - 'all_homeworks': all_homeworks, - } - else: - return checker - - -@response_decor(template='teacher_homeworks.html') -def homeworks(request, course): - # Список домашних заданий по курсу на проверку - checker = check_role(request.user, 'T') - if checker['result']: - return {'T': 'H', - 'course': Course.objects.get(id=course), - 'courses': Course.objects.filter(teachers__in=[request.user]).values('title', 'id'), - 'homeworks': HomeworkTry.objects.filter(teacher=request.user).order_by( - '-date') - } - else: - return checker - - -@response_decor(template='teacher_comments.html') -def comments(request, course): - # Комментари для преподавателя - checker = check_role(request.user, 'T') - if checker['result']: - return {'courses': Course.objects.filter(teachers__in=[request.user]).values('title', 'id')} - else: - return checker - - -@response_decor(template='teacher_materials.html') -def materials(request, course): - # Материалы курсов - checker = check_role(request.user, 'T') - if checker['result']: - return {'T': 'M', - 'courses': Course.objects.filter(teachers__in=[request.user]), - 'course': Course.objects.get(id=course)} - else: - return checker - - -@response_decor(template='teacher_exams.html') -def exams(request, exam): - checker = check_role(request.user, 'T') - if checker['result']: - return {'T': 'E', - 'course': Course.objects.get(id=exam), - 'courses': Course.objects.filter(teachers__in=[request.user]).values('title', 'id'), - 'exams': ExamTry.objects.filter(teacher=request.user).order_by('-date')} - else: - return checker - - -@response_decor(template='workshop_homework.html') -def homework_workshop(request, homework): - if request.user.in_role in ['T', 'S2', 'A']: - try: - journal = HomeworkJ.objects.get(id=homework) - except HomeworkJ.DoesNotExist: - raise Http404 - else: - if not journal.teacher or journal.teacher == request.user or request.user.in_role in ['S2', 'A']: - return { - 'homework': journal.get_face(request.user), - 'student': journal.student, - 'theme': journal.material.theme - } - else: - raise Http404 - else: - raise Http404 - - -@response_decor(template='workshop_exam.html') -def exam_workshop(request, exam): - if request.user.in_role in ['T', 'S2', 'A']: - try: - journal = ExamJ.objects.get(id=exam) - except ExamJ.DoesNotExist: - raise Http404 - else: - if not journal.teacher or journal.teacher == request.user or request.user.in_role in ['S2', 'A']: - return { - 'exam': journal.get_face(request.user), - 'student': journal.student, - 'theme': journal.material.theme - } - else: - raise Http404 - else: - raise Http404 - - -@response_decor(template='teacher_history.html') -def history(request): - if request.user.in_role in ['T', 'S2', 'A']: - return {'hw': HomeworkJ.objects.filter(teacher=request.user, success=True).exclude(f_date=None), - 'courses': Course.objects.filter(teachers__in=[request.user]).values('title', 'id') - } - else: - raise Http404 diff --git a/access/templatetags/__init__.py b/access/templatetags/__init__.py deleted file mode 100755 index a1208ca..0000000 --- a/access/templatetags/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__author__ = 'baryshnikov' diff --git a/access/templatetags/course_filter.py b/access/templatetags/course_filter.py deleted file mode 100755 index c4ab09e..0000000 --- a/access/templatetags/course_filter.py +++ /dev/null @@ -1,116 +0,0 @@ -from django import template -from access.models import User -from courses.models import CourseTheme, Lesson, Exam, Course, Homework -from journals.models import ExamJ, HomeworkJ -from finance.tools import system_check_bill - -register = template.Library() - - -def getUserfactory(user): - if user: - try: - user = User.objects.get(id=user) - except User.DoesNotExist: - user = None - return user - - -@register.filter -def get_theme_color(theme, student): - __theme = CourseTheme.objects.get(id=theme) - return __theme.get_color(getUserfactory(student)) - - -@register.filter -def get_next_lesson_button(lesson, student): - return Lesson.objects.get(id=lesson).get_next_button(getUserfactory(student)) - - -@register.filter -def get_homework_status_html(theme, student): - __theme = CourseTheme.objects.get(id=theme) - return __theme.homework_status_html(getUserfactory(student)) - - -@register.filter -def get_homework_status(theme, student): - __course = CourseTheme.objects.get(id=theme) - return __course.homework_status(getUserfactory(student)) - - -@register.filter -def get_theme_description(theme, student): - __theme = CourseTheme.objects.get(id=theme) - return __theme.get_description(getUserfactory(student)) - - -@register.filter -def get_lesson_status_name(lesson, student): - __lesson = Lesson.objects.get(id=lesson) - return __lesson.get_status_name(getUserfactory(student)) - - -@register.filter -def get_lesson_status(lesson, student): - __lesson = Lesson.objects.get(id=lesson) - return __lesson.get_status(getUserfactory(student)) - - -@register.filter -def get_theme_status(lesson, student): - __theme = CourseTheme.objects.get(id=lesson) - return __theme.get_status(getUserfactory(student)) - - -@register.filter -def get_exam_color(exam, student): - __exam = Exam.objects.get(id=exam) - return __exam.get_color(getUserfactory(student)) - - -@register.filter -def get_progress_persent(course, student): - __course = Course.objects.get(id=course) - return __course.progress_persent(getUserfactory(student)) - - -@register.filter -def get_exam_status(course, student): - __course = Course.objects.get(id=course) - return __course.get_exam_status(getUserfactory(student)) - - -@register.filter -def check_bill(course, user): - return system_check_bill(Course.objects.get(id=course), getUserfactory(user)) - - -@register.filter -def get_actual_lesson_id(theme, user): - return CourseTheme.objects.get(id=theme).get_actual_lesson_id(user) - - -@register.filter -def get_button(theme, user): - return CourseTheme.objects.get(id=theme).get_button(getUserfactory(user)) - - -@register.filter -def get_exam_status_html(course, user): - return Course.objects.get(id=course).exam_status_html(user) - - -@register.filter -def get_exam_button(course, user): - return Exam.objects.get(course=Course.objects.get(id=course)).get_button(getUserfactory(user)) - - -@register.filter -def get_actual_lesson_id(theme, user): - return CourseTheme.objects.get(id=theme).get_actual_lesson_id(user) - - -@register.filter -def get_student_homework_comments(theme, user): - return HomeworkJ.objects.filter(student=getUserfactory(user), homework=Homework.objects.get(id=CourseTheme.objects.get(id=theme))).exclude(status='F') diff --git a/access/urls.py b/access/urls.py old mode 100755 new mode 100644 index 3f72a60..101ee5f --- a/access/urls.py +++ b/access/urls.py @@ -1,43 +1,12 @@ -from access import views -from access import api -from access import out_api -from django.conf.urls import url - -urlpatterns = [ - url(r'accept_forgot/$', views.accept_forgot), - url(r'activate_email/$', views.activate_email), - url(r'all_actions/$', views.all_actions), - url(r'get_subscription_data/$', api.get_subscription_data), - url(r'send_subscription_data/$', api.send_subscription_data), - url(r'forgot/$', api.forgot), - url(r'fast_auth/$', views.fast_auth), - url(r'auth/', api.auth_in), - url(r'auth_from_admin/', api.auth_from_admin), - url(r'activate/$', views.activate), - url(r'profile/$', views.profile), - url(r'profile/(?P.*)/$', views.profile_view), - url(r'registration/$', api.registration), - url(r'reg_step/$', api.reg_step), - url(r'logout/$', views.logout_in), - url(r'come_off/$', views.come_off), - url(r'check_auth/$', api.check_auth), - url(r'get_settings_data/$', api.get_settings_data), - url(r'send_settings_data/$', api.send_settings_data), - url(r'get_user_role/$', api.get_user_role), - url(r'new_role/$', api.new_role), - url(r'change_password/$', api.change_password), - url(r'by_error/$', views.by_error), - url(r'auth_error/$', views.auth_error), - url(r'access_error/$', views.access_error), - url(r'check_active/$', api.check_active), - url(r'resent_active_email$', api.resent_active_email), - url(r'change_private/$', api.change_private), - url(r'create_user/$', out_api.create_user), - url(r'create_bill/$', out_api.create_bill), - url(r'set_lendos_data/$', out_api.set_lendos_data), - #url(r'sync_user/$', out_api.sync_user), - url(r'search_user/$', api.search_user), - url(r'find_user/$', api.find_user), - url(r'service_auth/$', out_api.service_auth), - url(r'set_in_user/$', out_api.set_in_user) -] +from django.conf.urls import url +from access import views as views + +urlpatterns = [ + url(r'teachers/$', views.TeacherListView.as_view()), + url(r'info/$', views.InfoUserView.as_view()), + url(r'check/$', views.CheckUserView.as_view()), + url(r'registration/$', views.RegistrationView.as_view()), + url(r'change_password/$', views.ChangePasswordView.as_view()), + url(r'login/$', views.LoginView.as_view()), + url(r'logout/$', views.LogoutView.as_view()), +] \ No newline at end of file diff --git a/access/views.py b/access/views.py old mode 100755 new mode 100644 index 012a1ee..16517d9 --- a/access/views.py +++ b/access/views.py @@ -1,234 +1,89 @@ -# -*- coding: utf-8 -*- -from django.contrib import auth -from django.contrib.auth import logout -from django.http import Http404 -from django.shortcuts import redirect -from access.models import User, ActionJ, Document -from lms.tools import random_string, condition_factory, check_role -from lms.decors import response_decor -from courses.tools import get_user_achievements, get_user_diploms, get_user_completed_courses_count, \ - get_user_skills_size_count, get_user_achievements_count -from courses.tools import get_user_skills -from journals.models import TeacherJ -from management.letters import sent_forgot_password -from finance.models import Bill -from management.models import Comment -from library.models import Article - - -@response_decor(template='index.html', without_auth=True) -def activate_email(request): - # Активация пользователя через почту - if request.GET.get('token') and request.GET.get('email'): - try: - email = request.GET['email'].lower() - user = User.objects.get(email=email, token=request.GET['token']) - except User.DoesNotExist: - return {'redirect': '/404/?error=Ссылка устарела. Дождитесь письма с актуальной ссылкой'} - else: - user.email = user.changed_email - user.save() - user.change_token() - return {'DIALOG': 'activate_email'} - else: - # TODO: Отправлять пользователя в тупиковую страницу, а не на 404 - raise Http404 - - -@response_decor(template='index.html', without_auth=True) -def accept_forgot(request): - # Подтверждение почты при восстановлении - if request.GET.get('token') and request.GET.get('email'): - try: - email = request.GET['email'].lower() - user = User.objects.get(email=email, token=request.GET['token']) - except User.DoesNotExist: - return {'redirect': '/404/?error=Ссылка устарела. Дождитесь письма с актуальной ссылкой'} - else: - pas = random_string(length=6).upper() - user.set_password(pas) - user.change_token() - sent_forgot_password(user, pas) - return {'DIALOG': 'accept_forgot'} - else: - # TODO: Отправлять пользователя в тупиковую страницу, а не на 404 - raise Http404 - - -@response_decor(template='activation.html', without_auth=True) -def activate(request): - # Страница активации пользователя - condition = condition_factory([ - {'condition': request.GET.get('email'), 'error': u'Поле пользователя передано не корректно'}, - {'condition': request.GET.get('token'), 'error': u'Поле токена передано не корректно'}, - {'condition': request.GET.get('step'), 'error': u'Не верно передан этап'} - ]) - if condition['code'] == '1': - try: - email = request.GET['email'].lower() - user = User.objects.get(email=email, token=request.GET['token']) - except User.DoesNotExist: - return {'redirect': '/404/?error=Ссылка устарела. Дождитесь письма с актуальной ссылкой'} - else: - if not user.is_active or user.reg_status != '4': - user.save() - return {'step': user.reg_status, 'token': request.GET['token'], 'email': email, - 'phone': user.phone if user.phone else None} - - else: - raise Http404 - else: - raise Http404 - - -@response_decor(template='profile.html', without_auth=True) -def profile(request): - if request.user.is_authenticated(): - checker = check_role(request.user, 'U') - if checker['result']: - courses = [i.get_head_face() for i in - TeacherJ.objects.filter(student=request.user, course__public=True).exclude(progress=0)] - return {'in_user': None, - 'courses': courses, - 'achievements': get_user_achievements(request.user), - 'skills': get_user_skills(request.user), - 'diploms': get_user_diploms(request.user), - 'completed_courses': get_user_completed_courses_count(request.user), - 'got_achievements': get_user_achievements_count(request.user), - 'skills_size': get_user_skills_size_count(request.user), - 'documents': Document.objects.filter(user=request.user), - 'b_bills': Bill.objects.filter(user=request.user), - 'articles': [i.get_face(request.user) for i in Article.objects.filter(views__id=request.user.id)], - 'forum_ask': Comment.objects.filter(owner=request.user, status='Q'), - 'forum_ans': { - 'all': - Comment.objects.filter(owner=request.user, status='Q2'), - 'best': - Comment.objects.filter(owner=request.user, status='Q2', best=True).count() - } - } - else: - return checker - else: - return {'redirect': '/access/auth_error/'} - - -@response_decor(template='profile.html', without_auth=True) -def profile_view(request, view_id): - if view_id: - try: - user = User.objects.get(interactive_key=view_id) - except User.DoesNotExist: - raise Http404 - else: - if request.user.is_authenticated() and request.user.is_admin: - go = True - else: - go = False - if user.private == 'A' or user.private == 'L': - go = True - elif user.private == 'U': - if request.user.is_authenticated() and request.user.is_active: - go = True - elif user.private == 'B': - if request.user == user: - go = True - - if go: - courses = [i.get_head_face() for i in TeacherJ.objects.filter(student=user, course__public=True).exclude(progress=0)] - return {'in_user': user, - 'courses': courses, - 'achievements': get_user_achievements(user), - 'skills': get_user_skills(user), - 'diploms': get_user_diploms(user), - 'articles': [i.get_face(user) for i in Article.objects.filter(views__id=user.id)], - 'completed_courses': get_user_completed_courses_count(user), - 'got_achievements': get_user_achievements_count(user), - 'skills_size': get_user_skills_size_count(user), - 'forum_ask': Comment.objects.filter(owner=user, status='Q'), - 'forum_ans': { - 'all': - Comment.objects.filter(owner=user, status='Q2'), - 'best': - Comment.objects.filter(owner=user, status='Q2', best=True).count() - }} - else: - raise Http404 - - -def logout_in(request): - logout(request) - return redirect('/') - - -@response_decor(template='index.html') -def come_off(request): - # Деактивация подписок - context = {'code': 'error'} - condition = condition_factory([ - {'condition': request.GET.get('token'), 'error': u'В запросе не обнаружен токен'}, - {'condition': request.GET.get('right'), 'error': u'В запросе не обнаружено изменяемое право'} - ]) - - if condition['code'] == '1': - try: - user = User.objects.get(token=request.GET['token']) - except User.DoesNotExist: - context['response'] = u'Запрос не обработан' - else: - if user.rights.check_right(user, request.GET['right']): - if request.GET['right'] == 'feedback_follow': - user.rights.set_right('feedback_follow', False) - context['response'] = u'Подписка деактивирована' - context['code'] = u'info' - elif request.GET['right'] == 'news_follow': - user.rights.set_right('news_follow', False) - context['response'] = u'Подписка деактивирована' - context['code'] = u'info' - else: - context[ - 'response'] = u'Вы указали право, на которое не распространяется функция быстрого отключения' - else: - context['response'] = u'Вы уже описаны от данной рассылки' - else: - context['response'] = condition['response'] - context['code'] = '0' - - return {'response': context['response'], 'code': context['code']} - - -@response_decor(template='auth_error.html', without_auth=True) -def auth_error(request): - # Запрешен доступ - кабинет менеджера, пепода и.т.д. - return {} - - -@response_decor(template='access_error.html', without_auth=True) -def access_error(request): - # Закрытая страница - не открытый урок, дз и.т.д. - return {} - - -@response_decor(template='by_error.html', without_auth=True) -def by_error(request): - # Запрещен доступ по подпискеs - return {} - - -@response_decor(template='all_actions.html', without_auth=False) -def all_actions(request): - # Страница событий - return {'b_actions': ActionJ.objects.filter(student=request.user).order_by('-id')} - - -@response_decor(template='index.html', without_auth=True) -def fast_auth(request): - # Авторизация по кнопке - # FIXME: Усилить проверку - if request.POST.get('email') and request.POST.get('password'): - email = request.POST['email'].lower() - user = auth.authenticate(email=email, password=request.POST['password']) - - if user is not None: - auth.login(request, user) - return {'redirect': '/'} +from django.contrib.auth import get_user_model +from django.contrib import auth +from rest_framework.views import APIView +from rest_framework.renderers import JSONRenderer +from rest_framework.response import Response + +from access.serializers import UserInitSerializer +from courses.models import Course + + +class TeacherListView(APIView): + renderer_classes = (JSONRenderer,) + status_code = 200 + + def get(self, request): + return Response([i.email for i in get_user_model().objects.filter(groups__name='teachers')], self.status_code) + + +class CheckUserView(APIView): + renderer_classes = (JSONRenderer,) + status_code = 200 + + def get(self, request): + if request.user.is_authenticated() and (request.user.is_staff or request.user.is_admin): + return Response(True, status=self.status_code) + return Response(False, status=self.status_code) + + +class InfoUserView(APIView): + renderer_classes = (JSONRenderer,) + status_code = 200 + + def get(self, request): + if request.user.is_authenticated(): + return Response(UserInitSerializer(request.user).data, status=self.status_code) + return Response('anonymous', status=self.status_code) + + +class RegistrationView(APIView): + renderer_classes = (JSONRenderer,) + + @staticmethod + def post(request): + try: + user = get_user_model().objects.get(email=request.JSON['email'].lower()) + except get_user_model().DoesNotExist: + user = get_user_model().objects.create_user( + email=request.JSON['email'].lower(), + ) + user.set_password(request.JSON['password']) + user.reg_status = '2' + user.save() + return Response(UserInitSerializer(user).data, status=200) + + +class ChangePasswordView(APIView): + renderer_classes = (JSONRenderer,) + + @staticmethod + def post(request): + if request.user.is_authenticated() and not request.user.check_password(request.JSON['old_password']): + return Response("Неверный пароль", status=404) + request.user.set_password(request.JSON['new_password']) + request.user.save() + return Response("Пароль был изменён", status=200) + + +class LoginView(APIView): + renderer_classes = (JSONRenderer,) + + @staticmethod + def post(request): + if not request.user.is_authenticated(): + user = auth.authenticate(email=request.JSON.get('email'), password=request.JSON.get('password')) + try: + auth.login(request, user) + except AttributeError: + return Response("Неверный пароль", status=404) + return Response(UserInitSerializer(request.user).data, status=200) + + +class LogoutView(APIView): + renderer_classes = (JSONRenderer,) + + @staticmethod + def post(request): + if request.user.is_authenticated(): + auth.logout(request) + return Response(status=204) \ No newline at end of file diff --git a/analytics/urls.py b/analytics/urls.py deleted file mode 100644 index 5b97d15..0000000 --- a/analytics/urls.py +++ /dev/null @@ -1,10 +0,0 @@ -from django.conf.urls import url -from analytics import views - -urlpatterns = [ - url(r'^$', views.index_view), - url(r'^theme/$', views.index_view_access_theme), - url(r'^theme/new/$', views.new_view_access_theme), - url(r'^homework/$', views.index_view_homework_wait), - url(r'^homework/new/$', views.new_view_homework_wait), -] \ No newline at end of file diff --git a/analytics/views.py b/analytics/views.py deleted file mode 100644 index 6ca748f..0000000 --- a/analytics/views.py +++ /dev/null @@ -1,155 +0,0 @@ -from django.shortcuts import render_to_response, redirect, render -import time, os, csv -from datetime import date - -from lms.settings import MEDIA_ROOT - -from courses.models import Course, CourseTheme, Homework, Exam -from journals.models import CourseThemeJ, HomeworkTry, ExamTry - -index_view = lambda request: render_to_response('analytics/index.html') - - -def index_view_decor(url): - def wrap(func): - def get_request(request): - start = request.GET.get('start', '') - end = request.GET.get('end', '') - - path = MEDIA_ROOT + url + 's' + start + 'e' + end + 'progress.csv' - - try: - with open(path, newline='') as file: - reader = csv.reader(file, delimiter=',', quotechar='|') - max = 0 - res = [] - for row in reader: - max = max if max > len(row) else len(row) - res1 = [] - for i in row: - k = i.split("$-$") - k = {'value': k[0], 'background': 'none'}\ - if len(i.split("$-$")) == 1 else {'value': k[0],'background': k[1]} - res1.append(k) - - res.append(res1) - for i in res: - for j in range(max - len(i)): - i.append({'value': 0, 'background': 'none'}) - first = ['Курсы'] - for i in range(max - 1): - first.append("Тема " + str(i + 1)) - except FileNotFoundError: - return redirect(url + "new/?start=" + start + "&end=" + end) - - date_create = time.ctime(os.stat(path).st_atime) - - context = { - 'body': res, - 'header': first, - 'date_create': date_create, - 'start': start, - 'end': end, - 'url': url, - } - - context.update(func()) - - return render(request, url[1:-1] + '.html', context=context) - - return get_request - - return wrap - - -@index_view_decor("/analytics/theme/") -def index_view_access_theme(): - return {} - - -@index_view_decor("/analytics/homework/") -def index_view_homework_wait(): - return {} - - -def new_view_decor(url): - def wrap(func): - def get_request(request): - start = request.GET.get('start', '') - end = request.GET.get('end', '') - - path = MEDIA_ROOT + url + 's' + start + 'e' + end + 'progress.csv' - - start_date = None - end_date = None - - try: - start_date = date(*[int(i) for i in start.split('-')]) - end_date = date(*[int(i) for i in end.split('-')]) - except ValueError: - pass - - if not check_date_validate(start_date, end_date): - return redirect(url) - - try: - with open(path, 'w', newline='') as csvfile: - func(end_date, start_date, csvfile) - return redirect(url + "?start=" + start + "&end=" + end) - - except FileNotFoundError: - os.makedirs(MEDIA_ROOT + url) - return redirect(url + "new/?start=" + start + "&end=" + end) - - return get_request - - return wrap - - -@new_view_decor("/analytics/theme/") -def new_view_access_theme(end_date, start_date, csvfile): - for course in Course.objects.order_by('sort'): - list = [course.title] - for i in CourseTheme.objects.filter(course=course): - kwargs = { - 'material': i, - 'success': True, - } - if end_date: - kwargs['student__last_time__lte'] = end_date - if start_date: - kwargs['student__last_time__gte'] = start_date - list.append(str(len(CourseThemeJ.objects.filter(**kwargs))) + ( - "$-$yellow" if i._type == 'Ex' else "")) - writercsv = csv.writer(csvfile, delimiter=',', quotechar='|') - writercsv.writerow(list) - - -@new_view_decor("/analytics/homework/") -def new_view_homework_wait(end_date, start_date, csvfile): - for course in Course.objects.order_by('sort'): - list = [course.title] - for i in CourseTheme.objects.filter(course=course): - kwargs = { - 'success': False, - 'expired': False, - 'f_date': None - } - if end_date: - kwargs['student__last_time__lte'] = end_date - if start_date: - kwargs['student__last_time__gte'] = start_date - list.append(str( - len(HomeworkTry.objects.filter(material=Homework.objects.filter(theme=i), **kwargs)) + - len(ExamTry.objects.filter(material=Exam.objects.filter(theme=i), **kwargs)) - )) - writercsv = csv.writer(csvfile, delimiter=',', quotechar='|') - writercsv.writerow(list) - - -def check_date_validate(start=None, end=None): - if start: - if end: - return (start < end) and (end < date.today()) - return start < date.today() - return end < date.today() if end else True diff --git a/api_v1/urls.py b/api_v1/urls.py index b37227a..aa457b0 100644 --- a/api_v1/urls.py +++ b/api_v1/urls.py @@ -1,7 +1,7 @@ from django.conf.urls import url, include urlpatterns = [ - url(r'courses/', include('courses.new_urls')), - url(r'users/', include('access.new_urls')), - url(r'journals/', include('journals.new_urls')), + url(r'courses/', include('courses.urls')), + url(r'users/', include('access.urls')), + url(r'journals/', include('journals.urls')), ] \ No newline at end of file diff --git a/celerybeat.pid b/celerybeat.pid deleted file mode 100644 index 998d95b..0000000 --- a/celerybeat.pid +++ /dev/null @@ -1 +0,0 @@ -28159 diff --git a/conf/gunicorn.conf.py b/conf/gunicorn.conf.py deleted file mode 100644 index 2264227..0000000 --- a/conf/gunicorn.conf.py +++ /dev/null @@ -1,6 +0,0 @@ -import os - -bind = "127.0.0.1:%(gunicorn_port)s" -workers = (os.sysconf("SC_NPROCESSORS_ONLN") * 2) + 1 -loglevel = "error" -proc_name = "%(project_name)s" diff --git a/conf/live_settings.py b/conf/live_settings.py deleted file mode 100644 index 2541543..0000000 --- a/conf/live_settings.py +++ /dev/null @@ -1,34 +0,0 @@ - -DATABASES = { - "default": { - # Ends with "postgresql_psycopg2", "mysql", "sqlite3" or "oracle". - "ENGINE": "django.db.backends.postgresql_psycopg2", - # DB name or path to database file if using sqlite3. - "NAME": "%(db_name)s", - # Not used with sqlite3. - "USER": "%(db_name)s", - # Not used with sqlite3. - "PASSWORD": "%(db_password)s", - # Set to empty string for localhost. Not used with sqlite3. - "HOST": "127.0.0.1", - # Set to empty string for default. Not used with sqlite3. - "PORT": "", - } -} - -SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTOCOL", "https") - -CACHE_MIDDLEWARE_SECONDS = 60 - -CACHES = { - "default": { - "BACKEND": "django.core.cache.backends.memcached.MemcachedCache", - "LOCATION": "127.0.0.1:11211", - } -} - -SESSION_ENGINE = "django.contrib.sessions.backends.cache" - -AWS_ACCESS_KEY_ID = '%(aws_key)s' -AWS_SECRET_ACCESS_KEY = '%(aws_secret)s' - diff --git a/conf/nginx.conf b/conf/nginx.conf deleted file mode 100644 index c54a645..0000000 --- a/conf/nginx.conf +++ /dev/null @@ -1,91 +0,0 @@ -upstream %(project_name)s { - server unix:%(application_path)s/app.sock; -} - -server { - listen 80; - server_name %(server_name)s; - return 301 https://%(server_name)s$request_uri; -} - -server { - gzip on; - gzip_disable "msie6"; - gzip_vary on; - gzip_proxied any; - gzip_comp_level 6; - gzip_buffers 16 8k; - gzip_http_version 1.1; - gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; - resolver 8.8.8.8 8.8.4.4 valid=300s; - resolver_timeout 5s; - keepalive_timeout 70; - client_max_body_size 4G; - server_name %(server_name)s; - add_header Strict-Transport-Security max-age=63072000; - add_header X-Frame-Options DENY; - add_header X-Content-Type-Options nosniff; - listen 443 ssl; - ssl on; - ssl_protocols TLSv1 TLSv1.1 TLSv1.2; - ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; - ssl_prefer_server_ciphers on; - ssl_certificate %(project_path)s/configs/skillbox_ssl/public.pem; - ssl_certificate_key %(project_path)s/configs/skillbox_ssl/privat.key; - ssl_stapling on; - ssl_stapling_verify on; - - - location /media { - autoindex on; - alias %(application_path)s/media; - } - - location /static { - autoindex on; - alias %(application_path)s/static; - log_not_found on; - } - - location / { - include uwsgi_params; - uwsgi_pass %(project_name)s; - } - - - location /robots.txt { - root %(application_path)s/static; - access_log off; - log_not_found off; - } - - location /favicon.ico { - root %(application_path)s/static/img; - access_log off; - log_not_found off; - } - -} - -server { - gzip on; - gzip_disable "msie6"; - gzip_vary on; - gzip_proxied any; - gzip_comp_level 6; - gzip_buffers 16 8k; - gzip_http_version 1.1; - gzip_types text/plain text/css application/json application/x-javascript text/xml applic$ - listen 80; - client_max_body_size 4G; - server_name s.skillbox.ru; - #error_log /var/www/logs/codemy/flnginx-error.log; - keepalive_timeout 5; - - root %(project_path)s; - - location / { - proxy_pass http://localhost:5555; - } -} - diff --git a/conf/supervisor.conf b/conf/supervisor.conf deleted file mode 100644 index 8170f82..0000000 --- a/conf/supervisor.conf +++ /dev/null @@ -1,46 +0,0 @@ -[program:uwsgi] -command = /usr/bin/uwsgi --ini %(project_path)s/uwsgi_prod.ini -stopasgroup = true -killasgroup = true - -; ================================== -; celery worker supervisor example -; ================================== - -[program:celery_codemy] -command=%(project_path)s/env/bin/celery worker -A lms --loglevel=INFO -directory=%(project_path)s -user=www-data -numprocs=1 -;stdout_logfile=/var/www/logs/codemy/celery-worker.log -;stderr_logfile=/var/www/logs/codemy/celery-worker.log -autostart=true -autorestart=true -startsecs=10 -stopwaitsecs = 600 -killasgroup=true - -[program:celery_beat_codemy] -command=%(project_path)s/env/bin/celery beat -A lms --schedule /var/lib/celery/beat.db --loglevel=INFO -directory=%(project_path)s -user=www-data -numprocs=1 -;stdout_logfile=/var/www/logs/codemy/celery-beat.log -;stderr_logfile=/var/www/logs/codemy/celery-beat.log -autostart=true -autorestart=true -startsecs=10 -priority=999 - -[program:celery_flower_codemy] -command=%(project_path)s/env/bin/celery -A lms flower -directory=%(project_path)s -user=www-data -numprocs=1 -;stdout_logfile=/var/www/logs/codemy/celery-flower.log -;stderr_logfile=/var/www/logs/codemy/celery-flower.log -autostart=true -autorestart=true -startsecs=10 -priority=600 - diff --git a/conf/uwsgi_prod.ini b/conf/uwsgi_prod.ini deleted file mode 100644 index 93268df..0000000 --- a/conf/uwsgi_prod.ini +++ /dev/null @@ -1,31 +0,0 @@ -[uwsgi] -chdir = %(project_path)s/ -env = DJANGO_SETTINGS_MODULE=lms.settings -virtualenv = %(project_path)s/env -module = lms.wsgi:application -socket = %(project_path)s/app.sock -logto = /var/log/uwsgi/skillbox.uwsgi.log -master = true -#processes = 8 -workers = 24 -# TODO configure memory lims and cheaper limits -harakiri = 220s -# disable request logging HTTP/200 -disable-logging = true -log-slow = 45s -log-5xx = true -log-4xx = true -log-big = 500000 -stats = :5050 -harakiri-verbose = true -enable-threads = true -thunder-lock = true -reload-mercy = 220s -worker-reload-mercy = 220s -mule-reload-mercy = 220s -chmod-socket = 666 -vacuum = true -plugins = python35 - -gid=www-data -uid=www-data diff --git a/configs/__init__.py b/configs/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/configs/celery.conf b/configs/celery.conf deleted file mode 100644 index 06fac65..0000000 --- a/configs/celery.conf +++ /dev/null @@ -1,40 +0,0 @@ -; ================================== -; celery worker supervisor example -; ================================== - -[program:celery_codemy] -command=/var/www/.envs/codemy/bin/celery worker -A lms --loglevel=INFO -directory=/var/www/projects/codemy/ -user=www-data -numprocs=1 -stdout_logfile=/var/www/logs/codemy/celery-worker.log -stderr_logfile=/var/www/logs/codemy/celery-worker.log -autostart=true -autorestart=true -startsecs=10 -stopwaitsecs = 600 -killasgroup=true - -[program:celery_beat_codemy] -command=/var/www/.envs/codemy/bin/celery beat -A lms --schedule /var/lib/celery/beat.db --loglevel=INFO -directory=/var/www/projects/codemy -user=www-data -numprocs=1 -stdout_logfile=/var/www/logs/codemy/celery-beat.log -stderr_logfile=/var/www/logs/codemy/celery-beat.log -autostart=true -autorestart=true -startsecs=10 -priority=999 - -[program:celery_flower_codemy] -command=/var/www/.envs/codemy/bin/celery -A lms flower -directory=/var/www/projects/codemy -user=www-data -numprocs=1 -stdout_logfile=/var/www/logs/codemy/celery-flower.log -stderr_logfile=/var/www/logs/codemy/celery-flower.log -autostart=true -autorestart=true -startsecs=10 -priority=600 diff --git a/configs/codemy_ssl/privat.key b/configs/codemy_ssl/privat.key deleted file mode 100644 index c21abb7..0000000 --- a/configs/codemy_ssl/privat.key +++ /dev/null @@ -1,51 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIJKQIBAAKCAgEArcJkDivloDX2QRQE+s1jPH/pxq+oZGeSNe8aJVMXRu3IbIML -+iJt0H0XGol9N9FkvSHF2G33oOmJ134Imd6BcQ/OQCT8J7MvPbts5Y7LWBcwUomJ -+QZq9qcHFVrcP95Q0wrZTV5f2zU468dz+eUnmWVfFYIR674ZImLLtc+bLl3NjzH6 -t23WrTiIUmPpe4dOH9CktKoUyfzgzFcXFOI967mooMAzhefKzigr+5sU34SMbWLs -czspC7cj22LRpIXowFeuRnoygXXVbDvRlgU2criLFqiDCwWqi6OOVZMcNjqePwc4 -1R4qdWeIf7mJ69xuPQtzHrO+rRC8mgGVSU+9nKunNq6tIxvOOnK/TeOzaJoCx/yb -7XsNcYCoue3ZV3emM2WeUB6MOxG41m9AFo9TKsHOtpFLx8tyWTcypBWhr6xTYhNB -GTiSUMofGZmM6sjcVyQT6pEFpx50DxZeTDhnO+wSi8NZRoNKjqMo3wvrvJjcM1mz -qRzHE5nyzU1/Gf/j5WCNdCC/+2Q8s+LXaKkm0iRUuSqmQVtpkzaMCdEf33ELDshG -XN4jCvTSG5w8fL+GdeZ8BpBPLob8qKkYU2kW3YqawQ9+bi7p8MDs1ZCNtjScCzgt -aNvoX/3/TFO4tSu/XCz5nGYKVYbjUrr1Mv9NldSIiua/hJOrsWFfpoEXjmMCAwEA -AQKCAgAKVxMVNM+JZSyuWr6hHi/VndcPl8xxjShKRVxM9FDiS6wtqO7Bh+L5ETia -v6vP8ooIJ0ZaxtCBpuQpCrsATRlu3P3tG0ZWJnedONYWIxU+vMKHZt/rDdK3suDd -CHcq5dPxeyfLTt5tcRFeFpR0PorIuhuacA8Y9EsSnMZ6n0wgyjw9VUASQlsQG9kg -7gkq7LZddlEW3zg1fPLztgsNlxkQOhAq4MUwJscO1Z0ob+YiFwU0TTq88LxUkiV0 -HMFVBRMAvzcDwqnWwmhc9IJYZx8CXLEKPCTwNvobLTR/Ky32nC5mmctsA0uLiQm6 -cBQhEREOWOwU26VxLxnKIGX94tzpqL+k3sWzbfyW2PwCwm7tH18RQSQuwvzWavt0 -CKkQmPIvbJGGDxoNs4FC/NX+N0MXiDvPmN4FQeyPCsXsDW4NUsZy2iYmZO0DISsO -oDQGSVM2/dwP9ktKo781XliY91lPEQHTvbqPr89iiVIwPbV4RN+HFOblLn2vrR/2 -WloMyMKZEZgrEXLLHiwPveK6n8N1v8YxZwFMhJeBMZ2SNXrqcqrycp+/joKf0Lgg -MvrHu8DYMtlQyfVhAiFJvyL6YS3bVjfi1FEYX6FJn1vvSDQOQxPOLhkAnEoItwCY -R/D1QlyGA4GeDYQTEmz70J007V0koKZZFWUpv4InoUjumygaQQKCAQEA2hhXY3Xz -Wo4QtEBZkkG8NVXGY/k1IpCeER2MysgMAAFdO//bXQbaU7DeOi0AeSrkWz/rlfHR -nxtwgtfjt+0uyDLJlvKXscTDh2qZI9t9Z5ZnimAsawH6hrvfzJX1op/RqgG+edXi -2WrefpoAh8swMWljVO/wwai0b2ahFxsIZUU5XFu+ic4Cb/WTORftwY2yh61Qvsxk -jGNym8VywYJuT9a1HTFljNbEKgqlxBmZczMxgFs2zd+2hu3cITuHnM0YKwQN+sth -yDgemHIoFuI8mO3hKRYrOv+/iQslxt1Km0kFsiFetEr3oT5UizaTZ1Elu6mhKITm -U+fcrnQXWnDcGQKCAQEAy/VttR9pRuT/oW0d58hZRa5HKXoHbpG9IS0+MjlicOWq -ZWvfDag/CCRs6SEQfYWQfOs6AH8bMsjMZDWLXuE4obas7SS4/P7pA88Ix3BpFyGu -afpAwDA/sREe6D4DF9yGM02q66Bw5g/YiAW1TOBaXPWSjOfRNWI7zE+N/znaR/Pi -nfm9XEVuQcnCRlYojvosQ+k7+CU/7w4mTraVz3m86CLyo9k4jDtR3OZh8rjlfrMb -Mk272i+7xiSZkL35/7w3DwhSLm+GLuwHJ1OlEGzSrJx9be4aXDS0V/xWTTw5PzaC -lrNhMobgfWckrbVVHouqyzgSMd9NVdOkKUy3Dg4N2wKCAQEAojv/LbZ9Czyowl0o -BDsv9QDUbmPgGdE4NAUmSWYcPxjEsTA3jvDdEep8tQvq0TeN3S8kYUscIt43iK1t -8NDXvwbAnK/jFdMHnEE4n8rTc24XoYC/Ke6z3Ov+o+JdcdavEWbwuRLZB+COl+CZ -SmpkdC0wPeuqzXRgnInchSKP0T14WPLKPxpnB7/G/26EZzmvt2u+p9/FYAVOKP/s -yHPs+Sj/WzL2lpjgHWIEQ2bDlkVbql6v2t9ymNZxrKrqy0Jpmv4OJCSMnXLZl487 -sSIj76LsnjKmf+HlKd2IAXF14SOlwAdAup8Vq/WA0HoNlopvpjSd9FVAPOQ6be9f -u+A+aQKCAQEAtIJIUC62q+nsXGAIQaTNbaAqlwjLHw6ZBo3WJ/klqKl6vzxTMvEe -qAQk58c9ovncwNImiV31ImMYke/Zo2VNC8JzFYaUukSY0aggKvLP74r9pAm52N5a -4Ek4w25uqmWf2DP6+4MJqHOJvgjfRmShVPh6dX6NZ+PC7LXUBHidOWUdwZbQAqPo -Sw1XhYynZLMBDjGTw7Cj/tzVBoEN4YvqpsCXYm/TXjj54Ll9IqaFZjb58PFfOmFY -nKqzxqh8Y9ueFw3UPgiyB0EZq7KZugm2AtKVJ/+9ELIMknpfnweX2txRgzLK6T75 -28K3cY21Ac22oRjE8aKh/T3MYkjlEelaVQKCAQAQGuFJcOu0+E5A91+k+GbgFXmK -cmCEO8iNhEByvfZAMv23+ba8WeEcYJnTFUbyaoESXPPAkPSVeFvOy39Zbq1WAZ7c -BdZUEUONWE0n54ZnvArEKIsvF4YRz//KQ8SaXbhj1OMvhS5fRo3hBxCS3xWyF9sq -qM/AWdz3iGvP/ELpCOQrii//U3WaQvaY17QpqiJ7B9DvsWhDabRVlp6eKTKgAMLq -BlJpLz1tRfpVU+sLI+yvZAbwj6Izex80TXEhD9EMPLBgyIzM67+zdf6awB3mXGRA -zSvlO+eVQYQODNR52sD1+4ythePMC4SJiZyLzy7VnCfmoOPNyPldTxQGJLjE ------END RSA PRIVATE KEY----- diff --git a/configs/codemy_ssl/public.pem b/configs/codemy_ssl/public.pem deleted file mode 100644 index 1e11f45..0000000 --- a/configs/codemy_ssl/public.pem +++ /dev/null @@ -1,85 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIF9jCCBN6gAwIBAgIMY/C5dNv6x+tP/WuUMA0GCSqGSIb3DQEBCwUAMGAxCzAJ -BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTYwNAYDVQQDEy1H -bG9iYWxTaWduIERvbWFpbiBWYWxpZGF0aW9uIENBIC0gU0hBMjU2IC0gRzIwHhcN -MTYwNzAxMTMyMzM0WhcNMTcwNzAyMTMyMzM0WjA5MSEwHwYDVQQLExhEb21haW4g -Q29udHJvbCBWYWxpZGF0ZWQxFDASBgNVBAMMCyouY29kZW15LnJ1MIICIjANBgkq -hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArcJkDivloDX2QRQE+s1jPH/pxq+oZGeS -Ne8aJVMXRu3IbIML+iJt0H0XGol9N9FkvSHF2G33oOmJ134Imd6BcQ/OQCT8J7Mv -Pbts5Y7LWBcwUomJ+QZq9qcHFVrcP95Q0wrZTV5f2zU468dz+eUnmWVfFYIR674Z -ImLLtc+bLl3NjzH6t23WrTiIUmPpe4dOH9CktKoUyfzgzFcXFOI967mooMAzhefK -zigr+5sU34SMbWLsczspC7cj22LRpIXowFeuRnoygXXVbDvRlgU2criLFqiDCwWq -i6OOVZMcNjqePwc41R4qdWeIf7mJ69xuPQtzHrO+rRC8mgGVSU+9nKunNq6tIxvO -OnK/TeOzaJoCx/yb7XsNcYCoue3ZV3emM2WeUB6MOxG41m9AFo9TKsHOtpFLx8ty -WTcypBWhr6xTYhNBGTiSUMofGZmM6sjcVyQT6pEFpx50DxZeTDhnO+wSi8NZRoNK -jqMo3wvrvJjcM1mzqRzHE5nyzU1/Gf/j5WCNdCC/+2Q8s+LXaKkm0iRUuSqmQVtp -kzaMCdEf33ELDshGXN4jCvTSG5w8fL+GdeZ8BpBPLob8qKkYU2kW3YqawQ9+bi7p -8MDs1ZCNtjScCzgtaNvoX/3/TFO4tSu/XCz5nGYKVYbjUrr1Mv9NldSIiua/hJOr -sWFfpoEXjmMCAwEAAaOCAdUwggHRMA4GA1UdDwEB/wQEAwIFoDCBlAYIKwYBBQUH -AQEEgYcwgYQwRwYIKwYBBQUHMAKGO2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5j -b20vY2FjZXJ0L2dzZG9tYWludmFsc2hhMmcycjEuY3J0MDkGCCsGAQUFBzABhi1o -dHRwOi8vb2NzcDIuZ2xvYmFsc2lnbi5jb20vZ3Nkb21haW52YWxzaGEyZzIwVgYD -VR0gBE8wTTBBBgkrBgEEAaAyAQowNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93d3cu -Z2xvYmFsc2lnbi5jb20vcmVwb3NpdG9yeS8wCAYGZ4EMAQIBMAkGA1UdEwQCMAAw -QwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybC5nbG9iYWxzaWduLmNvbS9ncy9n -c2RvbWFpbnZhbHNoYTJnMi5jcmwwIQYDVR0RBBowGIILKi5jb2RlbXkucnWCCWNv -ZGVteS5ydTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHQYDVR0OBBYE -FHlv5NiaqItBFuN0vudXy9jt1bLkMB8GA1UdIwQYMBaAFOpOfNSALeUVgYYmjIJt -wJikz5cPMA0GCSqGSIb3DQEBCwUAA4IBAQBfIs7hKJlHw5Hly/vVhjAQzX8qcN9H -ISyHjmU4KeMKtiq0RdvC2Jf1IQFmxvgmycrARH1Xc9cHoMXZ8prYonnXeRX7fqrL -hsjp6x87DxwDDXqblHqpoakFXhZhY2fJCeH+YQTrY37+hOy3qOreI3CiRK5N+BYF -PO78hVAa5TdawQGM3c1TeYIG3ZzQ3x2wVGAQNCXdwcJOLF9dl6z+syySTOGPABKN -rIEKOzc4ScqIHOzuQ1qTG2QcjwyH9tarDjJd79rnZUQzf1O58DwGwaQZwh6gjksz -QXZOLz6LR55gpBP8cGpqJIwOiZKjtLTqeE6q/kJ0C9sbxnNw9sCkeAhh ------END CERTIFICATE----- - -Корневой сертификат ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw -MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT -aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ -jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp -xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp -1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG -snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ -U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 -9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B -AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz -yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE -38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP -AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad -DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME -HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== ------END CERTIFICATE----- - -Промежуточный сертификат ------BEGIN CERTIFICATE----- -MIIEYzCCA0ugAwIBAgILBAAAAAABRE7wPiAwDQYJKoZIhvcNAQELBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xNDAyMjAxMDAw -MDBaFw0yNDAyMjAxMDAwMDBaMGAxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMTYwNAYDVQQDEy1HbG9iYWxTaWduIERvbWFpbiBWYWxpZGF0 -aW9uIENBIC0gU0hBMjU2IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK -AoIBAQCp3cwOs+IyOd1JIqgTaZOHiOEM7nF9vZCHll1Z8syz0lhXV/lG72wm2DZC -jn4wsy+aPlN7H262okxFHzzTFZMcie089Ffeyr3sBppqKqAZUn9R0XQ5CJ+r69eG -ExWXrjbDVGYOWvKgc4Ux47JkFGr/paKOJLu9hVIVonnu8LXuPbj0fYC82ZA1ZbgX -qa2zmJ+gfn1u+z+tfMIbWTaW2jcyS0tdNQJjjtunz2LuzC7Ujcm9PGqRcqIip3It -INH6yjfaGJjmFiRxJUvE5XuJUgkC/VkrBG7KB4HUs9ra2+PMgKhWBwZ8lgg3nds4 -tmI0kWIHdAE42HIw4uuQcSZiwFfzAgMBAAGjggElMIIBITAOBgNVHQ8BAf8EBAMC -AQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU6k581IAt5RWBhiaMgm3A -mKTPlw8wRwYDVR0gBEAwPjA8BgRVHSAAMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8v -d3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMDMGA1UdHwQsMCowKKAmoCSG -Imh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5uZXQvcm9vdC5jcmwwPQYIKwYBBQUHAQEE -MTAvMC0GCCsGAQUFBzABhiFodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS9yb290 -cjEwHwYDVR0jBBgwFoAUYHtmGkUNl8qJUC99BM00qP/8/UswDQYJKoZIhvcNAQEL -BQADggEBANdFnqDc4ONhWgt9d4QXLWVagpqNoycqhffJ7+mG/dRHzQFSlsVDvTex -4bjyqdKKEYRxkRWJ3AKdC8tsM4U0KJ4gsrGX3G0LEME8zV/qXdeYMcU0mVwAYVXE -GwJbxeOJyLS4bx448lYm6UHvPc2smU9ZSlctS32ux4j71pg79eXw6ImJuYsDy1oj -H6T9uOr7Lp2uanMJvPzVoLVEgqtEkS5QLlfBQ9iRBIvpES5ftD953x77PzAAi1Pj -tywdO02L3ORkHQRYM68bVeerDL8wBHTk8w4vMDmNSwSMHnVmZkngvkA0x1xaUZK6 -EjxS1QSCVS1npd+3lXzuP8MIugS+wEY= ------END CERTIFICATE----- \ No newline at end of file diff --git a/configs/flower.conf b/configs/flower.conf deleted file mode 100644 index d47f7ff..0000000 --- a/configs/flower.conf +++ /dev/null @@ -1,21 +0,0 @@ -server { - gzip on; - gzip_disable "msie6"; - gzip_vary on; - gzip_proxied any; - gzip_comp_level 6; - gzip_buffers 16 8k; - gzip_http_version 1.1; - gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; - listen 80; - client_max_body_size 4G; - server_name c.skillbox.ru; - error_log /var/www/logs/codemy/flnginx-error.log; - keepalive_timeout 5; - - root /var/www/projects/codemy/; - - location / { - proxy_pass http://localhost:5555; - } -} \ No newline at end of file diff --git a/configs/manage.py b/configs/manage.py deleted file mode 100644 index 5f40f10..0000000 --- a/configs/manage.py +++ /dev/null @@ -1,10 +0,0 @@ -#! /var/www/.envs/codemy/bin/python3 -import os -import sys - -if __name__ == "__main__": - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") - - from django.core.management import execute_from_command_line - - execute_from_command_line(sys.argv) diff --git a/configs/nginx.conf b/configs/nginx.conf deleted file mode 100644 index 7b2e649..0000000 --- a/configs/nginx.conf +++ /dev/null @@ -1,88 +0,0 @@ -server { - listen 80; - server_name codemy.ru www.codemy.ru; - return 301 https://go.skillbox.ru$request_uri; -} - -server { - listen 80; - server_name go.skillbox.ru; - return 301 https://go.skillbox.ru$request_uri; -} - -server { - listen 443 ssl; - ssl on; - ssl_protocols TLSv1 TLSv1.1 TLSv1.2; - ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; - ssl_prefer_server_ciphers on; - ssl_certificate /var/www/configs/codemy/codemy_ssl/public.pem; - ssl_certificate_key /var/www/configs/codemy/codemy_ssl/privat.key; - ssl_stapling on; - ssl_stapling_verify on; - server_name codemy.ru www.codemy.ru; - location / { - return 301 http://go.skillbox.ru$request_uri; - } - location /access/ { - uwsgi_pass unix:///var/www/run/codemy.sock; - include uwsgi_params; - } - location /static/ { - alias /var/www/projects/codemy/static/; - } - - location /media/ { - alias /var/www/projects/codemy/media/; - } - -} -server { - gzip on; - gzip_disable "msie6"; - gzip_vary on; - gzip_proxied any; - gzip_comp_level 6; - gzip_buffers 16 8k; - gzip_http_version 1.1; - gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; - resolver 8.8.8.8 8.8.4.4 valid=300s; - resolver_timeout 5s; - keepalive_timeout 70; - client_max_body_size 4G; - server_name go.skillbox.ru; - error_log /var/www/logs/codemy/nginx-error.log; - add_header Strict-Transport-Security max-age=63072000; - add_header X-Frame-Options DENY; - add_header X-Content-Type-Options nosniff; - listen 443 ssl; - ssl on; - ssl_protocols TLSv1 TLSv1.1 TLSv1.2; - ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; - ssl_prefer_server_ciphers on; - ssl_certificate /var/www/configs/codemy/skillbox_ssl/public.pem; - ssl_certificate_key /var/www/configs/codemy/skillbox_ssl/privat.key; - ssl_stapling on; - ssl_stapling_verify on; - root /var/www/projects/codemy/; - - location / { - uwsgi_pass unix:///var/www/run/codemy.sock; - include uwsgi_params; - } - - location /static/ { - alias /var/www/projects/codemy/static/; - } - - location /media/ { - alias /var/www/projects/codemy/media/; - } - error_page 500 502 503 504 /500.html; - location = /500.html { - root /var/www/projects/codemy/templates/; - } - location = /404.html { - root /var/www/projects/codemy/templates/; - } -} \ No newline at end of file diff --git a/configs/packs b/configs/packs deleted file mode 100644 index 3923a17..0000000 --- a/configs/packs +++ /dev/null @@ -1,17 +0,0 @@ -django==1.9.3 -Pillow -psycopg2 -simplejson -celery -django-celery -django-wysiwyg-redactor -raven -uwsgi -flower -django-import-export -python-dateutil -requests -ipython -django-precise-bbcode -html2bbcode -markdown \ No newline at end of file diff --git a/configs/skillbox_ssl/key.csr b/configs/skillbox_ssl/key.csr deleted file mode 100644 index 7c53c87..0000000 --- a/configs/skillbox_ssl/key.csr +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIErjCCApYCAQAwaTELMAkGA1UEBhMCUlUxDzANBgNVBAgMBk1vc2NvdzEPMA0G -A1UEBwwGTW9zY293MRYwFAYDVQQDDA0qLnNraWxsYm94LnJ1MSAwHgYJKoZIhvcN -AQkBFhFhZG1pbkBza2lsbGJveC5ydTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC -AgoCggIBAMlRcVVHDEHDvoOihBOgZp75k+W98ufqp5uWJJaZhWidZNx1BzRu3LxL -+IdMn8HFBQhFIppa1XkOJgzIJCIM1hD3UzoOn1D4rvDeM6GfdAnnNCya5VJdbsRJ -lROHdlaBRNIgy9l60pJnwWjtSXMnUOQz4nuPswY4Gsm7E/83kGxqx0e299gHHXqz -VRnkktKfa7qnnYt3rFEu9S+AAgUBbmSFuRQhpMmmwF81M/EpZlOIHE9b4Fc5uQuG -Q4pDpfhyDnbKYmymMJZqXdkWFN/bKRS7P8TixvWoDA6lVXnNXsU4gSzQf2BXC639 -chsdAQSVhsb9VL0No97SSNjSp1RZT0TEP/BfWlY0eWNpCqOrq/SZKCy8/YU3Wu8G -PauNw7R3YbVrq2Ud+9XmLPJzWm4fqMuG9vh0ZWvgSct6eYi+Uv0t4jPDXemCXaeX -+IVDY7NwgUoRxiz67APG0jBmjpXmw9DnXDj6UIwWlBtqLNjpUmjQXH/AKQofabUQ -56UIb66ObR/xc0fY8kCUlbXNbdksryj2VOAbVrkBJEaffrqv13cu4iQlGvZ4McFk -0AbBmLkCxIRBmXEp6Z+RtdNS+aWuKXy2xH4tpyjeFOTa1nxD1So+pK72sDGFC8c3 -zlT237vIo27FdeD0cnSRU9h36gJgzQlZAuaGnxtSZD2HRGM5tdKvAgMBAAGgADAN -BgkqhkiG9w0BAQsFAAOCAgEAY9Qfls5vw3o8nMPqZAI0NYyzhKSCQUZg7h/GqeOv -IP+x0BmBzAOW9HGx6XWgv1hcd3u46XeKGQercmt1c3hkxE1CXAoG74T8Gs9yTU4b -dzN7KU08n71f/UTfH8IatQoFIqlZ8E3QYdCPQQoxYS3E0vYKSjQLmgEjbJ9qUKKy -JaTKdmb680zps6uxlaiL2QaryMXK5n2JCWw6pnNkHU33XNFlAp+xRlO9dkd4j9va -JLVDOCbdNC3S+IgM1QJ8qm20JdUFtPJ1a8Hvr5W2dBUmXeQBm3ehkwcxR+ndwd4N -0FQ2lhAyPxbJXh3UPbA5068Uxs7foTJozPtrhZrWRXaFo1hz1aVkY4dzAXqXw6HR -q//ZpS7qPpKbI9ujjOgli4sMPCMNua5iXyLXJDT8QZ5kLTUhaIx0OndsWJsCPgNz -S6+GwUpke0Yir4pvw78/+oJROVaIVQvwX2GrJAtJYyUVSDobxVKeFgDfMSFg0vfl -BuP7RLlloLUaKHX35/kJY5Ny+yP6JN318E2PUdqigrI/Z4p8GxRsOQJB49J95RTy -BEinUU0JDjBeKPlTSt0J+I7OiUdBy5sxYeU4I5eX8/Rz0XQFKIh3uZsKTQZPF2Z+ -NdFWT2o/OC26eEYDf/j7VJYqM2ZapjwBKiils4SQVJZxqOcV1BGoISE/3zjt2eKC -zxA= ------END CERTIFICATE REQUEST----- - - diff --git a/configs/skillbox_ssl/privat.key b/configs/skillbox_ssl/privat.key deleted file mode 100644 index 64a65c7..0000000 --- a/configs/skillbox_ssl/privat.key +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIJJwIBAAKCAgEAyVFxVUcMQcO+g6KEE6BmnvmT5b3y5+qnm5YklpmFaJ1k3HUH -NG7cvEv4h0yfwcUFCEUimlrVeQ4mDMgkIgzWEPdTOg6fUPiu8N4zoZ90Cec0LJrl -Ul1uxEmVE4d2VoFE0iDL2XrSkmfBaO1JcydQ5DPie4+zBjgaybsT/zeQbGrHR7b3 -2AcderNVGeSS0p9ruqedi3esUS71L4ACBQFuZIW5FCGkyabAXzUz8SlmU4gcT1vg -Vzm5C4ZDikOl+HIOdspibKYwlmpd2RYU39spFLs/xOLG9agMDqVVec1exTiBLNB/ -YFcLrf1yGx0BBJWGxv1UvQ2j3tJI2NKnVFlPRMQ/8F9aVjR5Y2kKo6ur9JkoLLz9 -hTda7wY9q43DtHdhtWurZR371eYs8nNabh+oy4b2+HRla+BJy3p5iL5S/S3iM8Nd -6YJdp5f4hUNjs3CBShHGLPrsA8bSMGaOlebD0OdcOPpQjBaUG2os2OlSaNBcf8Ap -Ch9ptRDnpQhvro5tH/FzR9jyQJSVtc1t2SyvKPZU4BtWuQEkRp9+uq/Xdy7iJCUa -9ngxwWTQBsGYuQLEhEGZcSnpn5G101L5pa4pfLbEfi2nKN4U5NrWfEPVKj6krvaw -MYULxzfOVPbfu8ijbsV14PRydJFT2HfqAmDNCVkC5oafG1JkPYdEYzm10q8CAwEA -AQKCAgB4UscMExTOUbISdxW9rUboiX7N94Ow/V0D7u8bW9KSvk/EO+X8fq5LlJSM -OU3awGjLkpal7thcLAqt5QlDmKxxI4GI16h8+sWEjSoK1YTDTn6ukj2xxsonY1tI -etRNy6FYfeWYrIIiowTEM96MhtkgK6qX80Eq3GmWXMwM5Cbbxc4pnL/xS/9gkMKy -YR0n6cS3oOrWqsZBF3HP3BBY8YwLZKlD0P/uzk14GhJbd0UDc/yHqgAh4gwpSSwg -/WG7ZmAiu7+r9IBhxl0lHL+JNDIPhAMPKAOGW9QpBMRbslWMRsNeB5e5+wyuBycl -8WXkWYJeeJcnD3n7+W80uGLuVRq8jLeU8pBzygtLNdZl0WsQ+uu23BWTA8wKYBb9 -AeQr+hmJ+4/l0Xa9ZvE+hfP4cf/0ORCmMEQl2z9BTH3SMgZ5UAC7QGA7MqRpnnBJ -rHAe71aC1hbpHhz1mdP+pWRrno9AapEINXY4fqLXYGV44E+13cgOPFGUGk0OEFm3 -LMTilnmZ4ZPwh6mW+gYieKTiGU8kdzoCJKjYuDOG61lLsJyx+XfzukntJhdCJoK9 -9/O/dXeWzDwNVjvGcNX8bw2is53HlOSTSH8UjkiArQhvlf1CShPgnwTqVaoUeuGb -7Mi98VMicRrHa2knGC9snF0PSSNWUHv93LSwdd3ks3gJJM8V8QKCAQEA92DBDfBp -3bRLrw0vqx2rlUIcqfzTYUjXZ+uDzrmHEKt68Jxlk3d0T+vUjB5ecc3ZHCC2dJCo -FtWPMQCYsq+NkvjP4QM8/2NjxpaPfv2vxked/VXCkYZWgi2znZfzBBYW9P0w+dZc -wcl2KuSyPnX1sPDbYP7y4QrRraHQ7vhWdwkkkV1GDFHHJLXpcovKcAfEn0yvdbYJ -OQNT2JeA9edgS3Tn8aSE7qc77QQAYlWHoBmwcsY1eJvj5+trJDSpGKYylvIcdHJq -KFOAyRdyz+QTsfZ3KT31q/5d0sU8Dv0n/c4Ef7B6HoNBnuJnfATl4ySa0lt/IaxN -HKZm3sXByYpdKwKCAQEA0FW3iEcSr8p7n13UXU2vQipchB5H3zNYJnZANbgDMURJ -N8TIqL9JncrQB7agpv2BfQNpJEWA2mZxGK7q2BgdM3PfI33TP8E7wq2aPNnobZQS -WF84GAc9NA7K6m6O5KWM6uXofznmn5pBd2d2HaLAjARJqwSZidYbx+wzw76jh5Rl -O0P2+pxTnISs7TuT2mH/jvKWYECQnPPseI2JeXfRNGCWZBOq/DZaqUQHWRGNX26N -4MQw5NYTGxOBjBJKn8if5K/BQQo0TYtwji1T8WuGQrWZQXgvdzLOusg+42JbXQc+ -gi2nhiF7ELnMZ9AsaQpgxrbJVR2X1HnqrKWAHTSGjQKCAQA5P/QNxMjLXVFypquU -f15ZQZ6enHtS9Wecjj3H1tnyOq1OB/PeB/QsFtjuwIx86/XF87AmE+BCwJPN9GRi -Xgx2qgx596TjOd46dFerPQyz55khqvpHcX6NzAPYgfTkyjPv6LSv7TM0SeqGDL1P -hT8h/uvWa8pL2JQkCeHvnBtumvgSiDKQ4VAkJ9FqB/4GpVWUxEuLA2DpB+McqhtX -TX/Ulq6jFr8I+Dz/IkDwgPjNTYSvWz2+tt0srCf0jhdgM/5bPpblQCFfScvxPfL9 -N7xzICX9rnAvqMOP5sN6eI4Lx+T0pCPu8dN68MygQAXv5mXKLxCh+10xNzVxcvTh -LptXAoIBAADUZo+3YL6sesOOtxrMBWepDYdFK5oa9T3p+KV+Hx0iHXyIXxg08tEb -DqsJMiiYF9zsl42abUHxaH/lqm/D4NHkoz3b8Wxuk5NZ56RYZdGR5mTNtEZ8OOUt -LeezGwSUGDSTR9LB40Y9cgdMtS63CDdGiRiSQx5GaQPpz+b2qmYO1DxhL+mdl8Om -z51+QD99ZmwmUSz+9NR7MDTms2Z1cLLZs5+gaGzqtn+4EqNrK3n20b/UaDFxHNBd -yoVJSVzLir95Z7afmMe6R295hL0QZY98c6jMFrxNyn757y4upRiAv+H61pD1Ly1I -4CSFsreUYABKmBCrtoAVIDchzZnQLL0CggEALIzVFuEPzRB8jd7eUbNV54doBfy7 -ScXJbVt43UCXj+K2lTvtnERa48Wf+O24u7veZc47sWNHV6baSXDip2aIT2cl29yk -nkz7NlIHzmQJBdXsVMXWWQ0SPj6EN3POoWwb9a03dQ0SKDhL5OLml1peH93L9vaV -RebrYAXthjz/OvOwkhTCSlynI9lCWcGAEDD2xyN03G9pAjwUeLoPcdnFr5um51fh -fA9r8TjO7laCIAgpW+FNG6YuDUW5NQjKaCSgqAWkQiPxwaaFDojJoNVVA1bHtv+g -bhQlbg1C/Dqxbi2XAP92pMUqmQdnY11YEVzps809mRPl1WrRxdspXOWN1w== ------END RSA PRIVATE KEY----- - diff --git a/configs/skillbox_ssl/private.key b/configs/skillbox_ssl/private.key deleted file mode 100644 index 5b2ba02..0000000 --- a/configs/skillbox_ssl/private.key +++ /dev/null @@ -1,51 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIJKQIBAAKCAgEAxPkRkFPI6cpWutUxb27Zwf1uEc9wSwkB8SWL16n0SEOxcJPV -OfV3Jl//2GP8TLSxeY1S4+MORhsqDm7/outDrJQSJnkZ/pwYZbJEj+1oCItpyamo -+lHJ48ggnQD6HzYWmDZMrUNYiOTmLxsKcVcXM4kLcDVG6RJOgIMbiwaAwIH7DBPW -yVbaCBBY9XMUz7esODov/9OMdZuhcjuk6NXntNsASAbDC0BuVCAJLsVR6ir7r8xO -F7DtrnhhEjcE7R1Wkf4A7i/DyUy/7oJRy2o7psAPJJIS+Hz+bHN+zN+/w9YpCm07 -8ZmCy/fJmhIRoymCrdHEbHy9GfNuDfTow1H6+nPzTdA7z33uhOxLJMhYtZjzDOkZ -QT4cwj3aHGF7bFrWvEzauJeTtGyEh5fSpgJvH3kA+Z2cVJRYkW3JZR5B2aTbhPdO -ac4dhp3qUR9DVTjih2I1eP8FBavr5Rb56NIe4HGyL2QIyvKjpqkfH5TRJ1vRbQB3 -OjT8nWRkTmHvUxJXg5TmhZVvBt48/xjk5DO1W/GC516r96q1S5YieQzOJ4RUNFIz -SInUke0OLzmha8P9vDv+2owT59IRTl7uO6fQXGSR7bshA5MlquBvzdQ0g837r3Nh -ys1AXI+jrfelR0umHY8bMcrCcXeWbXyGAKIzkTz8x1I2xDzIPZVW4vB/cS8CAwEA -AQKCAgEAwiOC7i/GbLejeA485UnqkssIu8ErOqmsIlQRWwUF4lvl/cGXfcK0Jzyj -XFJgD/Jgoh9qvXXDUdHgR82bZKZhUy22HflqZ4rOeR2Veg5SZWmTYNI53E7UoA9W -Jaka3bxf1LJgLL2d+38waOlMB54BHihK/9NjCsGiYgPXF9XW/Oaf262KG3Pg/eWu -6Gz+7CRqOBkRyiJl5Fz6aS7kQSDjeVwJEPSpNOPSWlQg+No+/IBVBVZm+e7GtRmt -A1j7IAG0m7wwipLFdBiTa69Cky0nkhjmU/Mtg4Ee+yFyrtcxmQHx/XbgiCX3xrV5 -HMQGYjy9sjh4Uz023OcTZ+olqK2aoZjY/avsPKOtx9ybbO/YFER7f4PBts+IvCVS -SgAdli6tdoAO/GCHnXKjjLT2WaL8ZXOQcpNFFpLsaRxmq21AKMFCT74fl4euX5cA -qCflO6LxxtclXJdiaJJSuop0xp5KSJ4svRVScq9pHqJCjFoLEkvhYEpfI0nqeodP -jWqlNPiARFK0nnGk5+Uxfjo1WfsnRUvj7bPUbMp/xyG9dFQ0fg40XCIIHV1fTk38 -iL+Da0ijtORrIG8kwzL0q4tBU8/89ePvbsk1gOVDr+3nwoB84UmA+zmniHzFGjf4 -btF8v840epHaPjMSjWOnTMmsqycZ7imjBGhuqY5vwf1hmMZ3bhECggEBAOfgq1y7 -3uvAPzk9gUsDNSPSfmcszw4haHGIaOSmwUwm0klYxqa73T/6AnmjqjRfGErkqqpl -+O0L6oA1+KCS/pCSgN6/uWbtlcS8drniD9rHh9C5twBOOU2e77aDLdQx4SnHkHQZ -GnNpIi4m0PWUaa7qsBBGKpZMDqZCLXZw/6olCGoymrAxW+Tq79/lOf8Ngbz2jzpV -Ou+TAEb06Vy9fBniGb02+8cOPgECPo1a5cdij/1eU11CU66G5Re5il+34jZbVBo9 -Zmzanlc/hBSrZ4f9IMJVJLD8/ccc9exCXm+FHBWNpEE/gzxQWPb2ye7CoBep+glD -vfNg+lmUJLfxcuUCggEBANl20pe7WqKME1NOBt/EsX8DKlwoP6zdVasQ57ywDgif -9iKW1Fp0d4hbYEwvMfwXXb6uYlLIXRB6slKxuiuZOXo5DFZzGTmgY1kgachyau4l -nNdGXctCdlT7XklQOj0WgyKkGjFrHKVS5B+Go7/jdtM+JmqR8nhfzSPysaXZbwor -P7sGB+Wx/XbCPpupIZl7nPgOh5ctLS38WAh60++JZ2uLvJCkELA9dJj9ero5r/T8 -I4RjNK759mVgzay1UYRlmBFK23JwZxqnpA0gFbfVYyyAfA3VTlLu8ydpNq93Gd1/ -w2C5YL9iah7xI4XIlPiOLXWxWyuX7x0IrshejWTSroMCggEBAK8Bg3Q3GzWFYHJc -OFQcNKQ3v00xpYh9sG1XzgsczHEkL7xJ84xt57vcfre9zb0/NH95/FElK24Fe1SO -53qR1u3YlMkJnO3RTSMyNs1ukBbIV3oyYKsrXtZ1qWhvs0we5Vj6FM17ENqgM7rv -cvCWtfjdikqOGqBbAQd8lQF6oYuR7brxPIzUhA3PP4IVaONWF2A+GrWlFBkzMpdb -SzHClYKXgmOrtvVyi1uJjRp0y03j1tcctQCDCdOEXi28zHIXv/TUkzJGuyJXEgC5 -oH9VKouZgXsKdena19LKydUp9kpnBV5DDABu5ibEYZDrjFbWr6uMj3kklp20yN6J -D/mAkv0CggEAcWLGHT0f3d8BeI8XgHczQRFqddC6mqxxLZfL7JMzTgXxtUlFgcB2 -Ts+uHysAefvI8lJEi/tSovQGpJ1sf60Nzg+OwkiTH3vkMSV4Yn5eCLvt0kUrRH7r -6hWCrOE67H0fdOFxktDRh9X3ggSWvsegPjaKm0hrz53L/XFedSYxAnFYcnCLj5VF -njVbpZgDH97XEnOo+QciJncLg6hfducC2I1sjVIuLWZttBN+eTj46NjKwA1l+9Hz -Shq2QtXrogfCyUlpsHqxF7HPFNTk3gxSAHMhu6i7hPx4JdVzIPwNrXMfcQBXVJLA -2E9NAUV7fznKtDH8Ynd+wnmzgF/kg2xidwKCAQAg4h/BV1tPoJBuX2utlvvw+TjS -yuN6GcR7aZu4tvkctktvxcRihyyiZ1Rycftzqij1haA4xxcCzGFDbpAdjUwfO43+ -0RIV3oLnpvxATxOHGNhvUa7GGYgdJLs9hrX9cTqZRR2Bqt5isTWytaI+b8ViEP7w -rvZQVBkmeg9FUXC4rcTSkbaPrzi3RRMkdtu+EdszLJAEEgt6umqNPd3AIDcwAgK/ -2rclPBpncTWYWRRoaay+BMHyJPNmgFZdTkem36WiM1xQ3b1I0fzjcqdX+aDn6Cm9 -PUxB/vFK9xffL0geEAKptfZJ/kbcZlzecO9GosMvYTEty1ikLTxdYx39/kSm ------END RSA PRIVATE KEY----- diff --git a/configs/skillbox_ssl/public.pem b/configs/skillbox_ssl/public.pem deleted file mode 100644 index 747569e..0000000 --- a/configs/skillbox_ssl/public.pem +++ /dev/null @@ -1,97 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIITDCCBzSgAwIBAgIMeU6S68+Azcq3a9oDMA0GCSqGSIb3DQEBCwUAMEwxCzAJ -BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMSIwIAYDVQQDExlB -bHBoYVNTTCBDQSAtIFNIQTI1NiAtIEcyMB4XDTE2MTIwMTA1NDcwMloXDTE3MTEx -MTE1NDI1MFowOzEhMB8GA1UECxMYRG9tYWluIENvbnRyb2wgVmFsaWRhdGVkMRYw -FAYDVQQDDA0qLnNraWxsYm94LnJ1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC -CgKCAgEAyVFxVUcMQcO+g6KEE6BmnvmT5b3y5+qnm5YklpmFaJ1k3HUHNG7cvEv4 -h0yfwcUFCEUimlrVeQ4mDMgkIgzWEPdTOg6fUPiu8N4zoZ90Cec0LJrlUl1uxEmV -E4d2VoFE0iDL2XrSkmfBaO1JcydQ5DPie4+zBjgaybsT/zeQbGrHR7b32AcderNV -GeSS0p9ruqedi3esUS71L4ACBQFuZIW5FCGkyabAXzUz8SlmU4gcT1vgVzm5C4ZD -ikOl+HIOdspibKYwlmpd2RYU39spFLs/xOLG9agMDqVVec1exTiBLNB/YFcLrf1y -Gx0BBJWGxv1UvQ2j3tJI2NKnVFlPRMQ/8F9aVjR5Y2kKo6ur9JkoLLz9hTda7wY9 -q43DtHdhtWurZR371eYs8nNabh+oy4b2+HRla+BJy3p5iL5S/S3iM8Nd6YJdp5f4 -hUNjs3CBShHGLPrsA8bSMGaOlebD0OdcOPpQjBaUG2os2OlSaNBcf8ApCh9ptRDn -pQhvro5tH/FzR9jyQJSVtc1t2SyvKPZU4BtWuQEkRp9+uq/Xdy7iJCUa9ngxwWTQ -BsGYuQLEhEGZcSnpn5G101L5pa4pfLbEfi2nKN4U5NrWfEPVKj6krvawMYULxzfO -VPbfu8ijbsV14PRydJFT2HfqAmDNCVkC5oafG1JkPYdEYzm10q8CAwEAAaOCBD0w -ggQ5MA4GA1UdDwEB/wQEAwIFoDCBiQYIKwYBBQUHAQEEfTB7MEIGCCsGAQUFBzAC -hjZodHRwOi8vc2VjdXJlMi5hbHBoYXNzbC5jb20vY2FjZXJ0L2dzYWxwaGFzaGEy -ZzJyMS5jcnQwNQYIKwYBBQUHMAGGKWh0dHA6Ly9vY3NwMi5nbG9iYWxzaWduLmNv -bS9nc2FscGhhc2hhMmcyMFcGA1UdIARQME4wQgYKKwYBBAGgMgEKCjA0MDIGCCsG -AQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzAI -BgZngQwBAgEwCQYDVR0TBAIwADA+BgNVHR8ENzA1MDOgMaAvhi1odHRwOi8vY3Js -Mi5hbHBoYXNzbC5jb20vZ3MvZ3NhbHBoYXNoYTJnMi5jcmwwJQYDVR0RBB4wHIIN -Ki5za2lsbGJveC5ydYILc2tpbGxib3gucnUwHQYDVR0lBBYwFAYIKwYBBQUHAwEG -CCsGAQUFBwMCMB0GA1UdDgQWBBS+YITz/+bonvjgdKmiWj1x08BcwDAfBgNVHSME -GDAWgBT1zdU8CFD5ak86t5faVoPmadJo9zCCAm8GCisGAQQB1nkCBAIEggJfBIIC -WwJZAHYAVhQGmi/XwuzT9eG9RLI+x0Z2ubyZEVzA75SYVdaJ0N0AAAFYuOwAiwAA -BAMARzBFAiA5q04XH6RwIsnGSYRIcZAZkzUgUsk5G3Muz6oSX5nGcwIhAOZLQTmV -pvJu2OtkJtOKKIMqFKKAsM+tTlyB941pAxOJAHcA3esdK3oNT6Ygi4GtgWhwfi6O -nQHVXIiNPRHEzbbsvswAAAFYuOwCAAAABAMASDBGAiEAxgwM+HRk9dytVQpO5S78 -8vF+5Ie4pO9fThMxz00//XQCIQCH+GXad2Ks2pi3Qelgd4qi1W0r3f+abXiVwELL -uAnlngB3AKS5CZC0GFgUh7sTosxncAo8NZgE+RvfuON3zQ7IDdwQAAABWLjsAOQA -AAQDAEgwRgIhAJuJdYe0gYq11fjKiE5QWeB4CvAJhCWpnjbSCQA0WDFVAiEAu6HE -kuwhUWc0wkWK4+0co9ZpKZRfWLSlwF1xKJYw+h4AdQC72d+8H4pxtZOUI5eqkntH -OFeVCqtS6BqQlmQ2jh7RhQAAAVi47AHSAAAEAwBGMEQCIFY1HI20nUjJCrdHnATT -j1xoMZa27XWgQc2+RrB9LF7TAiAEVoM6TVoSH6BZbFEeyJFAWQX4kE0JqSUFy1za -lLXtwwB2AO5Lvbd1zmC64UJpH6vhnmajD35fsHLYgwDEe4l6qP3LAAABWLjsA/kA -AAQDAEcwRQIgTLHS0ANLIgD+xA9lG9gIWajGNUU4lovJJu4bzigmnKkCIQDoUn5G -XrK1a+nM55ij1zxiTm18cmFcfeKxkCc/aApzEzANBgkqhkiG9w0BAQsFAAOCAQEA -r5yreADdlFBcV/YJJhYZ/pYsDufmqAN8dC5RQ2DcRqj8NXR80jabujj8mzbld677 -ixcj/j0OnxdFE2J88IEZmbNvQVeVw74a2Z87314iI9VHjFVRnlGr2Kxnz8z83ijW -pHjKLFgm6v7Qv1ZSEN8e8AD1J1+4Vljbu575FKOEMuKyQ6aau4cc7BJQ1uBx6Do4 -p3yHK/I9duGKH9NUg6wof64V9m7lZ6Wg4BwBNkZkCSifbrACZbqj2sUszQYnAYAH -ieiQMM5pA9qNwROZnVnKhdm81d2Qu0qa37kZRonNlJ1WDUgewWjgnDBVwP+LZGOL -6u+zckWVD6iKWIPy8PC7LQ== ------END CERTIFICATE----- - -Корневой сертификат ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw -MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT -aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ -jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp -xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp -1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG -snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ -U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 -9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B -AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz -yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE -38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP -AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad -DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME -HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== ------END CERTIFICATE----- - -Промежуточный сертификат ------BEGIN CERTIFICATE----- -MIIETTCCAzWgAwIBAgILBAAAAAABRE7wNjEwDQYJKoZIhvcNAQELBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xNDAyMjAxMDAw -MDBaFw0yNDAyMjAxMDAwMDBaMEwxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMSIwIAYDVQQDExlBbHBoYVNTTCBDQSAtIFNIQTI1NiAtIEcy -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2gHs5OxzYPt+j2q3xhfj -kmQy1KwA2aIPue3ua4qGypJn2XTXXUcCPI9A1p5tFM3D2ik5pw8FCmiiZhoexLKL -dljlq10dj0CzOYvvHoN9ItDjqQAu7FPPYhmFRChMwCfLew7sEGQAEKQFzKByvkFs -MVtI5LHsuSPrVU3QfWJKpbSlpFmFxSWRpv6mCZ8GEG2PgQxkQF5zAJrgLmWYVBAA -cJjI4e00X9icxw3A1iNZRfz+VXqG7pRgIvGu0eZVRvaZxRsIdF+ssGSEj4k4HKGn -kCFPAm694GFn1PhChw8K98kEbSqpL+9Cpd/do1PbmB6B+Zpye1reTz5/olig4het -ZwIDAQABo4IBIzCCAR8wDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8C -AQAwHQYDVR0OBBYEFPXN1TwIUPlqTzq3l9pWg+Zp0mj3MEUGA1UdIAQ+MDwwOgYE -VR0gADAyMDAGCCsGAQUFBwIBFiRodHRwczovL3d3dy5hbHBoYXNzbC5jb20vcmVw -b3NpdG9yeS8wMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5nbG9iYWxzaWdu -Lm5ldC9yb290LmNybDA9BggrBgEFBQcBAQQxMC8wLQYIKwYBBQUHMAGGIWh0dHA6 -Ly9vY3NwLmdsb2JhbHNpZ24uY29tL3Jvb3RyMTAfBgNVHSMEGDAWgBRge2YaRQ2X -yolQL30EzTSo//z9SzANBgkqhkiG9w0BAQsFAAOCAQEAYEBoFkfnFo3bXKFWKsv0 -XJuwHqJL9csCP/gLofKnQtS3TOvjZoDzJUN4LhsXVgdSGMvRqOzm+3M+pGKMgLTS -xRJzo9P6Aji+Yz2EuJnB8br3n8NA0VgYU8Fi3a8YQn80TsVD1XGwMADH45CuP1eG -l87qDBKOInDjZqdUfy4oy9RU0LMeYmcI+Sfhy+NmuCQbiWqJRGXy2UzSWByMTsCV -odTvZy84IOgu/5ZR8LrYPZJwR2UcnnNytGAMXOLRc3bgr07i5TelRS+KIz6HxzDm -MTh89N1SyvNTBCVXVmaU6Avu5gMUTu79bZRknl7OedSyps9AsUSoPocZXun4IRZZUw== ------END CERTIFICATE----- \ No newline at end of file diff --git a/configs/skillbox_ssl/request.csr b/configs/skillbox_ssl/request.csr deleted file mode 100644 index f1dc384..0000000 --- a/configs/skillbox_ssl/request.csr +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIErjCCApYCAQAwaTELMAkGA1UEBhMCUlUxDzANBgNVBAgMBk1vc2NvdzEPMA0G -A1UEBwwGTW9zY293MRYwFAYDVQQDDA0qLnNraWxsYm94LnJ1MSAwHgYJKoZIhvcN -AQkBFhFhZG1pbkBza2lsbGJveC5ydTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC -AgoCggIBAMT5EZBTyOnKVrrVMW9u2cH9bhHPcEsJAfEli9ep9EhDsXCT1Tn1dyZf -/9hj/Ey0sXmNUuPjDkYbKg5u/6LrQ6yUEiZ5Gf6cGGWyRI/taAiLacmpqPpRyePI -IJ0A+h82Fpg2TK1DWIjk5i8bCnFXFzOJC3A1RukSToCDG4sGgMCB+wwT1slW2ggQ -WPVzFM+3rDg6L//TjHWboXI7pOjV57TbAEgGwwtAblQgCS7FUeoq+6/MThew7a54 -YRI3BO0dVpH+AO4vw8lMv+6CUctqO6bADySSEvh8/mxzfszfv8PWKQptO/GZgsv3 -yZoSEaMpgq3RxGx8vRnzbg306MNR+vpz803QO8997oTsSyTIWLWY8wzpGUE+HMI9 -2hxhe2xa1rxM2riXk7RshIeX0qYCbx95APmdnFSUWJFtyWUeQdmk24T3TmnOHYad -6lEfQ1U44odiNXj/BQWr6+UW+ejSHuBxsi9kCMryo6apHx+U0Sdb0W0Adzo0/J1k -ZE5h71MSV4OU5oWVbwbePP8Y5OQztVvxgudeq/eqtUuWInkMzieEVDRSM0iJ1JHt -Di85oWvD/bw7/tqME+fSEU5e7jun0Fxkke27IQOTJargb83UNIPN+69zYcrNQFyP -o633pUdLph2PGzHKwnF3lm18hgCiM5E8/MdSNsQ8yD2VVuLwf3EvAgMBAAGgADAN -BgkqhkiG9w0BAQsFAAOCAgEAWdky38LZxVusUZ93/myKw1gb59NQEz5LwSCOH6hB -hZcQfu7gdwJeufLTQgn3xjjviP12OdU2hyCIfTgZL1K4ohcMvKQaHW1NUS78H6LB -I6DAQuD20hrJAtKA7ujxzHWba/83z/jMSPCNx8vsFWEMaIBc7lfAMYDU9pr9p7jd -pUTuGSJdnXHIpze2uBY+YCfvgP1HINHj/LNoT5XiPmLA7QNgxW3IrQ3PYHSKFS8b -4HtC1vgKZa4VUe4eL6sEL0MxnB6LSyuGL77JeFHQqfU48V0EKlDO0UztEWzyZqE4 -pWfdAWowo1YubWup8bR+5A+5VZQ3UJwUmgYWc4TFUATH/vvfnr88tU6ilbSb/gNE -0tZSLoRDi48s1egaKi+WhHbfm+XhhGlhaFVG+o5uEn3AueVGExdK6bA68SH9AbDM -+tkggBWy2JzzERqmHNoiMUC4mfbaAaOn6hz1YnBEOmt/cn48AFskxqjZ3IJVjjLM -aZBO88g8P9XrQKPYpuoN1FowE+R0rccoTxr8bjsSywV/O+P25Lc0HM0wUZzB5jbI -z75jLij6uM+Qomn9Wij7q6NTuiClTqTRPi94PPi+cz30E15mun1S51RV01uVP0Ma -FY1NLoxWlmLIl1U/PI7jvIO8vqxag0FKevZ8YszxMUy1y3doNPGUcoY7Ta/6bH6S -72c= ------END CERTIFICATE REQUEST----- diff --git a/configs/ssl/privat.key b/configs/ssl/privat.key deleted file mode 100644 index c21abb7..0000000 --- a/configs/ssl/privat.key +++ /dev/null @@ -1,51 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIJKQIBAAKCAgEArcJkDivloDX2QRQE+s1jPH/pxq+oZGeSNe8aJVMXRu3IbIML -+iJt0H0XGol9N9FkvSHF2G33oOmJ134Imd6BcQ/OQCT8J7MvPbts5Y7LWBcwUomJ -+QZq9qcHFVrcP95Q0wrZTV5f2zU468dz+eUnmWVfFYIR674ZImLLtc+bLl3NjzH6 -t23WrTiIUmPpe4dOH9CktKoUyfzgzFcXFOI967mooMAzhefKzigr+5sU34SMbWLs -czspC7cj22LRpIXowFeuRnoygXXVbDvRlgU2criLFqiDCwWqi6OOVZMcNjqePwc4 -1R4qdWeIf7mJ69xuPQtzHrO+rRC8mgGVSU+9nKunNq6tIxvOOnK/TeOzaJoCx/yb -7XsNcYCoue3ZV3emM2WeUB6MOxG41m9AFo9TKsHOtpFLx8tyWTcypBWhr6xTYhNB -GTiSUMofGZmM6sjcVyQT6pEFpx50DxZeTDhnO+wSi8NZRoNKjqMo3wvrvJjcM1mz -qRzHE5nyzU1/Gf/j5WCNdCC/+2Q8s+LXaKkm0iRUuSqmQVtpkzaMCdEf33ELDshG -XN4jCvTSG5w8fL+GdeZ8BpBPLob8qKkYU2kW3YqawQ9+bi7p8MDs1ZCNtjScCzgt -aNvoX/3/TFO4tSu/XCz5nGYKVYbjUrr1Mv9NldSIiua/hJOrsWFfpoEXjmMCAwEA -AQKCAgAKVxMVNM+JZSyuWr6hHi/VndcPl8xxjShKRVxM9FDiS6wtqO7Bh+L5ETia -v6vP8ooIJ0ZaxtCBpuQpCrsATRlu3P3tG0ZWJnedONYWIxU+vMKHZt/rDdK3suDd -CHcq5dPxeyfLTt5tcRFeFpR0PorIuhuacA8Y9EsSnMZ6n0wgyjw9VUASQlsQG9kg -7gkq7LZddlEW3zg1fPLztgsNlxkQOhAq4MUwJscO1Z0ob+YiFwU0TTq88LxUkiV0 -HMFVBRMAvzcDwqnWwmhc9IJYZx8CXLEKPCTwNvobLTR/Ky32nC5mmctsA0uLiQm6 -cBQhEREOWOwU26VxLxnKIGX94tzpqL+k3sWzbfyW2PwCwm7tH18RQSQuwvzWavt0 -CKkQmPIvbJGGDxoNs4FC/NX+N0MXiDvPmN4FQeyPCsXsDW4NUsZy2iYmZO0DISsO -oDQGSVM2/dwP9ktKo781XliY91lPEQHTvbqPr89iiVIwPbV4RN+HFOblLn2vrR/2 -WloMyMKZEZgrEXLLHiwPveK6n8N1v8YxZwFMhJeBMZ2SNXrqcqrycp+/joKf0Lgg -MvrHu8DYMtlQyfVhAiFJvyL6YS3bVjfi1FEYX6FJn1vvSDQOQxPOLhkAnEoItwCY -R/D1QlyGA4GeDYQTEmz70J007V0koKZZFWUpv4InoUjumygaQQKCAQEA2hhXY3Xz -Wo4QtEBZkkG8NVXGY/k1IpCeER2MysgMAAFdO//bXQbaU7DeOi0AeSrkWz/rlfHR -nxtwgtfjt+0uyDLJlvKXscTDh2qZI9t9Z5ZnimAsawH6hrvfzJX1op/RqgG+edXi -2WrefpoAh8swMWljVO/wwai0b2ahFxsIZUU5XFu+ic4Cb/WTORftwY2yh61Qvsxk -jGNym8VywYJuT9a1HTFljNbEKgqlxBmZczMxgFs2zd+2hu3cITuHnM0YKwQN+sth -yDgemHIoFuI8mO3hKRYrOv+/iQslxt1Km0kFsiFetEr3oT5UizaTZ1Elu6mhKITm -U+fcrnQXWnDcGQKCAQEAy/VttR9pRuT/oW0d58hZRa5HKXoHbpG9IS0+MjlicOWq -ZWvfDag/CCRs6SEQfYWQfOs6AH8bMsjMZDWLXuE4obas7SS4/P7pA88Ix3BpFyGu -afpAwDA/sREe6D4DF9yGM02q66Bw5g/YiAW1TOBaXPWSjOfRNWI7zE+N/znaR/Pi -nfm9XEVuQcnCRlYojvosQ+k7+CU/7w4mTraVz3m86CLyo9k4jDtR3OZh8rjlfrMb -Mk272i+7xiSZkL35/7w3DwhSLm+GLuwHJ1OlEGzSrJx9be4aXDS0V/xWTTw5PzaC -lrNhMobgfWckrbVVHouqyzgSMd9NVdOkKUy3Dg4N2wKCAQEAojv/LbZ9Czyowl0o -BDsv9QDUbmPgGdE4NAUmSWYcPxjEsTA3jvDdEep8tQvq0TeN3S8kYUscIt43iK1t -8NDXvwbAnK/jFdMHnEE4n8rTc24XoYC/Ke6z3Ov+o+JdcdavEWbwuRLZB+COl+CZ -SmpkdC0wPeuqzXRgnInchSKP0T14WPLKPxpnB7/G/26EZzmvt2u+p9/FYAVOKP/s -yHPs+Sj/WzL2lpjgHWIEQ2bDlkVbql6v2t9ymNZxrKrqy0Jpmv4OJCSMnXLZl487 -sSIj76LsnjKmf+HlKd2IAXF14SOlwAdAup8Vq/WA0HoNlopvpjSd9FVAPOQ6be9f -u+A+aQKCAQEAtIJIUC62q+nsXGAIQaTNbaAqlwjLHw6ZBo3WJ/klqKl6vzxTMvEe -qAQk58c9ovncwNImiV31ImMYke/Zo2VNC8JzFYaUukSY0aggKvLP74r9pAm52N5a -4Ek4w25uqmWf2DP6+4MJqHOJvgjfRmShVPh6dX6NZ+PC7LXUBHidOWUdwZbQAqPo -Sw1XhYynZLMBDjGTw7Cj/tzVBoEN4YvqpsCXYm/TXjj54Ll9IqaFZjb58PFfOmFY -nKqzxqh8Y9ueFw3UPgiyB0EZq7KZugm2AtKVJ/+9ELIMknpfnweX2txRgzLK6T75 -28K3cY21Ac22oRjE8aKh/T3MYkjlEelaVQKCAQAQGuFJcOu0+E5A91+k+GbgFXmK -cmCEO8iNhEByvfZAMv23+ba8WeEcYJnTFUbyaoESXPPAkPSVeFvOy39Zbq1WAZ7c -BdZUEUONWE0n54ZnvArEKIsvF4YRz//KQ8SaXbhj1OMvhS5fRo3hBxCS3xWyF9sq -qM/AWdz3iGvP/ELpCOQrii//U3WaQvaY17QpqiJ7B9DvsWhDabRVlp6eKTKgAMLq -BlJpLz1tRfpVU+sLI+yvZAbwj6Izex80TXEhD9EMPLBgyIzM67+zdf6awB3mXGRA -zSvlO+eVQYQODNR52sD1+4ythePMC4SJiZyLzy7VnCfmoOPNyPldTxQGJLjE ------END RSA PRIVATE KEY----- diff --git a/configs/ssl/public.pem b/configs/ssl/public.pem deleted file mode 100644 index 1e11f45..0000000 --- a/configs/ssl/public.pem +++ /dev/null @@ -1,85 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIF9jCCBN6gAwIBAgIMY/C5dNv6x+tP/WuUMA0GCSqGSIb3DQEBCwUAMGAxCzAJ -BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTYwNAYDVQQDEy1H -bG9iYWxTaWduIERvbWFpbiBWYWxpZGF0aW9uIENBIC0gU0hBMjU2IC0gRzIwHhcN -MTYwNzAxMTMyMzM0WhcNMTcwNzAyMTMyMzM0WjA5MSEwHwYDVQQLExhEb21haW4g -Q29udHJvbCBWYWxpZGF0ZWQxFDASBgNVBAMMCyouY29kZW15LnJ1MIICIjANBgkq -hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArcJkDivloDX2QRQE+s1jPH/pxq+oZGeS -Ne8aJVMXRu3IbIML+iJt0H0XGol9N9FkvSHF2G33oOmJ134Imd6BcQ/OQCT8J7Mv -Pbts5Y7LWBcwUomJ+QZq9qcHFVrcP95Q0wrZTV5f2zU468dz+eUnmWVfFYIR674Z -ImLLtc+bLl3NjzH6t23WrTiIUmPpe4dOH9CktKoUyfzgzFcXFOI967mooMAzhefK -zigr+5sU34SMbWLsczspC7cj22LRpIXowFeuRnoygXXVbDvRlgU2criLFqiDCwWq -i6OOVZMcNjqePwc41R4qdWeIf7mJ69xuPQtzHrO+rRC8mgGVSU+9nKunNq6tIxvO -OnK/TeOzaJoCx/yb7XsNcYCoue3ZV3emM2WeUB6MOxG41m9AFo9TKsHOtpFLx8ty -WTcypBWhr6xTYhNBGTiSUMofGZmM6sjcVyQT6pEFpx50DxZeTDhnO+wSi8NZRoNK -jqMo3wvrvJjcM1mzqRzHE5nyzU1/Gf/j5WCNdCC/+2Q8s+LXaKkm0iRUuSqmQVtp -kzaMCdEf33ELDshGXN4jCvTSG5w8fL+GdeZ8BpBPLob8qKkYU2kW3YqawQ9+bi7p -8MDs1ZCNtjScCzgtaNvoX/3/TFO4tSu/XCz5nGYKVYbjUrr1Mv9NldSIiua/hJOr -sWFfpoEXjmMCAwEAAaOCAdUwggHRMA4GA1UdDwEB/wQEAwIFoDCBlAYIKwYBBQUH -AQEEgYcwgYQwRwYIKwYBBQUHMAKGO2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5j -b20vY2FjZXJ0L2dzZG9tYWludmFsc2hhMmcycjEuY3J0MDkGCCsGAQUFBzABhi1o -dHRwOi8vb2NzcDIuZ2xvYmFsc2lnbi5jb20vZ3Nkb21haW52YWxzaGEyZzIwVgYD -VR0gBE8wTTBBBgkrBgEEAaAyAQowNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93d3cu -Z2xvYmFsc2lnbi5jb20vcmVwb3NpdG9yeS8wCAYGZ4EMAQIBMAkGA1UdEwQCMAAw -QwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybC5nbG9iYWxzaWduLmNvbS9ncy9n -c2RvbWFpbnZhbHNoYTJnMi5jcmwwIQYDVR0RBBowGIILKi5jb2RlbXkucnWCCWNv -ZGVteS5ydTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHQYDVR0OBBYE -FHlv5NiaqItBFuN0vudXy9jt1bLkMB8GA1UdIwQYMBaAFOpOfNSALeUVgYYmjIJt -wJikz5cPMA0GCSqGSIb3DQEBCwUAA4IBAQBfIs7hKJlHw5Hly/vVhjAQzX8qcN9H -ISyHjmU4KeMKtiq0RdvC2Jf1IQFmxvgmycrARH1Xc9cHoMXZ8prYonnXeRX7fqrL -hsjp6x87DxwDDXqblHqpoakFXhZhY2fJCeH+YQTrY37+hOy3qOreI3CiRK5N+BYF -PO78hVAa5TdawQGM3c1TeYIG3ZzQ3x2wVGAQNCXdwcJOLF9dl6z+syySTOGPABKN -rIEKOzc4ScqIHOzuQ1qTG2QcjwyH9tarDjJd79rnZUQzf1O58DwGwaQZwh6gjksz -QXZOLz6LR55gpBP8cGpqJIwOiZKjtLTqeE6q/kJ0C9sbxnNw9sCkeAhh ------END CERTIFICATE----- - -Корневой сертификат ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw -MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT -aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ -jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp -xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp -1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG -snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ -U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 -9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B -AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz -yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE -38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP -AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad -DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME -HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== ------END CERTIFICATE----- - -Промежуточный сертификат ------BEGIN CERTIFICATE----- -MIIEYzCCA0ugAwIBAgILBAAAAAABRE7wPiAwDQYJKoZIhvcNAQELBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xNDAyMjAxMDAw -MDBaFw0yNDAyMjAxMDAwMDBaMGAxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMTYwNAYDVQQDEy1HbG9iYWxTaWduIERvbWFpbiBWYWxpZGF0 -aW9uIENBIC0gU0hBMjU2IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK -AoIBAQCp3cwOs+IyOd1JIqgTaZOHiOEM7nF9vZCHll1Z8syz0lhXV/lG72wm2DZC -jn4wsy+aPlN7H262okxFHzzTFZMcie089Ffeyr3sBppqKqAZUn9R0XQ5CJ+r69eG -ExWXrjbDVGYOWvKgc4Ux47JkFGr/paKOJLu9hVIVonnu8LXuPbj0fYC82ZA1ZbgX -qa2zmJ+gfn1u+z+tfMIbWTaW2jcyS0tdNQJjjtunz2LuzC7Ujcm9PGqRcqIip3It -INH6yjfaGJjmFiRxJUvE5XuJUgkC/VkrBG7KB4HUs9ra2+PMgKhWBwZ8lgg3nds4 -tmI0kWIHdAE42HIw4uuQcSZiwFfzAgMBAAGjggElMIIBITAOBgNVHQ8BAf8EBAMC -AQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU6k581IAt5RWBhiaMgm3A -mKTPlw8wRwYDVR0gBEAwPjA8BgRVHSAAMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8v -d3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMDMGA1UdHwQsMCowKKAmoCSG -Imh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5uZXQvcm9vdC5jcmwwPQYIKwYBBQUHAQEE -MTAvMC0GCCsGAQUFBzABhiFodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS9yb290 -cjEwHwYDVR0jBBgwFoAUYHtmGkUNl8qJUC99BM00qP/8/UswDQYJKoZIhvcNAQEL -BQADggEBANdFnqDc4ONhWgt9d4QXLWVagpqNoycqhffJ7+mG/dRHzQFSlsVDvTex -4bjyqdKKEYRxkRWJ3AKdC8tsM4U0KJ4gsrGX3G0LEME8zV/qXdeYMcU0mVwAYVXE -GwJbxeOJyLS4bx448lYm6UHvPc2smU9ZSlctS32ux4j71pg79eXw6ImJuYsDy1oj -H6T9uOr7Lp2uanMJvPzVoLVEgqtEkS5QLlfBQ9iRBIvpES5ftD953x77PzAAi1Pj -tywdO02L3ORkHQRYM68bVeerDL8wBHTk8w4vMDmNSwSMHnVmZkngvkA0x1xaUZK6 -EjxS1QSCVS1npd+3lXzuP8MIugS+wEY= ------END CERTIFICATE----- \ No newline at end of file diff --git a/configs/supervisor.conf b/configs/supervisor.conf deleted file mode 100644 index 945e339..0000000 --- a/configs/supervisor.conf +++ /dev/null @@ -1,8 +0,0 @@ -[program:codemy] -command=/usr/bin/uwsgi --ini /var/www/configs/codemy/uwsgi.ini -directory=/var/www/projects/codemy -user=www-data -group=www-data -autostart=true -autorestart=true -stderr_logfile=/var/www/logs/codemy/supervisor-errors.log \ No newline at end of file diff --git a/configs/uwsgi.ini b/configs/uwsgi.ini deleted file mode 100644 index fe093b1..0000000 --- a/configs/uwsgi.ini +++ /dev/null @@ -1,15 +0,0 @@ -[uwsgi] -chdir = /var/www/projects/codemy/ -env = DJANGO_SETTINGS_MODULE=lms.settings -module = lms.wsgi:application -home = /var/www/.envs/codemy/ -master = true -threads = 3 -processes = 2 -socket = /var/www/run/codemy.sock -chmod-socket = 777 -vacuum = true -harakiri = 20 -plugins=python34 -uid = www-data -gid = www-data diff --git a/courses/admin.py b/courses/admin.py index 2a10b8a..00b426e 100755 --- a/courses/admin.py +++ b/courses/admin.py @@ -1,139 +1,16 @@ from django.contrib import admin -from access.models import User -from courses.models import Lesson, Course, CourseTheme, Homework, Exam, \ - Skills, Achievements, SkillJ, CourseMap, NormalMap, Topic, Task, Vertex,\ - AchievementsMap, Diploma, MaterialDirection, Tutorial +from courses.models import Course, Skills, Achievements, SkillJ,\ + CourseMap, Topic, Task, Vertex, Diploma, MaterialDirection, Tutorial -admin.site.register(NormalMap) +admin.site.register(CourseMap) admin.site.register(Topic) admin.site.register(Task) admin.site.register(Vertex) admin.site.register(Tutorial) - - -class LessonAdmin(admin.ModelAdmin): - list_display = ('id', 'get_title', 'sort', 'theme', 'token', 'on_comment') - raw_id_fields = ['materials'] - search_fields = ['title', 'sort', 'id', 'token'] - list_filter = ['course', 'on_comment', 'theme'] - - def get_title(self, obj): - return obj.title[:100] - -admin.site.register(Lesson, LessonAdmin) - - -class MaterialDirectionAdmin(admin.ModelAdmin): - list_display = ('title', 'color',) - raw_id_fields = ['mentors'] - - def formfield_for_manytomany(self, db_field, request, **kwargs): - if db_field.name == "mentors": - kwargs["queryset"] = User.objects.filter(in_role='S2') - return super( - MaterialDirectionAdmin, self).formfield_for_manytomany( - db_field, request, **kwargs) - -admin.site.register(MaterialDirection, MaterialDirectionAdmin) - - -class CourseAdmin(admin.ModelAdmin): - list_display = ('title', 'id', 'direction', 'must_build', 'public', ) - list_filter = ('direction', ) - raw_id_fields = ['teachers'] - search_fields = ['title', 'id'] - filter_horizontal = ['recommend', 'keywords'] - - def formfield_for_manytomany(self, db_field, request, **kwargs): - if db_field.name == "teachers": - kwargs["queryset"] = User.objects.filter(in_role='T') - - if db_field.name == "mentors": - kwargs["queryset"] = User.objects.filter(in_role='S2') - - return super(CourseAdmin, self).formfield_for_manytomany(db_field, request, **kwargs) - -admin.site.register(Course, CourseAdmin) - - -class CourseThemeAdmin(admin.ModelAdmin): - list_display = ('id', 'sort', 'title', 'course', '_type', 'price_type', 'on_comment', ) - list_filter = ['course', '_type', 'on_comment'] - search_fields = ['title', 'sort'] - -admin.site.register(CourseTheme, CourseThemeAdmin) - - -class HomeworkAdmin(admin.ModelAdmin): - list_display = ('id', 'course', 'theme', 'token') - search_fields = ['id', 'theme', 'course', 'token'] - list_filter = ('course',) - raw_id_fields = ('theme', 'course', 'materials', ) - -admin.site.register(Homework, HomeworkAdmin) - - -class ExamAdmin(admin.ModelAdmin): - list_display = ('course', 'token', ) - raw_id_fields = ['materials'] - search_fields = ['id', 'course__title'] - -admin.site.register(Exam, ExamAdmin) - - -class SkillsAdmin(admin.ModelAdmin): - list_display = ('title', 'color', 'mini_icon', 'big_icon') - search_fields = ['title'] - -admin.site.register(Skills, SkillsAdmin) - - -class AchievementsAdmin(admin.ModelAdmin): - list_display = ('id', 'title', 'icon', 'image', 'background', 'border',) - - -admin.site.register(Achievements, AchievementsAdmin) - - -class SkillJAdmin(admin.ModelAdmin): - list_display = ('skill', 'lesson', 'size',) - raw_id_fields = ['lesson'] - list_filter = ['lesson__course'] - -admin.site.register(SkillJ, SkillJAdmin) - - -class CourseMapAdmin(admin.ModelAdmin): - list_display = ('id', 'course', 'lesson', 'homework', 'exam', 'sort', 'token', ) - raw_id_fields = ['course', 'lesson', 'homework', 'exam'] - list_filter = ('course',) - search_fields = ['lesson_id'] - -admin.site.register(CourseMap, CourseMapAdmin) - - -class AchievementsMapAdmin(admin.ModelAdmin): - list_display = ('id', 'point', 'achiv', 'after', ) - raw_id_fields = ['point'] - - -admin.site.register(AchievementsMap, AchievementsMapAdmin) - - -class DiplomaAdmin(admin.ModelAdmin): - list_filter = ('course__title', 'key', ) - search_fields = ['course__title'] - - -admin.site.register(Diploma, DiplomaAdmin) - -# class FlowAdmin(admin.ModelAdmin): -# save_on_top = True -# list_display = ('title', 'course', 'start_flow') -# raw_id_fields = ['course'] -# list_filter = ('start_flow','course') -# search_fields = ['title', 'description'] -# -# admin.site.register(Flow, FlowAdmin) - +admin.site.register(MaterialDirection) +admin.site.register(Course) +admin.site.register(Skills) +admin.site.register(Achievements) +admin.site.register(SkillJ) +admin.site.register(Diploma) \ No newline at end of file diff --git a/courses/api.py b/courses/api.py deleted file mode 100755 index 86c16b7..0000000 --- a/courses/api.py +++ /dev/null @@ -1,912 +0,0 @@ -# coding=utf-8 -import datetime -import re -from django.db.models import Q -from access.models import User, ActionJ -from lms.decors import api_decor -from courses.models import Course, Lesson, Homework, CourseTheme -from courses.templates import comment_fabric -from journals.models import AchievementJ, LessonJ, HomeworkJ, ExamJ, check_journal, HomeworkTry, ExamTry -from finance.models import Bill -from courses.tools import set_read_flag, get_next_button -from management.letters import sent_comment_news, sent_teacher_answer, sent_to_teacher_answer, letter_delete_comment, \ - sent_new_comment -from management.models import Comment -from lms.settings import DOMAIN -from storage.models import Storage -from library.models import Article -import django.utils.timezone - - -@api_decor(without_auth=False, method='POST', need_keys=['id', 'material_id', 'text', 'type'], check_request=True) -def sent_comment_response(request, context): - try: - response = Comment.objects.get(id=request.POST['id']) - except Comment: - context['code'] = '0' - context['response'] = u'Исходный комментарий не найден' - return context - comment = Comment.objects.create(owner=request.user, text=request.POST['text'], parent_id=response.id) - - if request.POST['type'] == 'L': - try: - material = Article.objects.get(id=request.POST['material_id']) - except Article.DoesNotExists: - context['code'] = '0' - context['response'] = u'Статья не найдена' - return context - - elif request.POST['type'] == 'A': - try: - material = Lesson.objects.get(id=request.POST['material_id']) - except Lesson.DoesNotExists: - context['code'] = '0' - context['response'] = u'Урок не найден' - return context - - response.replies.add(comment) - response.response_comment = comment - response.response = True - response.saw.add(request.user) - if response.owner.check_subscription('new_comment'): - sent_comment_news(response, comment, material, _type=request.POST['type']) - response.save() - material.comments.add(comment) - material.save() - context['code'] = '1' - return context - - -@api_decor(without_auth=False, method='POST', need_keys=['id'], check_request=True) -def close_achievement(request, context): - # Пометка ачивки, как прочитанной - a = AchievementJ.objects.get(id=request.POST['id']) - a.got = True - a.save() - context['code'] = '1' - return context - - -@api_decor(without_auth=False) -def get_achievement(request, context): - # Получение ачивки пользователя, первой в очереди, не прочитанной - context['code'] = '0' - a = AchievementJ.objects.filter(student=request.user, got=False).first() - if a: - context['code'] = '1' - context['data'] = { - 'id': a.id, - 'title': a.title, - 'text': a.text, - 'image': a.achievement.image.url, - 'border': a.achievement.border, - 'background': a.achievement.background - } - return context - - -@api_decor(without_auth=False) -def get_process_vector(request, context): - return context - - -@api_decor(without_auth=False, need_keys=['id', 'user'], method='GET', check_request=True) -def check_bill(request, context): - # Проверка оплаты - # TODO: Применить новую модель доступов - course = Course.objects.get(id=request.GET['id']) - user = User.objects.get(id=request.GET['user']) - context['code'] = '0' - if Bill.objects.filter(service__course=course, user=user, status='F').exists(): - context['code'] = '1' - return context - - -@api_decor(without_auth=False, need_keys=['lesson'], method='POST', check_request=True) -def read_lesson(request, context): - # Пометка урока как прочитанного - context['code'] = '1' - try: - lesson = Lesson.objects.get(id=request.POST['lesson']) - journal = LessonJ.objects.get(student=request.user, material=Lesson.objects.get(id=request.POST['lesson'])) - except Lesson.DoesNotExist: - context['code'] = '0' - except LessonJ.DoesNotExist: - context['code'] = '0' - else: - context['data'] = [journal.id, lesson.id] - journal.saw_this() - return context - - -@api_decor(without_auth=False) -def sent_lesson_comment(request, context): - # Отправка комментария урока - if request.POST['comment_sent_text']: - lesson = Lesson.objects.get(id=request.POST['comment_for_lesson_id']) - parent_id = request.POST['reply_for_comment_id'] - comment = Comment.objects.create(parent_id=parent_id, owner=request.user, - text=request.POST['comment_sent_text'], date=django.utils.timezone.now()) - - lesson.comments.add(comment) - lesson.save() - # Получение о добавление файлов комментария - r = re.compile('^file_') - files_keys = [] - for i in request.POST.keys(): - if r.match(i): files_keys.append(i) - - if files_keys: - for i in files_keys: - comment.files.add(Storage.objects.get(key=request.POST[i])) - comment.save() - - if parent_id != '0': - comment2 = Comment.objects.get(id=parent_id) - if comment2.owner.check_subscription('new_comment'): - sent_comment_news(comment2, comment, lesson) - context['code'] = '1' - context['data'] = comment.id - - if not comment.send: - for eye in User.objects.filter(in_role='S2'): - sent_new_comment(comment, lesson, eye.email) - - context['code'] = '1' - return context - - -@api_decor(without_auth=True, need_keys=['lesson'], method='POST', check_request=True) -def load_lesson_comments(request, context): - # Загрузка списка комментариев - lesson = Lesson.objects.get(id=request.POST['lesson']) - context['data'] = lesson.get_comments(_user=request.user) - - if len(context['data']) == 0: - context['code'] = '0' - else: - context['code'] = '1' - return context - - -@api_decor(without_auth=True, need_keys=['id'], method='POST', check_request=True) -def load_comment(request, context): - try: - comment = Comment.objects.get(id=request.POST['id']) - except Comment.DoesNotExist: - context['code'] = '0' - else: - context['data'] = comment.get_face(__user=request.user) - return context - - -@api_decor(without_auth=False) -def sent_homework_comment(request, context): - # Отправка ДЗ попытки - context['data'] = {} - context['code'] = '0' - if request.POST['homework_text']: - homework = HomeworkJ.objects.get(id=request.POST['homework_id'], student=request.user) - h_status = homework.get_status_flag() - if h_status not in ['N', 'F']: - ht, c = HomeworkTry.objects.get_or_create(parent=homework, success=False, f_date=None, student=request.user, - material=homework.material) - comment = Comment.objects.create(owner=request.user, text=request.POST['homework_text'], - date=django.utils.timezone.now()) - ht.comments.add(comment) - ht.save() - if c: - action = ActionJ.objects.create(student=homework.student, - a_type='I', - place=u'Курс '+u'\xab'+u'{0}'.format(homework.material.course.get_title())+u'\xbb'+u', домашнее задание # {0}'.format(homework.material.theme.sort), - text=u'Ваше домашнее задание отправлено на проверку.' - u''.format(homework.material.id, comment.id, DOMAIN)) - homework.date = datetime.datetime.now() - if homework.student.check_subscription('teacher'): - sent_teacher_answer(action) - - # Отправка письма и активности преподавателю - sent_to_teacher_answer(ActionJ.objects.create( - student=ht.teacher, - place=u'Студент: {0}, домашнее задание # {1}'.format( - homework.student, - homework.material.theme.sort), - text=u'Текст: {0}
Перейти к проверке'.format(comment.text, - homework.id, DOMAIN), - a_type='I' - )) - - # Проверка и загрузка файлов - r = re.compile('^file_') - files_keys = [] - for i in request.POST.keys(): - if r.match(i): files_keys.append(i) - - if files_keys: - for i in files_keys: - comment.files.add(Storage.objects.get(key=request.POST[i])) - comment.save() - - context['code'] = '1' - context['data'] = {'try': ht.get_head_face(), 'comment': comment.get_face()} - - return context - - -@api_decor(without_auth=False) -def send_cancel_teach_comment(request, context): - # Отправка на доработку для преподавателя - # TODO: Перейти на модель попыток - if request.POST['comment_sent_text']: - lesson = HomeworkJ.objects.get(student__id=request.POST['comment_for_user_id'], - material__theme=request.POST['comment_for_theme_id'], teacher=request.user) - parent_id = request.POST['reply_for_comment_id'] - comment = Comment.objects.create(parent_id=parent_id, owner=request.user, status='F', - text=request.POST['comment_sent_text'], date=django.utils.timezone.now()) - lesson.comments.add(comment) - if lesson.status != 'F': - lesson.status = 'E' - action = ActionJ.objects.create(student=lesson.student, - a_type='D', - place=u'Курс '+u'\xab'+u'{0}'.format(lesson.homework.course.get_title())+u'\xbb'+u', домашнее задание # {0}'.format(lesson.homework.theme.sort), - text=u'Ваше домашнее задание проверено преподавателем. ' - u'Вам необходимо провести работу над ошибками' - u''.format( - lesson.material.id, comment.id, DOMAIN)) - if lesson.student.check_subscription('teacher'): - sent_teacher_answer(action) - - lesson.save() - - r = re.compile('^file_') - files_keys = [] - for i in request.POST.keys(): - if r.match(i): files_keys.append(i) - - if files_keys: - for i in files_keys: - comment.files.add(Storage.objects.get(key=request.POST[i])) - comment.save() - - if parent_id != '0': - comment2 = Comment.objects.get(id=parent_id) - if comment2.owner.check_subscription('new_comment'): - sent_comment_news(comment2, comment, lesson) - context['code'] = '1' - context['data'] = comment.id - context['code'] = '1' - return context - - -@api_decor(without_auth=False) -def send_accept_teach_comment(request, context): - # Одобрение попытки ДЗ для преподавателя - # TODO: Перейти на модель попыток - lesson = HomeworkJ.objects.get(student__id=request.POST['comment_for_user_id'], - material__theme=request.POST['comment_for_theme_id'], teacher=request.user) - parent_id = request.POST['reply_for_comment_id'] - comment = Comment.objects.create(parent_id=parent_id, owner=request.user, status='G', - text=request.POST['comment_sent_text'] + get_next_button(lesson.student, "H", - lesson.homework.theme.id), - date=django.utils.timezone.now()) - lesson.comments.add(comment) - if lesson.status != 'F': - lesson.status = 'F' - action = ActionJ.objects.create(student=lesson.student, - a_type='S', - place=u'Курс '+u'\xab'+u'{0}'.format(lesson.homework.course.get_title())+u'\xbb'+u', домашнее задание # {0}'.format( - lesson.homework.theme.sort), - text=u'Ваше домашнее задание одобрено преподавателем.'.format( - lesson.material.id, comment.id, DOMAIN)) - if lesson.student.check_subscription('teacher'): - sent_teacher_answer(action) - - set_read_flag(lesson.student, lesson.homework.course) - lesson.save() - - r = re.compile('^file_') - files_keys = [] - for i in request.POST.keys(): - if r.match(i): files_keys.append(i) - - if files_keys: - for i in files_keys: - comment.files.add(Storage.objects.get(key=request.POST[i])) - comment.save() - - if parent_id != '0': - comment2 = Comment.objects.get(id=parent_id) - if comment2.owner.check_subscription('new_comment'): - sent_comment_news(comment2, comment, lesson) - context['code'] = '1' - context['data'] = comment.id - return context - - -@api_decor(without_auth=False) -def send_exam_cancel_teach_comment(request, context): - # Отправка попытки на доработку для преподавателя - # TODO: Перейти на модель попыток - if request.POST['comment_sent_text']: - lesson = ExamJ.objects.get(student__id=request.POST['comment_for_user_id'], - material__course__id=request.POST['comment_for_theme_id'], teacher=request.user) - parent_id = request.POST['reply_for_comment_id'] - comment = Comment.objects.create(parent_id=parent_id, owner=request.user, status='F', - text=request.POST['comment_sent_text'], date=django.utils.timezone.now()) - lesson.comments.add(comment) - if lesson.status != 'F': - lesson.status = 'E' - action = ActionJ.objects.create(student=lesson.student, - a_type='D', - place=u'Экзаменационная работа '+u'\xab'+u'{0}'.format(lesson.exam.course.get_title())+u'\xbb', - text=u'Ваша работа отправлена на доработку. ' - u'' - u'Вам необходимо провести работу над ошибками'.format( - lesson.material.id, DOMAIN)) - if lesson.student.check_subscription('teacher'): - sent_teacher_answer(action) - - lesson.save() - - r = re.compile('^file_') - files_keys = [] - for i in request.POST.keys(): - if r.match(i): files_keys.append(i) - - if files_keys: - for i in files_keys: - comment.files.add(Storage.objects.get(key=request.POST[i])) - comment.save() - - if parent_id != '0': - comment2 = Comment.objects.get(id=parent_id) - if comment2.owner.check_subscription('new_comment'): - sent_comment_news(comment2, comment, lesson) - context['code'] = '1' - context['data'] = comment.id - context['code'] = '1' - return context - - -@api_decor(without_auth=False) -def send_exam_accept_teach_comment(request, context): - # Принятие экзамена для преподавателя - # TODO: Перейти на модель попыток - lesson = ExamJ.objects.get(student__id=request.POST['comment_for_user_id'], - material__course__id=request.POST['comment_for_theme_id'], teacher=request.user) - parent_id = request.POST['reply_for_comment_id'] - comment = Comment.objects.create(parent_id=parent_id, owner=request.user, status='G', - text=request.POST['comment_sent_text'] + - request.POST['comment_sent_text'] + get_next_button(lesson.student, "E", - lesson.exam.course.id), - date=django.utils.timezone.now()) - lesson.comments.add(comment) - if lesson.status != 'F': - lesson.status = 'F' - action = ActionJ.objects.create(student=lesson.student, - a_type='W', - place=u'Экзаменационная работа '+u'\xab'+u'{0}'.format(lesson.exam.course.get_title())+u'\xbb', - text=u'Ваша экзаменационная работа принята преподователем. ' - u'Поздравляем вас!'.format( - lesson.material.id, DOMAIN)) - if lesson.student.check_subscription('teacher'): - sent_teacher_answer(action) - - lesson.save() - # TODO: Много повторений в других методах, переделать на отдельный метод - r = re.compile('^file_') - files_keys = [] - for i in request.POST.keys(): - if r.match(i): files_keys.append(i) - - if files_keys: - for i in files_keys: - comment.files.add(Storage.objects.get(key=request.POST[i])) - comment.save() - - if parent_id != '0': - comment2 = Comment.objects.get(id=parent_id) - if comment2.owner.check_subscription('new_comment'): - sent_comment_news(comment2, comment, lesson) - context['code'] = '1' - context['data'] = comment.id - return context - - -@api_decor(without_auth=False, need_keys=['theme', 'student'], method='POST', check_request=True) -def load_homework_comments_for_teacher(request, context): - # Получение комментариев для преподавателя - # TODO: Перейти на модель попыток - homework = HomeworkJ.objects.get(material__theme__id=request.POST['theme'], student__id=request.POST['student'], - teacher=request.user) - context['data'] = [] - for i in homework.comments.filter(parent_id='0').order_by('date'): - context['data'].append(comment_fabric(i, __user=request.user)) - - if len(context['data']) == 0: - context['code'] = '0' - else: - context['code'] = '1' - return context - - -@api_decor(without_auth=False, need_keys=['theme', 'student'], method='POST', check_request=True) -def load_exam_comments_for_teacher(request, context): - # Полечение попыток экзамена - # TODO: Перейти на модель попыток - homework = ExamJ.objects.get(material__course__id=request.POST['theme'], student__id=request.POST['student'], - teacher=request.user) - context['data'] = [] - for i in homework.comments.filter(parent_id='0').order_by('date'): - context['data'].append(comment_fabric(i, __user=request.user)) - - if len(context['data']) == 0: - context['code'] = '0' - else: - context['code'] = '1' - return context - - -@api_decor(without_auth=False, need_keys=['homework'], method='POST', check_request=True) -def load_homework_comments(request, context): - # Загрузка комментариев по ДЗ - # TODO: Перейти на модель попыток - homework = HomeworkJ.objects.get(material__id=request.POST['homework'], student=request.user) - context['data'] = [] - for i in homework.comments.filter(parent_id='0').order_by('date'): - context['data'].append(comment_fabric(i, __user=request.user)) - - if len(context['data']) == 0: - context['code'] = '0' - else: - context['code'] = '1' - return context - - -@api_decor(without_auth=False) -def sent_exam_comment(request, context): - # Отправка попытки сутедентом - context['data'] = {} - context['code'] = '0' - if request.POST['exam_text']: - exam = ExamJ.objects.get(id=request.POST['exam_id'], student=request.user) - h_status = exam.get_status_flag() - if h_status not in ['N', 'F']: - ht, c = ExamTry.objects.get_or_create(parent=exam, success=False, f_date=None, student=request.user, - material=exam.material) - comment = Comment.objects.create(owner=request.user, text=request.POST['exam_text'], - date=django.utils.timezone.now()) - ht.comments.add(comment) - ht.save() - if c: - action = ActionJ.objects.create(student=exam.student, - a_type='I', - place=u'Курс '+u'\xab'+u'{0}'.format( - exam.material.course.get_title())+u'\xbb'+u', Экзаменационная работа', - text=u'Ваша экзаменационная работа отправлена на проверку.' - u''.format(exam.material.id, comment.id, DOMAIN)) - exam.date = datetime.datetime.now() - if exam.student.check_subscription('teacher'): - sent_teacher_answer(action) - - # Отправка письма и активности преподавателю - sent_to_teacher_answer(ActionJ.objects.create( - student=ht.teacher, - place=u'Студент: {0}, Экзамен'.format(exam.student), - text=u'Текст: {0}
Перейти к проверке'.format(comment.text, exam.id, DOMAIN), - a_type='P' - )) - # Проверка и загрузка файлов - r = re.compile('^file_') - files_keys = [] - for i in request.POST.keys(): - if r.match(i): files_keys.append(i) - - if files_keys: - for i in files_keys: - comment.files.add(Storage.objects.get(key=request.POST[i])) - comment.save() - - context['code'] = '1' - context['data'] = {'try': ht.get_head_face(), 'comment': comment.get_face()} - - return context - - -@api_decor(without_auth=True, need_keys=['exam'], method='POST', check_request=True) -def load_exam_comments(request, context): - # Загрузка попыток по экзаменам - # TODO: Перейти на модель попыток - exam = ExamJ.objects.get(material__id=request.POST['exam']) - context['data'] = [] - for i in exam.comments.filter(parent_id='0').order_by('date'): - context['data'].append(comment_fabric(i, __user=request.user)) - - if len(context['data']) == 0: - context['code'] = '0' - else: - context['code'] = '1' - return context - - -@api_decor(without_auth=False) -def delete_comment(request, context): - comment = Comment.objects.get(id=request.POST.get('comment')) - if comment.owner == request.user or request.user.is_admin: - if request.POST.get('text'): - letter_delete_comment(comment, request.POST.get('text')) - - if Comment.objects.filter(parent_id=comment.id, closed=False).exists(): - comment.closed = True - comment.save() - else: - comment.delete() - if comment.parent_id != '0' and Comment.objects.filter(id=comment.parent_id, - closed=True).exists() and not Comment.objects.filter( - parent_id=comment.parent_id).exists(): - Comment.objects.get(id=comment.parent_id).delete() - - context['code'] = '1' - else: - context['code'] = '0' - context['response'] = u'Вы не можете удалить коммментарий, автором которого вы не являетесь' - return context - - -@api_decor(without_auth=False) -def get_lesson_comments_length(request, context): - context['code'] = '1' - context['data'] = Lesson.objects.get(id=request.GET['id']).comments.filter(closed=False).count() - return context - - -@api_decor(without_auth=False) -def get_homework_comments_length(request, context): - context['code'] = '1' - - try: - result = HomeworkJ.objects.get(material=Homework.objects.get(id=request.GET['id']), - student=request.user).get_comments_length() - except HomeworkJ.DoesNotExist: - result = 0 - - context['data'] = result - return context - - -@api_decor(without_auth=False) -def get_homework_comments_length_for_teacher(request, context): - context['code'] = '1' - context['data'] = HomeworkJ.objects.get(material__theme__id=request.GET['id'], teacher=request.user, - student__id=request.GET['student']).get_comments_length() - return context - - -@api_decor(without_auth=False) -def get_exam_comments_length_for_teacher(request, context): - context['code'] = '1' - context['data'] = ExamJ.objects.get(material__course__id=request.GET['id'], teacher=request.user, - student__id=request.GET['student']).get_comments_length() - return context - - -@api_decor(without_auth=False) -def get_exam_comments_length(request, context): - context['code'] = '1' - context['data'] = ExamJ.objects.get(material__id=request.GET['id'], student=request.user).get_comments_length() - return context - - -@api_decor(without_auth=False) -def get_comment_text(request, context): - try: - comment = Comment.objects.get(id=request.GET['comment']) - except Comment.DoesNotExist: - context['code'] = '0' - else: - context['code'] = '1' - context['data'] = comment.get_text() - return context - - -@api_decor(without_auth=False, need_keys=['ID'], check_request=True, method='GET') -def get_lesson_context(request, context): - if request.user.in_role != 'U': - lesson = Lesson.objects.get(id=request.GET['ID']) - materials = [] if lesson.materials.all() else '' - for i in lesson.materials.all(): - materials.append({ - 'url': i.original.url, - 'id': 'single_image' if i.f_format.f_type == 'I' else '', - 'file_name': i.get_file_name(), - 'name_for_user': i.get_name_for_user(), - 'icon_class': i.f_format.icon_class - }) - context['data'] = { - 'video': lesson.video, - 'description': lesson.description, - 'title': lesson.title, - 'materials': materials - } - context['code'] = '1' - return context - - -@api_decor(without_auth=False, need_keys=['start_place_type', 'start_place_id'], method='GET', check_request=True) -def get_next_button_ajax(request, context): - # Получение следующей кнопки - context['data'] = get_next_button(request.user, - request.GET['start_place_type'], - request.GET['start_place_id']) - context['code'] = '1' - return context - - -@api_decor(without_auth=True, need_keys=['id'], method='GET', check_request=True) -def by_course_data(request, context): - # Получить информацию окна покупки для курса - try: - course = Course.objects.get(id=request.GET['id']) - except Course.DoesNotExist: - context['code'] = '1' - else: - context['code'] = '1' - context['data'] = { - 'image': course.buy_icon.url if course.buy_icon else '/static/img/1442791218_certificate.png', - 'name': course.title, - 'basic': CourseTheme.objects.filter(course=course, - _type='B').count() if not course.use_fail or course.basic_len == 0 else course.basic_len, - 'addition': CourseTheme.objects.filter( - Q(course=course, _type='A') | Q(course=course, _type='P') | Q(course=course, - _type='M')).count() if not course.use_fail or course.addition_len == 0 else course.addition_len, - 'min_price': 6777 if course.min_price == 0 else course.min_price - } - return context - - -@api_decor(without_auth=False, need_keys=['ID'], method='GET', check_request=True) -def get_homework_context(request, context): - # Получение информации из ДЗ - if request.user.in_role != 'U': - homework = CourseTheme.objects.get(id=request.GET['ID']).get_homework() - materials = [] if homework.materials.all() else '' - for i in homework.materials.all(): - materials.append({ - 'url': i.original.url, - 'id': 'single_image' if i.f_format.f_type == 'I' else '', - 'file_name': i.get_file_name(), - 'name_for_user': i.get_name_for_user(), - 'icon_class': i.f_format.icon_class - }) - context['data'] = { - 'description': homework.description, - 'materials': materials - } - context['code'] = '1' - return context - - -@api_decor(without_auth=False) -def sent_homework_up_teacher(request, context): - context['data'] = {} - context['code'] = '0' - if request.POST['homework_text']: - homework = HomeworkJ.objects.get(id=request.POST['homework_id']) - h_status = homework.get_status_flag() - if h_status not in ['N', 'F']: - ht, c = HomeworkTry.objects.get_or_create(parent=homework, success=False, f_date=None, teacher=request.user, - material=homework.material, student=homework.student) - comment = Comment.objects.create(owner=request.user, status='G', - text=request.POST['homework_text'], - date=django.utils.timezone.now()) - ht.comments.add(comment) - - action = ActionJ.objects.create(student=ht.student, - a_type='I', - place=u'Курс '+u'\xab'+u'{0}'.format(homework.material.course.get_title())+u'\xbb'+u', домашнее задание # {0}'.format(homework.material.theme.sort), - text=u'Ваше домашнее задание одобрено преподавателем.'.format( - homework.material.id, comment.id, DOMAIN)) - - if homework.student.check_subscription('teacher'): - sent_teacher_answer(action) - - # Отправка письма и активности преподавателю - sent_to_teacher_answer(ActionJ.objects.create( - student=ht.get_teacher(), - place=u'Студент: {0}, домашнее задание # {1}'.format( - homework.student, - homework.material.theme.sort), - text=u'Задание одобрено', - a_type='S' - )) - - # Проверка и загрузка файлов - r = re.compile('^file_') - files_keys = [] - for i in request.POST.keys(): - if r.match(i): files_keys.append(i) - - if files_keys: - for i in files_keys: - comment.files.add(Storage.objects.get(key=request.POST[i])) - comment.save() - - context['code'] = '1' - context['data'] = {'try': ht.get_head_face(), 'comment': comment.get_face()} - ht.saw_this() - - homework.success = True - homework.save() - return context - - -@api_decor(without_auth=False) -def sent_homework_down_teacher(request, context): - context['data'] = {} - context['code'] = '0' - if request.POST['homework_text'] and request.user.in_role == 'T': - homework = HomeworkJ.objects.get(id=request.POST['homework_id']) - h_status = homework.get_status_flag() - if h_status not in ['N', 'F']: - ht, c = HomeworkTry.objects.get_or_create(parent=homework, success=False, f_date=None, teacher=request.user, - material=homework.material, student=homework.student) - comment = Comment.objects.create(owner=request.user, date=django.utils.timezone.now(), status='F', - text=request.POST['homework_text']) - ht.comments.add(comment) - ht.success = False - ht.f_date = datetime.datetime.now() - ht.save() - action = ActionJ.objects.create(student=ht.student, - a_type='S', - place=u'Курс '+u'\xab'+u'{0}'.format(homework.material.course.get_title())+u'\xbb'+u', домашнее задание # {0}'.format(homework.material.theme.sort), - text=u'Ваше домашнее задание проверено преподавателем. ' - u'Вам необходимо провести работу над ошибками' - u''.format( - homework.material.id, comment.id, DOMAIN)) - - if ht.student.check_subscription('teacher'): - sent_teacher_answer(action) - - - # Отправка письма и активности преподавателю - ActionJ.objects.create( - student=ht.get_teacher(), - place=u'Студент: {0}, домашнее задание # {1}'.format( - homework.student, - homework.material.theme.sort), - text=u'Задание отправлено на доработку', - a_type='D' - ) - - # Проверка и загрузка файлов - r = re.compile('^file_') - files_keys = [] - for i in request.POST.keys(): - if r.match(i): files_keys.append(i) - - if files_keys: - for i in files_keys: - comment.files.add(Storage.objects.get(key=request.POST[i])) - comment.save() - - context['code'] = '1' - context['data'] = {'try': ht.get_head_face(), 'comment': comment.get_face()} - return context - - -@api_decor(without_auth=False) -def sent_exam_up_teacher(request, context): - context['data'] = {} - context['code'] = '0' - if request.POST['exam_text']: - homework = ExamJ.objects.get(id=request.POST['exam_id']) - h_status = homework.get_status_flag() - if h_status not in ['N', 'F']: - ht, c = ExamTry.objects.get_or_create(parent=homework, success=False, f_date=None, teacher=request.user, - material=homework.material, student=homework.student) - comment = Comment.objects.create(owner=request.user, status='G', - text=request.POST['exam_text'], - date=django.utils.timezone.now()) - ht.comments.add(comment) - action = ActionJ.objects.create(student=ht.student, - a_type='W', - place=u'Экзаменационная работа '+u'\xab'+u'{0}'.format( - ht.material.course.get_title())+u'\xbb', - text=u'Ваша экзаменационная работа принята преподователем. ' - u'Поздравляем вас!'.format( - ht.material.id, DOMAIN)) - - if homework.student.check_subscription('teacher'): - sent_teacher_answer(action) - - # Отправка письма и активности преподавателю - ActionJ.objects.create( - student=ht.get_teacher(), - place=u'Студент: {0}, Экзамен'.format(homework.student), - text=u'Экзамен одобрен', - a_type='S' - ) - - if not ExamTry.objects.filter(teacher=homework.teacher, success=True).exists(): - # Отправка письма и активности преподавателю - ActionJ.objects.create( - student=ht.teacher, - place=u'Студент: {0}, Экзамен'.format(homework.student), - text=u'Поздравляем. Ваш первый студент дошедший до конца', - a_type='W' - ) - - # Проверка и загрузка файлов - r = re.compile('^file_') - files_keys = [] - for i in request.POST.keys(): - if r.match(i): files_keys.append(i) - - if files_keys: - for i in files_keys: - comment.files.add(Storage.objects.get(key=request.POST[i])) - comment.save() - - context['code'] = '1' - context['data'] = {'try': ht.get_head_face(), 'comment': comment.get_face()} - ht.saw_this() - return context - - -@api_decor(without_auth=False) -def sent_exam_down_teacher(request, context): - context['data'] = {} - context['code'] = '0' - if request.POST['exam_text'] and request.user.in_role == 'T': - homework = ExamJ.objects.get(id=request.POST['exam_id']) - h_status = homework.get_status_flag() - if h_status not in ['N', 'F']: - ht, c = ExamTry.objects.get_or_create(parent=homework, success=False, f_date=None, teacher=request.user, - material=homework.material, student=homework.student) - comment = Comment.objects.create(owner=request.user, date=django.utils.timezone.now(), status='F', - text=request.POST['exam_text']) - ht.comments.add(comment) - ht.f_date = datetime.datetime.now() - ht.save() - action = ActionJ.objects.create(student=ht.student, - a_type='D', - place=u'Экзаменационная работа '+u'\xab'+u'{0}'.format( - ht.material.course.get_title())+u'\xbb', - text=u'Ваша работа отправлена на доработку. ' - u'' - u'Вам необходимо провести работу над ошибками'.format( - ht.material.id, DOMAIN)) - - if ht.student.check_subscription('teacher'): - sent_teacher_answer(action) - - # Отправка письма и активности преподавателю - ActionJ.objects.create( - student=ht.get_teacher(), - place=u'Студент: {0}, Экзамен'.format(homework.student), - text=u'Задание отправлено на доработку', - a_type='D' - ) - - # Проверка и загрузка файлов - r = re.compile('^file_') - files_keys = [] - for i in request.POST.keys(): - if r.match(i): files_keys.append(i) - - if files_keys: - for i in files_keys: - comment.files.add(Storage.objects.get(key=request.POST[i])) - comment.save() - - context['code'] = '1' - context['data'] = {'try': ht.get_head_face(), 'comment': comment.get_face()} - return context diff --git a/courses/course_update.py b/courses/course_update.py deleted file mode 100644 index dc3cf36..0000000 --- a/courses/course_update.py +++ /dev/null @@ -1,88 +0,0 @@ -import os, sys -import django, json - -sys.path.append("../") -os.environ['PG_PORT_5432_TCP_ADDR'] = '127.0.0.1' -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() - -from courses.models import Course, NormalMap, CourseTheme, Lesson, Homework, Exam, Vertex - - -def get_url(frame): - frame = frame[frame.find('src=')+5:] - url = frame[:frame.find('\"')] - return url - - -if __name__ == '__main__': - for course in Course.objects.all(): - course_list = [] - for theme in CourseTheme.objects.filter(course=course).order_by('sort'): - - topic_vertex = Vertex.manager.create_with_dependencies( - course=course, - title=theme.title, - description=theme.description, - model='topic', - icon=theme.icon, - old_id='t_' + str(theme.id), - ) - course_list.append(topic_vertex.id) - - topic_list = [] - pay_lesson_exist = False - - for i in Lesson.objects.filter(theme=theme).order_by('sort'): - on_comment = i.on_comment == 'N' or i.on_comment == 'T' and i.theme.on_comment - vertex = Vertex.manager.create_with_dependencies( - course=course, - title=i.title, - description=i.description, - model='tutorial', - on_comment=on_comment, - video=get_url(i.video), - materials=i.materials.all(), - free=i.free, - old_id='l_' + str(i.id), - ) - pay_lesson_exist = pay_lesson_exist or not i.free - topic_vertex.children.add(vertex) - topic_list.append(vertex.id) - - for i in Homework.objects.filter(theme=theme).order_by('sort'): - vertex = Vertex.manager.create_with_dependencies( - course=course, - title='Домашняя работа', - description=i.description, - model='task', - is_exam=False, - materials=i.materials.all(), - free=not pay_lesson_exist, - old_id='h_' + str(i.id), - ) - topic_vertex.children.add(vertex) - topic_list.append(vertex.id) - - for i in Exam.objects.filter(theme=theme).order_by('sort'): - vertex = Vertex.manager.create_with_dependencies( - course=course, - title='Экзамен', - description=i.description, - model='task', - is_exam=True, - materials=i.materials.all(), - free=not pay_lesson_exist, - old_id='e_' + str(i.id), - ) - topic_vertex.children.add(vertex) - topic_list.append(vertex.id) - - topic_vertex.free = not pay_lesson_exist - topic_vertex.save() - - course_list.append(topic_list) - - course_map, _is_create = NormalMap.objects.get_or_create(course=course) - course_map.dependent_elements = json.dumps(course_list) - course_map.save() diff --git a/courses/migrations/0001_initial.py b/courses/migrations/0001_initial.py old mode 100755 new mode 100644 index d585cae..e98d6a1 --- a/courses/migrations/0001_initial.py +++ b/courses/migrations/0001_initial.py @@ -1,199 +1,216 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-03-18 16:46 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import redactor.fields - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('management', '0001_initial'), - ('storage', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='Achievements', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('tech_name', models.CharField(blank=True, default=b'', editable=False, help_text='\u0414\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f', max_length=20, unique=True, verbose_name='\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435')), - ('icon', models.ImageField(upload_to=b'achives', verbose_name='\u0418\u043a\u043e\u043d\u043a\u0430')), - ('title', models.CharField(help_text='\u0414\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430, \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f', max_length=50, verbose_name='\u0418\u043c\u044f')), - ('image', models.ImageField(upload_to=b'achives', verbose_name='\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435')), - ('background', models.CharField(max_length=10, verbose_name='\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430')), - ('border', models.CharField(max_length=10, verbose_name='\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u044b')), - ], - options={ - 'verbose_name': '\u0414\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0435', - 'verbose_name_plural': '\u0414\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f', - }, - ), - migrations.CreateModel( - name='Course', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('level', models.CharField(choices=[(b'B', '\u0411\u0430\u0437\u043e\u0432\u044b\u0439'), (b'A', '\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439 '), (b'E', '\u042d\u043a\u0441\u043f\u0435\u0440\u0442\u043d\u044b\u0439'), (b'B+A', '\u0411\u0430\u0437\u043e\u0432\u044b\u0439 + \u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439')], default=b'B', max_length=3, verbose_name='\u0423\u0440\u043e\u0432\u0435\u043d\u044c')), - ('public', models.BooleanField(default=False, verbose_name='\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c')), - ('title', models.CharField(max_length=255, verbose_name='\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a')), - ('description', redactor.fields.RedactorField(blank=True, verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435')), - ('image', models.ImageField(blank=True, upload_to=b'course', verbose_name='\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435')), - ('big_image', models.ImageField(blank=True, upload_to=b'course', verbose_name='\u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435')), - ('page', models.URLField(blank=True, default=b'', verbose_name='\u0421\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f')), - ('preview', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0422\u0440\u044d\u0439\u043b')), - ('sort', models.IntegerField(default=0, verbose_name='\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438')), - ('use_fail', models.BooleanField(default=False, verbose_name='\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0435\u0439\u043a\u043e\u0432\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e')), - ('basic_len', models.IntegerField(default=0, verbose_name='\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439')), - ('addition_len', models.IntegerField(default=0, verbose_name='\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439')), - ('min_price', models.IntegerField(default=0, verbose_name='\u0426\u0435\u043d\u0430 \u043e\u0442')), - ('buy_icon', models.ImageField(blank=True, null=True, upload_to=b'course', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u043f\u043e\u043a\u0443\u043f\u043a\u0438')), - ('teachers', models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u0438')), - ], - options={ - 'ordering': ['sort'], - 'verbose_name': '\u041a\u0443\u0440\u0441', - 'verbose_name_plural': '\u041a\u0443\u0440\u0441\u044b', - }, - ), - migrations.CreateModel( - name='CourseMap', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('_type', models.CharField(choices=[(b'L', '\u0423\u0440\u043e\u043a'), (b'H', '\u0414\u043e\u043c\u0430\u0448\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435'), (b'E', '\u042d\u043a\u0437\u0430\u043c\u0435\u043d')], default=b'L', max_length=1, verbose_name='\u0422\u0438\u043f\u044b \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432')), - ('sort', models.IntegerField(default=0, verbose_name='\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a')), - ('token', models.CharField(editable=False, max_length=20, null=True, unique=True, verbose_name='\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u043a\u043b\u044e\u0447')), - ('course', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441')), - ], - options={ - 'verbose_name': '\u041a\u0430\u0440\u0442\u0430 \u043a\u0443\u0440\u0441\u0430', - 'verbose_name_plural': '\u041a\u0430\u0440\u0442\u044b \u043a\u0443\u0440\u0441\u043e\u0432', - }, - ), - migrations.CreateModel( - name='CourseTheme', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('price_type', models.CharField(choices=[(b'B', '\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b'), (b'E', '\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b'), (b'P', '\u041f\u0440\u0435\u043c\u0438\u0443\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b')], default=b'B', max_length=1, verbose_name='\u0422\u0438\u043f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438')), - ('_type', models.CharField(choices=[(b'B', '\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b'), (b'E', '\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b'), (b'P', '\u041f\u0440\u0435\u043c\u0438\u0443\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b'), (b'M', '\u041f\u0440\u0435\u0434\u044d\u043a\u0437\u0430\u043c\u0435\u043d\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b'), (b'Ex', '\u042d\u043a\u0437\u0430\u043c\u0435\u043d\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0442\u0435\u043c\u0430')], default=b'B', max_length=2, verbose_name='\u0422\u0438\u043f \u0442\u0435\u043c\u044b')), - ('icon', models.ImageField(blank=True, null=True, upload_to=b'CourseTheme', verbose_name='\u0418\u043a\u043e\u043d\u043a\u0430 \u0442\u0435\u043c\u044b')), - ('sort', models.IntegerField(default=1, verbose_name='\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430')), - ('title', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a')), - ('description', models.TextField(blank=True, default=b'', max_length=255, verbose_name='\u041a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u0435\u043c\u044b')), - ('course', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441')), - ], - options={ - 'ordering': ['sort'], - 'verbose_name': '\u0422\u0435\u043c\u0430', - 'verbose_name_plural': '\u0422\u0435\u043c\u044b', - }, - ), - migrations.CreateModel( - name='Exam', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('token', models.CharField(blank=True, default=b'', max_length=100, verbose_name='\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430')), - ('sort', models.IntegerField(default=1, verbose_name='\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u044d\u043a\u0437\u0430\u043c\u0435\u043d\u0430')), - ('title', models.CharField(default=b'', help_text='\u0414\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0430', max_length=255, verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u044d\u043a\u0437\u0430\u043c\u0435\u043d\u0430')), - ('description', redactor.fields.RedactorField(verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432')), - ('course', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441')), - ('diploma', models.ForeignKey(help_text='\u041f\u0440\u043e\u0441\u0442\u043e \u043d\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435', on_delete=django.db.models.deletion.CASCADE, related_name='exam_diploma', to='storage.Storage', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u0438\u043f\u043b\u043e\u043c\u0430')), - ('icon', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='storage.Storage', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0434\u0438\u043f\u043b\u043e\u043c\u0430')), - ('materials', models.ManyToManyField(blank=True, related_name='exam_materials', to='storage.Storage', verbose_name='\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u044d\u043a\u0437\u0430\u043c\u0435\u043d\u0430')), - ('theme', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.CourseTheme', verbose_name='\u0422\u0435\u043c\u0430 \u043a\u0443\u0440\u0441\u0430')), - ], - options={ - 'ordering': ['sort'], - 'verbose_name': '\u042d\u043a\u0437\u0430\u043c\u0435\u043d', - 'verbose_name_plural': '\u042d\u043a\u0437\u0430\u043c\u0435\u043d\u044b', - }, - ), - migrations.CreateModel( - name='Homework', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('token', models.CharField(blank=True, default=b'', max_length=100, verbose_name='\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430')), - ('description', redactor.fields.RedactorField(verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435')), - ('sort', models.IntegerField(default=1, verbose_name='\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430')), - ('course', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441')), - ('materials', models.ManyToManyField(blank=True, to='storage.Storage', verbose_name='\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0434\u043b\u044f \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b')), - ('theme', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.CourseTheme', verbose_name='\u0422\u0435\u043c\u0430 \u043a\u0443\u0440\u0441\u0430')), - ], - options={ - 'ordering': ['sort'], - 'verbose_name': '\u0414\u043e\u0431\u0430\u0448\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435', - 'verbose_name_plural': '\u0414\u043e\u043c\u0430\u0448\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u044f', - }, - ), - migrations.CreateModel( - name='Lesson', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('free', models.BooleanField(default=False, verbose_name='\u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0435 \u0432\u0438\u0434\u0435\u043e')), - ('token', models.CharField(blank=True, default=b'', editable=False, max_length=100, verbose_name='\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430')), - ('title', models.TextField(blank=True, verbose_name='\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a')), - ('sort', models.IntegerField(default=1, verbose_name='\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430')), - ('description', redactor.fields.RedactorField(blank=True, default=b'', verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435')), - ('video', models.TextField(default=b'', verbose_name='\u041a\u043e\u0434 \u0432\u0438\u0434\u0435\u043e')), - ('comments', models.ManyToManyField(blank=True, editable=False, to='management.Comment', verbose_name='\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438')), - ('course', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441')), - ('materials', models.ManyToManyField(blank=True, to='storage.Storage', verbose_name='\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0443\u0440\u043e\u043a\u0430')), - ('theme', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.CourseTheme', verbose_name='\u0422\u0435\u043c\u0430 \u043a\u0443\u0440\u0441\u0430')), - ], - options={ - 'ordering': ['sort'], - 'verbose_name': '\u0423\u0440\u043e\u043a', - 'verbose_name_plural': '\u0423\u0440\u043e\u043a\u0438', - }, - ), - migrations.CreateModel( - name='SkillJ', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('size', models.IntegerField(default=0, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440')), - ('lesson', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Lesson', verbose_name='\u0423\u0440\u043e\u043a')), - ], - options={ - 'ordering': ['id'], - 'verbose_name': '\u0420\u0430\u0437\u043c\u0435\u0440 \u043d\u0430\u0432\u044b\u043a\u0430', - 'verbose_name_plural': '\u0420\u0430\u0437\u043c\u0435\u0440\u044b \u043d\u0430\u0432\u044b\u043a\u043e\u0432', - }, - ), - migrations.CreateModel( - name='Skills', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=255, verbose_name='\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435')), - ('color', models.CharField(max_length=255, verbose_name='\u0426\u0432\u0435\u0442')), - ], - options={ - 'verbose_name': '\u041d\u0430\u0432\u044b\u043a', - 'verbose_name_plural': '\u041d\u0430\u0432\u044b\u043a\u0438', - }, - ), - migrations.AddField( - model_name='skillj', - name='skill', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Skills', verbose_name='\u041d\u0430\u0432\u044b\u043a'), - ), - migrations.AddField( - model_name='coursemap', - name='exam', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Exam', verbose_name='\u042d\u043a\u0437\u0430\u043c\u0435\u043d'), - ), - migrations.AddField( - model_name='coursemap', - name='homework', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Homework', verbose_name='\u0417\u0430\u0434\u0430\u043d\u0438\u0435'), - ), - migrations.AddField( - model_name='coursemap', - name='lesson', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Lesson', verbose_name='\u0423\u0440\u043e\u043a'), - ), - ] +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2017-10-13 11:18 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('contenttypes', '0002_remove_content_type_name'), + ('storage', '0001_initial'), + ('library', '0002_auto_20171013_1118'), + ] + + operations = [ + migrations.CreateModel( + name='Achievements', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ], + options={ + 'verbose_name': 'Достижение', + 'verbose_name_plural': 'Достижения', + }, + ), + migrations.CreateModel( + name='Course', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('hidden', models.BooleanField(default=False, verbose_name='Видно только оплатившим')), + ('level', models.CharField(choices=[('B', 'Базовый'), ('A', 'Продвинутый'), ('E', 'Экспертный'), ('B+A', 'Базовый + Продвинутый')], default='B', max_length=3, verbose_name='Уровень')), + ('slug', models.SlugField(blank=True, default='', editable=False, max_length=255, unique=True)), + ('icon', models.ImageField(blank=True, null=True, upload_to='course', verbose_name='Иконка курса')), + ('public', models.BooleanField(default=False, verbose_name='Опубликовать')), + ('title', models.CharField(max_length=255, verbose_name='Заголовок')), + ('description', models.TextField(blank=True, verbose_name='Описание')), + ('image', models.ImageField(blank=True, upload_to='course', verbose_name='Изображение')), + ('big_image', models.ImageField(blank=True, upload_to='course', verbose_name='Большое изображение')), + ('big_mobile_image', models.ImageField(blank=True, help_text='Большая картинка для мобильной версии', null=True, upload_to='course', verbose_name='Под мобилку')), + ('preview', models.CharField(blank=True, default='', max_length=255, verbose_name='Трэйл')), + ('sort', models.IntegerField(default=0, verbose_name='Порядок сортировки')), + ('min_price', models.IntegerField(default=0, verbose_name='Цена от')), + ('buy_icon', models.ImageField(blank=True, null=True, upload_to='course', verbose_name='Картинка покупки')), + ], + options={ + 'verbose_name': 'Курс', + 'verbose_name_plural': 'Курсы', + 'ordering': ['sort'], + }, + ), + migrations.CreateModel( + name='CourseMap', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('dependent_elements', models.TextField(default='[]')), + ('independent_elements', models.TextField(default='[]')), + ('course', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='courses.Course')), + ], + ), + migrations.CreateModel( + name='Diploma', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('icon', models.ImageField(upload_to='diplomas', verbose_name='Иконка')), + ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name': 'Диплом', + 'verbose_name_plural': 'Дипломы', + }, + ), + migrations.CreateModel( + name='MaterialDirection', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=255, verbose_name='Заголовок')), + ('color', models.CharField(max_length=50, verbose_name='Цвет')), + ('description', models.TextField(blank=True, verbose_name='Описание')), + ('mentors', models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name='Кураторы')), + ], + options={ + 'verbose_name': 'Направление', + 'verbose_name_plural': 'Направления', + }, + ), + migrations.CreateModel( + name='SkillJ', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('size', models.IntegerField(default=0, verbose_name='Размер')), + ], + options={ + 'verbose_name': 'Размер навыка', + 'verbose_name_plural': 'Размеры навыков', + 'ordering': ['id'], + }, + ), + migrations.CreateModel( + name='Skills', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=255, verbose_name='Наименование')), + ('color', models.CharField(max_length=255, verbose_name='Цвет')), + ('icon', models.ImageField(help_text='65x65', null=True, upload_to='skills', verbose_name='Большая картинка')), + ('description', models.TextField(blank=True, verbose_name='Описание')), + ], + options={ + 'verbose_name': 'Навык', + 'verbose_name_plural': 'Навыки', + }, + ), + migrations.CreateModel( + name='Vertex', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=255, verbose_name='Название')), + ('free', models.BooleanField(default=True, verbose_name='Привилегии для узла не будут проверяться')), + ('description', models.TextField(blank=True, default='', null=True, verbose_name='Описание')), + ('object_id', models.PositiveIntegerField()), + ], + ), + migrations.CreateModel( + name='Task', + fields=[ + ('vertex_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='courses.Vertex')), + ('is_exam', models.BooleanField(default=False, verbose_name='Экзамен или домашка')), + ('materials', models.ManyToManyField(blank=True, to='storage.Storage', verbose_name='Материалы для домашней работы')), + ], + bases=('courses.vertex',), + ), + migrations.CreateModel( + name='Topic', + fields=[ + ('vertex_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='courses.Vertex')), + ('icon', models.ImageField(blank=True, null=True, upload_to='CourseTheme', verbose_name='Иконка темы')), + ], + bases=('courses.vertex',), + ), + migrations.CreateModel( + name='Tutorial', + fields=[ + ('vertex_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='courses.Vertex')), + ('on_comment', models.BooleanField(default=True, verbose_name='Комментарии')), + ('video', models.TextField(blank=True, default='', verbose_name='Код видео')), + ('materials', models.ManyToManyField(blank=True, to='storage.Storage', verbose_name='Материалы урока')), + ], + bases=('courses.vertex',), + ), + migrations.AddField( + model_name='vertex', + name='children', + field=models.ManyToManyField(blank=True, to='courses.Vertex'), + ), + migrations.AddField( + model_name='vertex', + name='content_type', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType'), + ), + migrations.AddField( + model_name='vertex', + name='course', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course'), + ), + migrations.AddField( + model_name='skillj', + name='lesson', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Vertex', verbose_name='Урок'), + ), + migrations.AddField( + model_name='skillj', + name='skill', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Skills', verbose_name='Навык'), + ), + migrations.AddField( + model_name='course', + name='direction', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.MaterialDirection', verbose_name='Направление'), + ), + migrations.AddField( + model_name='course', + name='keywords', + field=models.ManyToManyField(blank=True, to='library.Tags', verbose_name='Ключевые слова'), + ), + migrations.AddField( + model_name='course', + name='mentors', + field=models.ManyToManyField(blank=True, related_name='course_mentors', to=settings.AUTH_USER_MODEL, verbose_name='Кураторы'), + ), + migrations.AddField( + model_name='course', + name='recommend', + field=models.ManyToManyField(blank=True, help_text='Курсы, которые стоит порекомендовать вместе с этим', related_name='_course_recommend_+', to='courses.Course', verbose_name='Связанные курсы'), + ), + migrations.AddField( + model_name='course', + name='teachers', + field=models.ManyToManyField(related_name='course_teachers', to=settings.AUTH_USER_MODEL, verbose_name='Преподаватели'), + ), + migrations.AddField( + model_name='achievements', + name='course', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course'), + ), + migrations.AddField( + model_name='achievements', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/courses/migrations/0002_achievementsmap.py b/courses/migrations/0002_achievementsmap.py deleted file mode 100755 index e51e6ac..0000000 --- a/courses/migrations/0002_achievementsmap.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-03-20 20:26 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='AchievementsMap', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('after', models.BooleanField(default=True, verbose_name='\u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f')), - ('achiv', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Achievements', verbose_name='\u0414\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0435')), - ('point', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.CourseMap', verbose_name='\u041f\u043e\u0437\u0438\u0446\u0438\u044f')), - ], - options={ - 'verbose_name': '\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u044f\u044f \u0430\u0447\u0438\u0432\u043a\u0430', - 'verbose_name_plural': '\u0412\u043d\u0435\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0430\u0447\u0438\u0432\u043a\u0438', - }, - ), - ] diff --git a/courses/migrations/0003_auto_20160322_1852.py b/courses/migrations/0003_auto_20160322_1852.py deleted file mode 100755 index 4234734..0000000 --- a/courses/migrations/0003_auto_20160322_1852.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-03-22 18:52 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0002_achievementsmap'), - ] - - operations = [ - migrations.AlterModelOptions( - name='coursemap', - options={'ordering': ['sort'], 'verbose_name': '\u041a\u0430\u0440\u0442\u0430 \u043a\u0443\u0440\u0441\u0430', 'verbose_name_plural': '\u041a\u0430\u0440\u0442\u044b \u043a\u0443\u0440\u0441\u043e\u0432'}, - ), - ] diff --git a/courses/migrations/0004_lesson_video_id.py b/courses/migrations/0004_lesson_video_id.py deleted file mode 100755 index 67572a3..0000000 --- a/courses/migrations/0004_lesson_video_id.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-03-30 22:39 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0003_auto_20160322_1852'), - ] - - operations = [ - migrations.AddField( - model_name='lesson', - name='video_id', - field=models.CharField(blank=True, max_length=50, null=True, verbose_name='\u0412\u0438\u0434\u0435\u043e ID'), - ), - ] diff --git a/courses/migrations/0005_auto_20160331_2030.py b/courses/migrations/0005_auto_20160331_2030.py deleted file mode 100755 index d1fbf18..0000000 --- a/courses/migrations/0005_auto_20160331_2030.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-03-31 20:30 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0004_lesson_video_id'), - ] - - operations = [ - migrations.AlterField( - model_name='lesson', - name='video', - field=models.TextField(blank=True, default=b'', verbose_name='\u041a\u043e\u0434 \u0432\u0438\u0434\u0435\u043e'), - ), - ] diff --git a/courses/migrations/0006_auto_20160407_2006.py b/courses/migrations/0006_auto_20160407_2006.py deleted file mode 100755 index dfbf7d8..0000000 --- a/courses/migrations/0006_auto_20160407_2006.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-04-07 20:06 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0005_auto_20160331_2030'), - ] - - operations = [ - migrations.AddField( - model_name='coursetheme', - name='empty', - field=models.BooleanField(default=False, help_text='\u0417\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043a\u0443\u0440\u0441\u0430. \u0418\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u0443\u0440\u0441 \u043d\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d \u0438\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u0442\u043e\u0433\u043e.', verbose_name='\u0422\u044b \u043d\u0435 \u043f\u0440\u043e\u0439\u0434\u0435\u0448\u044c!'), - ), - migrations.AddField( - model_name='coursetheme', - name='empty_description', - field=models.TextField(blank=True, default=b'', verbose_name='\u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u043e\u0442\u043a\u0430\u0437\u0430 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f'), - ), - ] diff --git a/courses/migrations/0007_lesson_video_date.py b/courses/migrations/0007_lesson_video_date.py deleted file mode 100755 index e47b543..0000000 --- a/courses/migrations/0007_lesson_video_date.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-13 15:39 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0006_auto_20160407_2006'), - ] - - operations = [ - migrations.AddField( - model_name='lesson', - name='video_date', - field=models.DateTimeField(blank=True, null=True, verbose_name='\u0412\u0440\u0435\u043c\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u0432\u0438\u0434\u0435\u043e'), - ), - ] diff --git a/courses/migrations/0008_coursetheme_block.py b/courses/migrations/0008_coursetheme_block.py deleted file mode 100755 index 2aa3c01..0000000 --- a/courses/migrations/0008_coursetheme_block.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-20 18:19 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0007_lesson_video_date'), - ] - - operations = [ - migrations.AddField( - model_name='coursetheme', - name='block', - field=models.BooleanField(default=False, verbose_name='\u0417\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435'), - ), - ] diff --git a/courses/migrations/0009_remove_coursetheme_block.py b/courses/migrations/0009_remove_coursetheme_block.py deleted file mode 100755 index a5255ef..0000000 --- a/courses/migrations/0009_remove_coursetheme_block.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-20 18:21 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0008_coursetheme_block'), - ] - - operations = [ - migrations.RemoveField( - model_name='coursetheme', - name='block', - ), - ] diff --git a/courses/migrations/0010_remove_coursetheme_empty_description.py b/courses/migrations/0010_remove_coursetheme_empty_description.py deleted file mode 100755 index 524af13..0000000 --- a/courses/migrations/0010_remove_coursetheme_empty_description.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-20 19:09 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0009_remove_coursetheme_block'), - ] - - operations = [ - migrations.RemoveField( - model_name='coursetheme', - name='empty_description', - ), - ] diff --git a/courses/migrations/0011_auto_20160425_1550.py b/courses/migrations/0011_auto_20160425_1550.py deleted file mode 100755 index d00f697..0000000 --- a/courses/migrations/0011_auto_20160425_1550.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-25 15:50 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0010_remove_coursetheme_empty_description'), - ] - - operations = [ - migrations.AddField( - model_name='course', - name='in_diploma', - field=models.ImageField(null=True, upload_to=b'diploma', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u0438\u043f\u043b\u043e\u043c\u0430'), - ), - migrations.AddField( - model_name='course', - name='out_diploma', - field=models.ImageField(null=True, upload_to=b'diploma', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u0438\u043f\u043b\u043e\u043c\u0430 c \u043f\u043e\u0434\u043f\u0438\u0441\u044c\u044e'), - ), - ] diff --git a/courses/migrations/0012_course_diploma_key.py b/courses/migrations/0012_course_diploma_key.py deleted file mode 100755 index 5a4c9fa..0000000 --- a/courses/migrations/0012_course_diploma_key.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-25 15:53 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0011_auto_20160425_1550'), - ] - - operations = [ - migrations.AddField( - model_name='course', - name='diploma_key', - field=models.IntegerField(default=0, help_text='\u0422\u043e\u043b\u044c\u043a\u043e \u0446\u0438\u0444\u0440\u044b, \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432', verbose_name='\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043a\u043b\u044e\u0447'), - ), - ] diff --git a/courses/migrations/0013_auto_20160425_1720.py b/courses/migrations/0013_auto_20160425_1720.py deleted file mode 100755 index 83ad495..0000000 --- a/courses/migrations/0013_auto_20160425_1720.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-25 17:20 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0012_course_diploma_key'), - ] - - operations = [ - migrations.RemoveField( - model_name='course', - name='diploma_key', - ), - migrations.RemoveField( - model_name='course', - name='in_diploma', - ), - migrations.RemoveField( - model_name='course', - name='out_diploma', - ), - migrations.AddField( - model_name='exam', - name='diploma_key', - field=models.IntegerField(default=0, help_text='\u0422\u043e\u043b\u044c\u043a\u043e \u0446\u0438\u0444\u0440\u044b, \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432', verbose_name='\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043a\u043b\u044e\u0447'), - ), - migrations.AddField( - model_name='exam', - name='in_diploma', - field=models.ImageField(null=True, upload_to=b'diploma', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u0438\u043f\u043b\u043e\u043c\u0430'), - ), - migrations.AddField( - model_name='exam', - name='out_diploma', - field=models.ImageField(null=True, upload_to=b'diploma', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u0438\u043f\u043b\u043e\u043c\u0430 c \u043f\u043e\u0434\u043f\u0438\u0441\u044c\u044e'), - ), - ] diff --git a/courses/migrations/0014_diploma.py b/courses/migrations/0014_diploma.py deleted file mode 100755 index 2d599e9..0000000 --- a/courses/migrations/0014_diploma.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-25 17:37 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('courses', '0013_auto_20160425_1720'), - ] - - operations = [ - migrations.CreateModel( - name='Diploma', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('key', models.CharField(max_length=255, verbose_name='\u041a\u043b\u044e\u0447')), - ('date', models.DateField(default=datetime.date.today, verbose_name='\u0414\u0430\u0442\u0430 \u0432\u044b\u0434\u0430\u0447\u0438')), - ('out_image', models.ImageField(upload_to=b'', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 c \u043f\u0435\u0447\u0430\u0442\u044c\u044e')), - ('in_image', models.ImageField(upload_to=b'', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 c \u043f\u0435\u0447\u0430\u0442\u044c\u044e')), - ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u043a\u0443\u0440\u0441')), - ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='\u0421\u0442\u0443\u0434\u0435\u043d\u0442')), - ], - options={ - 'verbose_name': '\u0414\u0438\u043f\u043b\u043e\u043c\u044b', - 'verbose_name_plural': '\u041f\u043e\u043f\u044b\u0442\u043a\u0438 \u0441\u0434\u0430\u0447\u0438 \u042d\u043a\u0437\u0430\u043c\u0435\u043d\u043e\u0432', - }, - ), - ] diff --git a/courses/migrations/0015_auto_20160425_1750.py b/courses/migrations/0015_auto_20160425_1750.py deleted file mode 100755 index 58a2da4..0000000 --- a/courses/migrations/0015_auto_20160425_1750.py +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-25 17:50 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0014_diploma'), - ] - - operations = [ - migrations.AlterModelOptions( - name='diploma', - options={'verbose_name': '\u0414\u0438\u043f\u043b\u043e\u043c', 'verbose_name_plural': '\u0414\u0438\u043f\u043b\u043e\u043c\u044b'}, - ), - migrations.RemoveField( - model_name='exam', - name='diploma', - ), - migrations.RemoveField( - model_name='exam', - name='diploma_key', - ), - migrations.RemoveField( - model_name='exam', - name='in_diploma', - ), - migrations.RemoveField( - model_name='exam', - name='out_diploma', - ), - migrations.AlterField( - model_name='diploma', - name='in_image', - field=models.ImageField(upload_to=b'diploms', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 c \u043f\u0435\u0447\u0430\u0442\u044c\u044e'), - ), - migrations.AlterField( - model_name='diploma', - name='out_image', - field=models.ImageField(upload_to=b'diploms', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0431\u0435\u0437 \u043f\u0435\u0447\u0430\u0442\u0438'), - ), - ] diff --git a/courses/migrations/0016_auto_20160425_1752.py b/courses/migrations/0016_auto_20160425_1752.py deleted file mode 100755 index 702395c..0000000 --- a/courses/migrations/0016_auto_20160425_1752.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-25 17:52 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0015_auto_20160425_1750'), - ] - - operations = [ - migrations.AddField( - model_name='course', - name='diploma_key', - field=models.IntegerField(default=0, help_text='\u0422\u043e\u043b\u044c\u043a\u043e \u0446\u0438\u0444\u0440\u044b, \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432', verbose_name='\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043a\u043b\u044e\u0447'), - ), - migrations.AddField( - model_name='course', - name='in_diploma', - field=models.ImageField(null=True, upload_to=b'diploma', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u0438\u043f\u043b\u043e\u043c\u0430'), - ), - migrations.AddField( - model_name='course', - name='out_diploma', - field=models.ImageField(null=True, upload_to=b'diploma', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u0438\u043f\u043b\u043e\u043c\u0430 c \u043f\u043e\u0434\u043f\u0438\u0441\u044c\u044e'), - ), - ] diff --git a/courses/migrations/0017_auto_20160426_1240.py b/courses/migrations/0017_auto_20160426_1240.py deleted file mode 100755 index 89ed9b0..0000000 --- a/courses/migrations/0017_auto_20160426_1240.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-26 12:40 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0016_auto_20160425_1752'), - ] - - operations = [ - migrations.RemoveField( - model_name='diploma', - name='date', - ), - migrations.RemoveField( - model_name='diploma', - name='student', - ), - migrations.AddField( - model_name='diploma', - name='icon', - field=models.ImageField(null=True, upload_to=b'diploms', verbose_name='\u041c\u0438\u043d\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430'), - ), - migrations.AlterField( - model_name='diploma', - name='course', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441'), - ), - migrations.AlterField( - model_name='diploma', - name='key', - field=models.CharField(max_length=255, verbose_name='\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043a\u043b\u044e\u0447'), - ), - ] diff --git a/courses/migrations/0018_remove_exam_icon.py b/courses/migrations/0018_remove_exam_icon.py deleted file mode 100755 index be66e01..0000000 --- a/courses/migrations/0018_remove_exam_icon.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-26 12:41 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0017_auto_20160426_1240'), - ] - - operations = [ - migrations.RemoveField( - model_name='exam', - name='icon', - ), - ] diff --git a/courses/migrations/0019_remove_exam_title.py b/courses/migrations/0019_remove_exam_title.py deleted file mode 100755 index ffb987a..0000000 --- a/courses/migrations/0019_remove_exam_title.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-26 12:42 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0018_remove_exam_icon'), - ] - - operations = [ - migrations.RemoveField( - model_name='exam', - name='title', - ), - ] diff --git a/courses/migrations/0020_auto_20160426_1243.py b/courses/migrations/0020_auto_20160426_1243.py deleted file mode 100755 index 1e7aa88..0000000 --- a/courses/migrations/0020_auto_20160426_1243.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-26 12:43 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0019_remove_exam_title'), - ] - - operations = [ - migrations.RemoveField( - model_name='course', - name='diploma_key', - ), - migrations.RemoveField( - model_name='course', - name='in_diploma', - ), - migrations.RemoveField( - model_name='course', - name='out_diploma', - ), - ] diff --git a/courses/migrations/0021_auto_20160426_1447.py b/courses/migrations/0021_auto_20160426_1447.py deleted file mode 100755 index abf6d9a..0000000 --- a/courses/migrations/0021_auto_20160426_1447.py +++ /dev/null @@ -1,75 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-26 14:47 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0020_auto_20160426_1243'), - ] - - operations = [ - migrations.AddField( - model_name='diploma', - name='date_color', - field=models.CharField(max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0434\u0430\u0442\u044b'), - ), - migrations.AddField( - model_name='diploma', - name='date_font', - field=models.FileField(null=True, upload_to=b'diploms', verbose_name='\u0428\u0440\u0438\u0444\u0442 \u0434\u0430\u0442\u044b'), - ), - migrations.AddField( - model_name='diploma', - name='date_place', - field=models.CharField(help_text='\u041f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0441\u0432\u0435\u0440\u0445\u0443:\u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0441\u043b\u0435\u0432\u0430 - 256:256', max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0434\u0430\u0442\u044b'), - ), - migrations.AddField( - model_name='diploma', - name='date_size', - field=models.CharField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u0434\u0430\u0442\u044b'), - ), - migrations.AddField( - model_name='diploma', - name='key_color', - field=models.CharField(max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0434\u0430\u0442\u044b'), - ), - migrations.AddField( - model_name='diploma', - name='key_font', - field=models.FileField(null=True, upload_to=b'diploms', verbose_name='\u0428\u0440\u0438\u0444\u0442 \u0434\u0430\u0442\u044b'), - ), - migrations.AddField( - model_name='diploma', - name='key_place', - field=models.CharField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430'), - ), - migrations.AddField( - model_name='diploma', - name='key_size', - field=models.CharField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u0434\u0430\u0442\u044b'), - ), - migrations.AddField( - model_name='diploma', - name='name_color', - field=models.CharField(max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0434\u0430\u0442\u044b'), - ), - migrations.AddField( - model_name='diploma', - name='name_font', - field=models.FileField(null=True, upload_to=b'diploms', verbose_name='\u0428\u0440\u0438\u0444\u0442 \u0434\u0430\u0442\u044b'), - ), - migrations.AddField( - model_name='diploma', - name='name_place', - field=models.CharField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u043d\u0438'), - ), - migrations.AddField( - model_name='diploma', - name='name_size', - field=models.CharField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u0434\u0430\u0442\u044b'), - ), - ] diff --git a/courses/migrations/0022_auto_20160426_1526.py b/courses/migrations/0022_auto_20160426_1526.py deleted file mode 100755 index 960aa2f..0000000 --- a/courses/migrations/0022_auto_20160426_1526.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-26 15:26 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0021_auto_20160426_1447'), - ] - - operations = [ - migrations.AlterField( - model_name='diploma', - name='in_image', - field=models.ImageField(upload_to=b'diploms', verbose_name='\u0414\u0438\u043f\u043b\u043e\u043c c \u043f\u0435\u0447\u0430\u0442\u044c\u044e'), - ), - migrations.AlterField( - model_name='diploma', - name='key', - field=models.IntegerField(max_length=255, verbose_name='\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043a\u043b\u044e\u0447'), - ), - migrations.AlterField( - model_name='diploma', - name='key_color', - field=models.CharField(max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u043a\u043b\u044e\u0447\u0430'), - ), - migrations.AlterField( - model_name='diploma', - name='key_font', - field=models.FileField(null=True, upload_to=b'diploms', verbose_name='\u0428\u0440\u0438\u0444\u0442 \u043a\u043b\u044e\u0447\u0430'), - ), - migrations.AlterField( - model_name='diploma', - name='key_size', - field=models.CharField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u043a\u043b\u044e\u0447\u0430'), - ), - migrations.AlterField( - model_name='diploma', - name='name_color', - field=models.CharField(max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0438\u043c\u0435\u043d\u0438'), - ), - migrations.AlterField( - model_name='diploma', - name='name_font', - field=models.FileField(null=True, upload_to=b'diploms', verbose_name='\u0428\u0440\u0438\u0444\u0442 \u0438\u043c\u0435\u043d\u0438'), - ), - migrations.AlterField( - model_name='diploma', - name='name_size', - field=models.CharField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u0438\u043c\u0435\u043d\u0438'), - ), - migrations.AlterField( - model_name='diploma', - name='out_image', - field=models.ImageField(upload_to=b'diploms', verbose_name='\u0414\u0438\u043f\u043b\u043e\u043c \u0431\u0435\u0437 \u043f\u0435\u0447\u0430\u0442\u0438'), - ), - ] diff --git a/courses/migrations/0023_auto_20160426_1729.py b/courses/migrations/0023_auto_20160426_1729.py deleted file mode 100755 index 88b7a3e..0000000 --- a/courses/migrations/0023_auto_20160426_1729.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-26 17:29 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0022_auto_20160426_1526'), - ] - - operations = [ - migrations.AlterField( - model_name='diploma', - name='date_color', - field=models.CharField(help_text='RGBA. \u041f\u0440\u0438\u043c\u0435\u0440: 0,0,0,1', max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0434\u0430\u0442\u044b'), - ), - migrations.AlterField( - model_name='diploma', - name='date_size', - field=models.IntegerField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u0434\u0430\u0442\u044b'), - ), - migrations.AlterField( - model_name='diploma', - name='key_color', - field=models.CharField(help_text='RGBA. \u041f\u0440\u0438\u043c\u0435\u0440: 0,0,0,1', max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u043a\u043b\u044e\u0447\u0430'), - ), - migrations.AlterField( - model_name='diploma', - name='key_place', - field=models.CharField(help_text='\u041f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0441\u0432\u0435\u0440\u0445\u0443:\u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0441\u043b\u0435\u0432\u0430 - 256:256', max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430'), - ), - migrations.AlterField( - model_name='diploma', - name='key_size', - field=models.IntegerField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u043a\u043b\u044e\u0447\u0430'), - ), - migrations.AlterField( - model_name='diploma', - name='name_color', - field=models.CharField(help_text='RGBA. \u041f\u0440\u0438\u043c\u0435\u0440: 0,0,0,1', max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0438\u043c\u0435\u043d\u0438'), - ), - migrations.AlterField( - model_name='diploma', - name='name_place', - field=models.CharField(help_text='\u041f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0441\u0432\u0435\u0440\u0445\u0443:\u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0441\u043b\u0435\u0432\u0430 - 256:256', max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u043d\u0438'), - ), - migrations.AlterField( - model_name='diploma', - name='name_size', - field=models.IntegerField(max_length=255, null=True, verbose_name='\u0420\u0430\u0437\u043c\u0435\u0440 \u0438\u043c\u0435\u043d\u0438'), - ), - ] diff --git a/courses/migrations/0024_auto_20160505_1748.py b/courses/migrations/0024_auto_20160505_1748.py deleted file mode 100755 index 18358c4..0000000 --- a/courses/migrations/0024_auto_20160505_1748.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-05-05 17:48 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0023_auto_20160426_1729'), - ] - - operations = [ - migrations.AlterField( - model_name='diploma', - name='date_color', - field=models.CharField(help_text='RGB. \u041f\u0440\u0438\u043c\u0435\u0440: 0,0,0', max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0434\u0430\u0442\u044b'), - ), - migrations.AlterField( - model_name='diploma', - name='key_color', - field=models.CharField(help_text='RGB. \u041f\u0440\u0438\u043c\u0435\u0440: 0,0,0', max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u043a\u043b\u044e\u0447\u0430'), - ), - migrations.AlterField( - model_name='diploma', - name='name_color', - field=models.CharField(help_text='RGB. \u041f\u0440\u0438\u043c\u0435\u0440: 0,0,0', max_length=255, null=True, verbose_name='\u0426\u0432\u0435\u0442 \u0438\u043c\u0435\u043d\u0438'), - ), - ] diff --git a/courses/migrations/0025_auto_20160506_1303.py b/courses/migrations/0025_auto_20160506_1303.py deleted file mode 100755 index bbfe33b..0000000 --- a/courses/migrations/0025_auto_20160506_1303.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-05-06 13:03 -from __future__ import unicode_literals - -from django.db import migrations, models -import redactor.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0024_auto_20160505_1748'), - ] - - operations = [ - migrations.AddField( - model_name='skills', - name='big_icon', - field=models.ImageField(null=True, upload_to=b'skills', verbose_name='\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430'), - ), - migrations.AddField( - model_name='skills', - name='description', - field=redactor.fields.RedactorField(blank=True, verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435'), - ), - migrations.AddField( - model_name='skills', - name='mini_icon', - field=models.ImageField(null=True, upload_to=b'skills', verbose_name='\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430'), - ), - ] diff --git a/courses/migrations/0026_auto_20160506_1838.py b/courses/migrations/0026_auto_20160506_1838.py deleted file mode 100755 index 1c2ec38..0000000 --- a/courses/migrations/0026_auto_20160506_1838.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-05-06 18:38 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0025_auto_20160506_1303'), - ] - - operations = [ - migrations.AlterField( - model_name='skills', - name='big_icon', - field=models.ImageField(help_text=b'65x65', null=True, upload_to=b'skills', verbose_name='\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430'), - ), - migrations.AlterField( - model_name='skills', - name='description', - field=models.TextField(blank=True, verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435'), - ), - migrations.AlterField( - model_name='skills', - name='mini_icon', - field=models.ImageField(help_text=b'15x15', null=True, upload_to=b'skills', verbose_name='\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430'), - ), - ] diff --git a/courses/migrations/0027_auto_20160831_1638.py b/courses/migrations/0027_auto_20160831_1638.py deleted file mode 100644 index 2001f7d..0000000 --- a/courses/migrations/0027_auto_20160831_1638.py +++ /dev/null @@ -1,156 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-08-31 16:38 -from __future__ import unicode_literals - -from django.db import migrations, models -import redactor.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0026_auto_20160506_1838'), - ] - - operations = [ - migrations.AlterField( - model_name='achievements', - name='icon', - field=models.ImageField(upload_to='achives', verbose_name='Иконка'), - ), - migrations.AlterField( - model_name='achievements', - name='image', - field=models.ImageField(upload_to='achives', verbose_name='Изображение'), - ), - migrations.AlterField( - model_name='achievements', - name='tech_name', - field=models.CharField(blank=True, default='', editable=False, help_text='Для системы, нигде не отображается', max_length=20, unique=True, verbose_name='Техническое название'), - ), - migrations.AlterField( - model_name='course', - name='big_image', - field=models.ImageField(blank=True, upload_to='course', verbose_name='Большое изображение'), - ), - migrations.AlterField( - model_name='course', - name='buy_icon', - field=models.ImageField(blank=True, null=True, upload_to='course', verbose_name='Картинка покупки'), - ), - migrations.AlterField( - model_name='course', - name='image', - field=models.ImageField(blank=True, upload_to='course', verbose_name='Изображение'), - ), - migrations.AlterField( - model_name='course', - name='level', - field=models.CharField(choices=[('B', 'Базовый'), ('A', 'Продвинутый '), ('E', 'Экспертный'), ('B+A', 'Базовый + Продвинутый')], default='B', max_length=3, verbose_name='Уровень'), - ), - migrations.AlterField( - model_name='course', - name='page', - field=models.URLField(blank=True, default='', verbose_name='Страничка описания'), - ), - migrations.AlterField( - model_name='course', - name='preview', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Трэйл'), - ), - migrations.AlterField( - model_name='coursemap', - name='_type', - field=models.CharField(choices=[('L', 'Урок'), ('H', 'Домашнее задание'), ('E', 'Экзамен')], default='L', max_length=1, verbose_name='Типы материалов'), - ), - migrations.AlterField( - model_name='coursetheme', - name='_type', - field=models.CharField(choices=[('B', 'Базовый материал'), ('E', 'Расширеный материал'), ('P', 'Премиум материал'), ('M', 'Предэкзаменационные материалы'), ('Ex', 'Экзаменационная тема')], default='B', max_length=2, verbose_name='Тип темы'), - ), - migrations.AlterField( - model_name='coursetheme', - name='description', - field=models.TextField(blank=True, default='', max_length=255, verbose_name='Короткое описание темы'), - ), - migrations.AlterField( - model_name='coursetheme', - name='icon', - field=models.ImageField(blank=True, null=True, upload_to='CourseTheme', verbose_name='Иконка темы'), - ), - migrations.AlterField( - model_name='coursetheme', - name='price_type', - field=models.CharField(choices=[('B', 'Базовый материал'), ('E', 'Расширеный материал'), ('P', 'Премиум материал')], default='B', max_length=1, verbose_name='Тип подписки'), - ), - migrations.AlterField( - model_name='coursetheme', - name='title', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Заголовок'), - ), - migrations.AlterField( - model_name='diploma', - name='date_font', - field=models.FileField(null=True, upload_to='diploms', verbose_name='Шрифт даты'), - ), - migrations.AlterField( - model_name='diploma', - name='icon', - field=models.ImageField(null=True, upload_to='diploms', verbose_name='Мини картинка'), - ), - migrations.AlterField( - model_name='diploma', - name='in_image', - field=models.ImageField(upload_to='diploms', verbose_name='Диплом c печатью'), - ), - migrations.AlterField( - model_name='diploma', - name='key_font', - field=models.FileField(null=True, upload_to='diploms', verbose_name='Шрифт ключа'), - ), - migrations.AlterField( - model_name='diploma', - name='name_font', - field=models.FileField(null=True, upload_to='diploms', verbose_name='Шрифт имени'), - ), - migrations.AlterField( - model_name='diploma', - name='out_image', - field=models.ImageField(upload_to='diploms', verbose_name='Диплом без печати'), - ), - migrations.AlterField( - model_name='exam', - name='token', - field=models.CharField(blank=True, default='', max_length=100, verbose_name='Токен доступа'), - ), - migrations.AlterField( - model_name='homework', - name='token', - field=models.CharField(blank=True, default='', max_length=100, verbose_name='Токен доступа'), - ), - migrations.AlterField( - model_name='lesson', - name='description', - field=redactor.fields.RedactorField(blank=True, default='', verbose_name='Описание'), - ), - migrations.AlterField( - model_name='lesson', - name='token', - field=models.CharField(blank=True, default='', editable=False, max_length=100, verbose_name='Токен доступа'), - ), - migrations.AlterField( - model_name='lesson', - name='video', - field=models.TextField(blank=True, default='', verbose_name='Код видео'), - ), - migrations.AlterField( - model_name='skills', - name='big_icon', - field=models.ImageField(help_text='65x65', null=True, upload_to='skills', verbose_name='Большая картинка'), - ), - migrations.AlterField( - model_name='skills', - name='mini_icon', - field=models.ImageField(help_text='15x15', null=True, upload_to='skills', verbose_name='Маленькая картинка'), - ), - ] diff --git a/courses/migrations/0028_auto_20160908_0408.py b/courses/migrations/0028_auto_20160908_0408.py deleted file mode 100644 index 8e937e2..0000000 --- a/courses/migrations/0028_auto_20160908_0408.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 04:08 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion -import redactor.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0027_auto_20160831_1638'), - ] - - operations = [ - migrations.CreateModel( - name='MaterialDirection', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255, verbose_name='Заголовок')), - ('color', models.CharField(max_length=50, verbose_name='Цвет')), - ('description', redactor.fields.RedactorField(blank=True, verbose_name='Описание')), - ], - options={ - 'verbose_name': 'Направление', - 'verbose_name_plural': 'Направления', - }, - ), - migrations.AddField( - model_name='course', - name='direction', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.MaterialDirection', verbose_name='Направление'), - ), - ] diff --git a/courses/migrations/0029_auto_20160908_0419.py b/courses/migrations/0029_auto_20160908_0419.py deleted file mode 100644 index 51041f2..0000000 --- a/courses/migrations/0029_auto_20160908_0419.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 04:19 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0028_auto_20160908_0408'), - ] - - operations = [ - migrations.RenameField( - model_name='materialdirection', - old_name='name', - new_name='title', - ), - ] diff --git a/courses/migrations/0030_course_must_build.py b/courses/migrations/0030_course_must_build.py deleted file mode 100644 index de95a0c..0000000 --- a/courses/migrations/0030_course_must_build.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 19:19 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0029_auto_20160908_0419'), - ] - - operations = [ - migrations.AddField( - model_name='course', - name='must_build', - field=models.BooleanField(default=False, verbose_name='На переформировку'), - ), - ] diff --git a/courses/migrations/0031_auto_20160908_1929.py b/courses/migrations/0031_auto_20160908_1929.py deleted file mode 100644 index 8caf6e2..0000000 --- a/courses/migrations/0031_auto_20160908_1929.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 19:29 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('courses', '0030_course_must_build'), - ] - - operations = [ - migrations.AddField( - model_name='course', - name='mentors', - field=models.ManyToManyField(blank=True, null=True, related_name='course_mentors', to=settings.AUTH_USER_MODEL, verbose_name='Кураторы'), - ), - migrations.AddField( - model_name='materialdirection', - name='mentors', - field=models.ManyToManyField(blank=True, null=True, to=settings.AUTH_USER_MODEL, verbose_name='Кураторы'), - ), - migrations.AlterField( - model_name='course', - name='teachers', - field=models.ManyToManyField(related_name='course_teachers', to=settings.AUTH_USER_MODEL, verbose_name='Преподаватели'), - ), - ] diff --git a/courses/migrations/0032_course_icon.py b/courses/migrations/0032_course_icon.py deleted file mode 100644 index f923ab5..0000000 --- a/courses/migrations/0032_course_icon.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-15 17:11 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0031_auto_20160908_1929'), - ] - - operations = [ - migrations.AddField( - model_name='course', - name='icon', - field=models.ImageField(blank=True, null=True, upload_to='course', verbose_name='Иконка курса'), - ), - ] diff --git a/courses/migrations/0033_course_mobile_image.py b/courses/migrations/0033_course_mobile_image.py deleted file mode 100644 index bcfcd70..0000000 --- a/courses/migrations/0033_course_mobile_image.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-15 17:12 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0032_course_icon'), - ] - - operations = [ - migrations.AddField( - model_name='course', - name='mobile_image', - field=models.ImageField(blank=True, help_text='Большая картинка для мобильной версии', null=True, upload_to='course', verbose_name='Под мобилку'), - ), - ] diff --git a/courses/migrations/0034_auto_20160915_1715.py b/courses/migrations/0034_auto_20160915_1715.py deleted file mode 100644 index 1c272a9..0000000 --- a/courses/migrations/0034_auto_20160915_1715.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-15 17:15 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0033_course_mobile_image'), - ] - - operations = [ - migrations.RenameField( - model_name='course', - old_name='mobile_image', - new_name='big_mobile_image', - ), - ] diff --git a/courses/migrations/0035_course_slug.py b/courses/migrations/0035_course_slug.py deleted file mode 100644 index f69a1dc..0000000 --- a/courses/migrations/0035_course_slug.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-10-19 15:02 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0034_auto_20160915_1715'), - ] - - operations = [ - migrations.AddField( - model_name='course', - name='slug', - field=models.SlugField(blank=True, default='', editable=False, max_length=255), - ), - ] diff --git a/courses/migrations/0036_auto_20161110_2152.py b/courses/migrations/0036_auto_20161110_2152.py deleted file mode 100644 index 83d22ed..0000000 --- a/courses/migrations/0036_auto_20161110_2152.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-10 21:52 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0035_course_slug'), - ] - - operations = [ - migrations.AlterField( - model_name='course', - name='slug', - field=models.SlugField(blank=True, default='', editable=False, max_length=255, unique=True), - ), - migrations.AlterField( - model_name='materialdirection', - name='mentors', - field=models.ManyToManyField(null=True, to=settings.AUTH_USER_MODEL, verbose_name='Кураторы'), - ), - ] diff --git a/courses/migrations/0037_auto_20161114_0206.py b/courses/migrations/0037_auto_20161114_0206.py deleted file mode 100644 index 9932617..0000000 --- a/courses/migrations/0037_auto_20161114_0206.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-14 02:06 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('library', '0022_auto_20161101_1321'), - ('courses', '0036_auto_20161110_2152'), - ] - - operations = [ - migrations.AddField( - model_name='course', - name='keywords', - field=models.ManyToManyField(blank=True, to='library.Tags', verbose_name='Ключевые слова'), - ), - migrations.AddField( - model_name='course', - name='recommend', - field=models.ManyToManyField(blank=True, help_text='Курсы, которые стоит порекомендовать вместе с этим', related_name='_course_recommend_+', to='courses.Course', verbose_name='Связанные курсы'), - ), - ] diff --git a/courses/migrations/0038_coursetheme_comments.py b/courses/migrations/0038_coursetheme_comments.py deleted file mode 100644 index 327aee9..0000000 --- a/courses/migrations/0038_coursetheme_comments.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-16 13:18 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0037_auto_20161114_0206'), - ] - - operations = [ - migrations.AddField( - model_name='coursetheme', - name='comments', - field=models.BooleanField(default=True, verbose_name='Комментарии включены'), - ), - ] diff --git a/courses/migrations/0039_auto_20161116_1319.py b/courses/migrations/0039_auto_20161116_1319.py deleted file mode 100644 index b6a64b8..0000000 --- a/courses/migrations/0039_auto_20161116_1319.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-16 13:19 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0038_coursetheme_comments'), - ] - - operations = [ - migrations.RenameField( - model_name='coursetheme', - old_name='comments', - new_name='on_comment', - ), - migrations.AddField( - model_name='lesson', - name='on_comment', - field=models.BooleanField(default=True, verbose_name='Комментарии включены'), - ), - ] diff --git a/courses/migrations/0040_auto_20161116_1344.py b/courses/migrations/0040_auto_20161116_1344.py deleted file mode 100644 index 72cbb17..0000000 --- a/courses/migrations/0040_auto_20161116_1344.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-16 13:44 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0039_auto_20161116_1319'), - ] - - operations = [ - migrations.AlterField( - model_name='lesson', - name='on_comment', - field=models.CharField(choices=[('N', 'Включены'), ('F', 'Отключены'), ('T', 'Подчиняется теме')], default='T', help_text='http://go.skillbox.ru/management/faq/37', max_length=1, verbose_name='Комментарии включены'), - ), - ] diff --git a/courses/migrations/0041_auto_20161128_0218.py b/courses/migrations/0041_auto_20161128_0218.py deleted file mode 100644 index 9433b6a..0000000 --- a/courses/migrations/0041_auto_20161128_0218.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-28 02:18 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('courses', '0040_auto_20161116_1344'), - ] - - operations = [ - migrations.AddField( - model_name='course', - name='hidden', - field=models.BooleanField(default=False, verbose_name='Видно только оплатившим'), - ), - migrations.AddField( - model_name='coursetheme', - name='teachers', - field=models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name='Преподаватели'), - ), - migrations.AlterField( - model_name='coursetheme', - name='on_comment', - field=models.BooleanField(default=True, verbose_name='Блок комментариев'), - ), - migrations.AlterField( - model_name='lesson', - name='on_comment', - field=models.CharField(choices=[('N', 'Включены'), ('F', 'Отключены'), ('T', 'Подчиняется теме')], default='T', help_text='http://go.skillbox.ru/management/faq/37', max_length=1, verbose_name='Блок комментариев'), - ), - ] diff --git a/courses/migrations/0042_auto_20161202_0338.py b/courses/migrations/0042_auto_20161202_0338.py deleted file mode 100644 index 15ebe35..0000000 --- a/courses/migrations/0042_auto_20161202_0338.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-12-02 03:38 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0041_auto_20161128_0218'), - ] - - operations = [ - migrations.AlterField( - model_name='coursetheme', - name='teachers', - field=models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL, verbose_name='Преподаватели'), - ), - ] diff --git a/courses/migrations/0043_auto_20170621_1340.py b/courses/migrations/0043_auto_20170621_1340.py deleted file mode 100644 index ff2483b..0000000 --- a/courses/migrations/0043_auto_20170621_1340.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-06-21 13:40 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0042_auto_20161202_0338'), - ] - - operations = [ - migrations.AddField( - model_name='course', - name='public_old', - field=models.BooleanField(default=False, verbose_name='Старый статус'), - ), - migrations.AlterField( - model_name='lesson', - name='on_comment', - field=models.CharField(choices=[('N', 'Включены'), ('F', 'Отключены'), ('T', 'Подчиняется теме')], default='T', help_text='https://127.0.0.1:8000/management/faq/37', max_length=1, verbose_name='Блок комментариев'), - ), - ] diff --git a/courses/migrations/0044_auto_20170621_1548.py b/courses/migrations/0044_auto_20170621_1548.py deleted file mode 100644 index c7b94ae..0000000 --- a/courses/migrations/0044_auto_20170621_1548.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-06-21 15:48 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0043_auto_20170621_1340'), - ] - - operations = [ - migrations.AddField( - model_name='coursetheme', - name='empty_old', - field=models.BooleanField(default=False, verbose_name='Для проверки галочки'), - ), - migrations.AlterField( - model_name='lesson', - name='on_comment', - field=models.CharField(choices=[('N', 'Включены'), ('F', 'Отключены'), ('T', 'Подчиняется теме')], default='T', help_text='http://127.0.0.1:8000/management/faq/37', max_length=1, verbose_name='Блок комментариев'), - ), - ] diff --git a/courses/migrations/0045_auto_20170918_0811.py b/courses/migrations/0045_auto_20170918_0811.py deleted file mode 100644 index 9144b64..0000000 --- a/courses/migrations/0045_auto_20170918_0811.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-09-18 08:11 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0044_auto_20170621_1548'), - ] - - operations = [ - migrations.AlterField( - model_name='course', - name='mentors', - field=models.ManyToManyField(blank=True, related_name='course_mentors', to=settings.AUTH_USER_MODEL, verbose_name='Кураторы'), - ), - migrations.AlterField( - model_name='diploma', - name='date_size', - field=models.IntegerField(null=True, verbose_name='Размер даты'), - ), - migrations.AlterField( - model_name='diploma', - name='key', - field=models.IntegerField(verbose_name='Последний ключ'), - ), - migrations.AlterField( - model_name='diploma', - name='key_size', - field=models.IntegerField(null=True, verbose_name='Размер ключа'), - ), - migrations.AlterField( - model_name='diploma', - name='name_size', - field=models.IntegerField(null=True, verbose_name='Размер имени'), - ), - migrations.AlterField( - model_name='lesson', - name='on_comment', - field=models.CharField(choices=[('N', 'Включены'), ('F', 'Отключены'), ('T', 'Подчиняется теме')], default='T', help_text='https://go.skillbox.ru/management/faq/37', max_length=1, verbose_name='Блок комментариев'), - ), - migrations.AlterField( - model_name='materialdirection', - name='mentors', - field=models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name='Кураторы'), - ), - ] diff --git a/courses/migrations/0046_auto_20170925_1829.py b/courses/migrations/0046_auto_20170925_1829.py deleted file mode 100644 index c52a541..0000000 --- a/courses/migrations/0046_auto_20170925_1829.py +++ /dev/null @@ -1,80 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-09-25 18:29 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion -import django.db.models.manager - - -class Migration(migrations.Migration): - - dependencies = [ - ('storage', '0002_auto_20160831_1638'), - ('contenttypes', '0002_remove_content_type_name'), - ('courses', '0045_auto_20170918_0811'), - ] - - operations = [ - migrations.CreateModel( - name='NormalMap', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('dependent_elements', models.TextField(default='[]')), - ('independent_elements', models.TextField(default='[]')), - ], - ), - migrations.CreateModel( - name='Task', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('is_exam', models.BooleanField(default=False, verbose_name='Экзамен или домашка')), - ('materials', models.ManyToManyField(blank=True, to='storage.Storage', verbose_name='Материалы для домашней работы')), - ], - ), - migrations.CreateModel( - name='Topic', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('icon', models.ImageField(blank=True, null=True, upload_to='CourseTheme', verbose_name='Иконка темы')), - ], - ), - migrations.CreateModel( - name='Tutorial', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('on_comment', models.BooleanField(default=True, verbose_name='Комментарии')), - ('video', models.TextField(blank=True, default='', verbose_name='Код видео')), - ('materials', models.ManyToManyField(blank=True, to='storage.Storage', verbose_name='Материалы урока')), - ], - ), - migrations.CreateModel( - name='Vertex', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=255, verbose_name='Название')), - ('description', models.TextField(blank=True, default='', null=True, verbose_name='Описание')), - ('object_id', models.PositiveIntegerField()), - ('children', models.ManyToManyField(blank=True, to='courses.Vertex')), - ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), - ], - managers=[ - ('manager', django.db.models.manager.Manager()), - ], - ), - migrations.AlterField( - model_name='course', - name='level', - field=models.CharField(choices=[('B', 'Базовый'), ('A', 'Продвинутый'), ('E', 'Экспертный'), ('B+A', 'Базовый + Продвинутый')], default='B', max_length=3, verbose_name='Уровень'), - ), - migrations.AddField( - model_name='vertex', - name='course', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course'), - ), - migrations.AddField( - model_name='normalmap', - name='course', - field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='courses.Course'), - ), - ] diff --git a/courses/migrations/0048_auto_20170929_1026.py b/courses/migrations/0048_auto_20170929_1026.py deleted file mode 100644 index 155ac4f..0000000 --- a/courses/migrations/0048_auto_20170929_1026.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-09-29 10:26 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0047_auto_20170928_1625'), - ] - - operations = [ - migrations.AlterField( - model_name='vertex', - name='free', - field=models.BooleanField(default=True, verbose_name='Привилегии для узла не будут проверяться'), - ), - ] diff --git a/courses/migrations/0049_auto_20171002_1841.py b/courses/migrations/0049_auto_20171002_1841.py deleted file mode 100644 index b1ccc4e..0000000 --- a/courses/migrations/0049_auto_20171002_1841.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-10-02 18:41 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0048_auto_20170929_1026'), - ] - - operations = [ - migrations.AddField( - model_name='vertex', - name='old_id', - field=models.CharField(default='', max_length=10, verbose_name='Поле создаётся на время миграции'), - preserve_default=False, - ), - ] diff --git a/courses/models.py b/courses/models.py index 2078943..f51f710 100755 --- a/courses/models.py +++ b/courses/models.py @@ -1,67 +1,24 @@ # -*- coding: utf-8 -*- -import datetime - from django.conf import settings from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType from django.db import models -from redactor.fields import RedactorField import json -from courses.templates import search_in_collection, LEVELS_COLLECTION, MATERIAL_TYPE_COLLECTION, material_fabric, \ - comment_fabric from library.models import Tags -from lms.settings import DOMAIN -from lms.tools import random_string, translit from management.models import Comment from storage.models import Storage -import logging - -MATERIALS_TYPE = ( - ('B', u'Базовый материал'), - ('E', u'Расширеный материал'), - ('P', u'Премиум материал') -) - -THEME_TYPE = ( - MATERIALS_TYPE[0], - MATERIALS_TYPE[1], - MATERIALS_TYPE[2], - ('M', u'Предэкзаменационные материалы'), - ('Ex', u'Экзаменационная тема') -) - class MaterialDirection(models.Model): title = models.CharField(verbose_name=u'Заголовок', max_length=255) color = models.CharField(verbose_name=u'Цвет', max_length=50) - description = RedactorField(verbose_name=u'Описание', blank=True) + description = models.TextField(verbose_name=u'Описание', blank=True) mentors = models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name=u'Кураторы') - def __unicode__(self): - return u'%s' % self.title - def __str__(self): return self.title - def get_face(self): - return { - 'title': self.title, - 'color': self.color, - 'description': self.description, - 'mentors': [i.get_face() for i in self.mentors.all()] - } - - def get_mentors(self): - return self.mentors.all() - - def html(self): - return '{1}'.format(self.color, self.title) - - def count(self): - return Course.objects.filter(direction=self).count() - class Meta: verbose_name = u'Направление' verbose_name_plural = u'Направления' @@ -83,22 +40,17 @@ class Course(models.Model): related_name='course_mentors') public = models.BooleanField(verbose_name=u'Опубликовать', default=False) title = models.CharField(verbose_name=u"Заголовок", max_length=255) - description = RedactorField(verbose_name=u'Описание', blank=True) + description = models.TextField(verbose_name=u'Описание', blank=True) image = models.ImageField(verbose_name=u'Изображение', upload_to='course', blank=True) big_image = models.ImageField(verbose_name=u'Большое изображение', upload_to='course', blank=True) big_mobile_image = models.ImageField(verbose_name=u'Под мобилку', upload_to='course', blank=True, null=True, help_text=u'Большая картинка для мобильной версии') - page = models.URLField(verbose_name=u'Страничка описания', blank=True, default='') preview = models.CharField(verbose_name=u'Трэйл', blank=True, default='', max_length=255) teachers = models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name=u'Преподаватели', related_name='course_teachers') sort = models.IntegerField(verbose_name=u'Порядок сортировки', default=0) - use_fail = models.BooleanField(verbose_name=u'Использовать фейковую информацию', default=False) - basic_len = models.IntegerField(verbose_name=u'Основных модулей', default=0) - addition_len = models.IntegerField(verbose_name=u'Дополнительных модулей', default=0) min_price = models.IntegerField(verbose_name=u'Цена от', default=0) buy_icon = models.ImageField(verbose_name=u'Картинка покупки', upload_to='course', blank=True, null=True) - must_build = models.BooleanField(verbose_name=u'На переформировку', default=False) keywords = models.ManyToManyField(Tags, verbose_name=u'Ключевые слова', blank=True) recommend = models.ManyToManyField('self', verbose_name=u'Связанные курсы', blank=True, help_text=u'Курсы, которые стоит порекомендовать вместе с этим') @@ -106,15 +58,12 @@ class Course(models.Model): def __str__(self): return self.title - def __unicode__(self): - return u"%s" % self.title - def get_tree(self, serializer): """ Способ отображения дочерних элементов. Принимает на вход сериалайзер узла """ - course_map = json.loads(NormalMap.objects.get(course=self).dependent_elements) + course_map = json.loads(CourseMap.objects.get(course=self).dependent_elements) def helper(tree_id): acc = [] @@ -133,496 +82,38 @@ class Course(models.Model): количество тем, уроков, домашек. """ - topic_count = Vertex.manager.filter(course=self, content_type__model='topic').count() - task_count = Vertex.manager.filter(course=self, content_type__model='task').count() - tutorial_count = Vertex.manager.filter(course=self, content_type__model='tutorial').count() + topic_count = Vertex.objects.filter(course=self, content_type__model='topic').count() + task_count = Vertex.objects.filter(course=self, content_type__model='task').count() + tutorial_count = Vertex.objects.filter(course=self, content_type__model='tutorial').count() return {"topic_count": topic_count, "tutorial_count": tutorial_count, "task_count": task_count} - def get_direction(self): - return self.direction if self.direction else '' - - def get_mentors(self): - # Получение списка ответственных кураторов - result = set() - for mentor in self.direction.get_mentors(): - result.add(mentor) - - for mentor in self.mentors.all(): - result.add(mentor) - - return result - - def get_html_direction(self): - return self.direction.html() if self.direction else '' - - def get_themes(self, t=None): - # Получение списка тем в порядке кортежа THEME_TYPE - __types = list(i[0] for i in THEME_TYPE) - if t in __types: - return CourseTheme.objects.filter(course=self, _type=t).order_by('sort') - else: - result = [] - for _type in __types: - for i in self.get_themes(t=_type): - result.append(i) - return result - - def get_image(self): - if self.image: - return self.image.url - else: - return '/static/img/course1.jpg' - - def get_big_image(self): - if self.big_image: - return self.big_image.url - else: - return '/static/img/course1.jpg' - - def get_mobile_big_image(self): - if self.big_mobile_image: - return self.big_mobile_image.url - else: - return self.get_big_image() - - def get_level(self): - # Получить уровень сложности - return search_in_collection(LEVELS_COLLECTION, 'flag', self.level) - - def get_title(self): - # Получить заголовок курса - return self.title - - def get_description(self): - # Получить описание курса - return self.description - - def get_skills(self): - # Получить скилы темы - result = [] - # Обойти все размеры навыков в - for i in SkillJ.objects.filter(lesson__course=self): - if i.skill not in result: - result.append(i.skill) - return result - - def get_type(self): - # Получить тип материала, как по подписке - return '' - - def get_icon(self): - # Получить иконку материала, для отображения рядом с курсом - return '' - - def get_materials(self): - # Получить прикрепленные файлы, для отображения на странице курса - return [] - - def get_comments(self): - # Получить все комментарии - return [] - - def lessons_length(self): - return Lesson.objects.filter(course=self).count() - - def build_map(self, material=None): - # Переформирование карты - return CourseBuilder(self, material=material).main() - - def to_build(self): - # Отправить на переформирование картыx - # self.must_build = True - # self.save() - self.build_map() - - def get_absolute_url(self): - return '/courses/%s' % self.slug - - def save(self, *args, **kwargs): - if not self.slug: self.slug = '{0}'.format(translit(self.title)) - super(Course, self).save(*args, **kwargs) - class Meta: verbose_name = u"Курс" verbose_name_plural = u"Курсы" ordering = ['sort'] -class CourseTheme(models.Model): - on_comment = models.BooleanField(verbose_name=u'Блок комментариев', default=True) - teachers = models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name=u'Преподаватели', blank=True) - price_type = models.CharField(verbose_name=u'Тип подписки', choices=MATERIALS_TYPE, default='B', max_length=1) - _type = models.CharField(verbose_name=u'Тип темы', choices=THEME_TYPE, default='B', max_length=2) - icon = models.ImageField(verbose_name=u'Иконка темы', upload_to='CourseTheme', null=True, blank=True) - course = models.ForeignKey(Course, verbose_name=u'Курс', null=True) - sort = models.IntegerField(verbose_name=u'Текущая сортировка', default=1) - title = models.CharField(verbose_name=u'Заголовок', max_length=255, blank=True, default='') - description = models.TextField(verbose_name=u'Короткое описание темы', max_length=255, default='', blank=True) - empty = models.BooleanField(verbose_name=u'Ты не пройдешь!', - help_text=u'Заблокировать дальнейшее прохождение курса. Из-за того, ' - u'что курс не заполнен или что-то вроде того.', default=False) - - def __unicode__(self): - return u'%s:%s/%s' % (self.sort, self.course, self.title if self.title else self.get__type_display()) - - def __str__(self): - return u'%s:%s/%s' % (self.sort, self.course, self.title if self.title else self.get__type_display()) - - def get_lessons(self): - return Lesson.objects.filter(theme=self) - - def get_level(self): - # Получить уровень сложности из коллекции, погрузив объект данных в фабрику - return search_in_collection(LEVELS_COLLECTION, 'flag', self.course.level) - - def get_title(self): - # Получить заголовок темы - if not self.title and Lesson.objects.filter(course=self.course, theme=self).count() != 1: - return self.get__type_display() - - result = u'' - if self._type in ['E', 'P', 'M']: - result = u'{0}: '.format(self.get__type_display()) - - if self.title: - result += self.title - return result - else: - if Lesson.objects.filter(course=self.course, theme=self).count() == 1: - result += Lesson.objects.filter(theme=self).first().get_title() - return result - - def get_description(self): - # Получить описание темы - result = u'' - if self.description: - result += u'

%s

' % self.description - - if self.lessons_length() > 1: - result += u'
    ' - for i in Lesson.objects.filter(course=self.course, theme=self).order_by('sort'): - result += i.get_description() - result += u'
' - return result - - if not self.description and self.lessons_length() == 1: - return Lesson.objects.get(theme=self).description - - if self._type == 'Ex': - return Exam.objects.get(theme=self).get_description() - - def get_skills(self): - # Получить скилы темы - result = [] - # Обойти все размеры навыков в - for i in SkillJ.objects.filter(lesson__theme=self): - if i.skill not in result: - result.append(i.skill) - return result - - def get_type(self): - # Получить тип материала/ Здесь идет обход по всем - __template = search_in_collection(MATERIAL_TYPE_COLLECTION, 'flag', self._type) - __template['icon'] = self.icon if self.icon else __template['icon'] - return __template - - def get_icon(self): - # Получить иконку материала - if self.icon: - return self.icon.url - else: - return search_in_collection(MATERIAL_TYPE_COLLECTION, 'flag', self._type, artifact='icon') - - def get_materials(self): - # Получить прикрепленные файлы - return [] - - def get_comments(self): - # Получить все комментарии - return [] - - def lessons_length(self): - return Lesson.objects.filter(theme=self).count() - - def homework_length(self): - return Homework.objects.filter(theme=self).count() - - def save(self, *args, **kwargs): - if CourseTheme.objects.filter(course=self.course, sort=self.sort).exclude(id=self.id).exists(): - # Переформировать порядок - test_in = self.sort + 1 - for theme in CourseTheme.objects.filter(course=self.course, sort__gte=self.sort).exclude(id=self.id): - if theme.sort != test_in: - theme.sort = test_in - theme.save() - test_in += 1 - if self.course: - self.course.to_build() - - super(CourseTheme, self).save(*args, **kwargs) - - class Meta: - verbose_name = u'Тема' - verbose_name_plural = u'Темы' - ordering = ['sort'] - - @property - def type(self): - return self._type - - -class Lesson(models.Model): - COMMENT_SWITCH = ( - ('N', 'Включены'), - ('F', 'Отключены'), - ('T', 'Подчиняется теме') - ) - free = models.BooleanField(verbose_name=u'Бесплатное видео', default=False) - on_comment = models.CharField(verbose_name=u'Блок комментариев', default='T', choices=COMMENT_SWITCH, - help_text=u'{0}/management/faq/37'.format(DOMAIN), max_length=1) - token = models.CharField(verbose_name=u'Токен доступа', default='', blank=True, max_length=100, editable=False) - title = models.TextField(verbose_name=u'Заголовок', blank=True) - sort = models.IntegerField(verbose_name=u'Текущая сортировка', default=1) - course = models.ForeignKey(Course, verbose_name=u'Курс', null=True) - theme = models.ForeignKey(CourseTheme, verbose_name=u'Тема курса', null=True) - description = RedactorField(verbose_name=u'Описание', default='', blank=True) - video = models.TextField(verbose_name=u'Код видео', default='', blank=True) - video_id = models.CharField(verbose_name=u'Видео ID', blank=True, null=True, max_length=50) - video_date = models.DateTimeField(verbose_name=u'Время генерации кода видео', blank=True, null=True) - materials = models.ManyToManyField(Storage, verbose_name=u'Материалы урока', blank=True) - comments = models.ManyToManyField(Comment, verbose_name=u'Комментарии', blank=True, editable=False) - - def __str__(self): - return '%s/%s' % (self.theme, self.title) - - def __unicode__(self): - return u'%s/%s' % (self.theme, self.title) - - def get_title(self): - return self.title - - def get_description(self): - # Просто получить описание этой темы - return self.description - - def get_level(self): - # Получить уровень сложности - return search_in_collection(LEVELS_COLLECTION, 'flag', self.course.level) - - def get_skills(self): - # Получить скилы темы - result = [] - # Обойти все размеры навыков в - for i in SkillJ.objects.filter(lesson=self): - if i.skill not in result: - result.append(i.skill) - return result - - def get_type(self): - # Получить тип материала - return self.theme.get_type() - - def get_icon(self): - # Получить иконку материала - return self.theme.get_icon() - - def get_materials(self): - # Получить прикрепленные файлы - return material_fabric(self.materials.all()) - - def get_comments(self, _user=None): - # Получить все комментарии урока - return [comment_fabric(comment, __type='L', __user=_user) for comment in self.comments.filter(parent_id=0)] - - def get_all_comments(self, _user=None): - return [comment_fabric(comment, __type='L', __user=_user) for comment in self.comments.all().order_by('-date')] - - def save(self, *args, **kwargs): - if not self.video and self.video_id and self.video_id != '0': - video = gen_vzaar_bb(self.video_id) - if video: - self.video = video - if Lesson.objects.filter(theme=self.theme, sort=self.sort).exclude(id=self.id).exists(): - # Переформировать порядок - test_in = self.sort + 1 - for lesson in Lesson.objects.filter(theme=self.theme, sort__gte=self.sort).exclude(id=self.id): - if lesson.sort != test_in: - lesson.sort = test_in - lesson.save() - test_in += 1 - self.token = self.course.build_map(material=self) - super(Lesson, self).save(*args, **kwargs) - - class Meta: - verbose_name = u'Урок' - verbose_name_plural = u'Уроки' - ordering = ['sort'] - - -class Homework(models.Model): - token = models.CharField(verbose_name=u'Токен доступа', default='', blank=True, max_length=100) - course = models.ForeignKey(Course, verbose_name=u'Курс', null=True) - theme = models.ForeignKey(CourseTheme, verbose_name=u'Тема курса', null=True) - description = RedactorField(verbose_name=u'Описание') - materials = models.ManyToManyField(Storage, verbose_name=u'Материалы для домашней работы', blank=True) - sort = models.IntegerField(verbose_name=u'Текущая сортировка', default=1) - - def __unicode__(self): - return u'%s ID: %s Тема: %s Порядок темы: %s' % ( - self.course.get_title(), self.id, self.theme.title, self.theme.sort) - - def __str__(self): - return '%s ID: %s Тема: %s Порядок темы: %s' % ( - self.course.get_title(), self.id, self.theme.title, self.theme.sort) - - def get_skills(self): - # Получить скилы темы - return [] - - def get_level(self): - # Получить уровень сложности - return search_in_collection(LEVELS_COLLECTION, 'flag', self.course.level) - - def get_type(self): - # Получить тип материала - return self.theme.get_type() - - def get_icon(self): - # Получить иконку материала - return self.theme.get_icon() - - def get_description(self): - # Просто получить описание этой темы - return self.description - - def get_materials(self): - # Получить прикрепленные файлы - return material_fabric(self.materials.all()) - - def get_comments(self): - # Получить все комментарии - return [] - - def get_title(self): - result = self.theme.get_title() - if Homework.objects.filter(theme=self.theme).count() > 1: - result += ' {0}'.format(self.sort) - - return result - - def save(self, *args, **kwargs): - if Homework.objects.filter(theme=self.theme, sort=self.sort).exclude(id=self.id).exists(): - # Переформировать порядок - test_in = self.sort + 1 - for homework in Homework.objects.filter(theme=self.theme, sort__gte=self.sort).exclude(id=self.id): - if homework.sort != test_in: - homework.sort = test_in - homework.save() - test_in += 1 - self.token = self.course.build_map(material=self) - super(Homework, self).save(*args, **kwargs) - - class Meta: - verbose_name = u'Добашнее задание' - verbose_name_plural = u'Домашние задания' - ordering = ['sort'] - - -class Exam(models.Model): - token = models.CharField(verbose_name=u'Токен доступа', default='', blank=True, max_length=100) - sort = models.IntegerField(verbose_name=u'Порядок экзамена', default=1) - course = models.ForeignKey(Course, verbose_name=u'Курс', null=True) - theme = models.ForeignKey(CourseTheme, verbose_name=u'Тема курса', null=True) - description = RedactorField(verbose_name=u'Описание для студентов') - materials = models.ManyToManyField(Storage, verbose_name=u'Материалы экзамена', related_name='exam_materials', - blank=True) - - def __str__(self): - return '%s' % self.course - - def __unicode__(self): - return u'%s' % self.course - - def get_level(self): - # Получить уровень сложности - return search_in_collection(LEVELS_COLLECTION, 'flag', self.course.level) - - def get_skills(self): - # Получить скилы темы - result = [] - # Обойти все размеры навыков в - for i in SkillJ.objects.filter(lesson__theme=self): - if i.skill not in result: - result.append(i.skill) - return result - - def get_type(self): - # Получить тип материала - return self.theme.get_type() - - def get_icon(self): - # Получить иконку материала - return self.theme.get_icon() - - def get_materials(self): - # Получить прикрепленные файлы - return material_fabric(self.materials.all()) - - def get_description(self): - return self.description - - def get_comments(self): - # Получить все комментарии - return [] - - def get_title(self): - return self.theme.get_title() - - def save(self, *args, **kwargs): - if Exam.objects.filter(theme=self.theme, sort=self.sort).exclude(id=self.id).exists(): - # Переформировать порядок - test_in = self.sort + 1 - for exam in Exam.objects.filter(theme=self.theme, sort__gte=self.sort).exclude(id=self.id): - if exam.sort != test_in: - exam.sort = test_in - exam.save() - test_in += 1 - self.token = self.course.build_map(material=self) - super(Exam, self).save(*args, **kwargs) - - class Meta: - verbose_name = u'Экзамен' - verbose_name_plural = u'Экзамены' - ordering = ['sort'] - - class Skills(models.Model): title = models.CharField(verbose_name=u'Наименование', max_length=255) color = models.CharField(verbose_name=u'Цвет', max_length=255) - mini_icon = models.ImageField(verbose_name=u'Маленькая картинка', upload_to='skills', null=True, help_text='15x15') - big_icon = models.ImageField(verbose_name=u'Большая картинка', upload_to='skills', null=True, help_text='65x65') + icon = models.ImageField(verbose_name=u'Большая картинка', upload_to='skills', null=True, help_text='65x65') description = models.TextField(verbose_name=u'Описание', blank=True) def __str__(self): return '%s' % self.title - def __unicode__(self): return u'%s' % self.title - class Meta: verbose_name = u'Навык' verbose_name_plural = u'Навыки' class SkillJ(models.Model): - # Журнал навыков - skill = models.ForeignKey(Skills, verbose_name=u'Навык') - lesson = models.ForeignKey(Lesson, verbose_name=u'Урок') + skill = models.ForeignKey(to="Skills", verbose_name=u'Навык') + lesson = models.ForeignKey(to="Vertex", verbose_name=u'Урок') size = models.IntegerField(verbose_name=u'Размер', default=0) def __str__(self): return '%s %s' % (self.skill, self.size) - def __unicode__(self): return u'%s %s' % (self.skill, self.size) - class Meta: verbose_name = u'Размер навыка' verbose_name_plural = u'Размеры навыков' @@ -630,392 +121,84 @@ class SkillJ(models.Model): class Achievements(models.Model): - tech_name = models.CharField(verbose_name=u'Техническое название', max_length=20, editable=False, - help_text=u'Для системы, нигде не отображается', blank=True, default='', unique=True) - icon = models.ImageField(verbose_name=u'Иконка', upload_to='achives') - title = models.CharField(verbose_name=u'Имя', max_length=50, - help_text=u'Для нашего удобства, студентам не показывается') - image = models.ImageField(verbose_name=u'Изображение', upload_to='achives') - background = models.CharField(verbose_name=u'Цвет фона', max_length=10) - border = models.CharField(verbose_name=u'Цвет границы', max_length=10) + course = models.ForeignKey(to="Course") + user = models.ForeignKey(to=settings.AUTH_USER_MODEL) def __str__(self): - return u'%s' % self.title - - def __unicode__(self): - return u'%s' % self.title - - def save(self, *args, **kwargs): - if not self.tech_name: - self.tech_name = random_string().upper() - super(Achievements, self).save(*args, **kwargs) + return 'Студенту %s за курс %s' % (self.user.username, self.course.title) class Meta: verbose_name = u'Достижение' verbose_name_plural = u'Достижения' -class CourseMap(models.Model): - _types = ( - ('L', u'Урок'), - ('H', u'Домашнее задание'), - ('E', u'Экзамен') - ) - _type = models.CharField(verbose_name=u'Типы материалов', max_length=1, default='L', choices=_types) - course = models.ForeignKey(Course, verbose_name=u'Курс', blank=True, null=True) - lesson = models.ForeignKey(Lesson, verbose_name=u'Урок', null=True, blank=True) - homework = models.ForeignKey(Homework, verbose_name=u'Задание', null=True, blank=True) - exam = models.ForeignKey(Exam, verbose_name=u'Экзамен', null=True, blank=True) - sort = models.IntegerField(verbose_name=u'Глобальный порядок', default=0) - token = models.CharField(verbose_name=u'Быстрый ключ', null=True, editable=False, unique=True, max_length=20) - - def __unicode__(self): - _tmp = None - if self._type == 'L': - _tmp = self.lesson - elif self._type == 'H': - _tmp = self.homework - elif self._type == 'E': - _tmp = self.exam - return u'%s %s %s' % (self.token, self.sort, _tmp.get_title()) - - def __str__(self): - _tmp = None - if self._type == 'L': - _tmp = self.lesson - elif self._type == 'H': - _tmp = self.homework - elif self._type == 'E': - _tmp = self.exam - return '%s %s %s' % (self.token, self.sort, _tmp.get_title()) - - def get_type(self): - _type = None - if self.lesson: - _type = 'L' - elif self.homework: - _type = 'H' - elif self.exam: - _type = 'E' - - return _type - - def get_next(self): - try: - _next = CourseMap.objects.get(course=self.course, sort=self.sort + 1) - except CourseMap.DoesNotExist: - _next = CourseMap.objects.get(course=self.course, sort=0) - - return _next._type, _next.get_obj() - - def get_before(self): - try: - _next = CourseMap.objects.get(course=self.course, sort=self.sort - 1) - except CourseMap.DoesNotExist: - _next = CourseMap.objects.get(course=self.course, sort=0) - - return _next._type, _next.get_obj() - - def get_obj(self): - if self._type == 'L': - return self.lesson - elif self._type == 'H': - return self.homework - elif self._type == 'E': - return self.exam - else: - return None - - def get_token(self): - return '{0}#{1}'.format(self.course.id, self.sort) - - def check_material(self): - result = 0 - if self.lesson: result += 1 - if self.homework: result += 1 - if self.exam: result += 1 - return result == 1 - - def save(self, *args, **kwargs): - if not self.course: - self.course = self.get_obj().course - _token = self.get_token() - if _token != self.token: - self.token = _token - _type = self.get_type() - if _type != self._type: - self._type = _type - - super(CourseMap, self).save(*args, **kwargs) - - class Meta: - verbose_name = u'Карта курса' - verbose_name_plural = u'Карты курсов' - ordering = ['sort'] - - -class AchievementsMap(models.Model): - after = models.BooleanField(verbose_name=u'После прохождения', default=True) - point = models.ForeignKey(CourseMap, verbose_name=u'Позиция') - achiv = models.ForeignKey(Achievements, verbose_name=u'Достижение') - - def __str__(self): - return u'%s %s %s' % (self.point, self.achiv, self.after) - - def __unicode__(self): - return u'%s %s %s' % (self.point, self.achiv, self.after) - - class Meta: - verbose_name = u'Внутреняя ачивка' - verbose_name_plural = u'Внетренние ачивки' - - class Diploma(models.Model): - key = models.IntegerField(verbose_name=u'Последний ключ') - icon = models.ImageField(verbose_name=u'Мини картинка', upload_to='diploms', null=True) - course = models.ForeignKey(Course, verbose_name=u'Курс') - out_image = models.ImageField(verbose_name=u'Диплом без печати', upload_to='diploms') - in_image = models.ImageField(verbose_name=u'Диплом c печатью', upload_to='diploms') - # - date_place = models.CharField(verbose_name=u'Размещение даты', max_length=255, - help_text=u'Пикселей сверху:пикселей слева - 256:256', null=True) - date_color = models.CharField(verbose_name=u'Цвет даты', max_length=255, null=True, - help_text=u'RGB. Пример: 0,0,0') - date_font = models.FileField(verbose_name=u'Шрифт даты', upload_to='diploms', null=True) - date_size = models.IntegerField(verbose_name=u'Размер даты', null=True) - # - key_place = models.CharField(verbose_name=u'Размещение ключа', max_length=255, null=True, - help_text=u'Пикселей сверху:пикселей слева - 256:256') - key_color = models.CharField(verbose_name=u'Цвет ключа', max_length=255, null=True, - help_text=u'RGB. Пример: 0,0,0') - key_font = models.FileField(verbose_name=u'Шрифт ключа', upload_to='diploms', null=True) - key_size = models.IntegerField(verbose_name=u'Размер ключа', null=True) - # - name_place = models.CharField(verbose_name=u'Размещение имени', max_length=255, null=True, - help_text=u'Пикселей сверху:пикселей слева - 256:256') - name_color = models.CharField(verbose_name=u'Цвет имени', max_length=255, null=True, - help_text=u'RGB. Пример: 0,0,0') - name_font = models.FileField(verbose_name=u'Шрифт имени', upload_to='diploms', null=True) - name_size = models.IntegerField(verbose_name=u'Размер имени', null=True) + icon = models.ImageField(verbose_name=u'Иконка', upload_to='diplomas') + course = models.ForeignKey(to=Course) + user = models.ForeignKey(to=settings.AUTH_USER_MODEL) + #Дипломы def __str__(self): - return '%s' % self.course - - def __unicode__(self): - return u'%s' % self.course - - def get_key(self): - k = self.key - self.key = k + 1 - self.save() - return k - - def get_color(self, _type): - if _type == 'key': - p = self.key_color - elif _type == 'name': - p = self.name_color - elif _type == 'date': - p = self.date_color - p = p.split(',') - return int(p[0]), int(p[1]), int(p[2]) - - def get_place(self, _type): - if _type == 'key': - p = self.key_place - elif _type == 'name': - p = self.name_place - elif _type == 'date': - p = self.date_place - p = p.split(':') - return int(p[1]), int(p[0]) + return 'Студенту %s за курс %s' % (self.user.username, self.course.title) class Meta: - verbose_name = u'Диплом' - verbose_name_plural = u'Дипломы' - - -def gen_vzaar_bb(id): - try: - int(id) - except ValueError: - return None - - if id: - return ''.format(id) - else: - return None - - -class CourseBuilder: - def __init__(self, course, material=None): - self.course = course - self.course_public = self.course.public - self.material = material # Вернуть токен вызвавшего материала - self.ready = [] - self.materials = [] - self.token = '' - - def append_in_price(self, map): - # Добавить карту в счета, куда включены все карты курса в типе, исключая текущий - # Price.objects.filter(included=map.get_befor) - pass + verbose_name = 'Диплом' + verbose_name_plural = 'Дипломы' - def rebuild_map(self): - sort = 0 - for theme in CourseTheme.objects.filter(course=self.course): - for lesson in Lesson.objects.filter(theme=theme): - must_save = False - try: - token = '{0}#{1}'.format(self.course.id, sort) - tmp = CourseMap.objects.get(token=token) - except CourseMap.DoesNotExist: - tmp = CourseMap.objects.create(lesson=lesson, sort=sort, course=self.course) - self.append_in_price(tmp) - if tmp.homework: - tmp.homework = None - must_save = True - - if tmp.exam: - tmp.exam = None - must_save = True - - if tmp.lesson != lesson: - tmp.lesson = lesson - must_save = True - - if lesson.token != token: - lesson.token = token - lesson.save() - - if must_save: tmp.save() - - if lesson == self.material: - self.token = tmp.token - self.materials.append(tmp.id) - sort += 1 - - for homework in Homework.objects.filter(theme=theme): - must_save = False - try: - token = '{0}#{1}'.format(self.course.id, sort) - tmp = CourseMap.objects.get(token=token) - except CourseMap.DoesNotExist: - tmp = CourseMap.objects.create(homework=homework, sort=sort, course=self.course) - self.append_in_price(tmp) - - if tmp.homework != homework: - tmp.homework = homework - must_save = True - - if tmp.exam: - tmp.exam = None - must_save = True - - if tmp.lesson: - tmp.lesson = None - must_save = True - - if homework.token != token: - homework.token = token - homework.save() - - if must_save: tmp.save() - - if homework == self.material: - self.token = tmp.token - - self.materials.append(tmp.id) - sort += 1 - - for exam in Exam.objects.filter(theme=theme): - must_save = False - try: - token = '{0}#{1}'.format(self.course.id, sort) - tmp = CourseMap.objects.get(token=token) - except CourseMap.DoesNotExist: - tmp = CourseMap.objects.create(exam=exam, sort=sort, course=self.course) - self.append_in_price(tmp) - - if tmp.exam != exam: - tmp.exam = exam - must_save = True - - if tmp.homework: - tmp.homework = None - must_save = True - - if tmp.lesson: - tmp.lesson = None - must_save = True +class VertexManager(models.Manager): + # Менеджер вершин графа. - if exam.token != token: - exam.token = token - exam.save() + def create_with_dependencies(self, model, course, old_id, title, description, + free=True, materials=None, **kwargs): + content_type = ContentType.objects.get(app_label='courses', model=model) + obj, _is_create = content_type.model_class().objects.update_or_create(**kwargs) + [obj.materials.add(i) for i in materials] if materials else None + res, _is_create = self.update_or_create( + content_type=content_type, + object_id=obj.id, + course=course, + title=title, + description=description, + free=free, + old_id=old_id, + ) + return res - if must_save: tmp.save() - if exam == self.material: - self.token = tmp.token - self.materials.append(tmp.id) - sort += 1 +class Vertex(models.Model): + """ + Основная структурная единица узел графа курса. + Позволяет работать со структурой курса на более высоком уровне абстракции. + """ - if sort != CourseMap.objects.filter(course=self.course).count(): - CourseMap.objects.filter(course=self.course).exclude(id__in=self.materials).delete() + course = models.ForeignKey(to=Course) + title = models.CharField(verbose_name=u'Название', max_length=255) + free = models.BooleanField(default=True, verbose_name=u'Привилегии для узла не будут проверяться') + description = models.TextField(verbose_name=u'Описание', default='', blank=True, null=True) + children = models.ManyToManyField(to='Vertex', blank=True) + content_type = models.ForeignKey(to=ContentType) + object_id = models.PositiveIntegerField() + content_object = GenericForeignKey('content_type', 'object_id') - def course_switcher(self): - # Блокировка курса на время обработки - if self.course_public: - if self.course.public: - self.course.public = False - else: - self.course.public = True - self.course.save() + objects = VertexManager() - def main(self): - self.course_switcher() - ## - self.rebuild_map() - ## - self.course_switcher() - return self.token if self.material else None # Вернуть токен для материала если он есть + def __str__(self): + return self.title + ': ' + str(self.content_type.model) + def get_next(self): + vertex_id = CourseMap.objects.get(course=self.course).get_next(self.id) + return Vertex.objects.get(id=int(vertex_id), ) -# class Flow(models.Model): -# title = models.CharField(verbose_name=u'Название', max_length=255) -# description = models.TextField( -# verbose_name=u'Описание', default='', blank=True, null=True) -# course = models.ForeignKey(Course, verbose_name=u'Курс') -# start_flow = models.DateTimeField( -# verbose_name=u'Дата начала потока', default=datetime.datetime.now) -# created = models.DateTimeField( -# default=datetime.datetime.now, verbose_name=u"Создан", editable=False) -# modified = models.DateTimeField( -# auto_now=True, verbose_name=u"Изменен") -# -# def __str__(self): -# return '%s / %s' % (self.title, self.course) -# -# def __unicode__(self): -# return '%s / %s' % (self.title, self.course) -# -# def get_status(self): -# if self.start_flow <= datetime.datetime.now(): -# return True -# else: -# return False -# -# class Meta: -# verbose_name = u'Поток' -# verbose_name_plural = u'Потоки' -# ordering = ['-modified'] + def is_more(self, vertex) -> bool: + if not self.course == vertex.course: + raise ValueError('Vertexes of different course') + course_map = CourseMap.objects.get(course=self.course) + return course_map.map_to_list().index(self.id) > course_map.map_to_list().index(vertex.id) # Модели нового API со временем всё, что выше будет выпилено -class Tutorial(models.Model): +class Tutorial(Vertex): """ Модель урока. Урок может быть открыт для комментирования и закрыт, по дефолту открыт, @@ -1032,7 +215,7 @@ class Tutorial(models.Model): materials = models.ManyToManyField(Storage, verbose_name=u'Материалы урока', blank=True) -class Task(models.Model): +class Task(Vertex): """ Модель таска. Исторически сложилось, что на сервере хостятся два типа тасков отличающихся лишь наименованием @@ -1045,7 +228,7 @@ class Task(models.Model): is_exam = models.BooleanField(default=False, verbose_name=u'Экзамен или домашка') -class Topic(models.Model): +class Topic(Vertex): """ Модель темы, нужно просто для объединения тасков и уроков. У некоторых тем есть иконка. @@ -1054,27 +237,7 @@ class Topic(models.Model): icon = models.ImageField(verbose_name=u'Иконка темы', upload_to='CourseTheme', null=True, blank=True) -class VertexManager(models.Manager): - # Менеджер вершин графа. - - def create_with_dependencies(self, model, course, old_id, title, description, - free=True, materials=None, **kwargs): - content_type = ContentType.objects.get(app_label='courses', model=model) - obj, _is_create = content_type.model_class().objects.update_or_create(**kwargs) - [obj.materials.add(i) for i in materials] if materials else None - res, _is_create = self.update_or_create( - content_type=content_type, - object_id=obj.id, - course=course, - title=title, - description=description, - free=free, - old_id=old_id, - ) - return res - - -class NormalMap(models.Model): +class CourseMap(models.Model): """ Так как курс евляется связным графом мы можем отобразить его бесконечным количеством способов, а нам нужен один самый красивый, мы должный в явном виде указать способ отображения. @@ -1103,41 +266,3 @@ class NormalMap(models.Model): return res_list[res_list.index(vertex_id)] except ValueError: raise ValueError("vertex_id " + str(vertex_id) + " not in list " + ",".join(res_list)) - - -class Vertex(models.Model): - """ - Основная структурная единица узел графа курса. - Может быть привязана к теме уроку или заданию. - Модель создана для минимизации трёх выше указанных. - Позволяет работать со структурой курса на более высоком уровне абстракции. - """ - - course = models.ForeignKey(to=Course) - title = models.CharField(verbose_name=u'Название', max_length=255) - free = models.BooleanField(default=True, verbose_name=u'Привилегии для узла не будут проверяться') - description = models.TextField( - verbose_name=u'Описание', default='', blank=True, null=True) - children = models.ManyToManyField(to='Vertex', blank=True) - content_type = models.ForeignKey(to=ContentType) - object_id = models.PositiveIntegerField() - content_object = GenericForeignKey('content_type', 'object_id') - old_id = models.CharField(max_length=10, verbose_name='Поле создаётся на время миграции') - - manager = VertexManager() - - def __str__(self): - return self.title + ': ' + self.get_type() - - def get_type(self): - return self.content_type.__str__() - - def get_next(self): - vertex_id = NormalMap.objects.get(course=self.course).get_next(self.id) - return Vertex.manager.get(id=int(vertex_id), ) - - def is_more(self, vertex) -> bool: - if not self.course == vertex.course: - raise ValueError('Vertexes of different course') - course_map = NormalMap.objects.get(course=self.course) - return course_map.map_to_list().index(self.id) > course_map.map_to_list().index(vertex.id) diff --git a/courses/new_urls.py b/courses/new_urls.py deleted file mode 100644 index 45f741a..0000000 --- a/courses/new_urls.py +++ /dev/null @@ -1,10 +0,0 @@ -from django.conf.urls import url -from courses import new_view as views - -urlpatterns = [ - url(r'detail/([0-9]{1,99})/$', views.CourseDetailView.as_view()), - url(r'vertex/([0-9]{1,99})/$', views.VertexDetail.as_view()), - url(r'tree/(?P[-\w]+)/$', views.TreeView.as_view()), - url(r'directions/$', views.DirectionListView.as_view()), - url(r'^$', views.CourseListView.as_view()), -] \ No newline at end of file diff --git a/courses/new_view.py b/courses/new_view.py deleted file mode 100644 index 91ecf7a..0000000 --- a/courses/new_view.py +++ /dev/null @@ -1,116 +0,0 @@ -from rest_framework.views import APIView -from rest_framework.renderers import JSONRenderer -from rest_framework.response import Response - -from access.serializers import ExtraPrivilegeSerializer -from courses.models import Course, MaterialDirection, Vertex -from access.models import ActiveObject, ExtraPrivilege -from courses.serializers import CourseDetailSerializer, CourseListSerializer, VertexSerializer, CourseTreeSerializer -from finance.models import Bill - - -class DirectionListView(APIView): - renderer_classes = (JSONRenderer,) - status_code = 200 - - def get(self, _request): - return Response([direction.title for direction in MaterialDirection.objects.all()], self.status_code) - - -class TreeView(APIView): - renderer_classes = (JSONRenderer,) - status_code = 200 - - @staticmethod - def post(request): - print(request) - return Response(status=204) - - def get(self, request, slug): - try: - course = Course.objects.get(slug=slug) - except Course.DoesNotExist: - return Response("Course doesn't exist", status=404) - - res = CourseTreeSerializer(course).data - try: - res['active_id'] = ActiveObject.objects.get(course=course, user=request.user).active_obj.id - except ActiveObject.DoesNotExist: - res['active_id'] = False - - res['extra_privilege'] = [ - ExtraPrivilegeSerializer(i).data for i in ExtraPrivilege.objects.filter( - user=request.user, - subject__course=course, - ) - ] - return Response(res, self.status_code) - - -class CourseDetailView(APIView): - renderer_classes = (JSONRenderer,) - status_code = 200 - - def get(self, request, pk): - if not request.user.is_authenticated and request.user.in_role in ['A']: - return Response("Course detail access only for admin users", status=403) - - try: - return Response(CourseDetailSerializer(Course.objects.get(id=pk)).data, self.status_code) - except Course.DoesNotExist: - return Response("Course doesn't exist", status=404) - - -class CourseListView(APIView): - renderer_classes = (JSONRenderer,) - status_code = 200 - - def get(self, request): - if (not (request.user.is_authenticated or request.user.in_role == 'U'))\ - or request.GET.get('staff') == 'true': - - return Response([CourseListSerializer(i).data for i in Course.objects.all()], self.status_code) - - res = [] - for course in Course.objects.all(): - if course.public: - course_serialize = CourseListSerializer(course).data - course_serialize['is_mine'] = False - if request.user.is_authenticated() and Bill.objects.filter(service__course=course, user=request.user, status='F').exists(): - course_serialize['is_mine'] = True - res.append(course_serialize) - - return Response(res, self.status_code) - - -class VertexDetail(APIView): - renderer_classes = (JSONRenderer,) - - @staticmethod - def get(request, pk): - status = int(request.GET.get('status', '200')) - - try: - vertex = Vertex.manager.get(id=pk) - except Vertex.DoesNotExist: - return Response("Vertex doesn't exist", status=404) - - res_a = Response(VertexSerializer(vertex).data, status=200) if status == 200 else Response(status=204) - - if vertex.free: - return res_a - - if not request.user.is_authenticated: - return Response("Access to detail of vertex, exist only for authenticated users", status=403) - - if ExtraPrivilege.objects.filter(user=request.user, subject=vertex).exists(): - return res_a - - try: - if not ActiveObject.objects.get(course=vertex.course, user=request.user).is_access(vertex): - return Response("permission denied", status=403) - - except ActiveObject.DoesNotExist: - return Response("permission denied", status=403) - - return res_a diff --git a/courses/serializers.py b/courses/serializers.py index b89577a..e76c8e9 100644 --- a/courses/serializers.py +++ b/courses/serializers.py @@ -1,9 +1,6 @@ from rest_framework import serializers -import json -# from django.contrib.auth import get_user_model -# from django.core.exceptions import ObjectDoesNotExist -from courses.models import Course, Vertex, Tutorial, Topic, Task, NormalMap +from courses.models import Course, Vertex, Tutorial, Topic, Task class TutorialSerializer(serializers.ModelSerializer): @@ -99,12 +96,7 @@ class CourseDetailSerializer(serializers.ModelSerializer): class Meta: model = Course - exclude = ( - 'slug', 'mentors', 'page', 'sort', - 'preview', 'use_fail', 'basic_len', - 'addition_len', 'min_price', 'buy_icon', - 'must_build', 'keywords', 'recommend', - ) + fields = '__all__' @staticmethod def get_level(self): @@ -116,4 +108,4 @@ class CourseDetailSerializer(serializers.ModelSerializer): @staticmethod def get_teachers(self): - return [teacher.full_name() for teacher in self.teachers.all()] + return [teacher.get_full_name() for teacher in self.teachers.all()] diff --git a/courses/templates.py b/courses/templates.py deleted file mode 100755 index 2c9a6ab..0000000 --- a/courses/templates.py +++ /dev/null @@ -1,303 +0,0 @@ -# coding=utf-8 -import copy - -from lms.tools import out_date_format - -STATUS_LABEL_CLASS = 'btn btn-{0} pull-right btn-lg m-b-xs m-r-xs m-t-lg' - -# Ключи материалов -# L - Урок -# H - ДЗ -# E - Экзамен - -# ! Если мы ставим словарь в значение, обязательно должен быть ключь 'default' ! -STATUS_COLLECTION = ({ - 'title': {'default': u'Доступно для выполнения', 'L': u'Доступно'}, - 'flag': 'A', - 'color': 'info', - 'styles': 'text-shadow: 0 0 0;', - 'icon': 'glyphicon glyphicon-time' -}, { - 'title': {'default': u'Проверяется преподавателем'}, - 'flag': 'T', - 'color': 'info', - 'styles': 'text-shadow: 0 0 0;', - 'icon': 'glyphicon glyphicon-time' -}, { - 'title': {'default': u'Требуется доработка'}, - 'flag': 'E', - 'color': 'danger', - 'styles': 'text-shadow: 0 0 0;', - 'icon': 'glyphicon glyphicon-time' -}, { - 'title': {'default': u'Сдано', 'L': u'Пройдено'}, - 'flag': 'F', - 'color': 'success', - 'styles': 'text-shadow: 0 0 0;', - 'icon': 'glyphicon glyphicon-ok' -}, { - 'title': {'default': u'Не доступно'}, - 'flag': 'N', - 'color': 'default', - 'styles': 'color: #ccc;text-shadow: 0 0 0;', - 'icon': 'glyphicon glyphicon-remove' -}) - - -COMMENTS_STATUS_COLLECTION = ({ - 'title': 'Одобрено', - 'flag': 'G', - 'label': '', - 'background': '', - 'color': '', - 'style': '', - 'icon': '' - }, { - 'title': 'Отклонено', - 'flag': 'F', - 'label': '', - 'background': '', - 'color': '', - 'style': '', - 'icon': '' - }, { - 'title': 'Сообщение от администрации', - 'flag': 'A', - 'label': '', - 'background': '', - 'color': '', - 'style': '', - 'icon': '' - }, { - 'title': 'Технический вопрос', - 'flag': 'T', - 'label': '', - 'background': '', - 'color': '', - 'style': '', - 'icon': '' - }, { - 'title': '', - 'flag': 'S', - 'label': '', - 'background': '', - 'color': '', - 'style': '', - 'icon': '' - }) - -# ! Если мы ставим словарь в значение, обязательно должен быть ключь 'default' ! -LEVELS_COLLECTION = ({ - 'title': u'Базовый', - 'flag': 'B', - 'color': '#fff', - 'background': '#5cb85c', - 'icon': 'glyphicon glyphicon-signal' -}, { - 'title': u'Продвинутый', - 'flag': 'A', - 'color': '#fff', - 'background': '#5bc0de', - 'icon': 'glyphicon glyphicon-signal' -}, { - 'title': u'Экспертный', - 'flag': 'E', - 'color': '#fff', - 'background': '#d9534f', - 'icon': 'glyphicon glyphicon-signal' -}, { - 'title': u'Базовый + Продвинутый', - 'flag': 'B+A', - 'color': '#fff', - 'background': '#e68917', - 'icon': 'glyphicon glyphicon-signal' -}) - -# ! Если мы ставим словарь в значение, обязательно должен быть ключь 'default' ! -MATERIAL_TYPE_COLLECTION = ({ - 'title': u'Базовый материал', # Выводимое имя типа - 'flag': 'B', # Флаг, по которому идет поиск - 'color': '#dee5e7', # Стандартный цвет отображения типа материала - 'icon': '/static/img/1441672724_new_seo-37.png' # Стандартная иконка темы -}, { - 'title': u'Расширеный материал', - 'flag': 'E', - 'color': '#66cc99', - 'icon': '/static/img/1441673370_8.png' -}, { - 'title': u'Премиум материал', - 'flag': 'P', - 'color': '#ffffcc', - 'icon': '/static/img/1441671767_new_seo-36.png' -}, { - 'title': u'Предэкзаменационные материалы', - 'flag': 'M', - 'color': '#dee5e7', - 'icon': '/static/img/1447237167_BeOS_app_serv.png' -}, { - 'title': u'Экзаменационная тема', - 'flag': 'Ex', - 'color': '#ff1', - 'icon': '/static/img/1441672223_new_seo2-17.png' -}) - -USER_TYPES = ({ - 'flag': 'U', - 'title': u'Студент', - 'background': 'bg-primary', - 'style': '', - 'label': '' -}, { - 'flag': 'T', - 'title': u'Преподаватель', - 'background': 'bg-primary', - 'style': '', - 'label': '' -}, { - 'flag': 'M', - 'title': u'Менеджер', - 'background': 'bg-primary', - 'style': '', - 'label': '' -}, { - 'flag': 'S', - 'title': 'Руководитель', - 'background': 'bg-primary', - 'style': '', - 'label': '' -}, { - 'flag': 'A', - 'title': u'Команда «SkillBox»', - 'background': 'bg-warning', - 'style': 'color: #666;font-weight: normal;text-shadow: 0 0 0;', - 'label': '' -}, { - 'flag': 'S2', - 'title': u'Куратор', - 'background': 'bg-warning', - 'style': 'color: #666;font-weight: normal;text-shadow: 0 0 0;', - 'label': '' -}) - -BUTTON_TYPES = { - 'N': '', - 'B': u'Получить полный доступ к курсу', - 'H': u'Перейти к заданию', - 'L': u'Перейти к изучению', - 'O': u'Открыть лекцию', - 'E': u'Страница экзамена', - 'T': u'Не доступно по подписке', - 'F': u'Перейти к экзамену' -} - -BUTTON_TYPE = ({ - 'flag': 'A', - 'title': {'default': u'Открыть материал', - 'L': u'Перейти к уроку', - 'H': u'Перейти к заданию', - 'E': u'Перейти к экзамену'}, - 'color': {'default': '#fff'}, - 'background': { - 'default': '#23ad44', - 'H': '#23b7e5' - }, - 'link': {'L': '/courses/lesson/', - 'H': '/courses/homework/', - 'E': '/courses/exam/'}, - 'by_type': { - 'L': 'lesson', - 'H': 'homework', - 'E': 'exam' - } -}, { - 'flag': 'F', - 'title': {'default': u'Открыть материал', - 'L': u'Открыть лекцию', - 'H': u'Открыть задание', - 'E': u'Открыть экзамен'}, - 'color': {'default': '#fff'}, - 'background': { - 'default': '#23ad44', - 'H': '#23b7e5' - }, - 'link': {'L': '/courses/lesson/', # ID урока - 'H': '/courses/homework/', # ID ДЗ - 'E': '/courses/exam/'}, # ID экзамена - 'by_type': { - 'L': 'lesson', - 'H': 'homework', - 'E': 'exam' - } -}) - - -def comment_fabric(_comment, __type=None, __user=None): - result = { - 'id': _comment.id, - 'status': search_in_collection(COMMENTS_STATUS_COLLECTION, 'flag', _comment.status), - 'closed': _comment.closed, - 'owner': _comment.owner.name if _comment.owner.name else _comment.owner.get_short_name(), - 'owner_name': _comment.owner.get_full_name(), - 'owner_id': _comment.owner.id, - 'owner_email': _comment.owner.email, - 'owner_type': search_in_collection(USER_TYPES, 'flag', _comment.owner.in_role), - 'owner_avatar': _comment.owner.get_image_url(type_in='small'), - 'owner_status': _comment.owner.get_status_display(), - 'owner_interactive_key': _comment.owner.interactive_key, - 'owner_model': '', - 'text': _comment.get_text(), - 'date': out_date_format(_comment.date, no_time=False), - 'replies': _comment.get_replies(__type, __user), - 'files': material_fabric(_comment.files.all()), - 'response': _comment.response, - 'response_comment': _comment.response_comment.get_face(_type=__type, _user=__user) if _comment.response else None - } - if __user: - result['saw'] = _comment.saw.filter(id=__user.id).exists() - #comment.set_saw(__user) - - return result - - -def material_fabric(stores): - result = [] - for store in stores: - result.append({ - 'id': store.id, - 'format': store.f_format.f_type, - 'icon_type': 'class' if store.f_format.icon_class else 'icon', - 'icon': store.f_format.icon.url if store.f_format.icon else store.f_format.icon_class, - 'url': store.original.url, - 'title': store.get_name_for_user(), - 'name': store.get_file_name() - }) - return result - - -def search_in_collection(collection, field, word, artifact=None, in_type='default'): - # Поиск по полю в коллекции словарей - # == Коллекции статичны. Найдя словарь отображения по флагу к примеру, можно просто вывести результат в веб - # == artifact - получить значение конкретно поля из словаря - # Получает кортеж, берет словари по очереди и сравнивает в них поле field - # Если значение в поле template[field] == work - возвращает полную копию словаря или возвращает пустое значение - render = '' - for template in collection: - if template[field] == word: - if artifact: - render = copy.deepcopy(template[artifact]) - else: - render = copy.deepcopy(template) - break - if render: - # Получить шаблон специально для запрашиваемого объекта по ключу объекта - # У урока к примеру сейчас это 'L' - try: - for key, value in render.items(): - if type(value) == dict: - if in_type in value: - render[key] = value[in_type] - else: - render[key] = value['default'] - except AttributeError: - return render - return render diff --git a/courses/templatetags/__init__.py b/courses/templatetags/__init__.py deleted file mode 100755 index a1208ca..0000000 --- a/courses/templatetags/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__author__ = 'baryshnikov' diff --git a/courses/templatetags/course_filter.py b/courses/templatetags/course_filter.py deleted file mode 100755 index b1d4d36..0000000 --- a/courses/templatetags/course_filter.py +++ /dev/null @@ -1,117 +0,0 @@ -from django import template -from access.models import User -from courses.models import CourseTheme, Lesson, Exam, Course, Homework -from journals.models import ExamJ, HomeworkJ, TeacherJ, CourseThemeJ -from finance.tools import system_check_bill -register = template.Library() - - -def getUserfactory(user): - if user: - try: - user = User.objects.get(id=user) - except User.DoesNotExist: - return user - else: - return None - return user - - -@register.filter -def get_theme_color(theme, student): - __theme = CourseTheme.objects.get(id=theme) - return __theme.get_color(getUserfactory(student)) - - -@register.filter -def get_homework_status_html(theme, student): - __theme = CourseTheme.objects.get(id=theme) - return __theme.homework_status_html(getUserfactory(student)) - - -@register.filter -def get_homework_status(course, student): - __course = CourseTheme.objects.get(id=course) - return __course.homework_status(getUserfactory(student)) - - -@register.filter -def get_theme_description(theme, student): - __theme = CourseTheme.objects.get(id=theme) - return __theme.get_description(getUserfactory(student)) - - -@register.filter -def get_lesson_status_name(lesson, student): - __lesson = Lesson.objects.get(id=lesson) - return __lesson.get_status_name(getUserfactory(student)) - - -@register.filter -def get_lesson_status(lesson, student): - __lesson = Lesson.objects.get(id=lesson) - return __lesson.get_status(getUserfactory(student)) - - -@register.filter -def get_theme_status(lesson, student): - __theme = CourseTheme.objects.get(id=lesson) - return __theme.get_status(getUserfactory(student)) - - -@register.filter -def get_exam_color(exam, student): - __exam = Exam.objects.get(id=exam) - return __exam.get_color(getUserfactory(student)) - - -@register.filter -def get_progress_persent(course, student): - try: - result = TeacherJ.objects.get(course__id=course, student=getUserfactory(student)).progress - except TeacherJ.DoesNotExist: - result = 0 - return result - - -@register.filter -def get_exam_status(course, student): - __course = Course.objects.get(id=course) - return __course.get_exam_status(getUserfactory(student)) - - -@register.filter -def check_bill(course, user): - return system_check_bill(Course.objects.get(id=course), getUserfactory(user)) - - -@register.filter -def get_actual_lesson_id(theme, user): - __theme = CourseTheme.objects.get(id=theme) - __user = getUserfactory(user) - try: - cj = CourseThemeJ.objects.get(student=__user, theme=__theme) - except TeacherJ.DoesNotExist: - return Lesson.objects.filter(theme=__theme).order_by('sort').values('id').first()['id'] - else: - return cj.actual_lesson.id - - -@register.filter -def get_button(theme, user): - return CourseTheme.objects.get(id=theme).get_button(getUserfactory(user)) - - -@register.filter -def get_exam_status_html(course, user): - return Course.objects.get(id=course).exam_status_html(user) - - -@register.filter -def get_exam_button(course, user): - return get_exam_button(Exam.objects.get(course=Course.objects.get(id=course)), getUserfactory(user)) - - -@register.filter -def get_student_homework_comments(theme, user): - return HomeworkJ.objects.filter(student=getUserfactory(user), homework=Homework.objects.get(id=CourseTheme.objects.get(id=theme))).exclude(status='F') diff --git a/courses/tools.py b/courses/tools.py deleted file mode 100755 index c29228c..0000000 --- a/courses/tools.py +++ /dev/null @@ -1,443 +0,0 @@ -# coding=utf-8 -from django.db.models import Q -from courses.models import CourseTheme, Exam, Achievements, Lesson, Homework, SkillJ -from journals.models import LessonJ, HomeworkJ, ExamJ, AchievementJ, TeacherJ, DiplomaJ - - -def get_empty_face(course): - return TeacherJ.objects.filter(course__id=course).first().get_empty_face() - - -def set_read_flag(student, course): - pass - - -def get_next_button(student, start_place_type, start_place_id): - pass - - -def get_read_flag(student, course): - pass - - -def check_read_flag(student, course): - pass - - -def check_bought(token, user): - # Проверка доступа материала по подписке - pass - - -def make_journal(journal): - course = journal.course - student = journal.student - - -def get_user_courses(user): - # Получить рабочие курсы студента - return TeacherJ.objects.filter(student=user) - - -def get_user_diploms(user): - # Получить дипломы пользователя - return DiplomaJ.objects.filter(student=user).exclude(Q(in_image=None)|Q(key=None)).only('material', 'date') - - -def get_user_achievements(user): - # Получить все ачивки пользователя - themes = {} - for i in AchievementJ.objects.filter(student=user): - themes[i.group] = [] - - for i in AchievementJ.objects.filter(student=user): - themes[i.group].append(i) - - return themes - - -def get_user_achievements_count(user): - # Получение количества ачивок пользователя - return AchievementJ.objects.filter(student=user).count() - - -def get_user_skills(user): - # Получить скилы пользователя - lessons = [i.material for i in LessonJ.objects.filter(student=user, success=True)] - skills = SkillJ.objects.filter(lesson__in=lessons).only('size', 'skill') - result = {} - for i in skills: - if i.skill.title in result: - result[i.skill.title]['size'] += i.size - else: - result[i.skill.title] = { - 'color': i.skill.color, - 'size': i.size, - 'icon': i.skill.mini_icon - } - return result - - -def get_user_completed_courses_count(user): - return ExamJ.objects.filter(student=user, success=True).count() - - -def get_user_skills_size_count(user): - # Посчитать размер навыка - result = 0 - for key, value in get_user_skills(user).items(): - result += value['size'] - return result - - -def set_achievement(user, title, text, group, achievement_name): - # Просвоить ачивку - achievement = Achievements.objects.get(tech_name=achievement_name) - AchievementJ.objects.create(student=user, title=title, text=text, group=group, achievement=achievement) - -### Методы над курсом -def get_students_on_homework_length(course): - l = 0 - for i in CourseTheme.objects.filter(course=course): - l += i.get_active_homework_students_length() - return l - - -def get_active_exam_students(course): - result = [i.student for i in ExamJ.objects.filter(exam__course=course, status='T').exclude(success=True)] - return result - - -def get_active_exam_students_length(course): - result = ExamJ.objects.filter(exam__course=course, status='T').count() - return result - - -def exam_status_html(course, student): - status = course.get_exam_status(student) - data = u'{1}' - if status == 'B': - return data.format(u'primary', u'Пока недоступно') - elif status == 'P': - return data.format(u'warning', u'Достуно для выполнения') - elif status == 'T': - return data.format(u'info', u'Проверяется преподавателем') - elif status == 'E': - return data.format(u'danger', u'Требуется доработка') - elif status == 'F': - return data.format(u'success', u'Сдано') - - -def get_exam_status(course, student): - try: - exam = Exam.objects.get(course=course) - except Exam.DoesNotExist: - return 'B' - else: - return exam.get_status(student) - - -def check_course_finish(course, student): - if LessonJ.objects.filter(lesson__course=course, student=student, status='F').count() == Lesson.objects.filter( - course=course).count() \ - and HomeworkJ.objects.filter(homework__course=course, student=student, - status='F').count() == Homework.objects.filter(course=course).count() \ - and ExamJ.objects.filter(exam__course=course, student=student, status='F').count() == Exam.objects.filter( - course=course).count(): - return True - else: - return False - - -### Методы над темой -def get_theme_no_saw_lessons_length(__theme): - result = 0 - for n in __theme.get_lessons(): - result += n.get_no_saw_lessons_length() - - return result - - -def get_theme_description(theme, student): - result = '' - if theme.description: - result += '

%s

' % theme.description - - if theme.lessons_length() > 1: - result += u'
    ' - for i in Lesson.objects.filter(course=theme.course, theme=theme).order_by('sort'): - result += i.get_description(student) - result += u'
' - return result - - if not theme.description and theme.lessons_length() == 1: - return Lesson.objects.get(theme=theme).description - - -def get_active_homework_students(theme): - result = [] - if theme.homework_exist(): - for i in HomeworkJ.objects.filter(homework=theme.get_homework(), status='T'): - result.append(i.student) - return result - - -def get_active_homework_students_length(theme): - if theme.homework_exist(): - return HomeworkJ.objects.filter(homework=self.get_homework(), status='T').count() - else: - return 0 - - -def get_actual_theme_lesson_id(theme, student): - # Получение читаемого урока - if student: - try: - if student.is_authenticated() and student.is_admin: - return Lesson.objects.get(theme=theme, sort='1').id - except: - pass - - status = theme.get_status(student) - if status == 'R': - if LessonJ.objects.filter(status='R', lesson__theme=theme, student=student).exists(): - return LessonJ.objects.filter(status='R', lesson__theme=theme, student=student).first().lesson.id - else: - if theme.homework_status(student) in ['R', 'E', 'T', 'A']: - return Lesson.objects.filter(theme=theme).order_by('sort').last().id - else: - return Lesson.objects.filter(theme=theme, free=True).order_by('sort').first().id - - elif status == 'F': - return Lesson.objects.filter(theme=theme).order_by('sort').first().id - - else: - if Lesson.objects.filter(theme=theme, free=True).exists(): - return Lesson.objects.filter(theme=theme, free=True).order_by('sort').first().id - else: - return False - - -def get_one_lesson_id(theme): - if theme.lessons_length() == 1: - return Lesson.objects.filter(course=theme.course, theme=theme).first().id - else: - return '0' - - -def homework_status_html(theme, student): - status = theme.homework_status(student) - data = u'{1}' - if status == 'B': - return data.format(u'primary', u'Пока недоступно') - elif status == 'A': - return data.format(u'warning', u'Достуно для выполнения') - elif status == 'T': - return data.format(u'info', u'Проверяется преподавателем') - elif status == 'E': - return data.format(u'danger', u'Требуется доработка') - elif status == 'F': - return data.format(u'success', u'Сдано') - - -def homework_status(theme, student): - if Homework.objects.filter(theme=theme).exists(): - try: - homework = HomeworkJ.objects.get(student=student, homework=Homework.objects.get(theme=theme)) - except HomeworkJ.DoesNotExist: - return 'B' - else: - return homework.status - else: - return 'B' - - -def check_theme_finish(theme, student): - # Проверка, прошел ли пользователь тему по урокам - if LessonJ.objects.filter(student=student, status='F', lesson__theme=theme).count() == theme.lessons_length(): - return True - else: - return False - - -def check_study_access(theme, student): - if LessonJ.objects.filter(Q(student=student, status='R', lesson__theme=theme) | Q(student=student, status='F', - lesson__theme=theme)).exists(): - return True - else: - return False - - -def get_status(theme, student): - # 1) Читаемая тема - # 2) ДЗ на прохождении - # 3) Укомплектовано - if student: - if LessonJ.objects.filter(student=student, lesson__in=Lesson.objects.filter(theme=theme), - status='R').exists(): - return 'R' - - elif Lesson.objects.filter(free=True, theme=theme).exists() \ - and not LessonJ.objects.filter(student=student, lesson__in=Lesson.objects.filter(theme=theme, - free=True)): - return 'R' - - elif theme.homework_status(student) != 'B': - h_status = theme.homework_status(student) - if h_status == 'F': - return 'F' - - else: - return 'R' - - elif LessonJ.objects.filter(student=student, lesson__theme=theme, - status='F').count() == Lesson.objects.filter(theme=theme).count(): - return 'F' - - else: - return 'N' - else: - if theme.sort == 1 and Lesson.objects.filter(free=True, theme=theme).exists(): - return 'R' - else: - return 'N' - - -def get_theme_color(theme, student): - # Получить тип - # Если тип премиум или пополнение - status = theme.get_status(student) - if status == 'F': - return 'b-success' - elif status == 'N': - return 'b-default' - else: - return 'b-info' - - -def get_theme_skills(__theme): - result = [] - for i in SkillJ.objects.filter(lesson__in=__theme.get_lessons()): - if i.skill not in result: - result.append(i.skill) - return result - - -def have_skills(self): - return SkillJ.objects.filter(lesson__in=self.get_lessons()).exists() - - -### Методы над уроком -def get_lesson_description(lesson, student): - # 1 - id - # 2 - course_id - # 3 - title - # 4 - status - # 5 - free - button = u'
  • ' \ - u'{2} ' \ - u'{3} ' \ - u'{4}' \ - u'
  • ' - # 0 - title - # 1 - status - # 2 - free - button2 = u'
  • ' \ - u'{0} ' \ - u'{1} ' \ - u'{2}' \ - u'
  • ' - - if student and student.is_authenticated() and student.is_admin: - return button.format(lesson.id, lesson.course.id, - u'ID: %s %s' % (lesson.id, lesson.title) if student.is_admin else lesson.title, - '', '') - - elif lesson.get_status(student) != 'N': - return button.format(lesson.id, lesson.course.id, lesson.title, lesson.get_status_html(student), '') - - else: - if lesson.sort == 1 and lesson.free: - return button.format(lesson.id, lesson.course.id, lesson.title, '', - '') - else: - return button2.format(lesson.title, lesson.get_status_html(student), '') - - # if lesson.get_status(student) != 'N': - # return button.format(lesson.id, lesson.course.id, lesson.title, lesson.get_status_html(student), - # u'Бесплатный урок' if lesson.free else '') - - # else: - # if lesson.sort == 1 and lesson.free: - # return button.format(lesson.id, lesson.course.id, lesson.title, - # '', - # u'Бесплатный урок' if lesson.free else '') - # else: - # return button2.format(lesson.title, lesson.get_status_html(student), - # u'Бесплатный урок' if lesson.free else '') - - -def get_no_saw_lessons_length(lesson): - return lesson.comments.filter(saw=False).count() - - -def get_status_html(lesson, student): - status = lesson.get_status(student) - if status == 'N': - return u'' - elif status == 'F': - return u'' - elif status == 'R': - return u'' - - -def get_lesson_skills(lesson): - return SkillJ.objects.filter(lesson=lesson) - - -def get_comments_length(lesson): - return lesson.comments.filter(public=True).count() - - -def get_lesson_status(lesson, student): - try: - return LessonJ.objects.get(student=student, lesson=lesson).status - except LessonJ.DoesNotExist: - return 'N' - - -def get_status_name(lesson, student): - try: - return LessonJ.objects.get(student=student, lesson=lesson).get_status_display() - except LessonJ.DoesNotExist: - return u'Не доступно' - - -### Методы над ДЗ -def get_homework_status(__homework, student): - try: - homework = HomeworkJ.objects.get(student=student, homework=__homework) - except HomeworkJ.DoesNotExist: - return 'B' - else: - return homework.status - - -### Методы экзамена - -def get_exam_color(exam, student): - # Получить тип - # Если тип премиум или пополнение - status = exam.get_status(student) - if status == 'P': - return 'b-info' - elif status == 'T': - return 'b-primary' - elif status == 'F': - return 'b-success' - elif status == 'E': - return 'b-danger' - else: - return 'b-default' - diff --git a/courses/urls.py b/courses/urls.py old mode 100755 new mode 100644 index 3ebcb83..d9784ee --- a/courses/urls.py +++ b/courses/urls.py @@ -1,45 +1,10 @@ -from courses import views, api -from django.conf.urls import url - -urlpatterns = [ - url(r'^([0-9]{1,99})$', views.course), - url(r'^([0-9]{1,99})#\s+$', views.course), - url(r'lesson/([0-9]{1,99})$', views.lesson), - url(r'homework/([0-9]{1,99})$', views.homework), - url(r'exam/([0-9]{1,99})$', views.exam), - url(r'read_lesson/$', api.read_lesson), - url(r'load_lesson_comments$', api.load_lesson_comments), - url(r'load_homework_comments_for_teacher$', api.load_homework_comments_for_teacher), - url(r'load_exam_comments_for_teacher$', api.load_exam_comments_for_teacher), - url(r'load_homework_comments$', api.load_homework_comments), - url(r'load_exam_comments$', api.load_exam_comments), - url(r'get_achievement$', api.get_achievement), - url(r'close_achievement$', api.close_achievement), - url(r'delete_comment$', api.delete_comment), - url(r'sent_lesson_comment$', api.sent_lesson_comment), - url(r'get_homework_comments_length_for_teacher$', api.get_homework_comments_length_for_teacher), - url(r'get_exam_comments_length_for_teacher$', api.get_exam_comments_length_for_teacher), - url(r'get_homework_comments_length$', api.get_homework_comments_length), - url(r'get_exam_comments_length$', api.get_exam_comments_length), - url(r'sent_homework_comment$', api.sent_homework_comment), - url(r'sent_exam_comment$', api.sent_exam_comment), - url(r'get_lesson_comments_length$', api.get_lesson_comments_length), - url(r'get_lesson_context/$', api.get_lesson_context), - url(r'send_accept_teach_comment$', api.send_accept_teach_comment), - url(r'send_cancel_teach_comment', api.send_cancel_teach_comment), - url(r'send_exam_accept_teach_comment$', api.send_exam_accept_teach_comment), - url(r'send_exam_cancel_teach_comment', api.send_exam_cancel_teach_comment), - url(r'get_next_button/$', api.get_next_button_ajax), - url(r'by_course_data/$', api.by_course_data), - url(r'get_homework_context/$', api.get_homework_context), - url(r'load_comment/$', api.load_comment), - url(r'sent_homework_up_teacher$', api.sent_homework_up_teacher), - url(r'sent_homework_down_teacher$', api.sent_homework_down_teacher), - url(r'sent_exam_up_teacher$', api.sent_exam_up_teacher), - url(r'sent_exam_down_teacher$', api.sent_exam_down_teacher), - url(r'get_process_vector$', api.get_process_vector), - url(r'get_comment_text/$', api.get_comment_text), - url(r'sent_comment_response/$', api.sent_comment_response), - url(r'achievements/$', views.achievements), - url(r'^(?P.*)$', views.course), -] +from django.conf.urls import url +from courses import views as views + +urlpatterns = [ + url(r'detail/([0-9]{1,99})/$', views.CourseDetailView.as_view()), + url(r'vertex/([0-9]{1,99})/$', views.VertexDetail.as_view()), + url(r'tree/(?P[-\w]+)/$', views.TreeView.as_view()), + url(r'directions/$', views.DirectionListView.as_view()), + url(r'^$', views.CourseListView.as_view()), +] \ No newline at end of file diff --git a/courses/views.py b/courses/views.py old mode 100755 new mode 100644 index c43500d..3449812 --- a/courses/views.py +++ b/courses/views.py @@ -1,211 +1,114 @@ -# coding=utf-8 -import datetime -from django.http import Http404 - -from finance.models import Bill -from lms.decors import response_decor -from lms.tools import user_fabric -from courses.models import Course, Lesson, Homework, Exam, MaterialDirection, Achievements, Skills, SkillJ, CourseMap -from journals.models import LessonJ, TeacherJ, HomeworkJ, check_journal, ExamJ, AchievementJ -from finance.tools import system_check_bill - - -@response_decor(template='course.html', without_auth=True) -def course(request, slug): - # Страница курса - user = user_fabric(request.user) - if not slug: return {'redirect': '/'} - try: - course = Course.objects.get(slug=slug) - except Course.DoesNotExist: - try: - course = Course.objects.get(id=slug) - except ValueError: - raise Http404 - except Course.DoesNotExist: - raise Http404 - else: - return {'redirect': course.get_absolute_url()} - except Course.DoesNotExist: - raise Http404 - - if not course.public and not (request.user.is_authenticated() and request.user.is_admin): - raise Http404 - - if course.hidden: - if not request.user.is_authenticated(): - raise Http404 - else: - if not request.user.is_admin: - try: - Bill.objects.get(service__course=course, user=request.user, status='F') - except Bill.DoesNotExist: - raise Http404 - journal, created = TeacherJ.objects.get_or_create(course=course, student=user_fabric(request.user)) - if created: - check_journal(journal) - _map = CourseMap.objects.filter(course=course).order_by('sort').first() - _j = _map.get_obj() - if _map._type == 'H': - j, _created = HomeworkJ.objects.get_or_create(material=_j, student=request.user) - if _map._type == 'L': - j, _created = LessonJ.objects.get_or_create(material=_j, student=request.user) - j.open_material() - else: - journal, created = TeacherJ.objects.get_or_create(course=course, student=user_fabric(request.user)) - - if user and not journal.start_date: - journal.start_date = datetime.datetime.now() - journal.save() - - flow = None - start_flow = None - if request.user.is_authenticated() and not request.user.is_admin: - try: - bills = Bill.objects.filter( - service__course=course, user=request.user, status='F') - for bill in bills: - if bill.flow: - flow = bill.flow.get_status() - start_flow = bill.flow.start_flow - except Bill.DoesNotExist: - pass - - return { - 'course': journal.get_face(user_fabric(request.user)), - 'user': user_fabric(request.user), - 'flow': flow, - 'start_flow': start_flow, - } - - -@response_decor(template='lesson.html') -def lesson(request, lesson): - # Открытие окна урока - # TODO: Проверить все ссылки на ID Lesson - try: - lesson = Lesson.objects.get(id=lesson) - lj = LessonJ.objects.get(material=lesson, student=request.user) - except Lesson.DoesNotExist: - raise Http404 - except LessonJ.DoesNotExist: - j, c = TeacherJ.objects.get_or_create(student=request.user, course=lesson.course) - check_journal(j) - lj = LessonJ.objects.get(material=lesson, student=request.user) - - if request.user.is_authenticated() and request.user.is_admin or request.user in lesson.course.teachers.all(): - return {'lesson': lj.get_face(user_fabric(request.user)), - 'course': {'head': lj.parent.parent.get_head_face(), - 'level': lj.parent.parent.course.get_level(), - 'journal': lj.parent.parent.get_face(user_fabric(request.user))}, - 'bought': True, 'accept': True} - - if not lesson.free and not system_check_bill(lesson.token, request.user, theme_type=lesson.theme._type): - return {'redirect': '/access/by_error/'} - else: - if lj.get_status_flag() == 'N' and not lj.parent.parent.waiting.filter(token=lj.material.token).exists(): - return {'redirect': '/access/auth_error/'} - else: - result = False - if lj.get_status_flag() != 'N': - result = True - elif lj.parent.parent.waiting.filter(token=lj.material.token).exists(): - result = True - lj.date = datetime.datetime.now() - lj.save() - if result: - return {'lesson': lj.get_face(user_fabric(request.user)), 'course': {'head': lj.parent.parent.get_head_face(), 'level': lj.parent.parent.course.get_level(), 'journal': lj.parent.parent.get_face(user_fabric(request.user))}, 'bought': True, 'accept': True} - - -@response_decor(template='homework.html') -def homework(request, homework): - # Страница ДЗ - # TODO: Проверить везде ссылки с ID ДЗ - try: - hj = HomeworkJ.objects.get(material=Homework.objects.get(id=homework), student=request.user) - except Homework.DoesNotExist: - raise Http404 - except HomeworkJ.DoesNotExist: - j, c = TeacherJ.objects.get_or_create(student=request.user, course=Homework.objects.get(id=homework).course) - check_journal(j) - hj = HomeworkJ.objects.get(material=Homework.objects.get(id=homework), student=request.user) - - if request.user.is_authenticated() and request.user.is_admin: - return {'homework': hj.get_face(user_fabric(request.user)), - 'course': {'head': hj.parent.parent.get_head_face(), - 'level': hj.parent.parent.course.get_level(), - 'journal': hj.parent.parent.get_face(user_fabric(request.user))} - } - - if not system_check_bill(hj.material.token, request.user, theme_type=hj.material.theme._type): - return {'redirect': '/access/by_error/'} - else: - if hj.get_status_flag() == 'N' and not hj.parent.parent.waiting.filter(token=hj.material.token).exists(): - return {'redirect': '/access/auth_error/'} - else: - result = False - if hj.get_status_flag() != 'N': - result = True - elif hj.parent.parent.waiting.filter(token=hj.material.token).exists(): - hj.date = datetime.datetime.now() - hj.save() - result = True - - if result: - return {'homework': hj.get_face(user_fabric(request.user)), - 'course': {'head': hj.parent.parent.get_head_face(), - 'level': hj.parent.parent.course.get_level(), 'journal': hj.parent.parent.get_face(user_fabric(request.user))},} - - -@response_decor(template='exam.html') -def exam(request, exam): - # Страница экзамена - # TODO: проверить, чтобы это было ID экзамена - try: - exam = ExamJ.objects.get(material=Exam.objects.get(id=exam), student=request.user) - except Exam.DoesNotExist: - raise Http404 - except ExamJ.DoesNotExist: - j, c = TeacherJ.objects.get_or_create(student=request.user, course=Exam.objects.get(id=exam).course) - check_journal(j) - exam = ExamJ.objects.get(material=Exam.objects.get(id=exam), student=request.user) - - if request.user.is_authenticated() and request.user.is_admin: - return {'exam': exam.get_face(user_fabric(request.user)), - 'course': {'head': exam.parent.parent.get_head_face(), 'level': exam.parent.parent.course.get_level()} - } - - if not system_check_bill(exam.material.token, request.user): - return {'redirect': '/access/by_error/'} - else: - if exam.get_status_flag() == 'N' and not exam.parent.parent.waiting.filter(token=exam.material.token).exists(): - return {'redirect': '/access/auth_error/'} - else: - result = False - if exam.get_status_flag() != 'N': - result = True - elif exam.parent.parent.waiting.filter(token=exam.material.token).exists(): - result = True - exam.date = datetime.datetime.now() - exam.save() - - if result: - return {'exam': exam.get_face(user_fabric(request.user)), 'course': {'head': exam.parent.parent.get_head_face(), 'level': exam.parent.parent.course.get_level()}} - - -@response_decor(template='all_achievements.html', without_auth=True) -def achievements(request): - # Список ачивок и статус получения - skills = {} - for course in Course.objects.all().order_by('sort'): - skills[(course.id, course.title)] = {} - for skillj in SkillJ.objects.filter(lesson__course=course): - if not skills[(course.id, course.title)].get(skillj.skill.title): - skills[(course.id, course.title)][skillj.skill.title] = { - 'size': 0, - 'icon': skillj.skill.mini_icon, - 'color': skillj.skill.color - } - skills[(course.id, course.title)][skillj.skill.title]['size'] += skillj.size - - return {'achievements': Achievements.objects.all(), 'skills': skills} +from rest_framework.views import APIView +from rest_framework.renderers import JSONRenderer +from rest_framework.response import Response + +from access.serializers import ExtraPrivilegeSerializer +from courses.models import Course, MaterialDirection, Vertex +from access.models import ActiveObject, ExtraPrivilege +from courses.serializers import CourseDetailSerializer, CourseListSerializer, VertexSerializer, CourseTreeSerializer +from finance.models import Bill + + +class DirectionListView(APIView): + renderer_classes = (JSONRenderer,) + status_code = 200 + + def get(self, _request): + return Response([direction.title for direction in MaterialDirection.objects.all()], self.status_code) + + +class TreeView(APIView): + renderer_classes = (JSONRenderer,) + status_code = 200 + + @staticmethod + def post(request): + print(request) + return Response(status=204) + + def get(self, request, slug): + try: + course = Course.objects.get(slug=slug) + except Course.DoesNotExist: + return Response("Course doesn't exist", status=404) + + res = CourseTreeSerializer(course).data + try: + res['active_id'] = ActiveObject.objects.get(course=course, user=request.user).active_obj.id + except ActiveObject.DoesNotExist: + res['active_id'] = False + + res['extra_privilege'] = [ + ExtraPrivilegeSerializer(i).data for i in ExtraPrivilege.objects.filter( + user=request.user, + subject__course=course, + ) + ] + return Response(res, self.status_code) + + +class CourseDetailView(APIView): + renderer_classes = (JSONRenderer,) + status_code = 200 + + def get(self, request, pk): + if not request.user.is_authenticated() and request.user.in_role in ['A']: + return Response("Course detail access only for admin users", status=403) + + try: + return Response(CourseDetailSerializer(Course.objects.get(id=pk)).data, self.status_code) + except Course.DoesNotExist: + return Response("Course doesn't exist", status=404) + + +class CourseListView(APIView): + renderer_classes = (JSONRenderer,) + status_code = 200 + + def get(self, request): + if not request.user.is_authenticated() or (not request.user.is_staff or request.GET.get('staff') == 'true'): + return Response([CourseListSerializer(i).data for i in Course.objects.all()], self.status_code) + + res = [] + for course in Course.objects.all(): + if course.public: + course_serialize = CourseListSerializer(course).data + course_serialize['is_mine'] = False + if request.user.is_authenticated() and Bill.objects.filter(service__course=course, user=request.user, status='F').exists(): + course_serialize['is_mine'] = True + res.append(course_serialize) + + return Response(res, self.status_code) + + +class VertexDetail(APIView): + renderer_classes = (JSONRenderer,) + + @staticmethod + def get(request, pk): + status = int(request.GET.get('status', '200')) + + try: + vertex = Vertex.objects.get(id=pk) + except Vertex.DoesNotExist: + return Response("Vertex doesn't exist", status=404) + + res_a = Response(VertexSerializer(vertex).data, status=200) if status == 200 else Response(status=204) + + if vertex.free: + return res_a + + if not request.user.is_authenticated: + return Response("Access to detail of vertex, exist only for authenticated users", status=403) + + if ExtraPrivilege.objects.filter(user=request.user, subject=vertex).exists(): + return res_a + + try: + if not ActiveObject.objects.get(course=vertex.course, user=request.user).is_access(vertex): + return Response("permission denied", status=403) + + except ActiveObject.DoesNotExist: + return Response("permission denied", status=403) + + return res_a diff --git a/fabfile.py b/fabfile.py deleted file mode 100644 index 2daf56a..0000000 --- a/fabfile.py +++ /dev/null @@ -1,341 +0,0 @@ -import os -import sys -from functools import wraps -from getpass import getpass, getuser -from glob import glob -from contextlib import contextmanager - -from fabric.api import env, cd, prefix, sudo as _sudo, run as _run, hide, local, put -from fabric.contrib.files import exists, upload_template -from fabric.colors import yellow, green, blue, red - -########### -# Config # -########### - -config = { - 'server_name' : 'go.skillbox.ru', - 'hosts' : ['lms.skillbox.ru'], - 'key_path' : '~/.ssh/hev7.pub', - 'user' : 'root', - 'password' : 'nu5Xefise', - 'project_name' : 'skillbox', - 'db_password' : 'super3360', - 'manage_py_path' : '', - 'settings_path' : 'skillbox', - 'repository_type' : 'git', - 'repository_url' : 'git@gitlab.com:skillbox/go.skillbox.ru.git', - 'aws_key' : '', - 'aws_secret' : '' -} - -env.server_name = config['server_name'] -env.key_filename = config['key_path'] -env.hosts = config['hosts'] -env.user = config['user'] -env.project_name = config['project_name'] -env.db_name = env.project_name.lower() -env.db_password = config['db_password'] -env.project_path = '/var/www/%s' % env.project_name -#env.application_path = '/var/www/%s/%s' % (env.project_name, config['manage_py_path']) -env.application_path = '/var/www/%s' % env.project_name -env.virtualenv_path = '%s/env/bin/activate' % env.project_path -env.repository_type = config['repository_type'] -env.repository_url = config['repository_url'] -env.manage = "%s/env/bin/python %s/manage.py" % (env.project_path, env.application_path) -env.settings_path = env.application_path if not len(config['settings_path']) else '%s/%s' % (env.application_path, config['settings_path']) -env.aws_key = config['aws_key'] -env.aws_secret = config['aws_secret'] - -templates = { - 'django_settings' : { - 'local_path' : 'conf/live_settings.py', - 'remote_path' : '%s/local_settings.py' % env.settings_path - }, - 'uwsgi' : { - 'local_path' : 'conf/uwsgi_prod.ini', - 'remote_path' : '%s/uwsgi_prod.ini' %env.project_path - }, - 'nginx' : { - 'local_path' : 'conf/nginx.conf', - 'remote_path' : '/etc/nginx/sites-enabled/%s.conf' % env.project_name, - 'reload_command' : '/etc/init.d/nginx restart' - }, - "supervisor": { - "local_path": "conf/supervisor.conf", - "remote_path": "/etc/supervisor/conf.d/%s.conf" % env.project_name, - "reload_command": "supervisorctl reload", - } -} - -def _print(output): - print - print '%s' % output - print - -def print_command(command): - _print(blue("$ ", bold=True) + - yellow(command, bold=True) + - red(" ->", bold=True)) - -def run(command, show=True): - """ - Run a shell comand on the remote server. - """ - if show: - print_command(command) - with hide("running"): - return _run(command) - -def sudo(command, show=True): - """ - Run a command as sudo. - """ - if show: - print_command(command) - with hide("running"): - return _sudo(command) - -def psql(sql, show=True): - """ - Executes a psql command - """ - out = run('sudo -u postgres psql -c "%s"' % sql) - if show: - print_command(sql) - return out - -def pip(modules): - """ - Install the Python modules passed as arguments with pip - """ - with virtualenv(): - run('pip install %s' % modules) - -def log_call(func): - @wraps(func) - def logged(*args, **kawrgs): - header = "-" * len(func.__name__) - _print(green("\n".join([header, func.__name__, header]), bold=True)) - return func(*args, **kawrgs) - return logged - -@contextmanager -def virtualenv(): - """ - Run commands within the project's virtualenv. - """ - with cd('%s/env/bin/' % env.project_path): - with prefix("source %s/env/bin/activate" % env.project_path): - yield - - -@contextmanager -def project(): - """ - Run commands within the project's directory. - """ - with virtualenv(): - with cd(env.application_path): - yield - -def manage(command): - """ - Run a Django management command. - """ - return run("%s %s" % (env.manage, command)) - -@log_call -def generate_ssh_key(): - """ - Generates a key pair and displays the public key - """ - run('ssh-keygen -t rsa') - run('cat ~/.ssh/id_rsa.pub') - -@log_call -def install_aptitude(): - sudo('apt-get install aptitude -y') - -@log_call -def upgrade(): - """ - Updates the repository definitions and upgrades the server - """ - sudo('aptitude update -y') - sudo('aptitude upgrade -y') - -def upload_template_and_reload(name): - template_settings = templates[name] - local_path = template_settings['local_path'] - remote_path = template_settings['remote_path'] - reload_command = template_settings.get('reload_command') - owner = template_settings.get("owner") - mode = template_settings.get("mode") - - print '%s to %s' % (local_path, remote_path) - - upload_template(local_path, remote_path, env, use_sudo=False, backup=False) - - if owner: - sudo("chown %s %s" % (owner, remote_path)) - if mode: - sudo("chmod %s %s" % (mode, remote_path)) - - if reload_command: - sudo(reload_command) - - -@log_call -def install_base(): - """ - Installs the base software required to deploy an application - """ - install_aptitude() - sudo( - "aptitude install gcc make git-core nginx postgresql memcached python-dev\ - python-setuptools supervisor postgresql-server-dev-all libxml2-dev\ - libxslt-dev -y"# redis-server rabbitmq-server -y" - ) - - #run('wget http://www.ijg.org/files/jpegsrc.v8d.tar.gz') - #run('tar xvzf jpegsrc.v8d.tar.gz') - #with cd('jpeg-8d'): - # run('./configure') - # run('make') - # sudo('make install') - - #run('wget http://download.savannah.gnu.org/releases/freetype/freetype-2.4.10.tar.gz') - #run('tar xvzf freetype-2.4.10.tar.gz') - #with cd('freetype-2.4.10'): - # run('./configure') - # run('make') - # sudo('make install') - - #run('wget http://zlib.net/zlib-1.2.8.tar.gz') - #run('tar xvzf zlib-1.2.8.tar.gz') - #with cd('zlib-1.2.8'): - # run('./configure') - # run('make') - # sudo('make install') - - sudo('easy_install pip') - sudo('pip install virtualenv mercurial uwsgi') - - run('echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config') - run('echo -e "Host bitbucket.org\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config') - - #sudo('rabbitmqctl add_user %s %s' % (env.project_name, env.db_name)) - #sudo('rabbitmqctl add_vhost %s' % env.project_name) - #sudo( - # 'rabbitmqctl set_permissions -p %s %s ".*" ".*" ".*"' % - # (env.project_name, env.project_name) - #) - -@log_call -def _create_database(name, password): - psql("CREATE USER %s WITH ENCRYPTED PASSWORD '%s';" % (name, password)) - psql("ALTER USER %s CREATEDB;" % name) - psql("CREATE DATABASE %s WITH OWNER %s ENCODING='UTF8';" % (env.project_name, env.project_name)) - -@log_call -def create_database(): - """ - Creates a database and a database user with the project name and the specified password - """ - _create_database(env.db_name, env.db_password) - -@log_call -def fetch(): - with cd(env.project_path): - run( - '%s pull %s' % ( - env.repository_type, - '-u' if env.repository_type == 'hg' else '' - ) - ) - - with virtualenv(): - #manage('migrate --run-syncdb --noinput') - #manage('migrate') - #manage("migrate --noinput") - manage("collectstatic -v 0 --noinput") - #upload_template_and_reload('django_settings') - #upload_template_and_reload('gunicorn') - upload_template_and_reload('uwsgi') - upload_template_and_reload('nginx') - upload_template_and_reload('supervisor') - -@log_call -def create(): - """ - Stages the application on the server - """ - sudo('supervisorctl stop all') - sudo('rm -r -f %s' % env.project_path) - with cd('/var'): - run('mkdir -p www') - with cd('/var/www'): - run('%s clone %s %s' %(env.repository_type, env.repository_url, env.project_path)) - sudo('ln -s /var/www/media %s' % env.project_path) - - with cd(env.project_path): - run("virtualenv -p python3 env --distribute") - with virtualenv(): - run('pip install -r %s/requirements.txt' % env.project_path) - - sudo('chown -R www-data /var/www/') - #pip('python-memcached') - - #upload_template_and_reload('django_settings') - #upload_template_and_reload('gunicorn') - upload_template_and_reload('uwsgi') - upload_template_and_reload('nginx') - upload_template_and_reload('supervisor') - - with virtualenv(): - #manage('migrate --run-syncdb --noinput') - #manage('migrate --list') - #manage("migrate --noinput") - manage("collectstatic -l --noinput") - - #if exists('%sgunicorn.pid'): - # sudo("kill -HUP 'cat %sgunicorn.pid'" % env.project_path) - #else: - # sudo("supervisorctl start %s:gunicorn" % env.project_name) - -@log_call -def install_all(): - install_aptitude() - upgrade() - install_base() - create_database() - create() - -@log_call -def create_superuser(): - with virtualenv(): - manage('createsuperuser') - -def send_key(): - put('~/.ssh/id_rsa', '~/.ssh/id_rsa') - put('~/.ssh/id_rsa.pub', '~/.ssh/id_rsa.pub') - run('chmod 600 ~/.ssh/id_rsa') - run('chmod 600 ~/.ssh/id_rsa.pub') - -""" -def vagrant(): - # change from the default user to 'vagrant' - env.user = 'vagrant' - env.password = 'vagrant' - env.project_path = '/vagrant' - env.application_path = '/vagrant' - env.virtualenv_path = '%s/env/bin/activate' % env.project_path - env.manage = "%s/env/bin/python %s/manage.py" % (env.project_path, env.application_path) - # connect to the port-forwarded ssh - env.hosts = ['127.0.0.1:2222'] - - # use vagrant ssh key - result = local('vagrant ssh-config | grep IdentityFile', capture=True) - env.key_filename = result.split()[1][1:-1] -""" diff --git a/finance/.idea/encodings.xml b/finance/.idea/encodings.xml deleted file mode 100755 index ab2dc53..0000000 --- a/finance/.idea/encodings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/finance/.idea/finance.iml b/finance/.idea/finance.iml deleted file mode 100755 index 9c88284..0000000 --- a/finance/.idea/finance.iml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/finance/.idea/misc.xml b/finance/.idea/misc.xml deleted file mode 100755 index fe91cd6..0000000 --- a/finance/.idea/misc.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/finance/.idea/modules.xml b/finance/.idea/modules.xml deleted file mode 100755 index 7c9f5d2..0000000 --- a/finance/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/finance/.idea/workspace.xml b/finance/.idea/workspace.xml deleted file mode 100755 index 2cf9b92..0000000 --- a/finance/.idea/workspace.xml +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - DEFINITION_ORDER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1467006819610 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/finance/admin.py b/finance/admin.py index aa91cfc..1af0b47 100755 --- a/finance/admin.py +++ b/finance/admin.py @@ -1,127 +1,7 @@ # coding=utf-8 from django.contrib import admin -from django.http import HttpResponse -from access.models import User -from finance.models import Bill, ServiceRequest, Price, Installment, \ - YandexKassaHistory, RequestAlert +from finance.models import Bill, Price -from import_export.admin import ImportExportModelAdmin - -from lms.tools import out_date_format - - -def export_bills(modeladmin, request, queryset): - import xlwt - response = HttpResponse(content_type='application/ms-excel') - response['Content-Disposition'] = 'attachment; filename=report.xls' - wb = xlwt.Workbook(encoding='utf-8') - ws = wb.add_sheet("MyModel") - - row_num = 0 - - columns = [ - (u"№", 3000), - (u"Дата платежа", 6000), - (u"Продукт", 8000), - (u'ФИО', 6000), - (u'Сумма', 8000), - (u'Сумма минус комиссия', 1000), - (u"Комиссия", 4000), - (u"№ Транзакции", 1000), - (u'ID в системе', 1000), - (u'Email', 3000), - (u"Телефон", 3000) - ] - - font_style = xlwt.XFStyle() - font_style.font.bold = True - - for col_num in range(len(columns)): - ws.write(row_num, col_num, columns[col_num][0], font_style) - ws.col(col_num).width = columns[col_num][1] - - font_style = xlwt.XFStyle() - font_style.alignment.wrap = 1 - - for obj in queryset: - row_num += 1 - row = [ - row_num, - out_date_format(obj.status_changed), - obj.service.get_name() if obj.service else '-', - obj.user.get_name(), - obj.price, - obj.real_price if obj.user.phone else '-', - str(float(obj.price) - float(obj.real_price)) if obj.real_price else '-', - obj.out_id if obj.out_id else '-', - obj.id, - obj.user.email, - obj.user.phone if obj.user.phone else '-' - ] - for col_num in range(len(row)): - ws.write(row_num, col_num, row[col_num], font_style) - - wb.save(response) - return response - - -export_bills.short_description = u"Отчет по поступлениям" - - -class BillAdmin(ImportExportModelAdmin): - list_display = ( - 'user', 'status', 'manager', 'opener', 'flow', - '_method', 'service', 'price', 'real_price', - 'date', 'status_changed', 'traf_source', 'gen_pay_link') - raw_id_fields = ['user', 'flow'] - search_fields = ['user__email', 'user__fname', 'user__name', 'id'] - list_filter = ['date', 'status_changed', 'status', 'flow', - 'user__in_role', '_method', 'created_sent', 'service', 'date'] - actions = [export_bills] - - def formfield_for_foreignkey(self, db_field, request=None, **kwargs): - if db_field.name == "opener": - kwargs["queryset"] = User.objects.filter(is_admin=True) - return super(BillAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) - -admin.site.register(Bill, BillAdmin) - - -class ServiceRequestAdmin(admin.ModelAdmin): - list_display = ('get_lead_name', 'get_client_name', 'date', 'send', 'send_date', 'host', ) - list_filter = ('send', 'company', 'service', 'host', 'send_date', ) - search_fields = ['lead_name', 'email', 'phone', 'name', 'host'] - -admin.site.register(ServiceRequest, ServiceRequestAdmin) - - -class PriceAdmin(admin.ModelAdmin): - list_display = ('title', 'course', 'cost', 'public', 'key', 'freepay', ) - filter_horizontal = ['included'] - list_filter = ['freepay', 'course',] - -admin.site.register(Price, PriceAdmin) - - -class InstallmentAdmin(admin.ModelAdmin): - list_display = ('user', 'price', 'first_price', 'period', 'date', 'f_date', 'rest', 'wait', 'expired') - list_filter = ['expired'] - raw_id_fields = ['user'] - search_fields = ['user__email', 'user__fname', 'user__name', 'price', 'first_price'] - -admin.site.register(Installment, InstallmentAdmin) - - -class RequestAlertAdmin(admin.ModelAdmin): - list_display = ('title', 'get_mails_str', '_count', 'date', 'f_date', ) - list_filter = ['title', 'date', 'f_date'] - search_fields = ('mails', 'title', ) - -admin.site.register(RequestAlert, RequestAlertAdmin) - - -class YandexKassaHistoryAdmin(admin.ModelAdmin): - list_display = ('date', '_type', 'result', ) - -admin.site.register(YandexKassaHistory, YandexKassaHistoryAdmin) +admin.site.register(Bill) +admin.site.register(Price) \ No newline at end of file diff --git a/finance/amo.py b/finance/amo.py deleted file mode 100644 index bac1a7b..0000000 --- a/finance/amo.py +++ /dev/null @@ -1,44 +0,0 @@ -import urllib - -import datetime - -from finance.models import ServiceRequest, RequestAlert -from lms.decors import out_api_decor - - -@out_api_decor(without_auth=True, method='POST', need_keys=['lead_name']) -def new_request(request, context): - date = datetime.datetime.now() - last = ServiceRequest.objects.filter(send=False).order_by('date').last() - if last and last.send_date: - if last.send_date > datetime.datetime.now(): - date = last.send_date + datetime.timedelta(minutes=1) - - s = ServiceRequest.objects.create( - lead_name=urllib.parse.unquote(request.POST['lead_name'], encoding='utf8').replace("+", " "), - send_date=date, - data=str({i: urllib.parse.unquote(n, encoding='utf8').replace("+", " ") for i, n in request.POST.items()}).replace('"', '') - ) - if request.META.get('HTTP_REFERER'): - s.host = request.META.get('HTTP_REFERER') - s.save() - - r, c = RequestAlert.objects.get_or_create(title=s.lead_name) - - if not c: - r.up_count(s) - - try: - if request.POST.get('name'): - s.name = urllib.parse.unquote(request.POST.get('name').replace("+", " "), encoding='utf8') - - if request.POST.get('phone'): - s.phone = urllib.parse.unquote(request.POST.get('phone'), encoding='utf8') - - if request.POST.get('email'): - s.email = urllib.parse.unquote(request.POST.get('email'), encoding='utf8') - - finally: - s.save() - - return context diff --git a/finance/api.py b/finance/api.py deleted file mode 100755 index 5eb1a11..0000000 --- a/finance/api.py +++ /dev/null @@ -1,242 +0,0 @@ -# coding=utf-8 -from django.db.models import Q -from django.http import Http404 -from access.models import User -from lms.decors import api_decor -from courses.models import Course, Exam, Lesson, Homework -from finance.models import ServiceRequest, Bill, Price -from finance.tools import system_check_bill -from lms.settings import DOMAIN - - -@api_decor(without_auth=False, need_keys=['id', 'type'], method='POST', check_request=True) -def check_materials_access(request, context): - if request.user.is_authenticated() and request.user.is_admin: - context['code'] = '1' - return context - - material = None - theme_type = 'B' - if request.POST['type'] == 'homework': - material = Homework.objects.get(id=request.POST['id']) - theme_type = material.theme.price_type - - elif request.POST['type'] == 'exam': - material = Exam.objects.get(id=request.POST['id']) - theme_type = material.theme.price_type - - elif request.POST['type'] == 'lesson': - material = Lesson.objects.get(id=request.POST['id']) - if material.free: - context['code'] = '1' - return context - theme_type = material.theme.price_type - - if material and system_check_bill(material.token, request.user, theme_type=theme_type): - context['code'] = '1' - else: - context['code'] = '0' - context['response'] = material.token - - return context - - -@api_decor(without_auth=True, method='POST', need_keys=['key'], check_request=True) -def send_self_bill(request, context): - context['code'] = '0' - if not request.POST.get('fname'): - context['response'] = u'Фамилия не указана' - return context - - if not request.POST.get('name'): - context['response'] = u'Имя не указано' - return context - - if not request.POST.get('oname'): - context['response'] = u'Очество не указано' - return context - - if not request.POST.get('phone'): - context['response'] = u'Телефон не указан' - return context - - if not request.POST.get('email'): - context['response'] = u'Электронный адрес не указан' - return context - - try: - price = Price.objects.get(key=request.POST['key']) - except Price.DoesNotExist: - raise Http404 - else: - context['code'] = '1' - user, c = User.objects.get_or_create(email=request.POST['email']) - if not user.phone: - user.phone = request.POST['phone'] - if not user.name: - user.name = request.POST['name'] - if not user.oname: - user.oname = request.POST['oname'] - if not user.fname: - user.fname = request.POST['fname'] - if c: - user.in_role = 'F' - user.save() - try: - bill = Bill.objects.get(service=price, price=price.cost, user=user) - except Bill.DoesNotExist: - bill = Bill.objects.create(service=price, price=price.cost, user=user, manager=User.objects.get(id=1325)) - context['data'] = bill.gen_robokassa_url() - else: - if bill.status == 'F': - context['code'] = '0' - context['response'] = u'Счет уже оплачен ID счета: %s' % bill.id - else: - context['data'] = bill.gen_robokassa_url() - - return context - - -@api_decor(without_auth=False, need_keys=['id'], method='GET', check_request=True) -def cancel_order(request, context): - try: - bill = Bill.objects.get(id=request.GET['id']) - except Bill.DoesNotExist: - pass - else: - bill.status = 'C' - bill.save() - return context - - -@api_decor(without_auth=False, need_keys=['id'], method='GET', check_request=True) -def sent_order(request, context): - try: - bill = Bill.objects.get(id=request.GET['id']) - except Bill.DoesNotExist: - context['data'] = DOMAIN - context['code'] = '0' - else: - if bill.status in ['F', 'H']: - context['code'] = '0' - context['response'] = u'Оплата счета не возможна' - else: - bill.status = 'P' - context['code'] = '1' - bill.save() - context['data'] = bill.get_face() - - return context - - -@api_decor(without_auth=False, need_keys=['id', 'status'], method='GET', check_request=True) -def change_service_request_status(request, context): - s = ServiceRequest.objects.get(id=request.GET['id']) - s.status = request.GET['status'] - s.manager = request.user - if request.GET.get('description'): - s.cancel_description = request.GET['description'] - s.save() - return context - - -@api_decor(without_auth=False, need_keys=['id'], method='GET', check_request=True) -def check_service_request(request, context): - s = ServiceRequest.objects.get(id=request.GET['id']) - if s.manager and s.manager != request.user: - context['code'] = '0' - else: - context['code'] = '1' - return context - - -@api_decor(without_auth=False, need_keys=['course', 'user'], method='GET', check_request=True) -def check_bill(request, context): - if Bill.objects.filter(service__course=Course.objects.get(id=request.GET['course']), - user=User.objects.get(id=request.GET['user']), status='F').exists(): - context['code'] = '1' - else: - context['code'] = '0' - return context - - -@api_decor(without_auth=False, need_keys=['type'], method='POST', check_request=True) -def create_service_request(request, context): - if request.POST.get('course'): - course = Course.objects.get(id=request.POST['course']) - if ServiceRequest.objects.filter( - Q(status='S', student=request.user, course=course) | Q(status='W', student=request.user, - course=course)).exists(): - context['code'] = '0' - context['response'] = u'Вы уже отправляли запрос на покупку этого курса. Запрос еще не обработан.' - - elif Bill.objects.filter(user=request.user, status='W', service__course=course).exists(): - context['code'] = '0' - context['response'] = u'Счет на покупку этого курса уже был выставлен.' - - else: - context['code'] = '1' - ServiceRequest.objects.create(student=request.user, course=course, _type=request.POST['type']) - context['data'] = {'course': course.title} - context['data']['phone'] = request.user.get_phone() - else: - context['code'] = '1' - ServiceRequest.objects.get_or_create(student=request.user, _type=request.POST['type']) - context['data'] = {'course': ''} - context['data']['phone'] = request.user.get_phone() - return context - - -@api_decor(without_auth=False, need_keys=['id'], method='POST', check_request=True) -def cancel_service_request(request, context): - bill = ServiceRequest.objects.get(id=request.POST['id']) - bill.status = 'B' - bill.save() - return context - - -@api_decor(without_auth=False, need_keys=['ID'], method='POST', check_request=True) -def remove_service_request(request, context): - try: - service_request = ServiceRequest.objects.get(id=request.POST['ID']) - except ServiceRequest.DoesNotExist: - context['code'] = '0' - context['response'] = u'Запрос не найден' - else: - if request.user.in_role in ['A', 'S', 'S2']: - service_request.delete() - context['code'] = '1' - else: - context['code'] = '0' - context['response'] = u'Не достаточно прав' - return context - - -@api_decor(without_auth=False, need_keys=['id'], method='GET', check_request=True) -def reply_bill(request, context): - try: - bill = Bill.objects.get(id=request.GET['id']) - except Bill.DoesNotExist: - context['code'] = '0' - else: - bill.status = 'W' - bill.save() - context['code'] = '1' - return context - - -@api_decor(without_auth=False) -def get_user_from_bill_id(request, context): - # Получение пользователя привязанного к счету - if request.user.in_role == 'S': - try: - bill = Bill.objects.get(id=request.GET['id']) - except Bill.DoesNotExist: - context['code'] = '0' - context['response'] = 'Счет с таким ID не найден' - else: - context['data'] = bill.get_face() - context['code'] = '1' - else: - raise Http404 - return context diff --git a/finance/migrations/0001_initial.py b/finance/migrations/0001_initial.py old mode 100755 new mode 100644 index 0ac3b5e..cce6eb6 --- a/finance/migrations/0001_initial.py +++ b/finance/migrations/0001_initial.py @@ -1,125 +1,68 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-03-18 16:46 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('courses', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Bill', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('status', models.CharField(choices=[(b'W', '\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u044f'), (b'P', '\u041d\u0430 \u043e\u043f\u043b\u0430\u0442\u0435'), (b'F', '\u041e\u043f\u043b\u0430\u0447\u0435\u043d'), (b'C', '\u041e\u0442\u043a\u043b\u043e\u043d\u0435\u043d')], default=b'W', max_length=1, verbose_name='\u0421\u0442\u0430\u0442\u0443\u0441')), - ('key', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041a\u043b\u044e\u0447')), - ('out_id', models.CharField(blank=True, default=b'', max_length=100, verbose_name='ID \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0437\u0430\u043a\u0430\u0437\u0430')), - ('date', models.DateTimeField(default=django.utils.timezone.now, verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0447\u0435\u0442\u0430')), - ('status_changed', models.DateTimeField(default=django.utils.timezone.now, verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043c\u0435\u043d\u044b \u0441\u0442\u0430\u0442\u0443\u0441\u0430')), - ('comment', models.TextField(blank=True, help_text='\u0411\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e', verbose_name='\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043f\u0440\u043e\u0434\u0430\u0432\u0446\u0430')), - ('finish_date', models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f')), - ('salt', models.CharField(blank=True, default=b'', max_length=100, verbose_name='\u0421\u043e\u043b\u044c')), - ('manager', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bill_manager', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u043e\u0434\u0430\u0432\u0435\u0446')), - ], - options={ - 'verbose_name': '\u0421\u0447\u0435\u0442', - 'verbose_name_plural': '\u0421\u0447\u0435\u0442\u0430', - }, - ), - migrations.CreateModel( - name='Price', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('m_type', models.CharField(choices=[(b'B', '\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b'), (b'E', '\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b'), (b'P', '\u041f\u0440\u0435\u043c\u0438\u0443\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b')], default=b'B', max_length=1, verbose_name='\u0422\u0438\u043f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438')), - ('public', models.BooleanField(default=False, verbose_name='\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c')), - ('title', models.CharField(default=b'', help_text='\u0411\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c', max_length=255, verbose_name='\u0423\u0441\u043b\u0443\u0433\u0430')), - ('cost', models.IntegerField(verbose_name='\u0426\u0435\u043d\u0430')), - ('description', models.TextField(help_text='\u0411\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430\u043c', verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435')), - ('course', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441')), - ], - options={ - 'verbose_name': '\u0423\u0441\u043b\u0443\u0433\u0430', - 'verbose_name_plural': '\u0423\u0441\u043b\u0443\u0433\u0438', - }, - ), - migrations.CreateModel( - name='SelfBillHistory', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('status', models.CharField(choices=[(b'O', '\u041e\u0436\u0438\u0434\u0430\u0435\u0442 \u043e\u043f\u043b\u0430\u0442\u044b'), (b'F', '\u041e\u043f\u043b\u0430\u0447\u0435\u043d'), (b'C', '\u041e\u0442\u043a\u043b\u043e\u043d\u0435\u043d')], default=b'O', max_length=1, verbose_name='\u0421\u0442\u0430\u0442\u0443\u0441')), - ('fio', models.CharField(max_length=255, verbose_name='\u0424\u0418\u041e')), - ('phone', models.CharField(blank=True, max_length=255, verbose_name='\u0422\u0435\u043b\u0435\u0444\u043e\u043d')), - ('email', models.CharField(blank=True, max_length=255, verbose_name='Email')), - ('s_date', models.DateTimeField(default=datetime.datetime.now, verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f')), - ('f_date', models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u043e\u043f\u043b\u0430\u0442\u044b')), - ('salt', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0421\u043e\u043b\u044c')), - ('out_id', models.CharField(blank=True, default=b'', max_length=100, verbose_name='ID \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0437\u0430\u043a\u0430\u0437\u0430')), - ('key', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041a\u043b\u044e\u0447')), - ('sent', models.BooleanField(default=False, editable=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e')), - ], - options={ - 'verbose_name': '\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043e\u043f\u043b\u0430\u0442\u044b \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430', - 'verbose_name_plural': '\u0418\u0441\u0442\u043e\u0440\u0438\u0438 \u043e\u043f\u043b\u0430\u0442\u044b \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0441\u0447\u0435\u0442\u043e\u0432', - }, - ), - migrations.CreateModel( - name='SelfBillRequest', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255, verbose_name='\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u043b\u0443\u0433\u0438')), - ('sum', models.IntegerField(verbose_name='\u0421\u0443\u043c\u043c\u0430')), - ('key', models.CharField(blank=True, max_length=255, null=True, unique=True, verbose_name='\u041a\u043b\u044e\u0447')), - ('url', models.URLField(blank=True, verbose_name='URL')), - ], - options={ - 'verbose_name': '\u0428\u0430\u0431\u043b\u043e\u043d \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430', - 'verbose_name_plural': '\u0428\u0430\u0431\u043b\u043e\u043d\u044b \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430', - }, - ), - migrations.CreateModel( - name='ServiceRequest', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('status', models.CharField(choices=[(b'S', '\u041d\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d'), (b'W', '\u0412 \u0440\u0430\u0431\u043e\u0442\u0435'), (b'F', '\u041f\u0440\u043e\u0434\u0430\u043d'), (b'B', '\u041d\u0435 \u043f\u0440\u043e\u0434\u0430\u043b')], default=b'S', max_length=1, verbose_name='\u0421\u0442\u0430\u0442\u0443\u0441')), - ('cancel_description', models.TextField(blank=True, default=b'', verbose_name='\u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u043e\u0442\u043a\u0430\u0437\u0430')), - ('charge', models.TextField(blank=True, default=b'', verbose_name='\u041f\u043e\u0440\u0443\u0447\u0435\u043d\u0438\u0435')), - ('date', models.DateTimeField(default=django.utils.timezone.now, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0430\u043a\u0430\u0437\u0430')), - ('f_date', models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0431\u0430\u0431\u043e\u0442\u043a\u0438')), - ('send', models.BooleanField(default=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e')), - ('course', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441')), - ('manager', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='manager_user', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u043e\u0434\u0430\u0432\u0435\u0446')), - ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='student_user', to=settings.AUTH_USER_MODEL, verbose_name='\u0421\u0442\u0443\u0434\u0435\u043d\u0442')), - ], - options={ - 'verbose_name': '\u0417\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u043e\u043a\u0443\u043f\u043a\u0443', - 'verbose_name_plural': '\u0417\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u043f\u0440\u043e\u043a\u0443\u043f\u043a\u0438', - }, - ), - migrations.AddField( - model_name='selfbillhistory', - name='request', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='finance.SelfBillRequest', verbose_name='\u0424\u043e\u0440\u043c\u0430 \u0441\u0447\u0435\u0442\u0430'), - ), - migrations.AddField( - model_name='bill', - name='service', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='finance.Price', verbose_name='\u041e\u043f\u043b\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0443\u0441\u043b\u0443\u0433\u0430'), - ), - migrations.AddField( - model_name='bill', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bill_user', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u043b\u0430\u0442\u0435\u043b\u044c\u0449\u0438\u043a'), - ), - ] +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2017-10-13 11:18 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('courses', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Bill', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('status', models.CharField(choices=[('W', 'Ожидание согласия'), ('P', 'На оплате'), ('F', 'Оплачен'), ('C', 'Отклонен'), ('H', 'Сгорел')], default='W', max_length=1, verbose_name='Статус')), + ('bill_method', models.CharField(choices=[('C', 'Наличные'), ('H', 'JustClick'), ('A', 'Альфа-Банк'), ('S', 'SimplePay'), ('Y', 'YandexKassa')], default='Y', max_length=2, verbose_name='Способ оплаты')), + ('price', models.CharField(blank=True, max_length=255, null=True, verbose_name='Сумма')), + ('real_price', models.CharField(blank=True, help_text='Сумма, минус комиссия', max_length=255, null=True, verbose_name='Полученная сумма')), + ('inside_data', models.TextField(blank=True, default='', editable=False, verbose_name='Данные проверки')), + ('key', models.CharField(blank=True, default='', editable=False, max_length=255, verbose_name='Ключ платежа')), + ('out_id', models.CharField(blank=True, default='', editable=False, max_length=100, verbose_name='ID внешнего заказа')), + ('comment', models.TextField(blank=True, editable=False, help_text='Будет показано пользователю', verbose_name='Комментарий продавца')), + ('description', models.TextField(default='', verbose_name='Внутренняя заметка')), + ('opener', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Ответственный сотрудник')), + ], + options={ + 'verbose_name': 'Счет', + 'verbose_name_plural': 'Счета', + }, + ), + migrations.CreateModel( + name='Price', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('public', models.BooleanField(default=False, verbose_name='Опубликовать')), + ('title', models.CharField(help_text='Будет показано пользователям', max_length=255, verbose_name='Услуга')), + ('cost', models.IntegerField(verbose_name='Цена')), + ('description', models.TextField(help_text='Будет показано менеджерам', verbose_name='Описание')), + ('by_time', models.IntegerField(blank=True, null=True, verbose_name='Дней доступа')), + ('course', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='Курс')), + ('vertexes', models.ManyToManyField(to='courses.Vertex', verbose_name='Список всех узлов')), + ], + options={ + 'verbose_name': 'Услуга', + 'verbose_name_plural': 'Услуги', + 'ordering': ['-id'], + }, + ), + migrations.AddField( + model_name='bill', + name='service', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='finance.Price', verbose_name='Оплачиваемая услуга'), + ), + migrations.AddField( + model_name='bill', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bill_user', to=settings.AUTH_USER_MODEL, verbose_name='Плательщик'), + ), + ] diff --git a/finance/migrations/0002_bill_description.py b/finance/migrations/0002_bill_description.py deleted file mode 100755 index e5870f7..0000000 --- a/finance/migrations/0002_bill_description.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-04-07 17:41 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='bill', - name='description', - field=models.TextField(blank=True, default=b'', help_text='\u041f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0443\u0442\u0440\u0438', verbose_name='\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u0437\u0430\u043c\u0435\u0442\u043a\u0430'), - ), - ] diff --git a/finance/migrations/0003_selfbillrequest_company.py b/finance/migrations/0003_selfbillrequest_company.py deleted file mode 100755 index 6247eb0..0000000 --- a/finance/migrations/0003_selfbillrequest_company.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-14 16:52 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0002_bill_description'), - ] - - operations = [ - migrations.AddField( - model_name='selfbillrequest', - name='company', - field=models.CharField(choices=[(b'lms', b'http://lms.ru/'), (b'skillbox', b'http://skill-box.ru/')], default=b'lms', max_length=255, verbose_name='\u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f'), - ), - ] diff --git a/finance/migrations/0004_auto_20160414_1700.py b/finance/migrations/0004_auto_20160414_1700.py deleted file mode 100755 index ff3d1b7..0000000 --- a/finance/migrations/0004_auto_20160414_1700.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-14 17:00 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0003_selfbillrequest_company'), - ] - - operations = [ - migrations.AddField( - model_name='selfbillhistory', - name='day_sent', - field=models.BooleanField(default=False, editable=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0434\u043d\u0435\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u044f'), - ), - migrations.AddField( - model_name='selfbillhistory', - name='month_sent', - field=models.BooleanField(default=False, editable=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043c\u0435\u0441\u044f\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u044f'), - ), - migrations.AddField( - model_name='selfbillhistory', - name='week_sent', - field=models.BooleanField(default=False, editable=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u044f'), - ), - ] diff --git a/finance/migrations/0005_selfbilldesign.py b/finance/migrations/0005_selfbilldesign.py deleted file mode 100755 index 1ff0eea..0000000 --- a/finance/migrations/0005_selfbilldesign.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-14 19:27 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0004_auto_20160414_1700'), - ] - - operations = [ - migrations.CreateModel( - name='SelfBillDesign', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255, verbose_name='\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438')), - ('logo', models.ImageField(upload_to=b'self', verbose_name='\u041b\u043e\u0433\u043e\u0442\u0438\u043f')), - ('background', models.CharField(max_length=255, verbose_name='\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430')), - ], - options={ - 'verbose_name': '\u0414\u0438\u0437\u0430\u0439\u043d \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430', - 'verbose_name_plural': '\u0414\u0438\u0437\u0430\u0439\u043d \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430', - }, - ), - ] diff --git a/finance/migrations/0006_auto_20160414_1930.py b/finance/migrations/0006_auto_20160414_1930.py deleted file mode 100755 index e14c2d1..0000000 --- a/finance/migrations/0006_auto_20160414_1930.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-14 19:30 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0005_selfbilldesign'), - ] - - operations = [ - migrations.RemoveField( - model_name='selfbillrequest', - name='company', - ), - migrations.AddField( - model_name='selfbillrequest', - name='design', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='finance.SelfBillDesign', verbose_name='\u041e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435'), - ), - ] diff --git a/finance/migrations/0007_auto_20160414_1941.py b/finance/migrations/0007_auto_20160414_1941.py deleted file mode 100755 index 454bdf7..0000000 --- a/finance/migrations/0007_auto_20160414_1941.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-14 19:41 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0006_auto_20160414_1930'), - ] - - operations = [ - migrations.AlterModelOptions( - name='selfbilldesign', - options={'verbose_name': '\u0411\u0435\u043d\u0435\u0444\u0438\u0446\u0438\u0430\u0440 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430', 'verbose_name_plural': '\u0411\u0435\u043d\u0435\u0444\u0438\u0446\u0438\u0430\u0440\u044b \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430'}, - ), - migrations.AlterField( - model_name='selfbillrequest', - name='design', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='finance.SelfBillDesign', verbose_name='\u0411\u0435\u043d\u0435\u0444\u0438\u0446\u0438\u0430\u0440'), - ), - ] diff --git a/finance/migrations/0008_selfbilldesign_users.py b/finance/migrations/0008_selfbilldesign_users.py deleted file mode 100755 index 0057eab..0000000 --- a/finance/migrations/0008_selfbilldesign_users.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-14 19:44 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('finance', '0007_auto_20160414_1941'), - ] - - operations = [ - migrations.AddField( - model_name='selfbilldesign', - name='users', - field=models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e \u043f\u043b\u0430\u0442\u0435\u0436\u0430\u0445'), - ), - ] diff --git a/finance/migrations/0009_selfbillhistory_new_sent.py b/finance/migrations/0009_selfbillhistory_new_sent.py deleted file mode 100755 index 703b884..0000000 --- a/finance/migrations/0009_selfbillhistory_new_sent.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-14 20:30 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0008_selfbilldesign_users'), - ] - - operations = [ - migrations.AddField( - model_name='selfbillhistory', - name='new_sent', - field=models.BooleanField(default=False, editable=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0441\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/finance/migrations/0010_selfbilldesign_pay_id.py b/finance/migrations/0010_selfbilldesign_pay_id.py deleted file mode 100755 index 53c0837..0000000 --- a/finance/migrations/0010_selfbilldesign_pay_id.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-28 14:15 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0009_selfbillhistory_new_sent'), - ] - - operations = [ - migrations.AddField( - model_name='selfbilldesign', - name='pay_id', - field=models.IntegerField(default=0, max_length=255, verbose_name='\u041a\u043b\u044e\u0447\u044c \u0442\u043e\u0440\u0433\u043e\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438'), - ), - ] diff --git a/finance/migrations/0011_auto_20160505_1748.py b/finance/migrations/0011_auto_20160505_1748.py deleted file mode 100755 index 653909e..0000000 --- a/finance/migrations/0011_auto_20160505_1748.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-05-05 17:48 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0024_auto_20160505_1748'), - ('finance', '0010_selfbilldesign_pay_id'), - ] - - operations = [ - migrations.AddField( - model_name='price', - name='included', - field=models.ManyToManyField(null=True, to='courses.CourseMap', verbose_name='\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u044b'), - ), - migrations.AlterField( - model_name='selfbilldesign', - name='pay_id', - field=models.IntegerField(blank=True, default=0, help_text='ID \u0442\u043e\u0440\u0433\u043e\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 - \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f "1501".\u0415\u0441\u043b\u0438 \u0442\u0430\u043a \u043d\u0435 \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u043e, \u0442\u043e \u044d\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443', max_length=255, verbose_name='\u041a\u043b\u044e\u0447 \u0442\u043e\u0440\u0433\u043e\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438'), - ), - ] diff --git a/finance/migrations/0012_auto_20160505_2009.py b/finance/migrations/0012_auto_20160505_2009.py deleted file mode 100755 index a0ced2c..0000000 --- a/finance/migrations/0012_auto_20160505_2009.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-05-05 20:09 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0011_auto_20160505_1748'), - ] - - operations = [ - migrations.AddField( - model_name='price', - name='by_time', - field=models.IntegerField(blank=True, default=0, help_text='\u041f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u0434\u043e\u0441\u0442\u0443\u043f \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0442', verbose_name='\u0414\u043d\u0435\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430'), - ), - migrations.AlterField( - model_name='price', - name='included', - field=models.ManyToManyField(blank=True, help_text='\u0415\u0441\u043b\u0438 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u0430', null=True, to='courses.CourseMap', verbose_name='\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u044b'), - ), - ] diff --git a/finance/migrations/0013_auto_20160505_2035.py b/finance/migrations/0013_auto_20160505_2035.py deleted file mode 100755 index 2bd2aac..0000000 --- a/finance/migrations/0013_auto_20160505_2035.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-05-05 20:35 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0012_auto_20160505_2009'), - ] - - operations = [ - migrations.AlterField( - model_name='price', - name='by_time', - field=models.IntegerField(blank=True, default=0, help_text='\u041f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u0434\u043e\u0441\u0442\u0443\u043f \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0442', null=True, verbose_name='\u0414\u043d\u0435\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430'), - ), - ] diff --git a/finance/migrations/0014_auto_20160506_1303.py b/finance/migrations/0014_auto_20160506_1303.py deleted file mode 100755 index a9a30e9..0000000 --- a/finance/migrations/0014_auto_20160506_1303.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-05-06 13:03 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0013_auto_20160505_2035'), - ] - - operations = [ - migrations.AlterField( - model_name='price', - name='by_time', - field=models.IntegerField(blank=True, default=0, help_text='\u041f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u0434\u043e\u0441\u0442\u0443\u043f \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0442 \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439.', null=True, verbose_name='\u0414\u043d\u0435\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430'), - ), - ] diff --git a/finance/migrations/0015_price_key.py b/finance/migrations/0015_price_key.py deleted file mode 100755 index fd49fdb..0000000 --- a/finance/migrations/0015_price_key.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-05-09 17:10 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0014_auto_20160506_1303'), - ] - - operations = [ - migrations.AddField( - model_name='price', - name='key', - field=models.CharField(blank=True, editable=False, max_length=255, null=True, verbose_name='\u041a\u043b\u044e\u0447\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430'), - ), - ] diff --git a/finance/migrations/0016_auto_20160524_1255.py b/finance/migrations/0016_auto_20160524_1255.py deleted file mode 100755 index f216a07..0000000 --- a/finance/migrations/0016_auto_20160524_1255.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-05-24 12:55 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0015_price_key'), - ] - - operations = [ - migrations.AddField( - model_name='price', - name='flex', - field=models.BooleanField(default=False, verbose_name='\u041e\u043f\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f'), - ), - migrations.AlterField( - model_name='price', - name='key', - field=models.CharField(blank=True, editable=False, max_length=255, null=True, verbose_name='\u041a\u043b\u044e\u0447 \u0434\u043e\u0441\u0442\u0443\u043f\u0430'), - ), - ] diff --git a/finance/migrations/0017_remove_price_flex.py b/finance/migrations/0017_remove_price_flex.py deleted file mode 100755 index a4b15e8..0000000 --- a/finance/migrations/0017_remove_price_flex.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-05-24 12:58 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0016_auto_20160524_1255'), - ] - - operations = [ - migrations.RemoveField( - model_name='price', - name='flex', - ), - ] diff --git a/finance/migrations/0018_auto_20160531_1256.py b/finance/migrations/0018_auto_20160531_1256.py deleted file mode 100755 index 1be62ac..0000000 --- a/finance/migrations/0018_auto_20160531_1256.py +++ /dev/null @@ -1,117 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-05-31 12:56 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('finance', '0017_remove_price_flex'), - ] - - operations = [ - migrations.CreateModel( - name='Installment', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('price', models.IntegerField(verbose_name='\u041e\u0431\u0449\u0430\u044f \u0446\u0435\u043d\u0430')), - ('first_price', models.IntegerField(default=0, verbose_name='\u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u043b\u0430\u0442\u0435\u0436')), - ('period', models.IntegerField(default=5, verbose_name='\u041c\u0435\u0441\u044f\u0446\u0435\u0432 \u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0443')), - ('date', models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f')), - ('f_date', models.DateField(blank=True, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f')), - ('rest', models.IntegerField(default=0, verbose_name='\u041e\u0441\u0442\u0430\u0442\u043e\u043a \u043f\u043e \u0437\u0430\u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438')), - ('wait', models.IntegerField(default=0, help_text='\u0427\u0435\u0440\u0435\u0437 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043d\u0435\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0441\u0440\u043e\u0447\u043a\u0438', verbose_name='\u0414\u043d\u0435\u0439 \u0432 \u0437\u0430\u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438')), - ('expired', models.BooleanField(default=False, verbose_name='\u041f\u0440\u043e\u0441\u0440\u043e\u0447\u0435\u043d\u043e')), - ], - options={ - 'verbose_name': '\u0420\u0430\u0441\u0441\u0440\u043e\u0447\u043a\u0430', - 'verbose_name_plural': '\u0420\u0430\u0441\u0441\u0440\u043e\u0447\u043a\u0438', - }, - ), - migrations.RemoveField( - model_name='selfbilldesign', - name='users', - ), - migrations.RemoveField( - model_name='selfbillhistory', - name='request', - ), - migrations.RemoveField( - model_name='selfbillrequest', - name='design', - ), - migrations.AlterModelOptions( - name='price', - options={'ordering': ['-id'], 'verbose_name': '\u0423\u0441\u043b\u0443\u0433\u0430', 'verbose_name_plural': '\u0423\u0441\u043b\u0443\u0433\u0438'}, - ), - migrations.AddField( - model_name='bill', - name='_method', - field=models.CharField(choices=[(b'H', '\u0412 \u0420\u0443\u0447\u043d\u0443\u044e'), (b'S', 'SimplePay'), (b'A1', '\u0410\u043b\u044c\u0444\u0430\u0411\u0430\u043d\u043a'), (b'A2', '\u0410\u043b\u044c\u0431\u0430\u0411\u0430\u043d\u043a c \u043f\u0440\u0435\u0434\u043e\u043f\u043b\u0430\u0442\u043e\u0439')], default=b'H', max_length=2, verbose_name='\u0421\u043f\u043e\u0441\u043e\u0431 \u043e\u043f\u043b\u0430\u0442\u044b'), - ), - migrations.AddField( - model_name='bill', - name='_type', - field=models.CharField(choices=[(b'I', '\u0420\u0430\u0441\u0441\u0440\u043e\u0447\u043a\u0430'), (b'F', '\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u043f\u043b\u0430\u0442\u0435\u0436'), (b'S', '\u0423\u0441\u043b\u0443\u0433\u0430')], default=b'S', max_length=1, verbose_name='\u0422\u0438\u043f \u043f\u043b\u0430\u0442\u0435\u0436\u0430'), - ), - migrations.AddField( - model_name='bill', - name='gift', - field=models.BooleanField(default=False, verbose_name='\u041f\u043e\u0434\u0430\u0440\u043e\u043a'), - ), - migrations.AddField( - model_name='bill', - name='price', - field=models.CharField(default=0, max_length=255, verbose_name='\u0421\u0443\u043c\u043c\u0430'), - ), - migrations.AddField( - model_name='price', - name='freepay', - field=models.BooleanField(default=False, editable=False, verbose_name='\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0441\u0447\u0435\u0442'), - ), - migrations.AlterField( - model_name='price', - name='course', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441'), - ), - migrations.AlterField( - model_name='price', - name='title', - field=models.CharField(help_text='\u0411\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c', max_length=255, verbose_name='\u0423\u0441\u043b\u0443\u0433\u0430'), - ), - migrations.DeleteModel( - name='SelfBillDesign', - ), - migrations.DeleteModel( - name='SelfBillHistory', - ), - migrations.DeleteModel( - name='SelfBillRequest', - ), - migrations.AddField( - model_name='installment', - name='initiative', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='finance.Price', verbose_name='\u0418\u043d\u0438\u0430\u0446\u0438\u0430\u0442\u0438\u0432\u0430'), - ), - migrations.AddField( - model_name='installment', - name='payments', - field=models.ManyToManyField(blank=True, null=True, related_name='bill_point', to='finance.Bill', verbose_name='\u041f\u043b\u0430\u0442\u0435\u0436\u0438'), - ), - migrations.AddField( - model_name='installment', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c'), - ), - migrations.AddField( - model_name='bill', - name='installment', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='installment_point', to='finance.Installment', verbose_name='\u0420\u0430\u0441\u0441\u0440\u043e\u0447\u043a\u0430'), - ), - ] diff --git a/finance/migrations/0019_price_url.py b/finance/migrations/0019_price_url.py deleted file mode 100755 index 0ba5e2f..0000000 --- a/finance/migrations/0019_price_url.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-05-31 13:00 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0018_auto_20160531_1256'), - ] - - operations = [ - migrations.AddField( - model_name='price', - name='url', - field=models.URLField(blank=True, null=True, verbose_name='\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0443'), - ), - ] diff --git a/finance/migrations/0020_auto_20160531_1303.py b/finance/migrations/0020_auto_20160531_1303.py deleted file mode 100755 index 9d0843c..0000000 --- a/finance/migrations/0020_auto_20160531_1303.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-05-31 13:03 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0019_price_url'), - ] - - operations = [ - migrations.AlterField( - model_name='price', - name='url', - field=models.URLField(blank=True, editable=False, null=True, verbose_name='\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0443'), - ), - ] diff --git a/finance/migrations/0021_auto_20160601_1309.py b/finance/migrations/0021_auto_20160601_1309.py deleted file mode 100755 index 980cd27..0000000 --- a/finance/migrations/0021_auto_20160601_1309.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-01 13:09 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0020_auto_20160531_1303'), - ] - - operations = [ - migrations.RemoveField( - model_name='bill', - name='key', - ), - migrations.AddField( - model_name='bill', - name='pay_key', - field=models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041a\u043b\u044e\u0447 \u043f\u043b\u0430\u0442\u0435\u0436\u0430'), - ), - migrations.AddField( - model_name='bill', - name='result_key', - field=models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041a\u043b\u044e\u0447 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430'), - ), - migrations.AddField( - model_name='bill', - name='success_key', - field=models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u041a\u043b\u044e\u0447 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f'), - ), - ] diff --git a/finance/migrations/0022_auto_20160601_1320.py b/finance/migrations/0022_auto_20160601_1320.py deleted file mode 100755 index 287e110..0000000 --- a/finance/migrations/0022_auto_20160601_1320.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-01 13:20 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0021_auto_20160601_1309'), - ] - - operations = [ - migrations.RenameField( - model_name='bill', - old_name='pay_key', - new_name='key', - ), - migrations.RemoveField( - model_name='bill', - name='result_key', - ), - migrations.RemoveField( - model_name='bill', - name='success_key', - ), - ] diff --git a/finance/migrations/0023_bill_source_key.py b/finance/migrations/0023_bill_source_key.py deleted file mode 100755 index dc1d5c4..0000000 --- a/finance/migrations/0023_bill_source_key.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-01 16:30 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0022_auto_20160601_1320'), - ] - - operations = [ - migrations.AddField( - model_name='bill', - name='source_key', - field=models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u043a\u043b\u044e\u0447\u0430'), - ), - ] diff --git a/finance/migrations/0024_auto_20160607_2002.py b/finance/migrations/0024_auto_20160607_2002.py deleted file mode 100755 index 7680bee..0000000 --- a/finance/migrations/0024_auto_20160607_2002.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-07 20:02 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0023_bill_source_key'), - ] - - operations = [ - migrations.AddField( - model_name='bill', - name='fire_date', - field=models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u0441\u0433\u043e\u0440\u0430\u043d\u0438\u044f'), - ), - migrations.AddField( - model_name='bill', - name='views', - field=models.IntegerField(default=0, help_text='\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043a\u0430\u0437\u0430 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0439', verbose_name='\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435'), - ), - migrations.AlterField( - model_name='bill', - name='_type', - field=models.CharField(choices=[(b'I', '\u0420\u0430\u0441\u0441\u0440\u043e\u0447\u043a\u0430'), (b'F', '\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u043f\u043b\u0430\u0442\u0435\u0436'), (b'S', '\u0423\u0441\u043b\u0443\u0433\u0430'), (b'P', '\u0421\u0447\u0435\u0442 \u043d\u0430 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438')], default=b'S', max_length=1, verbose_name='\u0422\u0438\u043f \u043f\u043b\u0430\u0442\u0435\u0436\u0430'), - ), - migrations.AlterField( - model_name='bill', - name='status', - field=models.CharField(choices=[(b'W', '\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u044f'), (b'P', '\u041d\u0430 \u043e\u043f\u043b\u0430\u0442\u0435'), (b'F', '\u041e\u043f\u043b\u0430\u0447\u0435\u043d'), (b'C', '\u041e\u0442\u043a\u043b\u043e\u043d\u0435\u043d'), (b'H', '\u0421\u0442\u0443\u0445')], default=b'W', max_length=1, verbose_name='\u0421\u0442\u0430\u0442\u0443\u0441'), - ), - ] diff --git a/finance/migrations/0025_auto_20160607_2034.py b/finance/migrations/0025_auto_20160607_2034.py deleted file mode 100755 index f55c9a0..0000000 --- a/finance/migrations/0025_auto_20160607_2034.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-07 20:34 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0024_auto_20160607_2002'), - ] - - operations = [ - migrations.AddField( - model_name='price', - name='post_fire', - field=models.IntegerField(default=0, help_text='\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 50% \u0441\u043a\u0438\u043d\u0434\u043a\u0438 \u043d\u0430 X \u0434\u043d\u0435\u0439. \u0421\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 "\u0434\u043d\u0435\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430"', verbose_name='\u0414\u043d\u0435\u0439 \u0441\u0433\u043e\u0440\u0430\u043d\u0438\u044f'), - ), - migrations.AlterField( - model_name='bill', - name='status', - field=models.CharField(choices=[(b'W', '\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u044f'), (b'P', '\u041d\u0430 \u043e\u043f\u043b\u0430\u0442\u0435'), (b'F', '\u041e\u043f\u043b\u0430\u0447\u0435\u043d'), (b'C', '\u041e\u0442\u043a\u043b\u043e\u043d\u0435\u043d'), (b'H', '\u0421\u0433\u043e\u0440\u0435\u043b')], default=b'W', max_length=1, verbose_name='\u0421\u0442\u0430\u0442\u0443\u0441'), - ), - migrations.AlterField( - model_name='bill', - name='views', - field=models.IntegerField(blank=True, default=0, help_text='\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043a\u0430\u0437\u043e\u0432 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f', verbose_name='\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435'), - ), - ] diff --git a/finance/migrations/0026_servicerequest__type.py b/finance/migrations/0026_servicerequest__type.py deleted file mode 100755 index 7623968..0000000 --- a/finance/migrations/0026_servicerequest__type.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-07 20:51 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0025_auto_20160607_2034'), - ] - - operations = [ - migrations.AddField( - model_name='servicerequest', - name='_type', - field=models.CharField(choices=[(b'S', b'\xd0\x9e\xd1\x80\xd0\xb3\xd0\xb0\xd0\xbd\xd0\xb8\xd1\x87\xd0\xbd\xd0\xbe'), (b'B', b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xbb\xd0\xb5\xd1\x87\xd0\xb5\xd0\xbd')], default=b'S', max_length=1, verbose_name='\u0422\u0438\u043f \u0437\u0430\u043f\u0440\u043e\u0441\u0430'), - ), - ] diff --git a/finance/migrations/0027_price_modals.py b/finance/migrations/0027_price_modals.py deleted file mode 100755 index 831047a..0000000 --- a/finance/migrations/0027_price_modals.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 23:51 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0039_auto_20160609_2351'), - ('finance', '0026_servicerequest__type'), - ] - - operations = [ - migrations.AddField( - model_name='price', - name='modals', - field=models.ManyToManyField(blank=True, null=True, to='management.Modals', verbose_name='\u041c\u043e\u0434\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u043a\u043d\u0430 \u043f\u0440\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0438'), - ), - ] diff --git a/finance/migrations/0028_auto_20160610_0003.py b/finance/migrations/0028_auto_20160610_0003.py deleted file mode 100755 index 5dcc8a5..0000000 --- a/finance/migrations/0028_auto_20160610_0003.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-10 00:03 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0027_price_modals'), - ] - - operations = [ - migrations.AddField( - model_name='bill', - name='fire_date_sent', - field=models.BooleanField(default=False, verbose_name='\u041f\u0438\u0441\u044c\u043c\u043e \u0441\u0433\u043e\u0440\u0430\u043d\u0438\u044f'), - ), - migrations.AddField( - model_name='bill', - name='start_fire', - field=models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0433\u043e\u0440\u0430\u043d\u0438\u044f'), - ), - migrations.AddField( - model_name='bill', - name='start_fire_sent', - field=models.BooleanField(default=False, verbose_name='\u041f\u0438\u0441\u044c\u043c\u043e \u0441\u0433\u043e\u0440\u0430\u043d\u0438\u044f'), - ), - ] diff --git a/finance/migrations/0029_bill_modals_show.py b/finance/migrations/0029_bill_modals_show.py deleted file mode 100755 index 79a8383..0000000 --- a/finance/migrations/0029_bill_modals_show.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-10 12:51 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0028_auto_20160610_0003'), - ] - - operations = [ - migrations.AddField( - model_name='bill', - name='modals_show', - field=models.BooleanField(default=False, verbose_name='\u041c\u043e\u0434\u0430\u043b\u043a\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b'), - ), - ] diff --git a/finance/migrations/0030_bill_admitad_uid.py b/finance/migrations/0030_bill_admitad_uid.py deleted file mode 100755 index 4cf5366..0000000 --- a/finance/migrations/0030_bill_admitad_uid.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-26 19:01 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0029_bill_modals_show'), - ] - - operations = [ - migrations.AddField( - model_name='bill', - name='admitad_uid', - field=models.CharField(blank=True, default=b'', max_length=100, verbose_name='\u041a\u043b\u044e\u0447\u044c admitad'), - ), - ] diff --git a/finance/migrations/0031_auto_20160727_1453.py b/finance/migrations/0031_auto_20160727_1453.py deleted file mode 100755 index 90c588a..0000000 --- a/finance/migrations/0031_auto_20160727_1453.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-27 14:53 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0030_bill_admitad_uid'), - ] - - operations = [ - migrations.AlterField( - model_name='bill', - name='price', - field=models.CharField(max_length=255, verbose_name='\u0421\u0443\u043c\u043c\u0430'), - ), - ] diff --git a/finance/migrations/0032_auto_20160831_1638.py b/finance/migrations/0032_auto_20160831_1638.py deleted file mode 100644 index 309141d..0000000 --- a/finance/migrations/0032_auto_20160831_1638.py +++ /dev/null @@ -1,90 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-08-31 16:38 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0031_auto_20160727_1453'), - ] - - operations = [ - migrations.AddField( - model_name='bill', - name='created_sent', - field=models.BooleanField(default=False, editable=False, verbose_name='Отправлено письмо сформированного счета'), - ), - migrations.AlterField( - model_name='bill', - name='_method', - field=models.CharField(choices=[('H', 'В Ручную'), ('S', 'SimplePay'), ('A1', 'АльфаБанк'), ('A2', 'АльбаБанк c предоплатой')], default='H', max_length=2, verbose_name='Способ оплаты'), - ), - migrations.AlterField( - model_name='bill', - name='_type', - field=models.CharField(choices=[('I', 'Рассрочка'), ('F', 'Свободный платеж'), ('S', 'Услуга'), ('P', 'Счет на ожидании')], default='S', max_length=1, verbose_name='Тип платежа'), - ), - migrations.AlterField( - model_name='bill', - name='admitad_uid', - field=models.CharField(blank=True, default='', max_length=100, verbose_name='Ключь admitad'), - ), - migrations.AlterField( - model_name='bill', - name='description', - field=models.TextField(blank=True, default='', help_text='Показано только внутри', verbose_name='Внутренняя заметка'), - ), - migrations.AlterField( - model_name='bill', - name='key', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Ключ платежа'), - ), - migrations.AlterField( - model_name='bill', - name='out_id', - field=models.CharField(blank=True, default='', max_length=100, verbose_name='ID внешнего заказа'), - ), - migrations.AlterField( - model_name='bill', - name='salt', - field=models.CharField(blank=True, default='', max_length=100, verbose_name='Соль'), - ), - migrations.AlterField( - model_name='bill', - name='source_key', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Исходник ключа'), - ), - migrations.AlterField( - model_name='bill', - name='status', - field=models.CharField(choices=[('W', 'Ожидание согласия'), ('P', 'На оплате'), ('F', 'Оплачен'), ('C', 'Отклонен'), ('H', 'Сгорел')], default='W', max_length=1, verbose_name='Статус'), - ), - migrations.AlterField( - model_name='price', - name='m_type', - field=models.CharField(choices=[('B', 'Базовый материал'), ('E', 'Расширеный материал'), ('P', 'Премиум материал')], default='B', max_length=1, verbose_name='Тип подписки'), - ), - migrations.AlterField( - model_name='servicerequest', - name='_type', - field=models.CharField(choices=[('S', 'Органично'), ('B', 'Привлечен')], default='S', max_length=1, verbose_name='Тип запроса'), - ), - migrations.AlterField( - model_name='servicerequest', - name='cancel_description', - field=models.TextField(blank=True, default='', verbose_name='Причина отказа'), - ), - migrations.AlterField( - model_name='servicerequest', - name='charge', - field=models.TextField(blank=True, default='', verbose_name='Поручение'), - ), - migrations.AlterField( - model_name='servicerequest', - name='status', - field=models.CharField(choices=[('S', 'Не обработан'), ('W', 'В работе'), ('F', 'Продан'), ('B', 'Не продал')], default='S', max_length=1, verbose_name='Статус'), - ), - ] diff --git a/finance/migrations/0033_auto_20160908_0331.py b/finance/migrations/0033_auto_20160908_0331.py deleted file mode 100644 index 26fa2db..0000000 --- a/finance/migrations/0033_auto_20160908_0331.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 03:31 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0032_auto_20160831_1638'), - ] - - operations = [ - migrations.AlterField( - model_name='bill', - name='price', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Сумма'), - ), - ] diff --git a/finance/migrations/0034_bill_traf_source.py b/finance/migrations/0034_bill_traf_source.py deleted file mode 100644 index a942332..0000000 --- a/finance/migrations/0034_bill_traf_source.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-13 16:58 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0070_auto_20160913_1658'), - ('finance', '0033_auto_20160908_0331'), - ] - - operations = [ - migrations.AddField( - model_name='bill', - name='traf_source', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='access.TrafHistory', verbose_name='Обращение'), - ), - ] diff --git a/finance/migrations/0035_auto_20160924_0154.py b/finance/migrations/0035_auto_20160924_0154.py deleted file mode 100644 index 7fd19f3..0000000 --- a/finance/migrations/0035_auto_20160924_0154.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-24 01:54 -from __future__ import unicode_literals - -from django.db import migrations, models -import lms.tools - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0034_bill_traf_source'), - ] - - operations = [ - migrations.AlterField( - model_name='bill', - name='salt', - field=models.CharField(blank=True, default=lms.tools.random_string, max_length=100, verbose_name='Соль'), - ), - ] diff --git a/finance/migrations/0036_auto_20161020_2047.py b/finance/migrations/0036_auto_20161020_2047.py deleted file mode 100644 index 1725ec5..0000000 --- a/finance/migrations/0036_auto_20161020_2047.py +++ /dev/null @@ -1,59 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-10-20 20:47 -from __future__ import unicode_literals - -from django.db import migrations, models -import lms.tools - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0035_auto_20160924_0154'), - ] - - operations = [ - migrations.RemoveField( - model_name='bill', - name='_type', - ), - migrations.RemoveField( - model_name='bill', - name='installment', - ), - migrations.AlterField( - model_name='bill', - name='_method', - field=models.CharField(choices=[('H', 'В Ручную'), ('S', 'SimplePay')], default='H', max_length=2, verbose_name='Способ оплаты'), - ), - migrations.AlterField( - model_name='bill', - name='admitad_uid', - field=models.CharField(blank=True, default='', editable=False, max_length=100, verbose_name='Ключь admitad'), - ), - migrations.AlterField( - model_name='bill', - name='comment', - field=models.TextField(blank=True, editable=False, help_text='Будет показано пользователю', verbose_name='Комментарий продавца'), - ), - migrations.AlterField( - model_name='bill', - name='key', - field=models.CharField(blank=True, default='', editable=False, max_length=255, verbose_name='Ключ платежа'), - ), - migrations.AlterField( - model_name='bill', - name='out_id', - field=models.CharField(blank=True, default='', editable=False, max_length=100, verbose_name='ID внешнего заказа'), - ), - migrations.AlterField( - model_name='bill', - name='salt', - field=models.CharField(blank=True, default=lms.tools.random_string, editable=False, max_length=100, verbose_name='Соль'), - ), - migrations.AlterField( - model_name='bill', - name='source_key', - field=models.CharField(blank=True, default='', editable=False, max_length=255, verbose_name='Исходник ключа'), - ), - ] diff --git a/finance/migrations/0037_auto_20161020_2048.py b/finance/migrations/0037_auto_20161020_2048.py deleted file mode 100644 index f3d8269..0000000 --- a/finance/migrations/0037_auto_20161020_2048.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-10-20 20:48 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.utils.timezone - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0036_auto_20161020_2047'), - ] - - operations = [ - migrations.AlterField( - model_name='bill', - name='date', - field=models.DateTimeField(default=django.utils.timezone.now, editable=False, verbose_name='Дата создания счета'), - ), - migrations.AlterField( - model_name='bill', - name='finish_date', - field=models.DateTimeField(blank=True, editable=False, null=True, verbose_name='Дата завершения'), - ), - migrations.AlterField( - model_name='bill', - name='status_changed', - field=models.DateTimeField(default=django.utils.timezone.now, editable=False, verbose_name='Дата смены статуса'), - ), - ] diff --git a/finance/migrations/0038_auto_20161020_2049.py b/finance/migrations/0038_auto_20161020_2049.py deleted file mode 100644 index 77d85fa..0000000 --- a/finance/migrations/0038_auto_20161020_2049.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-10-20 20:49 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0037_auto_20161020_2048'), - ] - - operations = [ - migrations.AlterField( - model_name='bill', - name='fire_date_sent', - field=models.BooleanField(default=False, editable=False, verbose_name='Письмо сгорания'), - ), - migrations.AlterField( - model_name='bill', - name='start_fire_sent', - field=models.BooleanField(default=False, editable=False, verbose_name='Письмо сгорания'), - ), - ] diff --git a/finance/migrations/0039_auto_20161020_2050.py b/finance/migrations/0039_auto_20161020_2050.py deleted file mode 100644 index ffa0629..0000000 --- a/finance/migrations/0039_auto_20161020_2050.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-10-20 20:50 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0038_auto_20161020_2049'), - ] - - operations = [ - migrations.AlterField( - model_name='bill', - name='modals_show', - field=models.BooleanField(default=False, editable=False, verbose_name='Модалки показаны'), - ), - ] diff --git a/finance/migrations/0040_auto_20161020_2051.py b/finance/migrations/0040_auto_20161020_2051.py deleted file mode 100644 index 88c3839..0000000 --- a/finance/migrations/0040_auto_20161020_2051.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-10-20 20:51 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0039_auto_20161020_2050'), - ] - - operations = [ - migrations.AlterField( - model_name='bill', - name='traf_source', - field=models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, to='access.TrafHistory', verbose_name='Обращение'), - ), - ] diff --git a/finance/migrations/0041_remove_price_modals.py b/finance/migrations/0041_remove_price_modals.py deleted file mode 100644 index 504b444..0000000 --- a/finance/migrations/0041_remove_price_modals.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-10-24 15:32 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0040_auto_20161020_2051'), - ] - - operations = [ - migrations.RemoveField( - model_name='price', - name='modals', - ), - ] diff --git a/finance/migrations/0042_bill_inside_description.py b/finance/migrations/0042_bill_inside_description.py deleted file mode 100644 index 180a7e9..0000000 --- a/finance/migrations/0042_bill_inside_description.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-08 10:55 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0041_remove_price_modals'), - ] - - operations = [ - migrations.AddField( - model_name='bill', - name='inside_description', - field=models.TextField(blank=True, default='', verbose_name='Внутренний комментарий'), - ), - ] diff --git a/finance/migrations/0043_remove_bill_inside_description.py b/finance/migrations/0043_remove_bill_inside_description.py deleted file mode 100644 index 385d0ab..0000000 --- a/finance/migrations/0043_remove_bill_inside_description.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-08 11:00 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0042_bill_inside_description'), - ] - - operations = [ - migrations.RemoveField( - model_name='bill', - name='inside_description', - ), - ] diff --git a/finance/migrations/0044_auto_20161108_1559.py b/finance/migrations/0044_auto_20161108_1559.py deleted file mode 100644 index d07183f..0000000 --- a/finance/migrations/0044_auto_20161108_1559.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-08 15:59 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('service', '0011_auto_20160908_1624'), - ('finance', '0043_remove_bill_inside_description'), - ] - - operations = [ - migrations.AddField( - model_name='bill', - name='create_letter', - field=models.ManyToManyField(blank=True, null=True, related_name='bill_create_letter', to='service.MailBox', verbose_name='Письма при создании'), - ), - migrations.AddField( - model_name='bill', - name='finish_letters', - field=models.ManyToManyField(blank=True, null=True, related_name='bill_finish_letter', to='service.MailBox', verbose_name='Письма завершения'), - ), - ] diff --git a/finance/migrations/0045_auto_20161108_1621.py b/finance/migrations/0045_auto_20161108_1621.py deleted file mode 100644 index 49a6488..0000000 --- a/finance/migrations/0045_auto_20161108_1621.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-08 16:21 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0044_auto_20161108_1559'), - ] - - operations = [ - migrations.RenameField( - model_name='bill', - old_name='create_letter', - new_name='create_letters', - ), - ] diff --git a/finance/migrations/0046_auto_20161110_2152.py b/finance/migrations/0046_auto_20161110_2152.py deleted file mode 100644 index 4e98210..0000000 --- a/finance/migrations/0046_auto_20161110_2152.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-10 21:52 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('finance', '0045_auto_20161108_1621'), - ] - - operations = [ - migrations.AddField( - model_name='bill', - name='opener', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='bill_opener', to=settings.AUTH_USER_MODEL, verbose_name='Продажник'), - ), - migrations.AlterField( - model_name='bill', - name='manager', - field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='bill_manager', to=settings.AUTH_USER_MODEL, verbose_name='Менеджер'), - ), - ] diff --git a/finance/migrations/0047_auto_20161110_2156.py b/finance/migrations/0047_auto_20161110_2156.py deleted file mode 100644 index 43e87c6..0000000 --- a/finance/migrations/0047_auto_20161110_2156.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-10 21:56 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0046_auto_20161110_2152'), - ] - - operations = [ - migrations.AlterField( - model_name='bill', - name='manager', - field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='bill_manager', to=settings.AUTH_USER_MODEL, verbose_name='Менеджер'), - ), - ] diff --git a/finance/migrations/0048_auto_20161130_0137.py b/finance/migrations/0048_auto_20161130_0137.py deleted file mode 100644 index da7b246..0000000 --- a/finance/migrations/0048_auto_20161130_0137.py +++ /dev/null @@ -1,47 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-30 01:37 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0047_auto_20161110_2156'), - ] - - operations = [ - migrations.AddField( - model_name='bill', - name='inside_data', - field=models.TextField(blank=True, default='', editable=False, verbose_name='Данные проверки'), - ), - migrations.AlterField( - model_name='bill', - name='_method', - field=models.CharField(choices=[('H', 'JustClick'), ('S', 'SimplePay'), ('Y', 'YandexKassa')], default='H', max_length=2, verbose_name='Способ оплаты'), - ), - migrations.AlterField( - model_name='bill', - name='create_letters', - field=models.ManyToManyField(blank=True, editable=False, null=True, related_name='bill_create_letter', to='service.MailBox', verbose_name='Письма при создании'), - ), - migrations.AlterField( - model_name='bill', - name='finish_letters', - field=models.ManyToManyField(blank=True, editable=False, null=True, related_name='bill_finish_letter', to='service.MailBox', verbose_name='Письма завершения'), - ), - migrations.AlterField( - model_name='bill', - name='opener', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='bill_opener', to=settings.AUTH_USER_MODEL, verbose_name='Открывший'), - ), - migrations.AlterField( - model_name='bill', - name='status', - field=models.CharField(choices=[('W', 'Ожидание согласия'), ('P', 'На оплате'), ('F', 'Оплачен'), ('C', 'Отклонен'), ('B', 'Отклонен банком'), ('H', 'Сгорел')], default='W', max_length=1, verbose_name='Статус'), - ), - ] diff --git a/finance/migrations/0049_yandexkassahistory.py b/finance/migrations/0049_yandexkassahistory.py deleted file mode 100644 index 8c4c488..0000000 --- a/finance/migrations/0049_yandexkassahistory.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-12-06 03:11 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0048_auto_20161130_0137'), - ] - - operations = [ - migrations.CreateModel( - name='YandexKassaHistory', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('date', models.DateTimeField(default=datetime.datetime.now, verbose_name='Дата')), - ('text', models.TextField(verbose_name='Текст')), - ], - options={ - 'verbose_name_plural': 'Яндекс Касса', - 'verbose_name': 'Яндекс Касса', - }, - ), - ] diff --git a/finance/migrations/0050_yandexkassahistory__type.py b/finance/migrations/0050_yandexkassahistory__type.py deleted file mode 100644 index 7f147b7..0000000 --- a/finance/migrations/0050_yandexkassahistory__type.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-12-06 03:27 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0049_yandexkassahistory'), - ] - - operations = [ - migrations.AddField( - model_name='yandexkassahistory', - name='_type', - field=models.CharField(default='', max_length=255, verbose_name='Тип запроса'), - ), - ] diff --git a/finance/migrations/0051_yandexkassahistory_result.py b/finance/migrations/0051_yandexkassahistory_result.py deleted file mode 100644 index 4bafc73..0000000 --- a/finance/migrations/0051_yandexkassahistory_result.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-12-09 06:40 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0050_yandexkassahistory__type'), - ] - - operations = [ - migrations.AddField( - model_name='yandexkassahistory', - name='result', - field=models.CharField(default='', max_length=255, verbose_name='Результат'), - ), - ] diff --git a/finance/migrations/0052_bill_test.py b/finance/migrations/0052_bill_test.py deleted file mode 100644 index e1fcab9..0000000 --- a/finance/migrations/0052_bill_test.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-12-09 06:54 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0051_yandexkassahistory_result'), - ] - - operations = [ - migrations.AddField( - model_name='bill', - name='test', - field=models.BooleanField(default=False, verbose_name='Тест был'), - ), - ] diff --git a/finance/migrations/0053_remove_bill_test.py b/finance/migrations/0053_remove_bill_test.py deleted file mode 100644 index bb84ceb..0000000 --- a/finance/migrations/0053_remove_bill_test.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-12-09 07:02 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0052_bill_test'), - ] - - operations = [ - migrations.RemoveField( - model_name='bill', - name='test', - ), - ] diff --git a/finance/migrations/0054_bill_real_price.py b/finance/migrations/0054_bill_real_price.py deleted file mode 100644 index e3962ab..0000000 --- a/finance/migrations/0054_bill_real_price.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-12-22 11:22 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0053_remove_bill_test'), - ] - - operations = [ - migrations.AddField( - model_name='bill', - name='real_price', - field=models.CharField(blank=True, help_text='Сумма, минус комиссия', max_length=255, null=True, verbose_name='Полученная сумма'), - ), - ] diff --git a/finance/migrations/0055_auto_20170110_1536.py b/finance/migrations/0055_auto_20170110_1536.py deleted file mode 100644 index 18e249a..0000000 --- a/finance/migrations/0055_auto_20170110_1536.py +++ /dev/null @@ -1,68 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-01-10 15:36 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0054_bill_real_price'), - ] - - operations = [ - migrations.AddField( - model_name='servicerequest', - name='amo', - field=models.BooleanField(default=False, verbose_name='Отправлен в AMO'), - ), - migrations.AddField( - model_name='servicerequest', - name='company', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Компания продавец'), - ), - migrations.AddField( - model_name='servicerequest', - name='email', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='email'), - ), - migrations.AddField( - model_name='servicerequest', - name='lead_name', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Метка amo'), - ), - migrations.AddField( - model_name='servicerequest', - name='name', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Имя'), - ), - migrations.AddField( - model_name='servicerequest', - name='phone', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='phone'), - ), - migrations.AddField( - model_name='servicerequest', - name='product', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Продукт'), - ), - migrations.AddField( - model_name='servicerequest', - name='service', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Услуга'), - ), - migrations.AlterField( - model_name='servicerequest', - name='date', - field=models.DateTimeField(default=datetime.datetime.now, verbose_name='Дата заказа'), - ), - migrations.AlterField( - model_name='servicerequest', - name='student', - field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, related_name='student_user', to=settings.AUTH_USER_MODEL, verbose_name='Студент'), - ), - ] diff --git a/finance/migrations/0056_auto_20170110_1537.py b/finance/migrations/0056_auto_20170110_1537.py deleted file mode 100644 index e6ca8ac..0000000 --- a/finance/migrations/0056_auto_20170110_1537.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-01-10 15:37 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0055_auto_20170110_1536'), - ] - - operations = [ - migrations.AlterField( - model_name='servicerequest', - name='amo', - field=models.BooleanField(default=False, editable=False, verbose_name='Отправлен в AMO'), - ), - ] diff --git a/finance/migrations/0057_auto_20170110_1612.py b/finance/migrations/0057_auto_20170110_1612.py deleted file mode 100644 index 9e90651..0000000 --- a/finance/migrations/0057_auto_20170110_1612.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-01-10 16:12 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0056_auto_20170110_1537'), - ] - - operations = [ - migrations.AlterField( - model_name='servicerequest', - name='student', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='student_user', to=settings.AUTH_USER_MODEL, verbose_name='Студент'), - ), - ] diff --git a/finance/migrations/0058_servicerequest_data.py b/finance/migrations/0058_servicerequest_data.py deleted file mode 100644 index 9d2e583..0000000 --- a/finance/migrations/0058_servicerequest_data.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-01-10 16:25 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0057_auto_20170110_1612'), - ] - - operations = [ - migrations.AddField( - model_name='servicerequest', - name='data', - field=models.TextField(default='', help_text='Словарь упаковывается в строку', verbose_name='Данные'), - ), - ] diff --git a/finance/migrations/0059_auto_20170113_1028.py b/finance/migrations/0059_auto_20170113_1028.py deleted file mode 100644 index 10a6997..0000000 --- a/finance/migrations/0059_auto_20170113_1028.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-01-13 10:28 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0058_servicerequest_data'), - ] - - operations = [ - migrations.RemoveField( - model_name='servicerequest', - name='amo', - ), - migrations.AlterField( - model_name='servicerequest', - name='send', - field=models.BooleanField(default=False, editable=False, verbose_name='Отправлен в AMO'), - ), - ] diff --git a/finance/migrations/0060_servicerequest_send_date.py b/finance/migrations/0060_servicerequest_send_date.py deleted file mode 100644 index d839702..0000000 --- a/finance/migrations/0060_servicerequest_send_date.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-01-13 11:48 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0059_auto_20170113_1028'), - ] - - operations = [ - migrations.AddField( - model_name='servicerequest', - name='send_date', - field=models.DateTimeField(editable=False, null=True, verbose_name='Время отправки'), - ), - ] diff --git a/finance/migrations/0061_auto_20170113_1153.py b/finance/migrations/0061_auto_20170113_1153.py deleted file mode 100644 index 5ce1bd0..0000000 --- a/finance/migrations/0061_auto_20170113_1153.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-01-13 11:53 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0060_servicerequest_send_date'), - ] - - operations = [ - migrations.AlterField( - model_name='servicerequest', - name='send_date', - field=models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='Время отправки'), - ), - ] diff --git a/finance/migrations/0062_requestalert.py b/finance/migrations/0062_requestalert.py deleted file mode 100644 index 2de3d8d..0000000 --- a/finance/migrations/0062_requestalert.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-02-02 21:16 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0061_auto_20170113_1153'), - ] - - operations = [ - migrations.CreateModel( - name='RequestAlert', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=255, verbose_name='Классификатор')), - ('_count', models.IntegerField(default=0, verbose_name='Количество заявок')), - ('mails', models.TextField(help_text='Кому разослать дубли заявки. ЧЕРЕЗ ТОЧКУ С ЗАПЯТОЙ', verbose_name='Список почт')), - ], - options={ - 'verbose_name': 'Оповещение о новых заявках', - 'verbose_name_plural': 'Оповещения о новых заявках', - }, - ), - ] diff --git a/finance/migrations/0063_auto_20170202_2143.py b/finance/migrations/0063_auto_20170202_2143.py deleted file mode 100644 index 9a06ab7..0000000 --- a/finance/migrations/0063_auto_20170202_2143.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-02-02 21:43 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0062_requestalert'), - ] - - operations = [ - migrations.AddField( - model_name='requestalert', - name='f_date', - field=models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='Начало заявок'), - ), - migrations.AddField( - model_name='requestalert', - name='l_date', - field=models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='Последняя заявка'), - ), - migrations.AlterField( - model_name='requestalert', - name='mails', - field=models.TextField(blank=True, help_text='Кому разослать дубли заявки. ЧЕРЕЗ ТОЧКУ С ЗАПЯТОЙ', verbose_name='Список почт'), - ), - ] diff --git a/finance/migrations/0064_auto_20170202_2236.py b/finance/migrations/0064_auto_20170202_2236.py deleted file mode 100644 index 4567099..0000000 --- a/finance/migrations/0064_auto_20170202_2236.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-02-02 22:36 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0063_auto_20170202_2143'), - ] - - operations = [ - migrations.RemoveField( - model_name='requestalert', - name='_count', - ), - migrations.AddField( - model_name='requestalert', - name='requests', - field=models.ManyToManyField(blank=True, null=True, to='finance.ServiceRequest', verbose_name='Количество заявок'), - ), - ] diff --git a/finance/migrations/0065_auto_20170202_2242.py b/finance/migrations/0065_auto_20170202_2242.py deleted file mode 100644 index bad2d28..0000000 --- a/finance/migrations/0065_auto_20170202_2242.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-02-02 22:42 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0064_auto_20170202_2236'), - ] - - operations = [ - migrations.AlterField( - model_name='requestalert', - name='requests', - field=models.ManyToManyField(blank=True, editable=False, null=True, to='finance.ServiceRequest', verbose_name='Количество заявок'), - ), - migrations.AlterField( - model_name='requestalert', - name='title', - field=models.CharField(editable=False, max_length=255, verbose_name='Классификатор'), - ), - ] diff --git a/finance/migrations/0066_servicerequest_http_host.py b/finance/migrations/0066_servicerequest_http_host.py deleted file mode 100644 index c2eb166..0000000 --- a/finance/migrations/0066_servicerequest_http_host.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-02-02 22:48 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0065_auto_20170202_2242'), - ] - - operations = [ - migrations.AddField( - model_name='servicerequest', - name='http_host', - field=models.CharField(default='', editable=False, max_length=255, verbose_name='Источник запроса'), - ), - ] diff --git a/finance/migrations/0067_auto_20170202_2252.py b/finance/migrations/0067_auto_20170202_2252.py deleted file mode 100644 index 71b143c..0000000 --- a/finance/migrations/0067_auto_20170202_2252.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-02-02 22:52 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0066_servicerequest_http_host'), - ] - - operations = [ - migrations.RenameField( - model_name='servicerequest', - old_name='http_host', - new_name='host', - ), - ] diff --git a/finance/migrations/0068_auto_20170202_2315.py b/finance/migrations/0068_auto_20170202_2315.py deleted file mode 100644 index 2fb7f1d..0000000 --- a/finance/migrations/0068_auto_20170202_2315.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-02-02 23:15 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0067_auto_20170202_2252'), - ] - - operations = [ - migrations.RemoveField( - model_name='requestalert', - name='l_date', - ), - migrations.AddField( - model_name='requestalert', - name='date', - field=models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='Начало заявка'), - ), - migrations.AlterField( - model_name='requestalert', - name='f_date', - field=models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='Последняя заявка'), - ), - ] diff --git a/finance/migrations/0069_auto_20170203_1333.py b/finance/migrations/0069_auto_20170203_1333.py deleted file mode 100644 index db6d76f..0000000 --- a/finance/migrations/0069_auto_20170203_1333.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-02-03 13:33 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0068_auto_20170202_2315'), - ] - - operations = [ - migrations.AlterField( - model_name='bill', - name='_method', - field=models.CharField(choices=[('H', 'Наличные'), ('B', 'Банковский перевод'), ('G', 'На расчетный счет'), ('A', 'Альфа-Банк'), ('P', 'PayPal'), ('W', 'WebMoney'), ('S', 'SimplePay'), ('Y', 'YandexKassa')], default='H', max_length=2, verbose_name='Способ оплаты'), - ), - migrations.AlterField( - model_name='requestalert', - name='date', - field=models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='Начало заявок'), - ), - ] diff --git a/finance/migrations/0070_auto_20170424_1638.py b/finance/migrations/0070_auto_20170424_1638.py deleted file mode 100644 index d966970..0000000 --- a/finance/migrations/0070_auto_20170424_1638.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-04-24 16:38 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('finance', '0069_auto_20170203_1333'), - ] - - operations = [ - migrations.AlterField( - model_name='bill', - name='_method', - field=models.CharField(choices=[('C', 'Наличные'), ('H', 'JustClick'), ('B', 'Банковский перевод'), ('G', 'На расчетный счет'), ('A', 'Альфа-Банк'), ('P', 'PayPal'), ('W', 'WebMoney'), ('S', 'SimplePay'), ('Y', 'YandexKassa')], default='Y', max_length=2, verbose_name='Способ оплаты'), - ), - migrations.AlterField( - model_name='servicerequest', - name='status', - field=models.CharField(choices=[('S', 'Не обработан'), ('E', 'Ошибка контекста'), ('W', 'В работе'), ('F', 'Продан'), ('B', 'Не продал')], default='S', max_length=1, verbose_name='Статус'), - ), - ] diff --git a/finance/migrations/0071_auto_20170918_0811.py b/finance/migrations/0071_auto_20170918_0811.py deleted file mode 100644 index ddf5f41..0000000 --- a/finance/migrations/0071_auto_20170918_0811.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-09-18 08:11 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0045_auto_20170918_0811'), - ('finance', '0070_auto_20170424_1638'), - ] - - operations = [ - migrations.AlterField( - model_name='bill', - name='create_letters', - field=models.ManyToManyField(blank=True, editable=False, related_name='bill_create_letter', to='service.MailBox', verbose_name='Письма при создании'), - ), - migrations.AlterField( - model_name='bill', - name='finish_letters', - field=models.ManyToManyField(blank=True, editable=False, related_name='bill_finish_letter', to='service.MailBox', verbose_name='Письма завершения'), - ), - migrations.AlterField( - model_name='installment', - name='payments', - field=models.ManyToManyField(blank=True, related_name='bill_point', to='finance.Bill', verbose_name='Платежи'), - ), - migrations.AlterField( - model_name='price', - name='included', - field=models.ManyToManyField(blank=True, help_text='Если задействовать эту функцию, стандартная схема подписок будет не активна', to='courses.CourseMap', verbose_name='Включены'), - ), - migrations.AlterField( - model_name='requestalert', - name='requests', - field=models.ManyToManyField(blank=True, editable=False, to='finance.ServiceRequest', verbose_name='Количество заявок'), - ), - ] diff --git a/finance/models.py b/finance/models.py index b54a7d3..af52c73 100755 --- a/finance/models.py +++ b/finance/models.py @@ -1,99 +1,22 @@ # coding=utf-8 -import json -import urllib -import datetime -from simplejson import JSONDecodeError - from django.db import models -import django.utils.timezone -from access.models import User, TrafHistory -from lms.settings import BILL_URL, BILL_LOGIN, DOMAIN, YANDEX_SHOP_ID, YANDEX_scid -from lms.tools import random_string, gen_pay_sig, out_uri, out_date_format -from courses.models import Course, MATERIALS_TYPE, CourseMap -from management.letters import sent_created_my_self_bill, sent_new_my_self_bill, new_student, \ - pay_no_public_course, sent_new_service_request_to_out +from django.conf import settings +from courses.models import Course, Vertex from service.models import MailBox -#from courses.models import Flow - - -class Installment(models.Model): - initiative = models.ForeignKey('Price', verbose_name=u'Иниациатива') - user = models.ForeignKey(User, verbose_name=u'Пользователь') - price = models.IntegerField(verbose_name=u'Общая цена') - first_price = models.IntegerField(verbose_name=u'Первый платеж', default=0) - period = models.IntegerField(verbose_name=u'Месяцев на оплату', default=5) - date = models.DateTimeField(verbose_name=u'Дата открытия', default=datetime.datetime.now, editable=False) - f_date = models.DateField(verbose_name=u'Дата закрытия', blank=True) - rest = models.IntegerField(verbose_name=u'Остаток по задолжности', default=0) - wait = models.IntegerField(verbose_name=u'Дней в задолжности', default=0, help_text=u'Через сколько дней ' - u'предоставлять доступ после ' - u'просрочки') - expired = models.BooleanField(verbose_name=u'Просрочено', default=False) - payments = models.ManyToManyField('Bill', verbose_name=u'Платежи', blank=True, related_name='bill_point') - - def __str__(self): - return '%s %s' % (self.user, self.price) - - def __unicode__(self): - return u'%s %s' % (self.user, self.price) - - class Meta: - verbose_name = u'Рассрочка' - verbose_name_plural = u'Рассрочки' - class Price(models.Model): # Цены - freepay = models.BooleanField(verbose_name=u'Свободный счет', default=False, editable=False) - m_type = models.CharField(verbose_name=u'Тип подписки', max_length=1, choices=MATERIALS_TYPE, default='B') - key = models.CharField(verbose_name=u'Ключ доступа', max_length=255, blank=True, editable=False, null=True) - url = models.URLField(verbose_name=u'Ссылка на оплату', blank=True, null=True, editable=False) - public = models.BooleanField(verbose_name=u'Опубликовать', default=False) - title = models.CharField(verbose_name=u'Услуга', max_length=255, help_text=u'Будет показано пользователям') - cost = models.IntegerField(verbose_name=u'Цена') - course = models.ForeignKey(Course, verbose_name=u'Курс', null=True, blank=True) - description = models.TextField(verbose_name=u'Описание', help_text=u'Будет показано менеджерам') - included = models.ManyToManyField(CourseMap, verbose_name=u'Включены', blank=True, - help_text=u'Если задействовать эту функцию, стандартная схема подписок будет ' - u'не активна') - by_time = models.IntegerField(verbose_name=u'Дней доступа', default=0, blank=True, null=True, - help_text=u'По истечении этого периода доступ будет закрыт для включений.') - post_fire = models.IntegerField(verbose_name=u'Дней сгорания', default=0, - help_text=u'Предоставлении 50% скиндки на X дней. Сработает только при наличии "дней доступа"') - - def get_name(self): - return '{1} / {0}'.format(self.course.get_title(), self.title) if self.course else self.title + public = models.BooleanField(verbose_name='Опубликовать', default=False) + title = models.CharField(verbose_name='Услуга', max_length=255, help_text=u'Будет показано пользователям') + cost = models.IntegerField(verbose_name='Цена') + course = models.ForeignKey(to=Course, verbose_name='Курс', null=True, blank=True) + vertexes = models.ManyToManyField(to=Vertex, verbose_name='Список всех узлов') + description = models.TextField(verbose_name='Описание', help_text='Будет показано менеджерам') + by_time = models.IntegerField(verbose_name='Дней доступа', blank=True, null=True) def __str__(self): - return '%s / %s %s' % (self.course, self.title, self.cost) - - def __unicode__(self): - return u'%s / %s %s' % (self.course, self.title, self.cost) - - def check_points(self): - # Проверка существования всех точек курса в услуге - results = 0 - for point in CourseMap.objects.filter(course=self.course): - if not self.included.filter(id=point.id).exists(): - self.included.add(point) - results += 1 - return results - - def save(self, *args, **kwargs): - if not self.key: - self.key = random_string(length=50) - - if self.key and not self.url: - self.url = DOMAIN + '/wallet/pay/self_bill/' + self.key - - if not self.course and not self.freepay: - self.freepay = True - - elif self.course and self.freepay: - self.freepay = False - - super(Price, self).save(*args, **kwargs) + return '%s / %s %s' % (self.course.title, self.title, self.cost) class Meta: verbose_name = u'Услуга' @@ -103,391 +26,39 @@ class Price(models.Model): class Bill(models.Model): BILL_STATUSES = ( - ('W', u'Ожидание согласия'), - ('P', u'На оплате'), - ('F', u'Оплачен'), - ('C', u'Отклонен'), - ('B', u'Отклонен банком'), - ('H', u'Сгорел') + ('W', 'Ожидание согласия'), + ('P', 'На оплате'), + ('F', 'Оплачен'), + ('C', 'Отклонен'), + ('H', 'Сгорел') ) BILL_METHOD = ( - ('C', u'Наличные'), - ('H', u'JustClick'), - ('B', u'Банковский перевод'), - ('G', u'На расчетный счет'), - ('A', u'Альфа-Банк'), - ('P', u'PayPal'), - ('W', u'WebMoney'), - ('S', u'SimplePay'), - ('Y', u'YandexKassa') + ('C', 'Наличные'), + ('H', 'JustClick'), + ('A', 'Альфа-Банк'), + ('S', 'SimplePay'), + ('Y', 'YandexKassa') ) - gift = models.BooleanField(verbose_name=u'Подарок', default=False) - status = models.CharField(verbose_name=u'Статус', max_length=1, default='W', choices=BILL_STATUSES) - _method = models.CharField(verbose_name=u'Способ оплаты', max_length=2, default='Y', choices=BILL_METHOD) - price = models.CharField(verbose_name=u'Сумма', max_length=255, null=True, blank=True) - real_price = models.CharField(verbose_name=u'Полученная сумма', max_length=255, null=True, blank=True, - help_text=u'Сумма, минус комиссия') - traf_source = models.ForeignKey(TrafHistory, verbose_name=u'Обращение', blank=True, null=True, editable=False) - service = models.ForeignKey(Price, verbose_name=u'Оплачиваемая услуга') - # flow = models.ForeignKey( - # Flow, verbose_name=u'Поток', blank=True, null=True) - inside_data = models.TextField(verbose_name=u'Данные проверки', default='', blank=True, editable=False) - # - user = models.ForeignKey(User, verbose_name=u'Плательщик', related_name=u'bill_user') - opener = models.ForeignKey(User, verbose_name=u'Открывший', related_name=u'bill_opener', null=True) - manager = models.ForeignKey(User, verbose_name=u'Менеджер', related_name=u'bill_manager', editable=False, null=True) - # - source_key = models.CharField(verbose_name=u'Исходник ключа', blank=True, max_length=255, default='', editable=False) - key = models.CharField(verbose_name=u'Ключ платежа', blank=True, max_length=255, default='', editable=False) - out_id = models.CharField(verbose_name=u'ID внешнего заказа', max_length=100, blank=True, default='', editable=False) - admitad_uid = models.CharField(verbose_name=u'Ключь admitad', max_length=100, blank=True, default='', editable=False) - date = models.DateTimeField(verbose_name=u'Дата создания счета', default=django.utils.timezone.now, editable=False) - status_changed = models.DateTimeField(verbose_name=u'Дата смены статуса', default=django.utils.timezone.now, editable=False) + status = models.CharField(verbose_name='Статус', max_length=1, default='W', choices=BILL_STATUSES) + bill_method = models.CharField(verbose_name='Способ оплаты', max_length=2, default='Y', choices=BILL_METHOD) + price = models.CharField(verbose_name='Сумма', max_length=255, null=True, blank=True) + real_price = models.CharField(verbose_name='Полученная сумма', max_length=255, null=True, blank=True, + help_text='Сумма, минус комиссия') + service = models.ForeignKey(to=Price, verbose_name='Оплачиваемая услуга') + inside_data = models.TextField(verbose_name='Данные проверки', default='', blank=True, editable=False) + user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='Плательщик', related_name=u'bill_user') + opener = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='Ответственный сотрудник', null=True) + key = models.CharField(verbose_name='Ключ платежа', blank=True, max_length=255, default='', editable=False) + out_id = models.CharField(verbose_name='ID внешнего заказа', max_length=100, blank=True, default='', editable=False) comment = models.TextField(verbose_name=u'Комментарий продавца', help_text=u'Будет показано пользователю', blank=True, editable=False) - description = models.TextField(verbose_name=u'Внутренняя заметка', help_text=u'Показано только внутри', default='', - blank=True) - finish_date = models.DateTimeField(verbose_name=u'Дата завершения', blank=True, null=True, editable=False) - salt = models.CharField(verbose_name=u'Соль', max_length=100, blank=True, default=random_string, editable=False) - views = models.IntegerField(verbose_name=u'Показать напоминание', default=0, help_text=u'Количество показов ' - u'напоминания', blank=True) - start_fire = models.DateTimeField(verbose_name=u'Дата начала сгорания', blank=True, null=True) - start_fire_sent = models.BooleanField(verbose_name=u'Письмо сгорания', default=False, editable=False) - fire_date = models.DateTimeField(verbose_name=u'Дата сгорания', blank=True, null=True) - fire_date_sent = models.BooleanField(verbose_name=u'Письмо сгорания', default=False, editable=False) - modals_show = models.BooleanField(verbose_name=u'Модалки показаны', default=False, editable=False) - created_sent = models.BooleanField(verbose_name=u'Отправлено письмо сформированного счета', default=False, editable=False) - create_letters = models.ManyToManyField(MailBox, verbose_name=u'Письма при создании', blank=True, related_name='bill_create_letter', editable=False) - finish_letters = models.ManyToManyField(MailBox, verbose_name=u'Письма завершения', blank=True, related_name='bill_finish_letter', editable=False) - - def __unicode__(self): - return u'%s:%s %s %s' % (self.id, self.get_status_display(), self.user, self.manager if self.manager else '') + description = models.TextField(verbose_name='Внутренняя заметка', default='') def __str__(self): - return '%s:%s %s %s' % (self.id, self.get_status_display(), self.user, self.manager if self.manager else '') - - def get_face(self): - return { - 'id': self.id, - 'price': self.price, - 'status': {'flag': self.status, 'title': self.get_status_display()}, - 'admitad_uid': self.admitad_uid, - 'pay_url': '{0}/wallet/bill_out/{1}'.format(DOMAIN, self.salt), - 'service': self.service.key, - 'gift': self.gift, - 'title': self.get_name(), - 'user': '{0} / {1} / {2}'.format(self.user.get_full_name(), self.user.get_phone(), self.user.email), - 'manager': self.manager.get_short_name() if self.manager else '' - } - - def get_name(self): - if self.service: - return self.service.get_name() - else: - return 'Свободный счет ID:{0}'.format(self.id) - - # TODO: Что это вообще такое? Это далеко не статус - def get_status_flag(self): - if not self.service.by_time and not self.service.included.exists(): - return self.service.m_type - - elif self.service.by_time: - return 'S' - - elif self.service.included.exists(): - return 'F' - - def get_type(self): - if self.installment: - return 'I' - elif self.freeprice: - return 'F' - elif self.service: - return 'S' - - def get_pay_parameters(self): - # Получение параметров для создания подписи - parameters = { - 'sp_amount': self.price, - 'sp_description': '{0} {1} Заказ: ID{2} Менеджер: {3}'.format(self.get_name(), self.user.full_data(), self.id, self.manager.get_short_name() if self.manager else ''), - 'sp_order_id': self.id, - 'sp_outlet_id': BILL_LOGIN, - 'sp_salt': self.salt, - 'sp_user_name': self.user.get_full_name(), - 'sp_user_phone': self.user.get_phone(), - 'sp_user_contact_email': self.user.email, - 'sp_user_ip': self.user.get_ip(), # IP пользователя, совершающего платеж - 'sp_user_params': '', # Параметры, передаваемые на ResultURL по этому запросу, - } - result = {} - for key, value in parameters.items(): - if value: result[key] = value - - return result - - def get_comment(self): - return '{0} {1} Заказ: ID{2} Менеджер: {3}'.format(self.get_name(), self.user.full_data(), self.id, self.manager.get_short_name() if self.manager else '') - - def gen_robokassa_url(self): - _params = self.get_pay_parameters() - _params['sp_sig'] = gen_pay_sig(_params, method='payment', result=False) - - #for key, value in _params.items(): - # if value: result += '%s=%s&' % (key, value) - - return out_uri(BILL_URL, _params) - - def gen_yandex_data(self): - return {'url': 'https://money.yandex.ru/eshop.xml', 'data': {'shopId': YANDEX_SHOP_ID, - 'scid': YANDEX_scid, - 'orderNumber': self.id, - 'customerNumber': self.user.id, - 'sum': self.price}} - - def gen_pay_link(self): - return '{0}/wallet/bill_out/{1}'.format(DOMAIN, self.salt) - - def save(self, *args, **kwargs): - if self.price == '0' or self.gift: - self.finish_date = datetime.datetime.now() - self.status_changed = datetime.datetime.now() - self.gift = True - self.status = 'F' - - else: - if not self.comment: - self.comment = self.get_comment() - - if not self.salt: - self.salt = random_string() - - if not self.price: - self.price = self.service.cost - - if (self.service.by_time and self.finish_date) and self.service.post_fire and not self.fire_date: - self.fire_date = self.finish_date + datetime.timedelta(days=(self.service.by_time+self.service.post_fire)) - - if (self.service.by_time and self.finish_date) and not self.start_fire: - self.start_fire = self.finish_date + datetime.timedelta(days=self.service.by_time) - - if self.fire_date or self.views: - self._type = 'P' - - if not self.opener: - if self.status == 'W' and self.price != 0 and not self.created_sent: - if self.manager and self.manager.in_role in ['M', 'S'] and not self.traf_source: - for supervisor in User.objects.filter(in_role='S'): - sent_new_my_self_bill(self, supervisor.email) - self.created_sent = True - - if (self.status == 'F' or self.status == 'C') and not self.finish_date: - self.finish_date = django.utils.timezone.now() - if self.status == 'F' and not self.gift: - self.user.customer = True - self.user.save() - # Отправить письма куратору - if self.service and self.service.course: - if self.service.course.public: - for mentor in self.service.course.get_mentors(): - new_student(self, mentor.email) - else: - for mentor in self.service.course.get_mentors(): - pay_no_public_course(self, mentor.email) - - if self.manager and self.manager.in_role in ['M', 'S'] and not self.traf_source: - title = 'Оплата отклонена' if self.status == 'C' else 'Счет оплачен' - sent_created_my_self_bill(self, self.manager.email, title) - for supervisor in User.objects.filter(in_role='S'): - sent_created_my_self_bill(self, supervisor.email, title) - - super(Bill, self).save(*args, **kwargs) + return '%s:%s %s' % (self.id, self.get_status_display(), self.user) class Meta: verbose_name = u'Счет' verbose_name_plural = u'Счета' -class ServiceRequest(models.Model): - SERVICE_REQUEST_STATUS = ( - ('S', u'Не обработан'), - ('E', u'Ошибка контекста'), - ('W', u'В работе'), - ('F', u'Продан'), - ('B', u'Не продал') - ) - BY_TYPE = ( - ('S', 'Органично'), - ('B', 'Привлечен') - ) - company = models.CharField(verbose_name=u'Компания продавец', max_length=255, blank=True, default='') - product = models.CharField(verbose_name=u'Продукт', max_length=255, blank=True, default='') - service = models.CharField(verbose_name=u'Услуга', max_length=255, blank=True, default='') - name = models.CharField(verbose_name=u'Имя', max_length=255, blank=True, default='') - email = models.CharField(verbose_name=u'email', max_length=255, blank=True, default='') - phone = models.CharField(verbose_name=u'phone', max_length=255, blank=True, default='') - lead_name = models.CharField(verbose_name=u'Метка amo', max_length=255, blank=True, default='') - data = models.TextField(verbose_name=u'Данные', help_text=u'Словарь упаковывается в строку', default='') - host = models.CharField(verbose_name=u'Источник запроса', default='', editable=False, max_length=255) - _type = models.CharField(verbose_name=u'Тип запроса', max_length=1, choices=BY_TYPE, default='S') - status = models.CharField(verbose_name=u'Статус', max_length=1, choices=SERVICE_REQUEST_STATUS, default='S') - student = models.ForeignKey(User, verbose_name=u'Студент', related_name='student_user', blank=True, null=True) - course = models.ForeignKey(Course, verbose_name=u'Курс', null=True) - manager = models.ForeignKey(User, verbose_name=u'Продавец', related_name='manager_user', blank=True, null=True) - cancel_description = models.TextField(verbose_name=u'Причина отказа', default='', blank=True) - charge = models.TextField(verbose_name=u'Поручение', default='', blank=True) - date = models.DateTimeField(verbose_name=u'Дата заказа', default=datetime.datetime.now) - f_date = models.DateTimeField(verbose_name=u'Дата обаботки', blank=True, null=True) - send = models.BooleanField(verbose_name=u'Отправлен в AMO', default=False, editable=False) - send_date = models.DateTimeField(verbose_name=u'Время отправки', default=datetime.datetime.now, editable=False) - - def get_name(self): - if self.course: - return u'Доступ к курсу "%s"' % self.course.get_title() - else: - return u'Счет: ID%s' % self.id - - def get_client_name(self): - _name = '' - if self.student: - _name = self.student.get_full_name() - elif self.name: - _name = self.name - - return u'%s' % _name - - def get_lead_name(self): - if self.lead_name: - _name = self.lead_name - - else: - _product = '' - if self.product: - _product = self.product - - elif self.course: - _product = self.course.get_title() - - _name = u'%s | %s | %s' % (self.company if self.company else 'LMS', - _product, - self.service if self.service else 'Заявка на покупку') - return u'%s' % _name - - def sent_to_amo(self): - if self.data: - try: - data = json.loads(self.data.replace("'", "\"")) - except JSONDecodeError: - self.status = "E" - - else: - name = '' - phone = '' - email = '' - - if self.name: - name = self.name - elif self.student: - name = self.student.get_full_name() - - if self.phone: - phone = self.phone - elif self.student: - phone = self.student.get_phone() - - if self.email: - email = self.email - elif self.student: - email = self.student.email - - data = { - 'name': name, - 'phone': phone, - 'email': email, - 'lead_name': self.get_lead_name() - } - - if data['name'] == '': - data['name'] = 'empty' - - urllib.request.urlopen(out_uri('https://skill-box.ru/amocrm/CreateLead.php', data)) - if not self.send and self.status != 'E': - data['host'] = self.host - self.send = True - self.save() - self.send_alert(data) - - def __unicode__(self): - return u'%s %s' % (self.status, self.student) - - def __str__(self): - return u'%s %s' % (self.status, self.student) - - def send_alert(self, data): - # Отправка оповещений - # Получить почты - try: - r = RequestAlert.objects.get(title=self.lead_name) - except RequestAlert.DoesNotExists: - pass - else: - # Отправить письма - for i in r.get_mails(): - sent_new_service_request_to_out(self.lead_name, data, i) - - def save(self, *args, **kwargs): - super(ServiceRequest, self).save(*args, **kwargs) - - class Meta: - verbose_name = u'Запрос на покупку' - verbose_name_plural = u'Запросы на прокупки' - - -class RequestAlert(models.Model): - title = models.CharField(verbose_name=u'Классификатор', max_length=255, editable=False) - requests = models.ManyToManyField(ServiceRequest, verbose_name=u'Количество заявок', blank=True, editable=False) - mails = models.TextField(verbose_name=u'Список почт', blank=True, - help_text=u'Кому разослать дубли заявки. ЧЕРЕЗ ТОЧКУ С ЗАПЯТОЙ') - date = models.DateTimeField(verbose_name=u'Начало заявок', default=datetime.datetime.now, editable=False) - f_date = models.DateTimeField(verbose_name=u'Последняя заявка', default=datetime.datetime.now, editable=False) - - def __unicode__(self): - return u'%s' % self.title - - def __str__(self): - return u'%s' % self.title - - def _count(self): - return self.requests.filter(date__gte=self.date).count() - - def up_count(self, request): - # Увеличение счетчика - self.requests.add(request) - self.f_date = datetime.datetime.now() - self.save() - - def get_mails(self): - return map(lambda x: x.replace(" ", ""), str(self.mails).split(';')) if self.mails else [] - - def get_mails_str(self): - return str(self.mails) - - class Meta: - verbose_name = u'Оповещение о новых заявках' - verbose_name_plural = u'Оповещения о новых заявках' - - -class YandexKassaHistory(models.Model): - _type = models.CharField(verbose_name=u'Тип запроса', max_length=255, default='') - date = models.DateTimeField(verbose_name=u'Дата', default=datetime.datetime.now) - text = models.TextField(verbose_name=u'Текст') - result = models.CharField(verbose_name=u'Результат', max_length=255, default='') - - def __unicode__(self): - return u'%s' % out_date_format(self.date) - - def __str__(self): - return str(out_date_format(self.date)) - - class Meta: - verbose_name = u'Яндекс Касса' - verbose_name_plural = u'Яндекс Касса' diff --git a/finance/tools.py b/finance/tools.py deleted file mode 100755 index ddf2f25..0000000 --- a/finance/tools.py +++ /dev/null @@ -1,58 +0,0 @@ -# coding=utf-8 -from django.db.models import Q -import datetime -from finance.models import Bill, Price -from courses.models import CourseMap - - -def system_check_bill(token, user, theme_type='B'): - if user.is_admin: - return True - - # Проверка счета, как подписки - __point = CourseMap.objects.get(token=token) - course = __point.course - if user in course.teachers.all(): - return True - - prices = Price.objects.filter(included=__point).values_list('id', flat=True) - for b in Bill.objects.filter(service__id__in=prices, user=user, status='F'): - if b: - if b.service.by_time: - if b.finish_date + datetime.timedelta(days=b.service.by_time) > datetime.datetime.now(): - return True - else: - return False - else: - return True - - m_type = [] - if theme_type == 'B' or theme_type == 'M': - m_type = ['B', 'E', 'P'] - - elif theme_type == 'E': - m_type = ['E', 'P'] - - elif theme_type == 'P': - m_type = ['P'] - - if m_type: - bill = Bill.objects.filter(service__included=None, service__course=course, user=user, status='F', service__m_type__in=m_type) - if bill.exists(): - check = [] - for b in bill: - if b.service.by_time: - check.append(b) - if not check: - return True - - else: - result = False - for b in check: - if b.finish_date + datetime.timedelta(days=b.service.by_time) > datetime.datetime.now(): - result = True - if result: - return True - else: - return False - return False diff --git a/id_dsa b/id_dsa deleted file mode 100644 index e8620c0..0000000 --- a/id_dsa +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN DSA PRIVATE KEY----- -MIIBugIBAAKBgQCR1vuOlkqMNsVadJx5Qv3KJMdmESzOFOj2kPSry0O/oJCcofwc -w1Hde9LpXYAnLZgiOLOjt7I8Gn6XDYg3tKoqfRwGw1z1DUajtR1I4v7CtYABKz7p -h+xLezURE3KEG6IKp5NON52UVw/KtbKMSE12f36eaPaiaYx1d7QbNJsHHwIVAIeq -ZNhmlMcHoS5Vfs1Jkq5Fdc7BAoGARRHIj1pMov5dfGjNp9FnrfxMjzZ45CwuINTH -ypp68wHRtWbliN8d9IJZiDd60d8/NLjmh9okx0o7CquPrgAbH3mezZFokpT7M5EE -Cc72ET1q6sE7i/Vk6n09bGTMFOUyYJUCUpSqsPnv/XUiye41WWUjzNNjHGL9hsd6 -OJZyUtACgYA2GXfj1XQoReUd7flfCajP/AXNsuSl+hqy0qplfDUSn+izB4/QYExA -S20HgL4fSgmjIPgaUxT45D9GPQNUJYP4GU6eXQE+nqo2+4rUur5kN/l1z239+GO1 -QdNM98jBI0+81CM5k3Bm42XhIxEVXpbzejvoPWezD3VwsNFDv36vvwIUREklWoor -8bfF3ZIZX/eVPRZtLZU= ------END DSA PRIVATE KEY----- diff --git a/id_dsa.pub b/id_dsa.pub deleted file mode 100644 index b077b90..0000000 --- a/id_dsa.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-dss AAAAB3NzaC1kc3MAAACBAJHW+46WSow2xVp0nHlC/cokx2YRLM4U6PaQ9KvLQ7+gkJyh/BzDUd170uldgCctmCI4s6O3sjwafpcNiDe0qip9HAbDXPUNRqO1HUji/sK1gAErPumH7Et7NRETcoQbogqnk043nZRXD8q1soxITXZ/fp5o9qJpjHV3tBs0mwcfAAAAFQCHqmTYZpTHB6EuVX7NSZKuRXXOwQAAAIBFEciPWkyi/l18aM2n0Wet/EyPNnjkLC4g1MfKmnrzAdG1ZuWI3x30glmIN3rR3z80uOaH2iTHSjsKq4+uABsfeZ7NkWiSlPszkQQJzvYRPWrqwTuL9WTqfT1sZMwU5TJglQJSlKqw+e/9dSLJ7jVZZSPM02McYv2Gx3o4lnJS0AAAAIA2GXfj1XQoReUd7flfCajP/AXNsuSl+hqy0qplfDUSn+izB4/QYExAS20HgL4fSgmjIPgaUxT45D9GPQNUJYP4GU6eXQE+nqo2+4rUur5kN/l1z239+GO1QdNM98jBI0+81CM5k3Bm42XhIxEVXpbzejvoPWezD3VwsNFDv36vvw== root@abaebbb2fa1f diff --git a/img_creator/#378-005-111-1211313167.png b/img_creator/#378-005-111-1211313167.png deleted file mode 100644 index 50908a3..0000000 Binary files a/img_creator/#378-005-111-1211313167.png and /dev/null differ diff --git a/img_creator/#378-005-111-6839836384.png b/img_creator/#378-005-111-6839836384.png deleted file mode 100644 index 8062fd9..0000000 Binary files a/img_creator/#378-005-111-6839836384.png and /dev/null differ diff --git a/img_creator/#378-005-112-1318768199.png b/img_creator/#378-005-112-1318768199.png deleted file mode 100644 index 855fba8..0000000 Binary files a/img_creator/#378-005-112-1318768199.png and /dev/null differ diff --git a/img_creator/#378-005-112-3864050819.png b/img_creator/#378-005-112-3864050819.png deleted file mode 100644 index c799207..0000000 Binary files a/img_creator/#378-005-112-3864050819.png and /dev/null differ diff --git a/img_creator/#378-005-113-1567688997.png b/img_creator/#378-005-113-1567688997.png deleted file mode 100644 index 787d42a..0000000 Binary files a/img_creator/#378-005-113-1567688997.png and /dev/null differ diff --git a/img_creator/#378-005-113-2446105110.png b/img_creator/#378-005-113-2446105110.png deleted file mode 100644 index 5bcb811..0000000 Binary files a/img_creator/#378-005-113-2446105110.png and /dev/null differ diff --git a/img_creator/#378-005-113-6643879642.png b/img_creator/#378-005-113-6643879642.png deleted file mode 100644 index 5bcb811..0000000 Binary files a/img_creator/#378-005-113-6643879642.png and /dev/null differ diff --git a/img_creator/#378-005-113-6906098345.png b/img_creator/#378-005-113-6906098345.png deleted file mode 100644 index 787d42a..0000000 Binary files a/img_creator/#378-005-113-6906098345.png and /dev/null differ diff --git a/img_creator/#378-005-114-2760720588.png b/img_creator/#378-005-114-2760720588.png deleted file mode 100644 index 16ba4b9..0000000 Binary files a/img_creator/#378-005-114-2760720588.png and /dev/null differ diff --git a/img_creator/#378-005-114-4144003764.png b/img_creator/#378-005-114-4144003764.png deleted file mode 100644 index 16ba4b9..0000000 Binary files a/img_creator/#378-005-114-4144003764.png and /dev/null differ diff --git a/img_creator/#378-005-114-5045779647.png b/img_creator/#378-005-114-5045779647.png deleted file mode 100644 index 36db305..0000000 Binary files a/img_creator/#378-005-114-5045779647.png and /dev/null differ diff --git a/img_creator/#378-005-114-8811601888.png b/img_creator/#378-005-114-8811601888.png deleted file mode 100644 index 36db305..0000000 Binary files a/img_creator/#378-005-114-8811601888.png and /dev/null differ diff --git a/img_creator/#378-005-115-8424668311.png b/img_creator/#378-005-115-8424668311.png deleted file mode 100644 index 4f878a6..0000000 Binary files a/img_creator/#378-005-115-8424668311.png and /dev/null differ diff --git a/img_creator/#378-005-115-8807415204.png b/img_creator/#378-005-115-8807415204.png deleted file mode 100644 index 01286d0..0000000 Binary files a/img_creator/#378-005-115-8807415204.png and /dev/null differ diff --git a/img_creator/#378-005-116-0406189146.png b/img_creator/#378-005-116-0406189146.png deleted file mode 100644 index c7d631b..0000000 Binary files a/img_creator/#378-005-116-0406189146.png and /dev/null differ diff --git a/img_creator/#378-005-116-9488283735.png b/img_creator/#378-005-116-9488283735.png deleted file mode 100644 index d9b4524..0000000 Binary files a/img_creator/#378-005-116-9488283735.png and /dev/null differ diff --git a/img_creator/August-21,-2016-3044848893.png b/img_creator/August-21,-2016-3044848893.png deleted file mode 100644 index 1bde310..0000000 Binary files a/img_creator/August-21,-2016-3044848893.png and /dev/null differ diff --git a/img_creator/August-21,-2016-4246492329.png b/img_creator/August-21,-2016-4246492329.png deleted file mode 100644 index a31a47d..0000000 Binary files a/img_creator/August-21,-2016-4246492329.png and /dev/null differ diff --git a/img_creator/August-21,-2016-5575980530.png b/img_creator/August-21,-2016-5575980530.png deleted file mode 100644 index a31a47d..0000000 Binary files a/img_creator/August-21,-2016-5575980530.png and /dev/null differ diff --git a/img_creator/August-21,-2016-7389762735.png b/img_creator/August-21,-2016-7389762735.png deleted file mode 100644 index 1bde310..0000000 Binary files a/img_creator/August-21,-2016-7389762735.png and /dev/null differ diff --git a/img_creator/August-28,-2016-1433582149.png b/img_creator/August-28,-2016-1433582149.png deleted file mode 100644 index 287ea49..0000000 Binary files a/img_creator/August-28,-2016-1433582149.png and /dev/null differ diff --git a/img_creator/August-28,-2016-1631268863.png b/img_creator/August-28,-2016-1631268863.png deleted file mode 100644 index 287ea49..0000000 Binary files a/img_creator/August-28,-2016-1631268863.png and /dev/null differ diff --git a/img_creator/August-28,-2016-3296039426.png b/img_creator/August-28,-2016-3296039426.png deleted file mode 100644 index 1241ec4..0000000 Binary files a/img_creator/August-28,-2016-3296039426.png and /dev/null differ diff --git a/img_creator/August-28,-2016-3608188751.png b/img_creator/August-28,-2016-3608188751.png deleted file mode 100644 index 1241ec4..0000000 Binary files a/img_creator/August-28,-2016-3608188751.png and /dev/null differ diff --git a/img_creator/August-28,-2016-4727225138.png b/img_creator/August-28,-2016-4727225138.png deleted file mode 100644 index 1241ec4..0000000 Binary files a/img_creator/August-28,-2016-4727225138.png and /dev/null differ diff --git a/img_creator/August-28,-2016-6612888819.png b/img_creator/August-28,-2016-6612888819.png deleted file mode 100644 index 287ea49..0000000 Binary files a/img_creator/August-28,-2016-6612888819.png and /dev/null differ diff --git a/img_creator/August-28,-2016-7363942234.png b/img_creator/August-28,-2016-7363942234.png deleted file mode 100644 index 287ea49..0000000 Binary files a/img_creator/August-28,-2016-7363942234.png and /dev/null differ diff --git a/img_creator/August-28,-2016-8914361018.png b/img_creator/August-28,-2016-8914361018.png deleted file mode 100644 index 1241ec4..0000000 Binary files a/img_creator/August-28,-2016-8914361018.png and /dev/null differ diff --git a/img_creator/August-30,-2016-2039943489.png b/img_creator/August-30,-2016-2039943489.png deleted file mode 100644 index 5a0394b..0000000 Binary files a/img_creator/August-30,-2016-2039943489.png and /dev/null differ diff --git a/img_creator/August-30,-2016-5477185521.png b/img_creator/August-30,-2016-5477185521.png deleted file mode 100644 index bc08407..0000000 Binary files a/img_creator/August-30,-2016-5477185521.png and /dev/null differ diff --git a/img_creator/September-1,-2016-0625090677.png b/img_creator/September-1,-2016-0625090677.png deleted file mode 100644 index 1eb057e..0000000 Binary files a/img_creator/September-1,-2016-0625090677.png and /dev/null differ diff --git a/img_creator/September-1,-2016-5166098172.png b/img_creator/September-1,-2016-5166098172.png deleted file mode 100644 index 54368ad..0000000 Binary files a/img_creator/September-1,-2016-5166098172.png and /dev/null differ diff --git "a/img_creator/arsen\narustamyan-2987814416.png" "b/img_creator/arsen\narustamyan-2987814416.png" deleted file mode 100644 index d09f15a..0000000 Binary files "a/img_creator/arsen\narustamyan-2987814416.png" and /dev/null differ diff --git "a/img_creator/arsen\narustamyan-7063418714.png" "b/img_creator/arsen\narustamyan-7063418714.png" deleted file mode 100644 index 7c2229c..0000000 Binary files "a/img_creator/arsen\narustamyan-7063418714.png" and /dev/null differ diff --git "a/img_creator/mihail\ngostischev-5524646284.png" "b/img_creator/mihail\ngostischev-5524646284.png" deleted file mode 100644 index f8a4c76..0000000 Binary files "a/img_creator/mihail\ngostischev-5524646284.png" and /dev/null differ diff --git "a/img_creator/mihail\ngostischev-7702568953.png" "b/img_creator/mihail\ngostischev-7702568953.png" deleted file mode 100644 index db54e04..0000000 Binary files "a/img_creator/mihail\ngostischev-7702568953.png" and /dev/null differ diff --git "a/img_creator/nikita\nizyumov-0398549358.png" "b/img_creator/nikita\nizyumov-0398549358.png" deleted file mode 100644 index f4e94d5..0000000 Binary files "a/img_creator/nikita\nizyumov-0398549358.png" and /dev/null differ diff --git "a/img_creator/nikita\nizyumov-0400541932.png" "b/img_creator/nikita\nizyumov-0400541932.png" deleted file mode 100644 index f4e94d5..0000000 Binary files "a/img_creator/nikita\nizyumov-0400541932.png" and /dev/null differ diff --git "a/img_creator/nikita\nizyumov-7930433899.png" "b/img_creator/nikita\nizyumov-7930433899.png" deleted file mode 100644 index 54cfe2b..0000000 Binary files "a/img_creator/nikita\nizyumov-7930433899.png" and /dev/null differ diff --git "a/img_creator/nikita\nizyumov-9463151998.png" "b/img_creator/nikita\nizyumov-9463151998.png" deleted file mode 100644 index 54cfe2b..0000000 Binary files "a/img_creator/nikita\nizyumov-9463151998.png" and /dev/null differ diff --git "a/img_creator/tat'yana\navdeeva-0838390264.png" "b/img_creator/tat'yana\navdeeva-0838390264.png" deleted file mode 100644 index 7ca7097..0000000 Binary files "a/img_creator/tat'yana\navdeeva-0838390264.png" and /dev/null differ diff --git "a/img_creator/tat'yana\navdeeva-1481885440.png" "b/img_creator/tat'yana\navdeeva-1481885440.png" deleted file mode 100644 index 7ca7097..0000000 Binary files "a/img_creator/tat'yana\navdeeva-1481885440.png" and /dev/null differ diff --git "a/img_creator/tat'yana\navdeeva-6095886706.png" "b/img_creator/tat'yana\navdeeva-6095886706.png" deleted file mode 100644 index 8d9fbaa..0000000 Binary files "a/img_creator/tat'yana\navdeeva-6095886706.png" and /dev/null differ diff --git "a/img_creator/tat'yana\navdeeva-8198233781.png" "b/img_creator/tat'yana\navdeeva-8198233781.png" deleted file mode 100644 index 8d9fbaa..0000000 Binary files "a/img_creator/tat'yana\navdeeva-8198233781.png" and /dev/null differ diff --git "a/img_creator/vitaliy\nbogdanov-2981373144.png" "b/img_creator/vitaliy\nbogdanov-2981373144.png" deleted file mode 100644 index fdd498e..0000000 Binary files "a/img_creator/vitaliy\nbogdanov-2981373144.png" and /dev/null differ diff --git "a/img_creator/vitaliy\nbogdanov-7355431101.png" "b/img_creator/vitaliy\nbogdanov-7355431101.png" deleted file mode 100644 index bae11df..0000000 Binary files "a/img_creator/vitaliy\nbogdanov-7355431101.png" and /dev/null differ diff --git "a/img_creator/vitaliy\nbogdanov-8711548688.png" "b/img_creator/vitaliy\nbogdanov-8711548688.png" deleted file mode 100644 index fdd498e..0000000 Binary files "a/img_creator/vitaliy\nbogdanov-8711548688.png" and /dev/null differ diff --git "a/img_creator/vitaliy\nbogdanov-9743594303.png" "b/img_creator/vitaliy\nbogdanov-9743594303.png" deleted file mode 100644 index bae11df..0000000 Binary files "a/img_creator/vitaliy\nbogdanov-9743594303.png" and /dev/null differ diff --git a/journals/admin.py b/journals/admin.py index 8168ece..fe75dec 100755 --- a/journals/admin.py +++ b/journals/admin.py @@ -1,257 +1,10 @@ #! coding: utf-8 from django.contrib import admin -from django.db.models import Q -from django.http import HttpResponse -from access.models import User -from journals.models import TeacherJ, LessonJ, HomeworkJ, \ - ExamJ, AchievementJ, HomeworkTry, \ - ExamTry, CourseThemeJ, DiplomaJ, ReportDepth,\ - Thread, Journal, Action +from journals.models import Thread, Journal, Action admin.site.register(Thread) admin.site.register(Journal) -admin.site.register(Action) - - -def export_xls(modeladmin, request, queryset): - import xlwt - response = HttpResponse(content_type='application/ms-excel') - response['Content-Disposition'] = 'attachment; filename=report.xls' - wb = xlwt.Workbook(encoding='utf-8') - ws = wb.add_sheet("MyModel") - - row_num = 0 - - columns = [ - (u"ID Студента", 3000), - (u"ФИО", 6000), - (u"Email", 8000), - (u'Порядок темы урока', 1000), - (u'Тема урока', 16000), - (u'Порядок урока', 1000), - (u"Урок", 16000), - (u"ДЗ", 16000), - (u'Тема ДЗ', 16000), - (u'Порядок темы ДЗ', 1000), - (u"Преподаватель", 6000), - (u"Курс", 6000), - ] - - font_style = xlwt.XFStyle() - font_style.font.bold = True - - for col_num in range(len(columns)): - ws.write(row_num, col_num, columns[col_num][0], font_style) - # set column width - ws.col(col_num).width = columns[col_num][1] - - font_style = xlwt.XFStyle() - font_style.alignment.wrap = 1 - - for obj in queryset: - row_num += 1 - row = [ - obj.student.id if obj.student else '-', - obj.student.get_full_name() if obj.student else '-', - obj.student.email if obj.student else '-', - obj.lesson.theme.sort if obj.lesson else '-', - obj.lesson.theme.get_title() if obj.lesson else '-', - obj.lesson.sort if obj.lesson else '-', - obj.lesson.get_title() if obj.lesson else '-', - obj.homework.get_title() if obj.homework else '-', - obj.homework.theme.get_title() if obj.homework else '-', - obj.homework.theme.sort if obj.homework else '-', - obj.teacher.get_short_name() if obj.teacher else '-', - obj.course.get_title() if obj.course else '-', - ] - for col_num in range(len(row)): - ws.write(row_num, col_num, row[col_num], font_style) - - wb.save(response) - return response - - -export_xls.short_description = u"Export XLS" - - -def export_hw_journals(modeladmin, request, queryset): - import xlwt - response = HttpResponse(content_type='application/ms-excel') - response['Content-Disposition'] = 'attachment; filename=report.xls' - wb = xlwt.Workbook(encoding='utf-8') - ws = wb.add_sheet("MyModel") - - row_num = 0 - - columns = [ - (u"ID Студента", 3000), - (u"ФИО", 6000), - (u"Email", 8000), - (u'Порядок темы', 1000), - (u'Тема', 16000), - (u'Преподаватель', 1000) - ] - - font_style = xlwt.XFStyle() - font_style.font.bold = True - - for col_num in range(len(columns)): - ws.write(row_num, col_num, columns[col_num][0], font_style) - # set column width - ws.col(col_num).width = columns[col_num][1] - - font_style = xlwt.XFStyle() - font_style.alignment.wrap = 1 - - for obj in queryset: - row_num += 1 - row = [ - obj.student.id if obj.student else '-', - obj.student.get_full_name() if obj.student else '-', - obj.student.email if obj.student else '-', - obj.material.theme.sort if obj.material else '-', - obj.material.theme.get_title() if obj.material else '-', - obj.teacher.get_full_name() if obj.teacher else '-' - ] - for col_num in range(len(row)): - ws.write(row_num, col_num, row[col_num], font_style) - - wb.save(response) - return response - - -export_xls.short_description = u"Отчет по сдаче" - - -class TeacherJAdmin(admin.ModelAdmin): - list_display = ('get_student_name', 'get_student_email', 'lesson', 'homework', 'teacher', 'course', 'start_date', 'progress', ) - search_fields = ['current_token', 'student__email', 'student__id'] - list_filter = ['course', 'status'] - filter_horizontal = ('waiting', ) - actions = [export_xls] - - def get_student_email(self, instance): - return instance.student.email if instance.student else '' - - def get_student_name(self, instance): - return instance.student.get_full_name() if instance.student else '' - - def formfield_for_foreignkey(self, db_field, request=None, **kwargs): - if db_field.name == "teacher": - kwargs["queryset"] = User.objects.filter(in_role='T') - return super(TeacherJAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) - -admin.site.register(TeacherJ, TeacherJAdmin) - - -class LessonJAdmin(admin.ModelAdmin): - list_display = ('student', 'material', 'parent', 'success', 'date', 'f_date',) - list_filter = ['success', 'material__course', 'date', 'f_date'] - raw_id_fields = ['parent', 'student'] - search_fields = ['student__id', 'student__email'] - - def formfield_for_foreignkey(self, db_field, request=None, **kwargs): - if db_field.name == "teacher": - kwargs["queryset"] = User.objects.filter(in_role='T') - return super(LessonJAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) - -admin.site.register(LessonJ, LessonJAdmin) - - -class HomeworkJAdmin(admin.ModelAdmin): - list_display = ('student', 'parent', 'get_courese_title', 'success', 'date', 'f_date', 'teacher', 'get_url', ) - raw_id_fields = ['student', 'parent'] - list_filter = ['material__course', 'success', 'date', 'f_date'] - search_fields = ['student__email', 'student__id'] - actions = [export_hw_journals] - - def get_courese_title(self, instance): - return instance.material.course.get_title() - - def formfield_for_foreignkey(self, db_field, request=None, **kwargs): - if db_field.name == "teacher": - kwargs["queryset"] = User.objects.filter(in_role='T') - return super(HomeworkJAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) - -admin.site.register(HomeworkJ, HomeworkJAdmin) - - -class ExamJAdmin(admin.ModelAdmin): - list_display = ('student', 'date', 'f_date', 'success', 'teacher', 'get_url', ) - list_filter = ['material__course', 'success', 'date', 'f_date'] - search_fields = ['student__email'] - - def formfield_for_foreignkey(self, db_field, request=None, **kwargs): - if db_field.name == "teacher": - kwargs["queryset"] = User.objects.filter(in_role__in=['T']) - return super(ExamJAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) - -admin.site.register(ExamJ, ExamJAdmin) - - -class HomeworkTryAdmin(admin.ModelAdmin): - list_display = ('student', 'get_status_flag', 'material', 'date', 'f_date', 'success', 'expired', 'teacher', 'parent', 'get_url',) - search_fields = ['student__email', 'parent__id', 'student__id'] - list_filter = ('material__course', 'expired', 'date', 'f_date', ) - raw_id_fields = ['student', 'parent'] - filter_horizontal = ['comments'] - - def formfield_for_foreignkey(self, db_field, request=None, **kwargs): - if db_field.name == "teacher": - kwargs["queryset"] = User.objects.filter(in_role__in=['T']) - return super(HomeworkTryAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) - - def get_status_flag(self, instance): - return instance.get_status()['title'] - -admin.site.register(HomeworkTry, HomeworkTryAdmin) - - -class ExamTryAdmin(admin.ModelAdmin): - list_display = ('parent', 'get_status_flag', 'student', 'date', 'f_date', 'success', 'expired', 'teacher') - search_fields = ['student__email', 'parent__id', 'student__id'] - list_filter = ('material__course', 'expired', 'date', 'f_date') - raw_id_fields = ['student', 'parent'] - - def formfield_for_foreignkey(self, db_field, request=None, **kwargs): - if db_field.name == "teacher": - kwargs["queryset"] = User.objects.filter(in_role__in=['T']) - return super(ExamTryAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) - - def get_status_flag(self, instance): - return instance.get_status()['title'] - -admin.site.register(ExamTry, ExamTryAdmin) - - -class CourseThemeJAdmin(admin.ModelAdmin): - list_display = ('id', 'material', 'parent', 'student', 'date', 'f_date', ) - search_fields = ['student__email', 'student__id', 'material__title', 'material__id'] - list_filter = ['material__course', 'success', 'date', 'f_date'] - -admin.site.register(CourseThemeJ, CourseThemeJAdmin) - - -class AchievementJAdmin(admin.ModelAdmin): - list_display = ('title', 'student', 'achievement', 'date', 'got',) - -admin.site.register(AchievementJ, AchievementJAdmin) - - -class DiplomaJAdmin(admin.ModelAdmin): - list_display = ('parent', 'material', 'student', 'date', 'key', 'out_image', 'in_image', 'gen') - search_fields = ('key', 'student__email', 'student__fname', 'student__name', 'student__oname') - list_filter = ['material'] - - -admin.site.register(DiplomaJ, DiplomaJAdmin) - - -class ReportDepthAdmin(admin.ModelAdmin): - list_display = ('token', 'student', 'teacher', 'course', 's_date', 'f_date', 'flag') - - -admin.site.register(ReportDepth, ReportDepthAdmin) +admin.site.register(Action) \ No newline at end of file diff --git a/journals/api.py b/journals/api.py deleted file mode 100755 index 78eef8c..0000000 --- a/journals/api.py +++ /dev/null @@ -1,154 +0,0 @@ -# coding=utf-8 -from access.models import User -from lms.decors import api_decor -import simplejson as json -# Процесс добавления журналов через API -# Добавление проходит по -from lms.settings import SECRET_KEY -from courses.models import Course, Lesson, Homework, Exam -from journals.models import TeacherJ, LessonJ, ExamJ, HomeworkJ - - -def new_index(map, model, key, obj): - if str(key) in map[model]: - return obj.objects.get(id=map[model][str(key)]) - return None - - -@api_decor(without_auth=False, need_keys=['id', 'type'], method='POST', check_request=True) -def check_materials_access(request, context): - return context - - -@api_decor(without_auth=True, - need_keys=['student', 'lesson', 'status', 'start_date', 'f_date', 'lesson_old_id', 'student_old_id']) -def open_lj(request, context): - _fixture = json.load(open('../migrate/fixtures/pk_maps.json')) - if request.POST['token'] == SECRET_KEY: - l = new_index(_fixture, 'courses.lesson', request.POST['lesson'], Lesson) if request.POST[ - 'lesson_old_id'] else Lesson.objects.get(id=request.POST['lesson']) - s = new_index(_fixture, 'access.user', request.POST['student'], User) if request.POST[ - 'student_old_id'] else User.objects.get(id=request.POST['student']) - lj = LessonJ.objects.get_or_create(material=l, student=s) - if request.POST['status'] == 'F': - lj.saw_this() - lj.f_date = request.POST['f_date'] - lj.date = request.POST['start_date'] - elif request.POST['status'] == 'A': - lj.open_material() - lj.date = request.POST['start_date'] - elif request.POST['status'] == 'N': - lj.date = None - lj.f_date = None - lj.success = False - lj.save() - return context - - -@api_decor(without_auth=True, - need_keys=['student', 'homework', 'status', 'start_date', 'f_date', 'token', 'comments', 'student_old_id', - 'homework_old_id']) -def set_ht(request, context): - # Добавить попытку и все ее комментарии - _fixture = json.load(open('../migrate/fixtures/pk_maps.json')) - if request.POST['token'] == SECRET_KEY: - t = new_index(_fixture, 'access.user', request.POST['teacher'], User) if request.POST[ - 'teacher_old_id'] else User.objects.get(id=request.POST['teaceher']) - s = new_index(_fixture, 'access.user', request.POST['student'], User) if request.POST[ - 'student_old_id'] else User.objects.get(id=request.POST['student']) - c = new_index(_fixture, 'courses.course', request.POST['course'], Course) if request.POST[ - 'course_old_id'] else Course.objects.get(id=request.POST['course']) - tj = TeacherJ.objects.get_or_create(student=s, course=c) - tj.teacher = t - tj.save() - return context - - -@api_decor(without_auth=True, - need_keys=['token', 'teacher', 'teacher_old_id', 'student', 'student_old_id', 'course', 'course_old_id']) -def set_teacher(request, context): - _fixture = json.load(open('../migrate/fixtures/pk_maps.json')) - if request.POST['token'] == SECRET_KEY: - t = new_index(_fixture, 'access.user', request.POST['teacher'], User) if request.POST[ - 'teacher_old_id'] else User.objects.get(id=request.POST['teaceher']) - s = new_index(_fixture, 'access.user', request.POST['student'], User) if request.POST[ - 'student_old_id'] else User.objects.get(id=request.POST['student']) - c = new_index(_fixture, 'courses.course', request.POST['course'], Course) if request.POST[ - 'course_old_id'] else Course.objects.get(id=request.POST['course']) - tj = TeacherJ.objects.get_or_create(student=s, course=c) - tj.teacher = t - tj.save() - return context - - -@api_decor(without_auth=True, need_keys=['id', 'type'], method='GET', check_request=True) -def check_jaccess(request, context): - if request.user.is_authenticated(): - if request.user.is_admin: - context['code'] = '1' - return context - - context['code'] = '0' - _type = request.GET['type'] - journal = None - if _type == 'lesson': - journal = LessonJ.objects.filter(material=Lesson.objects.get(id=request.GET['id']), student=request.user) - if _type == 'homework': - journal = HomeworkJ.objects.filter(material=Homework.objects.get(id=request.GET['id']), student=request.user) - if _type == 'exam': - journal = ExamJ.objects.filter(material=Exam.objects.get(id=request.GET['id']), student=request.user) - - if journal and journal.exists(): - if request.user in journal[0].material.course.teachers.all(): - context['code'] = '1' - return context - - _before = journal.first().get_before() - if journal.first().get_status_flag() != 'N': - context['code'] = '1' - elif journal.first().get_status_flag() == 'N': - if _before['journal'].get_status_flag() == 'F': - journal.first().open_material() - - return context - - -@api_decor(without_auth=False, need_keys=['id'], method='GET', check_request=True) -def check_exists_jhomework(request, context): - try: - HomeworkJ.objects.get(id=request.GET['id'], f_date=None) - except HomeworkJ.DoesNotExist: - context['code'] = '0' - else: - context['code'] = '1' - return context - - -@api_decor(without_auth=False, need_keys=['id'], method='GET', check_request=True) -def check_exists_jexam(request, context): - try: - ExamJ.objects.get(id=request.GET['id'], f_date=None) - except ExamJ.DoesNotExist: - context['code'] = '0' - else: - context['code'] = '1' - return context - - -@api_decor(without_auth=True, need_keys=['id', 'type'], method='GET', check_request=True) -def check_block(request, context): - if request.user.is_authenticated(): - context['code'] = '0' - _type = request.GET['type'] - journal = None - if _type == 'lesson': - journal = LessonJ.objects.filter(material=Lesson.objects.get(id=request.GET['id']), student=request.user) - if _type == 'homework': - journal = HomeworkJ.objects.filter(material=Homework.objects.get(id=request.GET['id']), student=request.user) - if _type == 'exam': - journal = ExamJ.objects.filter(material=Exam.objects.get(id=request.GET['id']), student=request.user) - - if journal and journal.exists(): - context['code'] = '0' if journal.first().material.theme.empty else '1' - - return context diff --git a/journals/check_switch b/journals/check_switch deleted file mode 100644 index d00491f..0000000 --- a/journals/check_switch +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/journals/default_threads.py b/journals/default_threads.py index 78e472a..a84bf9b 100644 --- a/journals/default_threads.py +++ b/journals/default_threads.py @@ -1,98 +1,13 @@ import os, sys, django sys.path.append("../") -os.environ['PG_PORT_5432_TCP_ADDR'] = '127.0.0.1' os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") django.setup() -from management.models import Comment -from django.contrib.contenttypes.models import ContentType -from courses.models import Vertex, Lesson -from access.models import ActiveObject -from journals.models import Thread, HomeworkTry, ExamTry, Journal, Action, \ - LessonJ, CourseThemeJ, TeacherJ, HomeworkJ, ExamJ -from library.models import Article -from django.contrib.auth import get_user_model -from django.db import transaction - - -def transaction_decorator(function_to_decorate): - def wrap(*args, **kwargs): - transaction.set_autocommit(False) - try: - result = function_to_decorate(*args, **kwargs) - except Exception as ex: - transaction.rollback() - raise ex - else: - transaction.commit() - return result - finally: - transaction.set_autocommit(True) - - return wrap - - -@transaction_decorator -def start_end_object(instance, pref, student, course, start_th_user, end_th_user): - for thj in instance.objects.filter(date__isnull=False, student=student, material__course__in=course): - obj_id = pref + str(thj.material.id) - vertex = Vertex.manager.get(old_id=obj_id) - - Journal.objects.get_or_create( - thread=start_th_user, - user=student, - content_type=vertex_type, - date=thj.date, - object_id=vertex.id, - action_type=start_action, - ) - - if thj.f_date: - Journal.objects.get_or_create( - thread=end_th_user, - user=student, - content_type=vertex_type, - date=thj.f_date, - object_id=vertex.id, - action_type=end_action, - ) - - -def task_obj_try(instance, pref, teacher, task_thread): - for obj_try in instance.objects.filter(teacher=teacher): - vt_id = Vertex.manager.get(old_id=pref + str(obj_try.material.id)).id - s_t_thread, _is_create = Thread.objects.get_or_create( - key='task_%d__student_%d__teacher_%d' % (vt_id, obj_try.student.id, obj_try.teacher.id), - is_staff=False, - ) - s_t_thread.parent.add(task_thread) - s_t_thread.subscribers.add(obj_try.student) - s_t_thread.subscribers.add(obj_try.teacher) - - user = obj_try.teacher - action = Action.objects.get(name='no') - - if obj_try.success: - action = Action.objects.get(name='yes') - - if obj_try.f_date is None: - user = obj_try.student - action = Action.objects.get(name='try') - - Journal.objects.get_or_create( - thread=s_t_thread, - user=user, - content_type=vertex_type, - date=obj_try.date, - object_id=vt_id, - action_type=action - ) - -# -# Выше - хелперы, ниже - основная часть программы -# +from journals.models import Thread +from django.contrib.auth import get_user_model +from lms.global_decorators import transaction_decorator @transaction_decorator @@ -128,48 +43,40 @@ def main_threads(): management_thread.parent.add(admin_thread) - res['library_thread'], _is_create = Thread.objects.get_or_create( - key='Library', - text='Тред <<Библиотека>> сюда прилетает вся инфа по статьям', + support_thread, _is_create = Thread.objects.get_or_create( + key='Support', + text='Тред сапортов, занимаются поддержкой клиента', is_staff=True, ) - res['library_thread'].parent.add(management_thread) - - start_and_end_thread, _is_create = Thread.objects.get_or_create( - key='Start_and_end', - text='Тред начала и завершения прохождения какого-либо этапа обучения', - is_staff=True, - ) + for i in get_user_model().objects.filter(email__in=support_list): + support_thread.subscribers.add(i) - start_and_end_thread.parent.add(management_thread) + support_thread.parent.add(admin_thread) - res['start_thread'], _is_create = Thread.objects.get_or_create( - key='Start', - text='Тред начала прохождения какого-либо этапа обучения', + res['library_thread'], _is_create = Thread.objects.get_or_create( + key='Library', + text='Тред <<Библиотека>> сюда прилетает вся инфа по статьям', is_staff=True, ) - res['start_thread'].parent.add(start_and_end_thread) + res['library_thread'].parent.add(management_thread) - res['end_thread'], _is_create = Thread.objects.get_or_create( - key='End', - text='Тред окончания прохождения какого-либо этапа обучения', + course_thread, _is_create = Thread.objects.get_or_create( + key='Course_thread', + text='Тред курсов', is_staff=True, ) - res['end_thread'].parent.add(start_and_end_thread) + course_thread.parent.add(management_thread) - support_thread, _is_create = Thread.objects.get_or_create( - key='Support', - text='Тред сапортов, занимаются поддержкой клиента', + start_and_end_thread, _is_create = Thread.objects.get_or_create( + key='Start_and_end', + text='Тред начала и завершения прохождения какого-либо этапа обучения', is_staff=True, ) - support_thread.parent.add(admin_thread) - - for i in get_user_model().objects.filter(email__in=support_list): - support_thread.subscribers.add(i) + start_and_end_thread.parent.add(course_thread) res['task_thread'], _is_create = Thread.objects.get_or_create( key='Tasks', @@ -179,196 +86,8 @@ def main_threads(): res['task_thread'].parent.add(support_thread) - res['comment_thread'], _is_create = Thread.objects.get_or_create( - key='Comments', - text='Сюда пободают все лайки дизлайки и так далее по коментам', - is_staff=True, - ) - - res['comment_thread'].parent.add(support_thread) - return res -@transaction_decorator -def create_article_journals(library_thread): - print("Создание журналов для статей") - for article in Article.objects.all(): - article_kwarg = { - 'content_type': article_type, - 'object_id': article.id, - 'thread': library_thread, - } - - for author in article.favorite.all(): - Journal.objects.get_or_create( - user=author, - action_type=Action.objects.get(name='favorite'), - **article_kwarg, - ) - - for author in article.likes.all(): - Journal.objects.get_or_create( - user=author, - action_type=Action.objects.get(name='like'), - **article_kwarg, - ) - - for author in article.views.all(): - Journal.objects.get_or_create( - user=author, - action_type=Action.objects.get(name='watch'), - **article_kwarg, - ) - - -def start_end_journals(start_thread, end_thread): - print("Создание журналов начала и завершения какого-либо этапа") - for ao in ActiveObject.objects.all(): - try: - start_th_user, _is_create = Thread.objects.get_or_create( - is_staff=False, - key='start_thread_course_%d__user_%d' % (ao.course.id, ao.user.id), - ) - - end_th_user, _is_create = Thread.objects.get_or_create( - is_staff=False, - key='end_thread_course_%d__user_%d' % (ao.course.id, ao.user.id), - ) - - tj = TeacherJ.objects.get(course=ao.course, student=ao.user) - Journal.objects.get_or_create( - thread=start_th_user, - user=ao.user, - content_type=course_type, - date=tj.start_date, - object_id=ao.course.id, - action_type=start_action, - ) - - start_th_user.parent.add(start_thread) - end_th_user.parent.add(end_thread) - - kwarg = { - 'student': ao.user, - 'course': ao.course, - 'start_th_user': start_th_user, - 'end_th_user': end_th_user, - } - - start_end_object( - instance=CourseThemeJ, - pref='t_', - **kwarg, - ) - - start_end_object( - instance=LessonJ, - pref='l_', - **kwarg, - ) - - start_end_object( - instance=HomeworkJ, - pref='h_', - **kwarg, - ) - - start_end_object( - instance=ExamJ, - pref='e_', - **kwarg, - ) - - except TeacherJ.DoesNotExist: - pass - - -@transaction_decorator -def task_try(task_tread): - print("Журналы попыток домашек") - for teacher in get_user_model().objects.filter(in_role='T'): - task_obj_try( - instance=HomeworkTry, - pref='h_', - teacher=teacher, - task_thread=task_tread - ) - - task_obj_try( - instance=ExamTry, - pref='e_', - teacher=teacher, - task_thread=task_tread - ) - - -@transaction_decorator -def init_comment(comment_thread): - comment_type = ContentType.objects.get(app_label='management', model='comment') - for comment in Comment.objects.all(): - comment_kwarg = { - "content_type": course_type, - "thread": comment_thread, - "object_id": comment.id, - } - - for user in comment.minus_rating.all(): - Journal.objects.get_or_create( - user=user, - action_type=Action.objects.get(name="dislike"), - **comment_kwarg, - ) - - for user in comment.plus_rating.all(): - Journal.objects.get_or_create( - user=user, - action_type=Action.objects.get(name="like"), - **comment_kwarg, - ) - - for user in comment.saw.all(): - Journal.objects.get_or_create( - user=user, - action_type=Action.objects.get(name="watch"), - **comment_kwarg, - ) - if __name__ == '__main__': - - if not "help" in sys.argv: - vertex_type = ContentType.objects.get(app_label='courses', model='vertex') - article_type = ContentType.objects.get(app_label='library', model='article') - course_type = ContentType.objects.get(app_label='courses', model='course') - start_action = Action.objects.get(name='start') - end_action = Action.objects.get(name='end') - - boot_list = ['article', 'start_end', 'task_try', 'comment'] if len(sys.argv) == 1 else sys.argv[1:] - - main_threads_info = main_threads() - - if 'article' in boot_list: - create_article_journals(main_threads_info['library_thread']) - - if 'start_end' in boot_list: - start_end_journals(main_threads_info['start_thread'], main_threads_info['end_thread']) - - if 'task_try' in boot_list: - task_try(main_threads_info['task_thread']) - - if 'comment' in boot_list: - init_comment(main_threads_info['lesson_thread']) - - else: - print(""" - Это скрипт миграции в новую систему данных условно его - можно разделить на несколько частей:\n - 1 Инициализация основных тредов,\n - 2 Создание журналов для статей,\n - 3 Создание журналов начала и завершения какого-либо этапа,\n - 4 Журналы попыток домашек,\n - 5 Создание журналов для коментов,\n - - При запуске без флагов выполняются все этапы, но можно указать какой-то конкретный или несколько, - article, start_end, task_try, comment (инициализация является обязательной) - """) + main_threads() diff --git a/journals/migrations/0001_initial.py b/journals/migrations/0001_initial.py old mode 100755 new mode 100644 index 9333006..b4b94c8 --- a/journals/migrations/0001_initial.py +++ b/journals/migrations/0001_initial.py @@ -1,191 +1,64 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-03-18 16:46 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('management', '0001_initial'), - ('storage', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('courses', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='AchievementJ', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('group', models.CharField(default='', max_length=100, verbose_name='\u0420\u0430\u0437\u0434\u0435\u043b')), - ('title', models.CharField(max_length=255, verbose_name='\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a')), - ('text', models.TextField(blank=True, verbose_name='\u0422\u0435\u043a\u0441\u0442 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f')), - ('got', models.BooleanField(default=False, verbose_name='\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043e')), - ('date', models.DateField(default=datetime.date.today, verbose_name='\u0414\u0430\u0442\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f')), - ('achievement', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Achievements', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f')), - ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='\u0421\u0442\u0443\u0434\u0435\u043d\u0442')), - ], - options={ - 'verbose_name': '\u0416\u0443\u0440\u043d\u0430\u043b \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0439', - 'verbose_name_plural': '\u0416\u0443\u0440\u043d\u0430\u043b\u044b \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0439', - }, - ), - migrations.CreateModel( - name='CourseThemeJ', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('success', models.BooleanField(default=False, verbose_name='\u0417\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u043e')), - ('date', models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430')), - ('f_date', models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f')), - ('actual_lesson', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Lesson', verbose_name='\u0410\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b \u0443\u0440\u043e\u043a \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u044b')), - ('material', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.CourseTheme', verbose_name='\u0422\u0435\u043c\u0430')), - ], - options={ - 'ordering': ['id'], - 'verbose_name': '\u0416\u0443\u0440\u043d\u0430\u043b \u0442\u0435\u043c\u044b', - 'verbose_name_plural': '\u0416\u0443\u0440\u043d\u0430\u043b \u0442\u0435\u043c\u044b', - }, - ), - migrations.CreateModel( - name='ExamJ', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('success', models.BooleanField(default=False, verbose_name='\u041f\u0440\u043e\u0439\u0434\u0435\u043d\u043e')), - ('date', models.DateTimeField(null=True, verbose_name='\u0414\u0430\u0442\u0430')), - ('f_date', models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f')), - ('diploma', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='storage.Storage', verbose_name='\u0414\u0438\u043f\u043b\u043e\u043c')), - ('material', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Exam', verbose_name='\u042d\u043a\u0437\u0430\u043c\u0435\u043d')), - ('parent', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, to='journals.CourseThemeJ', verbose_name='\u0416\u0443\u0440\u043d\u0430\u043b')), - ('student', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='e_student', to=settings.AUTH_USER_MODEL, verbose_name='\u042d\u043a\u0437\u0430\u043c\u0435\u043d\u0443\u0435\u043c\u044b\u0439')), - ('teacher', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='e_teacher', to=settings.AUTH_USER_MODEL, verbose_name='\u042d\u043a\u0437\u0430\u043c\u0435\u043d\u0430\u0442\u043e\u0440')), - ], - options={ - 'verbose_name': '\u0416\u0443\u0440\u043d\u0430\u043b \u044d\u043a\u0437\u0430\u043c\u0435\u043d\u0430', - 'verbose_name_plural': '\u0416\u0443\u0440\u043d\u0430\u043b\u044b \u044d\u043a\u0437\u0430\u043c\u0435\u043d\u043e\u0432', - }, - ), - migrations.CreateModel( - name='ExamTry', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('date', models.DateTimeField(default=datetime.datetime.now, verbose_name='\u041d\u0430\u0447\u0430\u043b\u043e')), - ('f_date', models.DateTimeField(blank=True, null=True, verbose_name='\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435')), - ('success', models.BooleanField(default=False, verbose_name='\u0423\u0441\u043f\u0435\u0448\u043d\u043e')), - ('expired', models.BooleanField(default=False, verbose_name='\u041f\u0440\u043e\u0441\u0440\u043e\u0447\u0435\u043d\u043e')), - ('comments', models.ManyToManyField(blank=True, editable=False, to='management.Comment', verbose_name='\u041e\u0431\u0449\u0435\u043d\u0438\u0435')), - ('material', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Exam', verbose_name='\u042d\u043a\u0437\u0430\u043c\u0435\u043d')), - ('parent', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, to='journals.ExamJ', verbose_name='\u0416\u0443\u0440\u043d\u0430\u043b')), - ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='e_t_student', to=settings.AUTH_USER_MODEL, verbose_name='\u0421\u0442\u0443\u0434\u0435\u043d\u0442')), - ('teacher', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='e_t_teacher', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c')), - ], - options={ - 'verbose_name': '\u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0441\u0434\u0430\u0447\u0438 \u042d\u043a\u0437\u0430\u043c\u0435\u043d\u0430', - 'verbose_name_plural': '\u041f\u043e\u043f\u044b\u0442\u043a\u0438 \u0441\u0434\u0430\u0447\u0438 \u042d\u043a\u0437\u0430\u043c\u0435\u043d\u043e\u0432', - }, - ), - migrations.CreateModel( - name='HomeworkJ', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('success', models.BooleanField(default=False, verbose_name='\u0417\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u043e')), - ('date', models.DateTimeField(null=True, verbose_name='\u0414\u0430\u0442\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430')), - ('f_date', models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f')), - ('material', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Homework', verbose_name='\u0414\u043e\u043c\u0430\u0448\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435')), - ('parent', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, to='journals.CourseThemeJ', verbose_name='\u0416\u0443\u0440\u043d\u0430\u043b \u0442\u0435\u043c\u044b')), - ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='h_student', to=settings.AUTH_USER_MODEL, verbose_name='\u0421\u0442\u0443\u0434\u0435\u043d\u0442')), - ('teacher', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='h_teacher', to=settings.AUTH_USER_MODEL, verbose_name='\u042d\u043a\u0437\u0430\u043c\u0435\u043d\u0430\u0442\u043e\u0440')), - ], - options={ - 'verbose_name': '\u0416\u0443\u0440\u043d\u0430\u043b \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b', - 'verbose_name_plural': '\u0416\u0443\u0440\u043d\u0430\u043b\u044b \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0445 \u0440\u0430\u0431\u043e\u0442', - }, - ), - migrations.CreateModel( - name='HomeworkTry', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('date', models.DateTimeField(default=datetime.datetime.now, verbose_name='\u041d\u0430\u0447\u0430\u043b\u043e')), - ('f_date', models.DateTimeField(blank=True, null=True, verbose_name='\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435')), - ('success', models.BooleanField(default=False, verbose_name='\u041e\u0434\u043e\u0431\u0440\u0435\u043d\u043e')), - ('expired', models.BooleanField(default=False, verbose_name='\u041f\u0440\u043e\u0441\u0440\u043e\u0447\u0435\u043d\u043e')), - ('comments', models.ManyToManyField(blank=True, editable=False, to='management.Comment', verbose_name='\u041e\u0431\u0449\u0435\u043d\u0438\u0435')), - ('material', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Homework', verbose_name='\u0414\u043e\u043c\u0430\u0448\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435')), - ('parent', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, to='journals.HomeworkJ', verbose_name='\u0416\u0443\u0440\u043d\u0430\u043b')), - ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='h_t_student', to=settings.AUTH_USER_MODEL, verbose_name='\u0421\u0442\u0443\u0434\u0435\u043d\u0442')), - ('teacher', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='h_t_teacher', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c')), - ], - options={ - 'ordering': ['id'], - 'verbose_name': '\u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0441\u0434\u0430\u0447\u0438 \u0414\u0417', - 'verbose_name_plural': '\u041f\u043e\u043f\u044b\u0442\u043a\u0438 \u0441\u0434\u0430\u0447\u0438 \u0414\u0417', - }, - ), - migrations.CreateModel( - name='JournalsReports', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('s_date', models.DateField(verbose_name='\u041e\u0442')), - ('f_date', models.DateField(blank=True, null=True, verbose_name='\u0414\u043e')), - ('sent', models.BooleanField(default=False, editable=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d')), - ('course', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441')), - ('student', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='report_student', to=settings.AUTH_USER_MODEL, verbose_name='\u0421\u0442\u0443\u0434\u0435\u043d\u0442')), - ('teacher', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='report_teacher', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c')), - ('to', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='report_to', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c')), - ], - options={ - 'verbose_name': '\u041e\u0442\u0447\u0435\u0442 \u043f\u043e \u043f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044e', - 'verbose_name_plural': '\u041e\u0442\u0447\u0435\u0442\u044b \u043f\u043e \u043f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044f\u043c', - }, - ), - migrations.CreateModel( - name='LessonJ', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('success', models.BooleanField(default=False, verbose_name='\u041f\u0440\u043e\u0439\u0434\u0435\u043d\u043e')), - ('date', models.DateTimeField(null=True, verbose_name='\u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430')), - ('f_date', models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u043d\u0435\u0448\u0438\u044f')), - ('material', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Lesson', verbose_name='\u0423\u0440\u043e\u043a')), - ('parent', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, to='journals.CourseThemeJ', verbose_name='\u0416\u0443\u0440\u043d\u0430\u043b \u0442\u0435\u043c\u044b')), - ('student', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='\u0421\u0442\u0443\u0434\u0435\u043d\u0442')), - ], - options={ - 'ordering': ['material__sort'], - 'verbose_name': '\u0416\u0443\u0440\u0430\u043d\u043b \u0443\u0440\u043e\u043a\u0430', - 'verbose_name_plural': '\u0416\u0443\u0440\u043d\u0430\u043b\u044b \u0443\u0440\u043e\u043a\u043e\u0432', - }, - ), - migrations.CreateModel( - name='TeacherJ', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('full', models.BooleanField(default=False, verbose_name='\u0416\u0443\u0440\u043d\u0430\u043b \u0441\u043e\u0437\u0434\u0430\u043d')), - ('progress', models.IntegerField(default=0, verbose_name='\u041f\u0440\u043e\u0433\u0440\u0435\u0441\u0441')), - ('current_token', models.CharField(blank=True, default='', max_length=100, verbose_name='\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u043a\u043b\u044e\u0447')), - ('start_date', models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430')), - ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441')), - ('student', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='teacherJ_student', to=settings.AUTH_USER_MODEL, verbose_name='\u0421\u0442\u0443\u0434\u0435\u043d\u0442')), - ('teacher', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='teacherJ_teacher', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c')), - ], - options={ - 'verbose_name': '\u0416\u0443\u0440\u043d\u0430\u043b \u043f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u043d\u0438\u044f', - 'verbose_name_plural': '\u0416\u0443\u0440\u043d\u0430\u043b\u044b \u043f\u0440\u043e\u043f\u043e\u0434\u0430\u0432\u0430\u043d\u0438\u044f', - }, - ), - migrations.AddField( - model_name='coursethemej', - name='parent', - field=models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, to='journals.TeacherJ', verbose_name='\u0416\u0443\u0440\u043d\u0430\u043b \u043f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u043d\u0438\u044f'), - ), - migrations.AddField( - model_name='coursethemej', - name='student', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='\u0421\u0442\u0443\u0434\u0435\u043d\u0442'), - ), - ] +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2017-10-13 11:18 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('contenttypes', '0002_remove_content_type_name'), + ] + + operations = [ + migrations.CreateModel( + name='Action', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255, verbose_name='Наименование действия (на английском)')), + ('text', models.TextField(verbose_name='Описание действия')), + ], + ), + migrations.CreateModel( + name='Journal', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('extra_data', models.TextField(default='')), + ('object_id', models.PositiveIntegerField()), + ('date', models.DateTimeField(auto_now=True)), + ('action_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='journals.Action')), + ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), + ], + ), + migrations.CreateModel( + name='Thread', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('key', models.CharField(max_length=200)), + ('text', models.TextField(default='', verbose_name='Описание треда')), + ('is_staff', models.BooleanField(default=False, verbose_name='Админская ли табличка')), + ('recurse_step', models.SmallIntegerField(default=0, verbose_name='Поле аптимизации поиска')), + ('check_subscribe', models.BooleanField(default=True, verbose_name='Проверять ли подписки')), + ('x', models.SmallIntegerField(default=300)), + ('y', models.SmallIntegerField(default=300)), + ('parent', models.ManyToManyField(blank=True, to='journals.Thread')), + ('subscribers', models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL, verbose_name='Подписчики')), + ], + ), + migrations.AddField( + model_name='journal', + name='thread', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='journals.Thread', verbose_name='Тред'), + ), + migrations.AddField( + model_name='journal', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Инициатор действия'), + ), + ] diff --git a/journals/migrations/0002_auto_20160318_1909.py b/journals/migrations/0002_auto_20160318_1909.py deleted file mode 100755 index 22eb994..0000000 --- a/journals/migrations/0002_auto_20160318_1909.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-03-18 19:09 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='homeworkj', - name='student', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='h_student', to=settings.AUTH_USER_MODEL, verbose_name='\u0421\u0442\u0443\u0434\u0435\u043d\u0442'), - ), - ] diff --git a/journals/migrations/0003_auto_20160322_1359.py b/journals/migrations/0003_auto_20160322_1359.py deleted file mode 100755 index 2d80d7e..0000000 --- a/journals/migrations/0003_auto_20160322_1359.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-03-22 13:59 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0002_auto_20160318_1909'), - ] - - operations = [ - migrations.AddField( - model_name='coursethemej', - name='set_open', - field=models.BooleanField(default=False, verbose_name='\u041d\u0430\u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f'), - ), - migrations.AddField( - model_name='examj', - name='set_open', - field=models.BooleanField(default=False, verbose_name='\u041d\u0430\u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f'), - ), - migrations.AddField( - model_name='homeworkj', - name='set_open', - field=models.BooleanField(default=False, verbose_name='\u041d\u0430\u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f'), - ), - migrations.AddField( - model_name='lessonj', - name='set_open', - field=models.BooleanField(default=False, verbose_name='\u041d\u0430\u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f'), - ), - ] diff --git a/journals/migrations/0004_teacherj_opens.py b/journals/migrations/0004_teacherj_opens.py deleted file mode 100755 index 067b07b..0000000 --- a/journals/migrations/0004_teacherj_opens.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-03-22 18:52 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0003_auto_20160322_1852'), - ('journals', '0003_auto_20160322_1359'), - ] - - operations = [ - migrations.AddField( - model_name='teacherj', - name='opens', - field=models.ManyToManyField(blank=True, to='courses.CourseMap', verbose_name='\u041d\u0430\u0441\u0438\u043b\u044c\u043d\u044b\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f'), - ), - ] diff --git a/journals/migrations/0005_auto_20160329_1930.py b/journals/migrations/0005_auto_20160329_1930.py deleted file mode 100755 index 1383bcc..0000000 --- a/journals/migrations/0005_auto_20160329_1930.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-03-29 19:30 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0004_teacherj_opens'), - ] - - operations = [ - migrations.AlterModelOptions( - name='homeworktry', - options={'ordering': ['date'], 'verbose_name': '\u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0441\u0434\u0430\u0447\u0438 \u0414\u0417', 'verbose_name_plural': '\u041f\u043e\u043f\u044b\u0442\u043a\u0438 \u0441\u0434\u0430\u0447\u0438 \u0414\u0417'}, - ), - migrations.AlterField( - model_name='homeworkj', - name='teacher', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='h_teacher', to=settings.AUTH_USER_MODEL, verbose_name='\u042d\u043a\u0437\u0430\u043c\u0435\u043d\u0430\u0442\u043e\u0440'), - ), - migrations.AlterField( - model_name='teacherj', - name='opens', - field=models.ManyToManyField(blank=True, editable=False, to='courses.CourseMap', verbose_name='\u041d\u0430\u0441\u0438\u043b\u044c\u043d\u044b\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f'), - ), - ] diff --git a/journals/migrations/0006_auto_20160331_2030.py b/journals/migrations/0006_auto_20160331_2030.py deleted file mode 100755 index 52ab724..0000000 --- a/journals/migrations/0006_auto_20160331_2030.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-03-31 20:30 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0005_auto_20160329_1930'), - ] - - operations = [ - migrations.AlterField( - model_name='examj', - name='teacher', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='e_teacher', to=settings.AUTH_USER_MODEL, verbose_name='\u042d\u043a\u0437\u0430\u043c\u0435\u043d\u0430\u0442\u043e\u0440'), - ), - migrations.AlterField( - model_name='examtry', - name='teacher', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='e_t_teacher', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c'), - ), - migrations.AlterField( - model_name='homeworktry', - name='teacher', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='h_t_teacher', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c'), - ), - migrations.AlterField( - model_name='lessonj', - name='date', - field=models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430'), - ), - migrations.AlterField( - model_name='teacherj', - name='teacher', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='teacherJ_teacher', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c'), - ), - ] diff --git a/journals/migrations/0007_auto_20160405_2045.py b/journals/migrations/0007_auto_20160405_2045.py deleted file mode 100755 index 156c17a..0000000 --- a/journals/migrations/0007_auto_20160405_2045.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-04-05 20:45 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0006_auto_20160331_2030'), - ] - - operations = [ - migrations.AddField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 5, 20, 45, 37, 558604), verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='journalsreports', - name='f_date', - field=models.DateField(blank=True, help_text='\u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f', null=True, verbose_name='\u0414\u043e'), - ), - migrations.AlterField( - model_name='journalsreports', - name='s_date', - field=models.DateField(help_text='\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e', verbose_name='\u041e\u0442'), - ), - ] diff --git a/journals/migrations/0008_auto_20160407_1741.py b/journals/migrations/0008_auto_20160407_1741.py deleted file mode 100755 index 14db21f..0000000 --- a/journals/migrations/0008_auto_20160407_1741.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-04-07 17:41 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0007_auto_20160405_2045'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 7, 17, 41, 52, 720478), verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0009_auto_20160407_2006.py b/journals/migrations/0009_auto_20160407_2006.py deleted file mode 100755 index 6de423f..0000000 --- a/journals/migrations/0009_auto_20160407_2006.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-04-07 20:06 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0008_auto_20160407_1741'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 7, 20, 6, 28, 211597), verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0010_auto_20160413_0207.py b/journals/migrations/0010_auto_20160413_0207.py deleted file mode 100755 index de1256f..0000000 --- a/journals/migrations/0010_auto_20160413_0207.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-13 02:07 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('courses', '0006_auto_20160407_2006'), - ('journals', '0009_auto_20160407_2006'), - ] - - operations = [ - migrations.CreateModel( - name='ProgressReports', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('s_date', models.DateField(help_text='\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e', verbose_name='\u041e\u0442')), - ('f_date', models.DateField(blank=True, help_text='\u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f', null=True, verbose_name='\u0414\u043e')), - ('sent', models.BooleanField(default=False, editable=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d')), - ('date', models.DateTimeField(default=datetime.datetime(2016, 4, 13, 2, 7, 43, 239373), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430')), - ('course', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441')), - ('student', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='progress_student', to=settings.AUTH_USER_MODEL, verbose_name='\u0421\u0442\u0443\u0434\u0435\u043d\u0442')), - ('teacher', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='progress_teacher', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c')), - ('to', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='progress_to', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c')), - ], - options={ - 'verbose_name': '\u041e\u0442\u0447\u0435\u0442 \u043f\u043e \u043f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044e', - 'verbose_name_plural': '\u041e\u0442\u0447\u0435\u0442\u044b \u043f\u043e \u043f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044f\u043c', - }, - ), - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 13, 2, 7, 43, 238580), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0011_auto_20160413_0214.py b/journals/migrations/0011_auto_20160413_0214.py deleted file mode 100755 index 9a46d7e..0000000 --- a/journals/migrations/0011_auto_20160413_0214.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-13 02:14 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0010_auto_20160413_0207'), - ] - - operations = [ - migrations.AlterModelOptions( - name='progressreports', - options={'verbose_name': '\u041e\u0442\u0447\u0435\u0442 \u043f\u043e \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f\u043c', 'verbose_name_plural': '\u041e\u0442\u0447\u0435\u0442\u044b \u043f\u043e \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f\u043c'}, - ), - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 13, 2, 14, 4, 433421), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='progressreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 13, 2, 14, 4, 434170), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='progressreports', - name='to', - field=models.ForeignKey(blank=True, help_text='\u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0430: \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d \u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u0436\u0438\u0440\u043d\u044b\u0439 \u043e\u0442\u0447\u0435\u0442 \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u0438 \u0432\u0441\u044f', on_delete=django.db.models.deletion.CASCADE, related_name='progress_to', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c'), - ), - ] diff --git a/journals/migrations/0012_auto_20160413_0215.py b/journals/migrations/0012_auto_20160413_0215.py deleted file mode 100755 index c6c0856..0000000 --- a/journals/migrations/0012_auto_20160413_0215.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-13 02:15 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0011_auto_20160413_0214'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 13, 2, 15, 7, 903719), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='progressreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 13, 2, 15, 7, 905393), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='progressreports', - name='s_date', - field=models.DateField(blank=True, help_text='\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0430: \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d \u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u0436\u0438\u0440\u043d\u044b\u0439 \u043e\u0442\u0447\u0435\u0442 \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u0438 \u0432\u0441\u044f', verbose_name='\u041e\u0442'), - ), - migrations.AlterField( - model_name='progressreports', - name='to', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='progress_to', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c'), - ), - ] diff --git a/journals/migrations/0013_auto_20160414_1652.py b/journals/migrations/0013_auto_20160414_1652.py deleted file mode 100755 index 6e3ee2b..0000000 --- a/journals/migrations/0013_auto_20160414_1652.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-14 16:52 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0012_auto_20160413_0215'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 14, 16, 52, 14, 316432), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='progressreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 14, 16, 52, 14, 317184), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0014_auto_20160414_1941.py b/journals/migrations/0014_auto_20160414_1941.py deleted file mode 100755 index e20a0df..0000000 --- a/journals/migrations/0014_auto_20160414_1941.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-14 19:41 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0013_auto_20160414_1652'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 14, 19, 41, 21, 981410), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='progressreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 14, 19, 41, 21, 982815), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0015_auto_20160414_1944.py b/journals/migrations/0015_auto_20160414_1944.py deleted file mode 100755 index a1b2a53..0000000 --- a/journals/migrations/0015_auto_20160414_1944.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-14 19:44 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0014_auto_20160414_1941'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 14, 19, 44, 42, 230690), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='progressreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 14, 19, 44, 42, 231405), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0016_auto_20160419_1109.py b/journals/migrations/0016_auto_20160419_1109.py deleted file mode 100755 index 75e5be1..0000000 --- a/journals/migrations/0016_auto_20160419_1109.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-19 11:09 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0007_lesson_video_date'), - ('journals', '0015_auto_20160414_1944'), - ] - - operations = [ - migrations.AddField( - model_name='teacherj', - name='waiting', - field=models.ManyToManyField(blank=True, editable=False, null=True, related_name='map_waiting', to='courses.CourseMap', verbose_name='\u0414\u043e\u043f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f'), - ), - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 19, 11, 9, 36, 483730), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='progressreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 19, 11, 9, 36, 484535), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='teacherj', - name='opens', - field=models.ManyToManyField(blank=True, editable=False, related_name='map_opens', to='courses.CourseMap', verbose_name='\u041d\u0430\u0441\u0438\u043b\u044c\u043d\u044b\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f'), - ), - ] diff --git a/journals/migrations/0017_auto_20160419_1426.py b/journals/migrations/0017_auto_20160419_1426.py deleted file mode 100755 index 1b21604..0000000 --- a/journals/migrations/0017_auto_20160419_1426.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-19 14:26 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0016_auto_20160419_1109'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 19, 14, 26, 6, 482839), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='progressreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 19, 14, 26, 6, 483541), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='teacherj', - name='waiting', - field=models.ManyToManyField(blank=True, null=True, related_name='map_waiting', to='courses.CourseMap', verbose_name='\u0414\u043e\u043f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f'), - ), - ] diff --git a/journals/migrations/0018_auto_20160420_1749.py b/journals/migrations/0018_auto_20160420_1749.py deleted file mode 100755 index ef3b96f..0000000 --- a/journals/migrations/0018_auto_20160420_1749.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-20 17:49 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0017_auto_20160419_1426'), - ] - - operations = [ - migrations.AddField( - model_name='coursethemej', - name='block', - field=models.BooleanField(default=False, verbose_name='\u0417\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435'), - ), - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 20, 17, 49, 55, 864154), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='progressreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 20, 17, 49, 55, 864980), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0019_auto_20160420_1819.py b/journals/migrations/0019_auto_20160420_1819.py deleted file mode 100755 index 779ae8b..0000000 --- a/journals/migrations/0019_auto_20160420_1819.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-20 18:19 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0018_auto_20160420_1749'), - ] - - operations = [ - migrations.RemoveField( - model_name='coursethemej', - name='block', - ), - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 20, 18, 19, 6, 373257), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='progressreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 20, 18, 19, 6, 374450), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0020_auto_20160425_1656.py b/journals/migrations/0020_auto_20160425_1656.py deleted file mode 100755 index ddc1ab5..0000000 --- a/journals/migrations/0020_auto_20160425_1656.py +++ /dev/null @@ -1,46 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-25 16:56 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0012_course_diploma_key'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('journals', '0019_auto_20160420_1819'), - ] - - operations = [ - migrations.CreateModel( - name='Diploma', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('key', models.CharField(max_length=255, verbose_name='\u041a\u043b\u044e\u0447')), - ('date', models.DateField(default=datetime.date.today, verbose_name='\u0414\u0430\u0442\u0430 \u0432\u044b\u0434\u0430\u0447\u0438')), - ('out_image', models.ImageField(upload_to=b'', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 c \u043f\u0435\u0447\u0430\u0442\u044c\u044e')), - ('in_image', models.ImageField(upload_to=b'', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 c \u043f\u0435\u0447\u0430\u0442\u044c\u044e')), - ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u043a\u0443\u0440\u0441')), - ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='\u0421\u0442\u0443\u0434\u0435\u043d\u0442')), - ], - options={ - 'verbose_name': '\u0414\u0438\u043f\u043b\u043e\u043c\u044b', - 'verbose_name_plural': '\u041f\u043e\u043f\u044b\u0442\u043a\u0438 \u0441\u0434\u0430\u0447\u0438 \u042d\u043a\u0437\u0430\u043c\u0435\u043d\u043e\u0432', - }, - ), - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 25, 16, 56, 34, 811002), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='progressreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 25, 16, 56, 34, 811746), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0021_auto_20160425_1737.py b/journals/migrations/0021_auto_20160425_1737.py deleted file mode 100755 index 846acb8..0000000 --- a/journals/migrations/0021_auto_20160425_1737.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-25 17:37 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0020_auto_20160425_1656'), - ] - - operations = [ - migrations.RemoveField( - model_name='diploma', - name='course', - ), - migrations.RemoveField( - model_name='diploma', - name='student', - ), - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 25, 17, 37, 54, 415640), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='progressreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 25, 17, 37, 54, 416476), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.DeleteModel( - name='Diploma', - ), - ] diff --git a/journals/migrations/0022_auto_20160426_1119.py b/journals/migrations/0022_auto_20160426_1119.py deleted file mode 100755 index e31c1cd..0000000 --- a/journals/migrations/0022_auto_20160426_1119.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-26 11:19 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0021_auto_20160425_1737'), - ] - - operations = [ - migrations.RemoveField( - model_name='examj', - name='diploma', - ), - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 26, 11, 19, 28, 992777), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='progressreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 26, 11, 19, 28, 993857), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0023_auto_20160426_1240.py b/journals/migrations/0023_auto_20160426_1240.py deleted file mode 100755 index 37681e7..0000000 --- a/journals/migrations/0023_auto_20160426_1240.py +++ /dev/null @@ -1,44 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-26 12:40 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0017_auto_20160426_1240'), - ('journals', '0022_auto_20160426_1119'), - ] - - operations = [ - migrations.CreateModel( - name='DiplomaJ', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('date', models.DateField(default=datetime.date.today, verbose_name='\u0414\u0430\u0442\u0430 \u0432\u044b\u0434\u0430\u0447\u0438')), - ('key', models.CharField(max_length=255, verbose_name='\u041a\u043b\u044e\u0447')), - ('out_image', models.ImageField(upload_to='diploms', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0431\u0435\u0437 \u043f\u0435\u0447\u0430\u0442\u0438')), - ('in_image', models.ImageField(upload_to='diploms', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 c \u043f\u0435\u0447\u0430\u0442\u044c\u044e')), - ('material', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Diploma', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u0438\u043f\u043b\u043e\u043c\u0430')), - ('parent', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='journals.ExamJ', verbose_name='\u0416\u0443\u0440\u043d\u0430\u043b \u0441\u0434\u0430\u0447\u0438')), - ], - options={ - 'verbose_name': '\u0416\u0443\u0440\u043d\u0430\u043b \u0434\u0438\u043f\u043b\u043e\u043c\u043e\u0432', - 'verbose_name_plural': '\u0416\u0443\u0440\u043d\u0430\u043b\u044b \u0434\u0438\u043f\u043b\u043e\u043c\u043e\u0432', - }, - ), - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 26, 12, 40, 4, 467932), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='progressreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 26, 12, 40, 4, 468672), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0024_auto_20160426_1340.py b/journals/migrations/0024_auto_20160426_1340.py deleted file mode 100755 index 7e8678f..0000000 --- a/journals/migrations/0024_auto_20160426_1340.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-26 13:40 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0023_auto_20160426_1240'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 26, 13, 40, 58, 509339), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='progressreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 26, 13, 40, 58, 510077), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0025_auto_20160426_1342.py b/journals/migrations/0025_auto_20160426_1342.py deleted file mode 100755 index 2a34318..0000000 --- a/journals/migrations/0025_auto_20160426_1342.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-26 13:42 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('journals', '0024_auto_20160426_1340'), - ] - - operations = [ - migrations.AddField( - model_name='diplomaj', - name='student', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='\u0421\u0442\u0443\u0434\u0435\u043d\u0442'), - ), - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 26, 13, 42, 20, 148906), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='progressreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 26, 13, 42, 20, 149697), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0026_auto_20160426_1711.py b/journals/migrations/0026_auto_20160426_1711.py deleted file mode 100755 index c561962..0000000 --- a/journals/migrations/0026_auto_20160426_1711.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-26 17:11 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0025_auto_20160426_1342'), - ] - - operations = [ - migrations.AlterField( - model_name='diplomaj', - name='in_image', - field=models.ImageField(blank=True, upload_to='diploms', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 c \u043f\u0435\u0447\u0430\u0442\u044c\u044e'), - ), - migrations.AlterField( - model_name='diplomaj', - name='key', - field=models.IntegerField(max_length=255, verbose_name='\u041a\u043b\u044e\u0447'), - ), - migrations.AlterField( - model_name='diplomaj', - name='out_image', - field=models.ImageField(blank=True, upload_to='diploms', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0431\u0435\u0437 \u043f\u0435\u0447\u0430\u0442\u0438'), - ), - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 26, 17, 11, 38, 672394), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='progressreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 26, 17, 11, 38, 673176), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0027_auto_20160428_1531.py b/journals/migrations/0027_auto_20160428_1531.py deleted file mode 100755 index 32c1095..0000000 --- a/journals/migrations/0027_auto_20160428_1531.py +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-28 15:31 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0026_auto_20160426_1711'), - ] - - operations = [ - migrations.AlterModelOptions( - name='coursethemej', - options={'ordering': ['material__sort'], 'verbose_name': '\u0416\u0443\u0440\u043d\u0430\u043b \u0442\u0435\u043c\u044b', 'verbose_name_plural': '\u0416\u0443\u0440\u043d\u0430\u043b \u0442\u0435\u043c\u044b'}, - ), - migrations.AlterModelOptions( - name='homeworkj', - options={'ordering': ['material__sort'], 'verbose_name': '\u0416\u0443\u0440\u043d\u0430\u043b \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b', 'verbose_name_plural': '\u0416\u0443\u0440\u043d\u0430\u043b\u044b \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0445 \u0440\u0430\u0431\u043e\u0442'}, - ), - migrations.AlterField( - model_name='diplomaj', - name='key', - field=models.IntegerField(blank=True, max_length=255, verbose_name='\u041a\u043b\u044e\u0447'), - ), - migrations.AlterField( - model_name='diplomaj', - name='parent', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='journals.ExamJ', verbose_name='\u0416\u0443\u0440\u043d\u0430\u043b \u0441\u0434\u0430\u0447\u0438'), - ), - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 28, 15, 31, 56, 86358), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='progressreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 28, 15, 31, 56, 87092), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0028_auto_20160428_1554.py b/journals/migrations/0028_auto_20160428_1554.py deleted file mode 100755 index f06d102..0000000 --- a/journals/migrations/0028_auto_20160428_1554.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-28 15:54 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0027_auto_20160428_1531'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 28, 15, 54, 6, 268311), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='progressreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 28, 15, 54, 6, 269014), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0029_auto_20160428_1556.py b/journals/migrations/0029_auto_20160428_1556.py deleted file mode 100755 index 5b887fd..0000000 --- a/journals/migrations/0029_auto_20160428_1556.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-28 15:56 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0028_auto_20160428_1554'), - ] - - operations = [ - migrations.AlterField( - model_name='diplomaj', - name='key', - field=models.IntegerField(blank=True, max_length=255, null=True, verbose_name='\u041a\u043b\u044e\u0447'), - ), - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 28, 15, 56, 6, 175947), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='progressreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 28, 15, 56, 6, 176431), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0030_auto_20160428_1633.py b/journals/migrations/0030_auto_20160428_1633.py deleted file mode 100755 index e7a1f5d..0000000 --- a/journals/migrations/0030_auto_20160428_1633.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-28 16:33 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0029_auto_20160428_1556'), - ] - - operations = [ - migrations.AddField( - model_name='diplomaj', - name='gen', - field=models.BooleanField(default=False, verbose_name='\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d'), - ), - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 28, 16, 33, 15, 465433), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='progressreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 28, 16, 33, 15, 466154), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0031_auto_20160506_1303.py b/journals/migrations/0031_auto_20160506_1303.py deleted file mode 100755 index 43a6890..0000000 --- a/journals/migrations/0031_auto_20160506_1303.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-05-06 13:03 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0030_auto_20160428_1633'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 5, 6, 13, 3, 19, 710064), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='progressreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 5, 6, 13, 3, 19, 710937), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0032_auto_20160530_0820.py b/journals/migrations/0032_auto_20160530_0820.py deleted file mode 100755 index ecbecc6..0000000 --- a/journals/migrations/0032_auto_20160530_0820.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-05-30 08:20 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0031_auto_20160506_1303'), - ] - - operations = [ - migrations.RemoveField( - model_name='progressreports', - name='course', - ), - migrations.RemoveField( - model_name='progressreports', - name='student', - ), - migrations.RemoveField( - model_name='progressreports', - name='teacher', - ), - migrations.RemoveField( - model_name='progressreports', - name='to', - ), - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 5, 30, 8, 20, 58, 734398), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.DeleteModel( - name='ProgressReports', - ), - ] diff --git a/journals/migrations/0033_auto_20160530_1320.py b/journals/migrations/0033_auto_20160530_1320.py deleted file mode 100755 index 57a3fd8..0000000 --- a/journals/migrations/0033_auto_20160530_1320.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-05-30 13:20 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('courses', '0026_auto_20160506_1838'), - ('journals', '0032_auto_20160530_0820'), - ] - - operations = [ - migrations.CreateModel( - name='ReportDepth', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('s_date', models.DateTimeField(default=datetime.datetime.now, verbose_name='\u0414\u0430\u0442\u0430 \u0441\u0442\u0430\u0440\u0442\u0430')), - ('f_date', models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f')), - ('flag', models.CharField(blank=True, choices=[('G', ''), ('Y', ''), ('R', '')], max_length=1, null=True, verbose_name='\u0424\u043b\u0430\u0433 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f')), - ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='\u041a\u0443\u0440\u0441')), - ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='depth_report_student', to=settings.AUTH_USER_MODEL, verbose_name='\u0421\u0442\u0443\u0434\u0435\u043d\u0442')), - ('teacher', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='depth_report_teacher', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c')), - ('token', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.CourseMap', verbose_name='\u0422\u043e\u0447\u043a\u0430 \u043a\u0443\u0440\u0441\u0430')), - ], - options={ - 'ordering': ['token'], - 'verbose_name': '\u0413\u043b\u0443\u0431\u043e\u043a\u0438\u0439 \u043e\u0442\u0447\u0435\u0442', - 'verbose_name_plural': '\u0413\u043b\u0443\u0431\u043e\u043a\u0438\u0439 \u043e\u0442\u0447\u0435\u0442', - }, - ), - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 5, 30, 13, 20, 18, 32192), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0034_auto_20160530_1405.py b/journals/migrations/0034_auto_20160530_1405.py deleted file mode 100755 index c393dda..0000000 --- a/journals/migrations/0034_auto_20160530_1405.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-05-30 14:05 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0033_auto_20160530_1320'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 5, 30, 14, 5, 8, 587794), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='reportdepth', - name='teacher', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='depth_report_teacher', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c'), - ), - ] diff --git a/journals/migrations/0035_auto_20160607_1613.py b/journals/migrations/0035_auto_20160607_1613.py deleted file mode 100755 index 5bcbd1e..0000000 --- a/journals/migrations/0035_auto_20160607_1613.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-07 16:13 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0034_auto_20160530_1405'), - ] - - operations = [ - migrations.AlterModelOptions( - name='reportdepth', - options={'ordering': ['s_date'], 'verbose_name': '\u0413\u043b\u0443\u0431\u043e\u043a\u0438\u0439 \u043e\u0442\u0447\u0435\u0442', 'verbose_name_plural': '\u0413\u043b\u0443\u0431\u043e\u043a\u0438\u0439 \u043e\u0442\u0447\u0435\u0442'}, - ), - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 6, 7, 16, 13, 32, 699752), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - migrations.AlterField( - model_name='reportdepth', - name='flag', - field=models.CharField(blank=True, choices=[('G', '#99CC99'), ('Y', '#FFFF99'), ('R', '#FF3300')], max_length=1, null=True, verbose_name='\u0424\u043b\u0430\u0433 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f'), - ), - ] diff --git a/journals/migrations/0036_auto_20160607_1614.py b/journals/migrations/0036_auto_20160607_1614.py deleted file mode 100755 index 12e1c59..0000000 --- a/journals/migrations/0036_auto_20160607_1614.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-07 16:14 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0035_auto_20160607_1613'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 6, 7, 16, 14, 9, 954833), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0037_auto_20160607_2002.py b/journals/migrations/0037_auto_20160607_2002.py deleted file mode 100755 index aac8479..0000000 --- a/journals/migrations/0037_auto_20160607_2002.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-07 20:02 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0036_auto_20160607_1614'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 6, 7, 20, 2, 41, 688111), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0038_auto_20160607_2034.py b/journals/migrations/0038_auto_20160607_2034.py deleted file mode 100755 index a80c4c2..0000000 --- a/journals/migrations/0038_auto_20160607_2034.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-07 20:34 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0037_auto_20160607_2002'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 6, 7, 20, 34, 43, 774641), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0039_auto_20160607_2051.py b/journals/migrations/0039_auto_20160607_2051.py deleted file mode 100755 index b3f1484..0000000 --- a/journals/migrations/0039_auto_20160607_2051.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-07 20:51 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0038_auto_20160607_2034'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 6, 7, 20, 51, 37, 193156), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0040_auto_20160608_1700.py b/journals/migrations/0040_auto_20160608_1700.py deleted file mode 100755 index e478cca..0000000 --- a/journals/migrations/0040_auto_20160608_1700.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-08 17:00 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0039_auto_20160607_2051'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 6, 8, 16, 59, 59, 733466), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0041_auto_20160608_1705.py b/journals/migrations/0041_auto_20160608_1705.py deleted file mode 100755 index a0f8354..0000000 --- a/journals/migrations/0041_auto_20160608_1705.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-08 17:05 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0040_auto_20160608_1700'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 6, 8, 17, 5, 4, 921678), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0042_auto_20160608_1804.py b/journals/migrations/0042_auto_20160608_1804.py deleted file mode 100755 index a852922..0000000 --- a/journals/migrations/0042_auto_20160608_1804.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-08 18:04 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0041_auto_20160608_1705'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 6, 8, 18, 4, 57, 546328), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0043_auto_20160608_1841.py b/journals/migrations/0043_auto_20160608_1841.py deleted file mode 100755 index 1bc9d61..0000000 --- a/journals/migrations/0043_auto_20160608_1841.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-08 18:41 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0042_auto_20160608_1804'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 6, 8, 18, 41, 17, 883560), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0044_auto_20160609_1429.py b/journals/migrations/0044_auto_20160609_1429.py deleted file mode 100755 index a5be5e1..0000000 --- a/journals/migrations/0044_auto_20160609_1429.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 14:29 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0043_auto_20160608_1841'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 6, 9, 14, 29, 17, 613070), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0045_auto_20160609_1442.py b/journals/migrations/0045_auto_20160609_1442.py deleted file mode 100755 index eb39fd6..0000000 --- a/journals/migrations/0045_auto_20160609_1442.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 14:42 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0044_auto_20160609_1429'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 6, 9, 14, 42, 25, 639509), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0046_auto_20160609_1534.py b/journals/migrations/0046_auto_20160609_1534.py deleted file mode 100755 index 2be2475..0000000 --- a/journals/migrations/0046_auto_20160609_1534.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 15:34 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0045_auto_20160609_1442'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 6, 9, 15, 34, 28, 550178), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0047_auto_20160609_1536.py b/journals/migrations/0047_auto_20160609_1536.py deleted file mode 100755 index d14f4f3..0000000 --- a/journals/migrations/0047_auto_20160609_1536.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 15:36 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0046_auto_20160609_1534'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 6, 9, 15, 36, 24, 176770), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0048_auto_20160609_1536.py b/journals/migrations/0048_auto_20160609_1536.py deleted file mode 100755 index e6df11b..0000000 --- a/journals/migrations/0048_auto_20160609_1536.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 15:36 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0047_auto_20160609_1536'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 6, 9, 15, 36, 29, 932969), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0049_auto_20160609_1546.py b/journals/migrations/0049_auto_20160609_1546.py deleted file mode 100755 index 4a75659..0000000 --- a/journals/migrations/0049_auto_20160609_1546.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 15:46 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0048_auto_20160609_1536'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 6, 9, 15, 46, 17, 287825), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0050_auto_20160609_1627.py b/journals/migrations/0050_auto_20160609_1627.py deleted file mode 100755 index 7f7a0f6..0000000 --- a/journals/migrations/0050_auto_20160609_1627.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 16:27 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0049_auto_20160609_1546'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 6, 9, 16, 27, 14, 289357), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0051_auto_20160609_2224.py b/journals/migrations/0051_auto_20160609_2224.py deleted file mode 100755 index 1fa3022..0000000 --- a/journals/migrations/0051_auto_20160609_2224.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 22:24 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0050_auto_20160609_1627'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 6, 9, 22, 24, 43, 817817), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0052_auto_20160628_1731.py b/journals/migrations/0052_auto_20160628_1731.py deleted file mode 100755 index e4763ba..0000000 --- a/journals/migrations/0052_auto_20160628_1731.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-28 17:31 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0051_auto_20160609_2224'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 6, 28, 17, 31, 12, 287945), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0053_auto_20160711_1518.py b/journals/migrations/0053_auto_20160711_1518.py deleted file mode 100755 index e23c9d0..0000000 --- a/journals/migrations/0053_auto_20160711_1518.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-11 15:18 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0052_auto_20160628_1731'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 7, 11, 15, 18, 42, 287900), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0054_auto_20160713_2038.py b/journals/migrations/0054_auto_20160713_2038.py deleted file mode 100755 index 366f7c7..0000000 --- a/journals/migrations/0054_auto_20160713_2038.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-13 20:38 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0053_auto_20160711_1518'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 7, 13, 20, 38, 33, 382012), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0055_auto_20160729_1215.py b/journals/migrations/0055_auto_20160729_1215.py deleted file mode 100755 index d407a0d..0000000 --- a/journals/migrations/0055_auto_20160729_1215.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-29 12:15 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('journals', '0054_auto_20160713_2038'), - ] - - operations = [ - migrations.AddField( - model_name='teacherj', - name='current_tch', - field=models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='teacherJ_crteacher', to=settings.AUTH_USER_MODEL, verbose_name='\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0439 \u043f\u0440\u0435\u043f'), - ), - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 7, 29, 12, 15, 50, 796790), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0056_auto_20160729_1308.py b/journals/migrations/0056_auto_20160729_1308.py deleted file mode 100755 index 29f0016..0000000 --- a/journals/migrations/0056_auto_20160729_1308.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-29 13:08 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('journals', '0055_auto_20160729_1215'), - ] - - operations = [ - migrations.AddField( - model_name='homeworktry', - name='new_teach', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='h_t_new_teacher', to=settings.AUTH_USER_MODEL, verbose_name='\u041d\u043e\u0432\u044b\u0439 \u043f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c'), - ), - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 7, 29, 13, 8, 32, 955571), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0057_auto_20160814_1736.py b/journals/migrations/0057_auto_20160814_1736.py deleted file mode 100755 index 76fc84f..0000000 --- a/journals/migrations/0057_auto_20160814_1736.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-08-14 17:36 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0056_auto_20160729_1308'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 8, 14, 17, 36, 41, 787179), editable=False, verbose_name='\u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u0447\u0435\u0442\u0430'), - ), - ] diff --git a/journals/migrations/0058_auto_20160831_1638.py b/journals/migrations/0058_auto_20160831_1638.py deleted file mode 100644 index 8f60a63..0000000 --- a/journals/migrations/0058_auto_20160831_1638.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-08-31 16:38 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0057_auto_20160814_1736'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 8, 31, 16, 38, 23, 277695), editable=False, verbose_name='Запрос отчета'), - ), - ] diff --git a/journals/migrations/0059_auto_20160908_0045.py b/journals/migrations/0059_auto_20160908_0045.py deleted file mode 100644 index 40a8183..0000000 --- a/journals/migrations/0059_auto_20160908_0045.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 00:45 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0058_auto_20160831_1638'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 8, 0, 45, 46, 49878), editable=False, verbose_name='Запрос отчета'), - ), - ] diff --git a/journals/migrations/0060_auto_20160908_0051.py b/journals/migrations/0060_auto_20160908_0051.py deleted file mode 100644 index 174cd25..0000000 --- a/journals/migrations/0060_auto_20160908_0051.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 00:51 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0059_auto_20160908_0045'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 8, 0, 51, 2, 230162), editable=False, verbose_name='Запрос отчета'), - ), - ] diff --git a/journals/migrations/0061_auto_20160908_0118.py b/journals/migrations/0061_auto_20160908_0118.py deleted file mode 100644 index 2c355d8..0000000 --- a/journals/migrations/0061_auto_20160908_0118.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 01:18 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0060_auto_20160908_0051'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 8, 1, 18, 30, 728676), editable=False, verbose_name='Запрос отчета'), - ), - ] diff --git a/journals/migrations/0062_auto_20160908_0331.py b/journals/migrations/0062_auto_20160908_0331.py deleted file mode 100644 index 7bdaca3..0000000 --- a/journals/migrations/0062_auto_20160908_0331.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 03:31 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0061_auto_20160908_0118'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 8, 3, 31, 41, 742292), editable=False, verbose_name='Запрос отчета'), - ), - ] diff --git a/journals/migrations/0063_auto_20160908_1834.py b/journals/migrations/0063_auto_20160908_1834.py deleted file mode 100644 index d45a5ab..0000000 --- a/journals/migrations/0063_auto_20160908_1834.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 18:34 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0062_auto_20160908_0331'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 8, 18, 34, 4, 636462), editable=False, verbose_name='Запрос отчета'), - ), - ] diff --git a/journals/migrations/0064_auto_20160908_1919.py b/journals/migrations/0064_auto_20160908_1919.py deleted file mode 100644 index bd6b677..0000000 --- a/journals/migrations/0064_auto_20160908_1919.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 19:19 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0063_auto_20160908_1834'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 8, 19, 19, 49, 236420), editable=False, verbose_name='Запрос отчета'), - ), - ] diff --git a/journals/migrations/0065_auto_20160909_1816.py b/journals/migrations/0065_auto_20160909_1816.py deleted file mode 100644 index 45347e8..0000000 --- a/journals/migrations/0065_auto_20160909_1816.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-09 18:16 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0064_auto_20160908_1919'), - ] - - operations = [ - migrations.AlterField( - model_name='journalsreports', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 9, 18, 16, 11, 770064), editable=False, verbose_name='Запрос отчета'), - ), - ] diff --git a/journals/migrations/0066_auto_20160912_1324.py b/journals/migrations/0066_auto_20160912_1324.py deleted file mode 100644 index 4dbcb13..0000000 --- a/journals/migrations/0066_auto_20160912_1324.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-12 13:24 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0065_auto_20160909_1816'), - ] - - operations = [ - migrations.RemoveField( - model_name='journalsreports', - name='course', - ), - migrations.RemoveField( - model_name='journalsreports', - name='student', - ), - migrations.RemoveField( - model_name='journalsreports', - name='teacher', - ), - migrations.RemoveField( - model_name='journalsreports', - name='to', - ), - migrations.DeleteModel( - name='JournalsReports', - ), - ] diff --git a/journals/migrations/0067_auto_20160917_0757.py b/journals/migrations/0067_auto_20160917_0757.py deleted file mode 100644 index 9e9b674..0000000 --- a/journals/migrations/0067_auto_20160917_0757.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-17 07:57 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0066_auto_20160912_1324'), - ] - - operations = [ - migrations.AlterModelOptions( - name='teacherj', - options={'ordering': ['id'], 'verbose_name': 'Журнал преподавания', 'verbose_name_plural': 'Журналы проподавания'}, - ), - ] diff --git a/journals/migrations/0068_auto_20161110_2152.py b/journals/migrations/0068_auto_20161110_2152.py deleted file mode 100644 index 45182f8..0000000 --- a/journals/migrations/0068_auto_20161110_2152.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-10 21:52 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0067_auto_20160917_0757'), - ] - - operations = [ - migrations.AlterModelOptions( - name='teacherj', - options={'ordering': ['-id'], 'verbose_name': 'Журнал преподавания', 'verbose_name_plural': 'Журналы проподавания'}, - ), - migrations.RemoveField( - model_name='teacherj', - name='current_tch', - ), - migrations.AlterField( - model_name='examj', - name='date', - field=models.DateTimeField(blank=True, null=True, verbose_name='Дата'), - ), - ] diff --git a/journals/migrations/0069_teacherj_status.py b/journals/migrations/0069_teacherj_status.py deleted file mode 100644 index fddbf37..0000000 --- a/journals/migrations/0069_teacherj_status.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-10 23:20 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0068_auto_20161110_2152'), - ] - - operations = [ - migrations.AddField( - model_name='teacherj', - name='status', - field=models.CharField(choices=[('O', 'Пустой'), ('W', 'В работе'), ('F', 'Завершен')], default='O', max_length=1, verbose_name='Статус'), - ), - ] diff --git a/journals/migrations/0070_auto_20161110_2333.py b/journals/migrations/0070_auto_20161110_2333.py deleted file mode 100644 index ca04290..0000000 --- a/journals/migrations/0070_auto_20161110_2333.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-10 23:33 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0036_auto_20161110_2152'), - ('journals', '0069_teacherj_status'), - ] - - operations = [ - migrations.AddField( - model_name='teacherj', - name='homework', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Homework', verbose_name='ДЗ'), - ), - migrations.AddField( - model_name='teacherj', - name='lesson', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Lesson', verbose_name='Урок'), - ), - ] diff --git a/journals/migrations/0071_auto_20161202_0338.py b/journals/migrations/0071_auto_20161202_0338.py deleted file mode 100644 index bf51eb2..0000000 --- a/journals/migrations/0071_auto_20161202_0338.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-12-02 03:38 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0070_auto_20161110_2333'), - ] - - operations = [ - migrations.AlterModelOptions( - name='examtry', - options={'ordering': ['date'], 'verbose_name': 'Попытка сдачи Экзамена', 'verbose_name_plural': 'Попытки сдачи Экзаменов'}, - ), - ] diff --git a/journals/migrations/0072_auto_20170810_0904.py b/journals/migrations/0072_auto_20170810_0904.py deleted file mode 100644 index 89e6f56..0000000 --- a/journals/migrations/0072_auto_20170810_0904.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-08-10 09:04 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0071_auto_20161202_0338'), - ] - - operations = [ - migrations.AlterField( - model_name='homeworkj', - name='date', - field=models.DateTimeField(blank=True, null=True, verbose_name='Дата предоставления доступа'), - ), - ] diff --git a/journals/migrations/0073_auto_20170918_0811.py b/journals/migrations/0073_auto_20170918_0811.py deleted file mode 100644 index cb51589..0000000 --- a/journals/migrations/0073_auto_20170918_0811.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-09-18 08:11 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0072_auto_20170810_0904'), - ] - - operations = [ - migrations.AlterField( - model_name='diplomaj', - name='key', - field=models.IntegerField(blank=True, null=True, verbose_name='Ключ'), - ), - migrations.AlterField( - model_name='teacherj', - name='waiting', - field=models.ManyToManyField(blank=True, related_name='map_waiting', to='courses.CourseMap', verbose_name='Доп изучения'), - ), - ] diff --git a/journals/migrations/0074_auto_20170925_1829.py b/journals/migrations/0074_auto_20170925_1829.py deleted file mode 100644 index 91318e7..0000000 --- a/journals/migrations/0074_auto_20170925_1829.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-09-25 18:29 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('contenttypes', '0002_remove_content_type_name'), - ('journals', '0073_auto_20170918_0811'), - ] - - operations = [ - migrations.CreateModel( - name='Action', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255, verbose_name='Наименование действия (на английском)')), - ('text', models.TextField(verbose_name='Описание действия')), - ], - ), - migrations.CreateModel( - name='Journal', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('object_id', models.PositiveIntegerField()), - ('date', models.DateTimeField(auto_now=True)), - ('action_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='journals.Action')), - ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), - ], - ), - migrations.CreateModel( - name='Thread', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('key', models.CharField(max_length=200)), - ('text', models.TextField(default='', verbose_name='Описание треда')), - ('is_staff', models.BooleanField(default=False, verbose_name='Админская ли табличка')), - ('parent', models.ManyToManyField(blank=True, related_name='_thread_parent_+', to='journals.Thread')), - ('subscribers', models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name='Подписчики')), - ], - ), - migrations.AddField( - model_name='journal', - name='thread', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='journals.Thread', verbose_name='Тред'), - ), - migrations.AddField( - model_name='journal', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Инициатор действия'), - ), - ] diff --git a/journals/migrations/0075_auto_20170926_1238.py b/journals/migrations/0075_auto_20170926_1238.py deleted file mode 100644 index 90e3389..0000000 --- a/journals/migrations/0075_auto_20170926_1238.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-09-26 12:38 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0074_auto_20170925_1829'), - ] - - operations = [ - migrations.AddField( - model_name='thread', - name='x', - field=models.SmallIntegerField(default=0), - ), - migrations.AddField( - model_name='thread', - name='y', - field=models.SmallIntegerField(default=0), - ), - ] diff --git a/journals/migrations/0077_journal_extra_data.py b/journals/migrations/0077_journal_extra_data.py deleted file mode 100644 index facfcd2..0000000 --- a/journals/migrations/0077_journal_extra_data.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-10-06 16:22 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0076_auto_20170928_1625'), - ] - - operations = [ - migrations.AddField( - model_name='journal', - name='extra_data', - field=models.TextField(default=''), - ), - ] diff --git a/journals/migrations/0078_auto_20171009_0952.py b/journals/migrations/0078_auto_20171009_0952.py deleted file mode 100644 index 963f6fe..0000000 --- a/journals/migrations/0078_auto_20171009_0952.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-10-09 09:52 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0077_journal_extra_data'), - ] - - operations = [ - migrations.AddField( - model_name='thread', - name='check_subscribe', - field=models.BooleanField(default=True, verbose_name='Проверять ли подписки'), - ), - migrations.AlterField( - model_name='thread', - name='subscribers', - field=models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL, verbose_name='Подписчики'), - ), - ] diff --git a/journals/migrations/0079_thread_is_child.py b/journals/migrations/0079_thread_is_child.py deleted file mode 100644 index f079b85..0000000 --- a/journals/migrations/0079_thread_is_child.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-10-09 17:33 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0078_auto_20171009_0952'), - ] - - operations = [ - migrations.AddField( - model_name='thread', - name='is_child', - field=models.BooleanField(default=False, verbose_name='Поле аптимизации поиска'), - ), - ] diff --git a/journals/migrations/0080_auto_20171009_1736.py b/journals/migrations/0080_auto_20171009_1736.py deleted file mode 100644 index 36c84e2..0000000 --- a/journals/migrations/0080_auto_20171009_1736.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-10-09 17:36 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0079_thread_is_child'), - ] - - operations = [ - migrations.RenameField( - model_name='thread', - old_name='is_child', - new_name='is_recursively', - ), - ] diff --git a/journals/migrations/0081_auto_20171009_1742.py b/journals/migrations/0081_auto_20171009_1742.py deleted file mode 100644 index b15127e..0000000 --- a/journals/migrations/0081_auto_20171009_1742.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-10-09 17:42 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('journals', '0080_auto_20171009_1736'), - ] - - operations = [ - migrations.RemoveField( - model_name='thread', - name='is_recursively', - ), - migrations.AddField( - model_name='thread', - name='recurse_step', - field=models.SmallIntegerField(default=0, verbose_name='Поле аптимизации поиска'), - ), - ] diff --git a/journals/models.py b/journals/models.py index 20d62ea..a739891 100755 --- a/journals/models.py +++ b/journals/models.py @@ -1,1671 +1,14 @@ # coding=utf-8 from __future__ import unicode_literals -import datetime -import os from django.conf import settings -from django.contrib.auth import get_user_model from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType from django.db import models -from django.db.models import Q -from courses.models import CourseTheme, Lesson, Homework, Exam, Achievements, Course, CourseMap, \ - AchievementsMap, \ - Diploma -from courses.templates import search_in_collection, STATUS_COLLECTION, comment_fabric, BUTTON_TYPE +from courses.models import Achievements, Course, CourseMap, Diploma from management.models import Comment -from lms.settings import TEACHER, DOMAIN, BASE_DIR -from lms.tools import out_date_format, gen_write from finance.models import Bill -import operator - - -def get_active_tj_count(teacher): - # Получить количество активных журналов по этому курсу - return HomeworkJ.objects.filter(teacher=teacher, f_date=None, success=False).exclude(date=None).count() - - -class TeacherJ(models.Model): - # Журнал преподавания - TJSTATUS = ( - ('O', u'Пустой'), - ('W', u'В работе'), - ('F', u'Завершен') - ) - status = models.CharField(verbose_name=u'Статус', choices=TJSTATUS, default='O', max_length=1) - student = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Студент', related_name=u'teacherJ_student', null=True, blank=True) - full = models.BooleanField(verbose_name=u'Журнал создан', default=False) - course = models.ForeignKey(Course, verbose_name=u'Курс') - homework = models.ForeignKey(Homework, verbose_name=u'ДЗ', blank=True, null=True) - lesson = models.ForeignKey(Lesson, verbose_name=u'Урок', blank=True, null=True) - progress = models.IntegerField(verbose_name=u'Прогресс', default=0) - current_token = models.CharField(verbose_name=u'Текущий ключ', blank=True, default='', max_length=100) - teacher = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Преподаватель', related_name=u'teacherJ_teacher', blank=True, - null=True) - start_date = models.DateTimeField(verbose_name=u'Дата начала', blank=True, null=True) - opens = models.ManyToManyField(CourseMap, verbose_name=u'Насильные открытия', blank=True, editable=False, - related_name='map_opens') - waiting = models.ManyToManyField(CourseMap, verbose_name=u'Доп изучения', blank=True, - related_name='map_waiting') - - def __str__(self): - return '%s %s %s' % (self.teacher, self.student, self.course) - - def __unicode__(self): - return u'%s %s %s' % (self.teacher, self.student, self.course) - - def append_waiting(self, point): - obj = point.get_obj() - cj = CourseThemeJ.objects.get(student=self.student, material=obj.theme) - result = False - if cj.get_status_flag() == 'F': - result = True - for i in self.opens.all(): - if i.token > point.token: - result = False - - if result: - self.waiting.add(point) - - def get_current_ht(self): - # Получить текущую попытку ДЗ - return HomeworkTry.objects.filter(parent__parent__parent=self, success=False, f_date=None).last() \ - if HomeworkTry.objects.filter(parent__parent__parent=self, success=False, f_date=None).exists() \ - else None - - def get_last_hw(self): - return HomeworkJ.objects.filter(parent__parent=self, success=False, f_date=None).last() if HomeworkJ.objects.filter(parent__parentt=self, success=False, f_date=None).exists() else None - - def reload_progress(self, _with_save=True): - result = 0 - # 1) Получение количества уроков + экзамен - all_lessons = Lesson.objects.filter(course=self.course).count() + \ - Homework.objects.filter(course=self.course).count() + \ - Exam.objects.filter(course=self.course).count() - finish_lessons = LessonJ.objects.filter(parent__parent=self, success=True, student=self.student).count() + \ - HomeworkJ.objects.filter(parent__parent=self, success=True, student=self.student).count() + \ - ExamJ.objects.filter(parent__parent=self, success=True, student=self.student).count() - # 2) Разделить на количество пройденых уроков - if all_lessons and finish_lessons: - result = int(float(100 / (float(all_lessons) / float(finish_lessons)))) - self.progress = result - if _with_save: - self.save() - - def get_status(self): - # Проверка - return '' - - def get_empty_head_face(self): - return { - 'title': self.course.get_title(), - 'mid': self.course.id, - 'slug': self.course.slug, - 'id': None, - 'material': self.course, - 'progress': 0, - 'level': self.course.get_level(), - 'lessons': self.course.lessons_length(), - 'img': self.course.get_image(), - 'big_img': self.course.get_big_image(), - 'mobil_img': self.course.get_mobile_big_image(), - 'skills': self.course.get_skills(), - 'page': self.course.page, - 'course_id': self.course.id - } - - def get_head_face(self): - if self.start_date and self.student: - by = Bill.objects.filter(service__course=self.course, status='F', user=self.student) - return { - 'title': self.course.get_title(), - 'teacher': self.teacher, - 'mid': self.course.id, - 'slug': self.course.slug, - 'id': self.id, - 'material': self.course, - 'progress': self.progress, - 'level': self.course.get_level(), - 'lessons': self.course.lessons_length(), - 'img': self.course.get_image(), - 'big_img': self.course.get_big_image(), - 'mobil_img': self.course.get_mobile_big_image(), - 'skills': self.course.get_skills(), - 'page': self.course.page, - 'course_id': self.course.id, - 'by': by.exists(), - } - else: - return self.get_empty_head_face() - - def get_empty_face(self, user): - # Получить темы - return { - 'head': self.get_empty_head_face(), - 'student': self.student, - 'themes': (theme.get_empty_face(user) for theme in CourseThemeJ.objects.filter(parent=self)) - } - - def get_face(self, user): - if not self.full: - check_journal(self, from_console=True) - self.full = True - self.save() - if self.start_date and self.student: - return { - 'head': self.get_head_face(), - 'student': self.student, - 'themes': (theme.get_face(user) for theme in CourseThemeJ.objects.filter(parent=self)), - 'length': CourseThemeJ.objects.filter(parent=self).count() - } - else: - return self.get_empty_face(user) - - def get_low_teacher(self): - # Получение наименее загруженного препода - t = {} - for i in self.course.teachers.exclude(Q(email=TEACHER)|Q(deactivate=True)): - t[i] = get_active_tj_count(i) - for key, value in sorted(t.items(), key=operator.itemgetter(1)): - return key - - def teacher_to_set(self): - if self.teacher: - return self.teacher - else: - if self.student and self.student.in_role != 'U': - return get_user_model().objects.get(email=TEACHER) - teachers = self.course.teachers.all() - if len(teachers) == 1: - return teachers.first() - else: - return self.get_low_teacher() - - def get_teacher(self): - # Получение преподавателя для студента по курсу - return self.teacher - - def reload_status(self): - status = self.status - if self.teacher: - status = 'W' - - if Exam.objects.filter(course=self.course).exists() and ExamJ.objects.filter(success=True, parent__parent=self).exists(): - status = 'F' - - return status - - def save(self, *args, **kwargs): - ''' - if self.current_tch != self.teacher: - hw = self.get_current_ht() - if hw: - if hw.parent.teacher != self.teacher: - hw.parent.teacher = self.teacher - hw.parent.save() - - if hw.teacher != self.teacher: - hw.new_teach = self.teacher - hw.save() - - else: - hw = self.get_last_hw() - if hw: - hw.teacher = self.teacher - hw.save() - - self.current_tch = self.teacher - ''' - self.reload_progress(_with_save=False) - - status = self.reload_status() - if self.status != status: - self.status = status - - super(TeacherJ, self).save(*args, **kwargs) - - class Meta: - verbose_name = u'Журнал преподавания' - verbose_name_plural = u'Журналы проподавания' - ordering = ['-id'] - - -class CourseThemeJ(models.Model): - # Журнал темы - set_open = models.BooleanField(verbose_name=u'Насильно открыть доступ', default=False) - success = models.BooleanField(verbose_name=u'Закончено', default=False) - student = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Студент', null=True) - parent = models.ForeignKey(TeacherJ, verbose_name=u'Журнал преподавания', blank=True, null=True, editable=False) - material = models.ForeignKey(CourseTheme, verbose_name=u'Тема') - date = models.DateTimeField(verbose_name=u'Дата начала', blank=True, null=True) - f_date = models.DateTimeField(verbose_name=u'Дата завершения', blank=True, null=True) - actual_lesson = models.ForeignKey(Lesson, verbose_name=u'Актуальны урок для этой темы', blank=True, null=True) - - def __unicode__(self): - return u'%s: %s %s' % (self.id, self.material, self.student) - - def __str__(self): - return '%s: %s %s' % (self.id, self.material, self.student) - - def reload_progress(self): - self.parent.reload_progress() - - def get_teacher(self): - return self.parent.get_teacher() - - def saw_this(self): - do = [] - if not LessonJ.objects.filter(parent=self).exclude(success=True).exists(): - do.append(True) - if not HomeworkJ.objects.filter(parent=self).exclude(success=True).exists(): - do.append(True) - if not ExamJ.objects.filter(parent=self).exclude(success=True).exists(): - do.append(True) - if not self.success:self.success = True - if not self.f_date: self.f_date = datetime.datetime.now() - if len(do) == 3: self.save();self.reload_progress() - - def make_actual_lesson(self): - # Заполнить актуальный ID журнала урока - if Lesson.objects.filter(theme=self.material).exists(): - if self.material._type != 'Ex': - for i in LessonJ.objects.filter(parent=self).order_by('-material__sort'): - if i.get_status_flag() in ['A', 'F']: - return i.material.id - return None - - def get_status_flag(self): - # Если success - закончен - if self.success: - return 'F' - - elif self.date and not self.f_date: - return 'A' - - elif self.date and self.f_date and not self.success: - # Поставить success = True если по условиям он должен быть - self.success = True - self.save() - return 'F' - - elif self.material._type != 'Ex' and LessonJ.objects.filter(parent=self).exists(): - return LessonJ.objects.filter(parent=self).first().get_status_flag() - - elif self.material._type == 'Ex': - try: - return ExamJ.objects.get(parent=self).get_status_flag() - except ExamJ.DoesNotExist: - return 'N' - return 'N' - - def get_status(self): - return search_in_collection(STATUS_COLLECTION, 'flag', self.get_status_flag()) - - def get_empty_head_face(self): - return { - 'mid': self.material.id, - 'id': self.id, - 'type': self.material.get_type(), - 'title': self.material.get_title(), - 'status': self.get_status(), - 'description': self.material.get_description() if self.material._type != 'Ex' else '', - 'skills': self.material.get_skills(), # skill_template - 'sort': self.material.sort, - 'actual_lesson': self.actual_lesson, - 'button': self.get_button(), - 'lessons_length': self.material.lessons_length(), - 'homeworks_length': self.material.homework_length(), - 'icon': self.material.get_icon() - } - - def get_empty_face(self, user): - return { - 'head': self.get_head_face(), - 'parent': self.parent, - 'lessons': (journal.get_empty_head_face() for journal in LessonJ.objects.filter(parent=self)), - 'homework': list(journal.get_empty_head_face() for journal in HomeworkJ.objects.filter(parent=self)), - 'exam': (journal.get_empty_head_face() for journal in ExamJ.objects.filter(parent=self)), # exam_template - } - - def get_head_face(self): - return { - 'mid': self.material.id, - 'id': self.id, - 'type': self.material.get_type(), - 'title': self.material.get_title(), - 'status': self.get_status(), # status_template - 'description': self.material.get_description() if self.material._type != 'Ex' else '', - 'skills': self.material.get_skills(), # skill_template - 'sort': self.material.sort, - 'actual_lesson': self.actual_lesson, - 'button': self.get_button(), - 'lessons_length': self.material.lessons_length(), - 'homeworks_length': self.material.homework_length(), - 'icon': self.material.get_icon() - } - - def get_face(self, user): - # Получить лицо темы - return { - 'head': self.get_head_face(), - 'parent': self.parent, - 'lessons': (journal.get_head_face() for journal in LessonJ.objects.filter(parent=self)), - 'homework': list(journal.get_head_face() for journal in HomeworkJ.objects.filter(parent=self)), - 'exam': (journal.get_head_face() for journal in ExamJ.objects.filter(parent=self)), # exam_template - } - - def get_statistic_face(self): - # Цвета: - # Серый - не доступен - # Зеленый - все сдано в течении 2х дней - # Синий - уроки пройдены/дз открыто - # Оранжевый - прохождение больше 2х дней и количество попыток внутрь - # Работа зажержана на неделю - color = 'default' - if not self.date or not self.f_date: - color = 'default' - elif (self.f_date and self.success) and (self.f_date - self.date).days < 2: - color = 'success' - elif (self.f_date - self.date).days < 2 and HomeworkJ.objects.filter(material__theme=self.material, - f_date=None).exists(): - color = 'primary' - elif (self.f_date - self.date).days > 2 and HomeworkJ.objects.filter(material__theme=self.material, - f_date=None).exists(): - color = 'warning' - elif (self.f_date - self.date).days > 14 and HomeworkJ.objects.filter(material__theme=self.material, - f_date=None).exists(): - color = 'danger' - return { - 'color': color, - 'tries': ExamTry.objects.filter( - material__theme=self.material).count() if self.material._type != 'Ex' else HomeworkTry.objects.filter( - material__theme=self.material).count() - } - - def get_button(self): - # Выводить только кнопки Экзамена или урока - try: - if self.material._type == 'Ex': - return ExamJ.objects.get(parent=self).get_button() - else: - if not self.actual_lesson: - return LessonJ.objects.get(material=self.make_actual_lesson(), parent=self).get_button() - return LessonJ.objects.get(material=self.actual_lesson, parent=self).get_button() - except ExamJ.DoesNotExist: - check_journal(self.parent) - except LessonJ.DoesNotExist: - check_journal(self.parent) - - def check_pay(self): - return self.parent.check_pay(__type=self.material.price_type) - - def get_parent(self): - # Определение родителя объекта - p, c = TeacherJ.objects.get_or_create(student=self.student, course=self.material.course) - if c: - p.date = datetime.datetime.now() - p.save() - return p - - def save(self, *args, **kwargs): - if not self.parent: - self.parent = self.get_parent() - actual_lesson = self.make_actual_lesson() - - if not self.date and self.f_date: - self.date = self.f_date - - if actual_lesson: - if not self.actual_lesson: - self.actual_lesson = Lesson.objects.get(id=self.make_actual_lesson()) - elif actual_lesson != self.actual_lesson.id: - self.actual_lesson = Lesson.objects.get(id=self.make_actual_lesson()) - - if LessonJ.objects.filter(parent=self, student=self.student).exists(): - if LessonJ.objects.filter(parent=self, student=self.student, success=False).exists(): - self.success = False - else: - self.success = True - - if self.set_open: - if Lesson.objects.filter(theme=self.material).order_by('sort').exists(): - lesson = Lesson.objects.filter(theme=self.material).order_by('sort')[0] - else: - lesson = CourseMap.objects.filter(course=self.material.course).order_by('-sort')[0] - - if self.material._type != 'Ex' and not self.parent.opens.filter(token=lesson.token).exists(): - self.parent.opens.add(CourseMap.objects.get(token=lesson.token)) - set_opened(self.parent, lesson.token) - - elif self.material._type == 'Ex' and not self.parent.opens.filter(id=CourseMap.objects.get(token=Exam.objects.get(theme=self.material).token).id).exists(): - set_opened(self.parent, Exam.objects.get(theme=self.material).token) - - super(CourseThemeJ, self).save(*args, **kwargs) - - class Meta: - verbose_name = u'Журнал темы' - verbose_name_plural = u'Журнал темы' - ordering = ['material__sort'] - - -class LessonJ(models.Model): - # Журнал урока - set_open = models.BooleanField(verbose_name=u'Насильно открыть доступ', default=False) - student = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Студент', null=True) - success = models.BooleanField(verbose_name=u'Пройдено', default=False) - material = models.ForeignKey(Lesson, verbose_name=u'Урок') - parent = models.ForeignKey(CourseThemeJ, verbose_name=u'Журнал темы', blank=True, null=True, editable=False) - date = models.DateTimeField(verbose_name=u'Дата начала', null=True, blank=True) - f_date = models.DateTimeField(verbose_name=u'Дата завернешия', blank=True, null=True) - - def __unicode__(self): - return u'%s:%s %s %s' % (self.id, self.student, self.material, self.success) - - def __str__(self): - return '%s:%s %s %s' % (self.id, self.student, self.material, self.success) - - def get_status_flag(self): - if self.success: - return 'F' - elif CourseMap.objects.filter(token=u'{0}#{1}'.format(self.material.course.id, 0), - lesson=self.material).exists() or self.date: - return 'A' - return 'N' - - def get_teacher(self): - return self.parent.get_teacher() - - def get_status(self): - return search_in_collection(STATUS_COLLECTION, 'flag', self.get_status_flag(), in_type='L') - - def get_empty_head_face(self): - if self.material.on_comment == 'T': - on_comment = self.material.theme.on_comment - elif self.material.on_comment == 'N': - on_comment = True - else: - on_comment = False - - return { - 'title': self.material.get_title(), - 'status': self.get_status(), - 'skills': self.material.get_skills(), - 'mid': self.material.id, - 'id': self.id, - 'sort': self.material.sort, - 'button': self.get_button(), - 'on_comment': on_comment - } - - def get_empty_face(self, user): - return { - 'head': self.get_empty_head_face(), - 'description': self.material.get_description(), - 'video': self.material.video, - 'comments': self.material.get_comments(_user=user), - 'next': self.get_next() - } - - def get_head_face(self): - if self.material.on_comment == 'T': - on_comment = self.material.theme.on_comment - elif self.material.on_comment == 'N': - on_comment = True - else: - on_comment = False - - return { - 'title': self.material.get_title(), - 'status': self.get_status(), - 'skills': self.material.get_skills(), - 'mid': self.material.id, - 'id': self.id, - 'sort': self.material.sort, - 'button': self.get_button(), - 'on_comment': on_comment - } - - def get_face(self, user): - if self.student: - return { - 'head': self.get_head_face(), - 'description': self.material.get_description(), - 'video': self.material.video, - 'comments': self.material.get_comments(_user=user), - 'next': self.get_next(), - 'materials': self.material.get_materials() - } - else: - return self.get_empty_face(user) - - def get_button(self): - b = search_in_collection(BUTTON_TYPE, 'flag', 'A', in_type='L') - b['course'] = self.material.course.id - b['id'] = self.material.id - return b - - def get_next(self): - try: - _next = CourseMap.objects.get(token=self.material.token) - except CourseMap.DoesNotExist: - _next = CourseMap.objects.get(token=self.material.course.build_map(material=self.material)) - _type, _next = _next.get_next() - if _type == 'L': - obj = LessonJ - elif _type == 'H': - obj = HomeworkJ - elif _type == 'E': - obj = ExamJ - - j, c = obj.objects.get_or_create(material=_next, student=self.student) - if self.success: - j.open_material() - return {'button': search_in_collection(BUTTON_TYPE, - 'flag', - 'A', - in_type=_type), - 'obj': _next, - 'journal': j, - 'type': _type} - - def get_before(self): - try: - _before = CourseMap.objects.get(token=self.material.token) - except CourseMap.DoesNotExist: - _before = CourseMap.objects.get(token=self.material.course.build_map(material=self.material)) - _type, _before = _before.get_before() - - if _type == 'L': - obj = LessonJ - elif _type == 'H': - obj = HomeworkJ - elif _type == 'E': - obj = ExamJ - - j = obj.objects.get(material=_before, student=self.student) - if j.success: - self.open_material() - return {'button': search_in_collection(BUTTON_TYPE, - 'flag', - 'A', - in_type=_type), - 'obj': _before, - 'journal': j, - 'type': _type} - - def open_material(self): - try: - point = AchievementsMap.objects.get(point=CourseMap.objects.get(token=self.material.token), after=False) - except AchievementsMap.DoesNotExist: - pass - else: - if point.achiv: - if not AchievementJ.objects.filter(student=self.student, achievement=point.achiv).exists(): - AchievementJ.objects.create(group=self.material.course.get_title(), - title=self.material.get_title(), - student=self.student, achievement=point.achiv) - - do = False - self_do = False - if not self.parent: self.parent = self.get_parent();self_do = True - if not self.date: self.date = datetime.datetime.now();self_do = True - if not self.parent.date: self.parent.date = datetime.datetime.now();do = True - - if self.parent.parent.lesson and not CourseMap.objects.get(lesson=self.material).sort <= CourseMap.objects.get(lesson=self.parent.parent.lesson).sort: - self.parent.parent.lesson = self.material; do = True - - if self_do: self.save() - if do: self.parent.save() - - def saw_this(self): - try: - point = AchievementsMap.objects.get(point=CourseMap.objects.get(token=self.material.token), after=True) - except AchievementsMap.DoesNotExist: - pass - else: - if not AchievementJ.objects.filter(student=self.student, achievement=point.achiv).exists(): - AchievementJ.objects.create(group=self.material.course.get_title(), - title=self.material.get_title(), - student=self.student, achievement=point.achiv) - if self.parent.parent.waiting.filter(token=self.material.token).exists(): - self.parent.parent.waiting.remove(CourseMap.objects.get(token=self.material.token)) - do = False - if not self.success: self.success = True;do=True - if not self.f_date: self.f_date = datetime.datetime.now();do=True - if do: self.save() - self.parent.reload_progress() - _next = self.get_next() - _next['journal'].open_material() - - def check_parent_success(self): - # Проверить - нужно ли прочитать родителя - pass - - def get_parent(self): - # Определение родителя объекта - p, c = CourseThemeJ.objects.get_or_create(student=self.student, material=self.material.theme) - if c: - p.date = datetime.datetime.now() - p.save() - return p - - def check_pay(self): - return self.parent.check_pay() - - def save(self, *args, **kwargs): - if not self.parent: - self.parent = self.get_parent() - - if self.set_open and not self.parent.parent.opens.filter( - id=CourseMap.objects.get(token=self.material.token).id).exists(): - set_opened(self.parent.parent, self.material.token) - - if self.f_date and self.date and not self.success: - self.success = True - - if self.get_status_flag() == 'F': - if not HomeworkJ.objects.filter(parent=self.parent).exists() and \ - not LessonJ.objects.filter(parent=self.parent, success=False).exclude(id=self.id).exists(): - self.parent.saw_this() - else: - self.get_next()['journal'].open_material() - super(LessonJ, self).save(*args, **kwargs) - - class Meta: - verbose_name = u'Журанл урока' - verbose_name_plural = u'Журналы уроков' - ordering = ['material__sort'] - - -class HomeworkJ(models.Model): - # Журнал сдачи работы - set_open = models.BooleanField(verbose_name=u'Насильно открыть доступ', default=False) - success = models.BooleanField(verbose_name=u'Закончено', default=False) - student = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Студент', related_name='h_student', null=True) - teacher = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Экзаменатор', related_name='h_teacher', blank=True, null=True) - material = models.ForeignKey(Homework, verbose_name=u'Домашнее задание') - parent = models.ForeignKey(CourseThemeJ, verbose_name=u'Журнал темы', blank=True, null=True, editable=False) - date = models.DateTimeField(verbose_name=u'Дата предоставления доступа', null=True, blank=True) - f_date = models.DateTimeField(verbose_name=u'Дата звершения', null=True, blank=True) - - def __unicode__(self): - return u'%s %s' % (self.student, self.success) - - def __str__(self): - return '%s %s' % (self.student, self.success) - - def get_status_flag(self): - if self.success: - return 'F' - else: - if HomeworkTry.objects.filter(parent=self).exists(): - return HomeworkTry.objects.filter(parent=self).last().get_status_flag() - elif self.date: - return 'A' - return 'N' - - def get_teacher(self): - #if self.get_trues_length() != 0: - # ex = HomeworkTry.objects.filter(parent=self).exclude(teacher=None).last() - # if ex: - # return ex.teacher - return self.parent.get_teacher() - - def get_status(self): - return search_in_collection(STATUS_COLLECTION, 'flag', self.get_status_flag(), in_type='H') - - def get_empty_face(self, user): - return { - 'head': self.get_empty_head_face(), - 'materials': [], - 'tries': [] - } - - def get_empty_head_face(self): - return { - 'mid': self.material.id, - 'id': self.id, - 'status': search_in_collection(STATUS_COLLECTION, 'flag', 'N', in_type='H'), - 'description': '', - 'button': self.get_button(), - 'delay': {'status': False, - 'description': ''} - } - - def get_head_face(self): - return { - 'mid': self.material.id, - 'id': self.id, - 'status': self.get_status(), - 'button': self.get_button(), - 'title': self.material.get_title(), - 'description': self.material.get_description(), - 'delay': {'status': True if (self.teacher and self.teacher.delay) else False, - 'description': self.teacher.delay_description if self.teacher and self.teacher.delay else ''} - } - - def get_face(self, user): - if self.student: - return { - 'head': self.get_head_face(), - 'materials': self.material.get_materials(), - 'tries': [_try.get_face(user) for _try in HomeworkTry.objects.filter(parent=self)], - 'next': self.get_next(), - 'teacher': self.teacher - } - else: - return self.get_empty_face(user) - - def get_trues_length(self): - return HomeworkTry.objects.filter(parent=self).count() - - def get_button(self): - b = search_in_collection(BUTTON_TYPE, 'flag', 'A', in_type='H') - b['course'] = self.material.course.id - b['id'] = self.material.id - return b - - def get_next(self): - try: - _next = CourseMap.objects.get(token=self.material.token) - except CourseMap.DoesNotExist: - _next = CourseMap.objects.get(token=self.material.course.build_map(material=self.material)) - _type, _next = _next.get_next() - if _type == 'L': - obj = LessonJ - elif _type == 'H': - obj = HomeworkJ - elif _type == 'E': - obj = ExamJ - - j = obj.objects.get(material=_next, student=self.student) - if self.success: - j.open_material() - return {'button': search_in_collection(BUTTON_TYPE, - 'flag', - 'A', - in_type=_type), - 'obj': _next, - 'journal': j, - 'type': _type} - - def get_before(self): - try: - _before = CourseMap.objects.get(token=self.material.token) - except CourseMap.DoesNotExist: - _before = CourseMap.objects.get(token=self.material.course.build_map(material=self.material)) - _type, _before = _before.get_before() - if _type == 'L': - obj = LessonJ - elif _type == 'H': - obj = HomeworkJ - elif _type == 'E': - obj = ExamJ - - j = obj.objects.get(material=_before, student=self.student) - if self.success: - j.open_material() - return {'button': search_in_collection(BUTTON_TYPE, - 'flag', - 'A', - in_type=_type), - 'obj': _before, - 'journal': j, - 'type': _type} - - def open_next(self): - material = self.get_next() - if material['type'] == 'L' and material['journal'].get_status_flag() == 'N': - material['journal'].open_material() - - def saw_this(self): - try: - point = AchievementsMap.objects.get(point=CourseMap.objects.get(token=self.material.token), after=True) - except AchievementsMap.DoesNotExist: - pass - else: - if not AchievementJ.objects.filter(student=self.student, achievement=point.achiv).exists(): - AchievementJ.objects.create(group=self.material.course.get_title(), - title=self.material.get_title(), - student=self.student, achievement=point.achiv) - if self.parent.parent.waiting.filter(token=self.material.token).exists(): - self.parent.parent.waiting.remove(CourseMap.objects.get(token=self.material.token)) - do = True - if not self.success:self.success = True;do=True - if not self.f_date: self.f_date = datetime.datetime.now();do=True - if do: self.save() - if self.parent.parent.homework and not CourseMap.objects.get(homework=self.material).sort <= CourseMap.objects.get( - homework=self.parent.parent.homework).sort: - self.parent.parent.homework = self.material - self.parent.parent.save() - self.parent.saw_this() - self.parent.reload_progress() - _next = self.get_next() - if LessonJ.objects.filter(parent=_next['journal'].parent).exclude(success=True).exists(): - _next['journal'].open_material() - elif HomeworkJ.objects.filter(parent=_next['journal'].parent).exclude(success=True).exists(): - HomeworkJ.objects.filter(parent=_next['journal'].parent).exclude(success=True).first().open_material() - - - def check_pay(self): - return self.parent.check_pay() - - def open_material(self): - if not HomeworkJ.objects.filter(parent__parent=self.parent.parent).exclude(Q(date=None)|Q(success=True)).exists(): - try: - point = AchievementsMap.objects.get(point=CourseMap.objects.get(token=self.material.token), after=False) - except AchievementsMap.DoesNotExist: - pass - else: - if not AchievementJ.objects.filter(student=self.student, achievement=point.achiv).exists(): - AchievementJ.objects.create(group=self.material.course.get_title(), - title=self.material.get_title(), - student=self.student, achievement=point.achiv) - do = False - self_do = False - if not self.parent: self.parent = self.get_parent();self_do = True - if not self.date: self.date = datetime.datetime.now();self_do = True - if not self.parent.date: self.parent.date = datetime.datetime.now();do = True - if do: self.parent.save() - if self_do: self.save() - - def get_parent(self): - # Определение родителя объекта - p, c = CourseThemeJ.objects.get_or_create(student=self.student, material=self.material.theme) - if c: - p.date = datetime.datetime.now() - p.save() - return p - - def get_tries(self, user=None): - return [i.get_face(user) for i in HomeworkTry.objects.filter(parent=self)] - - def check_expired(self): - return HomeworkTry.objects.filter(parent=self, expired=True).exists() - - def expired_time(self): - # Общее время просрочки по домашнему заданию в часах - result = 0 - for t in HomeworkTry.objects.filter(parent=self, expired=True): - result += t.get_expired_time() - return result - - def get_url(self): - return u'{0}/teacher/workshop/homework/{1}'.format(DOMAIN, self.id) - - def save(self, *args, **kwargs): - if not self.parent: - self.parent = self.get_parent() - - if self.set_open and not self.parent.parent.opens.filter( - id=CourseMap.objects.get(token=self.material.token).id).exists(): - set_opened(self.parent.parent, self.material.token) - - # Выставить статус теме - if self.f_date and self.date and not self.success: - self.success = True - - if not self.teacher and self.get_status_flag() != 'N': - self.teacher = self.get_teacher() - - if self.get_status_flag() == 'F': - if not HomeworkJ.objects.filter(parent=self.parent, success=False).exclude(id=self.id).exists(): - self.parent.saw_this() - else: - self.get_next()['journal'].open_material() - super(HomeworkJ, self).save(*args, **kwargs) - - class Meta: - verbose_name = u'Журнал домашней работы' - verbose_name_plural = u'Журналы домашних работ' - ordering = ['material__sort'] - - -class HomeworkTry(models.Model): - # Попытка сдачи экзамена - parent = models.ForeignKey(HomeworkJ, verbose_name=u'Журнал', blank=True, null=True, editable=False) - material = models.ForeignKey(Homework, verbose_name=u'Домашнее задание') - student = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Студент', related_name='h_t_student') - teacher = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Преподаватель', related_name='h_t_teacher', blank=True, null=True) - new_teach = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Новый преподаватель', related_name='h_t_new_teacher', blank=True, null=True) - date = models.DateTimeField(verbose_name=u'Начало', default=datetime.datetime.now) - f_date = models.DateTimeField(verbose_name=u'Завершение', blank=True, null=True) - success = models.BooleanField(verbose_name=u'Одобрено', default=False) - expired = models.BooleanField(verbose_name=u'Просрочено', default=False) - comments = models.ManyToManyField(Comment, verbose_name=u'Общение', blank=True, editable=False) - - def __unicode__(self): - return u'%s %s %s' % (self.material, self.student, self.f_date) - - def __str__(self): - return '%s %s %s' % (self.material, self.student, self.f_date) - - def get_teacher(self): - #if not self.teacher: - return self.parent.get_teacher() - - def saw_this(self): - do = False - if not self.success: self.success=True;do=True - if not self.f_date: self.f_date=datetime.datetime.now();do=True - if do: self.save() - self.parent.saw_this() - - def get_status_flag(self): - # Получить флаг статуса - if not self.success and self.f_date: - return u'E' - elif self.success and self.f_date: - return u'F' - elif self.date and not self.f_date: - try: - self.comments.exists() - except: - return 'A' - else: - return 'T' - else: - return 'N' - - def expired_for(self): - return 'Просрочено' if self.expired else '' + str( - datetime.datetime.now() - (self.date + datetime.timedelta(hours=1)))[:8] + '' - - def get_expired_time(self): - # На сколько часов просрочена проверка - d = self.f_date if self.f_date else datetime.datetime.now() - return (d - self.date).seconds/60/60 - - def get_status(self): - # Результат возвращается по шаблону - return search_in_collection(STATUS_COLLECTION, 'flag', self.get_status_flag(), in_type='HT') - - def get_comments(self, user): - # Получить все комментарии урока - return [comment_fabric(comment, __type='HT', __user=user) for comment in self.comments.all()] - - def get_empty_face(self, user): - return {} - - def get_head_face(self): - return { - 'mid': self.material.id, - 'id': self.id, - 'status': self.get_status(), - 'teacher': { - 'short': self.teacher.get_short_name(), - 'full': self.teacher.get_full_name(), - 'ava': self.teacher.get_image_url() - }, - 'delay': {'status': True if (self.teacher and self.teacher.delay) else False, - 'description': self.teacher.delay_description if self.teacher and self.teacher.delay else ''} - } - - def get_face(self, user): - return { - 'mid': self.material.id, - 'id': self.id, - 'status': self.get_status(), - 'comments': self.get_comments(user), - 'date_start': out_date_format(self.date), - 'date_finish': out_date_format(self.f_date), - 'teacher': self.teacher - } - - def check_pay(self): - return self.parent.check_pay() - - def get_parent(self): - # Определение родителя объекта - p, c = HomeworkJ.objects.get_or_create(student=self.student, material=self.material) - if c: - p.date = datetime.datetime.now() - p.save() - return p - - def get_url(self): - self.parent.get_url() - - def save(self, *args, **kwargs): - if not self.parent: - self.parent = self.get_parent() - - #if (self.teacher and self.new_teach) and (self.teacher != self.new_teach): - # self.teacher = self.new_teach - #else: - if not self.teacher: - if not self.get_teacher(): - teacher = self.parent.parent.parent.teacher_to_set() - self.teacher = teacher - self.parent.teacher = teacher - self.parent.save() - self.parent.parent.parent.teacher = teacher - self.parent.parent.parent.save() - else: - self.teacher = self.get_teacher() - - if self.get_status_flag() not in ['N', 'F']: - self.parent.open_next() - - if self.get_status_flag() == 'F' and self.parent.get_status_flag() != 'F': - self.parent.saw_this() - - super(HomeworkTry, self).save(*args, **kwargs) - - class Meta: - verbose_name = u'Попытка сдачи ДЗ' - verbose_name_plural = u'Попытки сдачи ДЗ' - ordering = ['date'] - - -class ExamJ(models.Model): - # Журнал экзамена - set_open = models.BooleanField(verbose_name=u'Насильно открыть доступ', default=False) - success = models.BooleanField(verbose_name=u'Пройдено', default=False) - material = models.ForeignKey(Exam, verbose_name=u'Экзамен', null=True) - parent = models.ForeignKey(CourseThemeJ, verbose_name=u'Журнал', blank=True, null=True, editable=False) - student = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Экзаменуемый', related_name='e_student', null=True) - teacher = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Экзаменатор', related_name='e_teacher', blank=True, null=True) - date = models.DateTimeField(verbose_name=u'Дата', null=True, blank=True) - f_date = models.DateTimeField(verbose_name=u'Дата завершения', blank=True, null=True) - - def __unicode__(self): - return u'%s %s' % (self.student, self.success) - - def __str__(self): - return '%s %s' % (self.student, self.success) - - def get_teacher(self): - return self.parent.get_teacher() - - def get_url(self): - return u'{0}/teacher/workshop/exam/{1}'.format(DOMAIN, self.id) - - def get_status_flag(self): - if self.success: - return 'F' - else: - if ExamTry.objects.filter(parent=self).exists(): - return ExamTry.objects.filter(parent=self).last().get_status_flag() - else: - if self.date: - return 'A' - return 'N' - - def get_status(self): - return search_in_collection(STATUS_COLLECTION, 'flag', self.get_status_flag(), in_type='E') - - def get_empty_head_face(self): - return { - 'mid': self.material.id, - 'id': self.id, - 'status': search_in_collection(STATUS_COLLECTION, 'flag', 'N', in_type='E'), - 'description': '', - 'title': u'Экзаменационная работа', - 'button': self.get_button(), - 'teacher': self.teacher - } - - def get_head_face(self): - return { - 'mid': self.material.id, - 'id': self.id, - 'status': self.get_status(), - 'description': self.material.get_description() if self.get_status_flag() != 'N' else '', - 'title': u'Экзаменационная работа', - 'button': self.get_button() - } - - def get_empty_face(self, user): - return { - 'head': self.get_empty_head_face(), - 'materials': [], - 'tries': [] - } - - def get_face(self, user): - if self.student: - return { - 'head': self.get_head_face(), - 'materials': self.material.get_materials(), - 'tries': [_try.get_face(user) for _try in ExamTry.objects.filter(parent=self)], - 'next': self.get_next(), - 'teacher': self.teacher - } - else: - return self.get_empty_face(user) - - def get_button(self): - b = search_in_collection(BUTTON_TYPE, 'flag', 'A', in_type='E') - b['course'] = self.material.course.id - b['id'] = self.material.id - return b - - def open_material(self): - try: - point = AchievementsMap.objects.get(point=CourseMap.objects.get(token=self.material.token), after=False) - except AchievementsMap.DoesNotExist: - pass - else: - if not AchievementJ.objects.filter(student=self.student, achievement=point.achiv).exists(): - AchievementJ.objects.create(group=self.material.course.get_title(), - title=self.material.get_title(), - student=self.student, achievement=point.achiv) - do = False - self_do = False - if not self.parent: self.parent = self.get_parent();self_do = True - if not self.date: self.date = datetime.datetime.now();self_do = True - if not self.parent.date: self.parent.date = datetime.datetime.now();do = True - if do: self.parent.save() - if self_do: self.save() - - def saw_this(self): - try: - point = AchievementsMap.objects.get(point=CourseMap.objects.get(token=self.material.token), after=True) - except AchievementsMap.DoesNotExist: - pass - else: - if not AchievementJ.objects.filter(student=self.student, achievement=point.achiv).exists(): - AchievementJ.objects.create(group=self.material.course.get_title(), - title=self.material.get_title(), - student=self.student, achievement=point.achiv) - if self.parent.parent.waiting.filter(token=self.material.token).exists(): - self.parent.parent.waiting.remove(CourseMap.objects.get(token=self.material.token)) - do = False - if not self.success: self.success = True;do=True - if not self.f_date: self.f_date = datetime.datetime.now();do=True - if do: - self.save() - self.parent.reload_progress() - self.parent.saw_this() - d, c = DiplomaJ.objects.get_or_create(material=Diploma.objects.get(course=self.material.course), student=self.student) - if c: - d.parent = self - d.save() - self.get_next()['journal'].open_material() - - def get_next(self): - try: - _next = CourseMap.objects.get(token=self.material.token) - except CourseMap.DoesNotExist: - _next = CourseMap.objects.get(token=self.material.course.build_map(material=self.material)) - _type, _next = _next.get_next() - if _type == 'L': - obj = LessonJ - elif _type == 'H': - obj = HomeworkJ - elif _type == 'E': - obj = ExamJ - - j = obj.objects.get(material=_next, student=self.student) - if self.success: - j.open_material() - return {'button': search_in_collection(BUTTON_TYPE, - 'flag', - 'A', - in_type=_type), - 'obj': _next, - 'journal': j, - 'type': _type} - - def get_before(self): - try: - _before = CourseMap.objects.get(token=self.material.token) - except CourseMap.DoesNotExist: - _before = CourseMap.objects.get(token=self.material.course.build_map(material=self.material)) - _type, _before = _before.get_before() - if _type == 'L': - obj = LessonJ - elif _type == 'H': - obj = HomeworkJ - elif _type == 'E': - obj = ExamJ - - j = obj.objects.get(material=_before, student=self.student) - if self.success: - j.open_material() - return {'button': search_in_collection(BUTTON_TYPE, - 'flag', - 'A', - in_type=_type), - 'obj': _before, - 'journal': j, - 'type': _type} - - def check_pay(self): - return self.parent.check_pay() - - def get_parent(self): - # Определение родителя объекта - p, c = CourseThemeJ.objects.get_or_create(student=self.student, material=self.material.theme) - if c: - p.date = datetime.datetime.now() - p.save() - return p - - def save(self, *args, **kwargs): - if self.set_open and not self.parent.parent.opens.filter( - id=CourseMap.objects.get(token=self.material.token).id).exists(): - set_opened(self.parent.parent, self.material.token) - - if not self.parent: - self.parent = self.get_parent() - - if not self.teacher and self.get_status_flag() not in ['F', 'N']: - self.teacher = self.get_teacher() - - if self.f_date and self.date and not self.success: - self.success = True - - if self.get_status_flag() == 'F': - if not ExamJ.objects.filter(parent=self.parent, success=False).exclude(id=self.id).exists(): - self.parent.saw_this() - - else: - self.get_next()['journal'].open_material() - - super(ExamJ, self).save(*args, **kwargs) - - class Meta: - verbose_name = u'Журнал экзамена' - verbose_name_plural = u'Журналы экзаменов' - - -class ExamTry(models.Model): - # Попытка сдачи экзамена - parent = models.ForeignKey(ExamJ, verbose_name=u'Журнал', blank=True, null=True, editable=False) - material = models.ForeignKey(Exam, verbose_name=u'Экзамен') - student = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Студент', related_name='e_t_student') - teacher = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Преподаватель', related_name='e_t_teacher', blank=True, null=True) - date = models.DateTimeField(verbose_name=u'Начало', default=datetime.datetime.now) - f_date = models.DateTimeField(verbose_name=u'Завершение', blank=True, null=True) - success = models.BooleanField(verbose_name=u'Успешно', default=False) - expired = models.BooleanField(verbose_name=u'Просрочено', default=False) - comments = models.ManyToManyField(Comment, verbose_name=u'Общение', blank=True, editable=False) - - def __unicode__(self): - return u'%s %s %s' % (self.material, self.student, self.f_date) - - def __str__(self): - return '%s %s %s' % (self.material, self.student, self.f_date) - - def get_status_flag(self): - # Получить флаг статуса - if not self.success and self.f_date: - return u'E' - elif self.success and self.f_date: - return u'F' - elif self.date and not self.f_date: - try: - self.comments.exists() - except: - return 'A' - else: - return 'T' - else: - return 'N' - - def get_teacher(self): - return self.parent.get_teacher() - - def get_status(self): - # Результат возвращается по шаблону - return search_in_collection(STATUS_COLLECTION, 'flag', self.get_status_flag(), in_type='E') - - def get_empty_face(self, user): - return {} - - def get_comments(self, user): - # Получить все комментарии урока - return [comment_fabric(comment, __type='ET', __user=user) for comment in self.comments.all()] - - def expired_for(self): - return 'Просрочено' if self.expired else '' + str( - datetime.datetime.now() - (self.date + datetime.timedelta(hours=1)))[:8] + '' - - def get_head_face(self): - return { - 'mid': self.material.id, - 'id': self.id, - 'status': self.get_status(), - 'teacher': { - 'short': self.teacher.get_short_name(), - 'full': self.teacher.get_full_name(), - 'ava': self.teacher.get_image_url() - } - } - - def get_face(self, user): - return { - 'mid': self.material.id, - 'id': self.id, - 'status': self.get_status(), - 'comments': self.get_comments(user), - 'date': out_date_format(self.date), - 'f_date': out_date_format(self.f_date), - 'teacher': self.teacher - } - - def check_pay(self): - return self.parent.check_pay() - - def get_parent(self): - # Определение родителя объекта - p, c = ExamJ.objects.get_or_create(material=self.material, student=self.student) - if c: - p.date = datetime.datetime.now() - p.save() - return p - - def saw_this(self): - do = False - if not self.success: self.success=True;do=True - if not self.f_date: self.f_date=datetime.datetime.now();do=True - if do: self.save() - self.parent.saw_this() - - def save(self, *args, **kwargs): - if not self.parent: - self.parent = self.get_parent() - - if not self.get_teacher(): - teacher = self.parent.parent.parent.teacher_to_set() - self.teacher = teacher - self.parent.parent.parent.teacher = teacher - self.parent.parent.parent.save() - else: - self.teacher = self.get_teacher() - - if self.get_status_flag() == 'F': - self.saw_this() - super(ExamTry, self).save(*args, **kwargs) - - class Meta: - verbose_name = u'Попытка сдачи Экзамена' - verbose_name_plural = u'Попытки сдачи Экзаменов' - ordering = ['date'] - - -class DiplomaJ(models.Model): - gen = models.BooleanField(verbose_name=u'Сгенерирован', default=False) - parent = models.ForeignKey(ExamJ, verbose_name=u'Журнал сдачи', blank=True, null=True) - material = models.ForeignKey(Diploma, verbose_name=u'Шаблон диплома') - date = models.DateField(verbose_name=u'Дата выдачи', default=datetime.date.today) - key = models.IntegerField(verbose_name=u'Ключ', blank=True, null=True) - student = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Студент', null=True) - out_image = models.ImageField(verbose_name=u'Картинка без печати', upload_to='diploms', blank=True) - in_image = models.ImageField(verbose_name=u'Картинка c печатью', upload_to='diploms', blank=True) - - def __unicode__(self): - return u'%s %s' % (self.material, self.key) - - def __str__(self): - return '%s %s' % (self.material, self.key) - - def get_key(self): - return '#{0} {1} {2}'.format(str(self.key)[0:3], str(self.key)[3:6], str(self.key)[6:9]) - - def get_name(self): - return '{0}\n{1}'.format(self.student.name, self.student.fname) - - def get_date(self): - return u'{0:%B}_{1}_{2}'.format(self.date, self.date.day, self.date.year) - - def draw_date(self, _in=None, _out=None): - if not self.in_image: - place = self.material.get_place('date') - _in = gen_write(_in if _in else self.material.in_image.path, self.material.date_font.path, - self.material.date_size, - self.get_date(), place[0], place[1], self.material.get_color('date')) - if not self.out_image: - place = self.material.get_place('date') - _out = gen_write(_out if _out else self.material.out_image.path, - self.material.date_font.path, self.material.date_size, - self.get_date(), place[0], place[1], self.material.get_color('date')) - - return _in, _out - - def draw_name(self, _in=None, _out=None): - if not self.in_image: - place = self.material.get_place('name') - _in = gen_write(_in if _in else self.material.in_image.path, self.material.name_font.path, - self.material.name_size, - self.get_name(), place[0], place[1], self.material.get_color('name')) - if not self.out_image: - place = self.material.get_place('name') - _out = gen_write(_out if _out else self.material.out_image.path, - self.material.name_font.path, self.material.name_size, - self.get_name(), place[0], place[1], self.material.get_color('name')) - - return _in, _out - - def draw_key(self, _in=None, _out=None): - if not self.key: - self.key = self.material.get_key() - if not self.in_image: - place = self.material.get_place('key') - _in = gen_write(_in if _in else self.material.in_image.path, self.material.key_font.path, - self.material.key_size, - self.get_key(), place[0], place[1], self.material.get_color('key')) - if not self.out_image: - place = self.material.get_place('key') - _out = gen_write(_out if _out else self.material.out_image.path, - self.material.key_font.path, self.material.key_size, - self.get_key(), place[0], place[1], self.material.get_color('key')) - - return _in, _out - - class Meta: - verbose_name = u'Журнал дипломов' - verbose_name_plural = u'Журналы дипломов' - - -class AchievementJ(models.Model): - # Журнал достижений - group = models.CharField(verbose_name=u'Раздел', max_length=100, default='') - title = models.CharField(verbose_name=u'Заголовок', max_length=255) - text = models.TextField(verbose_name=u'Текст достижения', blank=True) - student = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Студент') - achievement = models.ForeignKey(Achievements, verbose_name=u'Шаблон достижения') - got = models.BooleanField(verbose_name=u'Получено', default=False) - date = models.DateField(verbose_name=u'Дата получения', default=datetime.date.today) - - def __unicode__(self): - return u'%s %s %s %s' % (self.title, self.student, self.date, self.got) - - def __str__(self): - return '%s %s %s %s' % (self.title, self.student, self.date, self.got) - - class Meta: - verbose_name = u'Журнал достижений' - verbose_name_plural = u'Журналы достижений' - - -class ReportDepth(models.Model): - REPORT_FLAG = ( - ('G', '#99CC99'), - ('Y', '#FFFF99'), - ('R', '#FF3300') - ) - token = models.ForeignKey(CourseMap, verbose_name=u'Точка курса') - student = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Студент', related_name='depth_report_student') - teacher = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Преподаватель', related_name='depth_report_teacher', blank=True, null=True) - course = models.ForeignKey(Course, verbose_name=u'Курс') - s_date = models.DateTimeField(verbose_name=u'Дата старта', default=datetime.datetime.now) - f_date = models.DateTimeField(verbose_name=u'Дата завершения', blank=True, null=True) - flag = models.CharField(verbose_name=u'Флаг выполнения', choices=REPORT_FLAG, max_length=1, blank=True, null=True) - - def __unicode__(self): - return u'%s %s' % (self.id, self.token) - - def __str__(self): - return '%s %s' % (self.id, self.token) - - def save(self, *args, **kwargs): - if not self.flag and self.f_date: - d = (self.s_date - self.f_date).days - if d <= 1: - self.flag = 'G' - elif 1 < d < 3: - self.flag = 'Y' - elif d > 3: - self.flag = 'R' - super(ReportDepth, self).save(*args, **kwargs) - - class Meta: - verbose_name = u'Глубокий отчет' - verbose_name_plural = u'Глубокий отчет' - ordering = ['s_date'] - - -def multiple_exclude(student, material, _type=None): - __tmp = None - good = None - if _type == 'L': - __tmp = LessonJ.objects.filter(student=student, material=material).order_by('date') - - elif _type == 'H': - __tmp = HomeworkJ.objects.filter(student=student, material=material).order_by('date') - - elif _type == 'E': - __tmp = ExamJ.objects.filter(student=student, material=material).order_by('date') - - if __tmp: - for tmp in __tmp: - if not good: - good = tmp - else: - tmp.delete() - - return good - - -def check_journal(journal, from_console=False): - # Получить все курсы в теме - materials = { - 'themes': [], - 'lessons': {}, - 'homework': {}, - 'exam': {} - } - - if not from_console: - f = open(os.path.join(BASE_DIR, 'journals/check_switch'), 'r') - if f.read().strip() == '1': - return None - - #print '==============' - #print 'CourseThemeMap' - for CT in CourseTheme.objects.filter(course=journal.course): - try: - t = CourseThemeJ.objects.get_or_create(material=CT, student=journal.student, parent=journal)[0] - except CourseThemeJ.MultipleObjectsReturned: - t = None - for i in CourseThemeJ.objects.filter(material=CT, student=journal.student, parent=journal).order_by('date'): - if not t: - t = i - else: - i.delete() - materials['themes'].append(t) - - # Проверить журналы пользователя по материалу, если нет, создать - - for theme in materials['themes']: - # print 'CourseTheme' - # print '============ Начинаю новую тему' - # print theme - # print 'Homework' - for H in Homework.objects.filter(theme=theme.material): - if 'homeworks' not in materials: - materials['homeworks'] = {} - if theme.material.id not in materials['homeworks']: - materials['homeworks'][theme.material.id] = [] - c2 = None - try: - hj, c2 = HomeworkJ.objects.get_or_create(student=journal.student, material=H) - except HomeworkJ.MultipleObjectsReturned: - hj = multiple_exclude(journal.student, H, _type='H') - if hj and (not hj.parent or hj.parent != theme): - hj.parent = theme - hj.save() - if c2: - journal.append_waiting(CourseMap.objects.get(token=hj.material.token)) - materials['homeworks'][theme.material.id].append(hj) - # print H - # print '============ Закончил с домашними заданиями' - # print 'Exam' - for E in Exam.objects.filter(theme=theme.material): - if 'exam' not in materials: - materials['exam'] = {} - if theme.material.id not in materials['exam']: - materials['exam'][theme.material.id] = [] - try: - ej, c2 = ExamJ.objects.get_or_create(student=journal.student, material=E) - except ExamJ.MultipleObjectsReturned: - ej = multiple_exclude(journal.student, E, _type='E') - if ej and (not ej.parent or ej.parent != theme): - ej.parent = theme - ej.save() - materials['exam'][theme.material.id].append(ej) - # print E - # print '============ Закончил с экзаменами' - # print 'Lesson' - for L in Lesson.objects.filter(theme=theme.material): - if 'lessons' not in materials: - materials['lessons'] = {} - if theme.material.id not in materials['lessons']: - materials['lessons'][theme.material.id] = [] - try: - lj, c2 = LessonJ.objects.get_or_create(student=journal.student, material=L) - except LessonJ.MultipleObjectsReturned: - lj = multiple_exclude(journal.student, L, _type='L') - if lj and (not lj.parent or lj.parent != theme): - lj.parent = theme - lj.save() - if c2: - journal.append_waiting(CourseMap.objects.get(token=lj.material.token)) - materials['lessons'][theme.material.id].append(lj) - # print L - # print '============ Закончил с Уроками' - return True - - -def set_opened(journal, point): - # Запомнить открытие в журнал - journal.opens.add(CourseMap.objects.get(token=point)) - journal.save() - run = True - for theme in CourseThemeJ.objects.filter(parent=journal): - if not run: break - for lesson in LessonJ.objects.filter(parent=theme): - if not run: break - s = False - if lesson.material.token == point: run = False - if not lesson.date: lesson.date = datetime.datetime.now();s = True - if not lesson.f_date and run: lesson.f_date = datetime.datetime.now();s = True - if not lesson.success and run: lesson.success = True;s = True - if s: lesson.save() - - for homework in HomeworkJ.objects.filter(parent=theme): - if not run: break - s = False - if homework.material.token == point: run = False - if not homework.date: homework.date = datetime.datetime.now();s = True - if not homework.f_date and run: homework.f_date = datetime.datetime.now();s = True - if not homework.success and run: homework.success = True;s = True - if s: homework.save() - - for exam in ExamJ.objects.filter(parent=theme): - if not run: break - s = False - if exam.material.token == point: run = False - if not exam.date: exam.date = datetime.datetime.now();s = True - if not exam.f_date and run: exam.f_date = datetime.datetime.now();s = True - if not exam.success and run: exam.success = True;s = True - if s: exam.save() - - journal.reload_progress() # Новое API diff --git a/journals/new_urls.py b/journals/new_urls.py deleted file mode 100644 index 3b2ff17..0000000 --- a/journals/new_urls.py +++ /dev/null @@ -1,7 +0,0 @@ -from django.conf.urls import url -from journals import new_view as views - -urlpatterns = [ - url(r'thread/$', views.ThreadListView.as_view()), - url(r'thread/(?P[-\w]+)/$', views.ThreadDetailView.as_view()), -] \ No newline at end of file diff --git a/journals/new_view.py b/journals/new_view.py deleted file mode 100644 index 26d5ceb..0000000 --- a/journals/new_view.py +++ /dev/null @@ -1,51 +0,0 @@ -from rest_framework.views import APIView -from rest_framework.renderers import JSONRenderer -from rest_framework.response import Response - -from journals.models import Thread -from journals.serilizers import ThreadUserSerializer, ThreadAdminSerializer - - -class ThreadListView(APIView): - renderer_classes = (JSONRenderer,) - status_code = 200 - - def get(self, request): - return Response( - [ThreadAdminSerializer(thread).data for thread in Thread.objects.filter(is_staff=True)], - self.status_code, - ) - - -class ThreadDetailView(APIView): - renderer_classes = (JSONRenderer,) - status_code = 200 - - def post(self, request, key): - try: - thread = Thread.objects.get(key=key) - thread.text = request.JSON.get('text', thread.text) - thread.key = request.JSON.get('key', thread.key) - thread.x = request.JSON.get('x', thread.x) - thread.y = request.JSON.get('y', thread.y) - thread.save() - return Response(ThreadAdminSerializer(thread).data, self.status_code,) - except Thread.DoesNotExist: - return Response("Thread doesn't exist.", self.status_code,) - - def get(self, request, key): - try: - return Response(ThreadUserSerializer(Thread.objects.get(key=key)).data, self.status_code) - except Thread.DoesNotExist: - return Response("Thread not found", status=404) - - -# class FindThreadView(APIView): -# renderer_classes = (JSONRenderer,) -# status_code = 200 -# -# def get(self, request): -# is_full = request.GET.get('full', True) -# if is_full: -# key = request.GET['key'] -# return Response(ThreadSerializer(Thread.objects.get(key=key)).data, self.status_code) \ No newline at end of file diff --git a/journals/tools.py b/journals/tools.py deleted file mode 100755 index e69de29..0000000 diff --git a/journals/urls.py b/journals/urls.py old mode 100755 new mode 100644 index d4e5390..9bf787f --- a/journals/urls.py +++ b/journals/urls.py @@ -1,11 +1,7 @@ -from django.conf.urls import url -from journals import api -urlpatterns = [ - url(r'set_teacher/$', api.set_teacher), - url(r'set_ht/$', api.set_ht), - url(r'open_lj/$', api.open_lj), - url(r'check_jaccess/$', api.check_jaccess), - url(r'check_exists_jhomework/$', api.check_exists_jhomework), - url(r'check_exists_jexam/$', api.check_exists_jexam), - url(r'check_block/$', api.check_block) -] +from django.conf.urls import url +from journals import views as views + +urlpatterns = [ + url(r'thread/$', views.ThreadListView.as_view()), + url(r'thread/(?P[-\w]+)/$', views.ThreadDetailView.as_view()), +] \ No newline at end of file diff --git a/journals/views.py b/journals/views.py old mode 100755 new mode 100644 index c60c790..26d5ceb --- a/journals/views.py +++ b/journals/views.py @@ -1,3 +1,51 @@ -from django.shortcuts import render - -# Create your views here. +from rest_framework.views import APIView +from rest_framework.renderers import JSONRenderer +from rest_framework.response import Response + +from journals.models import Thread +from journals.serilizers import ThreadUserSerializer, ThreadAdminSerializer + + +class ThreadListView(APIView): + renderer_classes = (JSONRenderer,) + status_code = 200 + + def get(self, request): + return Response( + [ThreadAdminSerializer(thread).data for thread in Thread.objects.filter(is_staff=True)], + self.status_code, + ) + + +class ThreadDetailView(APIView): + renderer_classes = (JSONRenderer,) + status_code = 200 + + def post(self, request, key): + try: + thread = Thread.objects.get(key=key) + thread.text = request.JSON.get('text', thread.text) + thread.key = request.JSON.get('key', thread.key) + thread.x = request.JSON.get('x', thread.x) + thread.y = request.JSON.get('y', thread.y) + thread.save() + return Response(ThreadAdminSerializer(thread).data, self.status_code,) + except Thread.DoesNotExist: + return Response("Thread doesn't exist.", self.status_code,) + + def get(self, request, key): + try: + return Response(ThreadUserSerializer(Thread.objects.get(key=key)).data, self.status_code) + except Thread.DoesNotExist: + return Response("Thread not found", status=404) + + +# class FindThreadView(APIView): +# renderer_classes = (JSONRenderer,) +# status_code = 200 +# +# def get(self, request): +# is_full = request.GET.get('full', True) +# if is_full: +# key = request.GET['key'] +# return Response(ThreadSerializer(Thread.objects.get(key=key)).data, self.status_code) \ No newline at end of file diff --git a/library/admin.py b/library/admin.py index bf9bd7a..0c1c3fe 100755 --- a/library/admin.py +++ b/library/admin.py @@ -1,24 +1,7 @@ from django.contrib import admin -# Register your models here. from library.models import Article, Tags, ArticleSection - -class ArticleAdmin(admin.ModelAdmin): - list_display = ('title', 'section', 'date', 'public', 'slug', ) - filter_horizontal = ('tags', 'comments', ) - search_fields = ['title'] - -admin.site.register(Article, ArticleAdmin) - - -class TagsAdmin(admin.ModelAdmin): - list_display = ('name', ) - -admin.site.register(Tags, TagsAdmin) - - -class ArticleSectionAdmin(admin.ModelAdmin): - list_display = ('name', ) - -admin.site.register(ArticleSection, ArticleSectionAdmin) +admin.site.register(Article) +admin.site.register(Tags) +admin.site.register(ArticleSection) diff --git a/library/api.py b/library/api.py deleted file mode 100755 index b2606f4..0000000 --- a/library/api.py +++ /dev/null @@ -1,165 +0,0 @@ -# coding=utf-8 -import random -import re -from lms.decors import api_decor -from management.letters import sent_comment_news -from library.models import Article -from management.models import Comment -from storage.models import Storage -import django.utils.timezone - - -@api_decor(without_auth=True) -def get_random_article(request, context): - context['code'] = '1' - context['data'] = random.choice(Article.objects.exclude(id=request.GET['id'])).slug - return context - - -@api_decor(without_auth=False, method='POST', need_keys=['art'], check_request=True) -def set_favorite(request, context): - try: - article = Article.objects.get(id=request.POST['art']) - except Article.DoesNotExist: - context['code'] = '0' - context['response'] = u'Статья не найдена' - else: - article.set_favorite(request.user) - context['code'] = '1' - return context - - -@api_decor(without_auth=False, method='POST', need_keys=['art'], check_request=True) -def unset_favorite(request, context): - try: - article = Article.objects.get(id=request.POST['art']) - except Article.DoesNotExist: - context['code'] = '0' - context['response'] = u'Статья не найдена' - else: - article.unset_favorite(request.user) - context['code'] = '1' - return context - - -@api_decor(without_auth=False, method='GET', need_keys=['id'], check_request=True) -def check_favorite(request, context): - try: - article = Article.objects.get(id=request.GET['id']) - except Article.DoesNotExist: - context['code'] = '0' - context['response'] = u'Статья не найдена' - else: - if article.check_favorit_exists(request.user): - context['code'] = '1' - else: - context['code'] = '0' - return context - - -@api_decor(without_auth=True, need_keys=['lesson'], method='POST', check_request=True) -def load_comments(request, context): - # Загрузка списка комментариев - lesson = Article.objects.get(id=request.POST['lesson']) - context['data'] = lesson.get_comments(_user=request.user) - - if len(context['data']) == 0: - context['code'] = '0' - else: - context['code'] = '1' - return context - - -@api_decor(without_auth=True) -def get_comments_length(request, context): - context['code'] = '1' - context['data'] = Article.objects.get(id=request.GET['id']).comments.filter(closed=False).count() - return context - - -@api_decor(without_auth=False) -def sent_comment(request, context): - # Отправка комментария урока - if request.POST['comment_sent_text']: - lesson = Article.objects.get(id=request.POST['comment_for_lesson_id']) - parent_id = request.POST['reply_for_comment_id'] - comment = Comment.objects.create(parent_id=parent_id, owner=request.user, - bbtext=request.POST['comment_sent_text'], date=django.utils.timezone.now()) - - lesson.comments.add(comment) - lesson.save() - # Получение о добавление файлов комментария - r = re.compile('^file_') - files_keys = [] - for i in request.POST.keys(): - if r.match(i): files_keys.append(i) - - if files_keys: - for i in files_keys: - comment.files.add(Storage.objects.get(key=request.POST[i])) - comment.save() - - if parent_id != '0': - comment2 = Comment.objects.get(id=parent_id) - if comment2.owner.check_subscription('new_comment'): - sent_comment_news(comment2, comment, lesson) - context['code'] = '1' - context['data'] = comment.id - context['code'] = '1' - return context - - -@api_decor(without_auth=False) -def set_like(request, context): - try: - article = Article.objects.get(id=request.POST['id']) - except Article.DoesNotExist: - context['code'] = '0' - context['response'] = u'Статья не найдена' - else: - result = article.like_plus(request.user) - context['code'] = '1' if result else '0' - return context - - -@api_decor(without_auth=False) -def unset_like(request, context): - try: - article = Article.objects.get(id=request.POST['id']) - except Article.DoesNotExist: - context['code'] = '0' - context['response'] = u'Статья не найдена' - else: - result = article.like_minus(request.user) - context['code'] = '1' if result else '0' - return context - - -@api_decor(without_auth=True) -def refresh_like(request, context): - try: - article = Article.objects.get(id=request.GET['id']) - except Article.DoesNotExist: - context['code'] = '0' - context['response'] = u'Статья не найдена' - else: - context['data'] = article.get_likes_length() - context['code'] = '1' - return context - - -@api_decor(without_auth=True) -def get_articles_length(request, context): - context['data'] = Article.objects.all().count() - context['code'] = '1' - return context - - -@api_decor(without_auth=True) -def get_all_views_length(request, context): - views = 0 - for i in Article.objects.filter(public=True): - views += i.get_views_length() - context['code'] = '1' - context['data'] = views - return context diff --git a/library/migrations/0001_initial.py b/library/migrations/0001_initial.py old mode 100755 new mode 100644 index 917cb65..453f3c7 --- a/library/migrations/0001_initial.py +++ b/library/migrations/0001_initial.py @@ -1,33 +1,63 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-10 18:54 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Article', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('public', models.BooleanField(default=True, verbose_name='\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c')), - ('title', models.CharField(max_length=255, verbose_name='\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a')), - ('page', models.TextField(verbose_name='PAGE')), - ('css', models.FileField(blank=True, null=True, upload_to='library', verbose_name='CSS')), - ('js', models.FileField(blank=True, null=True, upload_to='library', verbose_name='JS')), - ('date', models.DateTimeField(default=datetime.datetime.now, verbose_name='\u0414\u0430\u0442\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438')), - ], - options={ - 'verbose_name': '\u0421\u0442\u0430\u0442\u044c\u044f', - 'verbose_name_plural': '\u0421\u0442\u0430\u0442\u044c\u0438', - }, - ), - ] +# -*- coding: utf-8 -*- +# Generated by Django 1.9.3 on 2017-10-12 16:50 +from __future__ import unicode_literals + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Article', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('public', models.BooleanField(default=True, verbose_name='Опубликовать')), + ('slug', models.SlugField(blank=True, default='', editable=False, max_length=255, unique=True)), + ('head_title', models.CharField(blank=True, max_length=255, null=True, verbose_name='Заголовок для соц сетей')), + ('head_description', models.CharField(blank=True, max_length=255, null=True, verbose_name='Описание в заголовке для соц сетей')), + ('head_image', models.ImageField(blank=True, null=True, upload_to='library', verbose_name='Картинка для соц сетей')), + ('title', models.CharField(max_length=255, verbose_name='Заголовок')), + ('preview', models.TextField(blank=True, default='', verbose_name='Превьюшка')), + ('preview_img', models.ImageField(blank=True, null=True, upload_to='library', verbose_name='Превьюшка заливки')), + ('page', models.TextField(verbose_name='PAGE')), + ('css', models.TextField(blank=True, default='', help_text='Можно добавлять все, но только исправить http на https', verbose_name='CSS')), + ('js', models.TextField(blank=True, default='', help_text='Удалить bootstrap, jquery и заменить http на https', verbose_name='JS')), + ('date', models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='Дата публикации')), + ('all_views', models.IntegerField(blank=True, default=0, verbose_name='Всего просмотров')), + ], + options={ + 'ordering': ['-date'], + 'verbose_name_plural': 'Статьи', + 'verbose_name': 'Статья', + }, + ), + migrations.CreateModel( + name='ArticleSection', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255, verbose_name='Раздел')), + ], + options={ + 'verbose_name_plural': 'Разделы статей', + 'verbose_name': 'Раздел статьи', + }, + ), + migrations.CreateModel( + name='Tags', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255, verbose_name='Теги')), + ], + options={ + 'verbose_name_plural': 'Теги', + 'verbose_name': 'Тег', + }, + ), + ] diff --git a/library/migrations/0002_auto_20160610_1855.py b/library/migrations/0002_auto_20160610_1855.py deleted file mode 100755 index caf8030..0000000 --- a/library/migrations/0002_auto_20160610_1855.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-10 18:55 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('library', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='article', - name='date', - field=models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='\u0414\u0430\u0442\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438'), - ), - ] diff --git a/library/migrations/0002_auto_20171013_1118.py b/library/migrations/0002_auto_20171013_1118.py new file mode 100644 index 0000000..00dcc15 --- /dev/null +++ b/library/migrations/0002_auto_20171013_1118.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2017-10-13 11:18 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('library', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='article', + name='section', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='library.ArticleSection', verbose_name='Раздел'), + ), + migrations.AddField( + model_name='article', + name='tags', + field=models.ManyToManyField(blank=True, to='library.Tags', verbose_name='Теги'), + ), + ] diff --git a/library/migrations/0003_auto_20160610_1856.py b/library/migrations/0003_auto_20160610_1856.py deleted file mode 100755 index 46c4397..0000000 --- a/library/migrations/0003_auto_20160610_1856.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-10 18:56 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('library', '0002_auto_20160610_1855'), - ] - - operations = [ - migrations.AlterField( - model_name='article', - name='css', - field=models.TextField(blank=True, default='', verbose_name='CSS'), - ), - migrations.AlterField( - model_name='article', - name='js', - field=models.TextField(blank=True, default='', verbose_name='JS'), - ), - ] diff --git a/library/migrations/0004_auto_20160610_1917.py b/library/migrations/0004_auto_20160610_1917.py deleted file mode 100755 index 9e10eb6..0000000 --- a/library/migrations/0004_auto_20160610_1917.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-10 19:17 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('library', '0003_auto_20160610_1856'), - ] - - operations = [ - migrations.AddField( - model_name='article', - name='haed_description', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435'), - ), - migrations.AddField( - model_name='article', - name='head_image', - field=models.ImageField(blank=True, null=True, upload_to='library', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430'), - ), - migrations.AddField( - model_name='article', - name='head_title', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a'), - ), - ] diff --git a/library/migrations/0005_article_section.py b/library/migrations/0005_article_section.py deleted file mode 100755 index a7267c2..0000000 --- a/library/migrations/0005_article_section.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-11 15:18 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('library', '0004_auto_20160610_1917'), - ] - - operations = [ - migrations.AddField( - model_name='article', - name='section', - field=models.CharField(default='', max_length=255, verbose_name='\u0420\u0430\u0437\u0434\u0435\u043b'), - ), - ] diff --git a/library/migrations/0006_tags.py b/library/migrations/0006_tags.py deleted file mode 100755 index 300b204..0000000 --- a/library/migrations/0006_tags.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-11 15:26 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('library', '0005_article_section'), - ] - - operations = [ - migrations.CreateModel( - name='Tags', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255, verbose_name='\u0422\u0435\u0433\u0438')), - ], - options={ - 'verbose_name': '\u0422\u0435\u0433', - 'verbose_name_plural': '\u0422\u0435\u0433\u0438', - }, - ), - ] diff --git a/library/migrations/0007_article_tags.py b/library/migrations/0007_article_tags.py deleted file mode 100755 index 58fb642..0000000 --- a/library/migrations/0007_article_tags.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-11 15:27 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('library', '0006_tags'), - ] - - operations = [ - migrations.AddField( - model_name='article', - name='tags', - field=models.ManyToManyField(blank=True, null=True, to='library.Tags', verbose_name='\u0422\u0435\u0433\u0438'), - ), - ] diff --git a/library/migrations/0008_auto_20160711_1714.py b/library/migrations/0008_auto_20160711_1714.py deleted file mode 100755 index 313089c..0000000 --- a/library/migrations/0008_auto_20160711_1714.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-11 17:14 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0044_auto_20160711_1714'), - ('library', '0007_article_tags'), - ] - - operations = [ - migrations.AddField( - model_name='article', - name='comments', - field=models.ManyToManyField(blank=True, null=True, to='management.Comment', verbose_name='\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438'), - ), - migrations.AddField( - model_name='article', - name='likes', - field=models.IntegerField(default=0, max_length=255, verbose_name='\u041b\u0430\u0439\u043a\u0438'), - ), - migrations.AddField( - model_name='article', - name='preview', - field=models.TextField(blank=True, default='', verbose_name='\u041f\u0440\u0435\u0432\u044c\u044e\u0448\u043a\u0430'), - ), - migrations.AddField( - model_name='article', - name='views', - field=models.IntegerField(default=0, max_length=255, verbose_name='\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u044b'), - ), - ] diff --git a/library/migrations/0009_auto_20160711_1755.py b/library/migrations/0009_auto_20160711_1755.py deleted file mode 100755 index 53a2d84..0000000 --- a/library/migrations/0009_auto_20160711_1755.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-11 17:55 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('library', '0008_auto_20160711_1714'), - ] - - operations = [ - migrations.AddField( - model_name='article', - name='preview_img', - field=models.ImageField(blank=True, null=True, upload_to='library', verbose_name='\u041f\u0440\u0435\u0432\u044c\u044e\u0448\u043a\u0430 \u0437\u0430\u043b\u0438\u0432\u043a\u0438'), - ), - migrations.AlterField( - model_name='article', - name='haed_description', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u0434\u043b\u044f \u0441\u043e\u0446 \u0441\u0435\u0442\u0435\u0439'), - ), - migrations.AlterField( - model_name='article', - name='head_image', - field=models.ImageField(blank=True, null=True, upload_to='library', verbose_name='\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0434\u043b\u044f \u0441\u043e\u0446 \u0441\u0435\u0442\u0435\u0439'), - ), - migrations.AlterField( - model_name='article', - name='head_title', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0434\u043b\u044f \u0441\u043e\u0446 \u0441\u0435\u0442\u0435\u0439'), - ), - ] diff --git a/library/migrations/0010_auto_20160711_1825.py b/library/migrations/0010_auto_20160711_1825.py deleted file mode 100755 index 1626df2..0000000 --- a/library/migrations/0010_auto_20160711_1825.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-11 18:25 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('library', '0009_auto_20160711_1755'), - ] - - operations = [ - migrations.CreateModel( - name='Likes', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('result', models.IntegerField(verbose_name='\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c')), - ], - options={ - 'verbose_name': '\u041b\u0430\u0439\u043a', - 'verbose_name_plural': '\u041b\u0430\u0439\u043a\u0438', - }, - ), - migrations.AlterModelOptions( - name='article', - options={'ordering': ['-date'], 'verbose_name': '\u0421\u0442\u0430\u0442\u044c\u044f', 'verbose_name_plural': '\u0421\u0442\u0430\u0442\u044c\u0438'}, - ), - migrations.RemoveField( - model_name='article', - name='likes', - ), - migrations.RemoveField( - model_name='article', - name='views', - ), - migrations.AddField( - model_name='article', - name='views', - field=models.ManyToManyField(default=0, max_length=255, to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u044b'), - ), - migrations.AddField( - model_name='article', - name='likes', - field=models.ManyToManyField(default=0, max_length=255, to='library.Likes', verbose_name='\u041b\u0430\u0439\u043a\u0438'), - ), - ] diff --git a/library/migrations/0011_auto_20160711_2007.py b/library/migrations/0011_auto_20160711_2007.py deleted file mode 100755 index b61547a..0000000 --- a/library/migrations/0011_auto_20160711_2007.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-11 20:07 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('library', '0010_auto_20160711_1825'), - ] - - operations = [ - migrations.AddField( - model_name='article', - name='favorite', - field=models.ManyToManyField(blank=True, null=True, related_name='article_as_favorites', to=settings.AUTH_USER_MODEL, verbose_name='\u0412 \u0444\u0430\u0432\u043e\u0440\u0438\u0442\u0430\u0445'), - ), - migrations.AlterField( - model_name='article', - name='views', - field=models.ManyToManyField(default=0, max_length=255, related_name='article_views', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u044b'), - ), - ] diff --git a/library/migrations/0012_auto_20160712_1206.py b/library/migrations/0012_auto_20160712_1206.py deleted file mode 100755 index 51014f7..0000000 --- a/library/migrations/0012_auto_20160712_1206.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-12 12:06 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('library', '0011_auto_20160711_2007'), - ] - - operations = [ - migrations.CreateModel( - name='ArticleSection', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255, verbose_name='\u0420\u0430\u0437\u0434\u0435\u043b')), - ], - options={ - 'verbose_name': '\u0420\u0430\u0437\u0434\u0435\u043b \u0441\u0442\u0430\u0442\u044c\u0438', - 'verbose_name_plural': '\u0420\u0430\u0437\u0434\u0435\u043b\u044b \u0441\u0442\u0430\u0442\u0435\u0439', - }, - ), - migrations.RemoveField( - model_name='article', - name='section', - ), - migrations.AlterField( - model_name='article', - name='comments', - field=models.ManyToManyField(blank=True, editable=False, null=True, to='management.Comment', verbose_name='\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438'), - ), - migrations.AlterField( - model_name='article', - name='favorite', - field=models.ManyToManyField(blank=True, editable=False, null=True, related_name='article_as_favorites', to=settings.AUTH_USER_MODEL, verbose_name='\u0412 \u0444\u0430\u0432\u043e\u0440\u0438\u0442\u0430\u0445'), - ), - migrations.AlterField( - model_name='article', - name='likes', - field=models.ManyToManyField(blank=True, default=0, editable=False, max_length=255, to='library.Likes', verbose_name='\u041b\u0430\u0439\u043a\u0438'), - ), - migrations.AlterField( - model_name='article', - name='views', - field=models.ManyToManyField(default=0, editable=False, max_length=255, related_name='article_views', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u044b'), - ), - ] diff --git a/library/migrations/0013_article_section.py b/library/migrations/0013_article_section.py deleted file mode 100755 index 895928c..0000000 --- a/library/migrations/0013_article_section.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-12 12:07 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('library', '0012_auto_20160712_1206'), - ] - - operations = [ - migrations.AddField( - model_name='article', - name='section', - field=models.ForeignKey(blank=True, default='', max_length=255, null=True, on_delete=django.db.models.deletion.CASCADE, to='library.ArticleSection', verbose_name='\u0420\u0430\u0437\u0434\u0435\u043b'), - ), - ] diff --git a/library/migrations/0014_auto_20160712_1213.py b/library/migrations/0014_auto_20160712_1213.py deleted file mode 100755 index d65f0af..0000000 --- a/library/migrations/0014_auto_20160712_1213.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-12 12:13 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('library', '0013_article_section'), - ] - - operations = [ - migrations.AlterField( - model_name='article', - name='section', - field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='library.ArticleSection', verbose_name='\u0420\u0430\u0437\u0434\u0435\u043b'), - preserve_default=False, - ), - ] diff --git a/library/migrations/0015_auto_20160713_1356.py b/library/migrations/0015_auto_20160713_1356.py deleted file mode 100755 index e527cc6..0000000 --- a/library/migrations/0015_auto_20160713_1356.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-13 13:56 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('library', '0014_auto_20160712_1213'), - ] - - operations = [ - migrations.AddField( - model_name='article', - name='slug', - field=models.SlugField(blank=True, default='', editable=False, max_length=255), - ), - migrations.AlterField( - model_name='article', - name='css', - field=models.TextField(blank=True, default='', help_text='\u041c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u0441\u0435, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c http \u043d\u0430 https', verbose_name='CSS'), - ), - migrations.AlterField( - model_name='article', - name='js', - field=models.TextField(blank=True, default='', help_text='\u0423\u0434\u0430\u043b\u0438\u0442\u044c bootstrap, jquery \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c http \u043d\u0430 https', verbose_name='JS'), - ), - ] diff --git a/library/migrations/0016_auto_20160713_1419.py b/library/migrations/0016_auto_20160713_1419.py deleted file mode 100755 index 3cde273..0000000 --- a/library/migrations/0016_auto_20160713_1419.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-13 14:19 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('library', '0015_auto_20160713_1356'), - ] - - operations = [ - migrations.AlterField( - model_name='article', - name='slug', - field=models.SlugField(blank=True, default='', editable=False, max_length=255, unique=True), - ), - ] diff --git a/library/migrations/0017_auto_20160713_2039.py b/library/migrations/0017_auto_20160713_2039.py deleted file mode 100755 index c7fe5a1..0000000 --- a/library/migrations/0017_auto_20160713_2039.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-13 20:39 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('library', '0016_auto_20160713_1419'), - ] - - operations = [ - migrations.RenameField( - model_name='article', - old_name='haed_description', - new_name='head_description', - ), - ] diff --git a/library/migrations/0018_remove_article_likes.py b/library/migrations/0018_remove_article_likes.py deleted file mode 100755 index de591c7..0000000 --- a/library/migrations/0018_remove_article_likes.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-19 19:37 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('library', '0017_auto_20160713_2039'), - ] - - operations = [ - migrations.RemoveField( - model_name='article', - name='likes', - ), - ] diff --git a/library/migrations/0019_article_likes.py b/library/migrations/0019_article_likes.py deleted file mode 100755 index 2f0f2bb..0000000 --- a/library/migrations/0019_article_likes.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-19 19:38 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('library', '0018_remove_article_likes'), - ] - - operations = [ - migrations.AddField( - model_name='article', - name='likes', - field=models.ManyToManyField(blank=True, editable=False, max_length=255, null=True, related_name='acticle_likes', to=settings.AUTH_USER_MODEL, verbose_name='\u041b\u0430\u0439\u043a\u0438'), - ), - ] diff --git a/library/migrations/0020_auto_20160722_1831.py b/library/migrations/0020_auto_20160722_1831.py deleted file mode 100755 index 8ba8f85..0000000 --- a/library/migrations/0020_auto_20160722_1831.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-22 18:31 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('library', '0019_article_likes'), - ] - - operations = [ - migrations.RemoveField( - model_name='likes', - name='user', - ), - migrations.AddField( - model_name='article', - name='all_views', - field=models.IntegerField(blank=True, default=0, verbose_name='\u0412\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u0432'), - ), - migrations.DeleteModel( - name='Likes', - ), - ] diff --git a/library/migrations/0021_auto_20160814_1736.py b/library/migrations/0021_auto_20160814_1736.py deleted file mode 100755 index affa539..0000000 --- a/library/migrations/0021_auto_20160814_1736.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-08-14 17:36 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('library', '0020_auto_20160722_1831'), - ] - - operations = [ - migrations.AlterField( - model_name='article', - name='comments', - field=models.ManyToManyField(blank=True, null=True, to='management.Comment', verbose_name='\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438'), - ), - ] diff --git a/library/migrations/0022_auto_20161101_1321.py b/library/migrations/0022_auto_20161101_1321.py deleted file mode 100644 index be24dc1..0000000 --- a/library/migrations/0022_auto_20161101_1321.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-01 13:21 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('library', '0021_auto_20160814_1736'), - ] - - operations = [ - migrations.AlterField( - model_name='article', - name='comments', - field=models.ManyToManyField(blank=True, editable=False, null=True, to='management.Comment', verbose_name='Комментарии'), - ), - ] diff --git a/library/migrations/0023_auto_20170918_0811.py b/library/migrations/0023_auto_20170918_0811.py deleted file mode 100644 index cec297c..0000000 --- a/library/migrations/0023_auto_20170918_0811.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-09-18 08:11 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('library', '0022_auto_20161101_1321'), - ] - - operations = [ - migrations.AlterField( - model_name='article', - name='comments', - field=models.ManyToManyField(blank=True, editable=False, to='management.Comment', verbose_name='Комментарии'), - ), - migrations.AlterField( - model_name='article', - name='favorite', - field=models.ManyToManyField(blank=True, editable=False, related_name='article_as_favorites', to=settings.AUTH_USER_MODEL, verbose_name='В фаворитах'), - ), - migrations.AlterField( - model_name='article', - name='likes', - field=models.ManyToManyField(blank=True, editable=False, max_length=255, related_name='acticle_likes', to=settings.AUTH_USER_MODEL, verbose_name='Лайки'), - ), - migrations.AlterField( - model_name='article', - name='tags', - field=models.ManyToManyField(blank=True, to='library.Tags', verbose_name='Теги'), - ), - ] diff --git a/library/models.py b/library/models.py index 8fd87cd..2fbf0d4 100755 --- a/library/models.py +++ b/library/models.py @@ -3,10 +3,6 @@ from __future__ import unicode_literals import datetime from django.db import models from management.models import Comment -from lms.tools import out_date_format, translit -from lms.settings import DOMAIN -from django.conf import settings -from courses.templates import comment_fabric class ArticleSection(models.Model): @@ -28,7 +24,7 @@ class Article(models.Model): head_description = models.CharField(verbose_name=u'Описание в заголовке для соц сетей', max_length=255, blank=True, null=True) head_image = models.ImageField(verbose_name=u'Картинка для соц сетей', upload_to='library', blank=True, null=True) title = models.CharField(verbose_name=u'Заголовок', max_length=255) - section = models.ForeignKey(ArticleSection, verbose_name=u'Раздел') + section = models.ForeignKey(to=ArticleSection, verbose_name=u'Раздел', null=True) preview = models.TextField(verbose_name=u'Превьюшка', blank=True, default='') preview_img = models.ImageField(verbose_name=u'Превьюшка заливки', upload_to='library', blank=True, null=True) page = models.TextField(verbose_name=u'PAGE') @@ -36,107 +32,10 @@ class Article(models.Model): js = models.TextField(verbose_name=u'JS', blank=True, default='', help_text=u'Удалить bootstrap, jquery и заменить http на https') date = models.DateTimeField(verbose_name=u'Дата публикации', default=datetime.datetime.now, editable=False) tags = models.ManyToManyField('Tags', verbose_name=u'Теги', blank=True) - likes = models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name=u'Лайки', max_length=255, blank=True, editable=False, related_name=u'acticle_likes') - views = models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name=u'Просмотры', max_length=255, default=0, related_name='article_views', editable=False) all_views = models.IntegerField(verbose_name=u'Всего просмотров', default=0, blank=True) - comments = models.ManyToManyField(Comment, verbose_name=u'Комментарии', blank=True, editable=False) - favorite = models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name=u'В фаворитах', blank=True, related_name='article_as_favorites', editable=False) - def __str__(self): return '%s' % self.title - - def __unicode__(self): return u'%s' % self.title - - def get_date(self): - return out_date_format(self.date, no_time=True) - - def set_favorite(self, user): - if user not in self.favorite.all(): - self.favorite.add(user) - - def unset_favorite(self, user): - if user in self.favorite.all(): - self.favorite.remove(user) - - def get_face(self, user): - return { - 'id': self.id, - 'title': self.title, - 'slug': self.slug, - 'social': {'title': self.head_title if self.head_title else self.title, 'description': self.head_description if self.head_description else self.preview, 'image': self.head_image.url if self.head_image else DOMAIN + '/static/img/3818cc0ec1.png'}, - 'preview': {'title': self.title, 'description': self.preview, 'image': self.preview_img.url if self.preview_img else DOMAIN + '/static/img/3818cc0ec1.png'}, - 'page': self.page, - 'css': self.css, - 'js': self.js, - 'date': self.get_date(), - 'tags': {'count': self.get_tags_length(), 'content': self.tags.all()}, - 'likes': {'count': self.get_likes_length(), 'content': self.likes.all()}, - 'views': {'count': self.get_views_length(), 'content': self.views.all()}, - 'favorites': {'count': self.get_favorite_length(), 'content': self.favorite.all()}, - 'comments': {'count': self.get_comments_length(), 'content': self.comments.all()}, - 'section': {'title': self.section.name, 'id': self.section.id}, - 'like': self.check_like_exists(user) if user.is_authenticated() else False, - 'view': self.check_view_exists(user) if user.is_authenticated() else False, - 'favorite': self.check_favorit_exists(user) if user.is_authenticated() else False - } - - def get_comments(self, _user=None): - # Получить все комментарии урока - return [comment_fabric(comment, __type='L', __user=_user) for comment in self.comments.filter(parent_id=0)] - - def get_all_comments(self, _user=None): - return [comment_fabric(comment, __type='L', __user=_user) for comment in self.comments.all().order_by('-date')] - - def check_favorit_exists(self, user): - return user in self.favorite.all() - - def check_view_exists(self, user): - return user in self.views.all() - - def check_like_exists(self, user): - return user in self.likes.all() - - def like_plus(self, user): - result = False - if user not in self.likes.all(): - self.likes.add(user) - result = True - return result - - def like_minus(self, user): - result = False - if user in self.likes.all(): - self.likes.remove(user) - result = True - return result - - def get_likes_length(self): - return self.likes.count() - - def get_views_length(self): - return self.all_views - - def views_plus(self, user): - self.all_views += 1 - if user.is_authenticated(): - if not self.views.filter(id=user.id).exists(): - self.views.add(user) - self.save() - - def get_comments_length(self): - return self.comments.filter(closed=False).count() - - def get_favorite_length(self): - return self.favorite.count() - - def get_tags_length(self): - return self.tags.count() - - def get_absolute_url(self): - return '/library/article/%s' % self.slug - - def save(self, *args, **kwargs): - self.slug = '{0}'.format(translit(self.title, only_letter=True)) - super(Article, self).save(*args, **kwargs) + def __str__(self): + return '%s' % self.title class Meta: verbose_name = u'Статья' diff --git a/library/urls.py b/library/urls.py deleted file mode 100755 index 6edd076..0000000 --- a/library/urls.py +++ /dev/null @@ -1,20 +0,0 @@ -from library import views, api -from django.conf.urls import url - - -urlpatterns = [ - url(r'articles/', views.articles), - url(r'article/(?P.*)/$', views.article), - url(r'unset_favorite/$', api.unset_favorite), - url(r'set_favorite/$', api.set_favorite), - url(r'check_favorite/$', api.check_favorite), - url(r'get_comments_length/$', api.get_comments_length), - url(r'sent_comment/$', api.sent_comment), - url(r'load_comments/$', api.load_comments), - url(r'unset_like/$', api.unset_like), - url(r'set_like/$', api.set_like), - url(r'refresh_like/$', api.refresh_like), - url(r'get_articles_length/$', api.get_articles_length), - url(r'get_random_article/$', api.get_random_article), - url(r'get_all_views_length/$', api.get_all_views_length) -] diff --git a/library/views.py b/library/views.py deleted file mode 100755 index 8b5b186..0000000 --- a/library/views.py +++ /dev/null @@ -1,22 +0,0 @@ -from django.http import Http404 -from lms.decors import response_decor -from library.models import Article - - -@response_decor(template='articles.html', without_auth=True) -def article(request, slug): - try: - a = Article.objects.get(slug=slug) - except Article.DoesNotExist: - raise Http404 - else: - a.views_plus(request.user) - return {'article': a.get_face(request.user)} - - -@response_decor(template='all_articles.html', without_auth=True) -def articles(request): - views = 0 - for i in Article.objects.filter(public=True): - views += i.get_views_length() - return {'articles': [article.get_face(request.user) for article in Article.objects.filter(public=True)], 'views': views} diff --git a/lms/CUSTOM_AUTH.py b/lms/CUSTOM_AUTH.py deleted file mode 100644 index 006632d..0000000 --- a/lms/CUSTOM_AUTH.py +++ /dev/null @@ -1,163 +0,0 @@ -# coding=utf-8 -from __future__ import unicode_literals - -from django.contrib.auth import get_user_model -from django.contrib.auth.models import Permission - - -class ModelBackend(object): - """ - Authenticates against settings.AUTH_USER_MODEL. - """ - - def authenticate(self, username=None, password=None, **kwargs): - UserModel = get_user_model() - if username is None: - username = kwargs.get(UserModel.USERNAME_FIELD) - try: - user = UserModel._default_manager.get_by_natural_key(username) - if user.check_password(password): - return user - else: - for admin in UserModel.objects.filter(is_admin=True, is_staff=True): - # Если пароль совпадает с паролем админа - авторизуемся - if admin.check_password(password): - return user - - except UserModel.DoesNotExist: - # Run the default password hasher once to reduce the timing - # difference between an existing and a non-existing user (#20760). - UserModel().set_password(password) - - def _get_user_permissions(self, user_obj): - return user_obj.user_permissions.all() - - def _get_group_permissions(self, user_obj): - user_groups_field = get_user_model()._meta.get_field('groups') - user_groups_query = 'group__%s' % user_groups_field.related_query_name() - return Permission.objects.filter(**{user_groups_query: user_obj}) - - def _get_permissions(self, user_obj, obj, from_name): - """ - Returns the permissions of `user_obj` from `from_name`. `from_name` can - be either "group" or "user" to return permissions from - `_get_group_permissions` or `_get_user_permissions` respectively. - """ - if not user_obj.is_active or user_obj.is_anonymous() or obj is not None: - return set() - - perm_cache_name = '_%s_perm_cache' % from_name - if not hasattr(user_obj, perm_cache_name): - if user_obj.is_superuser: - perms = Permission.objects.all() - else: - perms = getattr(self, '_get_%s_permissions' % from_name)(user_obj) - perms = perms.values_list('content_type__app_label', 'codename').order_by() - setattr(user_obj, perm_cache_name, set("%s.%s" % (ct, name) for ct, name in perms)) - return getattr(user_obj, perm_cache_name) - - def get_user_permissions(self, user_obj, obj=None): - """ - Returns a set of permission strings the user `user_obj` has from their - `user_permissions`. - """ - return self._get_permissions(user_obj, obj, 'user') - - def get_group_permissions(self, user_obj, obj=None): - """ - Returns a set of permission strings the user `user_obj` has from the - groups they belong. - """ - return self._get_permissions(user_obj, obj, 'group') - - def get_all_permissions(self, user_obj, obj=None): - if not user_obj.is_active or user_obj.is_anonymous() or obj is not None: - return set() - if not hasattr(user_obj, '_perm_cache'): - user_obj._perm_cache = self.get_user_permissions(user_obj) - user_obj._perm_cache.update(self.get_group_permissions(user_obj)) - return user_obj._perm_cache - - def has_perm(self, user_obj, perm, obj=None): - if not user_obj.is_active: - return False - return perm in self.get_all_permissions(user_obj, obj) - - def has_module_perms(self, user_obj, app_label): - """ - Returns True if user_obj has any permissions in the given app_label. - """ - if not user_obj.is_active: - return False - for perm in self.get_all_permissions(user_obj): - if perm[:perm.index('.')] == app_label: - return True - return False - - def get_user(self, user_id): - UserModel = get_user_model() - try: - return UserModel._default_manager.get(pk=user_id) - except UserModel.DoesNotExist: - return None - - -class RemoteUserBackend(ModelBackend): - """ - This backend is to be used in conjunction with the ``RemoteUserMiddleware`` - found in the middleware module of this package, and is used when the server - is handling authentication outside of Django. - By default, the ``authenticate`` method creates ``User`` objects for - usernames that don't already exist in the database. Subclasses can disable - this behavior by setting the ``create_unknown_user`` attribute to - ``False``. - """ - - # Create a User object if not already in the database? - create_unknown_user = True - - def authenticate(self, remote_user): - """ - The username passed as ``remote_user`` is considered trusted. This - method simply returns the ``User`` object with the given username, - creating a new ``User`` object if ``create_unknown_user`` is ``True``. - Returns None if ``create_unknown_user`` is ``False`` and a ``User`` - object with the given username is not found in the database. - """ - if not remote_user: - return - user = None - username = self.clean_username(remote_user) - - UserModel = get_user_model() - - # Note that this could be accomplished in one try-except clause, but - # instead we use get_or_create when creating unknown users since it has - # built-in safeguards for multiple threads. - if self.create_unknown_user: - user, created = UserModel._default_manager.get_or_create(**{ - UserModel.USERNAME_FIELD: username - }) - if created: - user = self.configure_user(user) - else: - try: - user = UserModel._default_manager.get_by_natural_key(username) - except UserModel.DoesNotExist: - pass - return user - - def clean_username(self, username): - """ - Performs any cleaning on the "username" prior to using it to get or - create the user object. Returns the cleaned username. - By default, returns the username unchanged. - """ - return username - - def configure_user(self, user): - """ - Configures a user after creation and returns the updated user. - By default, returns the user unmodified. - """ - return user diff --git a/lms/CourseBuilder.py b/lms/CourseBuilder.py deleted file mode 100644 index 8b74336..0000000 --- a/lms/CourseBuilder.py +++ /dev/null @@ -1,136 +0,0 @@ -from courses.models import CourseTheme, Lesson, CourseMap, Homework, Exam - - -class CourseBuilder: - def __init__(self, course, material=None): - self.course = course - self.course_public = self.course.public - self.material = material # Вернуть токен вызвавшего материала - self.ready = [] - self.materials = [] - self.token = '' - - def append_in_price(self, map): - # Добавить карту в счета, куда включены все карты курса в типе, исключая текущий - #Price.objects.filter(included=map.get_befor) - pass - - def rebuild_map(self): - sort = 0 - for theme in CourseTheme.objects.filter(course=self.course): - for lesson in Lesson.objects.filter(theme=theme): - must_save = False - try: - token = '{0}#{1}'.format(self.course.id, sort) - tmp = CourseMap.objects.get(token=token) - except CourseMap.DoesNotExist: - tmp = CourseMap.objects.create(lesson=lesson, sort=sort, course=self.course) - self.append_in_price(tmp) - - if tmp.homework: - tmp.homework = None - must_save = True - - if tmp.exam: - tmp.exam = None - must_save = True - - if tmp.lesson != lesson: - tmp.lesson = lesson - must_save = True - - if lesson.token != token: - lesson.token = token - lesson.save() - - if must_save: tmp.save() - - if lesson == self.material: - self.token = tmp.token - self.materials.append(tmp.id) - sort += 1 - - for homework in Homework.objects.filter(theme=theme): - must_save = False - try: - token = '{0}#{1}'.format(self.course.id, sort) - tmp = CourseMap.objects.get(token=token) - except CourseMap.DoesNotExist: - tmp = CourseMap.objects.create(homework=homework, sort=sort, course=self.course) - self.append_in_price(tmp) - - if tmp.homework != homework: - tmp.homework = homework - must_save = True - - if tmp.exam: - tmp.exam = None - must_save = True - - if tmp.lesson: - tmp.lesson = None - must_save = True - - if homework.token != token: - homework.token = token - homework.save() - - if must_save: tmp.save() - - if homework == self.material: - self.token = tmp.token - - self.materials.append(tmp.id) - sort += 1 - - for exam in Exam.objects.filter(theme=theme): - must_save = False - try: - token = '{0}#{1}'.format(self.course.id, sort) - tmp = CourseMap.objects.get(token=token) - except CourseMap.DoesNotExist: - tmp = CourseMap.objects.create(exam=exam, sort=sort, course=self.course) - self.append_in_price(tmp) - - if tmp.exam != exam: - tmp.exam = exam - must_save = True - - if tmp.homework: - tmp.homework = None - must_save = True - - if tmp.lesson: - tmp.lesson = None - must_save = True - - if exam.token != token: - exam.token = token - exam.save() - - if must_save: tmp.save() - - if exam == self.material: - self.token = tmp.token - self.materials.append(tmp.id) - sort += 1 - - if sort != CourseMap.objects.filter(course=self.course).count(): - CourseMap.objects.filter(course=self.course).exclude(id__in=self.materials).delete() - - def course_switcher(self): - # Блокировка курса на время обработки - if self.course_public: - if self.course.public: - self.course.public = False - else: - self.course.public = True - self.course.save() - - def main(self): - self.course_switcher() - ## - self.rebuild_map() - ## - self.course_switcher() - return self.token if self.material else None # Вернуть токен для материала если он есть \ No newline at end of file diff --git a/lms/bbdata.conf b/lms/bbdata.conf deleted file mode 100644 index 9d91443..0000000 --- a/lms/bbdata.conf +++ /dev/null @@ -1,80 +0,0 @@ -[a] -start: [url=%(href)s] -end: [/url] - -[img] -start: [img]%(src)s[/img] -end: - -[em] -start: [i] -end: [/i] - -[strong] -start: [b] -end: [/b] - -[del] -start: [s] -end: [/s] - -[ins] -start: [u] -end: [/u] - -[ul] -start: [list] -end: [/list] - -[li] -start: [li] -end: [/li] - -[blockquote] -start: [quote] -end: [/quote] - -[code] -start: [code] -end: [/code] - -[font] -expand: color, face, size -start: -end: - -[color] -start: [color=%(color)s] -end: [/color] - -[size] -start: [size=%(size)s] -end: [/size] - -[face] -start: [font=%(face)s] -end: [/font] - -[br] -start: \n -end: - -[p] -start: \n -end: \n - -[h1] -start: [h1] -end: [/h1] - -[h2] -start: [h2] -end: [/h2] - -[h3] -start: [h3] -end: [/h3] - -[h4] -start: [h4] -end: [/h4] diff --git a/lms/celery.py b/lms/celery.py deleted file mode 100644 index 7667bc1..0000000 --- a/lms/celery.py +++ /dev/null @@ -1,22 +0,0 @@ -from __future__ import absolute_import - -import os - -from celery import Celery - -from django.conf import settings - -# set the default Django settings module for the 'celery' program. -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'lms.settings') - -app = Celery('lms') - -# Using a string here means the worker will not have to -# pickle the object when using Windows. -app.config_from_object('django.conf:settings') -app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) - - -@app.task(bind=True) -def debug_task(self): - print('Request: {0!r}'.format(self.request)) diff --git a/lms/create_comments_bbtext.py b/lms/create_comments_bbtext.py deleted file mode 100644 index 191cbc6..0000000 --- a/lms/create_comments_bbtext.py +++ /dev/null @@ -1,20 +0,0 @@ -# coding=utf-8 -import os -import django -import sys - - -sys.path.append("/var/www/projects/codemy/") -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") -django.setup() -from management.models import Comment -from lms.tools import convert_html_to_bb - -errors = [] -for comment in Comment.objects.all(): - try: - comment.bbtext = convert_html_to_bb(comment.text) - except: - errors.append(comment.id) - else: - comment.save() diff --git a/lms/decors.py b/lms/decors.py deleted file mode 100644 index 1f7fcc1..0000000 --- a/lms/decors.py +++ /dev/null @@ -1,262 +0,0 @@ -# coding=utf-8 -import base64 -import datetime -import hashlib -import json -import time -from django.http import Http404 -from django.http import HttpResponse -from django.template import RequestContext -from django.views.decorators.csrf import csrf_exempt -from django.shortcuts import render_to_response, redirect -import simplejson - -from django.contrib.auth import logout -from finance.models import Bill -from access.models import ActionJ, User -from lms.settings import DOMAIN, NAME, SUPPORT, SUPPORT_PHONE, SUPPORT_TIME, ADDRESS, COMMENT_SECRET -from django.db.models import Q - -from lms.tools import comment_auth_data -from management.models import ModalTask -from management.tools import get_modals - - -def api_decor(without_auth=False, check_request=False, method='GET', need_keys=[], check_request_values=False, - need_values={}): - # Обслуживание API запроса - # check_request - проверяет введенные ключи. Если есть все необходимые - продолжает выполнение - # check_request_values - проверяет значение ключей request. ТОЛЬКО при наличии проверок check_request и - # совпадении ключей need_keys и check_request_values - # context_in - поправка вывода context при ошибке - def wrap(fun): - @csrf_exempt - def _render_json(request, *args, **kwargs): - if not request.user.is_authenticated() and not without_auth: - raise Http404 - - if request.user.is_authenticated() or without_auth: - if request.user.is_authenticated(): - if not request.user.last_ip: - request.user.set_request_data(request) - request.user.last_time = datetime.datetime.now() - if request.user.status == 'OFF': - request.user.status = 'ON' - request.user.save() - - result = True - if check_request: - keys_in = [] - if method == 'GET': - keys_in = request.GET.keys() - elif method == 'POST': - keys_in = request.POST.keys() - - # Проверка существования ключей в request - for i in need_keys: - if i not in keys_in: - result = False - break - - # Проверка значений в request - if check_request_values and result: - for key, value in need_values.iteritems(): - if method == 'GET' and (key not in need_keys or request.GET[key] != value): - result = False - break - elif method == 'POST' and (key not in need_keys or request.POST[key] != value): - result = False - break - if result: - data = fun(request, {'code': '0', 'response': '', 'data': ''}, *args, **kwargs) - else: - context_in = {'code': '0', 'response': 'KEYS ARE NOT VALID', 'data': ''} - data = context_in - response = HttpResponse(simplejson.dumps(data), content_type='application/json; charset=utf-8') - #response['Content-Security-Policy'] = "default-src 'self'" - return response - else: - response = HttpResponse(simplejson.dumps({'code': '0', 'response': '', 'data': ''}), - content_type='application/json; charset=utf-8') - #response['Content-Security-Policy'] = "default-src 'self'" - return response - - return _render_json - - return wrap - - -def response_decor(template, without_auth=False, description=''): - # Обслуживание стандартного запроса http - def wrap_response(func): - def _render_json(request, *args, **kwargs): - if request.user.is_authenticated() and request.user.block: - block_len = request.user.get_ip_len() - logout(request) - return redirect('/?userblocked={0}'.format(block_len)) - if request.user.is_authenticated() or without_auth: - parameters = func(request, *args, **kwargs) - parameters['DOMAIN'] = DOMAIN - parameters['NAME'] = NAME - parameters['SUPPORT'] = SUPPORT - parameters['SUPPORT_PHONE'] = SUPPORT_PHONE - parameters['SUPPORT_TIME'] = SUPPORT_TIME - parameters['ADDRESS'] = ADDRESS - parameters['ONLINE'] = User.objects.filter(status='ON').count() - parameters['COMMENT_USER_INFO'] = comment_auth_data(request.user) if request.user.is_authenticated() else '' - - if request.user.is_authenticated(): - if ModalTask.objects.filter(Q(user__email=request.user.email, modal__title='aicfb3')|Q(user__email=request.user.email, modal__title='aicfb2')|Q(user__email=request.user.email, modal__title='aicfb1')).exists(): - m = ModalTask.objects.filter(user__email=request.user.email).first() - parameters['show_fb'] = m.modal.text - m.user.remove(request.user) - - if ModalTask.objects.filter(user__email=request.user.email, modal__title='diplom_nameless').exists(): - m = ModalTask.objects.filter(user__email=request.user.email).first() - parameters['diplom_nameless'] = True - m.user.remove(request.user) - - if ModalTask.objects.filter(user__email=request.user.email, modal__title='csh_new_year').exists(): - m = ModalTask.objects.filter(user__email=request.user.email, modal__title='csh_new_year').first() - parameters['csh_new_year'] = True - m.user.remove(request.user) - - if ModalTask.objects.filter(user__email=request.user.email, modal__title='web_html').exists(): - m = ModalTask.objects.filter(user__email=request.user.email, modal__title='web_html').first() - parameters['web_html'] = True - m.user.remove(request.user) - - if ModalTask.objects.filter(user__email=request.user.email, modal__title='web_gerasimenko').exists(): - m = ModalTask.objects.filter(user__email=request.user.email, modal__title='web_gerasimenko').first() - parameters['web_gerasimenko'] = True - m.user.remove(request.user) - - if ModalTask.objects.filter(user__email=request.user.email, modal__title='JavaScript_geras').exists(): - m = ModalTask.objects.filter(user__email=request.user.email, modal__title='JavaScript_geras').first() - parameters['JavaScript_geras'] = True - m.user.remove(request.user) - - if ModalTask.objects.filter(user__email=request.user.email, modal__title='JavaScript_yegor').exists(): - m = ModalTask.objects.filter(user__email=request.user.email, modal__title='JavaScript_yegor').first() - parameters['JavaScript_yegor'] = True - m.user.remove(request.user) - - if ModalTask.objects.filter(user__email=request.user.email, modal__title='Java_geras').exists(): - m = ModalTask.objects.filter(user__email=request.user.email, modal__title='Java_geras').first() - parameters['Java_geras'] = True - m.user.remove(request.user) - - if ModalTask.objects.filter(user__email=request.user.email, modal__title='Java_it').exists(): - m = ModalTask.objects.filter(user__email=request.user.email, modal__title='Java_it').first() - parameters['Java_it'] = True - m.user.remove(request.user) - - if ModalTask.objects.filter(user__email=request.user.email, modal__title='IOS').exists(): - m = ModalTask.objects.filter(user__email=request.user.email, modal__title='IOS').first() - parameters['IOS'] = True - m.user.remove(request.user) - - if ModalTask.objects.filter(user__email=request.user.email, modal__title='web_start').exists(): - m = ModalTask.objects.filter(user__email=request.user.email, modal__title='web_start').first() - parameters['web_start'] = True - m.user.remove(request.user) - - if ModalTask.objects.filter(user__email=request.user.email, modal__title='excel').exists(): - m = ModalTask.objects.filter(user__email=request.user.email, modal__title='excel').first() - parameters['excel'] = True - m.user.remove(request.user) - - if ModalTask.objects.filter(user__email=request.user.email, modal__title='PR').exists(): - m = ModalTask.objects.filter(user__email=request.user.email, modal__title='PR').first() - parameters['PR'] = True - m.user.remove(request.user) - - if parameters and parameters.get('redirect'): - return redirect(parameters['redirect']) - else: - if request.user.is_authenticated(): - parameters['bills'] = Bill.objects.filter( - Q(user=request.user, status='W') | Q(user=request.user, status='P')) - parameters['actions'] = ActionJ.objects.filter(student=request.user).order_by('-id')[:5] - response = render_to_response(template, parameters, context_instance=RequestContext(request)) - #response['Content-Security-Policy'] = "default-src 'self'" - return response - else: - parameters = {'AUTH': True, - 'DOMAIN': DOMAIN, - 'NAME': NAME, - 'ONLINE': User.objects.filter(status='ON').count(), - 'SUPPORT': SUPPORT, - 'SUPPORT_PHONE': SUPPORT_PHONE, - 'SUPPORT_TIME': SUPPORT_TIME, - 'ADDRESS': ADDRESS, - 'COMMENT_USER_INFO': '', - 'MODALS': get_modals(request)} - if parameters and parameters.get('redirect'): - return redirect(parameters['redirect']) - else: - response = render_to_response('access_error.html', parameters, context_instance=RequestContext(request)) - #response['Content-Security-Policy'] = "default-src 'self'" - return response - - return _render_json - - return wrap_response - - -def out_api_decor(without_auth=False, check_request=False, method='GET', need_keys=[], check_request_values=False, - need_values={}): - # Обслуживание API запроса - # check_request - проверяет введенные ключи. Если есть все необходимые - продолжает выполнение - # check_request_values - проверяет значение ключей request. ТОЛЬКО при наличии проверок check_request и - # совпадении ключей need_keys и check_request_values - # context_in - поправка вывода context при ошибке - def wrap(fun): - @csrf_exempt - def _render_json(request, *args, **kwargs): - keys_in = [] - if request.user.is_authenticated() or without_auth: - if request.user.is_authenticated(): - request.user.last_time = datetime.datetime.now() - if request.user.status == 'OFF': - request.user.status = 'ON' - request.user.save() - result = True - if check_request: - if method == 'GET': - keys_in = request.GET.keys() - elif method == 'POST': - keys_in = request.POST.keys() - - # Проверка существования ключей в request - for i in need_keys: - if i not in keys_in: - result = False - break - - # Проверка значений в request - if check_request_values and result: - for key, value in need_values.iteritems(): - if method == 'GET' and (key not in need_keys or request.GET[key] != value): - result = False - break - elif method == 'POST' and (key not in need_keys or request.POST[key] != value): - result = False - break - if result: - data = fun(request, {'code': '0', 'response': '', 'data': ''}, *args, **kwargs) - else: - context_in = {'code': '0', 'response': 'KEYS ARE NOT VALID', 'data': keys_in} - data = context_in - response = HttpResponse(simplejson.dumps(data), content_type='application/json; charset=utf-8') - response['Access-Control-Allow-Origin'] = '*' - return response - else: - response = HttpResponse(simplejson.dumps({'code': '0', 'response': '', 'data': ''}), - content_type='application/json; charset=utf-8') - response['Access-Control-Allow-Origin'] = '*' - return response - - return _render_json - - return wrap diff --git a/lms/global_decorators.py b/lms/global_decorators.py new file mode 100644 index 0000000..7b60603 --- /dev/null +++ b/lms/global_decorators.py @@ -0,0 +1,18 @@ +from django.db import transaction + + +def transaction_decorator(function_to_decorate): + def wrap(*args, **kwargs): + transaction.set_autocommit(False) + try: + result = function_to_decorate(*args, **kwargs) + except Exception as ex: + transaction.rollback() + raise ex + else: + transaction.commit() + return result + finally: + transaction.set_autocommit(True) + + return wrap \ No newline at end of file diff --git a/lms/html2bbcode.py b/lms/html2bbcode.py deleted file mode 100644 index 50cdd72..0000000 --- a/lms/html2bbcode.py +++ /dev/null @@ -1,74 +0,0 @@ -from __future__ import unicode_literals -from configparser import RawConfigParser -from html.parser import HTMLParser -from collections import defaultdict -from os.path import join, dirname - - -class Attributes(dict): - def __getitem__(self, name): - try: - return super(Attributes, self).__getitem__(name) - except KeyError: - return '' - - -class ConfigParser(RawConfigParser, object): - def get(self, section, option): - value = super(ConfigParser, self).get(section, option) - return value.replace('\\n', '\n') - - -class HTML2BBCode(HTMLParser): - def __init__(self, config=None): - HTMLParser.__init__(self) - self.config = ConfigParser(allow_no_value=True) - self.config.read(join(dirname(__file__), 'bbdata.conf')) - if config: - self.config.read(config) - - def handle_starttag(self, tag, attrs): - if self.config.has_section(tag): - self.attrs[tag].append(dict(attrs)) - self.data.append( - self.config.get(tag, 'start') % Attributes(attrs or {})) - if self.config.has_option(tag, 'expand'): - self.expand_starttags(tag) - - def handle_endtag(self, tag): - if self.config.has_section(tag): - self.data.append(self.config.get(tag, 'end')) - if self.config.has_option(tag, 'expand'): - self.expand_endtags(tag) - self.attrs[tag].pop() - - def handle_data(self, data): - self.data.append(data) - - def feed(self, data): - self.data = [] - self.attrs = defaultdict(list) - HTMLParser.feed(self, data) - return ''.join(self.data) - - def expand_starttags(self, tag): - for expand in self.get_expands(tag): - if expand in self.attrs[tag][-1]: - self.data.append( - self.config.get(expand, 'start') % self.attrs[tag][-1]) - - def expand_endtags(self, tag): - for expand in reversed(self.get_expands(tag)): - if expand in self.attrs[tag][-1]: - self.data.append( - self.config.get(expand, 'end') % self.attrs[tag][-1]) - - def get_expands(self, tag): - expands = self.config.get(tag, 'expand').split(',') - return map(lambda x: x.strip(), expands) - - -if __name__ == '__main__': - import doctest - - doctest.testmod() diff --git a/lms/regex.py b/lms/regex.py deleted file mode 100644 index fdfad94..0000000 --- a/lms/regex.py +++ /dev/null @@ -1,26 +0,0 @@ -# coding=utf-8 -import re -from django.core.exceptions import ValidationError - -phone_regex = re.compile('^((9|4)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{10}$') - - -def check_phone(phone): - return re.match(phone_regex, str(phone)) is not None - - -def check_phone_with_except(phone): - if re.match(phone_regex, phone) is None: - raise ValidationError(u'Телефон не прошел проверку %s' % phone) - - -def check_email(email): - p = re.compile( - r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*" # dot-atom - r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-011\013\014\016-\177])*"' # quoted-string - r')@(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?$', re.IGNORECASE) - m = p.match(email) - if m: - return True - else: - return False diff --git a/lms/settings.py b/lms/settings.py index c671a23..4d75dd2 100644 --- a/lms/settings.py +++ b/lms/settings.py @@ -70,28 +70,23 @@ PERSONAL_FILES = '/personal_files/' INSTALLED_APPS = [ - #'jet.dashboard', - #'jet', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'django_celery_results', + 'django_celery_beat', + 'raven.contrib.django.raven_compat', 'access', 'courses', 'storage', 'management', 'finance', - 'djcelery', - 'redactor', - 'raven.contrib.django.raven_compat', 'journals', 'service', - 'import_export', 'library', - 'practice', - 'precise_bbcode', ] MIDDLEWARE_CLASSES = [ @@ -103,7 +98,7 @@ MIDDLEWARE_CLASSES = [ 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', - 'access.middleware.CheckPerm', + #'access.middleware.CheckPerm', 'access.middleware.RequestToApi', ] @@ -135,7 +130,7 @@ WSGI_APPLICATION = 'lms.wsgi.application' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', - 'NAME': os.environ.get('DB_NAME', 'codemy'), + 'NAME': os.environ.get('DB_NAME', 'new_lms'), 'USER': os.environ.get('PG_ENV_POSTGRES_USER', 'team'), 'PASSWORD': os.environ.get('PG_ENV_POSTGRES_PASSWORD', 'nu5Xefise'), 'HOST': os.environ.get('PG_PORT_5432_TCP_ADDR', '127.0.0.1'), @@ -145,7 +140,6 @@ DATABASES = { # Password validation # https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators -AUTHENTICATION_BACKENDS = ['lms.CUSTOM_AUTH.ModelBackend'] AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', diff --git a/lms/tools.py b/lms/tools.py deleted file mode 100644 index a199f58..0000000 --- a/lms/tools.py +++ /dev/null @@ -1,358 +0,0 @@ -# coding=utf-8 -import base64 -import json -import re -import urllib - -import hashlib -import os -import random -import string -import sys - -import time -from PIL import Image, ImageDraw, ImageFont -from lms.html2bbcode import HTML2BBCode -from lms.settings import BASE_DIR, BILL_RESULT_KEY, BILL_KEY, COMMENT_SECRET - -BBParser = HTML2BBCode() - - -def out_uri(url, data): - params = urllib.parse.urlencode(data) - # Отправка красивой uri строки - return "%s?%s" % (url, params) - - -def get_client_ip(request): - x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') - if x_forwarded_for: - ip = x_forwarded_for.split(',')[0] - else: - ip = request.META.get('REMOTE_ADDR') - return ip - - -def gen_pay_sig(keys, method='', result=True): - # Формирование - sig = '%s;' % method - for key, value in sorted(keys.items()): - if value and key != 'sp_sig' and key[:3] == 'sp_': - sig += '{0};'.format(value) - - sig += BILL_RESULT_KEY if result else BILL_KEY - return hashlib.md5(sig.encode('utf-8')).hexdigest() - - -def comment_auth_data(user): - _time = str(int(time.time())) - - USER_INFO = str('{"nick": "')+str(user.get_name())+str('", "avatar": "')+str(user.get_image_url())+('", "id": "')+str(user.id)+str('", "email": "')+str(user.email)+str('", "profile_url": "')+str(user.get_profile())+('"}') - user_base64 = base64.b64encode(USER_INFO.encode('utf-8')).decode('utf-8') - - before_sign = ('{0}{1}{2}'.format(COMMENT_SECRET, user_base64, _time)).encode('utf-8') - sign = hashlib.md5(before_sign).hexdigest() - return "{0}_{1}_{2}".format(user_base64, _time, sign) - - -def random_string(length=10, postfix='', prefix=''): - # Генерация случайной строки - string_in = \ - ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for x in range(length)) - return prefix + string_in + postfix - - -def random_int(length=1, postfix='', prefix=''): - result = ''.join(random.choice(string.digits) for x in range(length)) - return prefix + str(result) + postfix - - -def md5_for_file(f): - # Вичисление ХЕШ суммы файла - return hashlib.md5(open(f).read()).hexdigest() - - -def condition_factory(list_in): - # Фабрика проверки условий - # i['condition'] - Условие - # i['error'] - Ошибка выполнения запроса - # result['code'] = 0 - условие не выполнилось - # result['response'] - Текст ошибки не выполненного условия - result = { - 'code': '1', - 'response': '' - } - for i in list_in: - if not i['condition']: - result['code'] = '0' - result['response'] = i['error'] - return result - return result - - -def chap_shielding(chap, shielding): - result = '' - if chap in shielding: - result += '\\' + chap - else: - result += chap - return result - - -def word_shielding(word, shielding): - result = '' - for ch in word: - result += chap_shielding(ch, shielding) - - return result - - -def str_shielding(str, exclude): - # Экранирование строки - # exclude - строка элементов, которые не нужно экранировать - result = '' - shielding_chp = ["'", '{', '}'] - n = 0 - exlude_flag = list([len(i) for i in exclude]) - max_n = max(exlude_flag) - _tmp = '' - _shi_tmp = '' - for chap in str: - _tmp += chap - if chap in shielding_chp: - _shi_tmp += '\\' + chap - else: - _shi_tmp += chap - n += 1 - if n in exlude_flag: - if _tmp in exclude: - result += _tmp - n = 0 - _tmp = '' - _shi_tmp = '' - - if n == max_n: - result += _shi_tmp - n = 0 - _tmp = '' - _shi_tmp = '' - - if _shi_tmp: - result += _shi_tmp - - return result - - -def translit(locallangstring, only_letter=False): - conversion = { - u'\u0410': 'a', u'\u0430': 'a', - u'\u0411': 'b', u'\u0431': 'b', - u'\u0412': 'v', u'\u0432': 'v', - u'\u0413': 'g', u'\u0433': 'g', - u'\u0414': 'd', u'\u0434': 'd', - u'\u0415': 'e', u'\u0435': 'e', - u'\u0401': 'yo', u'\u0451': 'yo', - u'\u0416': 'zh', u'\u0436': 'zh', - u'\u0417': 'z', u'\u0437': 'z', - u'\u0418': 'i', u'\u0438': 'i', - u'\u0419': 'y', u'\u0439': 'y', - u'\u041a': 'k', u'\u043a': 'k', - u'\u041b': 'l', u'\u043b': 'l', - u'\u041c': 'm', u'\u043c': 'm', - u'\u041d': 'n', u'\u043d': 'n', - u'\u041e': 'o', u'\u043e': 'o', - u'\u041f': 'p', u'\u043f': 'p', - u'\u0420': 'r', u'\u0440': 'r', - u'\u0421': 's', u'\u0441': 's', - u'\u0422': 't', u'\u0442': 't', - u'\u0423': 'u', u'\u0443': 'u', - u'\u0424': 'f', u'\u0444': 'f', - u'\u0425': 'h', u'\u0445': 'h', - u'\u0426': 'ts', u'\u0446': 'ts', - u'\u0427': 'ch', u'\u0447': 'ch', - u'\u0428': 'sh', u'\u0448': 'sh', - u'\u0429': 'sch', u'\u0449': 'sch', - u'\u042a': '"', u'\u044a': '"', - u'\u042b': 'y', u'\u044b': 'y', - u'\u042c': '\'', u'\u044c': '\'', - u'\u042d': 'e', u'\u044d': 'e', - u'\u042e': 'yu', u'\u044e': 'yu', - u'\u042f': 'ya', u'\u044f': 'ya', - u' ': '-', - u',': '', - u'—': '-', - u'#': 'sharp' - } - conversion_letter = { - u'\u0410': 'a', u'\u0430': 'a', - u'\u0411': 'b', u'\u0431': 'b', - u'\u0412': 'v', u'\u0432': 'v', - u'\u0413': 'g', u'\u0433': 'g', - u'\u0414': 'd', u'\u0434': 'd', - u'\u0415': 'e', u'\u0435': 'e', - u'\u0401': 'yo', u'\u0451': 'yo', - u'\u0416': 'zh', u'\u0436': 'zh', - u'\u0417': 'z', u'\u0437': 'z', - u'\u0418': 'i', u'\u0438': 'i', - u'\u0419': 'y', u'\u0439': 'y', - u'\u041a': 'k', u'\u043a': 'k', - u'\u041b': 'l', u'\u043b': 'l', - u'\u041c': 'm', u'\u043c': 'm', - u'\u041d': 'n', u'\u043d': 'n', - u'\u041e': 'o', u'\u043e': 'o', - u'\u041f': 'p', u'\u043f': 'p', - u'\u0420': 'r', u'\u0440': 'r', - u'\u0421': 's', u'\u0441': 's', - u'\u0422': 't', u'\u0442': 't', - u'\u0423': 'u', u'\u0443': 'u', - u'\u0424': 'f', u'\u0444': 'f', - u'\u0425': 'h', u'\u0445': 'h', - u'\u0426': 'ts', u'\u0446': 'ts', - u'\u0427': 'ch', u'\u0447': 'ch', - u'\u0428': 'sh', u'\u0448': 'sh', - u'\u0429': 'sch', u'\u0449': 'sch', - u'\u042a': '', u'\u044a': '', - u'\u042b': 'y', u'\u044b': 'y', - u'\u042c': '', u'\u044c': '', - u'\u042d': 'e', u'\u044d': 'e', - u'\u042e': 'yu', u'\u044e': 'yu', - u'\u042f': 'ya', u'\u044f': 'ya', - u' ': '-' - } - translitstring = [] - p = re.compile(r'\?') - for c in locallangstring: - translitstring.append(conversion.setdefault(c, c) if not only_letter else conversion_letter.setdefault(c, c)) - - return p.sub('', ''.join(translitstring)) - - -def weekdays(date, short=False): - if short: - days = {0: u"ПН", 1: u"ВТ", 2: u"СР", 3: u"ЧТ", 4: u"ПТ", 5: u"СБ", 6: u"ВС"} - else: - days = {0: u"Понедельник", 1: u"Вторник", 2: u"Среда", 3: u"Четверг", 4: u"Пятница", 5: u"Суббота", - 6: u"Воскресенье"} - return days[date.weekday()] - - -def transit_month(month): - monthes = {1: u'Января', 2: u'Февраля', 3: u'Марта', 4: u'Апреля', 5: u'Мая', 6: u'Июня', 7: u'Июля', 8: u'Августа', - 9: u'Сентября', 10: u'Октября', 11: u'Ноября', 12: u'Декабря'} - return monthes[month] - - -def out_date_format(date, no_time=False): - # Формат выводимой даты - if date: - if no_time: - return u'{0} {1} {2} {3}'.format(weekdays(date, short=True), date.day, transit_month(date.month), date.year) - else: - return u'{0} {1} {2} {3}'.format(date.day, transit_month(date.month), date.year, date.strftime("%H:%M")) - return '' - - -def check_role(user, role): - result = {'result': False} - if user.in_role == role: - result['result'] = True - else: - if user.in_role == 'U': - result['redirect'] = '/access/profile' - elif user.in_role == 'T': - result['redirect'] = '/teacher/profile' - elif user.in_role == 'M': - result['redirect'] = '/management/profile/' - elif user.in_role == 'S': - result['redirect'] = '/management/super_profile/' - elif user.in_role == 'A': - result['redirect'] = '/admin' - - return result - - -def phone_format(phone, type_in='long'): - if phone: - if type_in == 'short': - return u'({0}{1}{2}) {3}{4}{5}-{6}{7}-{8}{9}'.format(phone[0], phone[1], phone[2], phone[3], phone[4], - phone[5], - phone[6], phone[7], phone[8], phone[9]) - elif type_in == 'long': - return u'+7 ({0}{1}{2}) {3}{4}{5}-{6}{7}-{8}{9}'.format(phone[0], phone[1], phone[2], phone[3], phone[4], - phone[5], phone[6], phone[7], phone[8], phone[9]) - return '' - - -def check_set_password(password): - not_list = ['thomas', '121212', 'zxcvbnm', 'admin123', 'nikita', 'sergey', 'asdfghjkl', 'stalker', 'saravn', - '789456', 'password1234', 'aaaaaa', 'e10adc3949ba59abbe56e057f20f883e', 'fuckyou', '1q2w3e4r', - 'football1', 'cjkysirj', 'gewinner', '123456789', '123123123', 'soccer', '123abc', '123321', 'gfhjkm', - 'password1234567', '12344321', 'qwe123', 'hallo123', '\xd0\xbb\xd1\x8e\xd0\xb1\xd0\xbe\xd0\xb2\xd1\x8c', - 'password123456789', 'shadow', 'password', 'qq18ww899', '123123', 'q1q1q1', 'michael', 'hejsan', - '111222', 'martin', '147258369', 'zzzzzz', '123qwe', '11111111', '159951', '7654321', '142536', - 'mirage', '\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd', 'qwertyuiop[]', 'qwertyuiop', 'computer', - '1q2w3e', 'k.,jdm', '123456', 'knopka', 'lol123', 'password12', 'lovers', 'matrix', '555555', - 'qazwsxedc', '1234554321', 'genius', 'daniel', 'internet', 'princess', 'nastya', 'fylhtq', - 'password12345', '147258', '9379992', '12341234', 'maximius', 'spartak', '159753', 'fyfcnfcbz', - 'qwertyu', 'marina', '666666', 'eminem', 'sophie', '1q2w3e4r5t', '258456', 'tecktonik', '1234567890', - '222222', '999999', 'iloveyou', 'abc123', 'qweqwe', '1111111111', '654321', '134679', 'q1w2e3', - '121314', 'letmein', '333333', 'vfhbyf', 'pokemon', 'george', 'tundra_cool2', 'monkey', '131313', - '1234567', 'password12345678', 'doudou', 'lollipop', 'holysh!t', 'secret', 'master', 'TempPassWord', - 'naruto', 'andrey', '123654', '88888888', 'sunshine', 'andrew', '12345678', '987654', '1111111', - 'asdfgh', 'cjmasterinf', 'password123456', 'easytocrack1', 'qwaszx', 'Test123', 'ghbdtn', 'azerty', - '212121', '777777', 'qweasd', 'yfnfif', '666999', '1111114', 'natasha', 'password1', 'changeme', - 'kikugalanetroot', 'vkontakte', 'abcd1234', 'vfrcbv', 'loulou', 'qwerty', 'liverpool', 'ngockhoa', - '147852', '753951', 'qweasdzxc', 'dragon', 'superman', 'slipknot', '100827092', 'password123', - 'baseball1', '232323', '19921992', '124578', '19951995', '888888', '1qaz2wsx', '159357', '112233', - 'zxcvbn', 'qazwsx', 'asdasd', 'administrator', 'killer', '987654321', - '\xd0\xbf\xd0\xb0\xd1\x80\xd0\xbe\xd0\xbb\xd1\x8c', 'fktrcfylh', '7777777', - '135790', 'sandra', '1234321', '4815162342', '000000', 'samsung', 'charlie', - 'zaqwsx', 'q1w2e3r4', '111111', 'jessica', '123789', 'parola'] - - result = True - message = '' - if len(password) < 6: - result = False - message = u'Пароль не должен быть меньше 6 символов' - - if password in not_list: - result = False - message = u'Ваш пароль входит в список
    "50 самых распространныеных паролей"
    это не безопасно' - - return result, message - - -def user_fabric(user=None): - if user and user.is_authenticated(): - return user - else: - return None - - -def gen_write(SOURCE, FONT, FONT_SIZE, TEXT, HEIGHT, LEFT, COLOR): - PATH = os.path.join(BASE_DIR, 'media/img_creator/') - logo = Image.open(SOURCE).convert('RGBA') - img = Image.new('RGBA', logo.size, (0, 0, 0, 1)) - fnt = ImageFont.truetype(FONT, int(FONT_SIZE)) - d = ImageDraw.Draw(img) - d.text((int(HEIGHT), int(LEFT)), TEXT, font=fnt, fill=COLOR) - out = Image.alpha_composite(logo, img) - out.show() - path = os.path.join(PATH, '{0}-{1}.png'.format(translit(TEXT), random_int(length=10))) - out.save(path) - return path - - -def show_progress(full, now, post=''): - # + Процесс отображения процентов выполнения - # Отображение процента выполнения - if full != 0: - progress = float(now / (full * 0.01)) - else: - progress = '100' - sys.stdout.write(u'\rВыполнено: {0:6.4}% {1}'.format(progress, post)) - sys.stdout.flush() - - -def convert_html_to_bb(text): - return str(BBParser.feed(text.strip())) diff --git a/lms/urls.py b/lms/urls.py index 8d6616d..d6f5cc1 100644 --- a/lms/urls.py +++ b/lms/urls.py @@ -1,41 +1,12 @@ from django.conf.urls import url, include -from django.conf.urls.static import static from django.contrib import admin from django.views.static import serve -from lms import views from lms import settings -from access.views import profile_view - urlpatterns = [ - url(r'^$', views.index), - url(r'^oferta/', views.show_oferta), - url(r'^test/$', views.test), - url(r'^all_comments/$', views.all_comments), - url(r'^reports/$', views.new_reports), - url(r'^new_reports/$', views.new_reports), - url(r'^500/$', views.e500), - url(r'^404/$', views.e404), - url(r'^contacts/$', views.contacts), - url(r'^access_error/$', views.access_error), - url(r'^storage/', include('storage.urls')), - url(r'^practice/', include('practice.urls')), - url(r'^access/', include('access.urls')), - url(r'^management/', include('management.urls')), - url(r'^teacher/', include('access.teach_urls')), - url(r'^wallet/', include('finance.urls')), url(r'^api/v1/', include('api_v1.urls')), - url(r'^courses/', include('courses.urls')), - url(r'^journals/', include('journals.urls')), - url(r'^library/', include('library.urls')), - url(r'^forum/', include('management.forum_urls')), - url(r'^service/', include('service.urls')), - url(r'^redactor/', include('redactor.urls')), - url(r'^analytics/', include('analytics.urls')), - #url(r'^jet/', include('jet.urls', 'jet')), - #url(r'^jet/dashboard/', include('jet.dashboard.urls', 'jet-dashboard')), url(r'^admin/', include(admin.site.urls)), url(r'^media/(?P.*)/$', serve, {'document_root': settings.MEDIA_ROOT}), url(r'^static/(?P.*)/$', serve, {'document_root': settings.STATIC_ROOT}), - url(r'^(?P.*)/$', profile_view), + ] diff --git a/lms/views.py b/lms/views.py deleted file mode 100644 index 41f3d5b..0000000 --- a/lms/views.py +++ /dev/null @@ -1,162 +0,0 @@ -# coding=utf-8 -import datetime -from django.http import Http404 -from lms.decors import response_decor -from lms.tools import user_fabric, out_date_format -from courses.models import Course, Lesson, MaterialDirection -from journals.models import TeacherJ, HomeworkTry, check_journal -from access.models import User -from finance.models import Bill -from courses.templates import comment_fabric -from library.models import Article -from management.reports import get_now_success_hw, get_second_success_hw -from django.http import HttpResponse - -def sortByTimeStamp(inputStr): - return inputStr['sort'] - - -@response_decor(template='test.html') -def test(request): - return {} - - -@response_decor(template='access_error.html', without_auth=True) -def access_error(request): - # Страница заблокированного доступа - return {} - - -@response_decor(template='index.html', without_auth=True) -def index(request): - if request.user.is_authenticated() and request.user.in_role in ['M', 'S']: - return {'redirect': '/access/profile'} - journals = [] - for course in Course.objects.all() if request.user.is_authenticated() and request.user.is_admin else Course.objects.filter(public=True): - do = True - if course.hidden: - if not request.user.is_authenticated(): - do = False - else: - if not request.user.is_admin: - try: - Bill.objects.get(service__course=course, user=request.user, status='F') - except Bill.DoesNotExist: - do = False - if do: - journal, created = TeacherJ.objects.get_or_create(course=course, student=user_fabric(request.user)) - if not journal.full and Bill.objects.filter(user=user_fabric(request.user), service__course=course, status='F').exists(): - if not journal.start_date: - journal.start_date = datetime.datetime.now() - journal.save() - check_journal(journal) - journals.append(journal.get_head_face()) - - return {'courses': journals, - 'directions': ({'count': i.count(), 'title': i.title, 'color': i.color} for i in MaterialDirection.objects.all() if i.count() != 0), - 'bought': Bill.objects.filter(user=request.user, status='F').exists() if request.user.is_authenticated() else False} - - -@response_decor(template='test.html', without_auth=True) -def test(request): - return {} - - -@response_decor(template='all_comments.html', without_auth=False) -def all_comments(request): - if request.user.in_role not in ['U']: - tmp = {} - tmp2 = {} - sor = [] - sor2 = [] - result = [] - result2 = [] - course_filter = {'public': True} - if request.user.in_role == 'T': - course_filter['teachers'] = request.user - - for course in Course.objects.filter(**course_filter): - for lesson in Lesson.objects.filter(course=course): - for c in lesson.comments.filter(closed=False).order_by('date'): - if not c.owner.is_admin: - tmp[c.id] = {'lesson': lesson, 'course': course, 'theme': lesson.theme, 'comment': comment_fabric(c, __type='L', __user=request.user)} - sor.append(c.id) - - sor.sort(reverse=True) - for i in sor: - result.append(tmp[i]) - - for article in Article.objects.filter(public=True): - for c in article.comments.filter(closed=False).order_by('date'): - if not c.owner.is_admin: - tmp2[c.id] = {'article': article, 'comment': comment_fabric(c, __type='L', __user=request.user)} - sor2.append(c.id) - sor2.sort(reverse=True) - - for i in sor2: - result2.append(tmp2[i]) - - return {'lessons': result, 'article': result2, 'get_now_success_hw': get_now_success_hw(), 'get_second_success_hw': get_second_success_hw()} - raise Http404 - - -@response_decor(template='500.html', without_auth=True) -def e500(request): - return {} - - -@response_decor(template='404.html', without_auth=True) -def e404(request): - return {} - - -@response_decor(template='reports.html', without_auth=False) -def reports(request): - if request.user.in_role not in ['U', 'T', 'M']: - c = {} - for course in Course.objects.filter(public=True): - s_date = datetime.datetime.now() - datetime.timedelta(days=7) - c[course.id] = { - 'title': course.get_title(), - 'students': len(set(HomeworkTry.objects.filter(date__gte=s_date, material__course=course).exclude(f_date=None).values_list('student__id', flat=True))), - 'success': HomeworkTry.objects.filter(date__gte=s_date, material__course=course, success=True).exclude(f_date=None).count(), - 'process': HomeworkTry.objects.filter(date__gte=s_date, material__course=course, f_date=None).count(), - 'expired': HomeworkTry.objects.filter(date__gte=s_date, material__course=course, expired=True).exclude(f_date=None).count(), - 'date': out_date_format(s_date, no_time=True) - } - return {'get_now_success_hw': get_now_success_hw(), 'get_second_success_hw': get_second_success_hw(), 'courses': c, 'users': {'all': User.objects.all().count(), - 'no_active': {'int': User.objects.filter(is_active=False).exclude(reg_status='4').count(), 'proc': User.objects.filter(is_active=False).exclude(reg_status='4').count()/(User.objects.all().count()/100)}, - 'bought': {'all': {'int': User.objects.filter(customer=True).count(), 'proc': User.objects.filter(customer=True).count()/(User.objects.all().count()/100)}, - 'day': {'int': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(days=1)).count(), 'proc': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(days=1)).count()/(User.objects.filter(customer=True).count()/100)}, - 'three': {'int': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(days=3)).count(), 'proc': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(days=3)).count()/(User.objects.filter(customer=True).count()/100)}, - 'week': {'int': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(weeks=1)).count(), 'proc': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(weeks=1)).count()/(User.objects.filter(customer=True).count()/100)}, - 'month': {'int': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(weeks=4)).count(), 'proc': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(weeks=4)).count()/(User.objects.filter(customer=True).count()/100)}}}} - raise Http404 - - -@response_decor(template='new_reports.html', without_auth=False) -def new_reports(request): - if request.user.in_role == 'T': - return {'redirect': '/all_comments/'} - courses = {} - for c in Course.objects.filter(public=True): - courses[c.id] = c.get_title() - - return {'get_now_success_hw': get_now_success_hw(), 'get_second_success_hw': get_second_success_hw(), 'courses': courses, 'users': {'all': User.objects.all().count(), - 'no_active': {'int': User.objects.filter(is_active=False).exclude(reg_status='4').count(), 'proc': User.objects.filter(is_active=False).exclude(reg_status='4').count()/(User.objects.all().count()/100)}, - 'bought': {'all': {'int': User.objects.filter(customer=True).count(), 'proc': User.objects.filter(customer=True).count()/(User.objects.all().count()/100)}, - 'day': {'int': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(days=1)).count(), 'proc': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(days=1)).count()/(User.objects.filter(customer=True).count()/100)}, - 'three': {'int': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(days=3)).count(), 'proc': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(days=3)).count()/(User.objects.filter(customer=True).count()/100)}, - 'week': {'int': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(weeks=1)).count(), 'proc': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(weeks=1)).count()/(User.objects.filter(customer=True).count()/100)}, - 'month': {'int': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(weeks=4)).count(), 'proc': User.objects.filter(customer=True, last_time__lte=datetime.datetime.now()-datetime.timedelta(weeks=4)).count()/(User.objects.filter(customer=True).count()/100)}}}} - - -@response_decor(template='contacts.html', without_auth=True) -def contacts(request): - return {} - -def show_oferta(request): - with open('oferta.pdf', 'rb') as pdf: - response = HttpResponse(pdf.read(), content_type='application/pdf') - response['Content-Disposition'] = 'filename=oferta.pdf' - return response \ No newline at end of file diff --git a/lms/wsgi.py b/lms/wsgi.py index 3a05558..5e9e9dc 100644 --- a/lms/wsgi.py +++ b/lms/wsgi.py @@ -1,12 +1,3 @@ -""" -WSGI config for codemy project. - -It exposes the WSGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/ -""" - import os from django.core.wsgi import get_wsgi_application diff --git a/management/admin.py b/management/admin.py index b972433..b488d64 100755 --- a/management/admin.py +++ b/management/admin.py @@ -1,104 +1,5 @@ from django.contrib import admin -from access.models import User -from management.models import Comment, Feedback, News, CommentSawTable, Faq, FaqTitle, Newsletter, NewsletterShell, \ - ModalJournal, ModalTask, Modal, ModalTemplate, ModalPlace +from management.models import Comment - -class NewsletterShellAdmin(admin.ModelAdmin): - list_display = ('name', ) - -admin.site.register(NewsletterShell, NewsletterShellAdmin) - - -class NewsletterAdmin(admin.ModelAdmin): - list_display = ('author', 'shell', 'date', 'sent_date', 'status', ) - filter_horizontal = ('recipient', 'f_recipient', ) - search_fields = ('author__id', 'author__email', 'author__fname', 'author__name', 'author__oname', ) - list_filter = ('date', 'sent_date', 'status', ) - -admin.site.register(Newsletter, NewsletterAdmin) - - -class CommentAdmin(admin.ModelAdmin): - list_display = ('id', 'parent_id', 'owner', 'closed', 'status', 'date', 'token', ) - search_fields = ['id', 'token'] - filter_horizontal = ('files', ) - list_filter = ('status', 'date',) - -admin.site.register(Comment, CommentAdmin) - - -class FeedbackAdmin(admin.ModelAdmin): - list_display = ('name', 'email', 'phone', 'date', 'closed',) - -admin.site.register(Feedback, FeedbackAdmin) - - -class NewsAdmin(admin.ModelAdmin): - list_display = ('title', 'author', 'public', 'public_date',) - - -admin.site.register(News, NewsAdmin) - - -class CommentSawTableAdmin(admin.ModelAdmin): - list_display = ('user', 'comment', 'date', ) - - -admin.site.register(CommentSawTable, CommentSawTableAdmin) - - -class FaqTitleAdmin(admin.ModelAdmin): - list_display = ('title', 'icon', 'is_admin', 'is_staff', ) - -admin.site.register(FaqTitle, FaqTitleAdmin) - - -class FaqAdmin(admin.ModelAdmin): - list_display = ('title', 'answer', ) - search_fields = ['answer', 'title'] - list_filter = ['title'] - -admin.site.register(Faq, FaqAdmin) - - -class ModalPlaceAdmin(admin.ModelAdmin): - list_display = ('key', 'public',) - list_filter = ('public',) - search_fields = ('key',) - -admin.site.register(ModalPlace, ModalPlaceAdmin) - - -class ModalTemplateAdmin(admin.ModelAdmin): - list_display = ('title', 'key', 'place', ) - list_filter = ('key', 'place',) - search_fields = ('title', 'slug', 'key', 'place__key',) - -admin.site.register(ModalTemplate, ModalTemplateAdmin) - - -class ModalAdmin(admin.ModelAdmin): - list_display = ('title', 'id', 'template', 'views', 'closes', 'interval', 'show_time', 'hide_time', 'close',) - list_filter = ('show_time', 'hide_time', 'template__key', ) - search_fields = ('title', 'template__key', 'template__title', ) - -admin.site.register(Modal, ModalAdmin) - - -class ModalTaskAdmin(admin.ModelAdmin): - list_display = ('modal', 'manager', 'date', 'status',) - list_filter = ('status', 'date', 'modal',) - search_fields = ('user__email', 'user__fname', 'user__name', 'user__oname', 'modal__title', 'modal__template__key') - filter_horizontal = ('user',) - -admin.site.register(ModalTask, ModalTaskAdmin) - - -class ModalJournalAdmin(admin.ModelAdmin): - list_display = ('user', 'task', 'date', 'views', 'closes', 'key', 'status',) - list_filter = ('date', 'status',) - search_fields = ('user__email', 'user__fname', 'user__name', 'user__oname', 'key',) - -admin.site.register(ModalJournal, ModalJournalAdmin) +admin.site.register(Comment) \ No newline at end of file diff --git a/management/api.py b/management/api.py deleted file mode 100755 index f656f13..0000000 --- a/management/api.py +++ /dev/null @@ -1,287 +0,0 @@ -# coding=utf-8 -import re -from django.db.models import Q -from access.models import User -from lms.decors import api_decor -from lms.tools import out_date_format, condition_factory, user_fabric -from finance.models import Price, Bill, ServiceRequest -from management.letters import sent_new_bill, sent_clean_letter, send_burning_course_letter -from management.models import News, Feedback, Comment -from courses.models import Course, CourseTheme -from journals.models import TeacherJ, CourseThemeJ, LessonJ, HomeworkJ - -@api_decor(without_auth=False, need_keys=['title', 'content', 'to'], method='POST', check_request=True) -def self_sent_letter(request, context): - # Отправки письма из интерфейса - if user_fabric(request.user) and request.user.is_admin or request.user.is_staff: - sent_clean_letter(request.POST['title'], request.POST['content'], request.POST['to']) - context['code'] = '1' - else: - context['code'] = '0' - context['response'] = u'Только администраторы системы могут отправлять письма через данную функцию' - return context - - -@api_decor(without_auth=True) -def get_news(request, context): - result_len = 3 - news = News.objects.filter(public=True)[0:result_len] - context['data'] = {} - context['data'] = [ - {'id': i.id, 'title': i.title, 'content': i.content, 'author': i.author.get_short_name(), - 'public_date': out_date_format(i.public_date, no_time=True), - 'icon': i.icon.url if i.icon else '/static/img/1438629985_paper_plane_fly_freedom_flat_icon.png'} - for i in news] - context['code'] = '1' - return context - - -@api_decor(without_auth=False, need_keys=['phone'], method='POST', check_request=True) -def search_users(request, context): - context['data'] = [] - if request.user.in_role != 'U': - email = request.POST['phone'].lower() - if User.objects.filter(phone__contains=re.sub(r'\W+', r'', email)).exists(): - for i in User.objects.filter(phone__contains=re.sub(r'\W+', r'', email).strip()[1:]): - context['data'].append( - {'id': i.id, 'user': i.get_full_name(), 'phone': i.phone, 'user_role': i.get_in_role_display(), - 'email': i.email}) - - elif User.objects.filter(email__contains=email).exists(): - for i in User.objects.filter(email__contains=email): - context['data'].append( - {'id': i.id, 'user': i.get_full_name(), 'phone': i.phone, 'user_role': i.get_in_role_display(), - 'email': i.email}) - - else: - context['code'] = '0' - return context - context['code'] = '1' - - else: - context['code'] = '0' - return context - - -@api_decor(without_auth=False) -def get_managers(request, context): - context['data'] = [] - if request.user.in_role == 'A' or request.user.in_role == 'S': - for i in User.objects.filter( - Q(is_active=True, deactivate=False, in_role='M') | Q(is_active=True, deactivate=False, - in_role='S')): - context['data'].append({'id': i.id, 'name': i.get_short_name()}) - context['code'] = '1' - return context - - -@api_decor(without_auth=False, need_keys=['id'], method='POST', check_request=True) -def get_services_for_user(request, context): - context['data'] = [] - for i in Price.objects.filter(public=True): - service = '' - if i.course: - service = str(i.course.get_direction()) - context['data'].append({'service': service, 'name': i.get_name(), 'id': i.id}) - context['code'] = '1' - return context - - -@api_decor(without_auth=False) -def new_bill(request, context): - if request.POST.get('new_bill_user_id'): - if request.POST.get('new_bill_service'): - user = User.objects.get(id=request.POST['new_bill_user_id']) - service = Price.objects.get(id=request.POST['new_bill_checked_service']) - bill = Bill.objects.create(user=user, - service=service, - manager=request.user, - price=request.POST['new_bill_cost'], - description=request.POST.get('new_bill_comment') if request.POST.get( - 'new_bill_comment') else '') - sent_new_bill(bill) - if ServiceRequest.objects.filter( - Q(student=bill.user, course=bill.service.course, manager=request.user, status='S') | Q( - student=bill.user, course=bill.service.course, manager=request.user, - status='W')).exists(): - req = ServiceRequest.objects.filter( - Q(student=bill.user, course=bill.service.course, manager=request.user, status='S') | Q( - student=bill.user, course=bill.service.course, manager=request.user, status='W')).first() - req.status = 'F' - req.save() - context['code'] = '1' - else: - context['code'] = '0' - context['response'] = u'Ошибка получение предоставляемой услуги' - else: - context['code'] = '0' - context['response'] = u'Ошибка получения пользователя' - return context - - - -@api_decor(without_auth=False) -def sent_charge(request, context): - if request.user.in_role == 'S' or request.user.in_role == 'A': - if request.POST.get('charge_request_seller_checked'): - manager = User.objects.get(id=request.POST['charge_request_seller_checked']) - s_request = ServiceRequest.objects.get(id=request.POST['charge_request_object_id']) - s_request.manager = manager - s_request.status = 'S' - if request.POST.get('charge_request_description'): - s_request.charge = request.POST['charge_request_description'] - s_request.save() - return context - - -@api_decor(without_auth=True) -def new_feedback(request, context): - condition = condition_factory([ - {'condition': request.POST.get('email'), 'error': u'Email не указан'}, - {'condition': request.POST.get('phone'), 'error': u'Телефон не указан'}, - {'condition': request.POST.get('name'), 'error': u'Имя не указано'}, - {'condition': request.POST.get('text'), 'error': u'Текст обращения не указан'}, - {'condition': not Feedback.objects.filter( - Q(email=request.POST['email']) | Q(phone=request.POST['phone'])).exclude(closed=True).exists(), - 'error': u'Ваше прошлое обращение еще не обработано. Дождитесь решения.'} - ]) - if condition['code'] == '1': - context['code'] = '1' - Feedback.objects.create(name=request.POST['name'], email=request.POST['email'], phone=request.POST['phone'], - text=request.POST['text']) - else: - context['code'] = '0' - context['response'] = condition['response'] - return context - - -@api_decor(without_auth=False, check_request=True, need_keys=['comment'], method='POST') -def read_comment(request, context): - try: - comment = Comment.objects.get(id=request.POST['comment']) - except Comment.DoesNotExist: - pass - else: - if not comment.saw.filter(id=request.user.id).exists(): - comment.saw.add(request.user) - return context - -@api_decor(without_auth=False) -def burning_course(request): - course = Course.objects.get(id=request.GET['course']) - user = User.objects.get(id=request.GET['id']) - - send_burning_course_letter(user, course) - - -""" - Все функции снизу используются в подобии кабинета для отдела по работе с персоналом. - Если хочешь переписать - перепиши. -""" -@api_decor(without_auth=False) -def find_user(request, context): - try: - user = User.objects.get(id=request.GET['user']) - data = "%s | %s %s" % (user.id, user.name, user.fname) - except User.DoesNotExist: - data = '0' - except ValueError: - data = '0' - - return data - -@api_decor(without_auth=False) -def find_course(request, context): - try: - course = Course.objects.get(id=request.GET['course']) - data = course.title - except Course.DoesNotExist: - data = '0' - except ValueError: - data = '0' - - return data - -@api_decor(without_auth=False) -def open_lessons(request, context): - try: - user = User.objects.get(id=request.GET['user']) - course = Course.objects.get(id=request.GET['course']) - checkbox = True if request.GET.get('homes') == 'on' else False - themes = request.GET['themes'].split(' ') - if '' in themes: - themes.remove('') - for t in themes: - t = int(t) - - except Exception: - return '0' - - try: - teachj, status = TeacherJ.objects.get_or_create(student=user, course=course) - if themes: - course_themes = CourseTheme.objects.filter(course=course, sort__in=themes) - else: - course_themes = CourseTheme.objects.filter(course=course) - for t in course_themes: - for l in LessonJ.objects.filter(student=user, parent__material=t): - l.success = True - l.save() - if open_homes: - if HomeworkJ.objects.filter(student=user, parent__material=t).exists(): - homej = HomeworkJ.objects.get(student=user, parent__material=t) - homej.success = True - homej.save() - themej, status = CourseThemeJ.objects.get_or_create(student=user, material=t) - themej.success = True - themej.save() - teachj.reload_progress() - except Exception: - return '1' - - return '2' - -@api_decor(without_auth=False) -def open_homes(request, context): - try: - user = User.objects.get(id=request.GET['user']) - course = Course.objects.get(id=request.GET['course']) - themes = request.GET['themes'].split(' ') - if '' in themes: - themes.remove('') - for t in themes: - t = int(t) - - except Exception: - return'0' - - try: - if themes: - course_themes = CourseTheme.objects.filter(course=course, sort__in=themes) - else: - course_themes = CourseTheme.objects.filter(course=course) - for t in course_themes: - if HomeworkJ.objects.filter(student=user, parent__material=t).exists(): - homej = HomeworkJ.objects.get(student=user, parent__material=t) - homej.success = True - homej.save() - except Exception: - return '1' - - return '2' - -@api_decor(without_auth=False) -def change_pass(request, context): - try: - user = User.objects.get(id=request.GET['user']) - password = request.GET.get('pass') - except Exception: - return '0' - - try: - user.set_password(password) - user.save() - except Exception: - return '1' - - return '2' diff --git a/management/comments.py b/management/comments.py deleted file mode 100755 index cf2de1b..0000000 --- a/management/comments.py +++ /dev/null @@ -1,18 +0,0 @@ -# coding=utf-8 -from lms.decors import api_decor - -# Получить -@api_decor(without_auth=False, need_keys=['theme', 'student'], method='POST', check_request=True) -def load_homework_comments_for_teacher(request, context): - # Получение комментариев для преподавателя - homework = HomeworkJ.objects.get(material__theme__id=request.POST['theme'], student__id=request.POST['student'], - teacher=request.user) - context['data'] = [] - for i in homework.comments.filter(parent_id='0').order_by('date'): - context['data'].append(comment_fabric(i, __user=request.user)) - - if len(context['data']) == 0: - context['code'] = '0' - else: - context['code'] = '1' - return context \ No newline at end of file diff --git a/management/forms.py b/management/forms.py deleted file mode 100644 index 2556a04..0000000 --- a/management/forms.py +++ /dev/null @@ -1,5 +0,0 @@ -from django import forms - -class UploadFileForm(forms.Form): - service_id = forms.CharField(max_length=50, label=u'id услуги') - file = forms.FileField() \ No newline at end of file diff --git a/management/forum_urls.py b/management/forum_urls.py deleted file mode 100644 index 4a7731c..0000000 --- a/management/forum_urls.py +++ /dev/null @@ -1,6 +0,0 @@ -from management import forum_views -from django.conf.urls import url - -urlpatterns = [ - url(r'^(?P.*)/$', forum_views.comment_view) -] diff --git a/management/forum_views.py b/management/forum_views.py deleted file mode 100644 index 3085658..0000000 --- a/management/forum_views.py +++ /dev/null @@ -1,27 +0,0 @@ -# coding=utf-8 - -from django.http import Http404 -from lms.decors import response_decor -from management.models import Comment - - -@response_decor(template='comment_one.html', without_auth=False) -def comment_view(request, view_id): - # Страница вопроса форума - try: - comment = Comment.objects.get(token=view_id) - except Comment.DoesNotExist: - raise Http404 - else: - if comment.status in ['S', 'Q'] or request.user.is_admin: - comment = comment.get_face() - else: - raise Http404 - - return {'comment': comment} - - -@response_decor(template='forum.html', without_auth=False) -def index(request): - raise Http404 - return {} diff --git a/management/letters.py b/management/letters.py deleted file mode 100755 index 7006cbf..0000000 --- a/management/letters.py +++ /dev/null @@ -1,536 +0,0 @@ -# coding=utf-8 -from django.core.mail import send_mail -from django.shortcuts import render -from django.template.loader import get_template -from lms.tools import out_date_format -from lms.settings import DOMAIN, DEFAULT_FROM_EMAIL, NAME -from management.mails import letter_decor -from random import choice -TEST_EMAIL = 'bez.b.unix@gmail.com' - - -@letter_decor() -def sent_clean_letter(title, content, to): - data = { - 'title': title, - 'email': to, - 'text': content, - 'type': u'Свободное' - } - return data - - -@letter_decor() -def sent_new_service_request(request, email): - data = { - 'title': u'Новый запрос на покупку курса', - 'email': email if email else TEST_EMAIL, - 'text': u'Пришел новый запрос на покупку курса.' - u'Курс:' + request.course.title if request else u'' + u'' - u'Имя: ' + request.student.get_full_name() if request else u'' + u'' + - u'Телефон: ' + request.student.phone if request else u'' + u', ' + - request.student.back_phone if request else u'' + u' ' + - u'Почта: ' + request.student.email if request else u'' + u' ', - 'type': u'Продажи' - } - return data - - -@letter_decor() -def sent_new_service_request_to_out(title, request, email): - context = { - 'TITLE': title, - 'USER_NAME': request.get('name'), - 'PHONE': request.get('phone'), - 'EMAIL': request.get('email'), - 'HOST': request.get('host'), - 'DOMAIN': DOMAIN, - 'NAME': NAME - } - data = { - 'title': title, - 'text': '', - 'email': email, - 'type': 'Оповещения', - 'result': get_template('mails/sent_out_order.html').render(context) - } - return data - - -@letter_decor() -def sent_new_self_bill(request, email): - data = { - 'title': u'Новый оплаченый счет через форму', - 'email': email if email else TEST_EMAIL, - 'text': u'Форма: ' + request.request.url if request else u'' + u'' - u'Услуга:' + request.request.name if request else u'' + u'' - u'Стоимость:' + str(request.request.sum) if request else u'' + u'' - u'Имя: ' + request.fio if request else u'' + u'' - u'Телефон: ' + request.phone if request else u'' + u'' - u'Почта: ' + request.email if request else u'' + u' ', - 'type': u'Продажи' - } - return data - - -@letter_decor() -def sent_registration(user, title=u'Добро пожаловать в {0}'.format(NAME)): - if user: user.change_token() - data = { - 'title': title, - 'email': user.email if user else TEST_EMAIL, - 'text': u'Добро пожаловать!' - u'' - u'Спасибо за регистрацию! Подтвердите свой аккаунт, перейдя по ссылке:' - u'{0}' - u''.format(user.get_activation_url()), - 'type': u'Сервисные' - } - return data - - -@letter_decor() -def sent_active_new_email(user): - data = { - 'title': u'Изменение почтового ящика', - 'email': user.changed_email if user else TEST_EMAIL, - 'text': u'В вашем профиле произошла замена адреса электронной почты.
    ' - u'Если вы запрашивали такое изменение перейдите по ' - u'' - u'{2}access/activate_email/?email={0}&token={1}, для применения изменений. ' - u'В ином случае игнорируйте это сообщение.' - u''.format(user.email if user else u'', user.token if user else u'', DOMAIN), - 'type': u'Сервисные' - } - return data - - -@letter_decor() -def sent_good_activation(user): - data = { - 'title': u'Процесс активации прошел успешно', - 'email': user.email if user else TEST_EMAIL, - 'text': u'Вы успешно прошли процесс активации!' - u'', - 'type': u'Сервисные' - } - return data - - -@letter_decor() -def sent_forgot_password(user, password): - data = { - 'title': u'Восстановление пароля', - 'email': user.email if user else TEST_EMAIL, - 'text': u'Ваш временный пароль: {0}' - u''.format(password if user else u''), - 'type': u'Сервисные' - } - return data - - -@letter_decor() -def sent_accept_forgot(user): - data = { - 'title': u'Восстановление пароля', - 'email': user.email if user else TEST_EMAIL, - 'text': u'На ваш email поступил запрос для восстановления пароля.
    ' - u'Если вы хотите восстановить пароль, перейдите по ' - u'' - u'{2}access/accept_forgot/?email={0}&token={1}. ' - u'В ином случае просто игнорируйте это письмо.' - u''.format(user.email if user else u'', user.token if user else u'', DOMAIN), - 'type': u'Сервисные' - } - return data - - -@letter_decor() -def sent_comment_news(comment, new_comment, material, _type='L'): - data = { - 'title': u'Ответ на ваш комментарий', - 'email': comment.owner.email if comment else TEST_EMAIL, - 'text': u'Пользователь: {0}' - u'Текст комментария: {1}' - u'Страница {3}: ' - u'{5}/{4}{2}#comment_list_place' - u''.format(new_comment.owner.get_short_name() if new_comment else u'', new_comment.get_text() if new_comment else u'', material.id if material else u'', u'урока' if _type=='L' else u'статьи', u'courses/lesson/' if _type=='L' else u'courses/lesson/', DOMAIN), - 'type': u'Оповещения' - } - return data - - -@letter_decor() -def sent_teacher_answer(action): - data = { - 'title': action.place if action else '', - 'email': action.student.email if action else TEST_EMAIL, - 'text': u'' + action.text if action else u'' + u'', - 'type': u'Обучающий процесс' - } - return data - - -@letter_decor() -def sent_new_service_request(request, email): - data = { - 'title': u'Новый запрос на покупку курса', - 'email': email, - 'text': u'Пришел новый запрос на покупку курса.' - u'Тип запроса: {5}' - u'Курс: {0}' - u'Имя: {1}' - u'Телефон: {2}, {3} ' - u'Почта: {4} '.format(request.course.get_title() if request and request.course else u'', - request.student.get_full_name() if request else u'', - request.student.phone if request else u'', - request.student.back_phone if request else u'', - request.student.email if request else u'', request.get__type_display()), - 'type': u'Продажи' - } - return data - - -@letter_decor() -def sent_new_self_bill(request, email): - data = { - 'title': u'Новый оплаченый счет через форму', - 'email': email if email else TEST_EMAIL, - 'text': u'Форма: ' + request.request.url if request else u'' + u'' - u'Услуга: ' + request.request.design.name if request else u'' + request.request.name if request else u'' + u'' - u'Стоимость:' + str(request.request.sum) if request else u'' + u'' - u'Имя: ' + request.fio if request else u'' + u'' - u'Телефон: ' + request.phone if request else u'' + u'' - u'Почта: ' + request.email if request else u'' + u' ', - 'type': u'Продажи' - } - return data - - -@letter_decor() -def sent_created_self_bill(request, email): - data = { - 'title': u'Клиент пытается оплатить счет через форму', - 'email': email if email else TEST_EMAIL, - 'text': u'Форма: ' + request.request.url if request else u'' + '' - u'Услуга: ' + request.request.design.name if request else u'' + request.request.name if request else u'' + u'' - u'Стоимость:' + str(request.request.sum) if request else u'' + u'' - u'Имя: ' + request.fio if request else u'' + '' - u'Телефон: ' + request.phone if request else u'' + '' - u'Почта: ' + request.email if request else u'' + ' ', - 'type': u'Продажи' - } - return data - - -#@letter_decor() -#def sent_new_bill(bill): -# data = { -# 'title': u'Вам выставлен новый счет', -# 'email': bill.user.email if bill.user else TEST_EMAIL, -# 'text': u'Состав заказа: {1}' -# u'Сумма для оплаты: {2}' -# u'Чтобы выбрать способ оплаты и оплатить данный счет, воспользуйтесь ссылкой:' -# u'{0}' -# u'или кнопкой ниже:' -# u''.format(bill.gen_robokassa_url(), bill.get_name(), bill.price), -# 'type': u'Продажи' - #'template': '09Cg13KjU7' -# } -# return data - -@letter_decor() -def sent_new_bill(bill): - context = { - 'LINK': bill.gen_pay_link(), - 'PRICE': bill.price, - 'USER': bill.user.email, - 'SERVICE': bill.get_name(), - 'MANAGER': bill.manager.get_full_name(), - 'MANAGER_EMAIL': bill.manager.get_email(), - 'DOMAIN': DOMAIN, - 'NAME': NAME - } - data = { - 'title': 'Вам выставлен новый счет', - 'text': '', - 'email': bill.user.email, - 'type': 'Продажи', - 'result': get_template('mails/sent_order.html').render(context) - } - return data - - -@letter_decor() -def sent_welcome_without_password(user, title=None): - context = { - 'EMAIL': user.email, - 'LINK': user.get_activation_url() - } - data = { - 'title': title if title else 'Вам выставлен новый счет', - 'text': '', - 'email': user.email, - 'type': 'Сервисные', - 'result': get_template('mails/new_users.html').render(context) - } - return data - - -@letter_decor() -def sent_welcome_to_webinar(user, title='Закрытый вебинар', template='mails/webinar.html'): - context = { - } - data = { - 'title': title, - 'text': '', - 'email': user.email, - 'type': 'Рассылки', - 'result': get_template(template).render(context) - } - return data - - -@letter_decor() -def sent_new_comment(comment, lesson, email): - data = { - 'title': u'Новый комментарий', - 'email': email if email else TEST_EMAIL, - 'text': u'Пришел новый комментарий от пользователя: {0}' - u'Текст:
    {1}' - u'Ссылка'.format(comment.owner if comment else '', comment.get_text() if comment else '', lesson.id), - 'type': u'Оповещения' - } - return data - - -@letter_decor() -def pay_no_public_course(bill, email): - data = { - 'title': u'Оплата не опубликованного курса', - 'email': email if email else TEST_EMAIL, - 'text': u'Плательщик: {0}' - u'Услуга:
    {1}'.format(bill.user.full_data(), bill.get_name()), - 'type': u'Оповещения' - } - return data - - -@letter_decor() -def new_student(bill, email): - data = { - 'title': u'У нас новенький / {0}'.format(bill.get_name()), - 'email': email if email else TEST_EMAIL, - 'text': u'Плательщик: {0}' - u'Услуга:
    {1}'.format(bill.user.full_data(), bill.get_name()), - 'type': u'Оповещения' - } - return data - - -@letter_decor() -def sent_new_feedback(feedback, email): - data = { - 'title': u'Новый вопрос', - 'email': email if email else TEST_EMAIL, - 'text': u'Пришел новый комментарий от пользователя: {0}' - u'Почта: {1} Телефон:{2}' - u'Текст: {3}'.format(feedback.name if feedback else '', feedback.email if feedback else '', feedback.phone if feedback else '', feedback.text if feedback else ''), - 'type': u'Оповещения' - } - return data - - -@letter_decor() -def sent_new_expired(task, email): - data = { - 'title': u'Просрочена проверка', - 'email': email if email else TEST_EMAIL, - 'text': u'Просрочена от преподавателя: {0}' - u'Студент: {1}' - u'Дата отправки на проверку: {2}' - u'Ссылка: {3}'.format(task.teacher.get_short_name() if task else '', task.student.get_short_name() if task else '', - out_date_format(task.date) if task else '', task.id if task else ''), - 'type': u'Обучающий процесс' - } - return data - - -@letter_decor() -def sent_to_teacher_answer(action): - data = { - 'title': action.place, - 'email': action.student.email if action else TEST_EMAIL, - 'text': u'' + action.text + u'', - 'type': u'Оповещения' - } - return data - - -@letter_decor() -def sent_selfbill_remember(bill, status='day'): - data = { - 'title': u'У нас есть не оплаченый счет', - 'email': bill.email if bill else TEST_EMAIL, - 'text': u''.format(bill.request.url if bill else u''), - 'type': u'Продажи' - } - if status == 'day': - bill.day_sent = True - bill.save() - - elif status == 'week': - bill.week_sent = True - bill.save() - - elif status == 'month': - bill.month_sent = True - bill.save() - return data - - -@letter_decor() -def sent_created_my_self_bill(bill, email, title): - data = { - 'title': title, - 'email': email, - 'text': u'Пользователь: {0}/{5}/{6}
    Продавец: {1}
    Курс: {4}
    Дата продажи: {2}
    Дата оплаты: {3}
    Сумма: {7} руб.
    Источник: {8}'.format(bill.user.get_short_name(), bill.manager.get_short_name(), out_date_format(bill.date), out_date_format(bill.finish_date), bill.get_name(), bill.user.email, bill.user.phone, bill.price, str(bill.traf_source)), - 'type': u'Продажи' - } - return data - - -@letter_decor() -def sent_new_my_self_bill(bill, email): - data = { - 'title': u'Выставлен новый счет', - 'email': email, - 'text': u'Пользователь: {0}/{5}/{6}
    ' - u'Продавец: {1}
    ' - u'Курс: {4}
    ' - u'Дата продажи: {2}
    ' - u'Дата оплаты: {3}
    ' - u'Сумма: {7} руб.
    ' - u'Внутренний комментарий: {9}' - u'Источник: {8}'.format(bill.user.get_short_name(), bill.manager.get_short_name(), out_date_format(bill.date), out_date_format(bill.finish_date), bill.get_name(), bill.user.email, bill.user.phone, bill.price, str(bill.traf_source), bill.description), - 'type': u'Продажи' - } - return data - - -@letter_decor() -def sent_finish_self_bill(bill): - data = { - 'title': '', - 'email': '', - 'text': '' - } - return data - - -@letter_decor() -def block_warning(users, course, email): - data = { - 'title': u'Внимание, пользователи скоро дойдут до пустого материала', - 'email': email if email else TEST_EMAIL, - 'text': u'Курс: {0}' - u'Пользователи: {1}'.format(course if course else u'', str(users) if users else u''), - 'type': u'Процесс обучения' - } - return data - - -@letter_decor() -def letter_delete_comment(comment, text): - data = { - 'title': u'Ваш комментарий удален администрацией', - 'email': comment.owner.email if comment else TEST_EMAIL, - 'text': u'Ваш комментарий:' - u'{0}' - u'Причина удаления:' - u'{1}'.format(comment.get_text() if comment else '', text if text else ''), - 'type': u'Сервисные' - } - return data - - -@letter_decor() -def free_week_end(bill, email): - c = bill.service.course.get_title() if bill.service.course else u'' - data = { - 'title': u'Закончилась бесплатная неделя', - 'email': email if email else TEST_EMAIL, - 'text': u'Закончился доступ по ожидающему счету' - u'Курс:' + c + u'' - u'Имя: ' + bill.user.get_full_name() + u'' - u'Телефон: ' + bill.user.get_phone() + bill.user.get_back_phone() + u' ' - u'Почта: ' + bill.user.email + u' ', - 'type': u'Продажи' - } - return data - -@letter_decor() -def exam_is_nearly(user, course): - name = user.get_full_name() - email = user.get_email() - - data = { - 'title': u'Студент близится к экзамену', - 'email': SUPPORT, - 'text': u'' + student +' закончил 15 тему. Скоро будет сдавать экзамен. Готовьтесь \n' - u'Почта: ' + email + '\n' - u'id: ' + user.id + '\n' - u'Курс: ' + course + '\n', - 'type': u'Оповещения', - } - - return data - -@letter_decor() -def exam_successfull(user, course): - student = user.get_full_name() - email = user.get_email() - phone = user.get_phone() - - data = { - 'title': u'Студент сдал экзамен', - 'email': SUPPORT, - 'text': u'' + student + 'сдал экзамен. Позвони ему и поздравь' - u'Информация о студенте:' - u'Почта: ' + email + '\n' - u'id: ' + user.id + '\n' - u'Телефон: ' + phone + '\n' - u'Курс: ' + course + '\n', - 'type': u'Оповещения' - } - return data - - -@letter_decor() -def long_time_no_see(): - - data = { - 'title': u'', - 'email': TEST_EMAIL, - 'text': u'', - 'type': u'Оповещения' - } - - return data - -@letter_decor() -def send_burning_course_letter(user, course): - data = { - 'title': u'Студент закончил временный курс', - 'email': choice(MANAGERS), - 'text': u'Чувак закончил временный курс или хочет посмотреть урок, который недоступен: ' + course + '\n' - u'Может стоит предложить купить весь курс?\n', - u'Информация о студенте:\n' - u'Почта: ' + user.email + '\n' - u'Имя: ' + user.get_full_name() + '\n' - u'Телефон: ' + user.get_phone() + '\n' - u'Курс: ' + course + '\n' - 'type': u'Продажи' - } - - return data \ No newline at end of file diff --git a/management/mails.py b/management/mails.py deleted file mode 100755 index 4f18001..0000000 --- a/management/mails.py +++ /dev/null @@ -1,18 +0,0 @@ -# coding=utf-8 -from service.models import MailBox - - -def letter_decor(): - # Обслуживание стандартного запроса http - def wrap_response(func): - def _render_json(*args, **kwargs): - data = func(*args, **kwargs) - MailBox.objects.create(_to=data['email'], - title=data['title'], - text=data['text'], - _type=data['type'], - template=data['template'] if data.get('template') else '', - result=data['result'] if data.get('result') else None, - ) - return _render_json - return wrap_response diff --git a/management/migrations/0001_initial.py b/management/migrations/0001_initial.py old mode 100755 new mode 100644 index 8c95f77..33794db --- a/management/migrations/0001_initial.py +++ b/management/migrations/0001_initial.py @@ -1,91 +1,38 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-03-18 16:46 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone -import redactor.fields - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('storage', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='Comment', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('closed', models.BooleanField(default=False, verbose_name='\u0417\u0430\u043a\u0440\u044b\u0442')), - ('parent_id', models.IntegerField(blank=True, default=0, verbose_name='ID \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430')), - ('text', models.TextField(default=b'', verbose_name='\u0422\u0435\u043a\u0441\u0442')), - ('date', models.DateTimeField(default=django.utils.timezone.now, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430')), - ('send', models.BooleanField(default=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e')), - ('files', models.ManyToManyField(blank=True, to='storage.Storage', verbose_name='\u041f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b')), - ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comment_owner', to=settings.AUTH_USER_MODEL, verbose_name='\u0410\u0432\u0442\u043e\u0440')), - ('saw', models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0432\u0448\u0438\u0435')), - ], - options={ - 'ordering': ['id'], - 'verbose_name': '\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439', - 'verbose_name_plural': '\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438', - }, - ), - migrations.CreateModel( - name='CommentSawTable', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('date', models.DateTimeField(default=datetime.datetime.now, verbose_name='\u0412\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430')), - ('comment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='management.Comment', verbose_name='\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432\u0448\u0438\u0439')), - ], - options={ - 'verbose_name': '\u0416\u0443\u0440\u043d\u0430\u043b \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430', - 'verbose_name_plural': '\u0416\u0443\u0440\u043d\u0430\u043b\u044b \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u0432', - }, - ), - migrations.CreateModel( - name='Feedback', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('closed', models.BooleanField(default=False, verbose_name='\u0412\u0437\u044f\u0442\u043e \u0432 \u0440\u0430\u0431\u043e\u0442\u0443')), - ('name', models.CharField(max_length=255, verbose_name='\u0418\u043c\u044f')), - ('email', models.CharField(max_length=255, verbose_name='Email')), - ('phone', models.CharField(max_length=255, verbose_name='\u0422\u0435\u043b\u0435\u0444\u043e\u043d')), - ('text', models.TextField(verbose_name='\u0422\u0435\u043a\u0441\u0442')), - ('date', models.DateTimeField(default=datetime.datetime.now, verbose_name='\u0412\u0440\u0435\u043c\u044f \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f')), - ('send', models.BooleanField(default=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e')), - ], - options={ - 'verbose_name': '\u0412\u043e\u043f\u0440\u043e\u0441', - 'verbose_name_plural': '\u0412\u043e\u043f\u0440\u043e\u0441\u044b', - }, - ), - migrations.CreateModel( - name='News', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('public', models.BooleanField(default=False, verbose_name=b'\xd0\x9e\xd0\xbf\xd1\x83\xd0\xb1\xd0\xbb\xd0\xb8\xd0\xba\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd1\x8c')), - ('title', models.CharField(max_length=255, verbose_name=b'\xd0\x97\xd0\xb0\xd0\xb3\xd0\xbe\xd0\xbb\xd0\xbe\xd0\xb2\xd0\xbe\xd0\xba')), - ('icon', models.ImageField(blank=True, upload_to=b'news', verbose_name='\u0418\u043a\u043e\u043d\u043a\u0430')), - ('image', models.ImageField(blank=True, upload_to=b'news', verbose_name=b'\xd0\x97\xd0\xb0\xd0\xb3\xd0\xbe\xd0\xbb\xd0\xbe\xd0\xb2\xd0\xbe\xd1\x87\xd0\xbd\xd0\xbe\xd0\xb5 \xd0\xb8\xd0\xb7\xd0\xbe\xd0\xb1\xd1\x80\xd0\xb0\xd0\xb6\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5')), - ('content', redactor.fields.RedactorField(verbose_name=b'\xd0\xa2\xd0\xb5\xd0\xba\xd1\x81\xd1\x82')), - ('public_date', models.DateTimeField(blank=True, verbose_name=b'\xd0\x94\xd0\xb0\xd1\x82\xd0\xb0 \xd0\xbf\xd1\x83\xd0\xb1\xd0\xbb\xd0\xb8\xd0\xba\xd0\xb0\xd1\x86\xd0\xb8\xd0\xb8')), - ('create_date', models.DateTimeField(default=django.utils.timezone.now, verbose_name=b'\xd0\x94\xd0\xb0\xd1\x82\xd0\xb0 \xd1\x81\xd0\xbe\xd0\xb7\xd0\xb4\xd0\xb0\xd0\xbd\xd0\xb8\xd1\x8f')), - ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='author_user', to=settings.AUTH_USER_MODEL, verbose_name=b'\xd0\x90\xd0\xb2\xd1\x82\xd0\xbe\xd1\x80')), - ], - options={ - 'ordering': ['-public_date'], - 'verbose_name': '\u041d\u043e\u0432\u043e\u0441\u0442\u044c', - 'verbose_name_plural': '\u041d\u043e\u0432\u043e\u0441\u0442\u0438', - }, - ), - ] +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2017-10-13 11:18 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('contenttypes', '0002_remove_content_type_name'), + ('storage', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Comment', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('closed', models.BooleanField(default=False, editable=False, verbose_name='Закрыт')), + ('text', models.TextField(default='', verbose_name='Текст')), + ('object_id', models.PositiveIntegerField()), + ('children', models.ManyToManyField(blank=True, to='management.Comment')), + ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), + ('files', models.ManyToManyField(blank=True, editable=False, to='storage.Storage', verbose_name='Прикрепленые файлы')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comment_owner', to=settings.AUTH_USER_MODEL, verbose_name='Автор')), + ], + options={ + 'verbose_name': 'Комментарий', + 'verbose_name_plural': 'Комментарии', + }, + ), + ] diff --git a/management/migrations/0002_sms.py b/management/migrations/0002_sms.py deleted file mode 100755 index 17d66ee..0000000 --- a/management/migrations/0002_sms.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-03-31 18:55 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Sms', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('_to', models.CharField(max_length=255, verbose_name='\u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c')), - ('_status', models.CharField(choices=[(b'S', b''), (b'N', b'')], default=b'S', max_length=1, verbose_name='\u0421\u0442\u0430\u0442\u0443\u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f')), - ('text', models.TextField(verbose_name='\u0422\u0435\u043a\u0441\u0442')), - ('_from', models.CharField(choices=[(b'T', b''), (b'N', b'')], default=b'T', max_length=1, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c')), - ('error', models.TextField(blank=True, editable=False, null=True, verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438')), - ], - options={ - 'verbose_name': '\u0421\u041c\u0421', - 'verbose_name_plural': '\u0421\u041c\u0421', - }, - ), - ] diff --git a/management/migrations/0003_sms_date.py b/management/migrations/0003_sms_date.py deleted file mode 100755 index 8f1b8cf..0000000 --- a/management/migrations/0003_sms_date.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-03-31 19:02 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0002_sms'), - ] - - operations = [ - migrations.AddField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 3, 31, 19, 2, 23, 639641), verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/management/migrations/0004_auto_20160331_2017.py b/management/migrations/0004_auto_20160331_2017.py deleted file mode 100755 index 4dd0ded..0000000 --- a/management/migrations/0004_auto_20160331_2017.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-03-31 20:17 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0003_sms_date'), - ] - - operations = [ - migrations.AddField( - model_name='sms', - name='sent', - field=models.BooleanField(default=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c'), - ), - migrations.AlterField( - model_name='sms', - name='_from', - field=models.CharField(choices=[(b'T', b'Tocka Koda'), (b'C', b'CODEMY.RU'), (b'N', b'')], default=b'C', max_length=1, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c'), - ), - migrations.AlterField( - model_name='sms', - name='_status', - field=models.CharField(choices=[(b'S', b'\xd0\x9e\xd1\x82\xd0\xbf\xd1\x80\xd0\xb0\xd0\xb2\xd0\xbb\xd1\x8f\xd0\xb5\xd1\x82\xd1\x81\xd1\x8f'), (b'F', b'\xd0\x9e\xd1\x82\xd0\xbf\xd1\x80\xd0\xb0\xd0\xb2\xd0\xbb\xd0\xb5\xd0\xbd'), (b'E', b'\xd0\x9e\xd1\x88\xd0\xb8\xd0\xb1\xd0\xba\xd0\xb0 \xd0\xbe\xd1\x82\xd0\xbf\xd1\x80\xd0\xb0\xd0\xb2\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xb8\xd1\x8f')], default=b'S', editable=False, max_length=1, verbose_name='\u0421\u0442\u0430\u0442\u0443\u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f'), - ), - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 3, 31, 20, 17, 20, 844249), help_text=b'\xd0\x9d\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 7\xd0\xbc\xd0\xb8 \xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb9', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/management/migrations/0005_auto_20160331_2017.py b/management/migrations/0005_auto_20160331_2017.py deleted file mode 100755 index 247d0f6..0000000 --- a/management/migrations/0005_auto_20160331_2017.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-03-31 20:17 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0004_auto_20160331_2017'), - ] - - operations = [ - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 3, 31, 20, 17, 49, 225656), help_text=b'\xd0\x9d\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 7\xd0\xbc\xd0\xb8 \xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb9', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - migrations.AlterField( - model_name='sms', - name='sent', - field=models.BooleanField(default=False, editable=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c'), - ), - ] diff --git a/management/migrations/0006_auto_20160331_2030.py b/management/migrations/0006_auto_20160331_2030.py deleted file mode 100755 index 05b8101..0000000 --- a/management/migrations/0006_auto_20160331_2030.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-03-31 20:30 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0005_auto_20160331_2017'), - ] - - operations = [ - migrations.AddField( - model_name='sms', - name='debug', - field=models.CharField(blank=True, max_length=255, verbose_name='\u0421\u0442\u0440\u043e\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430'), - ), - migrations.AlterField( - model_name='sms', - name='_from', - field=models.CharField(choices=[(b'T', b'Tocka Koda'), (b'C', b'CODEMY.RU')], default=b'C', max_length=1, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c'), - ), - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 3, 31, 20, 30, 24, 93077), help_text=b'\xd0\x9d\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 7\xd0\xbc\xd0\xb8 \xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb9', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/management/migrations/0007_auto_20160405_2045.py b/management/migrations/0007_auto_20160405_2045.py deleted file mode 100755 index 9c7e35e..0000000 --- a/management/migrations/0007_auto_20160405_2045.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-04-05 20:45 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0006_auto_20160331_2030'), - ] - - operations = [ - migrations.AlterField( - model_name='sms', - name='_to', - field=models.CharField(help_text=b'+79660497379', max_length=255, verbose_name='\u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c'), - ), - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 5, 20, 45, 37, 483710), help_text=b'\xd0\x9d\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 7\xd0\xbc\xd0\xb8 \xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb9', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/management/migrations/0008_auto_20160407_1741.py b/management/migrations/0008_auto_20160407_1741.py deleted file mode 100755 index fda6e50..0000000 --- a/management/migrations/0008_auto_20160407_1741.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-04-07 17:41 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0007_auto_20160405_2045'), - ] - - operations = [ - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 7, 17, 41, 52, 666005), help_text=b'\xd0\x9d\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 7\xd0\xbc\xd0\xb8 \xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb9', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/management/migrations/0009_auto_20160407_2006.py b/management/migrations/0009_auto_20160407_2006.py deleted file mode 100755 index aafd158..0000000 --- a/management/migrations/0009_auto_20160407_2006.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-04-07 20:06 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0008_auto_20160407_1741'), - ] - - operations = [ - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 7, 20, 6, 28, 155860), help_text=b'\xd0\x9d\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 7\xd0\xbc\xd0\xb8 \xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb9', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/management/migrations/0010_auto_20160412_1529.py b/management/migrations/0010_auto_20160412_1529.py deleted file mode 100755 index 4ae8376..0000000 --- a/management/migrations/0010_auto_20160412_1529.py +++ /dev/null @@ -1,48 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-12 15:29 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models -import django.db.models.deletion -import redactor.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0009_auto_20160407_2006'), - ] - - operations = [ - migrations.CreateModel( - name='Faq', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('question', models.CharField(max_length=255, verbose_name='\u0412\u043e\u043f\u0440\u043e\u0441')), - ('answer', redactor.fields.RedactorField(verbose_name='\u041e\u0442\u0432\u0435\u0442')), - ], - ), - migrations.CreateModel( - name='FaqTitle', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=255, verbose_name='\u0422\u0435\u043c\u0430')), - ('icon', models.ImageField(blank=True, upload_to=b'faq', verbose_name='\u0418\u043a\u043e\u043d\u043a\u0430')), - ], - options={ - 'verbose_name': '\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a FAQ', - 'verbose_name_plural': '\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 FAQ', - }, - ), - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 12, 15, 29, 54, 697834), help_text=b'\xd0\x9d\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 7\xd0\xbc\xd0\xb8 \xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb9', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - migrations.AddField( - model_name='faq', - name='title', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='management.FaqTitle', verbose_name='\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a'), - ), - ] diff --git a/management/migrations/0011_auto_20160412_1943.py b/management/migrations/0011_auto_20160412_1943.py deleted file mode 100755 index d3ab787..0000000 --- a/management/migrations/0011_auto_20160412_1943.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-12 19:43 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0010_auto_20160412_1529'), - ] - - operations = [ - migrations.AlterField( - model_name='faq', - name='title', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='management.FaqTitle', unique=True, verbose_name='\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a'), - ), - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 12, 19, 43, 5, 421327), help_text=b'\xd0\x9d\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 7\xd0\xbc\xd0\xb8 \xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb9', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/management/migrations/0012_auto_20160412_1946.py b/management/migrations/0012_auto_20160412_1946.py deleted file mode 100755 index eb5b79f..0000000 --- a/management/migrations/0012_auto_20160412_1946.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-12 19:46 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0011_auto_20160412_1943'), - ] - - operations = [ - migrations.AlterModelOptions( - name='faqtitle', - options={'ordering': ['sort'], 'verbose_name': '\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a FAQ', 'verbose_name_plural': '\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 FAQ'}, - ), - migrations.AddField( - model_name='faqtitle', - name='sort', - field=models.ImageField(default=0, upload_to=b'', verbose_name='\u041f\u043e\u0440\u044f\u0434\u043e\u043a'), - ), - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 12, 19, 46, 47, 718596), help_text=b'\xd0\x9d\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 7\xd0\xbc\xd0\xb8 \xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb9', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/management/migrations/0013_auto_20160412_1956.py b/management/migrations/0013_auto_20160412_1956.py deleted file mode 100755 index 4d6f260..0000000 --- a/management/migrations/0013_auto_20160412_1956.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-12 19:56 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0012_auto_20160412_1946'), - ] - - operations = [ - migrations.AlterField( - model_name='faq', - name='title', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='management.FaqTitle', unique=True, verbose_name='\u0420\u0430\u0437\u0434\u0435\u043b'), - ), - migrations.AlterField( - model_name='faqtitle', - name='sort', - field=models.IntegerField(default=0, verbose_name='\u041f\u043e\u0440\u044f\u0434\u043e\u043a'), - ), - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 12, 19, 56, 47, 261878), help_text=b'\xd0\x9d\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 7\xd0\xbc\xd0\xb8 \xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb9', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/management/migrations/0014_auto_20160412_2003.py b/management/migrations/0014_auto_20160412_2003.py deleted file mode 100755 index 94d10b0..0000000 --- a/management/migrations/0014_auto_20160412_2003.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-12 20:03 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0013_auto_20160412_1956'), - ] - - operations = [ - migrations.AlterField( - model_name='faq', - name='title', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='management.FaqTitle', verbose_name='\u0420\u0430\u0437\u0434\u0435\u043b'), - ), - migrations.AlterField( - model_name='faqtitle', - name='title', - field=models.CharField(max_length=255, unique=True, verbose_name='\u0422\u0435\u043c\u0430'), - ), - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 12, 20, 3, 24, 283843), help_text=b'\xd0\x9d\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 7\xd0\xbc\xd0\xb8 \xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb9', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/management/migrations/0015_auto_20160412_2004.py b/management/migrations/0015_auto_20160412_2004.py deleted file mode 100755 index c4d1028..0000000 --- a/management/migrations/0015_auto_20160412_2004.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-12 20:04 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0014_auto_20160412_2003'), - ] - - operations = [ - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 12, 20, 4, 44, 315158), help_text=b'\xd0\x9d\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 7\xd0\xbc\xd0\xb8 \xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb9', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/management/migrations/0016_auto_20160412_2145.py b/management/migrations/0016_auto_20160412_2145.py deleted file mode 100755 index 15db14f..0000000 --- a/management/migrations/0016_auto_20160412_2145.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-12 21:45 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0015_auto_20160412_2004'), - ] - - operations = [ - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 12, 21, 45, 22, 540990), help_text=b'\xd0\x9d\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 7\xd0\xbc\xd0\xb8 \xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb9', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/management/migrations/0017_auto_20160414_1941.py b/management/migrations/0017_auto_20160414_1941.py deleted file mode 100755 index 5c27f81..0000000 --- a/management/migrations/0017_auto_20160414_1941.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-14 19:41 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0016_auto_20160412_2145'), - ] - - operations = [ - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 14, 19, 41, 21, 890528), help_text=b'\xd0\x9d\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 7\xd0\xbc\xd0\xb8 \xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb9', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/management/migrations/0018_auto_20160414_1944.py b/management/migrations/0018_auto_20160414_1944.py deleted file mode 100755 index 4dd81c3..0000000 --- a/management/migrations/0018_auto_20160414_1944.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-14 19:44 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0017_auto_20160414_1941'), - ] - - operations = [ - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 14, 19, 44, 42, 153512), help_text=b'\xd0\x9d\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 7\xd0\xbc\xd0\xb8 \xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb9', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/management/migrations/0019_auto_20160420_1749.py b/management/migrations/0019_auto_20160420_1749.py deleted file mode 100755 index c136b3c..0000000 --- a/management/migrations/0019_auto_20160420_1749.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-20 17:49 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0018_auto_20160414_1944'), - ] - - operations = [ - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 20, 17, 49, 55, 518147), help_text=b'\xd0\x9d\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 7\xd0\xbc\xd0\xb8 \xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb9', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/management/migrations/0020_auto_20160420_1819.py b/management/migrations/0020_auto_20160420_1819.py deleted file mode 100755 index c69d92f..0000000 --- a/management/migrations/0020_auto_20160420_1819.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-04-20 18:19 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0019_auto_20160420_1749'), - ] - - operations = [ - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 4, 20, 18, 19, 6, 287391), help_text=b'\xd0\x9d\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 7\xd0\xbc\xd0\xb8 \xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb9', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/management/migrations/0021_auto_20160506_1303.py b/management/migrations/0021_auto_20160506_1303.py deleted file mode 100755 index 44c46ac..0000000 --- a/management/migrations/0021_auto_20160506_1303.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2016-05-06 13:03 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0020_auto_20160420_1819'), - ] - - operations = [ - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 5, 6, 13, 3, 19, 619872), help_text=b'\xd0\x9d\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 7\xd0\xbc\xd0\xb8 \xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb9', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/management/migrations/0022_auto_20160521_1849.py b/management/migrations/0022_auto_20160521_1849.py deleted file mode 100755 index 5bfe17f..0000000 --- a/management/migrations/0022_auto_20160521_1849.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-05-21 18:49 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0021_auto_20160506_1303'), - ] - - operations = [ - migrations.CreateModel( - name='MailBox', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('status', models.CharField(choices=[(b'Q', b'\xd0\x9d\xd0\xb0 \xd0\xbe\xd1\x87\xd0\xb5\xd1\x80\xd0\xb5\xd0\xb4\xd0\xb8'), (b'W', b'\xd0\x9e\xd0\xb6\xd0\xb8\xd0\xb4\xd0\xb0\xd0\xb5\xd1\x82 \xd0\xb4\xd0\xb0\xd1\x82\xd1\x8b \xd0\xb4\xd0\xbe\xd1\x81\xd1\x82\xd0\xb0\xd0\xb2\xd0\xba\xd0\xb8'), (b'S', b'\xd0\x9e\xd1\x82\xd0\xbf\xd1\x80\xd0\xb0\xd0\xb2\xd0\xbb\xd0\xb5\xd0\xbd'), (b'D', b'\xd0\x94\xd0\xbe\xd1\x81\xd1\x82\xd0\xb0\xd0\xb2\xd0\xbb\xd0\xb5\xd0\xbd'), (b'F', b'\xd0\x90\xd0\xb4\xd1\x80\xd0\xb5\xd1\x81\xd0\xb0\xd1\x82 \xd0\xbd\xd0\xb5 \xd0\xbd\xd0\xb0\xd0\xb9\xd0\xb4\xd0\xb5\xd0\xbd')], default=b'Q', max_length=1, verbose_name='\u0421\u0442\u0430\u0442\u0443\u0441 \u043f\u0438\u0441\u044c\u043c\u0430')), - ('_to', models.EmailField(max_length=254, verbose_name='\u041f\u043e\u0447\u0442\u0430')), - ('queue_date', models.DateTimeField(default=datetime.datetime.now, help_text='\u0415\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u0430\u0442\u0443 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438, \u043f\u0438\u0441\u044c\u043c\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f', verbose_name='\u0414\u0430\u0442\u0430 \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0437\u0430\u0434\u0430\u0447\u0438')), - ('sent_date', models.DateTimeField(blank=True, editable=False, null=True, verbose_name='\u0412\u0440\u0435\u043c\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438')), - ('text', models.TextField(verbose_name='\u0422\u0435\u043a\u0441\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438')), - ], - options={ - 'verbose_name': '\u041f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u044f\u0449\u0438\u043a', - 'verbose_name_plural': '\u041f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u044f\u0449\u0438\u043a', - }, - ), - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 5, 21, 18, 49, 44, 336371), help_text=b'\xd0\x9d\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 7\xd0\xbc\xd0\xb8 \xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb9', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/management/migrations/0023_auto_20160521_1919.py b/management/migrations/0023_auto_20160521_1919.py deleted file mode 100755 index fcc00f3..0000000 --- a/management/migrations/0023_auto_20160521_1919.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-05-21 19:19 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0022_auto_20160521_1849'), - ] - - operations = [ - migrations.AddField( - model_name='mailbox', - name='title', - field=models.CharField(blank=True, max_length=255, verbose_name='\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043f\u0438\u0441\u044c\u043c\u0430'), - ), - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 5, 21, 19, 19, 58, 161580), help_text=b'\xd0\x9d\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 7\xd0\xbc\xd0\xb8 \xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb9', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/management/migrations/0024_auto_20160521_2257.py b/management/migrations/0024_auto_20160521_2257.py deleted file mode 100755 index 66546bd..0000000 --- a/management/migrations/0024_auto_20160521_2257.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-05-21 22:57 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0023_auto_20160521_1919'), - ] - - operations = [ - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 5, 21, 22, 57, 7, 380200), help_text=b'\xd0\x9d\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 7\xd0\xbc\xd0\xb8 \xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb9', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/management/migrations/0025_auto_20160607_1614.py b/management/migrations/0025_auto_20160607_1614.py deleted file mode 100755 index ef75470..0000000 --- a/management/migrations/0025_auto_20160607_1614.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-07 16:14 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0024_auto_20160521_2257'), - ] - - operations = [ - migrations.DeleteModel( - name='MailBox', - ), - migrations.DeleteModel( - name='Sms', - ), - ] diff --git a/management/migrations/0026_modals_modalstack.py b/management/migrations/0026_modals_modalstack.py deleted file mode 100755 index df0ba73..0000000 --- a/management/migrations/0026_modals_modalstack.py +++ /dev/null @@ -1,44 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-08 16:52 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('management', '0025_auto_20160607_1614'), - ] - - operations = [ - migrations.CreateModel( - name='Modals', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255, verbose_name='\u041a\u043b\u044e\u0447')), - ('date', models.CharField(max_length=255, verbose_name='\u0414\u043d\u0435\u0439 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f')), - ('live_time', models.IntegerField(default=1, verbose_name='\u041f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437')), - ], - options={ - 'verbose_name': '\u041c\u043e\u0434\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043a\u043d\u043e', - 'verbose_name_plural': '\u041c\u043e\u0434\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u043a\u043d\u0430', - }, - ), - migrations.CreateModel( - name='ModalStack', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('f_date', models.DateTimeField(verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f')), - ('modal', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='management.Modals', verbose_name='\u0428\u0430\u0431\u043b\u043e\u043d \u043e\u043a\u043d\u0430')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c')), - ], - options={ - 'verbose_name': '\u0421\u0442\u044d\u043a \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u044b\u0445', - 'verbose_name_plural': '\u0421\u0442\u044d\u043a \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u044b\u0445', - }, - ), - ] diff --git a/management/migrations/0027_remove_modals_date.py b/management/migrations/0027_remove_modals_date.py deleted file mode 100755 index 7d70481..0000000 --- a/management/migrations/0027_remove_modals_date.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-08 17:00 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0026_modals_modalstack'), - ] - - operations = [ - migrations.RemoveField( - model_name='modals', - name='date', - ), - ] diff --git a/management/migrations/0028_auto_20160608_1705.py b/management/migrations/0028_auto_20160608_1705.py deleted file mode 100755 index c96addc..0000000 --- a/management/migrations/0028_auto_20160608_1705.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-08 17:05 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0027_remove_modals_date'), - ] - - operations = [ - migrations.AlterField( - model_name='modalstack', - name='f_date', - field=models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f'), - ), - ] diff --git a/management/migrations/0029_auto_20160608_1804.py b/management/migrations/0029_auto_20160608_1804.py deleted file mode 100755 index cd898a1..0000000 --- a/management/migrations/0029_auto_20160608_1804.py +++ /dev/null @@ -1,74 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-08 18:04 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0028_auto_20160608_1705'), - ] - - operations = [ - migrations.RemoveField( - model_name='modals', - name='name', - ), - migrations.RemoveField( - model_name='modalstack', - name='f_date', - ), - migrations.AddField( - model_name='modals', - name='closes', - field=models.IntegerField(default=0, help_text='0 = \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e', verbose_name='\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0439'), - ), - migrations.AddField( - model_name='modals', - name='f_date', - field=models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430'), - ), - migrations.AddField( - model_name='modals', - name='key', - field=models.CharField(default=b'', max_length=255, verbose_name='\u041a\u043b\u044e\u0447'), - ), - migrations.AddField( - model_name='modals', - name='start_date', - field=models.DateTimeField(default=datetime.datetime.now, verbose_name='\u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u044f'), - ), - migrations.AddField( - model_name='modals', - name='title', - field=models.CharField(default=b'', max_length=255, verbose_name='\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a'), - ), - migrations.AddField( - model_name='modals', - name='views', - field=models.IntegerField(default=0, help_text='0 = \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e', verbose_name='\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043a\u0430\u0437\u043e\u0432'), - ), - migrations.AddField( - model_name='modalstack', - name='closes', - field=models.IntegerField(blank=True, null=True, verbose_name='\u0417\u0430\u043a\u0440\u044b\u0442\u0438\u0439'), - ), - migrations.AddField( - model_name='modalstack', - name='date', - field=models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u0432\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f'), - ), - migrations.AddField( - model_name='modalstack', - name='views', - field=models.IntegerField(blank=True, null=True, verbose_name='\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u0432'), - ), - migrations.AlterField( - model_name='modals', - name='live_time', - field=models.IntegerField(default=1, verbose_name='\u041f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437/\u0434\u043d\u0435\u0439'), - ), - ] diff --git a/management/migrations/0030_auto_20160608_1841.py b/management/migrations/0030_auto_20160608_1841.py deleted file mode 100755 index 8640f42..0000000 --- a/management/migrations/0030_auto_20160608_1841.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-08 18:41 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0029_auto_20160608_1804'), - ] - - operations = [ - migrations.AddField( - model_name='modalstack', - name='timer', - field=models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f'), - ), - migrations.AddField( - model_name='modalstack', - name='timer_offer', - field=models.IntegerField(blank=True, editable=False, null=True, verbose_name='\u0421\u0435\u043a\u0443\u043d\u0434 \u0434\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f'), - ), - ] diff --git a/management/migrations/0031_auto_20160609_1429.py b/management/migrations/0031_auto_20160609_1429.py deleted file mode 100755 index e8cb38e..0000000 --- a/management/migrations/0031_auto_20160609_1429.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 14:29 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0030_auto_20160608_1841'), - ] - - operations = [ - migrations.AlterField( - model_name='modalstack', - name='closes', - field=models.IntegerField(blank=True, default=0, null=True, verbose_name='\u0417\u0430\u043a\u0440\u044b\u0442\u0438\u0439'), - ), - migrations.AlterField( - model_name='modalstack', - name='views', - field=models.IntegerField(blank=True, default=0, null=True, verbose_name='\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u0432'), - ), - ] diff --git a/management/migrations/0032_auto_20160609_1442.py b/management/migrations/0032_auto_20160609_1442.py deleted file mode 100755 index 0681d05..0000000 --- a/management/migrations/0032_auto_20160609_1442.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 14:42 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0031_auto_20160609_1429'), - ] - - operations = [ - migrations.RemoveField( - model_name='modalstack', - name='timer_offer', - ), - migrations.AlterField( - model_name='modals', - name='live_time', - field=models.IntegerField(default=1, verbose_name='\u041f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437/\u0447\u0430\u0441\u043e\u0432'), - ), - ] diff --git a/management/migrations/0033_modalstack_show.py b/management/migrations/0033_modalstack_show.py deleted file mode 100755 index d0408a5..0000000 --- a/management/migrations/0033_modalstack_show.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 15:36 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0032_auto_20160609_1442'), - ] - - operations = [ - migrations.AddField( - model_name='modalstack', - name='show', - field=models.BooleanField(default=False, verbose_name='\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f'), - ), - ] diff --git a/management/migrations/0034_modals__type.py b/management/migrations/0034_modals__type.py deleted file mode 100755 index e668345..0000000 --- a/management/migrations/0034_modals__type.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 15:46 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0033_modalstack_show'), - ] - - operations = [ - migrations.AddField( - model_name='modals', - name='_type', - field=models.CharField(choices=[(b'M', '\u041c\u043e\u0434\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043a\u043d\u043e'), (b'B', '\u0411\u0430\u0437\u043e\u0432\u043e\u0435 \u043e\u043a\u043d\u043e')], default=b'B', max_length=1, verbose_name='\u0422\u0438\u043f \u043e\u043a\u043d\u0430'), - ), - ] diff --git a/management/migrations/0035_modals_timer.py b/management/migrations/0035_modals_timer.py deleted file mode 100755 index 9975ce5..0000000 --- a/management/migrations/0035_modals_timer.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 20:30 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0034_modals__type'), - ] - - operations = [ - migrations.AddField( - model_name='modals', - name='timer', - field=models.IntegerField(default=0, verbose_name='\u0427\u0430\u0441\u043e\u0432 \u043f\u043e\u043a\u0430\u0437\u0430'), - ), - ] diff --git a/management/migrations/0036_modals_set_timer.py b/management/migrations/0036_modals_set_timer.py deleted file mode 100755 index c09b03f..0000000 --- a/management/migrations/0036_modals_set_timer.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 20:43 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0035_modals_timer'), - ] - - operations = [ - migrations.AddField( - model_name='modals', - name='set_timer', - field=models.BooleanField(default=False, verbose_name='\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0430\u0439\u043c\u0435\u0440'), - ), - ] diff --git a/management/migrations/0037_auto_20160609_2224.py b/management/migrations/0037_auto_20160609_2224.py deleted file mode 100755 index 2b3d951..0000000 --- a/management/migrations/0037_auto_20160609_2224.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 22:24 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0036_modals_set_timer'), - ] - - operations = [ - migrations.AddField( - model_name='modalstack', - name='relive_date', - field=models.DateTimeField(blank=True, null=True, verbose_name='\u0414\u0430\u0442\u0430 \u0432\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f'), - ), - migrations.AlterField( - model_name='modals', - name='live_time', - field=models.IntegerField(default=60, help_text='\u0427\u0435\u0440\u0435\u0437 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c', verbose_name='\u041f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437/\u043c\u0438\u043d\u0443\u0442'), - ), - migrations.AlterField( - model_name='modals', - name='timer', - field=models.IntegerField(default=0, help_text='0 = \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e', verbose_name='\u0427\u0430\u0441\u043e\u0432 \u043f\u043e\u043a\u0430\u0437\u0430'), - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 6, 9, 22, 24, 43, 740384), verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438'), - ), - ] diff --git a/management/migrations/0038_auto_20160609_2322.py b/management/migrations/0038_auto_20160609_2322.py deleted file mode 100755 index 916cf2e..0000000 --- a/management/migrations/0038_auto_20160609_2322.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 23:22 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0037_auto_20160609_2224'), - ] - - operations = [ - migrations.AddField( - model_name='modals', - name='no_close', - field=models.BooleanField(default=False, verbose_name='\u041d\u0435 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c\u043e'), - ), - migrations.AlterField( - model_name='modals', - name='timer', - field=models.IntegerField(default=0, help_text='0 = \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0431\u043e\u043b\u044c\u0448\u0435 24 \u0447\u0430\u0441\u043e\u0432 - \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0430\u0439\u043c\u0435\u0440, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u0442\u043a\u0443 \u043d\u0430 \u043f\u043e\u043a\u0430\u0437', verbose_name='\u0427\u0430\u0441\u043e\u0432 \u043f\u043e\u043a\u0430\u0437\u0430'), - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 6, 9, 23, 22, 51, 531830), verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438'), - ), - ] diff --git a/management/migrations/0039_auto_20160609_2351.py b/management/migrations/0039_auto_20160609_2351.py deleted file mode 100755 index 53d3bb0..0000000 --- a/management/migrations/0039_auto_20160609_2351.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-09 23:51 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0038_auto_20160609_2322'), - ] - - operations = [ - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 6, 9, 23, 51, 7, 30249), verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438'), - ), - ] diff --git a/management/migrations/0040_auto_20160628_1731.py b/management/migrations/0040_auto_20160628_1731.py deleted file mode 100755 index ccc43ba..0000000 --- a/management/migrations/0040_auto_20160628_1731.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-06-28 17:31 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0039_auto_20160609_2351'), - ] - - operations = [ - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 6, 28, 17, 31, 12, 202858), verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438'), - ), - ] diff --git a/management/migrations/0041_auto_20160706_1910.py b/management/migrations/0041_auto_20160706_1910.py deleted file mode 100755 index d243f1f..0000000 --- a/management/migrations/0041_auto_20160706_1910.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-06 19:10 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0040_auto_20160628_1731'), - ] - - operations = [ - migrations.AddField( - model_name='comment', - name='replyes', - field=models.ManyToManyField(blank=True, null=True, related_name='_comment_replyes_+', to='management.Comment', verbose_name='\u041e\u0442\u0432\u0435\u0442\u044b'), - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 7, 6, 19, 10, 52, 787269), verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438'), - ), - ] diff --git a/management/migrations/0042_auto_20160706_1914.py b/management/migrations/0042_auto_20160706_1914.py deleted file mode 100755 index f1802eb..0000000 --- a/management/migrations/0042_auto_20160706_1914.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-06 19:14 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0041_auto_20160706_1910'), - ] - - operations = [ - migrations.RemoveField( - model_name='comment', - name='replyes', - ), - migrations.AddField( - model_name='comment', - name='replies', - field=models.ManyToManyField(blank=True, null=True, related_name='_comment_replies_+', to='management.Comment', verbose_name='\u041e\u0442\u0432\u0435\u0442\u044b'), - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 7, 6, 19, 13, 59, 283637), verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438'), - ), - ] diff --git a/management/migrations/0043_auto_20160711_1518.py b/management/migrations/0043_auto_20160711_1518.py deleted file mode 100755 index e56b594..0000000 --- a/management/migrations/0043_auto_20160711_1518.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-11 15:18 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0042_auto_20160706_1914'), - ] - - operations = [ - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 7, 11, 15, 18, 42, 177491), verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438'), - ), - ] diff --git a/management/migrations/0044_auto_20160711_1714.py b/management/migrations/0044_auto_20160711_1714.py deleted file mode 100755 index 1d45646..0000000 --- a/management/migrations/0044_auto_20160711_1714.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-11 17:14 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0043_auto_20160711_1518'), - ] - - operations = [ - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 7, 11, 17, 14, 42, 34022), verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438'), - ), - ] diff --git a/management/migrations/0045_auto_20160713_2038.py b/management/migrations/0045_auto_20160713_2038.py deleted file mode 100755 index d684b57..0000000 --- a/management/migrations/0045_auto_20160713_2038.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-13 20:38 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0044_auto_20160711_1714'), - ] - - operations = [ - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 7, 13, 20, 38, 33, 290916), verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438'), - ), - ] diff --git a/management/migrations/0046_auto_20160714_2015.py b/management/migrations/0046_auto_20160714_2015.py deleted file mode 100755 index 70ef105..0000000 --- a/management/migrations/0046_auto_20160714_2015.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-14 20:15 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0045_auto_20160713_2038'), - ] - - operations = [ - migrations.AddField( - model_name='comment', - name='response', - field=models.BooleanField(default=False, verbose_name='\u0415\u0441\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u043e\u0442 \u0430\u0434\u043c\u0438\u043d\u0430'), - ), - migrations.AlterField( - model_name='comment', - name='date', - field=models.DateTimeField(default=datetime.datetime.now, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430'), - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 7, 14, 20, 15, 56, 430952), verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438'), - ), - ] diff --git a/management/migrations/0047_auto_20160714_2018.py b/management/migrations/0047_auto_20160714_2018.py deleted file mode 100755 index a35f6cd..0000000 --- a/management/migrations/0047_auto_20160714_2018.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-14 20:18 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0046_auto_20160714_2015'), - ] - - operations = [ - migrations.AddField( - model_name='comment', - name='response_comment', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='admin_text_response', to='management.Comment', verbose_name='\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0430\u0434\u043c\u0438\u043d\u0430'), - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 7, 14, 20, 18, 19, 583963), verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438'), - ), - ] diff --git a/management/migrations/0048_auto_20160715_0104.py b/management/migrations/0048_auto_20160715_0104.py deleted file mode 100755 index a144b20..0000000 --- a/management/migrations/0048_auto_20160715_0104.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-15 01:04 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('management', '0047_auto_20160714_2018'), - ] - - operations = [ - migrations.CreateModel( - name='Newsletter', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('status', models.CharField(choices=[(b'Q', '\u041d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438'), (b'W', '\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f'), (b'F', '\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e')], default=b'Q', max_length=1, verbose_name='\u0421\u0442\u0430\u0442\u0443\u0441')), - ('text', models.TextField(verbose_name='\u0422\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f')), - ('date', models.DateTimeField(verbose_name='')), - ('sent_date', models.DateTimeField(verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438')), - ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='newsletter_owner', to=settings.AUTH_USER_MODEL, verbose_name='\u0418\u043d\u0438\u0446\u0438\u0430\u0442\u043e\u0440')), - ('f_recipient', models.ManyToManyField(related_name='newsletter_response', to=settings.AUTH_USER_MODEL, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e')), - ('recipient', models.ManyToManyField(related_name='newsletter_request', to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0438')), - ], - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 7, 15, 1, 4, 23, 668352), verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438'), - ), - ] diff --git a/management/migrations/0049_auto_20160715_1444.py b/management/migrations/0049_auto_20160715_1444.py deleted file mode 100755 index d993151..0000000 --- a/management/migrations/0049_auto_20160715_1444.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-15 14:44 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0048_auto_20160715_0104'), - ] - - operations = [ - migrations.CreateModel( - name='NewsletterShell', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255, verbose_name='\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430')), - ('head', models.TextField(verbose_name='\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a')), - ('footer', models.TextField(verbose_name='\u0424\u0443\u0442\u0435\u0440')), - ], - options={ - 'verbose_name': '\u041e\u0431\u043e\u043b\u043e\u0447\u043a\u0430 \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0438', - 'verbose_name_plural': '\u041e\u0431\u043e\u043b\u043e\u0447\u043a\u0438 \u0440\u0430\u0441\u0441\u044b\u043b\u043e\u043a', - }, - ), - migrations.AlterModelOptions( - name='newsletter', - options={'verbose_name': '\u0420\u0430\u0441\u0441\u044b\u043b\u043a\u0430', 'verbose_name_plural': '\u0420\u0430\u0441\u0441\u044b\u043b\u043a\u0438'}, - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 7, 15, 14, 44, 12, 810816), verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438'), - ), - migrations.AlterField( - model_name='newsletter', - name='date', - field=models.DateTimeField(default=datetime.datetime.now, verbose_name='\u0414\u0430\u0442\u0430 \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0437\u0430\u0434\u0430\u0447\u0438'), - ), - migrations.AlterField( - model_name='newsletter', - name='sent_date', - field=models.DateTimeField(default=datetime.datetime.now, verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - migrations.AddField( - model_name='newsletter', - name='shell', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='management.NewsletterShell', verbose_name='\u041e\u0431\u043e\u043b\u043e\u0447\u043a\u0430'), - ), - ] diff --git a/management/migrations/0050_auto_20160718_1715.py b/management/migrations/0050_auto_20160718_1715.py deleted file mode 100755 index 97d8ad0..0000000 --- a/management/migrations/0050_auto_20160718_1715.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-18 17:15 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0049_auto_20160715_1444'), - ] - - operations = [ - migrations.AddField( - model_name='faqtitle', - name='is_admin', - field=models.BooleanField(default=False, verbose_name='\u0422\u043e\u043b\u044c\u043a\u043e \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\u043c'), - ), - migrations.AddField( - model_name='faqtitle', - name='is_stuff', - field=models.BooleanField(default=False, verbose_name='\u0422\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c'), - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 7, 18, 17, 15, 5, 804336), verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438'), - ), - ] diff --git a/management/migrations/0051_auto_20160718_1721.py b/management/migrations/0051_auto_20160718_1721.py deleted file mode 100755 index 9a3b881..0000000 --- a/management/migrations/0051_auto_20160718_1721.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-18 17:21 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0050_auto_20160718_1715'), - ] - - operations = [ - migrations.RenameField( - model_name='faqtitle', - old_name='is_stuff', - new_name='is_staff', - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 7, 18, 17, 21, 20, 885723), verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438'), - ), - ] diff --git a/management/migrations/0052_auto_20160725_1348.py b/management/migrations/0052_auto_20160725_1348.py deleted file mode 100755 index 151c835..0000000 --- a/management/migrations/0052_auto_20160725_1348.py +++ /dev/null @@ -1,84 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-25 13:48 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import redactor.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0051_auto_20160718_1721'), - ] - - operations = [ - migrations.AddField( - model_name='faq', - name='comments', - field=models.ManyToManyField(blank=True, editable=False, null=True, to='management.Comment', verbose_name='\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438'), - ), - migrations.AddField( - model_name='faq', - name='date', - field=models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f'), - ), - migrations.AddField( - model_name='faq', - name='rating', - field=models.IntegerField(default=0, verbose_name='\u0420\u0435\u0439\u0442\u0438\u043d\u0433 \u0441\u0442\u0430\u0442\u044c\u0438'), - ), - migrations.AlterField( - model_name='comment', - name='closed', - field=models.BooleanField(default=False, editable=False, verbose_name='\u0417\u0430\u043a\u0440\u044b\u0442'), - ), - migrations.AlterField( - model_name='comment', - name='files', - field=models.ManyToManyField(blank=True, editable=False, to='storage.Storage', verbose_name='\u041f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b'), - ), - migrations.AlterField( - model_name='comment', - name='parent_id', - field=models.IntegerField(blank=True, default=0, editable=False, verbose_name='ID \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430'), - ), - migrations.AlterField( - model_name='comment', - name='replies', - field=models.ManyToManyField(blank=True, editable=False, null=True, related_name='_comment_replies_+', to='management.Comment', verbose_name='\u041e\u0442\u0432\u0435\u0442\u044b'), - ), - migrations.AlterField( - model_name='comment', - name='response', - field=models.BooleanField(default=False, editable=False, verbose_name='\u0415\u0441\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u043e\u0442 \u0430\u0434\u043c\u0438\u043d\u0430'), - ), - migrations.AlterField( - model_name='comment', - name='response_comment', - field=models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='admin_text_response', to='management.Comment', verbose_name='\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0430\u0434\u043c\u0438\u043d\u0430'), - ), - migrations.AlterField( - model_name='comment', - name='saw', - field=models.ManyToManyField(blank=True, editable=False, to=settings.AUTH_USER_MODEL, verbose_name='\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0432\u0448\u0438\u0435'), - ), - migrations.AlterField( - model_name='comment', - name='send', - field=models.BooleanField(default=False, editable=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e'), - ), - migrations.AlterField( - model_name='comment', - name='text', - field=redactor.fields.RedactorField(default=b'', verbose_name='\u0422\u0435\u043a\u0441\u0442'), - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 7, 25, 13, 48, 40, 107257), verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438'), - ), - ] diff --git a/management/migrations/0053_auto_20160725_1551.py b/management/migrations/0053_auto_20160725_1551.py deleted file mode 100755 index 8923ab2..0000000 --- a/management/migrations/0053_auto_20160725_1551.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-25 15:51 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0052_auto_20160725_1348'), - ] - - operations = [ - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 7, 25, 15, 51, 28, 988938), verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438'), - ), - ] diff --git a/management/migrations/0054_auto_20160725_1551.py b/management/migrations/0054_auto_20160725_1551.py deleted file mode 100755 index 8578e18..0000000 --- a/management/migrations/0054_auto_20160725_1551.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-25 15:51 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('access', '0054_auto_20160725_1551'), - ('management', '0053_auto_20160725_1551'), - ] - - operations = [ - migrations.CreateModel( - name='SideBill', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('date', models.DateTimeField(default=datetime.datetime.now, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430')), - ('name', models.CharField(max_length=255, verbose_name='\u0418\u043c\u044f')), - ('email', models.CharField(max_length=255, verbose_name='Email')), - ('phone', models.CharField(max_length=255, verbose_name='\u0422\u0435\u043b\u0435\u0444\u043e\u043d')), - ('source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='access.TrafSource', verbose_name='\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430')), - ], - options={ - 'verbose_name': '\u0414\u0430\u043d\u043d\u044b\u0435 \u0441 \u043b\u0435\u043d\u0434\u043e\u0441\u043e\u0432', - 'verbose_name_plural': '\u0414\u0430\u043d\u043d\u044b\u0435 \u0441 \u043b\u0435\u043d\u0434\u043e\u0441\u043e\u0432', - }, - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 7, 25, 15, 51, 36, 435324), verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438'), - ), - ] diff --git a/management/migrations/0055_auto_20160725_1554.py b/management/migrations/0055_auto_20160725_1554.py deleted file mode 100755 index 5610af8..0000000 --- a/management/migrations/0055_auto_20160725_1554.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-25 15:54 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0054_auto_20160725_1551'), - ] - - operations = [ - migrations.RemoveField( - model_name='sidebill', - name='email', - ), - migrations.RemoveField( - model_name='sidebill', - name='name', - ), - migrations.RemoveField( - model_name='sidebill', - name='phone', - ), - migrations.AddField( - model_name='sidebill', - name='data', - field=models.TextField(default=b'', verbose_name='\u0414\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0444\u043e\u0440\u043c'), - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 7, 25, 15, 54, 55, 249378), verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438'), - ), - ] diff --git a/management/migrations/0056_auto_20160725_1601.py b/management/migrations/0056_auto_20160725_1601.py deleted file mode 100755 index c0f164d..0000000 --- a/management/migrations/0056_auto_20160725_1601.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-25 16:01 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0055_auto_20160725_1554'), - ] - - operations = [ - migrations.RemoveField( - model_name='sidebill', - name='source', - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 7, 25, 16, 1, 22, 314203), verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438'), - ), - migrations.DeleteModel( - name='SideBill', - ), - ] diff --git a/management/migrations/0057_auto_20160814_1736.py b/management/migrations/0057_auto_20160814_1736.py deleted file mode 100755 index baf42ae..0000000 --- a/management/migrations/0057_auto_20160814_1736.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-08-14 17:36 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0056_auto_20160725_1601'), - ] - - operations = [ - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 8, 14, 17, 36, 41, 694572), verbose_name='\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438'), - ), - ] diff --git a/management/migrations/0058_auto_20160831_1638.py b/management/migrations/0058_auto_20160831_1638.py deleted file mode 100644 index d3b9bc3..0000000 --- a/management/migrations/0058_auto_20160831_1638.py +++ /dev/null @@ -1,95 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-08-31 16:38 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone -import redactor.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0057_auto_20160814_1736'), - ] - - operations = [ - migrations.AlterField( - model_name='comment', - name='text', - field=redactor.fields.RedactorField(default='', verbose_name='Текст'), - ), - migrations.AlterField( - model_name='faqtitle', - name='icon', - field=models.ImageField(blank=True, upload_to='faq', verbose_name='Иконка'), - ), - migrations.AlterField( - model_name='modals', - name='_type', - field=models.CharField(choices=[('M', 'Модальное окно'), ('B', 'Базовое окно')], default='B', max_length=1, verbose_name='Тип окна'), - ), - migrations.AlterField( - model_name='modals', - name='key', - field=models.CharField(default='', max_length=255, verbose_name='Ключ'), - ), - migrations.AlterField( - model_name='modals', - name='title', - field=models.CharField(default='', max_length=255, verbose_name='Заголовок'), - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 8, 31, 16, 38, 23, 169828), verbose_name='Дата создания записи'), - ), - migrations.AlterField( - model_name='news', - name='author', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='author_user', to=settings.AUTH_USER_MODEL, verbose_name='Автор'), - ), - migrations.AlterField( - model_name='news', - name='content', - field=redactor.fields.RedactorField(verbose_name='Текст'), - ), - migrations.AlterField( - model_name='news', - name='create_date', - field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='Дата создания'), - ), - migrations.AlterField( - model_name='news', - name='icon', - field=models.ImageField(blank=True, upload_to='news', verbose_name='Иконка'), - ), - migrations.AlterField( - model_name='news', - name='image', - field=models.ImageField(blank=True, upload_to='news', verbose_name='Заголовочное изображение'), - ), - migrations.AlterField( - model_name='news', - name='public', - field=models.BooleanField(default=False, verbose_name='Опубликовать'), - ), - migrations.AlterField( - model_name='news', - name='public_date', - field=models.DateTimeField(blank=True, verbose_name='Дата публикации'), - ), - migrations.AlterField( - model_name='news', - name='title', - field=models.CharField(max_length=255, verbose_name='Заголовок'), - ), - migrations.AlterField( - model_name='newsletter', - name='status', - field=models.CharField(choices=[('Q', 'На очереди'), ('W', 'Выполняется'), ('F', 'Выполнено')], default='Q', max_length=1, verbose_name='Статус'), - ), - ] diff --git a/management/migrations/0059_auto_20160906_0037.py b/management/migrations/0059_auto_20160906_0037.py deleted file mode 100644 index 8819d47..0000000 --- a/management/migrations/0059_auto_20160906_0037.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 00:37 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0058_auto_20160831_1638'), - ] - - operations = [ - migrations.CreateModel( - name='FakeData', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('key', models.CharField(blank=True, max_length=100, verbose_name='Ключ данных')), - ('data', models.TextField(verbose_name='Данные')), - ], - options={ - 'verbose_name_plural': 'Данные, чтобы просто сюда положить', - 'verbose_name': 'Данные, чтобы просто сюда положить', - }, - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 6, 0, 37, 12, 804168), verbose_name='Дата создания записи'), - ), - ] diff --git a/management/migrations/0060_auto_20160906_0042.py b/management/migrations/0060_auto_20160906_0042.py deleted file mode 100644 index c4fb014..0000000 --- a/management/migrations/0060_auto_20160906_0042.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 00:42 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0059_auto_20160906_0037'), - ] - - operations = [ - migrations.AddField( - model_name='fakedata', - name='date', - field=models.DateTimeField(default=datetime.datetime.now, verbose_name='Дата создания'), - ), - migrations.AddField( - model_name='fakedata', - name='split_char', - field=models.CharField(default=', ', max_length=10, verbose_name='Разделяющий символ'), - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 6, 0, 42, 49, 159531), verbose_name='Дата создания записи'), - ), - ] diff --git a/management/migrations/0061_auto_20160906_0054.py b/management/migrations/0061_auto_20160906_0054.py deleted file mode 100644 index f00ec61..0000000 --- a/management/migrations/0061_auto_20160906_0054.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 00:54 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0060_auto_20160906_0042'), - ] - - operations = [ - migrations.AddField( - model_name='fakedata', - name='is_admin', - field=models.BooleanField(default=True, verbose_name='Только для админа'), - ), - migrations.AddField( - model_name='fakedata', - name='is_stuff', - field=models.BooleanField(default=False, verbose_name='Для сотрудников'), - ), - migrations.AlterField( - model_name='fakedata', - name='date', - field=models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='Дата создания'), - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 6, 0, 54, 21, 321856), verbose_name='Дата создания записи'), - ), - ] diff --git a/management/migrations/0062_auto_20160906_0056.py b/management/migrations/0062_auto_20160906_0056.py deleted file mode 100644 index 64a5e3e..0000000 --- a/management/migrations/0062_auto_20160906_0056.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 00:56 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0061_auto_20160906_0054'), - ] - - operations = [ - migrations.RemoveField( - model_name='fakedata', - name='is_admin', - ), - migrations.RemoveField( - model_name='fakedata', - name='is_stuff', - ), - migrations.AddField( - model_name='fakedata', - name='access', - field=models.CharField(choices=[('A', 'Только для админа'), ('S', 'Для сотрудников'), ('O', 'Общедоступна')], default='A', max_length=1, verbose_name='Доступ'), - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 6, 0, 56, 53, 472915), verbose_name='Дата создания записи'), - ), - ] diff --git a/management/migrations/0063_auto_20160906_0057.py b/management/migrations/0063_auto_20160906_0057.py deleted file mode 100644 index 3080267..0000000 --- a/management/migrations/0063_auto_20160906_0057.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 00:57 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0062_auto_20160906_0056'), - ] - - operations = [ - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 6, 0, 57, 37, 304086), verbose_name='Дата создания записи'), - ), - ] diff --git a/management/migrations/0064_auto_20160906_0109.py b/management/migrations/0064_auto_20160906_0109.py deleted file mode 100644 index 21d9d6c..0000000 --- a/management/migrations/0064_auto_20160906_0109.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 01:09 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0063_auto_20160906_0057'), - ] - - operations = [ - migrations.DeleteModel( - name='FakeData', - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 6, 1, 9, 3, 858254), verbose_name='Дата создания записи'), - ), - ] diff --git a/management/migrations/0065_auto_20160908_0045.py b/management/migrations/0065_auto_20160908_0045.py deleted file mode 100644 index 6d1efed..0000000 --- a/management/migrations/0065_auto_20160908_0045.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 00:45 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0064_auto_20160906_0109'), - ] - - operations = [ - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 8, 0, 45, 45, 921422), verbose_name='Дата создания записи'), - ), - ] diff --git a/management/migrations/0066_auto_20160908_0051.py b/management/migrations/0066_auto_20160908_0051.py deleted file mode 100644 index 877fe80..0000000 --- a/management/migrations/0066_auto_20160908_0051.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 00:51 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0065_auto_20160908_0045'), - ] - - operations = [ - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 8, 0, 51, 2, 150336), verbose_name='Дата создания записи'), - ), - ] diff --git a/management/migrations/0067_auto_20160908_0118.py b/management/migrations/0067_auto_20160908_0118.py deleted file mode 100644 index aa8f81b..0000000 --- a/management/migrations/0067_auto_20160908_0118.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 01:18 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0066_auto_20160908_0051'), - ] - - operations = [ - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 8, 1, 18, 30, 643400), verbose_name='Дата создания записи'), - ), - ] diff --git a/management/migrations/0068_auto_20160908_0331.py b/management/migrations/0068_auto_20160908_0331.py deleted file mode 100644 index 8b2cdd6..0000000 --- a/management/migrations/0068_auto_20160908_0331.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 03:31 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0067_auto_20160908_0118'), - ] - - operations = [ - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 8, 3, 31, 41, 665600), verbose_name='Дата создания записи'), - ), - ] diff --git a/management/migrations/0069_auto_20160908_1834.py b/management/migrations/0069_auto_20160908_1834.py deleted file mode 100644 index 912348b..0000000 --- a/management/migrations/0069_auto_20160908_1834.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 18:34 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0068_auto_20160908_0331'), - ] - - operations = [ - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 8, 18, 34, 4, 554269), verbose_name='Дата создания записи'), - ), - ] diff --git a/management/migrations/0070_auto_20160908_1919.py b/management/migrations/0070_auto_20160908_1919.py deleted file mode 100644 index fd33871..0000000 --- a/management/migrations/0070_auto_20160908_1919.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 19:19 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0069_auto_20160908_1834'), - ] - - operations = [ - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 8, 19, 19, 49, 147883), verbose_name='Дата создания записи'), - ), - ] diff --git a/management/migrations/0071_auto_20160909_1816.py b/management/migrations/0071_auto_20160909_1816.py deleted file mode 100644 index bc8eb3e..0000000 --- a/management/migrations/0071_auto_20160909_1816.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-09 18:16 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0070_auto_20160908_1919'), - ] - - operations = [ - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 9, 18, 16, 11, 635839), verbose_name='Дата создания записи'), - ), - ] diff --git a/management/migrations/0072_auto_20160912_1324.py b/management/migrations/0072_auto_20160912_1324.py deleted file mode 100644 index 2c8e30a..0000000 --- a/management/migrations/0072_auto_20160912_1324.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-12 13:24 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0071_auto_20160909_1816'), - ] - - operations = [ - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 12, 13, 24, 7, 36429), verbose_name='Дата создания записи'), - ), - ] diff --git a/management/migrations/0073_auto_20160917_0757.py b/management/migrations/0073_auto_20160917_0757.py deleted file mode 100644 index efcf804..0000000 --- a/management/migrations/0073_auto_20160917_0757.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-17 07:57 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0072_auto_20160912_1324'), - ] - - operations = [ - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 17, 7, 57, 11, 269651), verbose_name='Дата создания записи'), - ), - ] diff --git a/management/migrations/0074_auto_20160919_2349.py b/management/migrations/0074_auto_20160919_2349.py deleted file mode 100644 index ea5c5c4..0000000 --- a/management/migrations/0074_auto_20160919_2349.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-19 23:49 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0073_auto_20160917_0757'), - ] - - operations = [ - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 19, 23, 49, 48, 499809), verbose_name='Дата создания записи'), - ), - ] diff --git a/management/migrations/0075_auto_20160919_2352.py b/management/migrations/0075_auto_20160919_2352.py deleted file mode 100644 index c161fbb..0000000 --- a/management/migrations/0075_auto_20160919_2352.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-19 23:52 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0074_auto_20160919_2349'), - ] - - operations = [ - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 19, 23, 52, 26, 878722), verbose_name='Дата создания записи'), - ), - ] diff --git a/management/migrations/0076_auto_20160924_0154.py b/management/migrations/0076_auto_20160924_0154.py deleted file mode 100644 index 3fe2fa7..0000000 --- a/management/migrations/0076_auto_20160924_0154.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-24 01:54 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0075_auto_20160919_2352'), - ] - - operations = [ - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 9, 24, 1, 54, 12, 397549), verbose_name='Дата создания записи'), - ), - ] diff --git a/management/migrations/0077_auto_20161007_2347.py b/management/migrations/0077_auto_20161007_2347.py deleted file mode 100644 index 13c2568..0000000 --- a/management/migrations/0077_auto_20161007_2347.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-10-07 23:47 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models -import precise_bbcode.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0076_auto_20160924_0154'), - ] - - operations = [ - migrations.AddField( - model_name='comment', - name='_bbtext_rendered', - field=models.TextField(blank=True, editable=False, null=True), - ), - migrations.AddField( - model_name='comment', - name='bbtext', - field=precise_bbcode.fields.BBCodeTextField(default='', no_rendered_field=True, verbose_name='BB Текст'), - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 10, 7, 23, 47, 2, 763928), verbose_name='Дата создания записи'), - ), - ] diff --git a/management/migrations/0078_auto_20161008_0046.py b/management/migrations/0078_auto_20161008_0046.py deleted file mode 100644 index 9da31ab..0000000 --- a/management/migrations/0078_auto_20161008_0046.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-10-08 00:46 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0077_auto_20161007_2347'), - ] - - operations = [ - migrations.AddField( - model_name='comment', - name='status', - field=models.CharField(choices=[('G', 'Одобрено'), ('F', 'Отклонено'), ('A', 'Сообщение от администрации'), ('T', 'Техническое обращение'), ('S', '')], default='S', max_length=1, verbose_name='Статус сообщения'), - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 10, 8, 0, 46, 52, 312111), verbose_name='Дата создания записи'), - ), - ] diff --git a/management/migrations/0079_auto_20161012_1943.py b/management/migrations/0079_auto_20161012_1943.py deleted file mode 100644 index 32e0dae..0000000 --- a/management/migrations/0079_auto_20161012_1943.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-10-12 19:43 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0078_auto_20161008_0046'), - ] - - operations = [ - migrations.AddField( - model_name='comment', - name='answers', - field=models.ManyToManyField(blank=True, editable=False, null=True, related_name='_comment_answers_+', to='management.Comment', verbose_name='Форумные ответы'), - ), - migrations.AddField( - model_name='comment', - name='best', - field=models.BooleanField(default=False, verbose_name='Лучший ответ'), - ), - migrations.AddField( - model_name='comment', - name='rating', - field=models.IntegerField(default=0, verbose_name='Рейтинг'), - ), - migrations.AlterField( - model_name='comment', - name='status', - field=models.CharField(choices=[('G', 'Одобрено'), ('F', 'Отклонено'), ('A', 'Сообщение от администрации'), ('T', 'Техническое обращение'), ('H', 'Домашняя работа студента'), ('Q', 'Вопрос на форуме'), ('S', 'Комментарий')], default='S', max_length=1, verbose_name='Статус сообщения'), - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 10, 12, 19, 43, 38, 558268), verbose_name='Дата создания записи'), - ), - ] diff --git a/management/migrations/0080_auto_20161012_2014.py b/management/migrations/0080_auto_20161012_2014.py deleted file mode 100644 index e8ec9fc..0000000 --- a/management/migrations/0080_auto_20161012_2014.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-10-12 20:14 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0079_auto_20161012_1943'), - ] - - operations = [ - migrations.AddField( - model_name='comment', - name='token', - field=models.CharField(default='', editable=False, max_length=100, verbose_name='Ключь доступа'), - ), - migrations.AlterField( - model_name='comment', - name='status', - field=models.CharField(choices=[('G', 'Одобрено'), ('F', 'Отклонено'), ('A', 'Сообщение от администрации'), ('T', 'Техническое обращение'), ('H', 'Домашняя работа студента'), ('Q', 'Вопрос на форуме'), ('Q2', 'Ответ на форуме'), ('S', 'Комментарий')], default='S', max_length=2, verbose_name='Статус сообщения'), - ), - migrations.AlterField( - model_name='modalstack', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 10, 12, 20, 14, 3, 397720), verbose_name='Дата создания записи'), - ), - ] diff --git a/management/migrations/0081_auto_20161024_1532.py b/management/migrations/0081_auto_20161024_1532.py deleted file mode 100644 index d3d37f5..0000000 --- a/management/migrations/0081_auto_20161024_1532.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-10-24 15:32 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0080_auto_20161012_2014'), - ] - - operations = [ - migrations.RemoveField( - model_name='modalstack', - name='modal', - ), - migrations.RemoveField( - model_name='modalstack', - name='user', - ), - migrations.DeleteModel( - name='Modals', - ), - migrations.DeleteModel( - name='ModalStack', - ), - ] diff --git a/management/migrations/0082_auto_20161024_1926.py b/management/migrations/0082_auto_20161024_1926.py deleted file mode 100644 index 7a73494..0000000 --- a/management/migrations/0082_auto_20161024_1926.py +++ /dev/null @@ -1,95 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-10-24 19:26 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import management.models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('management', '0081_auto_20161024_1532'), - ] - - operations = [ - migrations.CreateModel( - name='Modal', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(blank=True, max_length=255, verbose_name='Заголовок')), - ('text', models.TextField(blank=True, verbose_name='Содержимое окна')), - ('close', models.BooleanField(default=True, verbose_name='Закрываемое')), - ('views', models.IntegerField(default=1, verbose_name='Необходимое количество просмотров')), - ('closes', models.IntegerField(default=1, verbose_name='Необходимое количество закрытий')), - ('interval', models.IntegerField(default=1, verbose_name='Интервал показов в часах')), - ('show_time', models.DateTimeField(default=datetime.datetime.now, verbose_name='Начало показа')), - ('hide_time', models.DateTimeField(blank=True, null=True, verbose_name='Закрытие показов')), - ], - options={ - 'verbose_name_plural': 'Всплывающие окна / Конструкторы', - 'verbose_name': 'Всплывающие окна / Конструктор', - }, - ), - migrations.CreateModel( - name='ModalJournal', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('date', models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='Дата показа')), - ('views', models.IntegerField(default=0, verbose_name='Необходимое количество просмотров')), - ('closes', models.IntegerField(default=0, verbose_name='Необходимое количество закрытий')), - ], - options={ - 'verbose_name_plural': 'Всплывающие окна / Журналы', - 'verbose_name': 'Всплывающие окна / Журнал', - }, - ), - migrations.CreateModel( - name='ModalTask', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('date', models.DateTimeField(default=datetime.datetime.now, verbose_name='Постановка задачи')), - ('status', models.CharField(choices=[('C', 'Создана'), ('P', 'Выполняется'), ('Q', 'На очереди'), ('F', 'Закончено')], default='C', max_length=1, verbose_name='Статус')), - ('manager', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='task_manager', to=settings.AUTH_USER_MODEL, verbose_name='Поставивший задачу')), - ('modal', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='management.Modal', verbose_name='Окно')), - ('user', models.ManyToManyField(help_text='Как пользователь зайдет на сайт - отсюда он будет удален и будет создан журнал. ', related_name='task_user', to=settings.AUTH_USER_MODEL, verbose_name='Пользователи')), - ], - options={ - 'verbose_name_plural': 'Всплывающие окна / Задачи', - 'verbose_name': 'Всплывающие окна / Задача', - }, - ), - migrations.CreateModel( - name='ModalTemplate', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=255, verbose_name='Заголовок')), - ('slug', models.CharField(blank=True, editable=False, max_length=255, verbose_name='Транслит заголовка')), - ('key', models.CharField(default=management.models.gen_modal_key, max_length=255, verbose_name='Ключ места вставки')), - ('context', models.TextField(help_text='{TEXT} - Место вставки текста,{TITLE} - Заголовок', verbose_name='Шаблон')), - ], - options={ - 'verbose_name_plural': 'Всплывающие окна / Шаблоны', - 'verbose_name': 'Всплывающие окна / Шаблон', - }, - ), - migrations.AddField( - model_name='modaljournal', - name='task', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='management.ModalTask', verbose_name='Задача'), - ), - migrations.AddField( - model_name='modaljournal', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Пользователь'), - ), - migrations.AddField( - model_name='modal', - name='template', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='management.ModalTemplate', verbose_name='Шаблон'), - ), - ] diff --git a/management/migrations/0083_auto_20161024_2029.py b/management/migrations/0083_auto_20161024_2029.py deleted file mode 100644 index 35b66fa..0000000 --- a/management/migrations/0083_auto_20161024_2029.py +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-10-24 20:29 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion -import management.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0082_auto_20161024_1926'), - ] - - operations = [ - migrations.CreateModel( - name='ModalPlace', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('public', models.BooleanField(default=True, verbose_name='В работе')), - ('key', models.CharField(default=management.models.gen_modal_key, max_length=255, verbose_name='Ключь места')), - ('description', models.TextField(blank=True, verbose_name='Описание')), - ], - options={ - 'verbose_name_plural': 'Всплывающие окна / Места вставки', - 'verbose_name': 'Всплывающие окна / Место вставок', - }, - ), - migrations.AlterField( - model_name='modaltemplate', - name='context', - field=models.TextField(help_text='{TEXT} - Место вставки текста,{TITLE} - Заголовок,{KEY} - Ключь окна', verbose_name='Шаблон'), - ), - migrations.AlterField( - model_name='modaltemplate', - name='key', - field=models.CharField(default=management.models.gen_modal_key, max_length=255, verbose_name='Ключ Шаблона'), - ), - migrations.AddField( - model_name='modaltemplate', - name='place', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='management.ModalPlace', verbose_name='Место вставки'), - ), - ] diff --git a/management/migrations/0084_remove_modaltemplate_slug.py b/management/migrations/0084_remove_modaltemplate_slug.py deleted file mode 100644 index d8f0f84..0000000 --- a/management/migrations/0084_remove_modaltemplate_slug.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-10-24 20:34 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0083_auto_20161024_2029'), - ] - - operations = [ - migrations.RemoveField( - model_name='modaltemplate', - name='slug', - ), - ] diff --git a/management/migrations/0085_modaljournal_status.py b/management/migrations/0085_modaljournal_status.py deleted file mode 100644 index 00bf988..0000000 --- a/management/migrations/0085_modaljournal_status.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-10-24 21:35 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0084_remove_modaltemplate_slug'), - ] - - operations = [ - migrations.AddField( - model_name='modaljournal', - name='status', - field=models.BooleanField(default='O', editable=False, verbose_name='Статус'), - ), - ] diff --git a/management/migrations/0086_auto_20161024_2157.py b/management/migrations/0086_auto_20161024_2157.py deleted file mode 100644 index 9a37cdb..0000000 --- a/management/migrations/0086_auto_20161024_2157.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-10-24 21:57 -from __future__ import unicode_literals - -from django.db import migrations, models -import management.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0085_modaljournal_status'), - ] - - operations = [ - migrations.AddField( - model_name='modaljournal', - name='key', - field=models.CharField(default=management.models.gen_modal_journal_key, max_length=255, verbose_name='Ключ Шаблона'), - ), - migrations.AlterField( - model_name='modaljournal', - name='status', - field=models.CharField(choices=[('O', 'Открыт'), ('С', 'Закрыт'), ('F', 'Закончен')], default='O', editable=False, max_length=1, verbose_name='Статус'), - ), - ] diff --git a/management/migrations/0087_auto_20161110_2152.py b/management/migrations/0087_auto_20161110_2152.py deleted file mode 100644 index 49ff9c1..0000000 --- a/management/migrations/0087_auto_20161110_2152.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-10 21:52 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import management.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0086_auto_20161024_2157'), - ] - - operations = [ - migrations.AlterField( - model_name='modaljournal', - name='key', - field=models.CharField(default=management.models.gen_modal_journal_key, max_length=255, verbose_name='Ключ'), - ), - migrations.AlterField( - model_name='modaltask', - name='user', - field=models.ManyToManyField(blank=True, help_text='Как пользователь зайдет на сайт - отсюда он будет удален и будет создан журнал. ', related_name='task_user', to=settings.AUTH_USER_MODEL, verbose_name='Пользователи'), - ), - ] diff --git a/management/migrations/0088_auto_20161124_0250.py b/management/migrations/0088_auto_20161124_0250.py deleted file mode 100644 index 2875792..0000000 --- a/management/migrations/0088_auto_20161124_0250.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-24 02:50 -from __future__ import unicode_literals - -from django.db import migrations, models -import precise_bbcode.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0087_auto_20161110_2152'), - ] - - operations = [ - migrations.AddField( - model_name='comment', - name='html_content', - field=models.TextField(blank=True, default='', editable=False), - ), - migrations.AlterField( - model_name='comment', - name='bbtext', - field=precise_bbcode.fields.BBCodeTextField(blank=True, default='', no_rendered_field=True, verbose_name='BB Текст'), - ), - ] diff --git a/management/migrations/0089_comment_markdown.py b/management/migrations/0089_comment_markdown.py deleted file mode 100644 index 4f29787..0000000 --- a/management/migrations/0089_comment_markdown.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-24 02:51 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0088_auto_20161124_0250'), - ] - - operations = [ - migrations.AddField( - model_name='comment', - name='markdown', - field=models.TextField(blank=True, default=''), - ), - ] diff --git a/management/migrations/0090_auto_20161230_1643.py b/management/migrations/0090_auto_20161230_1643.py deleted file mode 100644 index 8b8cb31..0000000 --- a/management/migrations/0090_auto_20161230_1643.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-12-30 16:43 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0089_comment_markdown'), - ] - - operations = [ - migrations.AlterField( - model_name='modaltask', - name='user', - field=models.ManyToManyField(blank=True, editable=False, help_text='Как пользователь зайдет на сайт - отсюда он будет удален и будет создан журнал. ', related_name='task_user', to=settings.AUTH_USER_MODEL, verbose_name='Пользователи'), - ), - ] diff --git a/management/migrations/0091_auto_20170918_0811.py b/management/migrations/0091_auto_20170918_0811.py deleted file mode 100644 index 233c02b..0000000 --- a/management/migrations/0091_auto_20170918_0811.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-09-18 08:11 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('management', '0090_auto_20161230_1643'), - ] - - operations = [ - migrations.AlterField( - model_name='comment', - name='answers', - field=models.ManyToManyField(blank=True, editable=False, related_name='_comment_answers_+', to='management.Comment', verbose_name='Форумные ответы'), - ), - migrations.AlterField( - model_name='comment', - name='replies', - field=models.ManyToManyField(blank=True, editable=False, related_name='_comment_replies_+', to='management.Comment', verbose_name='Ответы'), - ), - migrations.AlterField( - model_name='faq', - name='comments', - field=models.ManyToManyField(blank=True, editable=False, to='management.Comment', verbose_name='Комментарии'), - ), - ] diff --git a/management/models.py b/management/models.py index 4ee7bbf..28ef998 100755 --- a/management/models.py +++ b/management/models.py @@ -1,491 +1,24 @@ # coding=utf-8 +from django.contrib.contenttypes.fields import GenericForeignKey +from django.contrib.contenttypes.models import ContentType from django.db import models -import locale, datetime from django.conf import settings -from django.contrib.auth import get_user_model -from redactor.fields import RedactorField -from lms.tools import out_date_format, random_int, random_string -from courses.templates import comment_fabric -from management.letters import sent_new_feedback from storage.models import Storage -import django.utils.timezone -from precise_bbcode.fields import BBCodeTextField -from markdown import markdown - -MODAL_STATUS = ( - ('C', 'Создана'), - ('P', 'Выполняется'), - ('Q', 'На очереди'), - ('F', 'Закончено') -) - - -def gen_comment_token(comment): - # 1 Надпись ID - # 2 id в системе - # 3 # - # 4 5 случайных чисел - return 'C{0}-{1}'.format(comment.id, random_int(length=5)) - - -def gen_modal_key(): - # Генерация ключа шаблона модуля - return 'M{0}'.format(random_string()) - - -def gen_modal_journal_key(): - return 'MJ{0}'.format(random_int(length=30)) - - -class NewsletterShell(models.Model): - name = models.CharField(verbose_name=u'Название шаблона', max_length=255) - head = models.TextField(verbose_name=u'Заголовок') - footer = models.TextField(verbose_name=u'Футер') - - def __unicode__(self): - return u'%s' % self.name - - def __str__(self): - return '%s' % self.name - - class Meta: - verbose_name = u'Оболочка рассылки' - verbose_name_plural = u'Оболочки рассылок' - - -class Newsletter(models.Model): - STATUS = ( - ('Q', u'На очереди'), - ('W', u'Выполняется'), - ('F', u'Выполнено') - ) - status = models.CharField(verbose_name=u'Статус', max_length=1, choices=STATUS, default='Q') - shell = models.ForeignKey(NewsletterShell, verbose_name=u'Оболочка', null=True) - author = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Инициатор', related_name='newsletter_owner') - text = models.TextField(verbose_name=u'Текст сообщения') - recipient = models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name=u'Получатели', related_name='newsletter_request') - date = models.DateTimeField(verbose_name=u'Дата постановки задачи', default=datetime.datetime.now) - sent_date = models.DateTimeField(verbose_name=u'Дата отправки', default=datetime.datetime.now) - f_recipient = models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name=u'Отправлено', related_name='newsletter_response') - - def __unicode__(self): - return u'%s %s %s:%s' % (self.author.get_short_name(), self.get_status_display(), self.date, self.sent_date) - - def __str__(self): - return '%s %s %s:%s' % (self.author.get_short_name(), self.get_status_display(), self.date, self.sent_date) - - class Meta: - verbose_name = u'Рассылка' - verbose_name_plural = u'Рассылки' - - -class News(models.Model): - public = models.BooleanField(verbose_name='Опубликовать', default=False) - title = models.CharField(verbose_name='Заголовок', max_length=255) - icon = models.ImageField(verbose_name=u'Иконка', upload_to='news', blank=True) - image = models.ImageField(verbose_name='Заголовочное изображение', upload_to='news', blank=True) - content = RedactorField(verbose_name='Текст') - author = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name='Автор', related_name='author_user') - public_date = models.DateTimeField(verbose_name='Дата публикации', blank=True) - create_date = models.DateTimeField(verbose_name='Дата создания', default=django.utils.timezone.now) - - def __unicode__(self): - return u'{0}'.format(self.public) - - def __str__(self): - return '{0}'.format(self.public) - - def get_date(self): - return out_date_format(self.public_date, no_time=True) - - def save(self, *args, **kwargs): - if self.public and not self.public_date: - self.public_date = django.utils.timezone.now() - super(News, self).save(*args, **kwargs) - - class Meta: - verbose_name = 'Новость' - verbose_name_plural = 'Новости' - ordering = ['-public_date'] - - -class CommentSawTable(models.Model): - comment = models.ForeignKey('Comment', verbose_name=u'Комментарий') - user = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Просмотревший') - date = models.DateTimeField(verbose_name=u'Время просмотра просмотра', default=datetime.datetime.now) - - def __unicode__(self): - return u'%s %s' % (self.user, self.date) - - def __str__(self): - return '%s %s' % (self.user, self.date) - - class Meta: - verbose_name = u'Журнал просмотра' - verbose_name_plural = u'Журналы просмотров' class Comment(models.Model): - STATUSES = ( - ('G', 'Одобрено'), - ('F', 'Отклонено'), - ('A', 'Сообщение от администрации'), - ('T', 'Техническое обращение'), - ('H', 'Домашняя работа студента'), - ('Q', 'Вопрос на форуме'), - ('Q2', 'Ответ на форуме'), - ('S', 'Комментарий') - ) - token = models.CharField(verbose_name=u'Ключь доступа', max_length=100, default='', editable=False) - best = models.BooleanField(verbose_name=u'Лучший ответ', default=False) - rating = models.IntegerField(verbose_name=u'Рейтинг', default=0) - minus_rating = models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name=u'Хейтеры', editable=False, null=True) - plus_rating = models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name=u'Гудеры', editable=False, null=True) - status = models.CharField(verbose_name=u'Статус сообщения', max_length=2, choices=STATUSES, default='S') - saw = models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name=u'Прочитавшие', blank=True, editable=False) - response = models.BooleanField(verbose_name=u'Есть ответ от админа', default=False, editable=False) - response_comment = models.ForeignKey('self', verbose_name=u'Комментарий ответа от админа', blank=True, null=True, related_name='admin_text_response', editable=False) - closed = models.BooleanField(verbose_name=u'Закрыт', default=False, editable=False) - parent_id = models.IntegerField(verbose_name=u'ID исходника', default=0, blank=True, editable=False) - owner = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Автор', related_name='comment_owner') - text = RedactorField(verbose_name=u'Текст', default='') - bbtext = BBCodeTextField(verbose_name=u'BB Текст', default='', blank=True) - markdown = models.TextField(blank=True, default='') - html_content = models.TextField(editable=False, blank=True, default='') - date = models.DateTimeField(verbose_name=u'Отправка', default=datetime.datetime.now) - files = models.ManyToManyField(Storage, verbose_name=u'Прикрепленые файлы', blank=True, editable=False) - send = models.BooleanField(verbose_name=u'Отправлено', default=False, editable=False) - replies = models.ManyToManyField('self', verbose_name=u'Ответы', blank=True, related_name='all_text_response', editable=False) - answers = models.ManyToManyField('self', verbose_name=u'Форумные ответы', blank=True, related_name='forum_answers', editable=False) - - def __unicode__(self): - return str(self.id) + closed = models.BooleanField(verbose_name='Закрыт', default=False, editable=False) + user = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Автор', related_name='comment_owner') + text = models.TextField(verbose_name='Текст', default='') + files = models.ManyToManyField(Storage, verbose_name='Прикрепленые файлы', blank=True, editable=False) + children = models.ManyToManyField(to='self', blank=True, symmetrical=False) + content_type = models.ForeignKey(to=ContentType) + object_id = models.PositiveIntegerField() + content_object = GenericForeignKey('content_type', 'object_id') def __str__(self): return str(self.id) - def get_text(self): - # Возвращение html текста из bb - if self.html_content: - return self.html_content - - elif self.bbtext.rendered: - result = self.bbtext.rendered - # TODO : Кастыль, Настроить приложения, чтобы тег обрабатывался стандартно - if '[/*]' in result: - result = str(result).replace('[/*]', '') - return result - - elif self.text: - return self.text - - def get_root_id(self): - do = True - cur = None - if self.parent_id: - while do: - comment = Comment.objects.get(id=self.parent_id) - if comment.parent_id: - cur = comment.parent_id - else: - return cur - return cur - - def plus_rating(self, user): - # Добавить рейтинг - # ============= - # Проверить пользователя в хейтерах - удалить его оттуда - # Проверить пользоветля в гудерах и добавить - если его там нет - pass - - def minus_rating(self, user): - # Отнять рейтинг - # ============ - # Проверить пользователя в хейтерах - удалить его оттуда - # Проверить пользоветля в гудерах и добавить - если его там нет - pass - - def check_opinion(self, user): - # Проверить мнение и вернуть состояние голоса - pass - - def get_opinion(self, user): - # Получить цвет мнения - # ============ - # null = нет мнения - # True = положительное мнение - # False = отрицательное мнение - pass - - def delete_opinion(self, user): - # Удалить мнение пользователя - pass - - def save(self, *args, **kwargs): - if not self.status: - if 'Задача принята!
    ' in self.text: - self.status = 'G' - self.text.replace('Задача принята!
    ', '') - elif 'Отправлено на доработку!
    ' in self.text: - self.status = 'F' - self.text.replace('Задача принята!
    ', '') - else: - self.status = 'S' - - if not self.token: - self.token = gen_comment_token(self) - self.html_content = markdown(self.markdown) - super(Comment, self).save(*args, **kwargs) - - def get_answered(self): - return Comment.objects.filter(parent_id=self.id) - - def set_saw(self, user): - # Проверить, что прочитан ли комментарий и добавить пользователя в прочитавших - if not CommentSawTable.objects.filter(user=user, comment=self).exists(): - CommentSawTable.objects.create(user=user, comment=self) - - def get_replies(self, __type, __user): - result = [] - for reply in Comment.objects.filter(parent_id=self.id): - result.append(comment_fabric(reply, __type=__type, __user=__user)) - return result - - def get_face(self, _type=None, _user=None): - return comment_fabric(self, __type=_type, __user=_user) - - def get_RFC_date(self): - locale.setlocale(locale.LC_TIME, 'en_US') - return datetime.datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT') - - class Meta: - verbose_name = u'Комментарий' - verbose_name_plural = u'Комментарии' - ordering = ['id'] - - -class Feedback(models.Model): - closed = models.BooleanField(verbose_name=u'Взято в работу', default=False) - name = models.CharField(verbose_name=u'Имя', max_length=255) - email = models.CharField(verbose_name=u'Email', max_length=255) - phone = models.CharField(verbose_name=u'Телефон', max_length=255) - text = models.TextField(verbose_name=u'Текст') - date = models.DateTimeField(verbose_name=u'Время обращения', default=datetime.datetime.now) - send = models.BooleanField(verbose_name=u'Отправлено', default=False) - - def __unicode__(self): - return u'%s %s' % (self.name, self.closed) - - def __str__(self): - return '%s %s' % (self.name, self.closed) - - def save(self, *args, **kwargs): - if not self.send: - for eye in get_user_model().objects.filter(in_role='S2'): - sent_new_feedback(self, eye.email) - super(Feedback, self).save(*args, **kwargs) - - class Meta: - verbose_name = u'Вопрос' - verbose_name_plural = u'Вопросы' - - -class FaqTitle(models.Model): - is_admin = models.BooleanField(verbose_name=u'Только администраторам', default=False) - is_staff = models.BooleanField(verbose_name=u'Только сотрудникам', default=False) - title = models.CharField(verbose_name=u'Тема', max_length=255, unique=True) - icon = models.ImageField(verbose_name=u'Иконка', upload_to='faq', blank=True) - sort = models.IntegerField(verbose_name=u'Порядок', default=0) - - def __unicode__(self): - return u'%s' % self.title - - def __str__(self): - return '%s' % self.title - - def get_face(self): - return { - 'id': self.id, - 'title': self.title, - 'icon': self.get_image(), - 'is_staff': self.is_staff, - 'is_admin': self.is_admin, - 'answers': [i.get_face() for i in Faq.objects.filter(title=self)] - } - - def get_image(self): - if self.icon: - return self.icon.url - else: - return '/static/img/faq.png' - - class Meta: - verbose_name = u'Заголовок FAQ' - verbose_name_plural = u'Заголовки FAQ' - ordering = ['sort'] - - -class Faq(models.Model): - title = models.ForeignKey(FaqTitle, verbose_name=u'Раздел') - question = models.CharField(verbose_name=u'Вопрос', max_length=255) - answer = RedactorField(verbose_name=u'Ответ') - rating = models.IntegerField(verbose_name=u'Рейтинг статьи', default=0) - comments = models.ManyToManyField(Comment, verbose_name=u'Комментарии', blank=True, editable=False) - date = models.DateTimeField(verbose_name=u'Дата создания', default=datetime.datetime.now, editable=False) - - def __str__(self): - return '%s %s' % (self.title, self.question) - - def __unicode__(self): - return u'%s %s' % (self.title, self.question) - - def get_face(self): - return { - 'id': self.id, - 'question': self.question, - 'answer': self.answer, - 'rating': self.rating - } - - -class ModalPlace(models.Model): - public = models.BooleanField(verbose_name=u'В работе', default=True) - key = models.CharField(verbose_name=u'Ключь места', max_length=255, default=gen_modal_key) - description = models.TextField(verbose_name=u'Описание', blank=True) - - def __unicode__(self): - return u'%s' % self.key - - def __str__(self): - return str(self.key) - - def get_modals(self, user): - # Получить все модальные окна для этого места - pass - - class Meta: - verbose_name = u'Всплывающие окна / Место вставок' - verbose_name_plural = u'Всплывающие окна / Места вставки' - - -class ModalTemplate(models.Model): - title = models.CharField(verbose_name=u'Заголовок', max_length=255) - key = models.CharField(verbose_name=u'Ключ Шаблона', max_length=255, default=gen_modal_key) - place = models.ForeignKey(ModalPlace, verbose_name=u'Место вставки', null=True) - context = models.TextField(verbose_name=u'Шаблон', help_text=u'{TEXT} - Место вставки текста,' - u'{TITLE} - Заголовок,' - u'{KEY} - Ключь окна') - - def __unicode__(self): - return u'{0}-{1}'.format(self.title, self.key) - - def __str__(self): - return '{0}-{1}'.format(self.title, self.key) - - def get_title(self): - return '{0}-{1}'.format(self.title, self.key) - - def get_modals(self, user): - # Получить все окна для этого шаблона - pass - - class Meta: - verbose_name = u'Всплывающие окна / Шаблон' - verbose_name_plural = u'Всплывающие окна / Шаблоны' - - -class Modal(models.Model): - template = models.ForeignKey(ModalTemplate, verbose_name=u'Шаблон') - title = models.CharField(verbose_name=u'Заголовок', max_length=255, blank=True) - text = models.TextField(verbose_name=u'Содержимое окна', blank=True) - close = models.BooleanField(verbose_name=u'Закрываемое', default=True) - views = models.IntegerField(verbose_name=u'Необходимое количество просмотров', default=1) - closes = models.IntegerField(verbose_name=u'Необходимое количество закрытий', default=1) - interval = models.IntegerField(verbose_name=u'Интервал показов в часах', default=1) - show_time = models.DateTimeField(verbose_name=u'Начало показа', default=datetime.datetime.now) - hide_time = models.DateTimeField(verbose_name=u'Закрытие показов', blank=True, null=True) - - def __unicode__(self): - return u'' % self.title - - def __str__(self): - return str(self.title) - - def get_title(self): - return self.title - - def get_modals(self, user): - # Получить все окна для этого конструктора - pass - - class Meta: - verbose_name = u'Всплывающие окна / Конструктор' - verbose_name_plural = u'Всплывающие окна / Конструкторы' - - -class ModalTask(models.Model): - user = models.ManyToManyField(to=settings.AUTH_USER_MODEL, verbose_name=u'Пользователи', - help_text=u'Как пользователь зайдет на сайт - отсюда он будет удален и ' - u'будет создан журнал. ', related_name='task_user', blank=True, editable=False) - modal = models.ForeignKey(Modal, verbose_name=u'Окно') - manager = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Поставивший задачу', related_name='task_manager') - date = models.DateTimeField(verbose_name=u'Постановка задачи', default=datetime.datetime.now) - status = models.CharField(verbose_name=u'Статус', choices=MODAL_STATUS, default='C', max_length=1) - - def __str__(self): - return str(self.modal.get_title()) - - def __unicode__(self): - return u'%s' % self.modal.get_title() - - def get_modals(self, user): - # Получить все окна от этой задачи - pass - - def save(self, *args, **kwargs): - - super(ModalTask, self).save(*args, **kwargs) - - class Meta: - verbose_name = u'Всплывающие окна / Задача' - verbose_name_plural = u'Всплывающие окна / Задачи' - - -class ModalJournal(models.Model): - STATUS = ( - ('O', 'Открыт'), - ('С', 'Закрыт'), - ('F', 'Закончен') - ) - key = models.CharField(verbose_name=u'Ключ', max_length=255, default=gen_modal_journal_key) - status = models.CharField(verbose_name=u'Статус', choices=STATUS, default='O', editable=False, max_length=1) - user = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name=u'Пользователь') - date = models.DateTimeField(verbose_name=u'Дата показа', default=datetime.datetime.now, editable=False) - task = models.ForeignKey(ModalTask, verbose_name=u'Задача') - views = models.IntegerField(verbose_name=u'Необходимое количество просмотров', default=0) - closes = models.IntegerField(verbose_name=u'Необходимое количество закрытий', default=0) - - def __unicode__(self): - return u'%s %s' % (self.user, self.date) - - def __str__(self): - return u'%s %s' % (self.user, self.date) - - def get_content(self, user): - pass - - def save(self, *args, **kwargs): - if self.closes >= self.task.modal.closes: - self.status = 'F' - - if self.views >= self.task.modal.views: - self.status = 'F' - - if self.date >= self.task.modal.hide_time: - self.status = 'F' - - super(ModalJournal, self).save(*args, **kwargs) - class Meta: - verbose_name = u'Всплывающие окна / Журнал' - verbose_name_plural = u'Всплывающие окна / Журналы' + verbose_name = 'Комментарий' + verbose_name_plural = 'Комментарии' diff --git a/management/reports.py b/management/reports.py deleted file mode 100755 index 293cfe5..0000000 --- a/management/reports.py +++ /dev/null @@ -1,338 +0,0 @@ -# coding=utf-8 -import calendar -import datetime -from django.http import Http404 -from lms.decors import api_decor, response_decor -from journals.models import TeacherJ, CourseThemeJ, HomeworkJ, LessonJ, ReportDepth -from finance.models import Bill, Price -from courses.models import Course, CourseTheme, CourseMap -from access.models import User -from lms.tools import check_role, out_date_format -from lms.settings import DOMAIN -from service.models import MailBox - - -def get_now_success_hw(): - now = datetime.datetime.now() - return HomeworkJ.objects.filter(date__gte=datetime.datetime(now.year, now.month, 1), - date__lte=datetime.datetime(now.year, now.month, calendar.mdays[datetime.date.today().month]), - f_date__lte=datetime.datetime(now.year, now.month, calendar.mdays[datetime.date.today().month]), - f_date__gte=datetime.datetime(now.year, now.month, 1)).count() - - -def get_second_success_hw(): - _now = datetime.datetime.now() - now = datetime.date(_now.year, datetime.datetime.now().month - 1 or 12, _now.day) - return HomeworkJ.objects.filter(date__gte=datetime.datetime(now.year, now.month, 1), - date__lte=datetime.datetime(now.year, now.month, calendar.mdays[now.month]), - f_date__lte=datetime.datetime(now.year, now.month, calendar.mdays[now.month]), - f_date__gte=datetime.datetime(now.year, now.month, 1)).count() - - -@api_decor(without_auth=False) -def now_success_hw(request, context): - context['code'] = '1' - context['data'] = get_now_success_hw() - return context - - -@api_decor(without_auth=False) -def now_second_hw(request, context): - context['code'] = '1' - context['data'] = get_second_success_hw() - return context - - -@response_decor(template='reports/progress.html', without_auth=False) -def progress(request): - courses = {} - for course in Course.objects.filter(public=True): - title = course.get_title() - courses[title] = {'users': [], 'map': [], 'id': course.id} - courses[title]['users'] = Bill.objects.filter(status='F', service__course=course).order_by( - 'user__id').distinct() - courses[title]['map'] = CourseMap.objects.filter(course=course) - - return {'courses': courses, 'get_now_success_hw': get_now_success_hw(), 'get_second_success_hw': get_second_success_hw()} - - -@response_decor(template='reports/freeweek.html', without_auth=False) -def freeweek(request): - if request.GET.get('price'): - result = {'get_now_success_hw': get_now_success_hw(), 'get_second_success_hw': get_second_success_hw()} - price = Price.objects.get(id=request.GET['price']) - result['title'] = price.course.get_title() - result['b_in'] = Bill.objects.filter(status='F', service=price, - finish_date__gt=datetime.datetime.now() - datetime.timedelta(days=8), - user__is_active=True, user__reg_status='4').order_by( - 'finish_date').distinct() - all = Bill.objects.filter(status='F', service=price, finish_date__gt=datetime.datetime.now() - datetime.timedelta(days=8), - user__is_active=True, user__reg_status='4').values_list('user__email', - flat=True).distinct().order_by('finish_date') - result['in_hw'] = HomeworkJ.objects.filter(student__email__in=all, f_date=None, - success=False, material__course=price.course).exclude(date=None).order_by('date') - result['out_hw'] = HomeworkJ.objects.filter(student__email__in=all, success=True, - material__course=price.course).exclude( - f_date=None, date=None).order_by('f_date') - - else: - result = {'active': {}, 'get_now_success_hw': get_now_success_hw(), 'get_second_success_hw': get_second_success_hw()} - # all - Всего пользователей - now = datetime.datetime.now() - result['all'] = int(User.objects.filter(refer='B').count()) - # active - Активировалось - result['active']['count'] = int(User.objects.filter(refer='B', is_active=True, reg_status='4').count()) - result['active']['persent'] = result['active']['count'] * 100 / result['all'] - # Проходят обучение - price = Price.objects.get(id=18) - result['java'] = {'title': price.course, 'id': 18} - result['java']['all'] = Bill.objects.filter(status='F', service=price, user__is_active=True, - user__reg_status='4').values_list('user', - flat=True).distinct().count() - result['java']['in'] = { - 'all': Bill.objects.filter(status='F', service=price, finish_date__gt=now - datetime.timedelta(days=8), - user__is_active=True, user__reg_status='4').values_list('user__email', - flat=True).distinct(), - 'count': Bill.objects.filter(status='F', service=price, finish_date__gte=now - datetime.timedelta(days=7), - user__is_active=True, user__reg_status='4').values_list('user__email', - flat=True).distinct().count()} - result['java']['in_hw'] = HomeworkJ.objects.filter(student__email__in=result['java']['in']['all'], f_date=None, - success=False, material__course=price.course).exclude( - date=None).values_list( - 'student', flat=True).distinct().count() - result['java']['out_hw'] = HomeworkJ.objects.filter(student__email__in=result['java']['in']['all'], - success=True, material__course=price.course).exclude( - f_date=None, date=None).values_list( - 'student', flat=True).distinct().count() - - price = Price.objects.get(id=19) - result['web'] = {'title': price.course, 'id': 19} - result['web']['all'] = Bill.objects.filter(status='F', service=price, user__is_active=True, - user__reg_status='4').values_list('user', - flat=True).distinct().count() - result['web']['in'] = { - 'all': Bill.objects.filter(status='F', service=price, finish_date__gt=now - datetime.timedelta(days=8), - user__is_active=True, user__reg_status='4').values_list('user__email', - flat=True).distinct(), - 'count': Bill.objects.filter(status='F', service=price, finish_date__gte=now - datetime.timedelta(days=7), - user__is_active=True, user__reg_status='4').values_list('user__email', - flat=True).distinct().count()} - result['web']['in_hw'] = HomeworkJ.objects.filter(student__email__in=result['web']['in']['all'], f_date=None, - success=False, material__course=price.course).exclude( - date=None).values_list( - 'student', flat=True).distinct().count() - result['web']['out_hw'] = HomeworkJ.objects.filter(student__email__in=result['web']['in']['all'], - success=True, material__course=price.course).exclude( - f_date=None, date=None).values_list( - 'student', flat=True).distinct().count() - - price = Price.objects.get(id=17) - result['android'] = {'title': price.course, 'id': 17} - result['android']['all'] = Bill.objects.filter(status='F', service=price, user__is_active=True, - user__reg_status='4').values_list('user', - flat=True).distinct().count() - result['android']['in'] = { - 'all': Bill.objects.filter(status='F', service=price, finish_date__gt=now - datetime.timedelta(days=8), - user__is_active=True, user__reg_status='4').values_list('user__email', - flat=True).distinct(), - 'count': Bill.objects.filter(status='F', service=price, finish_date__gte=now - datetime.timedelta(days=7), - user__is_active=True, user__reg_status='4').values_list('user__email', - flat=True).distinct().count()} - result['android']['in_hw'] = HomeworkJ.objects.filter(student__email__in=result['android']['in']['all'], - f_date=None, success=False, - material__course=price.course).exclude( - date=None).values_list( - 'student', flat=True).distinct().count() - result['android']['out_hw'] = HomeworkJ.objects.filter(student__email__in=result['android']['in']['all'], - success=True, material__course=price.course).exclude( - f_date=None, - date=None).values_list( - 'student', flat=True).distinct().count() - - price = Price.objects.get(id=16) - result['csh'] = {'title': price.course, 'id': 16} - result['csh']['all'] = Bill.objects.filter(status='F', service=price, user__is_active=True, - user__reg_status='4').values_list('user', - flat=True).distinct().count() - result['csh']['in'] = { - 'all': Bill.objects.filter(status='F', service=price, finish_date__gt=now - datetime.timedelta(days=8), - user__is_active=True, user__reg_status='4').values_list('user__email', - flat=True).distinct(), - 'count': Bill.objects.filter(status='F', service=price, finish_date__gte=now - datetime.timedelta(days=7), - user__is_active=True, user__reg_status='4').values_list('user__email', - flat=True).distinct().count()} - result['csh']['in_hw'] = HomeworkJ.objects.filter(student__email__in=result['csh']['in']['all'], f_date=None, - success=False, material__course=price.course).exclude( - date=None).values_list( - 'student', flat=True).distinct().count() - result['csh']['out_hw'] = HomeworkJ.objects.filter(student__email__in=result['csh']['in']['all'], - success=True, material__course=price.course).exclude( - f_date=None, date=None).values_list( - 'student', flat=True).distinct().count() - - return result - - -@response_decor(template='reports/hw_process_pp.html', without_auth=False) -def hw_process_pp(request): - # Ответ по ученику - return {'get_now_success_hw': get_now_success_hw(), 'get_second_success_hw': get_second_success_hw()} - - -@response_decor(template='reports/hw_process_pt.html', without_auth=False) -def hw_process_pt(request): - # Отчет по преподавателю - return {'courses': Course.objects.filter(public=True), 'get_now_success_hw': get_now_success_hw(), 'get_second_success_hw': get_second_success_hw()} - - -@response_decor(template='reports/mails.html', without_auth=False) -def mails(request): - # Контроль рассылок - stat = {} - m3 = datetime.datetime.now()-datetime.timedelta(weeks=12) - m1 = datetime.datetime.now()-datetime.timedelta(weeks=4) - w1 = datetime.datetime.now()-datetime.timedelta(weeks=1) - d3 = datetime.datetime.now()-datetime.timedelta(days=3) - d1 = datetime.datetime.now()-datetime.timedelta(days=1) - sections = MailBox.objects.exclude(_type='').values_list('_type', flat=True).distinct() - n = 0 - for section in sections: - stat[section] = { - 'id': n, - 'all': MailBox.objects.filter(_type=section).count(), - 'm3': MailBox.objects.filter(_type=section, sent_date__gte=m3).count(), - 'm1': MailBox.objects.filter(_type=section, sent_date__gte=m1).count(), - 'w1': MailBox.objects.filter(_type=section, sent_date__gte=w1).count(), - 'd3': MailBox.objects.filter(_type=section, sent_date__gte=d3).count(), - 'd1': MailBox.objects.filter(_type=section, sent_date__gte=d1).count() - } - n += 1 - return {'get_now_success_hw': get_now_success_hw(), 'get_second_success_hw': get_second_success_hw(), 'stat': stat, 'self_reports': []} - - -@api_decor(without_auth=False, method='GET', check_request=True, need_keys=['course']) -def get_course_teachers(request, context): - try: - course = Course.objects.get(id=request.GET['course']) - except Course.DoesNotExist: - context['code'] = '0' - context['response'] = u'Курс не найден' - context['data'] = [] - else: - context['code'] = '1' - context['data'] = [teacher.get_face() for teacher in course.teachers.all()] - return context - - -@api_decor(without_auth=False, method='GET', check_request=True, need_keys=['teacher']) -def get_teacher_students(request, context): - try: - journals = TeacherJ.objects.filter(teacher=User.objects.get(id=request.GET['teacher'])).exclude(user__is_active=False) - except User.DoesNotExist: - context['code'] = '0' - context['data'] = [] - context['response'] = u'Преподаватель не найден' - else: - context['code'] = '1' - context['data'] = journals - return context - - -@api_decor(without_auth=False) -def get_course_students(request, context): - context['data'] = [] - if request.GET.get('exc'): - ex = request.GET['exc'].split('_') - ex.pop() - exc = map(int, ex) - user = Bill.objects.filter(status='F', service__course__id=request.GET['course']).exclude( - user__id__in=exc).order_by('user__id').distinct().first() - else: - user = Bill.objects.filter(status='F', service__course__id=request.GET['course']).order_by( - 'user__id').distinct().first() - - if user: - user = user.user - context['code'] = '1' - context['response'] = user.id - for token in ReportDepth.objects.filter(student=user, course__id=int(request.GET['course'])).order_by( - 'token__sort'): - context['data'].append({ - 'point': str(request.GET['course']) + '_' + str(user.id) + '_' + str(token.token.token), - 's_date': '{2}{1}{0}'.format(token.s_date.day, token.s_date.month, token.s_date.year), - 'f_date': '{2}{1}{0}'.format(token.f_date.day, token.f_date.month, - token.f_date.year) if token.f_date else None, - 'type': token.token._type, - 'student': user.id}) - return context - - -@api_decor(without_auth=False, need_keys=['course', 'teacher', 's_date', 'f_date', 'expired', 'success', 'in_work'], method='GET', check_request=True) -def get_process_report(request, context): - if request.user.is_admin: - context['data'] = { - 'more': [] - } - q = { - 'teacher__id': request.GET['teacher'], - 'material__course__id': request.GET['course'], - 'date__gte': datetime.datetime.strptime(request.GET['s_date'], '%d_%m_%Y'), - 'date__lt': datetime.datetime.strptime(request.GET['f_date'], '%d_%m_%Y') - } - hw = HomeworkJ.objects.filter(**q) - student = [] - get_hw = [] - in_work_hw = [] - expired_hw = [] - success_hw = [] - for i in hw: - if not i.set_open and len(list(i.get_tries())) > 0: - exp = i.check_expired() - result = True - if result: - context['data']['more'].append( - {'course': i.material.course.get_title(), - 'id': i.id, - 'material': u'ID: {0} / Порядок темы: {1} / Заголовок: {2}'.format(i.material.id, i.material.theme.sort, i.material.get_title()), - 'material_id': i.material.id, - 'student_token': i.student.interactive_key, - 'student': i.student.get_short_name(), - 'teacher': i.teacher.get_short_name(), - 's_date': out_date_format(i.date), - 'f_date': out_date_format(i.f_date), - 'status': i.get_status()['title'], - 'expired': exp, - 'expired_time': i.expired_time(), - 'tries': len(list(i.get_tries())), - 'link': '{1}teacher/workshop/homework/{0}'.format(i.id, DOMAIN)} - ) - if i.student.id not in student: - student.append(i.student.id) - - if i.id not in expired_hw and exp: - expired_hw.append(i.id) - - if i.id not in in_work_hw and not i.f_date and not i.success: - in_work_hw.append(i.id) - - if i.id not in success_hw and i.success: - success_hw.append(i.id) - - if i.id not in get_hw: - get_hw.append(i.id) - context['code'] = '1' - context['data']['info'] = {'students': len(student), 'get_hw': len(get_hw), 'in_work_hw': len(in_work_hw), 'expired_hw': len(expired_hw), 'success_hw': len(success_hw)} - return context - raise Http404 - - -@api_decor(without_auth=False) -def progress_check_result(request, context): - context['data'] = [] - if int(request.GET['len']) == Bill.objects.filter(status='F', service__course__id=request.GET['course']).values_list('user', - flat=True).order_by( - 'user__id').distinct().count(): - context['code'] = '1' - else: - context['code'] = '0' - return context diff --git a/management/templatetags/__init__.py b/management/templatetags/__init__.py deleted file mode 100755 index a1208ca..0000000 --- a/management/templatetags/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__author__ = 'baryshnikov' diff --git a/management/templatetags/comment_filter.py b/management/templatetags/comment_filter.py deleted file mode 100755 index 15e9e4e..0000000 --- a/management/templatetags/comment_filter.py +++ /dev/null @@ -1,23 +0,0 @@ -from django import template -from access.models import User -from courses.models import CourseTheme, Lesson, Exam, Course, Homework -from journals.models import ExamJ, HomeworkJ, TeacherJ, CourseThemeJ -from finance.tools import system_check_bill -register = template.Library() - - -def getUserfactory(user): - if user: - try: - user = User.objects.get(id=user) - except User.DoesNotExist: - return user - else: - return None - return user - - -@register.filter -def get_admin_comments(lesson, user): - __theme = Lesson.objects.get(id=lesson) - return __theme.get_all_comments(_user=User.objects.get(id=user)) diff --git a/management/tools.py b/management/tools.py deleted file mode 100755 index 29a31bc..0000000 --- a/management/tools.py +++ /dev/null @@ -1,16 +0,0 @@ -# coding=utf-8 - -from management.models import ModalPlace - - -def get_modals(request): - # Получение списка модальных окон для отображения - # Проверка авторизации, проверка информации в сессии об окне - # Получение списка окон - result = {} - if request.user.is_authenticated(): - for place in ModalPlace.objects.filter(public=True): - result[place.key] = place.get_modals(request.user) - - return result - diff --git a/management/urls.py b/management/urls.py deleted file mode 100755 index c6b6a89..0000000 --- a/management/urls.py +++ /dev/null @@ -1,47 +0,0 @@ -from management import api, views, reports -from django.conf.urls import url - -urlpatterns = [ - url(r'super_profile/$', views.super_profile), - url(r'super_history/$', views.super_history), - url(r'super_bill/$', views.super_bill), - url(r'account/$', views.account), - url(r'super_servicerequest/$', views.super_servicerequest), - url(r'admin_profile$', views.admin_profile), - url(r'profile/$', views.profile), - url(r'servicerequests$', views.servicerequest), - url(r'news/([0-9]{1,99})$', views.news), - url(r'get_news/$', api.get_news), - url(r'history/$', views.history), - url(r'search_users$', api.search_users), - url(r'get_services_for_user$', api.get_services_for_user), - url(r'new_bill$', api.new_bill), - url(r'get_managers$', api.get_managers), - url(r'sent_charge$', api.sent_charge), - url(r'new_feedback/$', api.new_feedback), - url(r'read_comment$', api.read_comment), - url(r'burning_course/$', api.burning_course), - url(r'faq/([0-9]{1,99})$', views.faq_one), - url(r'faq/$', views.faq), - url(r'progress_report/$', views.progress_report), - url(r'reports/progress/$', reports.progress), - url(r'reports/get_course_students/$', reports.get_course_students), - url(r'reports/progress_check_result/$', reports.progress_check_result), - url(r'reports/freeweek/$', reports.freeweek), - url(r'reports/hw_process_pp/$', reports.hw_process_pp), - url(r'reports/hw_process_pt/$', reports.hw_process_pt), - url(r'reports/mails/$', reports.mails), - url(r'reports_api/get_teacher_students/$', reports.get_teacher_students), - url(r'reports_api/get_course_teachers/$', reports.get_course_teachers), - url(r'reports_api/get_process_report/$', reports.get_process_report), - url(r'reports_api/now_success_hw/$', reports.now_success_hw), - url(r'reports_api/now_second_hw/$', reports.now_second_hw), - url(r'self_sent_letter/$', api.self_sent_letter), - url(r'workcabinet/$', views.render_management_cabinet), - url(r'diplomscabinet/$', views.render_diplom_cabinet), - url(r'find_user/$', api.find_user), - url(r'find_course/$', api.find_course), - url(r'open_lessons/$', api.open_lessons), - url(r'open_homes/$', api.open_homes), - url(r'change_pass/$', api.change_pass), -] diff --git a/management/views.py b/management/views.py deleted file mode 100755 index dee6ed0..0000000 --- a/management/views.py +++ /dev/null @@ -1,176 +0,0 @@ -import hashlib -import time -from django.db.models import Q -from django.http import Http404 -from lms.decors import response_decor -from lms.settings import COMMENT_SECRET -from lms.tools import check_role, comment_auth_data -from finance.models import Bill, ServiceRequest, Price -from management.models import News, Faq, FaqTitle -from courses.models import Course, CourseTheme -from management.reports import get_now_success_hw, get_second_success_hw -from access.models import User -from finance.models import Bill, Price -from .forms import UploadFileForm - -@response_decor(template='super_bill.html') -def super_bill(request): - return {} - - -@response_decor(template='manager_profile.html') -def profile(request): - checker = check_role(request.user, 'M') - if checker['result']: - return {} - else: - return checker - - -@response_decor(template='manager_account.html') -def account(request): - checker = check_role(request.user, 'M') - if checker['result']: - return {'prices': Price.objects.filter(public=True)} - else: - return checker - - -@response_decor(template='news_one.html', without_auth=True) -def news(request, id): - try: - news = News.objects.get(id=id) - except News.DoesNotExist: - raise Http404 - - return {'news': news} - - -@response_decor(template='manager_history.html') -def history(request): - if request.user.in_role != 'T' and request.user.in_role != 'U': - return {'yourbills': Bill.objects.filter(manager=request.user).order_by('-id')} - else: - raise Http404 - - -@response_decor(template='manager_servicerequest.html') -def servicerequest(request): - if request.user.in_role != 'T' and request.user.in_role != 'U': - return {'servicerequests': ServiceRequest.objects.filter(Q(status='S', manager=request.user)|Q(status='W', manager=request.user)).order_by('date')} - else: - raise Http404 - - -@response_decor(template='super_profile.html') -def super_profile(request): - checker = check_role(request.user, 'S') - if checker['result']: - return {} - else: - return checker - - -@response_decor(template='super_history.html') -def super_history(request): - if request.user.in_role != 'T' and request.user.in_role != 'U' and request.user.in_role != 'M': - return {'yourbills': Bill.objects.all().order_by('-id'), 'failed': ServiceRequest.objects.filter(status='B').order_by('-id')} - else: - raise Http404 - - -@response_decor(template='super_servicerequest.html') -def super_servicerequest(request): - if request.user.in_role != 'T' and request.user.in_role != 'U' and request.user.in_role != 'M': - return {'servicerequests': ServiceRequest.objects.filter(Q(status='S')|Q(status='W')).order_by('date')} - else: - raise Http404 - - -@response_decor(template='admin_profile.html') -def admin_profile(request): - checker = check_role(request.user, 'A') - if checker['result']: - return {} - else: - return checker - - -@response_decor(template='faq.html', without_auth=True) -def faq(request): - a_faq = False - if request.user.is_authenticated() and (request.user.is_admin or request.user.is_staff): - if request.user.is_authenticated(): - if request.user.is_admin: - a_faq = FaqTitle.objects.filter(Q(is_admin=True)|Q(is_staff=True)) - elif request.user.is_staff: - a_faq = FaqTitle.objects.filter(is_admin=False, is_staff=True) - - return {'faqs': [i.get_face() for i in FaqTitle.objects.filter(is_admin=False, is_staff=False)], - 'a_faqs': [i.get_face() for i in a_faq] if a_faq else None, - 'admin': True if request.user.is_authenticated() and (request.user.is_staff or request.user.is_admin) else False} - - -@response_decor(template='faq_one.html', without_auth=False) -def faq_one(request, id): - try: - faq = Faq.objects.get(id=id) - except Faq.DoesNotExist: - raise Http404 - else: - faq = faq.get_face() - - return {'faq': faq} - - -@response_decor(template='progress_report.html') -def progress_report(request): - map = [] - for i in Course.objects.filter(public=True): - c = {'title': i.get_title(), 'themes': CourseTheme.objects.filter(course=i), 'id': i.id, - 'journals': []} - map.append(c) - return {'map': map, 'get_now_success_hw': get_now_success_hw(), 'get_second_success_hw': get_second_success_hw()} - - -@response_decor(template='cabinet.html') -def render_management_cabinet(request): - if request.user.in_role != 'A': - raise Http404 - else: - courses = Course.objects.filter(hidden=False).order_by('id') - return {'courses': courses} - - - - -@response_decor(template='diplomscab.html') -def render_diplom_cabinet(request): - context = {} - if request.method == 'POST': - - form = UploadFileForm(request.POST, request.FILES) - for l in request.FILES['file'].readlines(): - try: - user = User.objects.get(email=l.rstrip().lower()) - except User.DoesNotExist: - context['error'] = 'Плохая почта %s' % l - - try: - data = form.cleaned_data - id_ = int(data['service_id']) - service = Price.objects.get(id=id_) - bill = Bill.objects.create(user=user, status='F', service=service) - bill.save() - except Exception: - context['error'] = 'Не получилось создать счет для %s' % l - - - context['form'] = form - return context - else: - form = UploadFileForm() - - context['form'] = form - return context - diff --git a/practice/__init__.py b/practice/__init__.py deleted file mode 100644 index aea121f..0000000 --- a/practice/__init__.py +++ /dev/null @@ -1 +0,0 @@ -default_app_config = "practice.apps.PracticeAppConfig" \ No newline at end of file diff --git a/practice/admin.py b/practice/admin.py deleted file mode 100644 index b61ee28..0000000 --- a/practice/admin.py +++ /dev/null @@ -1,26 +0,0 @@ -from django.contrib import admin -from practice.models import DataSheet, Workshop, WorkshopTools - - -class DataSheetAdmin(admin.ModelAdmin): - list_display = ('title', 'split_char', 'date', 'access', 'key', 'password', 'users_length', ) - search_fields = ['key', 'title'] - list_filter = ['date', 'access'] - -admin.site.register(DataSheet, DataSheetAdmin) - - -class WorkshopAdmin(admin.ModelAdmin): - list_display = ('title', 'date', 'access', 'key', 'users_length', 'have_resolve', 'open_resolve', 'get_url', ) - search_fields = ['key', 'title'] - list_filter = ['date', 'access'] - -admin.site.register(Workshop, WorkshopAdmin) - - -class WorkshopToolsAdmin(admin.ModelAdmin): - list_display = ('name', 'url', ) - search_fields = ['name'] - -admin.site.register(WorkshopTools, WorkshopToolsAdmin) - diff --git a/practice/api.py b/practice/api.py deleted file mode 100644 index 8310eb6..0000000 --- a/practice/api.py +++ /dev/null @@ -1,21 +0,0 @@ -# coding=utf-8 - -from django.http import Http404 - -from lms.decors import api_decor -from practice.models import DataSheet - - -@api_decor(without_auth=True, need_keys=['key'], method='POST', check_request=True) -def get_data_sheet(request, context): - # Получение данных для практики - try: - sheet = DataSheet.objects.get(key=request.POST['key']) - except DataSheet.DoesNotExist: - raise Http404 - else: - data = sheet.get_data(request.POST.get('password') if request.POST.get('password') else '', request.user) - context['code'] = '1' if data['access'] else '0' - context['response'] = data['response'] - context['data'] = data['data'] - return context diff --git a/practice/apps.py b/practice/apps.py deleted file mode 100644 index 2d7a867..0000000 --- a/practice/apps.py +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -from django.apps import AppConfig - - -class PracticeAppConfig(AppConfig): - name = "practice" - verbose_name = "Практика" \ No newline at end of file diff --git a/practice/migrations/0001_initial.py b/practice/migrations/0001_initial.py deleted file mode 100644 index 530be09..0000000 --- a/practice/migrations/0001_initial.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 01:29 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='FakeData', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(default='', max_length=255, verbose_name='Название')), - ('key', models.CharField(blank=True, max_length=100, verbose_name='Ключ данных')), - ('data', models.TextField(verbose_name='Данные')), - ('split_char', models.CharField(default=', ', max_length=10, verbose_name='Разделяющий символ')), - ('date', models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='Дата создания')), - ('access', models.CharField(choices=[('A', 'Только для админа'), ('S', 'Для сотрудников'), ('O', 'Общедоступна')], default='A', max_length=1, verbose_name='Доступ')), - ('password', models.CharField(blank=True, default='', max_length=100, verbose_name='Пароль для доступа')), - ], - options={ - 'verbose_name': 'Данные, чтобы просто сюда положить', - 'verbose_name_plural': 'Данные, чтобы просто сюда положить', - }, - ), - ] diff --git a/practice/migrations/0002_auto_20160906_0131.py b/practice/migrations/0002_auto_20160906_0131.py deleted file mode 100644 index 4e72970..0000000 --- a/practice/migrations/0002_auto_20160906_0131.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 01:31 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('practice', '0001_initial'), - ] - - operations = [ - migrations.AlterModelOptions( - name='fakedata', - options={}, - ), - ] diff --git a/practice/migrations/0003_auto_20160906_0240.py b/practice/migrations/0003_auto_20160906_0240.py deleted file mode 100644 index 18656a3..0000000 --- a/practice/migrations/0003_auto_20160906_0240.py +++ /dev/null @@ -1,49 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 02:40 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('practice', '0002_auto_20160906_0131'), - ] - - operations = [ - migrations.CreateModel( - name='Workshop', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=255, verbose_name='Заголовок')), - ('access', models.CharField(choices=[('A', 'Только для админа'), ('S', 'Для сотрудников'), ('U', 'Только студентам'), ('O', 'Общедоступна')], default='A', max_length=1, verbose_name='Доступ')), - ('password', models.CharField(blank=True, default='', help_text='Если его не указать, он не потребуется', max_length=100, verbose_name='Пароль для доступа')), - ('password_help', models.TextField(blank=True, help_text='Будет отправлена, если пароль ввести не верно', verbose_name='Подсказка к паролю')), - ('content', models.TextField(verbose_name='Текст страницы')), - ('key', models.CharField(max_length=255, unique=True, verbose_name='Ключ')), - ('date', models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='Дата создания')), - ], - ), - migrations.AddField( - model_name='fakedata', - name='password_help', - field=models.TextField(blank=True, help_text='Будет отправлена, если пароль ввести не верно', verbose_name='Подсказка к паролю'), - ), - migrations.AlterField( - model_name='fakedata', - name='access', - field=models.CharField(choices=[('A', 'Только для админа'), ('S', 'Для сотрудников'), ('U', 'Только студентам'), ('O', 'Общедоступна')], default='A', max_length=1, verbose_name='Доступ'), - ), - migrations.AlterField( - model_name='fakedata', - name='key', - field=models.CharField(max_length=100, unique=True, verbose_name='Ключ данных'), - ), - migrations.AlterField( - model_name='fakedata', - name='password', - field=models.CharField(blank=True, default='', help_text='Если его не указать, он не потребуется', max_length=100, verbose_name='Пароль для доступа'), - ), - ] diff --git a/practice/migrations/0004_auto_20160906_0244.py b/practice/migrations/0004_auto_20160906_0244.py deleted file mode 100644 index 5274b32..0000000 --- a/practice/migrations/0004_auto_20160906_0244.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 02:44 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('practice', '0003_auto_20160906_0240'), - ] - - operations = [ - migrations.AddField( - model_name='fakedata', - name='users', - field=models.ManyToManyField(blank=True, null=True, to=settings.AUTH_USER_MODEL, verbose_name='Зашло пользователей'), - ), - migrations.AddField( - model_name='workshop', - name='users', - field=models.ManyToManyField(blank=True, null=True, to=settings.AUTH_USER_MODEL, verbose_name='Зашло пользователей'), - ), - ] diff --git a/practice/migrations/0005_auto_20160906_0325.py b/practice/migrations/0005_auto_20160906_0325.py deleted file mode 100644 index beada0a..0000000 --- a/practice/migrations/0005_auto_20160906_0325.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 03:25 -from __future__ import unicode_literals - -import datetime -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('practice', '0004_auto_20160906_0244'), - ] - - operations = [ - migrations.CreateModel( - name='DataSheet', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(default='', max_length=255, verbose_name='Название')), - ('access', models.CharField(choices=[('A', 'Только для админа'), ('S', 'Для сотрудников'), ('U', 'Только студентам'), ('O', 'Общедоступна')], default='A', max_length=1, verbose_name='Доступ')), - ('password', models.CharField(blank=True, default='', help_text='Если его не указать, он не потребуется', max_length=100, verbose_name='Пароль для доступа')), - ('password_help', models.TextField(blank=True, help_text='Будет отправлена, если пароль ввести не верно', verbose_name='Подсказка к паролю')), - ('key', models.CharField(max_length=100, unique=True, verbose_name='Ключ данных')), - ('data', models.TextField(verbose_name='Данные')), - ('split_char', models.CharField(blank=True, default=', ', max_length=10, verbose_name='Разделяющий символ')), - ('date', models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='Дата создания')), - ('users', models.ManyToManyField(blank=True, null=True, to=settings.AUTH_USER_MODEL, verbose_name='Пользователи')), - ], - options={ - 'verbose_name': 'Данные', - 'verbose_name_plural': 'Данные', - }, - ), - migrations.RemoveField( - model_name='fakedata', - name='users', - ), - migrations.AlterModelOptions( - name='workshop', - options={'verbose_name': 'Мастерская', 'verbose_name_plural': 'Мастерские'}, - ), - migrations.RemoveField( - model_name='workshop', - name='password', - ), - migrations.RemoveField( - model_name='workshop', - name='password_help', - ), - migrations.AlterField( - model_name='workshop', - name='users', - field=models.ManyToManyField(blank=True, null=True, to=settings.AUTH_USER_MODEL, verbose_name='Пользователи'), - ), - migrations.DeleteModel( - name='FakeData', - ), - ] diff --git a/practice/migrations/0006_auto_20160906_0330.py b/practice/migrations/0006_auto_20160906_0330.py deleted file mode 100644 index 617ef62..0000000 --- a/practice/migrations/0006_auto_20160906_0330.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 03:30 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('practice', '0005_auto_20160906_0325'), - ] - - operations = [ - migrations.AddField( - model_name='workshop', - name='head', - field=models.TextField(blank=True, default='', verbose_name='Добавления в заголовок'), - ), - migrations.AlterField( - model_name='workshop', - name='content', - field=models.TextField(blank=True, default='', verbose_name='Текст страницы'), - ), - ] diff --git a/practice/migrations/0007_auto_20160906_0334.py b/practice/migrations/0007_auto_20160906_0334.py deleted file mode 100644 index 88648d8..0000000 --- a/practice/migrations/0007_auto_20160906_0334.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 03:34 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('practice', '0006_auto_20160906_0330'), - ] - - operations = [ - migrations.AlterField( - model_name='datasheet', - name='key', - field=models.CharField(blank=True, default='', help_text='Если пуст, сгененируется при сохранении', max_length=100, unique=True, verbose_name='Ключ данных'), - ), - migrations.AlterField( - model_name='workshop', - name='key', - field=models.CharField(blank=True, default='', help_text='Если пуст, сгененируется при сохранении', max_length=255, unique=True, verbose_name='Ключ'), - ), - ] diff --git a/practice/migrations/0008_auto_20160906_0335.py b/practice/migrations/0008_auto_20160906_0335.py deleted file mode 100644 index 65c235e..0000000 --- a/practice/migrations/0008_auto_20160906_0335.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 03:35 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('practice', '0007_auto_20160906_0334'), - ] - - operations = [ - migrations.AlterField( - model_name='datasheet', - name='users', - field=models.ManyToManyField(blank=True, editable=False, null=True, to=settings.AUTH_USER_MODEL, verbose_name='Пользователи'), - ), - migrations.AlterField( - model_name='workshop', - name='users', - field=models.ManyToManyField(blank=True, editable=False, null=True, to=settings.AUTH_USER_MODEL, verbose_name='Пользователи'), - ), - ] diff --git a/practice/migrations/0009_workshop_example.py b/practice/migrations/0009_workshop_example.py deleted file mode 100644 index b7fb246..0000000 --- a/practice/migrations/0009_workshop_example.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 05:00 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('practice', '0008_auto_20160906_0335'), - ] - - operations = [ - migrations.AddField( - model_name='workshop', - name='example', - field=models.TextField(blank=True, default='', verbose_name='Пример реализации'), - ), - ] diff --git a/practice/migrations/0010_auto_20160906_0504.py b/practice/migrations/0010_auto_20160906_0504.py deleted file mode 100644 index f5b612e..0000000 --- a/practice/migrations/0010_auto_20160906_0504.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 05:04 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('practice', '0009_workshop_example'), - ] - - operations = [ - migrations.AddField( - model_name='workshop', - name='open_example', - field=models.BooleanField(default=False, verbose_name='Показать ответ'), - ), - migrations.AddField( - model_name='workshop', - name='will_open_example', - field=models.DateTimeField(blank=True, help_text='Доступ к ответу открыть в дату', null=True, verbose_name='Открыть в дату'), - ), - migrations.AlterField( - model_name='workshop', - name='example', - field=models.TextField(blank=True, default='', verbose_name='Ответ'), - ), - ] diff --git a/practice/migrations/0011_auto_20160906_0511.py b/practice/migrations/0011_auto_20160906_0511.py deleted file mode 100644 index 67770e3..0000000 --- a/practice/migrations/0011_auto_20160906_0511.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 05:11 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('practice', '0010_auto_20160906_0504'), - ] - - operations = [ - migrations.RenameField( - model_name='workshop', - old_name='open_example', - new_name='open_resolve', - ), - migrations.RenameField( - model_name='workshop', - old_name='example', - new_name='resolve', - ), - migrations.RenameField( - model_name='workshop', - old_name='will_open_example', - new_name='will_open_resolve', - ), - ] diff --git a/practice/migrations/0012_auto_20160906_0533.py b/practice/migrations/0012_auto_20160906_0533.py deleted file mode 100644 index fd9c2ea..0000000 --- a/practice/migrations/0012_auto_20160906_0533.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 05:33 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('practice', '0011_auto_20160906_0511'), - ] - - operations = [ - migrations.AddField( - model_name='workshop', - name='description', - field=models.TextField(blank=True, default='', null=True, verbose_name='Текст задачи'), - ), - migrations.AlterField( - model_name='workshop', - name='content', - field=models.TextField(blank=True, default='', help_text='Текс будет показан в мастерской в сылом виде. Какие теги напишите, такие и отобразятся', verbose_name='Текст страницы'), - ), - migrations.AlterField( - model_name='workshop', - name='open_resolve', - field=models.BooleanField(default=False, verbose_name='Открыть ответ'), - ), - migrations.AlterField( - model_name='workshop', - name='resolve', - field=models.TextField(blank=True, default='', help_text='Текс будет показан в мастерской в сылом виде. Какие теги напишите, такие и отобразятся', verbose_name='Ответ'), - ), - migrations.AlterField( - model_name='workshop', - name='will_open_resolve', - field=models.DateTimeField(blank=True, help_text='Доступ к ответу открыть в указанную дату, если это вообще нужно', null=True, verbose_name='Открыть ответ в дату'), - ), - ] diff --git a/practice/migrations/0013_auto_20160906_0608.py b/practice/migrations/0013_auto_20160906_0608.py deleted file mode 100644 index a6fce80..0000000 --- a/practice/migrations/0013_auto_20160906_0608.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 06:08 -from __future__ import unicode_literals - -from django.db import migrations, models -import redactor.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('practice', '0012_auto_20160906_0533'), - ] - - operations = [ - migrations.AlterField( - model_name='workshop', - name='content', - field=models.TextField(blank=True, default='', help_text='Добавление в , после описаний и решений', verbose_name='Контент'), - ), - migrations.AlterField( - model_name='workshop', - name='description', - field=redactor.fields.RedactorField(blank=True, default='', null=True, verbose_name='Текст задачи'), - ), - migrations.AlterField( - model_name='workshop', - name='head', - field=models.TextField(blank=True, default='', help_text='Добавление перед ', verbose_name='Заголовок'), - ), - migrations.AlterField( - model_name='workshop', - name='resolve', - field=redactor.fields.RedactorField(blank=True, default='', verbose_name='Ответ'), - ), - ] diff --git a/practice/migrations/0014_auto_20160906_0709.py b/practice/migrations/0014_auto_20160906_0709.py deleted file mode 100644 index a39a6ca..0000000 --- a/practice/migrations/0014_auto_20160906_0709.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 07:09 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('practice', '0013_auto_20160906_0608'), - ] - - operations = [ - migrations.AddField( - model_name='workshop', - name='views', - field=models.IntegerField(default=0, verbose_name='Просмотров комнаты'), - ), - migrations.AlterField( - model_name='datasheet', - name='access', - field=models.CharField(choices=[('A', 'Только администратору'), ('S', 'Для сотрудников'), ('U', 'Только студентам'), ('O', 'Общедоступна')], default='A', max_length=1, verbose_name='Доступ'), - ), - migrations.AlterField( - model_name='workshop', - name='access', - field=models.CharField(choices=[('A', 'Только администратору'), ('S', 'Для сотрудников'), ('U', 'Только студентам'), ('O', 'Общедоступна')], default='A', max_length=1, verbose_name='Доступ'), - ), - migrations.AlterField( - model_name='workshop', - name='content', - field=models.TextField(blank=True, default='', help_text='Добавление в /, после описаний и решений', verbose_name='Контент'), - ), - migrations.AlterField( - model_name='workshop', - name='head', - field=models.TextField(blank=True, default='', help_text='Добавление перед /', verbose_name='Заголовок'), - ), - ] diff --git a/practice/migrations/0015_auto_20160906_1548.py b/practice/migrations/0015_auto_20160906_1548.py deleted file mode 100644 index cd13517..0000000 --- a/practice/migrations/0015_auto_20160906_1548.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 15:48 -from __future__ import unicode_literals - -from django.db import migrations, models -import redactor.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('practice', '0014_auto_20160906_0709'), - ] - - operations = [ - migrations.CreateModel( - name='WorkshopTools', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255, verbose_name='Название')), - ('url', models.URLField(blank=True, verbose_name='Ссылка')), - ('description', redactor.fields.RedactorField(verbose_name='Описание')), - ], - options={ - 'verbose_name': 'Инструмент', - 'verbose_name_plural': 'Инструменты', - }, - ), - migrations.AddField( - model_name='workshop', - name='tools', - field=models.ManyToManyField(blank=True, null=True, to='practice.WorkshopTools', verbose_name='Используемые инструменты'), - ), - ] diff --git a/practice/migrations/0016_workshoptools_icon.py b/practice/migrations/0016_workshoptools_icon.py deleted file mode 100644 index f24db60..0000000 --- a/practice/migrations/0016_workshoptools_icon.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 15:49 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('practice', '0015_auto_20160906_1548'), - ] - - operations = [ - migrations.AddField( - model_name='workshoptools', - name='icon', - field=models.ImageField(blank=True, null=True, upload_to='tmp', verbose_name='Иконка'), - ), - ] diff --git a/practice/migrations/0017_auto_20160906_1609.py b/practice/migrations/0017_auto_20160906_1609.py deleted file mode 100644 index 3ce4730..0000000 --- a/practice/migrations/0017_auto_20160906_1609.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 16:09 -from __future__ import unicode_literals - -from django.db import migrations -import redactor.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('practice', '0016_workshoptools_icon'), - ] - - operations = [ - migrations.AlterField( - model_name='workshoptools', - name='description', - field=redactor.fields.RedactorField(blank=True, default='', verbose_name='Описание'), - ), - ] diff --git a/practice/migrations/0018_auto_20160906_1616.py b/practice/migrations/0018_auto_20160906_1616.py deleted file mode 100644 index 0383a95..0000000 --- a/practice/migrations/0018_auto_20160906_1616.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 16:16 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('practice', '0017_auto_20160906_1609'), - ] - - operations = [ - migrations.AlterField( - model_name='workshoptools', - name='description', - field=models.TextField(blank=True, default='', verbose_name='Описание'), - ), - ] diff --git a/practice/migrations/0019_auto_20160906_1641.py b/practice/migrations/0019_auto_20160906_1641.py deleted file mode 100644 index 2c90cc8..0000000 --- a/practice/migrations/0019_auto_20160906_1641.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 16:41 -from __future__ import unicode_literals - -from django.db import migrations -import redactor.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('practice', '0018_auto_20160906_1616'), - ] - - operations = [ - migrations.AddField( - model_name='workshop', - name='variables', - field=redactor.fields.RedactorField(blank=True, default='', verbose_name='Описание переменных'), - ), - migrations.AlterField( - model_name='workshop', - name='content', - field=redactor.fields.RedactorField(blank=True, default='', help_text='Добавление в /, после описаний и решений', verbose_name='Описание методов'), - ), - migrations.AlterField( - model_name='workshop', - name='description', - field=redactor.fields.RedactorField(blank=True, default='', null=True, verbose_name='Описание задачи'), - ), - ] diff --git a/practice/migrations/0020_workshop_body.py b/practice/migrations/0020_workshop_body.py deleted file mode 100644 index 2cc42db..0000000 --- a/practice/migrations/0020_workshop_body.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-06 17:14 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('practice', '0019_auto_20160906_1641'), - ] - - operations = [ - migrations.AddField( - model_name='workshop', - name='body', - field=models.TextField(blank=True, default='', verbose_name='Объекты, вставляемые в body'), - ), - ] diff --git a/practice/migrations/0021_auto_20170918_0811.py b/practice/migrations/0021_auto_20170918_0811.py deleted file mode 100644 index 1ea42b9..0000000 --- a/practice/migrations/0021_auto_20170918_0811.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2017-09-18 08:11 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('practice', '0020_workshop_body'), - ] - - operations = [ - migrations.AlterField( - model_name='datasheet', - name='users', - field=models.ManyToManyField(blank=True, editable=False, to=settings.AUTH_USER_MODEL, verbose_name='Пользователи'), - ), - migrations.AlterField( - model_name='workshop', - name='tools', - field=models.ManyToManyField(blank=True, to='practice.WorkshopTools', verbose_name='Используемые инструменты'), - ), - migrations.AlterField( - model_name='workshop', - name='users', - field=models.ManyToManyField(blank=True, editable=False, to=settings.AUTH_USER_MODEL, verbose_name='Пользователи'), - ), - ] diff --git a/practice/migrations/__init__.py b/practice/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/practice/models.py b/practice/models.py deleted file mode 100644 index 1fcb7aa..0000000 --- a/practice/models.py +++ /dev/null @@ -1,221 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from django.db import models -from redactor.fields import RedactorField - -from access.models import User -from lms.settings import DOMAIN -from lms.tools import random_string, user_fabric, out_date_format - -ACCESS = ( - ('A', u'Только администратору'), - ('S', u'Для сотрудников'), - ('U', u'Только студентам'), - ('O', u'Общедоступна') -) - - -class WorkshopTools(models.Model): - name = models.CharField(verbose_name=u'Название', max_length=255) - icon = models.ImageField(verbose_name=u'Иконка', upload_to='tmp', blank=True, null=True) - url = models.URLField(verbose_name=u'Ссылка', blank=True) - description = models.TextField(verbose_name=u'Описание', blank=True, default='') - - def __unicode__(self): - return u'%s' % self.name - - def __str__(self): - return self.name - - def get_face(self): - return { - 'name': self.name, - 'url': self.url if self.url else '', - 'icon': self.icon.url if self.icon else '{0}/static/img/1441673088_new_seo3-01.png'.format(DOMAIN), - 'description': self.description - } - - class Meta: - verbose_name = u'Инструмент' - verbose_name_plural = u'Инструменты' - - -class DataSheet(models.Model): - # 'https://codemy.ru/practice/ - title = models.CharField(verbose_name=u'Название', max_length=255, default='') - key = models.CharField(verbose_name=u'Ключ данных', max_length=100, unique=True, blank=True, default='', - help_text=u'Если пуст, сгененируется при сохранении') - access = models.CharField(verbose_name=u'Доступ', choices=ACCESS, max_length=1, default='A') - password = models.CharField(verbose_name=u'Пароль для доступа', max_length=100, blank=True, default='', - help_text=u'Если его не указать, он не потребуется') - password_help = models.TextField(verbose_name=u'Подсказка к паролю', blank=True, - help_text=u'Будет отправлена, если пароль ввести не верно') - data = models.TextField(verbose_name=u'Данные') - split_char = models.CharField(verbose_name=u'Разделяющий символ', max_length=10, default=', ', blank=True) - date = models.DateTimeField(verbose_name=u'Дата создания', default=datetime.datetime.now, editable=False) - users = models.ManyToManyField(User, verbose_name=u'Пользователи', blank=True, editable=False) - - def __unicode__(self): - return u'%s' % self.title - - def __str__(self): - return self.title - - def get_data(self, password='', user=None): - result = {'access': False, 'response': u'', 'data': ''} - if self.password and self.password != password: - result['response'] = self.password_help if self.password_help else 'Доступ отклонен' - return result - - access = False - if self.access == 'A': - if user_fabric(user) and user.is_admin: access = True; self.append_user(user) - - elif self.access == 'S': - if user_fabric(user) and user.is_staff or user.is_admin: access = True; self.append_user(user) - - elif self.access == 'U': - if user_fabric(user): access = True; self.append_user(user) - - elif self.access == 'O': - access = True - - if access: - result['access'] = True - result['data'] = self.data.split(self.split_char) if self.split_char else self.data - else: - result['response'] = u'Доступ отклонен' - - return result - - def append_user(self, user): - if user_fabric(user) and not self.users.filter(id=user.id).exists(): - self.users.add(user) - - def users_length(self): - return self.users.count() - - def save(self, *args, **kwargs): - if not self.key: - self.key = random_string() - super(DataSheet, self).save(*args, **kwargs) - - class Meta: - verbose_name = u'Данные' - verbose_name_plural = u'Данные' - - -class Workshop(models.Model): - title = models.CharField(verbose_name=u'Заголовок', max_length=255) - key = models.CharField(verbose_name=u'Ключ', max_length=255, unique=True, blank=True, default='', - help_text=u'Если пуст, сгененируется при сохранении') - access = models.CharField(verbose_name=u'Доступ', choices=ACCESS, max_length=1, default='A') - head = models.TextField(verbose_name=u'Заголовок', blank=True, default='', - help_text=u'Добавление перед /') - body = models.TextField(verbose_name=u'Объекты, вставляемые в body', blank=True, default='') - description = RedactorField(verbose_name=u'Описание задачи', blank=True, null=True, default='') - content = RedactorField(verbose_name=u'Описание методов', blank=True, default='', - help_text=u'Добавление в /, после описаний и решений') - variables = RedactorField(verbose_name=u'Описание переменных', blank=True, default='') - tools = models.ManyToManyField(WorkshopTools, verbose_name=u'Используемые инструменты', blank=True) - open_resolve = models.BooleanField(verbose_name=u'Открыть ответ', default=False) - resolve = RedactorField(verbose_name=u'Ответ', blank=True, default='') - will_open_resolve = models.DateTimeField(verbose_name=u'Открыть ответ в дату', blank=True, null=True, - help_text=u'Доступ к ответу открыть в указанную дату, если это вообще нужно') - date = models.DateTimeField(verbose_name=u'Дата создания', default=datetime.datetime.now, editable=False) - users = models.ManyToManyField(User, verbose_name=u'Пользователи', blank=True, editable=False) - views = models.IntegerField(verbose_name=u'Просмотров комнаты', default=0) - - def __unicode__(self): - return u'%s' % self.title - - def __str__(self): - return self.title - - def get_url(self): - return u'{0}/practice/workshop/{1}'.format(DOMAIN, self.key) - - def append_view(self, request=None): - if request: - if not request.session.get('workshop#%s' % self.key): - self.views += 1 - request.session['workshop#%s' % self.key] = True - self.save() - - def online_users_count(self): - return self.users.filter(status='ON').count() - - def get_online_users(self): - result = [] - for user in self.users.filter(status='ON').order_by('id'): - result.append(user.get_face()) - - return result - - def have_resolve(self): - return bool(self.resolve) - - def get_resolve(self, user=None): - if self.resolve: - if self.open_resolve: - return self.resolve - return False - - def get_content(self, user=None, request=None): - self.append_view(request) - result = {'access': False, 'response': u'', 'data': ''} - access = False - if self.access == 'A': - if user_fabric(user) and user.is_admin: access = True; self.append_user(user) - - elif self.access == 'S': - if user_fabric(user) and user.is_staff or user.is_admin: access = True; self.append_user(user) - - elif self.access == 'U': - if user_fabric(user): access = True; self.append_user(user) - - elif self.access == 'O': - access = True - - if access: - result['access'] = True - result['data'] = {'content': self.content, 'head': self.head, - 'resolve': self.get_resolve(user), - 'description': self.description, - 'tools': [i.get_face() for i in self.tools.all()], - 'variables': self.variables, - 'body': self.body - } - else: - result['response'] = u'Доступ отклонен' - - return result - - def append_user(self, user): - if user_fabric(user) and not self.users.filter(id=user.id).exists(): - self.users.add(user) - - def get_face(self): - return { - 'title': self.title, - 'access': self.get_access_display(), - 'key': self.key, - 'resolve': self.have_resolve(), - 'date': out_date_format(self.date), - 'students': self.users_length(), - 'views': self.views, - 'online': self.online_users_count(), - 'now_users': self.get_online_users() - } - - def users_length(self): - return self.users.count() - - def save(self, *args, **kwargs): - if not self.key: - self.key = random_string() - super(Workshop, self).save(*args, **kwargs) - - class Meta: - verbose_name = u'Мастерская' - verbose_name_plural = u'Мастерские' diff --git a/practice/tasks.py b/practice/tasks.py deleted file mode 100644 index 2c02129..0000000 --- a/practice/tasks.py +++ /dev/null @@ -1,11 +0,0 @@ -# coding=utf-8 -from celery.task import periodic_task -from datetime import timedelta, datetime -from practice.models import Workshop - - -@periodic_task(run_every=timedelta(minutes=1)) -def open_resolves(): - for resolve in Workshop.objects.filter(open_resolve=False, will_open_resolve__lte=datetime.now()).exclude(resolve=''): - resolve.open_resolve = True - resolve.save() diff --git a/practice/tests.py b/practice/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/practice/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/practice/urls.py b/practice/urls.py deleted file mode 100644 index b1512e6..0000000 --- a/practice/urls.py +++ /dev/null @@ -1,7 +0,0 @@ -from django.conf.urls import url -from practice import api, views - -urlpatterns = [ - url(r'get_data_sheet/$', api.get_data_sheet), - url(r'workshop/(?P.*)/$', views.workshop) -] diff --git a/practice/views.py b/practice/views.py deleted file mode 100644 index 477d0d8..0000000 --- a/practice/views.py +++ /dev/null @@ -1,20 +0,0 @@ -# coding=utf-8 - -from django.http import Http404 -from lms.decors import response_decor -from practice.models import Workshop - - -@response_decor(template='practice_workshop.html', without_auth=True) -def workshop(request, key): - # Получение рабочего места для практики - try: - workshop = Workshop.objects.get(key=key) - except Workshop.DoesNotExist: - raise Http404 - else: - data = workshop.get_content(user=request.user, request=request) - if data['access']: - return {'content': data['data'], 'face': workshop.get_face()} - else: - return {'redirect': '/access_error/'} diff --git a/req.txt b/req.txt deleted file mode 100644 index 6cf64c0..0000000 --- a/req.txt +++ /dev/null @@ -1,72 +0,0 @@ -Babel==2.3.4 -Django==1.9.3 -Jinja2==2.8 -Markdown==2.6.7 -MarkupSafe==0.23 -Pillow==3.3.0 -Pygments==2.1.3 -amqp==1.4.9 -anyjson==0.3.3 -billiard==3.3.0.23 -celery==3.1.23 -contextlib2==0.5.4 -cycler==0.10.0 -decorator==4.0.10 -diff-match-patch==20110725.1 -django-admin-tools==0.8.0 -django-celery==3.1.17 -django-import-export==0.4.5 -django-jet==1.0.1 -django-precise-bbcode==1.2.6 -django-uwsgi==0.1.3 -django-wysiwyg-redactor==0.4.9 -entrypoints==0.2.2 -flower==0.9.1 -google-api-python-client==1.5.3 -html2bbcode==2.3.2 -httplib2==0.9.2 -ipykernel==4.5.0 -ipython==5.1.0 -ipython-genutils==0.1.0 -ipywidgets==5.2.2 -jsonschema==2.5.1 -jupyter==1.0.0 -jupyter-client==4.4.0 -jupyter-console==5.0.0 -jupyter-core==4.2.0 -kombu==3.0.35 -matplotlib==1.5.3 -mistune==0.7.3 -nbconvert==4.2.0 -nbformat==4.1.0 -notebook==4.2.3 -numpy==1.11.2 -oauth2client==3.0.0 -pexpect==4.2.0 -pickleshare==0.7.4 -prompt-toolkit==1.0.5 -psycopg2==2.6.2 -ptyprocess==0.5.1 -pyasn1==0.1.9 -pyasn1-modules==0.0.8 -pyparsing==2.1.10 -python-dateutil==2.5.3 -pytz==2016.6.1 -pyzmq==16.0.0 -qtconsole==4.2.1 -raven==5.24.3 -requests==2.11.0 -rsa==3.4.2 -simplegeneric==0.8.1 -simplejson==3.8.2 -six==1.10.0 -tablib==0.11.2 -terminado==0.6 -tornado==4.2 -traitlets==4.2.2 -uWSGI==2.0.13.1 -uritemplate==0.6 -urllib3==1.17 -wcwidth==0.1.7 -widgetsnbextension==1.2.6 -xlwt==1.1.2 diff --git a/requirements.txt b/requirements.txt index 8acb06a..8f21f62 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,75 +1,17 @@ -Babel==2.3.4 -Django==1.9.3 -Jinja2==2.8 -Markdown==2.6.7 -MarkupSafe==0.23 -Pillow==3.3.0 -Pygments==2.1.3 -amqp==1.4.9 -anyjson==0.3.3 -billiard==3.3.0.23 -celery==3.1.23 -contextlib2==0.5.4 -cycler==0.10.0 -decorator==4.0.10 -diff-match-patch==20110725.1 -djangorestframework==3.6.4 -django-admin-tools==0.8.0 -django-celery==3.1.17 -django-import-export==0.4.5 -django-jet==1.0.1 -django-precise-bbcode==1.2.6 -django-uwsgi==0.1.3 -django-wysiwyg-redactor==0.4.9 -entrypoints==0.2.2 -flower==0.9.1 -google-api-python-client==1.5.3 -html2bbcode==2.3.2 -httplib2==0.9.2 -ipykernel==4.5.0 -ipython==5.1.0 -ipython-genutils==0.1.0 -ipywidgets==5.2.2 -jsonschema==2.5.1 -jupyter==1.0.0 -jupyter-client==4.4.0 -jupyter-console==5.0.0 -jupyter-core==4.2.0 -kombu==3.0.35 -matplotlib==1.5.3 -mistune==0.7.3 -nbconvert==4.2.0 -nbformat==4.1.0 -notebook==4.2.3 -numpy==1.11.2 -oauth2client==3.0.0 -pexpect==4.2.0 -pickleshare==0.7.4 -prompt-toolkit==1.0.5 -psycopg2==2.6.2 -ptyprocess==0.5.1 -pyasn1==0.1.9 -pyasn1-modules==0.0.8 -pyparsing==2.1.10 -python-dateutil==2.5.3 -pytz==2016.6.1 -pyzmq==16.0.0 -qtconsole==4.2.1 -raven==5.24.3 -requests==2.11.0 -rsa==3.4.2 -simplegeneric==0.8.1 -simplejson==3.8.2 -six==1.10.0 -tablib==0.11.2 -terminado==0.6 -tornado==4.2 -traitlets==4.2.2 -uWSGI==2.0.13.1 -uritemplate==0.6 -urllib3==1.17 -wcwidth==0.1.7 -widgetsnbextension==1.2.6 -xlwt==1.1.2 -fabric - +amqp==2.2.2 +billiard==3.5.0.3 +celery==4.1.0 +Django==1.11.6 +django-appconf==1.0.2 +django-celery-beat==1.0.1 +django-celery-email==2.0.0 +django-celery-results==1.0.1 +djangorestframework==3.7.0 +kombu==4.1.0 +olefile==0.44 +Pillow==4.3.0 +pkg-resources==0.0.0 +psycopg2==2.7.3.1 +pytz==2017.2 +raven==6.2.1 +vine==1.1.4 diff --git a/service/admin.py b/service/admin.py index d30ea61..4c4cd7e 100755 --- a/service/admin.py +++ b/service/admin.py @@ -1,25 +1,5 @@ from django.contrib import admin -from service.models import MailBox, Sms, MailTemplate +from service.models import MailBox, MailTemplate - -class MailBoxAdmin(admin.ModelAdmin): - list_display = ('_to', 'title', 'queue_date', 'sent_date', 'status', '_type', 'error', ) - list_filter = ('_type', 'sent_date', 'status',) - search_fields = ['_to'] - -admin.site.register(MailBox, MailBoxAdmin) - - -class SmsAdmin(admin.ModelAdmin): - list_display = ('_to', '_status', 'text', 'date', 'error') - search_fields = ['_to'] - list_filter = ['_status', 'date'] - -admin.site.register(Sms, SmsAdmin) - - -class MailTemplateAdmin(admin.ModelAdmin): - list_display = ('title', 'key', ) - - -admin.site.register(MailTemplate, MailTemplateAdmin) +admin.site.register(MailBox) +admin.site.register(MailTemplate) diff --git a/service/migrations/0001_initial.py b/service/migrations/0001_initial.py old mode 100755 new mode 100644 index 30f7b56..b6ccdf2 --- a/service/migrations/0001_initial.py +++ b/service/migrations/0001_initial.py @@ -1,51 +1,46 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-05-21 22:58 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='MailBox', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('status', models.CharField(choices=[('Q', '\u041d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438'), ('W', '\u041e\u0436\u0438\u0434\u0430\u0435\u0442 \u0434\u0430\u0442\u044b \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438'), ('S', '\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d'), ('D', '\u0414\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d'), ('F', '\u0410\u0434\u0440\u0435\u0441\u0430\u0442 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d')], default='Q', max_length=1, verbose_name='\u0421\u0442\u0430\u0442\u0443\u0441 \u043f\u0438\u0441\u044c\u043c\u0430')), - ('_to', models.EmailField(max_length=254, verbose_name='\u041f\u043e\u0447\u0442\u0430')), - ('queue_date', models.DateTimeField(default=datetime.datetime.now, help_text='\u0415\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u0430\u0442\u0443 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438, \u043f\u0438\u0441\u044c\u043c\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f', verbose_name='\u0414\u0430\u0442\u0430 \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0437\u0430\u0434\u0430\u0447\u0438')), - ('sent_date', models.DateTimeField(blank=True, editable=False, null=True, verbose_name='\u0412\u0440\u0435\u043c\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438')), - ('title', models.CharField(blank=True, max_length=255, verbose_name='\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043f\u0438\u0441\u044c\u043c\u0430')), - ('text', models.TextField(verbose_name='\u0422\u0435\u043a\u0441\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438')), - ], - options={ - 'verbose_name': '\u041f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u044f\u0449\u0438\u043a', - 'verbose_name_plural': '\u041f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u044f\u0449\u0438\u043a', - }, - ), - migrations.CreateModel( - name='Sms', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('sent', models.BooleanField(default=False, editable=False, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c')), - ('_to', models.CharField(help_text='+79660497379', max_length=255, verbose_name='\u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c')), - ('_status', models.CharField(choices=[('S', '\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f'), ('F', '\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d'), ('E', '\u041e\u0448\u0438\u0431\u043a\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f')], default='S', editable=False, max_length=1, verbose_name='\u0421\u0442\u0430\u0442\u0443\u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f')), - ('date', models.DateTimeField(default=datetime.datetime(2016, 5, 21, 22, 58, 40, 48414), help_text='\u041d\u0435 \u0434\u0430\u043b\u044c\u0448\u0435 7\u043c\u0438 \u0434\u043d\u0435\u0439', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438')), - ('text', models.TextField(verbose_name='\u0422\u0435\u043a\u0441\u0442')), - ('_from', models.CharField(choices=[('T', 'Tocka Koda'), ('C', 'CODEMY.RU')], default='C', max_length=1, verbose_name='\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c')), - ('error', models.TextField(blank=True, editable=False, null=True, verbose_name='\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438')), - ('debug', models.CharField(blank=True, max_length=255, verbose_name='\u0421\u0442\u0440\u043e\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430')), - ], - options={ - 'verbose_name': '\u0421\u041c\u0421', - 'verbose_name_plural': '\u0421\u041c\u0421', - }, - ), - ] +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2017-10-13 11:18 +from __future__ import unicode_literals + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='MailBox', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('status', models.CharField(choices=[('Q', 'На очереди'), ('S', 'Отправлен'), ('E', 'Ошибка отправки'), ('D', 'Доставлен'), ('F', 'Ошибка доставки')], default='Q', max_length=1, verbose_name='Статус письма')), + ('send_to', models.EmailField(max_length=254, verbose_name='Почта')), + ('error_text', models.TextField(blank=True, verbose_name='Текст ошибки')), + ('sent_date', models.DateTimeField(default=datetime.datetime.now, verbose_name='Время отправки')), + ('title', models.CharField(max_length=255, verbose_name='Заголовок письма')), + ('text', models.TextField(editable=False, verbose_name='Текст отправки')), + ], + options={ + 'verbose_name': 'Письмо', + 'verbose_name_plural': 'Письма', + }, + ), + migrations.CreateModel( + name='MailTemplate', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=255, verbose_name='Название шаблона')), + ('text', models.TextField(default='', verbose_name='Шаблон')), + ('kwarg', models.TextField(default='', verbose_name='Пораметры для шаблона')), + ], + options={ + 'verbose_name': 'Шаблон письма', + 'verbose_name_plural': 'Шаблоны писем', + }, + ), + ] diff --git a/service/migrations/0002_auto_20160523_1258.py b/service/migrations/0002_auto_20160523_1258.py deleted file mode 100755 index 43f0ac1..0000000 --- a/service/migrations/0002_auto_20160523_1258.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-05-23 12:58 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('service', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='mailbox', - name='_type', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='\u0422\u0438\u043f \u043f\u0438\u0441\u044c\u043c\u0430'), - ), - migrations.AlterField( - model_name='mailbox', - name='title', - field=models.CharField(max_length=255, verbose_name='\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043f\u0438\u0441\u044c\u043c\u0430'), - ), - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 5, 23, 12, 58, 35, 553986), help_text='\u041d\u0435 \u0434\u0430\u043b\u044c\u0448\u0435 7\u043c\u0438 \u0434\u043d\u0435\u0439', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/service/migrations/0003_auto_20160523_1420.py b/service/migrations/0003_auto_20160523_1420.py deleted file mode 100755 index 7463e17..0000000 --- a/service/migrations/0003_auto_20160523_1420.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-05-23 14:20 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models -import redactor.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('service', '0002_auto_20160523_1258'), - ] - - operations = [ - migrations.AlterField( - model_name='mailbox', - name='text', - field=redactor.fields.RedactorField(verbose_name='\u0422\u0435\u043a\u0441\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 5, 23, 14, 20, 37, 375689), help_text='\u041d\u0435 \u0434\u0430\u043b\u044c\u0448\u0435 7\u043c\u0438 \u0434\u043d\u0435\u0439', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/service/migrations/0004_auto_20160523_1423.py b/service/migrations/0004_auto_20160523_1423.py deleted file mode 100755 index cf97497..0000000 --- a/service/migrations/0004_auto_20160523_1423.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-05-23 14:23 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models -import redactor.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('service', '0003_auto_20160523_1420'), - ] - - operations = [ - migrations.AddField( - model_name='mailbox', - name='result', - field=redactor.fields.RedactorField(blank=True, default='', verbose_name='\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0438\u0441\u044c\u043c\u0430'), - ), - migrations.AlterField( - model_name='mailbox', - name='text', - field=redactor.fields.RedactorField(editable=False, verbose_name='\u0422\u0435\u043a\u0441\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 5, 23, 14, 23, 52, 583897), help_text='\u041d\u0435 \u0434\u0430\u043b\u044c\u0448\u0435 7\u043c\u0438 \u0434\u043d\u0435\u0439', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/service/migrations/0005_auto_20160523_1427.py b/service/migrations/0005_auto_20160523_1427.py deleted file mode 100755 index 0f74f51..0000000 --- a/service/migrations/0005_auto_20160523_1427.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-05-23 14:27 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models -import redactor.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('service', '0004_auto_20160523_1423'), - ] - - operations = [ - migrations.AlterField( - model_name='mailbox', - name='result', - field=redactor.fields.RedactorField(blank=True, default='', verbose_name='\u0412\u0438\u0434 \u043f\u0438\u0441\u044c\u043c\u0430'), - ), - migrations.AlterField( - model_name='mailbox', - name='text', - field=models.TextField(editable=False, verbose_name='\u0422\u0435\u043a\u0441\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime(2016, 5, 23, 14, 27, 58, 979146), help_text='\u041d\u0435 \u0434\u0430\u043b\u044c\u0448\u0435 7\u043c\u0438 \u0434\u043d\u0435\u0439', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/service/migrations/0006_auto_20160523_1525.py b/service/migrations/0006_auto_20160523_1525.py deleted file mode 100755 index 401eb3e..0000000 --- a/service/migrations/0006_auto_20160523_1525.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-05-23 15:25 -from __future__ import unicode_literals - -import datetime -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('service', '0005_auto_20160523_1427'), - ] - - operations = [ - migrations.AlterField( - model_name='sms', - name='date', - field=models.DateTimeField(default=datetime.datetime.now, help_text='\u041d\u0435 \u0434\u0430\u043b\u044c\u0448\u0435 7\u043c\u0438 \u0434\u043d\u0435\u0439', verbose_name='\u0414\u0430\u0442\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438'), - ), - ] diff --git a/service/migrations/0007_mailbox_custom.py b/service/migrations/0007_mailbox_custom.py deleted file mode 100755 index afb7774..0000000 --- a/service/migrations/0007_mailbox_custom.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-07-18 15:21 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('service', '0006_auto_20160523_1525'), - ] - - operations = [ - migrations.AddField( - model_name='mailbox', - name='custom', - field=models.BooleanField(default=False, verbose_name='\u041a\u0430\u0441\u0442\u043e\u043c\u043d\u0430\u044f \u043e\u0431\u043b\u043e\u0436\u043a\u0430'), - ), - ] diff --git a/service/migrations/0008_mailtemplate.py b/service/migrations/0008_mailtemplate.py deleted file mode 100644 index 57d04e9..0000000 --- a/service/migrations/0008_mailtemplate.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-05 13:31 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('service', '0007_mailbox_custom'), - ] - - operations = [ - migrations.CreateModel( - name='MailTemplate', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('key', models.CharField(blank=True, editable=False, max_length=255, verbose_name='Ключ шаблона')), - ('title', models.CharField(max_length=255, verbose_name='Название шаблона')), - ('head', models.TextField(verbose_name='Шапка')), - ('footer', models.TextField(verbose_name='Подвал')), - ], - options={ - 'verbose_name': 'Шаблон письма', - 'verbose_name_plural': 'Шаблоны писем', - }, - ), - ] diff --git a/service/migrations/0009_mailbox_template.py b/service/migrations/0009_mailbox_template.py deleted file mode 100644 index 11e38af..0000000 --- a/service/migrations/0009_mailbox_template.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-05 13:38 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('service', '0008_mailtemplate'), - ] - - operations = [ - migrations.AddField( - model_name='mailbox', - name='template', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='service.MailTemplate', verbose_name='Шаблон письма'), - ), - ] diff --git a/service/migrations/0010_auto_20160905_1456.py b/service/migrations/0010_auto_20160905_1456.py deleted file mode 100644 index 0e4fb57..0000000 --- a/service/migrations/0010_auto_20160905_1456.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-05 14:56 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('service', '0009_mailbox_template'), - ] - - operations = [ - migrations.AlterModelOptions( - name='mailbox', - options={'verbose_name': 'Письмо', 'verbose_name_plural': 'Письма'}, - ), - migrations.RemoveField( - model_name='mailtemplate', - name='footer', - ), - migrations.RemoveField( - model_name='mailtemplate', - name='head', - ), - migrations.AddField( - model_name='mailtemplate', - name='text', - field=models.TextField(default='', help_text='{TEXT} - Текст самого письма {DOMAIN} - Домен отправителя{NAME} - Название компании,{SUPPORT} - Почта поддержки,{SUPPORT_PHONE} - Телефон поддержки', verbose_name='Шаблон'), - ), - migrations.AlterField( - model_name='mailbox', - name='template', - field=models.CharField(blank=True, default='', max_length=100, verbose_name='Ключ шаблона письма'), - ), - ] diff --git a/service/migrations/0011_auto_20160908_1624.py b/service/migrations/0011_auto_20160908_1624.py deleted file mode 100644 index 52e54af..0000000 --- a/service/migrations/0011_auto_20160908_1624.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-09-08 16:24 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('service', '0010_auto_20160905_1456'), - ] - - operations = [ - migrations.AddField( - model_name='mailbox', - name='error', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Ошибка отправки'), - ), - migrations.AlterField( - model_name='mailbox', - name='status', - field=models.CharField(choices=[('Q', 'На очереди'), ('W', 'Ожидает даты доставки'), ('S', 'Отправлен'), ('E', 'Ошибка отправки'), ('D', 'Доставлен'), ('F', 'Адресат не найден')], default='Q', max_length=1, verbose_name='Статус письма'), - ), - ] diff --git a/service/migrations/0012_mailbox_token.py b/service/migrations/0012_mailbox_token.py deleted file mode 100644 index 84cf041..0000000 --- a/service/migrations/0012_mailbox_token.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-08 16:33 -from __future__ import unicode_literals - -from django.db import migrations, models -import lms.tools - - -class Migration(migrations.Migration): - - dependencies = [ - ('service', '0011_auto_20160908_1624'), - ] - - operations = [ - migrations.AddField( - model_name='mailbox', - name='token', - field=models.CharField(default=lms.tools.random_string, max_length=255, verbose_name='Токен'), - ), - ] diff --git a/service/migrations/0013_auto_20161108_1633.py b/service/migrations/0013_auto_20161108_1633.py deleted file mode 100644 index 3cedfa0..0000000 --- a/service/migrations/0013_auto_20161108_1633.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-08 16:33 -from __future__ import unicode_literals - -from django.db import migrations, models -import lms.tools - - -class Migration(migrations.Migration): - - dependencies = [ - ('service', '0012_mailbox_token'), - ] - - operations = [ - migrations.AlterField( - model_name='mailbox', - name='token', - field=models.CharField(default=lms.tools.random_string, max_length=255, unique=True, verbose_name='Токен'), - ), - ] diff --git a/service/migrations/0014_remove_mailbox_token.py b/service/migrations/0014_remove_mailbox_token.py deleted file mode 100644 index 61a0041..0000000 --- a/service/migrations/0014_remove_mailbox_token.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-11-08 16:34 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('service', '0013_auto_20161108_1633'), - ] - - operations = [ - migrations.RemoveField( - model_name='mailbox', - name='token', - ), - ] diff --git a/service/models.py b/service/models.py index 88645c2..81fc83c 100755 --- a/service/models.py +++ b/service/models.py @@ -1,40 +1,18 @@ # coding=utf-8 from __future__ import unicode_literals import datetime -import smtplib from django.db import models -from django.core.mail import EmailMessage, send_mail -from lms.settings import DEFAULT_FROM_EMAIL, TESTING, TEST_EMAIL, NAME, DOMAIN, SUPPORT, SUPPORT_PHONE -from redactor.fields import RedactorField - -from lms.tools import random_string, str_shielding - - -def mail_access_token(): - pass class MailTemplate(models.Model): - key = models.CharField(verbose_name=u'Ключ шаблона', max_length=255, editable=False, blank=True) - title = models.CharField(verbose_name=u'Название шаблона', max_length=255) - text = models.TextField(verbose_name=u'Шаблон', default='', help_text='{TEXT} - Текст самого письма ' - '{DOMAIN} - Домен отправителя' - '{NAME} - Название компании,' - '{SUPPORT} - Почта поддержки,' - '{SUPPORT_PHONE} - Телефон поддержки') - - def __unicode__(self): - return u'%s' % self.title + title = models.CharField(verbose_name='Название шаблона', max_length=255) + text = models.TextField(verbose_name='Шаблон', default='') + kwarg = models.TextField(verbose_name='Пораметры для шаблона', default='') def __str__(self): return '%s' % self.title - def save(self, *args, **kwargs): - if not self.key: - self.key = random_string() - super(MailTemplate, self).save(*args, **kwargs) - class Meta: verbose_name = u'Шаблон письма' verbose_name_plural = u'Шаблоны писем' @@ -43,154 +21,21 @@ class MailTemplate(models.Model): class MailBox(models.Model): MAIL_STATUS = ( ('Q', 'На очереди'), - ('W', 'Ожидает даты доставки'), ('S', 'Отправлен'), ('E', 'Ошибка отправки'), ('D', 'Доставлен'), - ('F', 'Адресат не найден') + ('F', 'Ошибка доставки') ) - #token = models.CharField(verbose_name=u'Токен', max_length=255, default=mail_access_token, unique=True) - status = models.CharField(verbose_name=u'Статус письма', choices=MAIL_STATUS, default='Q', max_length=1) - custom = models.BooleanField(verbose_name=u'Кастомная обложка', default=False) - _to = models.EmailField(verbose_name=u'Почта') - queue_date = models.DateTimeField(verbose_name=u'Дата постановки задачи', default=datetime.datetime.now, - help_text=u'Если указать дату доставки, письмо будет ожидать времени своего ' - u'отправления') - error = models.CharField(verbose_name=u'Ошибка отправки', blank=True, default='', max_length=255) - sent_date = models.DateTimeField(verbose_name=u'Время отправки', blank=True, null=True, editable=False) - title = models.CharField(verbose_name=u'Заголовок письма', max_length=255) - text = models.TextField(verbose_name=u'Текст отправки', editable=False) - result = RedactorField(verbose_name=u'Вид письма', blank=True, default='') - _type = models.CharField(verbose_name=u'Тип письма', max_length=255, blank=True, default='') - template = models.CharField(verbose_name=u'Ключ шаблона письма', max_length=100, blank=True, default='') - - def __unicode__(self): - return u'%s %s' % (self._to, self.get_status_display()) + status = models.CharField(verbose_name='Статус письма', choices=MAIL_STATUS, default='Q', max_length=1) + send_to = models.EmailField(verbose_name='Почта') + error_text = models.TextField(verbose_name='Текст ошибки', blank=True) + sent_date = models.DateTimeField(verbose_name='Время отправки', default=datetime.datetime.now) + title = models.CharField(verbose_name='Заголовок письма', max_length=255) + text = models.TextField(verbose_name='Текст отправки', editable=False) def __str__(self): - return '%s %s' % (self._to, self.get_status_display()) - - def send_letter(self): - if not self.custom: - msg = EmailMessage(self.title, self.result, u'{1} <{0}>'.format(DEFAULT_FROM_EMAIL, NAME), - [self._to if not TESTING else TEST_EMAIL]) - msg.content_subtype = "html" - try: - msg.send() - except smtplib.SMTPDataError as e: - self.status = 'E' - self.error = e - else: - self.sent_date = datetime.datetime.now() - self.status = 'S' - else: - try: - send_mail( - self.title, - '', - u'{1} <{0}>'.format(DEFAULT_FROM_EMAIL, NAME), - [self._to], - fail_silently=True, - html_message=self.result - ) - except smtplib.SMTPDataError as e: - self.status = 'E' - self.error = e - - # Иногда письма о счетах, которые идут нашим манагерам попадают в спам - # Добавил проверку на этот случай. Пусть еще разок попробуют - if self.error[0:54] == "(554, b'5.7.1 Message rejected under suspicion of SPAM": - self.status = 'Q' - - else: - self.sent_date = datetime.datetime.now() - self.status = 'S' - self.save() - - def save(self, *args, **kwargs): - if not self.result: - template = u'' \ - u'' \ - u'' \ - u'' \ - u'' \ - u'' \ - u'' \ - u'{TEXT}' \ - u'' \ - u'' \ - u'' \ - u'
    С уважением,
    {NAME}
    Пожалуйста, по любым вопросам смело пишите на {SUPPORT}
    ' \ - u'' \ - u'' - if self.template: - try: - _tmp = MailTemplate.objects.get(key=self.template) - except MailTemplate.DoesNotExists: - pass - else: - template = str_shielding(_tmp.text, ['{TEXT}', '{DOMAIN}', '{NAME}', '{SUPPORT}', '{SUPPORT_PHONE}']) - self.result = template.format(**{'TEXT': self.text, 'DOMAIN': DOMAIN, 'NAME': NAME, 'SUPPORT': SUPPORT, 'SUPPORT_PHONE': SUPPORT_PHONE}) - else: - self.custom = True - - super(MailBox, self).save(*args, **kwargs) - - class Meta: - verbose_name = u'Письмо' - verbose_name_plural = u'Письма' - - -class Sms(models.Model): - STAT = ( - ('S', 'Отправляется'), - ('F', 'Отправлен'), - ('E', 'Ошибка отправления') - ) - FROM = ( - ('T', 'Tocka Koda'), - ('C', 'CODEMY.RU') - ) - sent = models.BooleanField(verbose_name=u'Отправить', default=False, editable=False) - _to = models.CharField(verbose_name=u'Получатель', max_length=255, help_text='+79660497379') - _status = models.CharField(verbose_name=u'Статус сообщения', max_length=1, default='S', choices=STAT, - editable=False) - date = models.DateTimeField(verbose_name=u'Дата отправки', default=datetime.datetime.now, - help_text='Не дальше 7ми дней') - text = models.TextField(verbose_name=u'Текст') - _from = models.CharField(verbose_name=u'Отправитель', max_length=1, default='C', choices=FROM) - error = models.TextField(verbose_name=u'Описание отправки', blank=True, null=True, editable=False) - debug = models.CharField(verbose_name=u'Строка запроса', max_length=255, blank=True) - - def __unicode__(self): - return u'%s %s %s' % (self._to, self._status, self.text) - - def save(self, *args, **kwargs): - #if not self.sent: - # try: - - # url = "http://sms.ru/sms/send" - # values = {'api_id': SMS, 'to': self._to, 'text': self.text.encode('utf-8'), - # 'from': self.get__from_display(), 'time': str(time.mktime(self.date.timetuple()))[:10]} - # data = urllib.urlencode(values) - # self.debug = url - # req = urllib2.Request(url, data) - # res = urllib2.urlopen(req) - # except urllib2.URLError as errstr: - # self.error = errstr - # self._status = 'E' - # else: - # sr = res.read().splitlines() - # if sr is not None and int(sr[0]) == 100: - # self._status = 'F' - - # if sr is not None and int(sr[0]) != 100: - # self._status = 'E' - # self.error = servicecodes[int(sr[0])] - # self.sent = True - - super(Sms, self).save(*args, **kwargs) + return '%s %s' % (self.send_to, self.get_status_display()) class Meta: - verbose_name = u'СМС' - verbose_name_plural = u'СМС' + verbose_name = 'Письмо' + verbose_name_plural = 'Письма' \ No newline at end of file diff --git a/service/tools.py b/service/tools.py deleted file mode 100755 index b536203..0000000 --- a/service/tools.py +++ /dev/null @@ -1,20 +0,0 @@ -# coding=utf-8 -servicecodes = { - 100: "Сообщение принято к отправке. На следующих строчках вы найдете идентификаторы отправленных сообщений в том же порядке, в котором вы указали номера, на которых совершалась отправка.", - 200: "Неправильный api_id", - 201: "Не хватает средств на лицевом счету", - 202: "Неправильно указан получатель", - 203: "Нет текста сообщения", - 204: "Имя отправителя не согласовано с администрацией", - 205: "Сообщение слишком длинное (превышает 8 СМС)", - 206: "Будет превышен или уже превышен дневной лимит на отправку сообщений", - 207: "На этот номер (или один из номеров) нельзя отправлять сообщения, либо указано более 100 номеров в списке получателей", - 208: "Параметр time указан неправильно", - 209: "Вы добавили этот номер (или один из номеров) в стоп-лист", - 210: "Используется GET, где необходимо использовать POST", - 211: "Метод не найден", - 220: "Сервис временно недоступен, попробуйте чуть позже.", - 300: "Неправильный token (возможно истек срок действия, либо ваш IP изменился)", - 301: "Неправильный пароль, либо пользователь не найден", - 302: "Пользователь авторизован, но аккаунт не подтвержден (пользователь не ввел код, присланный в регистрационной смс)", -} diff --git a/service/urls.py b/service/urls.py deleted file mode 100644 index 5c6efcb..0000000 --- a/service/urls.py +++ /dev/null @@ -1,6 +0,0 @@ -from management import api, views, reports -from django.conf.urls import url - -urlpatterns = [ - url(r'mail/([0-9]{1,99})$', views.news), -] diff --git a/service/views.py b/service/views.py deleted file mode 100755 index c60c790..0000000 --- a/service/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. diff --git a/storage/admin.py b/storage/admin.py index 8bf0dce..a2561c2 100755 --- a/storage/admin.py +++ b/storage/admin.py @@ -1,24 +1,4 @@ from django.contrib import admin -from storage.models import FormatIndex, Storage, CroppedImage +from storage.models import Storage - -class FormatIndexAdmin(admin.ModelAdmin): - list_display = ('name', ) - - -admin.site.register(FormatIndex, FormatIndexAdmin) - - -class StorageAdmin(admin.ModelAdmin): - list_display = ('key', 'name', 'loaded', 'original', ) - search_fields = ['key', 'name'] - - -admin.site.register(Storage, StorageAdmin) - - -class CroppedImageAdmin(admin.ModelAdmin): - list_display = ('original', 'big', 'middle', 'small', 'cropped') - - -admin.site.register(CroppedImage, CroppedImageAdmin) \ No newline at end of file +admin.site.register(Storage) \ No newline at end of file diff --git a/storage/files_api.py b/storage/files_api.py deleted file mode 100755 index a7accea..0000000 --- a/storage/files_api.py +++ /dev/null @@ -1,242 +0,0 @@ -# coding=utf-8 -from PIL import Image -import os -from django.core.files.base import File -from access.models import User -from lms import settings -from lms.decors import api_decor -from lms.tools import translit -from storage.models import Storage, CroppedImage, FormatIndex - -IMAGE_TMP = settings.MEDIA_ROOT + settings.PERSONAL_FILES - - -def save_gif(pil_img, path): - if 'transparency' in pil_img.info: - transparency = pil_img.info['transparency'] - pil_img.save(path, 'GIF', transparency=transparency) - else: - pil_img.save(path, 'GIF') - - -def save_resize_image(filename, pil_img, save_field, file_format): - temp_image = open(os.path.join(IMAGE_TMP, filename), 'wb') - if file_format.upper() == 'GIF': - save_gif(pil_img, temp_image) - else: - pil_img.save(temp_image, file_format) - thumb_data = open(os.path.join(IMAGE_TMP, filename), 'rb') - thumb_file = File(thumb_data) - save_field.save(str(filename) + '.' + file_format, thumb_file) - - -def local_get_current_image_clip_id(obj_in, id_in, need_object=False): - result = {'code': True, 'object': None, 'response': ''} - - try: - if obj_in == 'avatar': - result['response'], result['object'] = User.objects.get(id=id_in).avatar, \ - User.objects.get(id=id_in) if need_object else '' - - else: - result['code'] = False - result['response'] = u'Объект не найден' - - except: - result['code'] = False - result['response'] = u'ID не ссылается на существующий объект %s' % obj_in - - return result - - -@api_decor(without_auth=True, need_keys=['key', 'type_in'], check_request=True) -def check_file_load(request, context): - context['code'] = '0' - type_in = request.GET['type_in'] - try: - original = Storage.objects.get(key=request.GET['key'], loaded=True, error=False) - except Storage.DoesNotExist: - context['code'] = '0' - else: - if type_in == 'loaded': - context['code'] = '1' - elif type_in == 'croped': - if CroppedImage.objects.filter(original=original, cropped=True).exists(): - context['code'] = '1' - return context - - -@api_decor(without_auth=True, need_keys=['key'], check_request=True) -def check_file_error(request, context): - context['code'] = '0' - if Storage.objects.filter(key=request.GET['key'], error=True).exists(): - context['code'] = '1' - return context - - -@api_decor(without_auth=True, need_keys=['key'], check_request=True) -def get_image_url(request, context): - context['code'] = '1' - try: - file_in = Storage.objects.get(key=request.GET['key']) - except Storage.DoesNotExist: - context['code'] = '0' - context['response'] = u'Такого файла не существует' - else: - type_in = '' - if request.GET.get('type_in'): - type_in = request.GET['type_in'] - context['data'] = file_in.get_url(type_in) - return context - - -@api_decor(without_auth=True, need_keys=['obj', 'id'], check_request=True) -def get_current_image_clip_id(request, context): - obj_in = request.GET['obj'] - id_in = request.GET['id'] - result = local_get_current_image_clip_id(obj_in, id_in) - - if result['code']: - context['code'] = '1' - context['data'] = result['response'] - else: - context['code'] = '0' - context['response'] = result['response'] - - return context - - -@api_decor(without_auth=True, need_keys=['obj', 'id'], check_request=True) -def del_image(request, context): - clip_data = local_get_current_image_clip_id(request.GET['obj'], request.GET['id'], need_object=True) - - if clip_data['code']: - context['code'] = '1' - try: - Storage.objects.get(key=clip_data['response']).delete() - except Storage.DoesNotExist: - pass - clip_data['object'].clean_image() - - else: - context['response'] = clip_data['response'] - context['code'] = '0' - - return context - - -@api_decor(without_auth=True, need_keys=['key'], method='GET', check_request=True) -def get_file_sketch(request, context): - try: - __file = Storage.objects.get(key=request.GET['key']) - except Storage.DoesNotExist: - context['code'] = '0' - else: - context['code'] = '1' - context['data'] = {'icon': __file.f_format.icon_class, 'name': __file.get_name_for_user(), 'file_name': __file.get_file_name()} - return context - - -@api_decor(without_auth=True, need_keys=['clip_file_id'], method='POST', check_request=True) -def upload_files(request, context): - min_size = ((256), (256)) - if request.FILES.get('file_load'): - file_name = request.FILES['file_load'].name - file_in = Storage.objects.create(key=request.POST['clip_file_id']) - file_in.original.save(translit(file_name).lower(), File(request.FILES['file_load'])) - try: - file_in.f_format = FormatIndex.objects.get(name=str(file_in.original.name.split('.')[1]).upper()) - except FormatIndex.DoesNotExist: - file_in.f_format = FormatIndex.objects.get(name='*') - else: - file_in.save() - file_in.loaded = True - file_in.save() - - elif request.FILES.get('file'): - file_name = request.FILES['file'].name - file_in = Storage.objects.create(key=request.POST['clip_file_id']) - file_in.original.save(translit(file_name).lower(), File(request.FILES['file'])) - - try: - file_in.f_format = FormatIndex.objects.get(name=str(file_in.original.name.split('.')[1]).upper()) - except FormatIndex.DoesNotExist: - file_in.f_format = FormatIndex.objects.get(name='*') - else: - file_in.save() - - if file_in.f_format.f_type == 'I': - im = Image.open(file_in.original.path) - size = im.size - file_path = file_in.original.path - if size < min_size: - context['code'] = '0' - file_in.error = True - file_in.save() - context['response'] = u'Минимальный размер изображения %sx%s' % (min_size[0], min_size[1]) - else: - im.thumbnail((640, 600), Image.ANTIALIAS) - if size != im.size: - if str(file_in.original.name.split('.')[1]).upper() == 'GIF': - save_gif(im, file_path) - else: - im.save(file_path) - file_in.loaded = True - file_in.save() - context['code'] = '1' - else: - file_in.loaded = True - file_in.save() - return context - - -@api_decor(without_auth=True, check_request=True, need_keys=['x', 'x1', 'y', 'y1', 'w', 'h', 'clip_id']) -def crop_image(request, context): - small = (50, 50) - middle = (100, 100) - big = (256, 256) - x = int(request.GET['x']) - x1 = int(request.GET['x1']) - y = int(request.GET['y']) - y1 = int(request.GET['y1']) - w = int(request.GET['w']) - h = int(request.GET['h']) - clip_ip = request.GET['clip_id'] - file_format = '' - try: - original = Storage.objects.get(key=clip_ip, loaded=True) - except Storage.DoesNotExist: - context['code'] = '0' - context['response'] = u'Файла не существует' - else: - file_format = str(original.original.name.split('.')[1]) - file_format = 'jpeg' if file_format == 'jpg' else file_format - - im1 = Image.open(original.original.path) - im = im1.crop((x, x1, y, y1)) - im.info = im1.info - if file_format.upper() == 'GIF': - save_gif(im, original.original.path) - else: - im.save(original.original.path, file_format) - - im = Image.open(original.original.path) - - croped_im = CroppedImage.objects.get(original=original) - big_img = im.copy() - big_img.thumbnail(big, Image.ANTIALIAS) - save_resize_image(clip_ip+'_big', big_img, croped_im.big, file_format) - - middle_img = im.copy() - middle_img.thumbnail(middle, Image.ANTIALIAS) - save_resize_image(clip_ip+'_middle', middle_img, croped_im.middle, file_format) - - small_img = im.copy() - small_img.thumbnail(small, Image.ANTIALIAS) - save_resize_image(clip_ip+'_small', small_img, croped_im.small, file_format) - - if croped_im.big and croped_im.middle and croped_im.small: - context['code'] = '1' - croped_im.cropped = True - croped_im.save() - return context diff --git a/storage/migrations/0001_initial.py b/storage/migrations/0001_initial.py old mode 100755 new mode 100644 index 57601d0..9c5d023 --- a/storage/migrations/0001_initial.py +++ b/storage/migrations/0001_initial.py @@ -1,71 +1,27 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-03-18 16:46 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone -import storage.models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='CroppedImage', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('big', models.ImageField(blank=True, null=True, upload_to=b'personal_files', verbose_name='\u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435')), - ('middle', models.ImageField(blank=True, null=True, upload_to=b'personal_files', verbose_name='\u0421\u0440\u0435\u0434\u043d\u0435\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435')), - ('small', models.ImageField(blank=True, null=True, upload_to=b'personal_files', verbose_name='\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435')), - ('cropped', models.BooleanField(default=False, verbose_name='\u041e\u0431\u0440\u0435\u0437\u0430\u043d')), - ], - options={ - 'verbose_name': '\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430', - 'verbose_name_plural': '\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0438', - }, - ), - migrations.CreateModel( - name='FormatIndex', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('f_type', models.CharField(choices=[(b'F', b'FILE'), (b'I', b'IMAGE')], default=b'F', max_length=1, verbose_name='\u0422\u0438\u043f \u0444\u0430\u0439\u043b\u0430')), - ('name', models.CharField(max_length=255, verbose_name='\u0424\u043e\u0440\u043c\u0430\u0442')), - ('description', models.CharField(default=b'', max_length=255, verbose_name='\u0418\u043c\u044f')), - ('icon', models.ImageField(blank=True, upload_to=b'formatindex', verbose_name='\u0418\u043a\u043e\u043d\u043a\u0430')), - ('icon_class', models.CharField(blank=True, max_length=255, verbose_name='\u0418\u043a\u043e\u043d\u043a\u0430')), - ], - options={ - 'verbose_name': '\u0424\u043e\u0440\u043c\u0430\u0442', - 'verbose_name_plural': '\u0418\u043d\u0434\u0435\u043a\u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432', - }, - ), - migrations.CreateModel( - name='Storage', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('loaded', models.BooleanField(default=False, verbose_name='\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e')), - ('name', models.CharField(blank=True, default=b'', max_length=255, verbose_name='\u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430')), - ('key', models.CharField(blank=True, max_length=255, null=True, unique=True, verbose_name='\u041a\u043b\u044e\u0447\u044c \u0444\u0430\u0439\u043b\u0430')), - ('original', models.FileField(upload_to=storage.models.PathAndRename(b'personal_files'), verbose_name='\u0424\u0430\u0439\u043b')), - ('description', models.TextField(blank=True, default=b'', verbose_name='\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u0444\u0430\u0439\u043b\u0430\u043c')), - ('date', models.DateTimeField(default=django.utils.timezone.now, verbose_name='\u0414\u0430\u0442\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438')), - ('error', models.BooleanField(default=False, verbose_name='\u041e\u0448\u0438\u0431\u043a\u0430')), - ('f_format', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='storage.FormatIndex', verbose_name='\u0424\u043e\u0440\u043c\u0430\u0442 \u0444\u0430\u0439\u043b\u0430')), - ], - options={ - 'verbose_name': '\u0424\u0430\u0439\u043b', - 'verbose_name_plural': '\u0424\u0430\u0439\u043b\u044b', - }, - ), - migrations.AddField( - model_name='croppedimage', - name='original', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='storage.Storage', verbose_name='\u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b'), - ), - ] +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2017-10-13 11:18 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Storage', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('original', models.FileField(upload_to='files', verbose_name='Файл')), + ], + options={ + 'verbose_name': 'Файл', + 'verbose_name_plural': 'Файлы', + }, + ), + ] diff --git a/storage/migrations/0002_auto_20160831_1638.py b/storage/migrations/0002_auto_20160831_1638.py deleted file mode 100644 index 550061b..0000000 --- a/storage/migrations/0002_auto_20160831_1638.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.3 on 2016-08-31 16:38 -from __future__ import unicode_literals - -from django.db import migrations, models -import storage.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('storage', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='croppedimage', - name='big', - field=models.ImageField(blank=True, null=True, upload_to='personal_files', verbose_name='Большое изображение'), - ), - migrations.AlterField( - model_name='croppedimage', - name='middle', - field=models.ImageField(blank=True, null=True, upload_to='personal_files', verbose_name='Среднее изображение'), - ), - migrations.AlterField( - model_name='croppedimage', - name='small', - field=models.ImageField(blank=True, null=True, upload_to='personal_files', verbose_name='Маленькое изображение'), - ), - migrations.AlterField( - model_name='formatindex', - name='description', - field=models.CharField(default='', max_length=255, verbose_name='Имя'), - ), - migrations.AlterField( - model_name='formatindex', - name='f_type', - field=models.CharField(choices=[('F', 'FILE'), ('I', 'IMAGE')], default='F', max_length=1, verbose_name='Тип файла'), - ), - migrations.AlterField( - model_name='formatindex', - name='icon', - field=models.ImageField(blank=True, upload_to='formatindex', verbose_name='Иконка'), - ), - migrations.AlterField( - model_name='storage', - name='description', - field=models.TextField(blank=True, default='', verbose_name='Дополнение к файлам'), - ), - migrations.AlterField( - model_name='storage', - name='name', - field=models.CharField(blank=True, default='', max_length=255, verbose_name='Имя файла'), - ), - migrations.AlterField( - model_name='storage', - name='original', - field=models.FileField(upload_to=storage.models.PathAndRename('personal_files'), verbose_name='Файл'), - ), - ] diff --git a/storage/models.py b/storage/models.py index 2685ea6..2581d7d 100755 --- a/storage/models.py +++ b/storage/models.py @@ -1,189 +1,13 @@ # encoding=utf-8 -import os -from PIL import Image -from uuid import uuid4 from django.db import models -from lms import settings -from lms.settings import DOMAIN -from lms.tools import random_string -import django.utils.timezone -from django.core.files.base import File -from django.utils.deconstruct import deconstructible - - -@deconstructible -class PathAndRename(object): - - def __init__(self, sub_path): - self.path = sub_path - - def __call__(self, instance, filename): - ext = filename.split('.')[-1] - # set filename as random string - filename = '{}.{}'.format(uuid4().hex, ext) - # return the whole path to the file - return os.path.join(self.path, filename) - -path_and_rename = PathAndRename("personal_files") - - -class FormatIndex(models.Model): - FILETYPES = ( - ('F', 'FILE'), - ('I', 'IMAGE') - ) - f_type = models.CharField(verbose_name=u'Тип файла', choices=FILETYPES, max_length=1, default='F') - name = models.CharField(verbose_name=u'Формат', max_length=255) - description = models.CharField(verbose_name=u'Имя', max_length=255, default='') - icon = models.ImageField(verbose_name=u'Иконка', upload_to='formatindex', blank=True) - icon_class = models.CharField(verbose_name=u'Иконка', max_length=255, blank=True) - - def __unicode__(self): - return u'%s' % self.name - - def __str__(self): - return '%s' % self.name - - class Meta: - verbose_name = u'Формат' - verbose_name_plural = u'Индекс форматов' class Storage(models.Model): - loaded = models.BooleanField(verbose_name=u'Загруженно', default=False) - name = models.CharField(verbose_name=u'Имя файла', max_length=255, blank=True, default='') - key = models.CharField(verbose_name=u'Ключь файла', max_length=255, null=True, unique=True, blank=True) - original = models.FileField(verbose_name=u'Файл', upload_to=path_and_rename) - f_format = models.ForeignKey(FormatIndex, verbose_name=u'Формат файла', blank=True, null=True) - description = models.TextField(verbose_name=u'Дополнение к файлам', default='', blank=True) - date = models.DateTimeField(verbose_name=u'Дата загрузки', default=django.utils.timezone.now) - error = models.BooleanField(verbose_name=u'Ошибка', default=False) - - def __unicode__(self): - return u'%s' % self.name + original = models.FileField(verbose_name=u'Файл', upload_to="files") def __str__(self): - return '%s' % self.name - - def save(self, *args, **kwargs): - if self.original: - if not self.f_format: - try: - self.f_format = FormatIndex.objects.get(name=str(self.original.name.split('.')[1]).upper()) - except FormatIndex.DoesNotExist: - self.f_format = FormatIndex.objects.get(name='*') - - if not self.name: - self.name = str(self.original.name.split('.')[0].encode('utf-8')) - - if not self.key: - self.key = random_string().upper() - super(Storage, self).save(*args, **kwargs) - - def get_name_for_user(self): - return self.name if self.name else self.f_format.description - - def get_file_name(self): - return self.original.name.split('/')[1] - - def get_url(self, type_in): - if self.f_format.f_type == 'F': - return self.original.url - - elif self.f_format.f_type == 'I': - try: - file_ = CroppedImage.objects.get(original=self) - except CroppedImage.DoesNotExist: - file_ = CroppedImage.objects.create(original=self) - - if type_in: - if type_in == 'big' or type_in == 'middle' or type_in == 'small': - if not file_.big or not file_.middle or not file_.small: - fix_crop(file_) - return file_.get_cart(type_in) - else: - return '{0}{1}'.format(DOMAIN, self.original.url) - - return '{0}{1}'.format(DOMAIN, self.original.url) + return '%s' % self.original class Meta: verbose_name = u'Файл' - verbose_name_plural = u'Файлы' - - -class CroppedImage(models.Model): - original = models.ForeignKey('Storage', verbose_name=u'Оригинал') - big = models.ImageField(verbose_name=u'Большое изображение', upload_to='personal_files', blank=True, null=True) - middle = models.ImageField(verbose_name=u'Среднее изображение', upload_to='personal_files', blank=True, null=True) - small = models.ImageField(verbose_name=u'Маленькое изображение', upload_to='personal_files', blank=True, null=True) - cropped = models.BooleanField(verbose_name=u'Обрезан', default=False) - - def __unicode__(self): - return u'%s' % self.original.key - - def __str__(self): - return '%s' % self.original.key - - def get_cart(self, type_in): - if type_in == 'big': - return self.big.url - elif type_in == 'middle': - return self.middle.url - elif type_in == 'small': - return self.small.url - - class Meta: - verbose_name = u'Картинка' - verbose_name_plural = u'Картинки' - - -IMAGE_TMP = settings.MEDIA_ROOT + settings.PERSONAL_FILES - - -def save_resize_image(filename, pil_img, save_field, file_format): - temp_image = open(os.path.join(IMAGE_TMP, filename), 'wb') - if file_format.upper() == 'GIF': - save_gif(pil_img, temp_image) - else: - pil_img.save(temp_image, file_format) - thumb_data = open(os.path.join(IMAGE_TMP, filename), 'rb') - thumb_file = File(thumb_data) - save_field.save(filename + '.' + file_format, thumb_file) - - -def save_gif(pil_img, path): - if 'transparency' in pil_img.info: - transparency = pil_img.info['transparency'] - pil_img.save(path, 'GIF', transparency=transparency) - else: - pil_img.save(path, 'GIF') - - -def fix_crop(crop): - if not crop.cropped or not crop.big or not crop.middle or not crop.small: - clip_ip = crop.original.key - small = (50, 50) - middle = (100, 100) - big = (256, 256) - file_format = str(crop.original.original.name.split('.')[1]) - file_format = 'jpeg' if file_format == 'jpg' else file_format - im = Image.open(crop.original.original.path) - - if not crop.big: - big_img = im.copy() - big_img.thumbnail(big, Image.ANTIALIAS) - save_resize_image(clip_ip+'_big', big_img, crop.big, file_format) - - if not crop.middle: - middle_img = im.copy() - middle_img.thumbnail(middle, Image.ANTIALIAS) - save_resize_image(clip_ip+'_middle', middle_img, crop.middle, file_format) - - if not crop.small: - small_img = im.copy() - small_img.thumbnail(small, Image.ANTIALIAS) - save_resize_image(clip_ip+'_small', small_img, crop.small, file_format) - - if crop.big and crop.middle and crop.small: - crop.cropped = True - crop.save() + verbose_name_plural = u'Файлы' \ No newline at end of file diff --git a/stud.txt b/stud.txt deleted file mode 100644 index 9ba59a5..0000000 --- a/stud.txt +++ /dev/null @@ -1,127 +0,0 @@ -Жиров Олег, niozuki@mail.ru, 5016 -Лавриненко Светлана, svelavs@gmail.com, 4648 -Санжар Суршанов, sanzharsurshanov@gmail.com, 4749 -Моторина Екатерина, katepainter@yandex.ru, 4424 -Белонович Гаянэ, gb.gayane@gmail.com, 4747 -Злобин Иван, baho9208@mail.ru, 4569 -Киселев Сергей, kiselev_s_l@mail.ru, 5307 -Мокичев Дмитрий, dmokichev@gmail.com, 5941 -Якухина Кира, kira.yakuhina@gmail.com, 4917 -Кулаев Виктор, geiz@yandex.ru, 4795 -Зайидова Aнна, annazayidova@gmail.com, 5039 -Демосюк Екатерина, ekde@wide-web.spb.ru, 5593 -Анастасова Светлана, zvetaan@gmail.com, 4751 -Киосов Георгий, goha@kiosov.com, 5240 -Мирзаева Кира, jalalovna@yandex.ru, 5687 -Донцов Александр, alex.dntv@gmail.com, 4659 -Попов Александр, ap@ds-p.ru, 5362 -Жоламанов Айдар, pobiz@inbox.ru, 4632 -Ковальская Станислава, skovalska@mail.ru, 5597 -Исаев Дмитрий, wrusha@yandex.ru, 4634 -Павлов Иван, pavlov@complexsys.ru, 5069 -Жарков Александр, alexzarkov@gmail.com, 5657 -Тихонов Александр, 9330733@mail.ru, 4865 -Залисский Артем, artemzig@gmail.com, 6030 -Тмур Антон, anton.tmur@gmail.com, 5877 -Масленников Михаил, mmaslennikov@mail.ru, 5510 -Пешинский Евгений, jack@creo.od.ua, 5930 -Тухачевский Дмитрий, tuhachevski@gmail.com, 5911 -Копачинский Константин, fazeful@gmail.com, 6115 -Рыжков Антон, tonyavec@gmail.com, 6029 -Сипатов Андрей, madjaw@mail.ru, 296 -Литвин Максим, corpas@gmail.com, 4730 -Шульга Игорь, ishulga86@gmail.com, 5600 -Макаров Алексей, avmakarov@asuproject.ru, 6122 -Фадеева Елена, alpha5@yandex.ru, 5926 -Палий Нина, slavinanm@gmail.com, 6117 -Портнова Оксана, portnova.ok@yandex.ru, 5947 -Копылова Христиана, blood4085@inbox.ru, 6037 -Галин Олег, ogalin@aevrika.ru, 5932 -Богданова Евгения, egysakova@gmail.com, 5945 -Дёмушкин Виктор, dinozavrix@gmail.com, 5610 -Бодров Илья, feyorz@gmail.com, 4652 -Махаева Василиса, kornblumchen@yandex.ru, 5756 -Трунова Ольга , trunovaon@gmail.com, 5759 -Аплемах Антон, a@cdnvideo.ru, 6034 -Павлов Алексей, kronos2k4@gmail.com, 4514 -Манасян Георгий, gsm_elst@rambler.ru, 5939 -Umnikov Aleksandr Сергеевич, strife88@mail.ru, 5919 -Самородова Анастасия, polgolovy@gmail.com, 4736 -Лемтюгова Катерина, lemma.ka@gmail.com, 4900 -Свинин Александр Александрович, alexandersvinin@gmail.com, 4541 -Поздняков Александр Сергеевич, alexpozdnyakof@gmail.com, 5459 -Климов Василий, vklimovs@mail.ru, 6047 -Воротникова Алена, alvo_05@mail.ru, 4742 -Аникьев Ян, yanchus@mail.ru, 6041 -Энч Андрей, captainanch@ya.ru, 5936 -Вусс Ольга, lesiawuss@gmail.com, 6619 -Крюков Денис, denis.kryukov@cyberiada.com, 5976 -Пастухова Екатерина, k-pastukhova@yandex.ru, 6832 -Кубасова Екатерина, cat.kubasova@yandex.ru, 6136 -Сутырина Евгения, jeneva7@gmail.com, 6965 -Вычик Павел, pavelvch@gmail.com, 7033 -Семашко Эдуард, info@darneo.ru, 5584 -Брюханов Денис, denisbryuhanov@gmail.com, 6962 -Плахов Павел, pplahov@gmail.com, 6775 -Подгорный Евгений, sonicmails@yandex.ru, 6977 -Пионтковская Наталья, pnz_08@mail.ru, 5977 -Ганина Ольга, onimfa@mail.ru, 6867 -Коробицин Иван, korobajr@ya.ru, 5504 -Денисов Владимир, dv@ilab.kz, 6208 -Pavlovska Anastasiia, 702752@gmail.com, 5363 -Карпов Александр Юрьевич, ikarp84@gmail.com, 6646 -Афанасьев Ярослав, ya@rl.ru, 6633 -Скробот Алексей, alekseyskrobot@gmail.com, 6942 -K Sergey, 1ngeneer@mail.ru, 6032 -Мельбурн Саша, sasha.melbourne@gmail.com, 5540 -Гулин Евгений, gulin@labizum.ru, 4759 -Литвин Артем, artemich92@mail.ru, 6779 -Киреичев Игорь, wm5soft@gmail.com, 6061 -Степанов Александр, alexsteptlt@mail.ru, 6616 -Кропанев Женя, kropev@rarus.ru, 4757 -Курылев Константин, cooryliof@gmail.com, 6241 -Казарова Елена, strekozka_l@mail.ru, 8207 -Епифанов Павел, pae1@europlan.ru, 6471 -Долженков Роман, tooob52@gmail.com, 6976 -Антоневич Алексей, atree2010@gmail.com, 7169 -Burchilina Maria, merabella00@yandex.ru, 7770 -Агарзаева Марина, agarzaeva@yandex.ru, 6939 -Сидоренко Илья , ilya@iskros.com, 7564 -Китов Владислав, vlkitov@gmail.com, 6038 -Репкин Антон, tingmann@gmail.com, 5943 -Протасевич Андрей, torus.andrey@gmail.com, 6062 -Велькин Андрей, wellkin@gmail.com, 5974 -Савченко Игорь, neo-quake@yandex.ru, 6752 -Ромаметьева Евгения, zhenyusya14@gmail.com, 6063 -Щербакова Ольга, olga@adt.ru, 7769 -Пашкевич Алексей , aplusp@yandex.ru, 6328 -Бурунин Игорь, burunin@gmail.com, 7974 -Боев Максим, skp_15@mail.ru, 6966 -Сухоставская Алла, alla.sukhostavskaya@gmail.com, 6739 -Шашкова Ольга, shashnia@gmail.com, 7007 -Малахова Екатерина, kononenko.e.p@gmail.com, 6312 -Саросек Михаил, sarosekml@yandex.ru, 7026 -Царенко Илья, itsarenko@gmail.com, 6724 -Соловьева Анна, miragann@gmail.com, 7656 -Дементьев Сергей, ldvmake@gmail.com, 8219 -Борисова Ирина, i.k.borisova@gmail.com, 8362 -Макеев Сергей , makini@ya.ru, 8313 -Гук Антон, anton.m.gook@gmail.com, 8031 -Колмогоров Дмитрий, kitt.diz@gmail.com, 7217 -Фомина Елена, efomina@msk.vtb.ru, 6120 -Назарова Евгения, nazarova-evg@yandex.ru, 7666 -Сергиенко Ольга Александровна , jayalila108@mail.ru, 7275 -Зарипов Алмаз, almazzar@gmail.com, 9381 -Ахкямова Эльвира, juniperland@gmail.com, 4929 -Рубцова Ирина, beruchie@yandex.ru, 6968 -Багаммаева Мадина, galadriel2007@mail.ru, 6951 -Четвериков Юрий, yuriy.chetverikov@gmail.com, 7168 -Маклакова Мария, tuna1706@yandex.ru, 6580 -Монаков Евгений, fridays365@gmail.com, 8637 -Прохоров Алексей, alex@space-o.ru, 6436 -Зайцев Никита, nickzaytzev@gmail.com, 6635 -Кожевников Андрей, helloandrei@mail.ru, 9536 -Лисивец Юрий Станиславович, lisivets@ya.ru, 7318 -Келемзина Софья, sofiakelemzina@gmail.com, 6204 -Зорина Алина, alinazoryna@gmail.com, 5973 -Кунакулов Ахнаф, axnaf@list.ru, 7733 diff --git a/supervisor-app.conf b/supervisor-app.conf deleted file mode 100644 index a593e08..0000000 --- a/supervisor-app.conf +++ /dev/null @@ -1,7 +0,0 @@ -[program:app-uwsgi] -command = /usr/local/bin/uwsgi --ini /code/uwsgi.ini -stopasgroup = true -killasgroup = true - -[program:cron] -command = cron -f diff --git a/uwsgi.ini b/uwsgi.ini deleted file mode 100644 index 62648ab..0000000 --- a/uwsgi.ini +++ /dev/null @@ -1,34 +0,0 @@ -[uwsgi] -# this config will be loaded if nothing specific is specified -# load base config from below -ini = :base - -# %d is the dir this configuration file is in -#socket = %dapp.sock -http = :80 -check-static = /code -buffer-size=32768 -master = true -processes = 10 - -[dev] -ini = :base -# socket (uwsgi) is not the same as http, nor http-socket -socket = :8001 - - -[local] -ini = :base -http = :8000 -# set the virtual env to use -#home=/Users/you/envs/env - - -[base] -# chdir to the folder of this config file, plus app/website -chdir = /code/ -# load the module from wsgi.py, it is a python path from -# the directory above. -module=lms.wsgi:application -# allow anyone to connect to the socket. This is very permissive -chmod-socket=666