def sprints(request): events = [] attendees = defaultdict(list) for sp in models.SprintPresence.objects\ .filter(sprint__conference=settings.CONFERENCE_CONFERENCE)\ .select_related('user__user'): attendees[sp.sprint_id].append(sp.user) if request.user.is_authenticated(): user_attends = set( x['sprint'] for x in models.SprintPresence.objects\ .filter(sprint__conference=settings.CONFERENCE_CONFERENCE)\ .values('sprint')\ .filter(user=request.user)\ ) else: user_attends = set() for e in models.Sprint.objects.filter( conference=settings.CONFERENCE_CONFERENCE).order_by('title'): if request.user.is_superuser or request.user == e.user: form = p3forms.FormSprint(instance=e, prefix='f%d' % e.id) else: form = None events.append({ 'object': e, 'form': form, 'attendees': attendees.get(e.id, []), 'user_attend': e.id in user_attends, }) return { 'events': events, }
def sprint_submission(request): if request.method == 'POST': form = p3forms.FormSprint(data=request.POST) if form.is_valid(): s = form.save(commit=False) s.user = request.user.assopy_user s.conference_id = settings.CONFERENCE_CONFERENCE s.save() messages.info(request, 'Your sprint has been submitted, thank you!') return HttpResponseRedirectSeeOther( reverse('p3-sprint-submission')) else: form = p3forms.FormSprint() return { 'form': form, }
def sprint(request, sid): e = get_object_or_404(models.Sprint, pk=sid) if request.method == 'POST': if 'user-attend' in request.POST: try: p = models.SprintPresence.objects.get( sprint=e, user=request.user.assopy_user) except models.SprintPresence.DoesNotExist: models.SprintPresence(sprint=e, user=request.user.assopy_user).save() else: p.delete() else: if request.user != e.user and not request.user.is_superuser: return http.HttpResponseForbidden() form = p3forms.FormSprint(instance=e, data=request.POST, prefix='f%d' % (e.id, )) if form.is_valid(): form.save() else: return http.HttpResponseBadRequest(repr(form.errors)) if request.user.is_superuser or request.user == e.user: form = p3forms.FormSprint(instance=e, prefix='f%d' % e.id) else: form = None attendees = list(x.user for x in models.SprintPresence.objects.filter( sprint=e).select_related('user__user')) return { 'data': { 'object': e, 'form': form, 'attendees': attendees, 'user_attend': request.user.id in set(x.user.id for x in attendees), }, }