def get_viewable_activities(request=None, act_types={}, text=None): """ Get activities user in request is allowed to see """ from cm.security import has_perm, get_texts_with_perm, get_viewable_comments selected_activities = reduce(list.__add__, [ Activity.VIEWABLE_ACTIVITIES[k] for k in act_types.keys() if act_types[k] ], []) activities = Activity.objects.filter(type__in=selected_activities) if text: activities = activities.filter(text=text) if not has_perm(request, 'can_manage_workspace'): texts = get_texts_with_perm(request, 'can_view_text') activities = activities.filter(Q(text__in=texts)) comments = [] [ comments.extend( get_viewable_comments(request, t.last_text_version.comment_set.all(), t)) for t in texts ] activities = activities.filter( Q(comment__in=comments) | Q(comment=None)) return activities.order_by('-created')
def text_list(request): paginate_by = get_int(request.GET,'paginate',TEXT_PAGINATION) tag_selected = request.GET.get('tag_selected', 0) order_by = get_among(request.GET,'order',('title','author','modified','-title','-author','-modified'),'-modified') if request.method == 'POST': action = request.POST.get('action',None) text_keys = get_keys_from_dict(request.POST, 'check-').keys() if action == 'delete': for text_key in text_keys: text = Text.objects.get(key=text_key) if has_perm(request, 'can_delete_text', text=text): text.delete() else: raise UnauthorizedException('No perm can_delete_text on comment') display_message(request, _(u'%(nb_texts)i text(s) deleted') %{'nb_texts':len(text_keys)}) return HttpResponseRedirect(reverse('text')) texts = get_texts_with_perm(request, 'can_view_text').order_by(order_by) try: tag_list = Tag.objects.usage_for_queryset(TextVersion.objects.filter(id__in = [t.last_text_version_id for t in get_texts_with_perm(request, 'can_view_text')])) except EmptyResultSet: tag_list = [] context = { 'tag_list' : tag_list, 'tag_selected': tag_selected, } if tag_selected: tag_ids = Tag.objects.filter(name=tag_selected) if tag_ids: content_type_id = ContentType.objects.get_for_model(TextVersion).pk # table cm_userprofile is not present if display_suspended_users: fix this texts = texts.extra(where=['tagging_taggeditem.object_id = cm_text.last_text_version_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, texts, template_name = 'site/text_list.html', paginate_by = paginate_by, extra_context=context, )
def get_viewable_activities(request=None, act_types={}, text=None): """ Get activities user in request is allowed to see """ from cm.security import has_perm, get_texts_with_perm, get_viewable_comments selected_activities = reduce(list.__add__,[Activity.VIEWABLE_ACTIVITIES[k] for k in act_types.keys() if act_types[k]], []) activities = Activity.objects.filter(type__in=selected_activities) if text: activities = activities.filter(text=text) if not has_perm(request, 'can_manage_workspace'): texts = get_texts_with_perm(request, 'can_view_text') activities = activities.filter(Q(text__in=texts)) comments = [] [comments.extend(get_viewable_comments(request, t.last_text_version.comment_set.all(), t)) for t in texts] activities = activities.filter(Q(comment__in=comments) | Q(comment=None)) return activities.order_by('-created')
def read(self, request): order_by = '-id' texts = get_texts_with_perm(request, 'can_view_text').order_by(order_by) return texts
def dashboard(request): request.session.set_test_cookie() if request.user.is_authenticated(): act_view = { 'view_texts' : get_int(request.GET, 'view_texts',1), 'view_comments' : get_int(request.GET, 'view_comments',1), 'view_users' : get_int(request.GET, 'view_users',1), } paginate_by = get_int(request.GET, 'paginate', ACTIVITY_PAGINATION) # texts with can_view_unapproved_comment perms moderator_texts = get_texts_with_perm(request, 'can_view_unapproved_comment') viewer_texts = get_texts_with_perm(request, 'can_view_approved_comment') all_texts_ids = [t.id for t in moderator_texts] + [t.id for t in viewer_texts] span = get_among(request.GET, 'span', ('day','month','week',),'week') template_dict = { 'span' : span, 'last_texts' : get_texts_with_perm(request, 'can_view_text').order_by('-modified')[:RECENT_TEXT_NB], 'last_comments' : Comment.objects.filter(text_version__text__in=all_texts_ids).order_by('-created')[:RECENT_COMMENT_NB],# TODO: useful? #'last_users' : User.objects.all().order_by('-date_joined')[:5], } template_dict.update(act_view) all_activities = { 'view_comments' : ['comment_created','comment_removed'], 'view_users' : ['user_created', 'user_activated', 'user_suspended','user_enabled',], 'view_texts' : ['text_created','text_removed', 'text_edited', 'text_edited_new_version'], } selected_activities = [] [selected_activities.extend(all_activities[k]) for k in act_view.keys() if act_view[k]] activities = Activity.objects.filter(type__in = selected_activities) if not has_perm(request,'can_manage_workspace'): texts = get_texts_with_perm(request, 'can_view_text') activities = activities.filter(Q(text__in=texts)) comments = [] [comments.extend(get_viewable_comments(request, t.last_text_version.comment_set.all(), t)) for t in texts] activities = activities.filter(Q(comment__in=comments) | Q(comment=None) ) template_dict['to_mod_profiles'] = [] else: template_dict['to_mod_profiles'] = UserProfile.objects.filter(user__is_active=False).filter(is_suspended=True).order_by('-user__date_joined')[:MODERATE_NB] template_dict['to_mod_comments'] = Comment.objects.filter(state='pending').filter(text_version__text__in=moderator_texts).order_by('-modified')[:MODERATE_NB-len(template_dict['to_mod_profiles'])] activities = activities.order_by('-created') return object_list(request, activities, template_name = 'site/dashboard.html', paginate_by = paginate_by, extra_context = template_dict, ) else: if request.method == 'POST': form = AuthenticationForm(request, request.POST) if form.is_valid(): user = form.get_user() user.backend = 'django.contrib.auth.backends.ModelBackend' cm_login(request, user) display_message(request, _(u"You're logged in!")) return HttpResponseRedirect(reverse('index')) else: form = AuthenticationForm() public_texts = get_texts_with_perm(request, 'can_view_text').order_by('-modified') template_dict = { 'form' : form, 'texts' : public_texts, } return render_to_response('site/non_authenticated_index.html', template_dict, context_instance=RequestContext(request))
def render(self, context): request = Variable('request').resolve(context) context[self.var_name] = get_texts_with_perm(request, 'can_view_text').count() return ''