from django.conf import settings
from django.template import RequestContext
from django.shortcuts import render_to_response, get_object_or_404
-from django.http import HttpResponse, HttpResponseRedirect, Http404
+from django.http import HttpResponse, HttpResponseRedirect, Http404, HttpResponsePermanentRedirect
from django.core.urlresolvers import reverse
-from django.db.models import Q
+from django.db.models import Count, Sum, Q
from django.contrib.auth.decorators import login_required, user_passes_test
from django.utils.datastructures import SortedDict
from django.views.decorators.http import require_POST
from newtagging import views as newtagging_views
from pdcounter import models as pdcounter_models
from pdcounter import views as pdcounter_views
+from suggest.forms import PublishingSuggestForm
from slughifi import slughifi
def audiobook_list(request):
- return book_list(request, Q(medias__type='mp3') | Q(medias__type='ogg'),
+ return book_list(request, Q(media__type='mp3') | Q(media__type='ogg'),
template_name='catalogue/audiobook_list.html')
def daisy_list(request):
- return book_list(request, Q(medias__type='daisy'),
+ return book_list(request, Q(media__type='daisy'),
template_name='catalogue/daisy_list.html')
raise Http404
except models.Tag.MultipleObjectsReturned, e:
return differentiate_tags(request, e.tags, e.ambiguous_slugs)
+ except models.Tag.UrlDeprecationWarning, e:
+ return HttpResponsePermanentRedirect(reverse('tagged_object_list', args=['/'.join(tag.url_chunk for tag in e.tags)]))
try:
if len(tags) > settings.MAX_TAG_LIST:
extra_info = book.get_extra_info_value()
+ projects = set()
+ for m in book.media.filter(type='mp3'):
+ # ogg files are always from the same project
+ meta = m.get_extra_info_value()
+ project = meta.get('project')
+ if not project:
+ # temporary fallback
+ project = u'CzytamySłuchając'
+
+ projects.add((project, meta.get('funded_by', '')))
+ projects = sorted(projects)
+
form = forms.SearchForm()
return render_to_response('catalogue/book_detail.html', locals(),
context_instance=RequestContext(request))
{'tags':tag_list, 'prefix':prefix, 'results':((x, _get_result_link(x, tag_list), _get_result_type(x)) for x in result)},
context_instance=RequestContext(request))
else:
- return render_to_response('catalogue/search_no_hits.html', {'tags':tag_list, 'prefix':prefix},
+ form = PublishingSuggestForm(initial={"books": prefix + ", "})
+ return render_to_response('catalogue/search_no_hits.html',
+ {'tags':tag_list, 'prefix':prefix, "pubsuggest_form": form},
context_instance=RequestContext(request))
# ==================
# = Authentication =
# ==================
-
-@cache.never_cache
-def simple_login(request):
- if request.method == "GET":
- #next = request.REQUEST.get('next', '')
- #if next == '':
- form = AuthenticationForm(prefix='login')
- return render_to_response('auth/login.html', locals(),
- context_instance=RequestContext(request))
- #else:
- # return HttpResponseRedirect("/"+next)
-
- elif request.method == "POST":
- form = AuthenticationForm(data=request.POST, prefix='login')
- if form.is_valid():
- auth.login(request, form.get_user())
- url = request.META['HTTP_REFERER'].split("next=")[1]
- url = url.replace("%3F","?").replace("%3D","=")
- return HttpResponseRedirect(url)
-
-
@require_POST
@cache.never_cache
def login(request):
return HttpResponse(datetime.now().strftime('%Y/%m/%d %H:%M:%S'))
-@cache.never_cache
-def xmls(request):
- """"
- Create a zip archive with all XML files.
- This should be removed when we have real API.
- """
- temp = tempfile.TemporaryFile()
- archive = zipfile.ZipFile(temp, 'w')
-
- for book in models.Book.objects.all():
- archive.write(book.xml_file.path, str('%s.xml' % book.slug))
- archive.close()
-
- response = HttpResponse(content_type='application/zip', mimetype='application/x-zip-compressed')
- response['Content-Disposition'] = 'attachment; filename=xmls.zip'
- response['Content-Length'] = temp.tell()
-
- temp.seek(0)
- response.write(temp.read())
- return response
-
-
-
# info views for API
def book_info(request, id, lang='pl'):