def dashboard(request): """Dashboard page""" highest_score_threads = Thread.highest_score.all() all_threads = Thread.objects.all() latest_threads = [] lists_for_user = [] user = None if request.user.is_authenticated(): user = User.objects.get(username=request.user) lists_for_user = mailman.get_user_mailinglists(user) latest_threads = get_user_threads(all_threads, lists_for_user, lambda t: t) hottest_threads = get_user_threads(highest_score_threads, lists_for_user, lambda t: t.latest_message) latest_results, count_types = get_collaboration_data(user) latest_results.sort(key=lambda elem: elem.modified, reverse=True) context = { 'hottest_threads': hottest_threads[:6], 'latest_threads': latest_threads[:6], 'type_count': count_types, 'latest_results': latest_results[:6], } return render(request, 'home.html', context)
def dashboard(request): """Dashboard page""" highest_score_threads = Thread.highest_score.all() all_threads = Thread.objects.all() latest_threads = [] lists_for_user = [] user = None if request.user.is_authenticated(): user = User.objects.get(username=request.user) lists_for_user = mailman.get_user_mailinglists(user) latest_threads = get_user_threads( all_threads, lists_for_user, lambda t: t) hottest_threads = get_user_threads( highest_score_threads, lists_for_user, lambda t: t.latest_message) latest_results, count_types = get_collaboration_data(user) latest_results.sort(key=lambda elem: elem.modified, reverse=True) context = { 'hottest_threads': hottest_threads[:6], 'latest_threads': latest_threads[:6], 'type_count': count_types, 'latest_results': latest_results[:6], } return render(request, 'home.html', context)
def get(self, request): MAX = 6 context = {} all_privates = {} private_mailinglist = MailingList.objects.filter(is_private=True) for mailinglist in private_mailinglist: all_privates[mailinglist.name] = True context['lists'] = [] lists_for_user = [] if request.user.is_authenticated(): user = User.objects.get(username=request.user) lists_for_user = mailman.get_user_mailinglists(user) for list_ in MailingList.objects.order_by('name'): if list_.name not in all_privates or list_.name in lists_for_user: context['lists'].append(( list_.name, mailman.get_list_description(list_.name), list_.thread_set.filter(spam=False).order_by( '-latest_message__received_time' )[:MAX], [t.latest_message for t in Thread.highest_score.filter( mailinglist__name=list_.name)[:MAX]], len(mailman.list_users(list_.name)), )) return render(request, 'superarchives/thread-dashboard.html', context)
def get(self, request, mailinglist, thread_token): thread = get_object_or_404(Thread, subject_token=thread_token, mailinglist__name=mailinglist) all_privates = [] all_privates.extend( [mlist.get('listname') for mlist in mailman.all_lists() if mlist.get('archive_private')] ) if all_privates.count(thread.mailinglist.name): if not request.user.is_authenticated(): raise PermissionDenied else: user = User.objects.get(username=request.user) emails = user.emails.values_list('address', flat=True) lists_for_user = mailman.get_user_mailinglists(user) listnames_for_user = mailman.extract_listname_from_list( lists_for_user) if thread.mailinglist.name not in listnames_for_user: raise PermissionDenied thread.hit(request) try: first_message = thread.message_set.first() except ObjectDoesNotExist: raise http.Http404 order_by = request.GET.get('order') if order_by == 'voted': msgs_query = Message.most_voted else: msgs_query = Message.objects msgs_query = msgs_query.filter(thread__subject_token=thread_token) msgs_query = msgs_query.filter(thread__mailinglist__name=mailinglist) emails = msgs_query.exclude(id=first_message.id) total_votes = first_message.votes_count() for email in emails: total_votes += email.votes_count() # Update relevance score thread.update_score() context = { 'first_msg': first_message, 'emails': [first_message] + list(emails), 'pagehits': thread.hits, 'total_votes': total_votes, 'thread': thread, } return render(request, 'message-thread.html', context)
def get(self, request, mailinglist, thread_token): thread = get_object_or_404(Thread, subject_token=thread_token, mailinglist__name=mailinglist) all_privates = [] all_privates.extend([ mlist.get('listname') for mlist in mailman.all_lists() if mlist.get('archive_private') ]) if all_privates.count(thread.mailinglist.name): if not request.user.is_authenticated(): raise PermissionDenied else: user = User.objects.get(username=request.user) emails = user.emails.values_list('address', flat=True) lists_for_user = mailman.get_user_mailinglists(user) listnames_for_user = mailman.extract_listname_from_list( lists_for_user) if thread.mailinglist.name not in listnames_for_user: raise PermissionDenied thread.hit(request) try: first_message = thread.message_set.first() except ObjectDoesNotExist: raise http.Http404 order_by = request.GET.get('order') if order_by == 'voted': msgs_query = Message.most_voted else: msgs_query = Message.objects msgs_query = msgs_query.filter(thread__subject_token=thread_token) msgs_query = msgs_query.filter(thread__mailinglist__name=mailinglist) emails = msgs_query.exclude(id=first_message.id) total_votes = first_message.votes_count() for email in emails: total_votes += email.votes_count() # Update relevance score thread.update_score() context = { 'first_msg': first_message, 'emails': [first_message] + list(emails), 'pagehits': thread.hits, 'total_votes': total_votes, 'thread': thread, } return render(request, 'message-thread.html', context)
def get_visible_threads_queryset(logged_user): queryset = Thread.objects lists_for_user = [] if logged_user: lists_for_user = mailman.get_user_mailinglists(logged_user) user_lists = Condition(mailinglist__name__in=lists_for_user) public_lists = Condition(mailinglist__is_private=False) queryset = Thread.objects.filter(user_lists | public_lists) return queryset
def get_queryset(self): listnames_for_user = [] if self.request.user.is_authenticated(): user = User.objects.get(username=self.request.user) lists_for_user = mailman.get_user_mailinglists(user) listnames_for_user = mailman.extract_listname_from_list( lists_for_user) query = Q(is_private=False) | Q(name__in=listnames_for_user) return MailingList.objects.filter(query).order_by('name')
def get_visible_threads_queryset(logged_user): queryset = Thread.objects listnames_for_user = [] if logged_user: lists_for_user = mailman.get_user_mailinglists(logged_user) listnames_for_user = mailman.extract_listname_from_list(lists_for_user) user_lists = Q(mailinglist__name__in=listnames_for_user) public_lists = Q(mailinglist__is_private=False) queryset = Thread.objects.filter(user_lists | public_lists) return queryset
def check_list_membership(self, user, mailinglist_name): user = User.objects.get(username=user) lists_for_user = mailman.get_user_mailinglists(user) listnames_for_user = mailman.extract_listname_from_list(lists_for_user) if mailinglist_name not in listnames_for_user: error_message = _("You don't have permission to access this list") messages.add_message(self.request, messages.ERROR, error_message) return False return True
def check_list_membership(self, user, mailinglist_name): user = User.objects.get(username=user) lists_for_user = mailman.get_user_mailinglists(user) listnames_for_user = mailman.extract_listname_from_list( lists_for_user) if mailinglist_name not in listnames_for_user: error_message = _("You don't have permission to access this list") messages.add_message(self.request, messages.ERROR, error_message) return False return True
def mail_list(request): community = request.GET.get('community', "") list_name = get_community_association(community).get("mailman_list", "") MAX = request.GET.get('MAX', 7) if not MAX or MAX < 0: MAX = 7 context = {} all_privates = {} private_mailinglist = MailingList.objects.filter(is_private=True) for mailinglist in private_mailinglist: all_privates[mailinglist.name] = True context['lists'] = [] lists_for_user = [] if request.user.is_authenticated(): user = User.objects.get(username=request.user) lists_for_user = mailman.get_user_mailinglists(user) for list_ in MailingList.objects.filter(name__iexact=list_name): if list_.name not in all_privates or list_.name in lists_for_user: context['lists'].append(( list_.name, mailman.get_list_description(list_.name), list_.thread_set.filter(spam=False).order_by( '-latest_message__received_time' )[:MAX], [t.latest_message for t in Thread.highest_score.filter( mailinglist__name=list_.name)[:MAX]], len(mailman.list_users(list_.name)), )) if len(context['lists']) == 0: message = ("Não foi possível encontrada lista de discussão" " associada a está comunidade, para mais" " detalhes contate o administrador.") return HttpResponse(message, status=200) return render(request, 'discussion.html', context)