Skip to content

Commit

Permalink
Merge pull request #379 from CTPUG/features/issue-354-withdraw-talks
Browse files Browse the repository at this point in the history
Hack in withdrawn talk status
  • Loading branch information
drnlm committed Oct 7, 2017
2 parents 9be0736 + d380147 commit 281579d
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 15 deletions.
4 changes: 2 additions & 2 deletions wafer/talks/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,8 @@ def __init__(self, *args, **kwargs):
FormActions(
submit_button,
HTML('<a href="%s" class="btn btn-danger">%s</a>'
% (reverse('wafer_talk_delete', args=(instance.pk,)),
_('Delete')))))
% (reverse('wafer_talk_withdraw', args=(instance.pk,)),
_('Withdraw Talk')))))
else:
self.helper.add_input(submit_button)

Expand Down
20 changes: 20 additions & 0 deletions wafer/talks/migrations/0015_add_withdrawn_status.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10 on 2017-10-04 16:51
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('talks', '0014_video'),
]

operations = [
migrations.AlterField(
model_name='talk',
name='status',
field=models.CharField(choices=[(b'A', b'Accepted'), (b'R', b'Not Accepted'), (b'C', b'Talk Cancelled'), (b'U', b'Under Consideration'), (b'S', b'Submitted'), (b'P', b'Provisionally Accepted'), (b'W', b'Talk Withdrawn')], default=b'S', max_length=1),
),
]
3 changes: 3 additions & 0 deletions wafer/talks/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
ACCEPTED = 'A'
REJECTED = 'R'
CANCELLED = 'C'
WITHDRAWN = 'W'


# Utility functions used in the forms
Expand Down Expand Up @@ -109,6 +110,7 @@ class Meta:
(UNDER_CONSIDERATION, 'Under Consideration'),
(SUBMITTED, 'Submitted'),
(PROVISIONAL, 'Provisionally Accepted'),
(WITHDRAWN, 'Talk Withdrawn'),
)

talk_id = models.AutoField(primary_key=True)
Expand Down Expand Up @@ -226,6 +228,7 @@ def has_url(self):
fget=lambda x: x.status == UNDER_CONSIDERATION)
reject = property(fget=lambda x: x.status == REJECTED)
cancelled = property(fget=lambda x: x.status == CANCELLED)
withdrawn = property(fget=lambda x: x.status == WITHDRAWN)

def _is_among_authors(self, user):
if self.corresponding_author.username == user.username:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@
{% load i18n %}
{% load crispy_forms_tags %}
{% block content %}
<section class="wafer wafer-talk-delete">
<h1>{% trans "Confirm Talk Deletion" %}</h1>
<section class="wafer wafer-talk-withdrawal">
<h1>{% trans "Confirm Talk Withdrawal" %}</h1>
<div class="alert alert-danger">
{% blocktrans with talk_title=object.title talk_url=object.get_absolute_url %}
You are about to delete the talk <a href="{{ talk_url }}">"{{ talk_title }}"</a>.<br>
This cannot be undone.
You are about to withdraw the talk <a href="{{ talk_url }}">"{{ talk_title }}"</a>.<br>
This cannot be undone without help from the site administrators.
{% endblocktrans %}
</div>
<form action="" method="post">
{% csrf_token %}
<input type="submit" class="btn btn-danger" value="{% trans 'Confirm Deletion' %}">
<input type="submit" class="btn btn-danger" value="{% trans 'Confirm Withdrawal' %}">
</form>
</section>
{% endblock %}
6 changes: 3 additions & 3 deletions wafer/talks/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from rest_framework_extensions import routers

from wafer.talks.views import (
Speakers, TalkCreate, TalkDelete, TalkUpdate, TalkView, UsersTalks,
Speakers, TalkCreate, TalkWithdraw, TalkUpdate, TalkView, UsersTalks,
TalksViewSet, TalkUrlsViewSet)

router = routers.ExtendedSimpleRouter()
Expand All @@ -20,8 +20,8 @@
url(r'^(?P<pk>\d+)/$', TalkView.as_view(), name='wafer_talk'),
url(r'^(?P<pk>\d+)/edit/$', TalkUpdate.as_view(),
name='wafer_talk_edit'),
url(r'^(?P<pk>\d+)/delete/$', TalkDelete.as_view(),
name='wafer_talk_delete'),
url(r'^(?P<pk>\d+)/withdraw/$', TalkWithdraw.as_view(),
name='wafer_talk_withdraw'),
url(r'^speakers/$', Speakers.as_view(), name='wafer_talks_speakers'),
url(r'^api/', include(router.urls)),
]
18 changes: 13 additions & 5 deletions wafer/talks/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
from rest_framework_extensions.mixins import NestedViewSetMixin

from wafer.utils import LoginRequiredMixin
from wafer.talks.models import Talk, TalkType, TalkUrl, ACCEPTED, CANCELLED
from wafer.talks.models import (Talk, TalkType, TalkUrl, ACCEPTED, CANCELLED,
WITHDRAWN)
from wafer.talks.forms import get_talk_form_class
from wafer.talks.serializers import TalkSerializer, TalkUrlSerializer
from wafer.users.models import UserProfile
Expand Down Expand Up @@ -129,15 +130,22 @@ def form_valid(self, form):
return super(TalkUpdate, self).form_valid(form)


class TalkDelete(EditOwnTalksMixin, DeleteView):
class TalkWithdraw(EditOwnTalksMixin, DeleteView):
model = Talk
template_name = 'wafer.talks/talk_delete.html'
template_name = 'wafer.talks/talk_withdraw.html'
success_url = reverse_lazy('wafer_page')

def delete(self, request, *args, **kwargs):
"""Override delete to only withdraw"""
talk = self.get_object()
talk.status = WITHDRAWN
talk.save()
return HttpResponseRedirect(self.success_url)

@revisions.create_revision()
def form_valid(self, form):
# We don't add any metadata, as the admin site
# doesn't show it for deleted talks.
revisions.set_user(self.request.user)
revisions.set_comment("Talk Withdrawn")
return super(TalkDelete, self).form_valid(form)


Expand Down

0 comments on commit 281579d

Please sign in to comment.