From 5ac2120f4169fd8584cb3979c8b4c441925354e3 Mon Sep 17 00:00:00 2001 From: XnpioChV Date: Thu, 14 Dec 2023 10:49:00 -0500 Subject: [PATCH 1/4] feat: Tag count in components --- cms/djangoapps/contentstore/views/block.py | 12 +++++++++++- cms/djangoapps/contentstore/views/preview.py | 7 ++++++- cms/static/js/views/pages/container.js | 2 +- cms/templates/studio_xblock_wrapper.html | 11 ++++++++++- openedx/core/djangoapps/content_tagging/api.py | 1 + 5 files changed, 29 insertions(+), 4 deletions(-) diff --git a/cms/djangoapps/contentstore/views/block.py b/cms/djangoapps/contentstore/views/block.py index 91078ccd11c6..dcedcf509a5e 100644 --- a/cms/djangoapps/contentstore/views/block.py +++ b/cms/djangoapps/contentstore/views/block.py @@ -25,10 +25,11 @@ wrap_xblock, wrap_xblock_aside, ) +from openedx.core.djangoapps.content_tagging.api import get_object_tag_counts from xmodule.modulestore.django import ( modulestore, ) # lint-amnesty, pylint: disable=wrong-import-order - +from cms.djangoapps.contentstore.toggles import use_tagging_taxonomy_list_page from xmodule.x_module import ( AUTHOR_VIEW, @@ -230,6 +231,14 @@ def xblock_view_handler(request, usage_key_string, view_name): force_render = request.GET.get("force_render", None) + # Fetch tags of children components + tags_count_map = {} + if use_tagging_taxonomy_list_page(): + children = xblock.get_children() + child_usage_keys = [str(child.location) for child in children] + tags_count_query = ','.join(child_usage_keys) + tags_count_map = get_object_tag_counts(tags_count_query) + # Set up the context to be passed to each XBlock's render method. context = request.GET.dict() context.update( @@ -245,6 +254,7 @@ def xblock_view_handler(request, usage_key_string, view_name): "paging": paging, "force_render": force_render, "item_url": "/container/{usage_key}", + "tags_count_map": tags_count_map, } ) fragment = get_preview_fragment(request, xblock, context) diff --git a/cms/djangoapps/contentstore/views/preview.py b/cms/djangoapps/contentstore/views/preview.py index acab35471813..a897a38ad21a 100644 --- a/cms/djangoapps/contentstore/views/preview.py +++ b/cms/djangoapps/contentstore/views/preview.py @@ -302,6 +302,10 @@ def _studio_wrap_xblock(xblock, view, frag, context, display_name_only=False): can_edit = context.get('can_edit', True) # Is this a course or a library? is_course = xblock.scope_ids.usage_id.context_key.is_course + tags_count_map = context.get('tags_count_map') + tags_count = 0 + if tags_count_map: + tags_count = tags_count_map.get(str(xblock.location), 0) template_context = { 'xblock_context': context, 'xblock': xblock, @@ -318,7 +322,8 @@ def _studio_wrap_xblock(xblock, view, frag, context, display_name_only=False): 'can_add': context.get('can_add', True), 'can_move': context.get('can_move', is_course), 'language': getattr(course, 'language', None), - 'is_course': is_course + 'is_course': is_course, + 'tags_count': tags_count, } add_webpack_js_to_fragment(frag, "js/factories/xblock_validation") diff --git a/cms/static/js/views/pages/container.js b/cms/static/js/views/pages/container.js index cea6eb856bd3..783133af21be 100644 --- a/cms/static/js/views/pages/container.js +++ b/cms/static/js/views/pages/container.js @@ -32,7 +32,7 @@ function($, _, Backbone, gettext, BasePage, 'click .new-component-button': 'scrollToNewComponentButtons', 'click .save-button': 'saveSelectedLibraryComponents', 'click .paste-component-button': 'pasteComponent', - 'click .tags-button': 'openManageTags', + 'click .manage-tags-button': 'openManageTags', 'change .header-library-checkbox': 'toggleLibraryComponent', 'click .collapse-button': 'collapseXBlock', }, diff --git a/cms/templates/studio_xblock_wrapper.html b/cms/templates/studio_xblock_wrapper.html index 63ff93d41a1b..dc8d578027f6 100644 --- a/cms/templates/studio_xblock_wrapper.html +++ b/cms/templates/studio_xblock_wrapper.html @@ -99,6 +99,15 @@