def generator(): is_admin = request.user.has_perm('contests.contest_admin', request.contest) messages = visible_messages(request) if is_admin: messages = messages.filter(message__isnull=True, top_reference__isnull=True, kind='QUESTION') else: messages = new_messages(request, messages) count = messages.count() if count: text = ungettext('%(count)d NEW MESSAGE', '%(count)d NEW MESSAGES', count) % {'count': count} if count == 1: message = messages.get() link = reverse('message', kwargs={ 'contest_id': request.contest.id, 'message_id': message.top_reference_id or message.id }) else: link = reverse('contest_messages', kwargs={'contest_id': request.contest.id}) return make_navbar_badge(link, text) else: return ''
def navbar_messages_generator(request): if request.contest is None: return {} is_admin = is_contest_basicadmin(request) vis_messages = visible_messages(request) if is_admin: messages = unanswered_questions(vis_messages) else: messages = new_messages(request, vis_messages) count = messages.count() if count: text = ungettext('%(count)d NEW MESSAGE', '%(count)d NEW MESSAGES', count) % {'count': count} if count == 1: m = messages.get() link = reverse('message', kwargs={ 'contest_id': request.contest.id, 'message_id': m.top_reference_id if vis_messages.filter(id=m.top_reference_id).exists() else m.id }) else: link = reverse('contest_messages', kwargs={'contest_id': request.contest.id}) return {'link': link, 'text': text, 'id': 'contest_new_messages'} else: return {'link': None, 'text': None, 'id': 'contest_new_messages'}
def navbar_messages_generator(request): if request.contest is None: return {} is_admin = is_contest_admin(request) messages = visible_messages(request) visible_ids = messages.values_list('id', flat=True) if is_admin: messages = unanswered_questions(messages) else: messages = new_messages(request, messages) count = messages.count() if count: text = ungettext('%(count)d NEW MESSAGE', '%(count)d NEW MESSAGES', count) % { 'count': count } if count == 1: m = messages.get() link = reverse('message', kwargs={ 'contest_id': request.contest.id, 'message_id': m.top_reference_id if m.top_reference_id in visible_ids else m.id }) else: link = reverse('contest_messages', kwargs={'contest_id': request.contest.id}) return {'link': link, 'text': text, 'id': 'contest_new_messages'} else: return {'link': None, 'text': None, 'id': 'contest_new_messages'}
def contest_dashboard_view(request, round_pk=None): messages = messages_template_context(request, visible_messages(request))[ :NUMBER_OF_RECENT_ACTIONS] queryset = Submission.objects \ .filter(problem_instance__contest=request.contest) \ .order_by('-date') \ .select_related('user', 'problem_instance', 'problem_instance__contest', 'problem_instance__round', 'problem_instance__problem') ss = [submission_template_context(request, s) for s in queryset[:NUMBER_OF_RECENT_ACTIONS]] rtimes = list(rounds_times(request, request.contest).items()) rtimes.sort(key=lambda r_rt: r_rt[0].start_date) if round_pk is None and len(rtimes) > 0: # First active round, or last one if there are no active ones round_pk = next( ((r, rt) for r, rt in rtimes if rt.is_active(request.timestamp)), rtimes[-1])[0].pk context = { 'round_times': rtimes, 'selected_round': None, 'records': messages, 'submissions': ss } if round_pk is not None: context.update(get_round_context(request, round_pk)) return TemplateResponse(request, 'simpleui/contest/contest.html', context)
def navbar_messages_generator(request): if request.contest is None: return {} is_admin = is_contest_admin(request) messages = visible_messages(request) visible_ids = messages.values_list('id', flat=True) if is_admin: messages = unanswered_questions(messages) else: messages = new_messages(request, messages) count = messages.count() if count: text = ungettext('%(count)d NEW MESSAGE', '%(count)d NEW MESSAGES', count) % {'count': count} if count == 1: m = messages.get() link = reverse('message', kwargs={ 'contest_id': request.contest.id, 'message_id': m.top_reference_id if m.top_reference_id in visible_ids else m.id }) else: link = reverse('contest_messages', kwargs={'contest_id': request.contest.id}) return {'link': link, 'text': text, 'id': 'contest_new_messages'} else: return {'link': None, 'text': None, 'id': 'contest_new_messages'}
def messages_fragment(request): messages = messages_template_context(request, visible_messages(request)) messages = messages[:getattr(settings, 'NUM_DASHBOARD_MESSAGES', 8)] if not messages: return None context = { 'records': messages, } return render_to_string('dashboard/messages.html', context_instance=RequestContext(request, context))
def contest_dashboard_view(request, round_pk=None): if request.user.is_superuser: return redirect('default_contest_view', contest_id=request.contest.id) messages = messages_template_context( request, visible_messages(request))[:NUMBER_OF_RECENT_ACTIONS] queryset = (Submission.objects.filter( problem_instance__contest=request.contest).order_by( '-date').select_related( 'user', 'problem_instance', 'problem_instance__contest', 'problem_instance__round', 'problem_instance__problem', )) ss = [ submission_template_context(request, s) for s in queryset[:NUMBER_OF_RECENT_ACTIONS] ] rtimes = list(rounds_times(request, request.contest).items()) rtimes.sort(key=lambda r_rt: r_rt[0].start_date) if round_pk is None and len(rtimes) > 0: # First active round, or last one if there are no active ones round_pk = next( ((r, rt) for r, rt in rtimes if rt.is_active(request.timestamp)), rtimes[-1])[0].pk context = { 'round_times': rtimes, 'selected_round': None, 'records': messages, 'submissions': ss, 'contest_dashboard_url_name': 'simpleui_contest_dashboard', 'public_contest': isinstance( request.contest.controller.registration_controller(), PublicContestRegistrationController, ), } if round_pk is not None: context.update(get_round_context(request, round_pk)) return TemplateResponse(request, 'simpleui/contest/contest.html', context)
def messages_fragment(request): messages = messages_template_context(request, visible_messages(request)) dashboard_msg_cnt_limit = getattr(settings, 'NUM_DASHBOARD_MESSAGES', 8) show_more_button = len(messages) > dashboard_msg_cnt_limit messages = messages[:dashboard_msg_cnt_limit] if not messages: return None context = { 'records': messages, 'show_more_button': show_more_button, } return render_to_string('dashboard/messages.html', context=context, request=request)
def get_contest_participant_info_list(self, request, user): messages = messages_template_context(request, visible_messages(request, author=user)) prev = super(QuestionsContestControllerMixin, self) \ .get_contest_participant_info_list(request, user) if messages: prev.append((30, render_to_string('questions/user_list_table.html', {'contest': request.contest, 'hide_author': True, 'records': messages, 'user': request.user}))) return prev
def get_contest_participant_info_list(self, request, user): messages = messages_template_context( request, visible_messages(request, author=user)) prev = super(QuestionsContestControllerMixin, self) \ .get_contest_participant_info_list(request, user) if messages: prev.append((30, render_to_string( 'questions/user_list_table.html', { 'contest': request.contest, 'hide_author': True, 'records': messages, 'user': request.user }))) return prev
def contest_dashboard_view(request, contest_id): top_links = grouper(3, top_links_registry.template_context(request)) submissions = Submission.objects \ .filter(problem_instance__contest=request.contest) \ .order_by('-date').select_related() controller = request.contest.controller submissions = controller.filter_visible_submissions(request, submissions) submissions = submissions[:getattr(settings, 'NUM_DASHBOARD_SUBMISSIONS', 8)] submissions = [submission_template_context(request, s) for s in submissions] show_scores = bool(s for s in submissions if s.score is not None) messages = messages_template_context(request, visible_messages(request)) context = { 'top_links': top_links, 'submissions': submissions, 'records': messages, 'show_scores': show_scores } return TemplateResponse(request, 'dashboard/dashboard.html', context)
def contest_dashboard_view(request, contest_id): top_links = grouper(3, top_links_registry.template_context(request)) submissions = Submission.objects \ .filter(problem_instance__contest=request.contest) \ .order_by('-date').select_related() cc = request.contest.controller submissions = cc.filter_my_visible_submissions(request, submissions) submissions = \ submissions[:getattr(settings, 'NUM_DASHBOARD_SUBMISSIONS', 8)] submissions = [ submission_template_context(request, s) for s in submissions ] show_scores = bool(s for s in submissions if s.score is not None) messages = messages_template_context(request, visible_messages(request)) messages = messages[:getattr(settings, 'NUM_DASHBOARD_MESSAGES', 8)] context = { 'top_links': top_links, 'submissions': submissions, 'records': messages, 'show_scores': show_scores } return TemplateResponse(request, 'dashboard/dashboard.html', context)
def contest_dashboard_view(request, round_pk=None): messages = messages_template_context( request, visible_messages(request))[:NUMBER_OF_RECENT_ACTIONS] queryset = Submission.objects \ .filter(problem_instance__contest=request.contest) \ .order_by('-date') \ .select_related('user', 'problem_instance', 'problem_instance__contest', 'problem_instance__round', 'problem_instance__problem') ss = [ submission_template_context(request, s) for s in queryset[:NUMBER_OF_RECENT_ACTIONS] ] rtimes = rounds_times(request).items() rtimes.sort(key=lambda (r, rt): r.start_date) if round_pk is None and len(rtimes) > 0: # First active round, or last one if there are no active ones round_pk = next( ((r, rt) for r, rt in rtimes if rt.is_active(request.timestamp)), rtimes[-1])[0].pk context = { 'round_times': rtimes, 'selected_round': None, 'records': messages, 'submissions': ss } if round_pk is not None: context.update(get_round_context(request, round_pk)) return TemplateResponse(request, 'simpleui/contest/contest.html', context)
def allowed_to_see(msg, user): request = fake_request(user, msg.contest) return msg in visible_messages(request)