# HG changeset patch # User raph # Date 1260454045 -3600 # Node ID 82f6e2879e0a7d53bbd67b876bddbe1be9155801 # Parent 7d258f14cd7b2aaaf4c30d872c842ddcf07fca35 add tag filter to text share page diff -r 7d258f14cd7b -r 82f6e2879e0a src/cm/templates/site/text_share.html --- a/src/cm/templates/site/text_share.html Thu Dec 10 14:34:50 2009 +0100 +++ b/src/cm/templates/site/text_share.html Thu Dec 10 15:07:25 2009 +0100 @@ -23,8 +23,6 @@
-
- + + + + + + +
+ {% if display_suspended_users %}{% blocktrans %}Hide suspended users{% endblocktrans %}{% else %}{% blocktrans %}Display suspended users{% endblocktrans %}{% endif %} + · + {% blocktrans %}Filter by tag:{% endblocktrans %} + +
+
+ +
+ + + {% include "site/macros/paginator.html" %}
diff -r 7d258f14cd7b -r 82f6e2879e0a src/cm/views/texts.py --- a/src/cm/views/texts.py Thu Dec 10 14:34:50 2009 +0100 +++ b/src/cm/views/texts.py Thu Dec 10 15:07:25 2009 +0100 @@ -803,6 +803,9 @@ @has_perm_on_text('can_manage_text') def text_share(request, key): + display_suspended_users = get_int(request.GET, 'display', 0) + tag_selected = request.GET.get('tag_selected', 0) + text = get_text_by_keys_or_404(key) order_by = get_among(request.GET,'order',('user__username', 'user__email', @@ -845,9 +848,29 @@ 'all_roles' : Role.objects.all(), 'anon_roles' : Role.objects.filter(anon = True), 'text' : text, + 'display_suspended_users' : display_suspended_users, + 'tag_list' : Tag.objects.usage_for_model(UserProfile), + 'tag_selected': tag_selected, } - return object_list(request, UserRole.objects.filter(text=text).filter(~Q(user=None)).order_by(order_by), + query = UserRole.objects.filter(text=text).filter(~Q(user=None)).order_by(order_by) + if not display_suspended_users: + query = query.exclude(Q(user__userprofile__is_suspended=True) & Q(user__is_active=True)) + else: + # trick to include userprofile table anyway (to filter by tags) + query = query.filter(Q(user__userprofile__is_suspended=True) | Q(user__userprofile__is_suspended=False)) + + if tag_selected: + tag_ids = Tag.objects.filter(name=tag_selected) + if tag_ids: + content_type_id = ContentType.objects.get_for_model(UserProfile).pk + query = query.extra(where=['tagging_taggeditem.object_id = cm_userprofile.id', + 'tagging_taggeditem.content_type_id = %i' %content_type_id, + 'tagging_taggeditem.tag_id = %i' %tag_ids[0].id], + tables=['tagging_taggeditem'], + ) + + return object_list(request, query, template_name = 'site/text_share.html', paginate_by = paginate_by, extra_context = context, diff -r 7d258f14cd7b -r 82f6e2879e0a src/cm/views/user.py --- a/src/cm/views/user.py Thu Dec 10 14:34:50 2009 +0100 +++ b/src/cm/views/user.py Thu Dec 10 15:07:25 2009 +0100 @@ -114,17 +114,18 @@ query = UserRole.objects.select_related().filter(text=None).filter(~Q(user=None)).order_by(order_by) if not display_suspended_users: query = query.exclude(Q(user__userprofile__is_suspended=True) & Q(user__is_active=True)) + else: + # trick to include userprofile table anyway (to filter by tags) + query = query.filter(Q(user__userprofile__is_suspended=True) | Q(user__userprofile__is_suspended=False)) if tag_selected: tag_ids = Tag.objects.filter(name=tag_selected) if tag_ids: content_type_id = ContentType.objects.get_for_model(UserProfile).pk - # table cm_userprofile is not present if display_suspended_users: fix this - tables = ['tagging_taggeditem', 'cm_userprofile'] if display_suspended_users else ['tagging_taggeditem'] query = query.extra(where=['tagging_taggeditem.object_id = cm_userprofile.id', 'tagging_taggeditem.content_type_id = %i' %content_type_id, 'tagging_taggeditem.tag_id = %i' %tag_ids[0].id], - tables=tables, + tables=['tagging_taggeditem'], ) return object_list(request, query,