121 lines
3.5 KiB
Python
121 lines
3.5 KiB
Python
import string
|
|
from django.template import RequestContext
|
|
from django.shortcuts import render_to_response, get_object_or_404
|
|
from django.utils.translation import ugettext as _
|
|
|
|
from shelfzilla.views import View
|
|
from ..models import Series
|
|
from .. import forms
|
|
|
|
|
|
class SeriesView(View):
|
|
section = 'series'
|
|
|
|
def get_object(self, sid, slug=None):
|
|
if slug:
|
|
item = get_object_or_404(Series, pk=sid, slug=slug)
|
|
else:
|
|
item = get_object_or_404(Series, pk=sid)
|
|
|
|
return item
|
|
|
|
|
|
class SeriesListView(SeriesView):
|
|
template = 'manga/series/list.html'
|
|
filters = ['other']
|
|
|
|
def get(self, request):
|
|
letters = list(string.ascii_uppercase)
|
|
current_letter = request.GET.get('letter', 'A')
|
|
|
|
items = self.get_items(current_letter)
|
|
|
|
context = {
|
|
'items': items,
|
|
'letters': letters,
|
|
'current_letter': current_letter
|
|
}
|
|
ctx = RequestContext(request, self.get_context(context))
|
|
return render_to_response(self.template, context_instance=ctx)
|
|
|
|
def get_items(self, letter):
|
|
result = Series.objects.all()
|
|
if len(letter) == 1:
|
|
result = Series.objects.filter(name__istartswith=letter)
|
|
elif letter == 'all':
|
|
result = Series.objects.all()
|
|
elif letter == 'other':
|
|
result = Series.objects.exclude(name__regex=r'^[a-zA-Z]')
|
|
|
|
return result
|
|
|
|
|
|
class SeriesDetailView(SeriesView):
|
|
template = 'manga/series/detail.html'
|
|
filters = ('language', 'publisher', 'collection')
|
|
|
|
def get(self, request, sid, slug=None):
|
|
vol_filters = {
|
|
'for_review': False,
|
|
'hidden': False,
|
|
}
|
|
for search_filter in self.filters:
|
|
if search_filter in request.POST and request.POST[search_filter] != "0":
|
|
vol_filters['{}_id'.format(search_filter)] = \
|
|
int(request.POST[search_filter])
|
|
|
|
# TODO use self.get_object()
|
|
if slug:
|
|
item = get_object_or_404(Series, pk=sid, slug=slug)
|
|
else:
|
|
item = get_object_or_404(Series, pk=sid)
|
|
|
|
context = {
|
|
'item': item,
|
|
'item_volumes': item.volumes.filter(**vol_filters),
|
|
'volume_filters': vol_filters,
|
|
}
|
|
|
|
ctx = RequestContext(request, self.get_context(context))
|
|
return render_to_response(self.template, context_instance=ctx)
|
|
|
|
def post(self, request, sid, slug=None):
|
|
return self.get(request, sid, slug)
|
|
|
|
|
|
class SeriesSuggestVolumeView(SeriesView):
|
|
template = 'manga/series/suggest_volume.html'
|
|
form = forms.SuggestVolumeForm
|
|
|
|
def get(self, request, sid, slug=None):
|
|
item = self.get_object(sid, slug)
|
|
context = {
|
|
'item': item,
|
|
'form': self.form(),
|
|
}
|
|
|
|
ctx = RequestContext(request, self.get_context(context))
|
|
return render_to_response(self.template, context_instance=ctx)
|
|
|
|
def post(self, request, sid, slug=None):
|
|
item = self.get_object(sid, slug)
|
|
|
|
form = self.form(self.request.POST)
|
|
|
|
context = {
|
|
'item': item,
|
|
}
|
|
|
|
if form.is_valid():
|
|
obj = form.save(commit=False)
|
|
obj.added_by = request.user
|
|
obj.series = item
|
|
obj.for_review = True
|
|
obj.save()
|
|
context['success'] = True
|
|
else:
|
|
context['form'] = form
|
|
|
|
ctx = RequestContext(request, self.get_context(context))
|
|
return render_to_response(self.template, context_instance=ctx)
|