Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,10 @@ compile-requirements: pre-requirements $(COMMON_CONSTRAINTS_TXT) ## Re-compile *
mv requirements/common_constraints.tmp requirements/common_constraints.txt
sed 's/pip<24.3//g' requirements/common_constraints.txt > requirements/common_constraints.tmp
mv requirements/common_constraints.tmp requirements/common_constraints.txt
sed '/social-auth-app-django>=5.9.0,<6.0.0/d' requirements/common_constraints.txt > requirements/common_constraints.tmp
mv requirements/common_constraints.tmp requirements/common_constraints.txt
sed '/social-auth-core>=4.9.1,<5.0.0/d' requirements/common_constraints.txt > requirements/common_constraints.tmp
mv requirements/common_constraints.tmp requirements/common_constraints.txt
Comment on lines +129 to +132
Comment on lines +129 to +132
Comment on lines +129 to +132
Comment on lines +129 to +132

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here, I don't want to see these Makefile changes in this PR at all.

pip-compile -v --allow-unsafe ${COMPILE_OPTS} -o requirements/pip.txt requirements/pip.in
pip install -r requirements/pip.txt

Expand Down
107 changes: 0 additions & 107 deletions docs/decisions/0027-retirement-of-pending-secondary-email.rst

This file was deleted.

53 changes: 22 additions & 31 deletions lms/djangoapps/course_home_api/outline/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
from completion.utilities import get_key_to_last_completed_block # lint-amnesty, pylint: disable=wrong-import-order
from django.conf import settings # lint-amnesty, pylint: disable=wrong-import-order
from django.core.cache import cache
from django.contrib.auth import get_user_model
from django.shortcuts import get_object_or_404 # lint-amnesty, pylint: disable=wrong-import-order
from django.urls import reverse # lint-amnesty, pylint: disable=wrong-import-order
from django.utils.translation import gettext as _ # lint-amnesty, pylint: disable=wrong-import-order
Expand Down Expand Up @@ -190,38 +189,30 @@ class OutlineTabView(RetrieveAPIView):
def get(self, request, *args, **kwargs): # pylint: disable=too-many-statements
course_key_string = kwargs.get('course_key_string')
course_key = CourseKey.from_string(course_key_string)
user = request.user

# Enable NR tracing for this view based on course
monitoring_utils.set_custom_attribute('course_id', course_key_string)
monitoring_utils.set_custom_attribute('user_id', user.id)
monitoring_utils.set_custom_attribute('is_staff', user.is_staff)
monitoring_utils.set_custom_attribute('user_id', request.user.id)
monitoring_utils.set_custom_attribute('is_staff', request.user.is_staff)

course = get_course_or_403(request.user, 'load', course_key, check_if_enrolled=False)

masquerade_object, request.user = setup_masquerade(
request,
course_key,
staff_access=has_access(user, 'staff', course_key),
staff_access=has_access(request.user, 'staff', course_key),
reset_masquerade_data=True,
)

user_is_masquerading = is_masquerading(user, course_key, course_masquerade=masquerade_object)
user_is_masquerading = is_masquerading(request.user, course_key, course_masquerade=masquerade_object)

# Check if the user is masquerading as a student and get the masqueraded user object
if user_is_masquerading and masquerade_object.role == 'student':
try:
User = get_user_model()
# If the masqueraded user does not exist, we will continue with the original user object.
username = masquerade_object.user_name or 'audit'
user = User.objects.get(username=username)
except User.DoesNotExist:
pass
Comment on lines -207 to -215

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this change related to this PR or ticket?


course = get_course_or_403(user, 'load', course_key, check_if_enrolled=False)
course_overview = get_course_overview_or_404(course_key)
enrollment = CourseEnrollment.get_enrollment(user, course_key)
enrollment = CourseEnrollment.get_enrollment(request.user, course_key)
enrollment_mode = getattr(enrollment, 'mode', None)
allow_anonymous = COURSE_ENABLE_UNENROLLED_ACCESS_FLAG.is_enabled(course_key)
allow_public = allow_anonymous and course.course_visibility == COURSE_VISIBILITY_PUBLIC
allow_public_outline = allow_anonymous and course.course_visibility == COURSE_VISIBILITY_PUBLIC_OUTLINE
allow_preview_of_verified_content = learner_can_preview_verified_content(course_key, user)
allow_preview_of_verified_content = learner_can_preview_verified_content(course_key, request.user)

# User locale settings
user_timezone_locale = user_timezone_locale_prefs(request)
Expand Down Expand Up @@ -260,30 +251,30 @@ def get(self, request, *args, **kwargs): # pylint: disable=too-many-statements
show_enrolled = is_enrolled or is_staff
enable_proctored_exams = False
if show_enrolled:
course_blocks = get_course_outline_block_tree(request, course_key_string, user)
date_blocks = get_course_date_blocks(course, user, request, num_assignments=1)
course_blocks = get_course_outline_block_tree(request, course_key_string, request.user)
date_blocks = get_course_date_blocks(course, request.user, request, num_assignments=1)
dates_widget['course_date_blocks'] = [block for block in date_blocks if not isinstance(block, TodaysDate)]

handouts_html = get_course_info_section(request, user, course, 'handouts')
handouts_html = get_course_info_section(request, request.user, course, 'handouts')
welcome_message_html = get_current_update_for_user(request, course)

offer_data = generate_offer_data(user, course_overview)
access_expiration = get_access_expiration_data(user, course_overview)
cert_data = get_cert_data(user, course, enrollment.mode) if is_enrolled else None
offer_data = generate_offer_data(request.user, course_overview)
access_expiration = get_access_expiration_data(request.user, course_overview)
cert_data = get_cert_data(request.user, course, enrollment.mode) if is_enrolled else None

enable_proctored_exams = course_overview.enable_proctored_exams

if (is_enrolled and ENABLE_COURSE_GOALS.is_enabled(course_key)):
course_goals['weekly_learning_goal_enabled'] = True
selected_goal = get_course_goal(user, course_key)
selected_goal = get_course_goal(request.user, course_key)
if selected_goal:
course_goals['selected_goal'] = {
'days_per_week': selected_goal.days_per_week,
'subscribed_to_reminders': selected_goal.subscribed_to_reminders,
}

try:
resume_block = get_key_to_last_completed_block(user, course.id)
resume_block = get_key_to_last_completed_block(request.user, course.id)
resume_course['has_visited_course'] = True
resume_path = reverse('jump_to', kwargs={
'course_id': course_key_string,
Expand All @@ -297,7 +288,7 @@ def get(self, request, *args, **kwargs): # pylint: disable=too-many-statements
elif allow_public_outline or allow_public or user_is_masquerading:
course_blocks = get_course_outline_block_tree(request, course_key_string, None)
if allow_public or user_is_masquerading:
handouts_html = get_course_info_section(request, user, course, 'handouts')
handouts_html = get_course_info_section(request, request.user, course, 'handouts')

if not is_enrolled:
if CourseMode.is_masters_only(course_key):
Expand All @@ -322,7 +313,7 @@ def get(self, request, *args, **kwargs): # pylint: disable=too-many-statements
# so this is a tiny first step in that migration.
if course_blocks:
user_course_outline = get_user_course_outline(
course_key, user, datetime.now(tz=timezone.utc),
course_key, request.user, datetime.now(tz=timezone.utc),
preview_verified_content=allow_preview_of_verified_content
)
available_seq_ids = {str(usage_key) for usage_key in user_course_outline.sequences}
Expand Down Expand Up @@ -367,8 +358,8 @@ def get(self, request, *args, **kwargs): # pylint: disable=too-many-statements
seq_data['is_preview'] = True

user_has_passing_grade = False
if not user.is_anonymous:
user_grade = CourseGradeFactory().read(user, course)
if not request.user.is_anonymous:
user_grade = CourseGradeFactory().read(request.user, course)
if user_grade:
user_has_passing_grade = user_grade.passed

Expand Down
Loading
Loading