tr :nth-child(2) {
text-align: left;
}
- span.title {
+ a.title {
font-weight: bold;
}
span.description {
{% for sound in object_list %}
<tr>
<td><a class="external-link" href="{{ sound.channel.channel_url }}">{{ sound.channel.title }}</a></td>
- <td><span class="title">{{ sound.title }}</span>
+ <td><a class="title" href="{% url 'earwig-sound-detail' pk=sound.pk %}">{{ sound.title }}</a>
{% if sound.description %}<span class="description">{{ sound.description|striptags|truncatewords:40|safe }}</span>{% endif %}
</td>
<td>{{ sound.creation_timestamp }}</td>
- <td><a href="{% url 'earwig-sound-publish' pk=sound.pk %}">{% trans "Publish" %}</a> /
- <a href="{% url 'earwig-sound-reject' pk=sound.pk %}">{% trans "Reject" %}</a></td>
+ <td>
+ {% if sound.can_publish %}
+ <a href="{% url 'earwig-sound-publish' pk=sound.pk %}?next=home">{% trans "Publish" %}</a> /
+ {% endif %}
+ {% if sound.can_reject %}
+ <a href="{% url 'earwig-sound-reject' pk=sound.pk %}?next=home">{% trans "Reject" %}</a> /
+ {% endif %}
+ {% if sound.can_unpublish %}
+ <a href="{% url 'earwig-sound-unpublish' pk=sound.pk %}">{% trans "Unpublish" %}</a>
+ {% endif %}
</tr>
{% empty %}
<tr>
--- /dev/null
+{% extends "earwig/manager_home.html" %}
+{% load i18n %}
+
+{% block appbar %}
+<h2>{{ object.channel }} - {{ object }} [{{ object.status_label }}]</h2>
+<span class="actions">
+{% if object.can_publish %}
+<a href="{% url 'earwig-sound-publish' pk=object.pk %}">{% trans "Publish" %}</a>
+{% endif %}
+{% if object.can_reject %}
+<a href="{% url 'earwig-sound-reject' pk=object.pk %}">{% trans "Reject" %}</a>
+{% endif %}
+{% if object.can_unpublish %}
+<a href="{% url 'earwig-sound-unpublish' pk=object.pk %}">{% trans "Unpublish" %}</a>
+{% endif %}
+</span>
+{% endblock %}
+
+{% block content %}
+<ul>
+ <li>{% trans "Address:" %} <a href="{{ object.page_url }}">{{ object.page_url }}</a></li>
+ <li>{% trans "Original Publication Date:" %} {{ object.original_publication_date }}</li>
+ <li><audio controls><source src="{{ object.sound_url }}"></audio></li>
+</ul>
+
+<div class="description">
+{{ object.description|safe }}
+</div>
+{% endblock %}
url(r'^channels/$', views.channels, name='earwig-channels'),
url(r'^channels/add/$', views.channel_add, name='earwig-channel-add'),
url(r'^channels/(?P<pk>\d+)/delete/$', views.channel_delete, name='earwig-channel-delete'),
+ url(r'^sound/(?P<pk>\d+)/$', views.sound_detail, name='earwig-sound-detail'),
url(r'^sound/(?P<pk>\d+)/publish/$', views.sound_publish, name='earwig-sound-publish'),
+ url(r'^sound/(?P<pk>\d+)/unpublish/$', views.sound_unpublish, name='earwig-sound-unpublish'),
url(r'^sound/(?P<pk>\d+)/reject/$', views.sound_reject, name='earwig-sound-reject'),
]
channel_delete = ChannelDeleteView.as_view()
-class SoundPublishView(DetailView):
+class SoundDetailView(DetailView):
model = Sound
+ template_name = 'earwig/manager_sound.html'
+sound_detail = SoundDetailView.as_view()
+
+
+class SoundActionView(DetailView):
+ model = Sound
+
+ def get_success_url(self):
+ if self.request.GET.get('next') == 'home':
+ return reverse_lazy('earwig-manager-homepage')
+ return reverse_lazy('earwig-sound-detail', kwargs={'pk': self.get_object().pk})
+
+
+class SoundPublishView(SoundActionView):
def get(self, *args, **kwargs):
self.get_object().publish()
messages.success(self.request, _('%s has been published.') % self.get_object())
- return redirect('earwig-manager-homepage')
+ return redirect(self.get_success_url())
sound_publish = SoundPublishView.as_view()
-class SoundRejectView(DetailView):
- model = Sound
+class SoundUnpublishView(SoundActionView):
+ def get(self, *args, **kwargs):
+ self.get_object().unpublish()
+ messages.success(self.request, _('%s has been unpublished.') % self.get_object())
+ return redirect(self.get_success_url())
+
+sound_unpublish = SoundUnpublishView.as_view()
+
+class SoundRejectView(SoundActionView):
def get(self, *args, **kwargs):
self.get_object().reject()
messages.warning(self.request, _('%s has been rejected.') % self.get_object())
- return redirect('earwig-manager-homepage')
+ return redirect(self.get_success_url())
sound_reject = SoundRejectView.as_view()
ordering = ('channel', 'original_publication_date', 'title')
indexes = [models.Index(fields=['status'])]
+ def can_publish(self):
+ return self.status != 'published'
+
+ def can_reject(self):
+ return self.status in ('', 'published')
+
+ def can_unpublish(self):
+ return self.status == 'published'
+
+ def status_label(self):
+ return dict(STATUSES).get(self.status)
+
def publish(self):
self.status = 'published'
self.save()