def preview(request, book, chunk=None, rev=None): """Creates a cover image. If chunk and rev number are given, use version from given revision. If rev is not given, use publishable version. """ from PIL import Image from librarian.cover import DefaultEbookCover from librarian.dcparser import BookInfo chunk = Chunk.get(book, chunk) if rev is not None: try: revision = chunk.at_revision(rev) except Chunk.change_model.DoesNotExist: raise Http404 else: revision = chunk.publishable() if revision is None: raise Http404 xml = revision.materialize().encode('utf-8') try: info = BookInfo.from_string(xml) except: return HttpResponseRedirect(os.path.join(settings.STATIC_URL, "img/sample_cover.png")) cover = DefaultEbookCover(info) response = HttpResponse(mimetype=cover.mime_type()) image = cover.image().resize(PREVIEW_SIZE, Image.ANTIALIAS) image.save(response, cover.format) return response
def editor_readonly(request, slug, chunk=None, template_name='wiki/document_details_readonly.html'): try: chunk = Chunk.get(slug, chunk) revision = request.GET['revision'] except (Chunk.MultipleObjectsReturned, Chunk.DoesNotExist, KeyError): raise Http404 if not chunk.book.accessible(request): return HttpResponseForbidden("Not authorized.") access_time = datetime.now() last_books = request.session.get("wiki_last_books", {}) last_books[slug, chunk.slug] = { 'time': access_time, 'title': chunk.book.title, } if len(last_books) > MAX_LAST_DOCS: oldest_key = min(last_books, key=lambda x: last_books[x]['time']) del last_books[oldest_key] request.session['wiki_last_books'] = last_books return direct_to_template(request, template_name, extra_context={ 'chunk': chunk, 'revision': revision, 'readonly': True, 'REDMINE_URL': settings.REDMINE_URL, })
def chunk_edit(request, slug, chunk): try: doc = Chunk.get(slug, chunk) except (Chunk.MultipleObjectsReturned, Chunk.DoesNotExist): raise Http404 if not doc.book.accessible(request): return HttpResponseForbidden("Not authorized.") if request.method == "POST": form = forms.ChunkForm(request.POST, instance=doc) if form.is_valid(): form.save() go_next = request.GET.get('next', None) if go_next: go_next = urlquote_plus(unquote(iri_to_uri(go_next)), safe='/?=&') else: go_next = doc.book.get_absolute_url() return http.HttpResponseRedirect(go_next) else: form = forms.ChunkForm(instance=doc) referer = request.META.get('HTTP_REFERER') if referer: parts = urlsplit(referer) parts = ['', ''] + list(parts[2:]) go_next = urlquote_plus(urlunsplit(parts)) else: go_next = '' return render(request, "catalogue/chunk_edit.html", { "chunk": doc, "form": form, "go_next": go_next, })
def chunk_add(request, slug, chunk): try: doc = Chunk.get(slug, chunk) except (Chunk.MultipleObjectsReturned, Chunk.DoesNotExist): raise Http404 if not doc.book.accessible(request): return HttpResponseForbidden("Not authorized.") if request.method == "POST": form = forms.ChunkAddForm(request.POST, instance=doc) if form.is_valid(): if request.user.is_authenticated(): creator = request.user else: creator = None doc.split(creator=creator, slug=form.cleaned_data['slug'], title=form.cleaned_data['title'], gallery_start=form.cleaned_data['gallery_start'], user=form.cleaned_data['user'], stage=form.cleaned_data['stage'] ) return http.HttpResponseRedirect(doc.book.get_absolute_url()) else: form = forms.ChunkAddForm(initial={ "slug": str(doc.number + 1), "title": "cz. %d" % (doc.number + 1, ), }) return render(request, "catalogue/chunk_add.html", { "chunk": doc, "form": form, })
def revision(request, slug, chunk=None): try: doc = Chunk.get(slug, chunk) except (Chunk.MultipleObjectsReturned, Chunk.DoesNotExist): raise Http404 if not doc.book.accessible(request): return HttpResponseForbidden("Not authorized.") return http.HttpResponse(str(doc.revision()))
def editor(request, slug, chunk=None, template_name='wiki/document_details.html'): try: chunk = Chunk.get(slug, chunk) except Chunk.MultipleObjectsReturned: # TODO: choice page raise Http404 except Chunk.DoesNotExist: if chunk is None: try: book = Book.objects.get(slug=slug) except Book.DoesNotExist: return http.HttpResponseRedirect(reverse("catalogue_create_missing", args=[slug])) else: raise Http404 if not chunk.book.accessible(request): return HttpResponseForbidden("Not authorized.") access_time = datetime.now() last_books = request.session.get("wiki_last_books", {}) last_books[slug, chunk.slug] = { 'time': access_time, 'title': chunk.pretty_name(), } if len(last_books) > MAX_LAST_DOCS: oldest_key = min(last_books, key=lambda x: last_books[x]['time']) del last_books[oldest_key] request.session['wiki_last_books'] = last_books return direct_to_template(request, template_name, extra_context={ 'chunk': chunk, 'forms': { "text_save": forms.DocumentTextSaveForm(user=request.user, prefix="textsave"), "text_revert": forms.DocumentTextRevertForm(prefix="textrevert"), "pubmark": forms.DocumentPubmarkForm(prefix="pubmark"), }, 'can_pubmark': request.user.has_perm('catalogue.can_pubmark'), 'REDMINE_URL': settings.REDMINE_URL, })