def wiki_page_revert(request, slug, revision_pk): slug_original = slug slug = urlize_title(slug) if slug != slug_original: return HttpResponseRedirect( reverse('wiki_page_revert', args=[slug, revision_pk]) ) try: wiki_pages = WikiPage.objects.published(for_user=request.user) wiki_page = wiki_pages.get(slug=slug) except WikiPage.DoesNotExist: return HttpResponseRedirect(reverse('wiki_page_edit', args=[slug])) src_revision = get_object_or_404(WikiPageRevision, page=wiki_page, pk=revision_pk) new_revision = WikiPageRevision(page=wiki_page, user=request.user if request.user.is_authenticated() else User.objects.get(id=-1)) if request.method == 'POST': form = WikiPageForm(data=request.POST or None, instance=wiki_page) if form.is_valid(): form.save() new_revision.content = form.cleaned_data["content"] new_revision.description = form.cleaned_data["summary"] new_revision.save() return HttpResponseRedirect(reverse('wiki_page_detail', kwargs={'slug': slug})) else: if src_revision.user: description = _("Reverted to revision of %(time)s by %(user)s.") % \ {'time': src_revision.created, 'user': src_revision.user.username} else: description = _("Reverted to anonymous revision of %(time)s.") % \ {'time': src_revision.created} form = WikiPageForm(data=request.POST or None, instance=wiki_page, initial={'content': src_revision.content, 'summary': description}) return render(request, 'mezawiki/wiki_page_edit.html', {'wiki_page': wiki_page, 'form': form, 'src_revision': src_revision})
def wiki_page_revision(request, slug, rev_id, template="mezawiki/wiki_page_revision.html"): """ Displays a wiki page revision. Redirects to the edit view if the page doesn't exist. Custom templates are checked for using the name ``mezawiki/wiki_page_detail_XXX.html`` where ``XXX`` is the wiki pages's slug. """ slug_original = slug slug = urlize_title(slug) if slug != slug_original: return HttpResponseRedirect( reverse('wiki_page_revision', args=[slug]) ) try: wiki_pages = WikiPage.objects.published(for_user=request.user) wiki_page = wiki_pages.get(slug=slug) revision = WikiPageRevision.objects.get(id=rev_id) except WikiPage.DoesNotExist: return HttpResponseRedirect(reverse('wiki_page_edit', args=[slug])) if not wiki_page.can_view_wikipage(request.user): return HttpResponseForbidden( _("You don't have permission to view this wiki page revision.")) context = {"wiki_page": wiki_page, "revision": revision} templates = [u"mezawiki/wiki_page_detail_%s.html" % unicode(slug), template] return render(request, templates, context)
def wiki_page_diff(request, slug, template="mezawiki/wiki_page_diff.html"): slug_original = slug slug = urlize_title(slug) if slug != slug_original: return HttpResponseRedirect( reverse('wiki_page_diff', args=[slug]) ) try: wiki_pages = WikiPage.objects.published(for_user=request.user) wiki_page = wiki_pages.get(slug=slug) except WikiPage.DoesNotExist: return HttpResponseRedirect(reverse('wiki_page_edit', args=[slug])) try: from_rev = wiki_page.wikipagerevision_set.get(pk=request.REQUEST['from_revision_pk']) to_rev = wiki_page.wikipagerevision_set.get(pk=request.REQUEST['to_revision_pk']) except (KeyError, WikiPage.DoesNotExist): return HttpResponseNotFound() dmp = diff_match_patch() diff = dmp.diff_compute(from_rev.content, to_rev.content, True, 2) undo_error = False if 'undo' in request.REQUEST and request.REQUEST['undo'] == 'error': undo_error = True return render(request, 'mezawiki/wiki_page_diff.html', {'wiki_page': wiki_page, 'from_revision': from_rev, 'to_revision': to_rev, 'diff': diff, 'undo_error': undo_error})
def wiki_page_diff(request, slug, template="mezawiki/wiki_page_diff.html"): slug_original = slug slug = urlize_title(slug) if slug != slug_original: return HttpResponseRedirect(reverse('wiki_page_diff', args=[slug])) try: wiki_pages = WikiPage.objects.published(for_user=request.user) wiki_page = wiki_pages.get(slug=slug) except WikiPage.DoesNotExist: return HttpResponseRedirect(reverse('wiki_page_edit', args=[slug])) try: from_rev = wiki_page.wikipagerevision_set.get( pk=request.REQUEST['from_revision_pk']) to_rev = wiki_page.wikipagerevision_set.get( pk=request.REQUEST['to_revision_pk']) except (KeyError, WikiPage.DoesNotExist): return HttpResponseNotFound() dmp = diff_match_patch() diff = dmp.diff_compute(from_rev.content, to_rev.content, True, 2) undo_error = False if 'undo' in request.REQUEST and request.REQUEST['undo'] == 'error': undo_error = True return render( request, 'mezawiki/wiki_page_diff.html', { 'wiki_page': wiki_page, 'from_revision': from_rev, 'to_revision': to_rev, 'diff': diff, 'undo_error': undo_error })
def wiki_page_detail(request, slug, year=None, month=None, template="mezawiki/wiki_page_detail.html"): """ Displays a wiki page. Redirects to the edit view if the page doesn't exist. Custom templates are checked for using the name ``mezawiki/wiki_page_detail_XXX.html`` where ``XXX`` is the wiki pages's slug. """ slug_original = slug slug = urlize_title(slug) if slug != slug_original: return HttpResponseRedirect( reverse('wiki_page_detail', args=[slug]) ) try: wiki_page_exist = WikiPage.objects.get(slug=slug) if wiki_page_exist.status == 1 and not wiki_page_exist.can_edit_wikipage(request.user): return HttpResponseForbidden( _("You don't have permission to view this wiki page.")) wiki_pages = WikiPage.objects.published(for_user=request.user) wiki_page = wiki_pages.get(slug=slug) except WikiPage.DoesNotExist: if can_add_wikipage(request.user): return HttpResponseRedirect(reverse('wiki_page_edit', args=[slug])) else: return HttpResponseForbidden( _("You don't have permission to add new wiki page.")) context = {"wiki_page": wiki_page} templates = [u"mezawiki/wiki_page_detail_%s.html" % unicode(slug), template] return render(request, templates, context)
def wiki_page_revision(request, slug, rev_id, template="mezawiki/wiki_page_revision.html"): """ Displays a wiki page revision. Redirects to the edit view if the page doesn't exist. Custom templates are checked for using the name ``mezawiki/wiki_page_detail_XXX.html`` where ``XXX`` is the wiki pages's slug. """ slug_original = slug slug = urlize_title(slug) if slug != slug_original: return HttpResponseRedirect(reverse('wiki_page_revision', args=[slug])) try: wiki_pages = WikiPage.objects.published(for_user=request.user) wiki_page = wiki_pages.get(slug=slug) revision = WikiPageRevision.objects.get(id=rev_id) except WikiPage.DoesNotExist: return HttpResponseRedirect(reverse('wiki_page_edit', args=[slug])) if not wiki_page.can_view_wikipage(request.user): return HttpResponseForbidden( _("You don't have permission to view this wiki page revision.")) context = {"wiki_page": wiki_page, "revision": revision} templates = [ u"mezawiki/wiki_page_detail_%s.html" % unicode(slug), template ] return render(request, templates, context)
def get(self, request, template="mezawiki/wiki_page_history.html", **kwargs): """ Displays a wiki page history. Redirects to the edit view if the page doesn't exist. Custom templates are checked for using the name ``mezawiki/wiki_page_detail_XXX.html`` where ``XXX`` is the wiki pages's slug. """ if 'slug' in kwargs: slug = kwargs['slug'] else: slug = None slug_original = slug slug = urlize_title(slug) if slug != slug_original: return HttpResponseRedirect( reverse('wiki_page_history', args=[slug])) try: wiki_pages = WikiPage.objects.published(for_user=request.user) wiki_page = wiki_pages.get(slug=slug) revisions = WikiPageRevision.objects.filter(page=wiki_page) except WikiPage.DoesNotExist: return HttpResponseRedirect(reverse('wiki_page_edit', args=[slug])) if not wiki_page.can_view_wikipage(request.user): return HttpResponseForbidden( _("You don't have permission to view this wiki page.")) context = {"wiki_page": wiki_page, "revisions": revisions} templates = [ u"mezawiki/wiki_page_history_%s.html" % str(slug), template ] return render(request, templates, context)
def get(self, request, slug, template="mezawiki/wiki_page_detail.html"): slug_original = slug slug = urlize_title(slug_original) template = "mezawiki/wiki_page_detail.html" if slug != slug_original: print("Not original slug.") return HttpResponseRedirect( reverse('wiki_page_detail', args=[slug])) try: wiki_page_exist = WikiPage.objects.get(slug=slug) if wiki_page_exist.status == 1 and not wiki_page_exist.can_edit_wikipage( request.user): print("You don't have permission to view this wiki page.") return HttpResponseForbidden( _("You don't have permission to view this wiki page.")) wiki_pages = WikiPage.objects.published(for_user=request.user) wiki_page = wiki_pages.get(slug=slug) except WikiPage.DoesNotExist: if can_add_wikipage(request.user): print("Edit page.") return HttpResponseRedirect( reverse('wiki_page_edit', args=[slug])) else: print("You don't have permission to add new wiki page.") return HttpResponseForbidden( _("You don't have permission to add new wiki page.")) context = {"wiki_page": wiki_page} templates = [ u"mezawiki/wiki_page_detail.html_%s" % str(slug), template ] return render(request, templates, context)
def wiki_page_undo(request, slug, revision_pk): slug_original = slug slug = urlize_title(slug) if slug != slug_original: return HttpResponseRedirect( reverse('wiki_page_undo', args=[slug, revision_pk]) ) try: wiki_pages = WikiPage.objects.published(for_user=request.user) wiki_page = wiki_pages.get(slug=slug) except WikiPage.DoesNotExist: return HttpResponseRedirect(reverse('wiki_page_edit', args=[slug])) src_revision = get_object_or_404(WikiPageRevision, page=wiki_page, pk=revision_pk) new_revision = WikiPageRevision(page=wiki_page, user=request.user if request.user.is_authenticated() else User.objects.get(id=-1)) if request.method == 'POST': form = WikiPageForm(data=request.POST or None, instance=wiki_page) if form.is_valid(): form.save() new_revision.content = form.cleaned_data["content"] new_revision.description = form.cleaned_data["summary"] new_revision.save() return HttpResponseRedirect(reverse('wiki_page_detail', kwargs={'slug': slug})) else: if src_revision.user: description = _("Undid revision of %(time)s by %(user)s.") % \ {'time': src_revision.created, 'user': src_revision.user.username} else: description = _("Undid anonymous revision of %(time)s.") % {'time': src_revision.created} prev_revision = None try: prev_revision = WikiPageRevision.objects\ .filter(page=wiki_page, created__lt=src_revision.created)\ .order_by('-created')[0] prev_content = prev_revision.content except IndexError: prev_content = '' dmp = diff_match_patch() rdiff = dmp.patch_make(src_revision.content, prev_content) content, results = dmp.patch_apply(rdiff, wiki_page.content) if False in results: urldata = {'to_revision_pk': src_revision.pk} if prev_revision: urldata['from_revision_pk'] = prev_revision.pk urldata['undo'] = 'error' return HttpResponseRedirect("%s?%s" % ( reverse('wiki_page_diff', kwargs={'slug': slug}), urlencode(urldata))) form = WikiPageForm(data=request.POST or None, instance=wiki_page, initial={'content': content, 'summary': description}) return render(request, 'mezawiki/wiki_page_edit.html', {'wiki_page': wiki_page, 'form': form})
def get(self, request, slug, revision_pk, template='mezawiki/wiki_page_edit.html'): slug_original = slug slug = urlize_title(slug) if slug != slug_original: return HttpResponseRedirect( reverse('wiki_page_revert', args=[slug, revision_pk])) try: wiki_pages = WikiPage.objects.published(for_user=request.user) wiki_page = wiki_pages.get(slug=slug) except WikiPage.DoesNotExist: return HttpResponseRedirect(reverse('wiki_page_edit', args=[slug])) src_revision = get_object_or_404(WikiPageRevision, page=wiki_page, pk=revision_pk) new_revision = WikiPageRevision( page=wiki_page, user=request.user if request.user.is_authenticated() else User.objects.get(id=-1)) if request.method == 'POST': form = WikiPageForm(data=request.POST or None, instance=wiki_page) if form.is_valid(): form.save() new_revision.content = form.cleaned_data["content"] new_revision.description = form.cleaned_data["summary"] new_revision.save() return HttpResponseRedirect( reverse('wiki_page_detail', kwargs={'slug': slug})) else: if src_revision.user: description = _("Reverted to revision of %(time)s by %(user)s.") % \ {'time': src_revision.created, 'user': src_revision.user.username} else: description = _("Reverted to anonymous revision of %(time)s.") % \ {'time': src_revision.created} form = WikiPageForm(data=request.POST or None, instance=wiki_page, initial={ 'content': src_revision.content, 'summary': description }) context = { 'wiki_page': wiki_page, 'form': form, 'src_revision': src_revision } return render(request, template, context)
def wiki_page_new(request, template="mezawiki/wiki_page_new.html"): """ Displays the form for creating a page. """ if not can_add_wikipage(request.user): return HttpResponseForbidden( _("You don't have permission to create wiki page.")) if request.method == 'POST': form = WikiPageForm(request.POST) if form.is_valid(): page = form.save(commit=False) try: page.user = request.user except: # anonymous page.user_id = -1 page.slug = urlize_title(form.cleaned_data["title"]) # TODO Check slug, it is not a unique field page.save() revision = WikiPageRevision() revision.content = page.content revision.description = form.cleaned_data["summary"] revision.page = page try: revision.user = request.user except: # anonymous revision.user_id = -1 revision.save() return HttpResponseRedirect( reverse('wiki_page_detail', args=[page.slug])) else: form = WikiPageForm(initial={'status': 1}) context = {'form': form} return render(request, template, context)
def wiki_page_detail(request, slug, year=None, month=None, template="mezawiki/wiki_page_detail.html"): """ Displays a wiki page. Redirects to the edit view if the page doesn't exist. Custom templates are checked for using the name ``mezawiki/wiki_page_detail_XXX.html`` where ``XXX`` is the wiki pages's slug. """ slug_original = slug slug = urlize_title(slug) if slug != slug_original: return HttpResponseRedirect(reverse('wiki_page_detail', args=[slug])) try: wiki_page_exist = WikiPage.objects.get(slug=slug) if wiki_page_exist.status == 1 and not wiki_page_exist.can_edit_wikipage( request.user): return HttpResponseForbidden( _("You don't have permission to view this wiki page.")) wiki_pages = WikiPage.objects.published(for_user=request.user) wiki_page = wiki_pages.get(slug=slug) except WikiPage.DoesNotExist: if can_add_wikipage(request.user): return HttpResponseRedirect(reverse('wiki_page_edit', args=[slug])) else: return HttpResponseForbidden( _("You don't have permission to add new wiki page.")) context = {"wiki_page": wiki_page} templates = [ u"mezawiki/wiki_page_detail_%s.html" % unicode(slug), template ] return render(request, templates, context)
def wiki_page_undo(request, slug, revision_pk): slug_original = slug slug = urlize_title(slug) if slug != slug_original: return HttpResponseRedirect( reverse('wiki_page_undo', args=[slug, revision_pk])) try: wiki_pages = WikiPage.objects.published(for_user=request.user) wiki_page = wiki_pages.get(slug=slug) except WikiPage.DoesNotExist: return HttpResponseRedirect(reverse('wiki_page_edit', args=[slug])) src_revision = get_object_or_404(WikiPageRevision, page=wiki_page, pk=revision_pk) new_revision = WikiPageRevision( page=wiki_page, user=request.user if request.user.is_authenticated() else User.objects.get(id=-1)) if request.method == 'POST': form = WikiPageForm(data=request.POST or None, instance=wiki_page) if form.is_valid(): form.save() new_revision.content = form.cleaned_data["content"] new_revision.description = form.cleaned_data["summary"] new_revision.save() return HttpResponseRedirect( reverse('wiki_page_detail', kwargs={'slug': slug})) else: if src_revision.user: description = _("Undid revision of %(time)s by %(user)s.") % \ {'time': src_revision.created, 'user': src_revision.user.username} else: description = _("Undid anonymous revision of %(time)s.") % { 'time': src_revision.created } prev_revision = None try: prev_revision = WikiPageRevision.objects\ .filter(page=wiki_page, created__lt=src_revision.created)\ .order_by('-created')[0] prev_content = prev_revision.content except IndexError: prev_content = '' dmp = diff_match_patch() rdiff = dmp.patch_make(src_revision.content, prev_content) content, results = dmp.patch_apply(rdiff, wiki_page.content) if False in results: urldata = {'to_revision_pk': src_revision.pk} if prev_revision: urldata['from_revision_pk'] = prev_revision.pk urldata['undo'] = 'error' return HttpResponseRedirect("%s?%s" % (reverse( 'wiki_page_diff', kwargs={'slug': slug}), urlencode(urldata))) form = WikiPageForm(data=request.POST or None, instance=wiki_page, initial={ 'content': content, 'summary': description }) return render(request, 'mezawiki/wiki_page_edit.html', { 'wiki_page': wiki_page, 'form': form })