X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/5913c54d19b8f6775633176032161d49f9b2f1aa..b485e5fbd3a127dc13d8b647c6819c2e314cf0fd:/src/wiki/views.py diff --git a/src/wiki/views.py b/src/wiki/views.py index e1ef6aed..7bcea51f 100644 --- a/src/wiki/views.py +++ b/src/wiki/views.py @@ -1,24 +1,25 @@ -# -*- coding: utf-8 -*- +# This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# from datetime import datetime import os import logging from time import mktime -import urllib +from urllib.parse import quote from django.conf import settings -from django.core.urlresolvers import reverse +from django.urls import reverse from django import http from django.http import Http404, HttpResponseForbidden from django.middleware.gzip import GZipMiddleware from django.utils.decorators import decorator_from_middleware -from django.utils.encoding import smart_unicode from django.utils.formats import localize from django.utils.translation import ugettext as _ from django.views.decorators.http import require_POST, require_GET from django.shortcuts import get_object_or_404, render -from catalogue.models import Book, Chunk -import nice_diff +from documents.models import Book, Chunk +from . import nice_diff from wiki import forms from wiki.helpers import (JSONResponse, JSONFormInvalid, JSONServerError, ajax_require_permission) @@ -46,7 +47,7 @@ def editor(request, slug, chunk=None, template_name='wiki/document_details.html' try: book = Book.objects.get(slug=slug) except Book.DoesNotExist: - return http.HttpResponseRedirect(reverse("catalogue_create_missing", args=[slug])) + return http.HttpResponseRedirect(reverse("documents_create_missing", args=[slug])) else: raise Http404 if not chunk.book.accessible(request): @@ -71,11 +72,22 @@ def editor(request, slug, chunk=None, template_name='wiki/document_details.html' "text_revert": forms.DocumentTextRevertForm(prefix="textrevert"), "pubmark": forms.DocumentPubmarkForm(prefix="pubmark"), }, - 'can_pubmark': request.user.has_perm('catalogue.can_pubmark'), + 'can_pubmark': request.user.has_perm('documents.can_pubmark'), 'REDMINE_URL': settings.REDMINE_URL, }) +def editor_user_area(request): + return render(request, 'wiki/editor-user-area.html', { + '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('documents.can_pubmark'), + }) + + @require_GET def editor_readonly(request, slug, chunk=None, template_name='wiki/document_details_readonly.html'): try: @@ -116,7 +128,7 @@ def text(request, chunk_id): if request.method == 'POST': form = forms.DocumentTextSaveForm(request.POST, user=request.user, prefix="textsave") if form.is_valid(): - if request.user.is_authenticated(): + if request.user.is_authenticated: author = request.user else: author = None @@ -129,7 +141,7 @@ def text(request, chunk_id): stage = form.cleaned_data['stage_completed'] tags = [stage] if stage else [] publishable = (form.cleaned_data['publishable'] and - request.user.has_perm('catalogue.can_pubmark')) + request.user.has_perm('documents.can_pubmark')) doc.commit(author=author, text=text, parent=parent, @@ -181,7 +193,7 @@ def revert(request, chunk_id): comment = form.cleaned_data['comment'] comment += "\n#revert to %s" % revision - if request.user.is_authenticated(): + if request.user.is_authenticated: author = request.user else: author = None @@ -203,27 +215,27 @@ def revert(request, chunk_id): def gallery(request, directory): try: base_url = ''.join(( - smart_unicode(settings.MEDIA_URL), - smart_unicode(settings.IMAGE_DIR), - smart_unicode(directory))) + settings.MEDIA_URL, + settings.IMAGE_DIR, + directory)) base_dir = os.path.join( - smart_unicode(settings.MEDIA_ROOT), - smart_unicode(settings.IMAGE_DIR), - smart_unicode(directory)) + settings.MEDIA_ROOT, + settings.IMAGE_DIR, + directory) def map_to_url(filename): - return urllib.quote(("%s/%s" % (base_url, smart_unicode(filename))).encode('utf-8')) + return quote(("%s/%s" % (base_url, filename))) def is_image(filename): return os.path.splitext(filename)[1].lower() in (u'.jpg', u'.jpeg', u'.png') - images = [map_to_url(f) for f in map(smart_unicode, os.listdir(base_dir)) if is_image(f)] + images = [map_to_url(f) for f in os.listdir(base_dir) if is_image(f)] images.sort() books = Book.objects.filter(gallery=directory) - if not all(book.public for book in books) and not request.user.is_authenticated(): + if not all(book.public for book in books) and not request.user.is_authenticated: return HttpResponseForbidden("Not authorized.") return JSONResponse(images) @@ -281,7 +293,7 @@ def history(request, chunk_id): "author": change.author_str(), "date": localize(change.created_at), "publishable": _("Publishable") + "\n" if change.publishable else "", - "tag": ',\n'.join(unicode(tag) for tag in change.tags.all()), + "tag": ',\n'.join(str(tag) for tag in change.tags.all()), "published": _("Published") + ": " + \ localize(change.publish_log.order_by('-book_record__timestamp')[0].book_record.timestamp) \ if change.publish_log.exists() else "", @@ -290,7 +302,7 @@ def history(request, chunk_id): @require_POST -@ajax_require_permission('catalogue.can_pubmark') +@ajax_require_permission('documents.can_pubmark') def pubmark(request, chunk_id): form = forms.DocumentPubmarkForm(request.POST, prefix="pubmark") if form.is_valid(): @@ -313,3 +325,7 @@ def pubmark(request, chunk_id): def themes(request): prefix = request.GET.get('q', '') return http.HttpResponse('\n'.join([str(t) for t in Theme.objects.filter(name__istartswith=prefix)])) + + +def back(request): + return render(request, 'wiki/back.html')