Exemple #1
0
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})
Exemple #2
0
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)
Exemple #3
0
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})
Exemple #4
0
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
        })
Exemple #5
0
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)
Exemple #6
0
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)
Exemple #7
0
    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)
Exemple #8
0
    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)
Exemple #9
0
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})
Exemple #10
0
 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)
Exemple #11
0
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)
Exemple #12
0
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)
Exemple #13
0
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)
Exemple #14
0
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
    })