Skip to content

Commit

Permalink
feat: add new library util for split studio view (#33283)
Browse files Browse the repository at this point in the history
  • Loading branch information
KristinAoki authored Sep 25, 2023
1 parent 8e513f0 commit 5d1a778
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 36 deletions.
14 changes: 3 additions & 11 deletions cms/djangoapps/contentstore/asset_storage_handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
from xmodule.modulestore.exceptions import ItemNotFoundError # lint-amnesty, pylint: disable=wrong-import-order

from .exceptions import AssetNotFoundException, AssetSizeTooLargeException
from .utils import reverse_course_url, get_files_uploads_url
from .utils import reverse_course_url, get_files_uploads_url, get_response_format, request_response_format_is_json
from .toggles import use_new_files_uploads_page


Expand Down Expand Up @@ -73,8 +73,8 @@ def handle_assets(request, course_key_string=None, asset_key_string=None):
if not has_course_author_access(request.user, course_key):
raise PermissionDenied()

response_format = _get_response_format(request)
if _request_response_format_is_json(request, response_format):
response_format = get_response_format(request)
if request_response_format_is_json(request, response_format):
if request.method == 'GET':
return _assets_json(request, course_key)

Expand Down Expand Up @@ -133,14 +133,6 @@ def get_asset_usage_path(request, course_key, asset_key_string):
return JsonResponse({'usage_locations': usage_locations})


def _get_response_format(request):
return request.GET.get('format') or request.POST.get('format') or 'html'


def _request_response_format_is_json(request, response_format):
return response_format == 'json' or 'application/json' in request.META.get('HTTP_ACCEPT', 'application/json')


def _asset_index(request, course_key):
'''
Display an editable asset library.
Expand Down
66 changes: 63 additions & 3 deletions cms/djangoapps/contentstore/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -1390,9 +1390,63 @@ def get_help_urls():
return help_tokens


def get_response_format(request):
return request.GET.get('format') or request.POST.get('format') or 'html'


def request_response_format_is_json(request, response_format):
return response_format == 'json' or 'application/json' in request.META.get('HTTP_ACCEPT', 'application/json')


def get_library_context(request, request_is_json=False):
"""
Utils is used to get context of course home library tab.
It is used for both DRF and django views.
"""
from cms.djangoapps.contentstore.views.course import (
get_allowed_organizations,
get_allowed_organizations_for_libraries,
user_can_create_organizations,
_accessible_libraries_iter,
_get_course_creator_status,
_format_library_for_view,
)
from cms.djangoapps.contentstore.views.library import (
LIBRARIES_ENABLED,
)

libraries = _accessible_libraries_iter(request.user) if LIBRARIES_ENABLED else []
data = {
'libraries': [_format_library_for_view(lib, request) for lib in libraries],
}

if not request_is_json:
return {
**data,
'in_process_course_actions': [],
'courses': [],
'libraries_enabled': LIBRARIES_ENABLED,
'show_new_library_button': LIBRARIES_ENABLED and request.user.is_active,
'user': request.user,
'request_course_creator_url': reverse('request_course_creator'),
'course_creator_status': _get_course_creator_status(request.user),
'allow_unicode_course_id': settings.FEATURES.get('ALLOW_UNICODE_COURSE_ID', False),
'archived_courses': True,
'allow_course_reruns': settings.FEATURES.get('ALLOW_COURSE_RERUNS', True),
'rerun_creator_status': GlobalStaff().has_user(request.user),
'split_studio_home': split_library_view_on_dashboard(),
'active_tab': 'libraries',
'allowed_organizations_for_libraries': get_allowed_organizations_for_libraries(request.user),
'allowed_organizations': get_allowed_organizations(request.user),
'can_create_organizations': user_can_create_organizations(request.user),
}

return data


def get_home_context(request):
"""
Utils is used to get context of course grading.
Utils is used to get context of course home.
It is used for both DRF and django views.
"""

Expand Down Expand Up @@ -1420,8 +1474,14 @@ def get_home_context(request):
courses_iter, in_process_course_actions = get_courses_accessible_to_user(request, org)
user = request.user
libraries = []
response_format = get_response_format(request)

if not split_library_view_on_dashboard() and LIBRARIES_ENABLED:
libraries = _accessible_libraries_iter(request.user)
accessible_libraries = _accessible_libraries_iter(user)
libraries = [_format_library_for_view(lib, request) for lib in accessible_libraries]

if split_library_view_on_dashboard() and request_response_format_is_json(request, response_format):
libraries = get_library_context(request, True)['libraries']

def format_in_process_course_view(uca):
"""
Expand Down Expand Up @@ -1456,7 +1516,7 @@ def format_in_process_course_view(uca):
'libraries_enabled': LIBRARIES_ENABLED,
'redirect_to_library_authoring_mfe': should_redirect_to_library_authoring_mfe(),
'library_authoring_mfe_url': LIBRARY_AUTHORING_MICROFRONTEND_URL,
'libraries': [_format_library_for_view(lib, request) for lib in libraries],
'libraries': libraries,
'show_new_library_button': user_can_create_library(user) and not should_redirect_to_library_authoring_mfe(),
'user': user,
'request_course_creator_url': reverse('request_course_creator'),
Expand Down
24 changes: 2 additions & 22 deletions cms/djangoapps/contentstore/views/course.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,6 @@
from ..tasks import rerun_course as rerun_course_task
from ..toggles import (
default_enable_flexible_peer_openassessments,
split_library_view_on_dashboard,
use_new_course_outline_page,
use_new_home_page,
use_new_updates_page,
Expand All @@ -102,6 +101,7 @@
get_course_settings,
get_course_grading,
get_home_context,
get_library_context,
get_lms_link_for_item,
get_proctored_exam_settings_url,
get_course_outline_url,
Expand All @@ -121,7 +121,6 @@
update_course_discussions_settings,
)
from .component import ADVANCED_COMPONENT_TYPES
from .library import LIBRARIES_ENABLED

log = logging.getLogger(__name__)
User = get_user_model()
Expand Down Expand Up @@ -551,26 +550,7 @@ def library_listing(request):
"""
List all Libraries available to the logged in user
"""
libraries = _accessible_libraries_iter(request.user) if LIBRARIES_ENABLED else []
data = {
'in_process_course_actions': [],
'courses': [],
'libraries_enabled': LIBRARIES_ENABLED,
'libraries': [_format_library_for_view(lib, request) for lib in libraries],
'show_new_library_button': LIBRARIES_ENABLED and request.user.is_active,
'user': request.user,
'request_course_creator_url': reverse('request_course_creator'),
'course_creator_status': _get_course_creator_status(request.user),
'allow_unicode_course_id': settings.FEATURES.get('ALLOW_UNICODE_COURSE_ID', False),
'archived_courses': True,
'allow_course_reruns': settings.FEATURES.get('ALLOW_COURSE_RERUNS', True),
'rerun_creator_status': GlobalStaff().has_user(request.user),
'split_studio_home': split_library_view_on_dashboard(),
'active_tab': 'libraries',
'allowed_organizations': get_allowed_organizations(request.user),
'allowed_organizations_for_libraries': get_allowed_organizations_for_libraries(request.user),
'can_create_organizations': user_can_create_organizations(request.user),
}
data = get_library_context(request)
return render_to_response('index.html', data)


Expand Down

0 comments on commit 5d1a778

Please sign in to comment.