X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/e977f7187b10b1bc0a30794cd585c6b840568996..817ce226770c3b003d85b7e77e96360c433c80ed:/src/wiki/views.py?ds=sidebyside diff --git a/src/wiki/views.py b/src/wiki/views.py index b664d301..062a5664 100644 --- a/src/wiki/views.py +++ b/src/wiki/views.py @@ -7,6 +7,7 @@ import logging from time import mktime from urllib.parse import quote +from django.apps import apps from django.conf import settings from django.urls import reverse from django import http @@ -14,9 +15,10 @@ from django.http import Http404, HttpResponseForbidden from django.middleware.gzip import GZipMiddleware from django.utils.decorators import decorator_from_middleware from django.utils.formats import localize -from django.utils.translation import ugettext as _ +from django.utils.translation import gettext as _ from django.views.decorators.http import require_POST, require_GET from django.shortcuts import get_object_or_404, render +from sorl.thumbnail import get_thumbnail from documents.models import Book, Chunk from . import nice_diff @@ -77,6 +79,17 @@ def editor(request, slug, chunk=None, template_name='wiki/document_details.html' }) +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: @@ -219,14 +232,18 @@ def gallery(request, directory): 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 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: return HttpResponseForbidden("Not authorized.") + images = [ + { + "url": map_to_url(f), + "thumb": get_thumbnail(os.path.join(base_dir, f), '120x120').url + } for f in sorted(os.listdir(base_dir)) if is_image(f) + ] + return JSONResponse(images) except (IndexError, OSError): logger.exception("Unable to fetch gallery") @@ -264,6 +281,8 @@ def revision(request, chunk_id): doc = get_object_or_404(Chunk, pk=chunk_id) if not doc.book.accessible(request): return HttpResponseForbidden("Not authorized.") + Presence = apps.get_model('team', 'Presence') + Presence.report(request.user, doc, request.GET.get('a') == 'true') return http.HttpResponse(str(doc.revision())) @@ -274,8 +293,15 @@ def history(request, chunk_id): if not doc.book.accessible(request): return HttpResponseForbidden("Not authorized.") + history = doc.history() + try: + before = int(request.GET.get('before')) + except: + pass + else: + history = history.filter(revision__lt=before) changes = [] - for change in doc.history().reverse(): + for change in history.reverse()[:20]: changes.append({ "version": change.revision, "description": change.description, @@ -311,6 +337,40 @@ def pubmark(request, chunk_id): return JSONFormInvalid(form) +@require_POST +@ajax_require_permission('documents.book_edit') +def set_gallery(request, chunk_id): + doc = get_object_or_404(Chunk, pk=chunk_id) + book = doc.book + book.gallery = request.POST['gallery'] + book.save(update_fields=['gallery']) + return JSONResponse({}) + +@require_POST +@ajax_require_permission('documents.chunk_edit') +def set_gallery_start(request, chunk_id): + doc = get_object_or_404(Chunk, pk=chunk_id) + doc.gallery_start = request.POST['start'] + doc.save(update_fields=['gallery_start']) + return JSONResponse({}) + +@ajax_require_permission('documents.chunk_edit') +def galleries(request): + return JSONResponse( + sorted( + os.listdir( + os.path.join( + settings.MEDIA_ROOT, + settings.IMAGE_DIR, + ) + ) + ) + ) + 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')