diff --git a/openedx/core/djangoapps/notifications/config/waffle.py b/openedx/core/djangoapps/notifications/config/waffle.py index 4a1481f6f572..b74cd84dcab1 100644 --- a/openedx/core/djangoapps/notifications/config/waffle.py +++ b/openedx/core/djangoapps/notifications/config/waffle.py @@ -49,3 +49,13 @@ # .. toggle_warning: When the flag is ON, Notifications Grouping feature is enabled. # .. toggle_tickets: INF-1472 ENABLE_NOTIFICATION_GROUPING = CourseWaffleFlag(f'{WAFFLE_NAMESPACE}.enable_notification_grouping', __name__) + +# .. toggle_name: notifications.enable_new_notification_view +# .. toggle_implementation: WaffleFlag +# .. toggle_default: False +# .. toggle_description: Waffle flag to enable new notification view +# .. toggle_use_cases: temporary, open_edx +# .. toggle_creation_date: 2024-09-30 +# .. toggle_target_removal_date: 2025-10-10 +# .. toggle_tickets: INF-1603 +ENABLE_NEW_NOTIFICATION_VIEW = WaffleFlag(f"{WAFFLE_NAMESPACE}.enable_new_notification_view", __name__) diff --git a/openedx/core/djangoapps/notifications/utils.py b/openedx/core/djangoapps/notifications/utils.py index 249eaf874995..c0214a84a9c8 100644 --- a/openedx/core/djangoapps/notifications/utils.py +++ b/openedx/core/djangoapps/notifications/utils.py @@ -2,10 +2,11 @@ Utils function for notifications app """ from typing import Dict, List +from waffle import get_waffle_flag_model from common.djangoapps.student.models import CourseAccessRole, CourseEnrollment from openedx.core.djangoapps.django_comment_common.models import Role -from openedx.core.djangoapps.notifications.config.waffle import ENABLE_NOTIFICATIONS +from openedx.core.djangoapps.notifications.config.waffle import ENABLE_NOTIFICATIONS, ENABLE_NEW_NOTIFICATION_VIEW from openedx.core.lib.cache_utils import request_cached @@ -47,6 +48,19 @@ def get_show_notifications_tray(user): return show_notifications_tray +def get_is_new_notification_view_enabled(): + """ + Returns True if the waffle flag for the new notification view is enabled, False otherwise. + """ + flag_model = get_waffle_flag_model() + + try: + flag = flag_model.objects.get(name=ENABLE_NEW_NOTIFICATION_VIEW.name) + return flag.everyone if flag.everyone is not None else False + except flag_model.DoesNotExist: + return False + + def get_list_in_batches(input_list, batch_size): """ Divides the list of objects into list of list of objects each of length batch_size. diff --git a/openedx/core/djangoapps/notifications/views.py b/openedx/core/djangoapps/notifications/views.py index e6798c7c5c7e..e87274088f84 100644 --- a/openedx/core/djangoapps/notifications/views.py +++ b/openedx/core/djangoapps/notifications/views.py @@ -39,7 +39,7 @@ UserCourseNotificationPreferenceSerializer, UserNotificationPreferenceUpdateSerializer, ) -from .utils import get_show_notifications_tray +from .utils import get_show_notifications_tray, get_is_new_notification_view_enabled @allow_any_authenticated_user() @@ -329,6 +329,7 @@ def get(self, request): ) count_total = 0 show_notifications_tray = get_show_notifications_tray(self.request.user) + is_new_notification_view_enabled = get_is_new_notification_view_enabled() count_by_app_name_dict = { app_name: 0 for app_name in COURSE_NOTIFICATION_APPS @@ -344,7 +345,8 @@ def get(self, request): "show_notifications_tray": show_notifications_tray, "count": count_total, "count_by_app_name": count_by_app_name_dict, - "notification_expiry_days": settings.NOTIFICATIONS_EXPIRY + "notification_expiry_days": settings.NOTIFICATIONS_EXPIRY, + "is_new_notification_view_enabled": is_new_notification_view_enabled })