feat: add API endpoint for change email settings (#29498)

This commit is contained in:
Umar Asghar
2021-12-23 18:04:05 +05:00
committed by GitHub
parent 84b5d8dd28
commit 4f40e44627
2 changed files with 16 additions and 7 deletions

View File

@@ -17,7 +17,7 @@ urlpatterns = [
path('accounts/disable_account_ajax', views.disable_account_ajax, name="disable_account_ajax"),
path('accounts/manage_user_standing', views.manage_user_standing, name='manage_user_standing'),
path('change_email_settings', views.change_email_settings, name='change_email_settings'),
path('api/change_email_settings', views.change_email_settings, name='change_email_settings'),
re_path(fr'^course_run/{settings.COURSE_ID_PATTERN}/refund_status$',
views.course_run_refund_status,
@@ -28,5 +28,4 @@ urlpatterns = [
views.activate_secondary_email,
name='activate_secondary_email'
),
]

View File

@@ -28,12 +28,16 @@ from django.views.decorators.http import require_GET, require_http_methods, requ
from edx_ace import ace
from edx_ace.recipient import Recipient
from edx_django_utils import monitoring as monitoring_utils
from edx_rest_framework_extensions.auth.jwt.authentication import JwtAuthentication
from edx_rest_framework_extensions.auth.session.authentication import SessionAuthenticationAllowInactiveUser # lint-amnesty, pylint: disable=wrong-import-order
from eventtracking import tracker
from ipware.ip import get_client_ip
# Note that this lives in LMS, so this dependency should be refactored.
from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey
from pytz import UTC
from rest_framework.decorators import api_view, authentication_classes, permission_classes
from rest_framework.permissions import IsAuthenticated
from common.djangoapps.track import views as track_views
from lms.djangoapps.bulk_email.models import Optout
@@ -53,6 +57,7 @@ from openedx.core.djangoapps.user_api.preferences import api as preferences_api
from openedx.core.djangoapps.user_authn.tasks import send_activation_email
from openedx.core.djangoapps.user_authn.toggles import should_redirect_to_authn_microfrontend
from openedx.core.djangolib.markup import HTML, Text
from openedx.core.lib.api.authentication import BearerAuthenticationAllowInactiveUser
from openedx.features.enterprise_support.utils import is_enterprise_learner
from common.djangoapps.student.email_helpers import generate_activation_email_context
from common.djangoapps.student.helpers import DISABLE_UNENROLL_CERT_STATES, cert_info
@@ -893,18 +898,23 @@ def confirm_email_change(request, key):
return response
@require_POST
@login_required
@ensure_csrf_cookie
@api_view(['POST'])
@authentication_classes((
JwtAuthentication,
BearerAuthenticationAllowInactiveUser,
SessionAuthenticationAllowInactiveUser,
))
@permission_classes((IsAuthenticated,))
def change_email_settings(request):
"""
Modify logged-in user's setting for receiving emails from a course.
"""
user = request.user
course_id = request.POST.get("course_id")
course_id = request.data.get("course_id")
receive_emails = request.data.get("receive_emails")
course_key = CourseKey.from_string(course_id)
receive_emails = request.POST.get("receive_emails")
if receive_emails:
optout_object = Optout.objects.filter(user=user, course_id=course_key)
if optout_object: