Скинул все версии кода в 1 - в самом низу версия от bramabrama

remotes/origin/pm_task_31703
Baryshnikov Nikolay 9 years ago
parent c10cf257ef
commit 58750c88b5
  1. 18
      README.md
  2. 10
      _utils/check_journals.py
  3. 30
      _utils/check_lesson_open_near_homework.py
  4. 2
      _utils/open_lesson.py
  5. 0
      access/__init__.py
  6. 6
      access/admin.py
  7. 16
      access/api.py
  8. 0
      access/forms.py
  9. 0
      access/migrations/0001_initial.py
  10. 0
      access/migrations/0002_auto_20160405_2045.py
  11. 0
      access/migrations/0003_user_delay.py
  12. 0
      access/migrations/0004_auto_20160412_2152.py
  13. 0
      access/migrations/0005_auto_20160414_1527.py
  14. 0
      access/migrations/0006_user_delay_date.py
  15. 0
      access/migrations/0007_auto_20160414_1543.py
  16. 0
      access/migrations/0008_auto_20160414_1547.py
  17. 0
      access/migrations/0009_auto_20160414_1941.py
  18. 0
      access/migrations/0010_auto_20160414_1944.py
  19. 0
      access/migrations/0011_auto_20160420_1749.py
  20. 0
      access/migrations/0012_auto_20160420_1819.py
  21. 0
      access/migrations/0013_auto_20160421_1808.py
  22. 0
      access/migrations/0014_auto_20160421_1824.py
  23. 0
      access/migrations/0015_auto_20160421_1829.py
  24. 0
      access/migrations/0016_auto_20160421_2009.py
  25. 0
      access/migrations/0017_auto_20160421_2135.py
  26. 0
      access/migrations/0018_auto_20160422_1555.py
  27. 0
      access/migrations/0019_auto_20160424_1646.py
  28. 0
      access/migrations/0020_auto_20160506_1303.py
  29. 0
      access/migrations/0021_auto_20160509_1331.py
  30. 0
      access/migrations/0022_auto_20160509_1401.py
  31. 0
      access/migrations/0023_auto_20160509_1408.py
  32. 0
      access/migrations/0024_auto_20160509_1537.py
  33. 0
      access/migrations/0025_auto_20160509_1539.py
  34. 0
      access/migrations/0026_auto_20160509_1803.py
  35. 0
      access/migrations/0027_auto_20160510_1823.py
  36. 0
      access/migrations/0028_auto_20160526_1427.py
  37. 0
      access/migrations/0029_auto_20160526_1435.py
  38. 0
      access/migrations/0030_auto_20160526_1727.py
  39. 0
      access/migrations/0031_auto_20160531_1240.py
  40. 0
      access/migrations/0032_auto_20160601_1256.py
  41. 0
      access/migrations/0033_auto_20160607_1614.py
  42. 0
      access/migrations/0034_auto_20160607_2002.py
  43. 0
      access/migrations/0035_auto_20160607_2034.py
  44. 0
      access/migrations/0036_auto_20160607_2051.py
  45. 0
      access/migrations/0037_auto_20160608_1700.py
  46. 0
      access/migrations/0038_auto_20160608_1705.py
  47. 0
      access/migrations/0039_auto_20160608_1804.py
  48. 0
      access/migrations/0040_auto_20160608_1841.py
  49. 0
      access/migrations/0041_auto_20160609_1429.py
  50. 0
      access/migrations/0042_auto_20160609_1442.py
  51. 0
      access/migrations/0043_auto_20160609_1534.py
  52. 0
      access/migrations/0044_auto_20160609_1536.py
  53. 0
      access/migrations/0045_auto_20160609_1536.py
  54. 0
      access/migrations/0046_auto_20160609_1546.py
  55. 0
      access/migrations/0047_auto_20160609_1627.py
  56. 0
      access/migrations/0048_auto_20160609_2224.py
  57. 0
      access/migrations/0049_auto_20160628_1731.py
  58. 0
      access/migrations/0050_auto_20160711_1518.py
  59. 0
      access/migrations/0051_auto_20160713_2038.py
  60. 0
      access/migrations/0052_auto_20160718_1714.py
  61. 0
      access/migrations/0053_auto_20160718_1714.py
  62. 0
      access/migrations/0054_auto_20160725_1551.py
  63. 0
      access/migrations/0055_auto_20160809_1653.py
  64. 0
      access/migrations/0056_auto_20160809_1659.py
  65. 0
      access/migrations/0057_auto_20160810_1234.py
  66. 0
      access/migrations/0058_auto_20160814_1736.py
  67. 0
      access/migrations/0059_auto_20160815_1853.py
  68. 0
      access/migrations/0060_auto_20160815_1855.py
  69. 0
      access/migrations/__init__.py
  70. 4
      access/models.py
  71. 0
      access/out_api.py
  72. 0
      access/tasks.py
  73. 0
      access/teach_urls.py
  74. 0
      access/teach_views.py
  75. 0
      access/urls.py
  76. 0
      access/views.py
  77. 32
      configs/packs
  78. 0
      courses/__init__.py
  79. 0
      courses/admin.py
  80. 0
      courses/api.py
  81. 0
      courses/migrations/0001_initial.py
  82. 0
      courses/migrations/0002_achievementsmap.py
  83. 0
      courses/migrations/0003_auto_20160322_1852.py
  84. 0
      courses/migrations/0004_lesson_video_id.py
  85. 0
      courses/migrations/0005_auto_20160331_2030.py
  86. 0
      courses/migrations/0006_auto_20160407_2006.py
  87. 0
      courses/migrations/0007_lesson_video_date.py
  88. 0
      courses/migrations/0008_coursetheme_block.py
  89. 0
      courses/migrations/0009_remove_coursetheme_block.py
  90. 0
      courses/migrations/0010_remove_coursetheme_empty_description.py
  91. 0
      courses/migrations/0011_auto_20160425_1550.py
  92. 0
      courses/migrations/0012_course_diploma_key.py
  93. 0
      courses/migrations/0013_auto_20160425_1720.py
  94. 0
      courses/migrations/0014_diploma.py
  95. 0
      courses/migrations/0015_auto_20160425_1750.py
  96. 0
      courses/migrations/0016_auto_20160425_1752.py
  97. 0
      courses/migrations/0017_auto_20160426_1240.py
  98. 0
      courses/migrations/0018_remove_exam_icon.py
  99. 0
      courses/migrations/0019_remove_exam_title.py
  100. 0
      courses/migrations/0020_auto_20160426_1243.py
  101. Some files were not shown because too many files have changed in this diff Show More

@ -1,16 +1,8 @@
## Правила для разработчика #**INDIGO**
RLMS ( Real Learning Management System )
- Разрабока ведется в отдельном брэнче [http://go.skillbox.ru](http://go.skillbox.ru)
- После комита изменений можно проверить свою работу по следующему адресу: <branch_name>.lms.test.spicycms.com
- После проверки тестового сайта по имени брэнча, брэнч помечается к мерж реквесту
- Ответсвенный инженер производит код ревью и запускает/отклоняет мерж
- Если сайт запустился на демо сайте, код в ручом режиме можно обновить на продакшен сервере
### Замечания Барышников Н.Р.
- Мерж реквест лучше производить в ветку develop(чтобы исключить случайного обновления кода на демо сайте) **Наша задача** - построить гибкую систему обучения, предоставляющую возможность эффективно подстраиваться под нужны конкретного проекта обучения. Хранить и обрабатывать информацию об аудитории. Давать конструктивную и максимально приближенную к реальности оценку процессов проводимых в системе. Предоставлять возможность проведения экспериментов в обучении без ущерба для самого процесса. Необходимо реализовать в полной мере принцип модульности частей системы. Все процессы, проходимые через систему должны подчиняться общей политике безопасности. Административный интерфейс должен быть максимально упрощен, для быстрого и эффективного доступа к данным. Максимально интегрироваться с готовыми решениями имеющими косвенную выгоду для обучения непосредственно. Четко соблюдать прицип MVC при любых объемах. Контролировать полноценно работу на всех 3х уровнях. Собирать и хранить всю поступающую, уникальную информацию.
- Внимание! Разработчик обязан проверить работоспособность тестового сайта по имени созданного брэнча <branch_name>.lms.test.spicycms.com
- Если необходимы тестовые данные разработчик их подготавливает дополнительно
- Если нет возможности добавить тестовые данные в авто режиме, разработчик добавляет инструкцию в README файл по запуску необходимых команд
(Под тестовыми данными подразумеваются фикстуры)

@ -3,16 +3,20 @@ import os
import django import django
import sys import sys
import datetime import datetime
import os
start = datetime.datetime.now() start = datetime.datetime.now()
sys.path.append("/var/www/projects/codemy/") sys.path.append("/var/www/projects/codemy/")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup() django.setup()
os.system('python check_course_map.py')
os.system('python check_prices.py')
from lms.settings import BASE_DIR from lms.settings import BASE_DIR
from journals.models import TeacherJ, check_journal from journals.models import TeacherJ, check_journal
from lms.tools import show_progress from lms.tools import show_progress
os.system('python clean_twice_journals.py')
all = TeacherJ.objects.filter(progress__gt=0).count() all = TeacherJ.objects.filter(progress__gt=0).count()
print('Количество журналов на проверку: %s' % all) print('Количество журналов на проверку: %s' % all)
@ -29,6 +33,6 @@ for i in TeacherJ.objects.filter(progress__gt=0).order_by('-id'):
f = open(os.path.join(BASE_DIR, 'journals/check_switch'), 'w') f = open(os.path.join(BASE_DIR, 'journals/check_switch'), 'w')
f.write('0\n') f.write('0\n')
f.close() f.close()
os.system('python open_lesson.py')
finish = datetime.datetime.now() finish = datetime.datetime.now()
print('\nTIME: %s seconds' % (finish-start).seconds) print('\nTIME: %s seconds' % (finish-start).seconds)

@ -3,45 +3,33 @@ import os
import django import django
import sys import sys
import datetime import datetime
print(1)
start = datetime.datetime.now() start = datetime.datetime.now()
sys.path.append("/var/www/projects/codemy/") sys.path.append("/var/www/projects/codemy/")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup() django.setup()
print(2)
from courses.models import CourseMap from courses.models import CourseMap
from journals.models import TeacherJ, LessonJ, HomeworkJ, HomeworkTry, CourseThemeJ 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) for journal in TeacherJ.objects.filter(status='W').order_by('-id'):
if HomeworkTry.objects.filter(material__course__id=journal.course.id, student__id=journal.student.id).exists(): if HomeworkTry.objects.filter(parent__parent__parent=journal).exists():
print('4a')
hw = int(CourseMap.objects.get( hw = int(CourseMap.objects.get(
homework=HomeworkTry.objects.filter(parent__parent__parent=journal).order_by('id').last().material).sort) homework=HomeworkTry.objects.filter(parent__parent__parent=journal).order_by('id').last().material).sort)
print(hw) before = []
for i in LessonJ.objects.filter(parent__parent=journal): for i in LessonJ.objects.filter(parent__parent=journal):
if int(CourseMap.objects.get(lesson=i.material).sort) > hw: if int(CourseMap.objects.get(lesson=i.material).sort):
i.date = None i.date = None
i.f_date = None i.f_date = None
i.success = False i.success = False
i.save() i.save()
else: else:
try: i.saw_this()
i.saw_this()
except Exception as e:
print(e)
print(i)
for ct in CourseThemeJ.objects.filter(parent=journal): for ct in CourseThemeJ.objects.filter(parent=journal):
if LessonJ.objects.filter(parent=ct).count() == LessonJ.objects.filter(parent=ct, date=None).count(): if LessonJ.objects.filter(parent=ct).count() == LessonJ.objects.filter(parent=ct, date=None).count():
ct.date = None ct.date = None
ct.save() ct.save()
print(5) for i in HomeworkJ.objects.filter(f_date=None).exclude(date=None):
#for i in HomeworkJ.objects.filter(f_date=None).exclude(date=None): i.open_next()
# i.open_next()

@ -11,7 +11,7 @@ django.setup()
from journals.models import CourseMap, LessonJ, TeacherJ, HomeworkTry from journals.models import CourseMap, LessonJ, TeacherJ, HomeworkTry
from lms.tools import show_progress from lms.tools import show_progress
_NEED_OPEN = None#LessonJ.objects.get(material__id='684', student__email='alexandersvinin@gmail.com') _NEED_OPEN = LessonJ.objects.get(material__id='79', student__email='agar10@yandex.ru')
_TEACHERJ_FILTER = {'progress__gte': 0} _TEACHERJ_FILTER = {'progress__gte': 0}
_TEACHERJ_EXCLUDE = {'teacher': None} _TEACHERJ_EXCLUDE = {'teacher': None}

@ -49,17 +49,13 @@ class DocumentAdmin(admin.ModelAdmin):
class UserRequestAdmin(admin.ModelAdmin): class UserRequestAdmin(admin.ModelAdmin):
list_display = ('ip', 'user', 'count', 'date', ) list_display = ('ip', 'user', 'count', 'date', )
list_filter = ['date'] list_filter = ['date']
search_fields = ('ip', 'user__email', 'user__fname', 'user__name', 'user__oname',) search_fields = ('ip', 'user__email', 'user__fname', 'user__name', 'user__oname', 'user__id',)
class UserRequestDataAdmin(admin.ModelAdmin): class UserRequestDataAdmin(admin.ModelAdmin):
search_fields = ('row__ip', ) search_fields = ('row__ip', )
#class UserSyncAdmin(admin.ModelAdmin):
# list_display = ('user', 'source', 'dist', 'date', 'f_date', 'result',)
#admin.site.register(UserSync, UserSyncAdmin)
admin.site.register(UserRequest, UserRequestAdmin) admin.site.register(UserRequest, UserRequestAdmin)
admin.site.register(UserRequestData, UserRequestDataAdmin) admin.site.register(UserRequestData, UserRequestDataAdmin)
admin.site.register(Document, DocumentAdmin) admin.site.register(Document, DocumentAdmin)

@ -2,7 +2,7 @@
import datetime import datetime
from django.contrib import auth from django.contrib import auth
from django.http import Http404 from django.http import Http404
from access.models import User, Subscription, sent_registration from access.models import User, Subscription, sent_registration, UserRequest
from lms.decors import api_decor from lms.decors import api_decor
from lms.regex import check_email from lms.regex import check_email
from lms.tools import condition_factory, check_set_password from lms.tools import condition_factory, check_set_password
@ -195,7 +195,6 @@ def change_password(request, context):
user = User.objects.get(id=request.user.id) user = User.objects.get(id=request.user.id)
user.set_password(password1) user.set_password(password1)
user.save() user.save()
user._set_to_sync()
context['response'] = u'Пароль изменен. Авторизуйтесь используя новый пароль.' context['response'] = u'Пароль изменен. Авторизуйтесь используя новый пароль.'
context['code'] = '1' context['code'] = '1'
else: else:
@ -417,9 +416,16 @@ def auth_in(request, context):
user = auth.authenticate(email=email, password=request.POST.get('password')) user = auth.authenticate(email=email, password=request.POST.get('password'))
if user is not None: if user is not None:
context['code'] = '1' if user.block:
auth.login(request, user) context['code'] = '0'
user.set_request_data(request) 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: elif user is None:
context['response'] = u'По введенным данным пользователь не найден' context['response'] = u'По введенным данным пользователь не найден'

@ -122,6 +122,7 @@ class User(AbstractBaseUser):
) )
#sync = models.BooleanField(verbose_name=u'Синхронизирован', default=False) #sync = models.BooleanField(verbose_name=u'Синхронизирован', default=False)
#sync_date = models.DateTimeField(verbose_name=u'Дата постановки на синхронизацию', blank=True, null=True) #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 = 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='') 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) traf_source = models.ForeignKey('TrafHistory', verbose_name=u'Обращение', blank=True, null=True)
@ -180,6 +181,9 @@ class User(AbstractBaseUser):
super(User, self).save(*args, **kwargs) super(User, self).save(*args, **kwargs)
def get_ip_len(self):
UserRequest.objects.filter(user=self).count()
def set_request_data(self, request): def set_request_data(self, request):
ip = get_client_ip(request) ip = get_client_ip(request)
try: try:

@ -1,17 +1,17 @@
django==1.9.3 django==1.9.3
Pillow Pillow==3.3.0
psycopg2 psycopg2==2.6.2
simplejson simplejson==3.8.2
celery celery==3.1.23
django-celery django-celery==3.1.17
django-wysiwyg-redactor django-wysiwyg-redactor==0.4.9
raven raven==5.24.3
uwsgi uwsgi==2.0.13.1
flower flower==0.9.1
django-import-export django-import-export==0.4.5
python-dateutil python-dateutil==2.5.3
requests requests==2.11.0
ipython ipython==5.1.0
django-precise-bbcode django-precise-bbcode==1.2.6
html2bbcode html2bbcode==2.3.2
markdown markdown==2.6.7

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save