def discussion_add_edit(request, ring_id=None, slug=None): if ring_id is None: ring = Ring(category = Category.objects.get(pk=1), datetime=timezone.now()) punch = Punch(ring=ring, side='blue') template_title = _(u'Start a new topic') else: ring = get_object_or_404(Ring.objects.all(), pk=ring_id) punch = Punch(ring=ring) template_title = _(u'Edit existing topic') if request.method == 'POST': ring_form = RingForm(request.POST) punch_form = PunchForm(request.POST) if ring_form.is_valid() and punch_form.is_valid(): ring = ring_form.save(commit=False) punch = punch_form.save(commit=False) datetime = timezone.now() ring.datetime = datetime ring.save() if punch.side == 'red': ring.red.add(request.user) else: ring.blue.add(request.user) ring.save() if punch.id is None: punch.side='blue' punch.ring = ring punch.speaker = request.user punch.datetime = datetime punch.save() request.user.score = get_score_for_user(request.user) request.user.save() if ring_form.cleaned_data['blue_invite']: invitation = DuelInvitation( email=ring_form.cleaned_data['blue_invite'], code=get_user_model().objects.make_random_password(20), sender=request.user, ring=ring ) invitation.save() try: invitation.send() messages.warning(request, _(u'An invitation was sent to %(email)s.') % {'email' : invitation.email}) except Exception: messages.error(request, _(u'An error happened when sending the invitation.')) #log_contact(request, contact, 'contact_add_edit', secondary, profile, is_edit) else: messages.warning(request, _(u'Your open topic has been started. Lets wait and see if someone bites...')) return HttpResponseRedirect(reverse('discuss-topic', kwargs={'ring_id':str(ring.pk), 'slug':ring.slug})) else: ring_form = RingForm(instance=ring) punch_form = PunchForm(instance=punch, is_first=True) rings = Ring.objects.filter(Q(red=request.user)|Q(blue=request.user)) variables = {'ring_form':ring_form, 'punch_form':punch_form, 'template_title': template_title, 'rings':rings } return render(request, 'discussion.html', variables)