From 5562edb7a5f056d65e0f5c056ebdda413c21f593 Mon Sep 17 00:00:00 2001 From: nosanity Date: Fri, 18 Jan 2019 20:30:40 +0300 Subject: [PATCH] =?UTF-8?q?PLP-1431=20=D0=9F=D0=B0=D1=80=D0=B0=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D1=80=20=D0=BF=D0=BB=D0=B0=D1=82=D1=84=D0=BE=D1=80=D0=BC?= =?UTF-8?q?=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D0=BA=D1=83=D1=80=D1=81=D0=B0=20?= =?UTF-8?q?=D0=B2=20=D0=BA=D0=B0=D1=82=D0=B0=D0=BB=D0=BE=D0=B3=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- extension_email/utils.py | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/extension_email/utils.py b/extension_email/utils.py index ef9d103..5656a20 100644 --- a/extension_email/utils.py +++ b/extension_email/utils.py @@ -1,8 +1,10 @@ # coding: utf-8 +from django.conf import settings from django.db.models import Q from django.utils import timezone -from plp.models import User, EnrollmentReason, Participant, Subscription, Course, CourseSession, NewsSubscription +from plp.models import User, EnrollmentReason, Participant, Subscription, Course, CourseSession, NewsSubscription, \ + LMSBackend from plp.utils.edx_enrollment import EDXEnrollment, EDXEnrollmentError from .forms import BulkEmailForm, CustomUnicodeCourseSession from .models import BulkEmailOptout @@ -51,16 +53,7 @@ def _check_get_certificate_chosen(): dic_exclude = {} session_ids = [] to_all = True - if data.get('instructors_filter', '') != '': - try: - edx_resp = EdxEnrollmentWithPerms().get_permissions().json() - session_id_to_code = { - i.id: i.get_absolute_slug_v1() - for i in CourseSession.objects.select_related('course__slug', 'course__university__slug') - } - to_all = False - except (EDXEnrollmentError, ValueError): - return User.objects.none(), 'error' + # если фильтр по сессиям будет нужен, но пользователь не выбрал ни одной сессии if not data['session_filter'] and not data['course_filter'] and not data['university_filter'] \ and (_check_enrollment_type_chosen() or _check_get_certificate_chosen()): @@ -85,10 +78,25 @@ def _check_get_certificate_chosen(): instructor_usernames = [] if data.get('instructors_filter', '') != '': - iterator = session_ids if session_ids else list(session_id_to_code.keys()) - for i in iterator: - instructor_usernames.extend(edx_resp.get(session_id_to_code[i], [])) - instructor_usernames = list(set(instructor_usernames)) + to_all = False + if getattr(settings, 'ENABLE_ARM', False): + from arm.models import UserRoleInstance + from arm.utils.role_templates import COURSE_AUTHOR_SLUG + instructor_usernames = list(UserRoleInstance.objects.filter(role__slug=COURSE_AUTHOR_SLUG). + values_list('user__username', flat=True).distinct()) + else: + backend_ids = list(set(CourseSession.values_list('lms_id', flat=True).distinct())) + backends = list(LMSBackend.objects.get( + id__in=filter(None, backend_ids), core=LMSBackend.CORE_EDX, sso_push=True) + ) + all_session_ids = [i.get_absolute_slug_v1() for i in CourseSession.objects.all()] + for lms in backends: + try: + for k, v in EdxEnrollmentWithPerms(lms).get_permissions().json().items(): + instructor_usernames.extend(v if k in all_session_ids else []) + except (EDXEnrollmentError, ValueError): + return User.objects.none(), 'error' + instructor_usernames = list(set(instructor_usernames)) last_login_from = data.get('last_login_from') or BulkEmailForm.MIN_DATE last_login_to = data.get('last_login_to') or BulkEmailForm.MAX_DATE