示例#1
0
def delete_page(request, slug, page_slug):
    page = get_object_or_404(Page, project__slug=slug, slug=page_slug)
    if page.deleted or not page.listed:
        return http.HttpResponseForbidden(_("You can't delete this page"))
    if not page.project.is_organizing(request.user) and not page.collaborative:
        return http.HttpResponseForbidden(_("You can't delete this page"))
    if request.method == 'POST':
        redirect_url = request.POST.get('next_page', None)
        old_version = PageVersion(title=page.title, sub_header=page.sub_header,
            content=page.content, author=page.author, date=page.last_update,
            page=page)
        old_version.save()
        page.author = request.user.get_profile()
        page.last_update = datetime.datetime.now()
        page.deleted = True
        page.save()
        messages.success(request, _('%s deleted!') % page.title)
        if redirect_url:
            return http.HttpResponseRedirect(redirect_url)
        return http.HttpResponseRedirect(reverse('page_history',
            kwargs={'slug': page.project.slug, 'page_slug': page.slug}))
    else:
        context = {
            'page': page,
            'project': page.project,
        }
        referer = request.META.get('HTTP_REFERER', None)
        if referer:
            context['next_page'] = urlsplit(referer, 'http', False)[2]
        return render_to_response('content/confirm_delete_page.html',
            context, context_instance=RequestContext(request))
示例#2
0
def delete_page(request, slug, page_slug):
    page = get_object_or_404(Page, project__slug=slug, slug=page_slug)
    if page.deleted or not page.listed:
        return http.HttpResponseForbidden(_("You can't delete this page"))
    if not page.project.is_organizing(request.user) and not page.collaborative:
        return http.HttpResponseForbidden(_("You can't delete this page"))
    if request.method == 'POST':
        old_version = PageVersion(title=page.title,
                                  sub_header=page.sub_header,
                                  content=page.content,
                                  author=page.author,
                                  date=page.last_update,
                                  page=page)
        old_version.save()
        page.author = request.user.get_profile()
        page.last_update = datetime.datetime.now()
        page.deleted = True
        page.save()
        messages.success(request, _('%s deleted!') % page.title)
        return http.HttpResponseRedirect(
            reverse('page_history',
                    kwargs={
                        'slug': page.project.slug,
                        'page_slug': page.slug
                    }))
    else:
        return render_to_response('content/confirm_delete_page.html', {
            'page': page,
            'project': page.project,
        },
                                  context_instance=RequestContext(request))
示例#3
0
def delete_page(request, slug, page_slug):
    page = get_object_or_404(Page, project__slug=slug, slug=page_slug)
    if page.deleted or not page.listed:
        return http.HttpResponseForbidden(_("You can't delete this page"))
    if not page.project.is_organizing(request.user) and not page.collaborative:
        return http.HttpResponseForbidden(_("You can't delete this page"))
    if request.method == "POST":
        old_version = PageVersion(
            title=page.title,
            sub_header=page.sub_header,
            content=page.content,
            author=page.author,
            date=page.last_update,
            page=page,
        )
        old_version.save()
        page.author = request.user.get_profile()
        page.last_update = datetime.datetime.now()
        page.deleted = True
        page.save()
        messages.success(request, _("%s deleted!") % page.title)
        return http.HttpResponseRedirect(
            reverse("page_history", kwargs={"slug": page.project.slug, "page_slug": page.slug})
        )
    else:
        return render_to_response(
            "content/confirm_delete_page.html",
            {"page": page, "project": page.project},
            context_instance=RequestContext(request),
        )
示例#4
0
def restore_version(request, slug, page_slug, version_id):
    version = get_object_or_404(PageVersion,
                                page__project__slug=slug,
                                page__slug=page_slug,
                                id=version_id)
    page = version.page
    if version.deleted:
        return http.HttpResponseForbidden(_("You can't restore this page"))
    if page.project.is_organizing(request.user):
        form_cls = OwnersPageForm if page.listed else OwnersNotListedPageForm
    elif page.collaborative:
        form_cls = PageForm if page.listed else NotListedPageForm
    else:
        # Restrict permissions for non-collaborative pages.
        return http.HttpResponseForbidden(_("You can't edit this page"))
    if request.method == 'POST':
        old_version = PageVersion(title=page.title,
                                  sub_header=page.sub_header,
                                  content=page.content,
                                  author=page.author,
                                  date=page.last_update,
                                  page=page,
                                  deleted=page.deleted)
        form = form_cls(request.POST, instance=page)
        if form.is_valid():
            page = form.save(commit=False)
            page.deleted = False
            page.author = request.user.get_profile()
            page.last_update = datetime.datetime.now()
            if 'show_preview' not in request.POST:
                old_version.save()
                page.save()
                messages.success(request, _('%s restored!') % page.title)
                return http.HttpResponseRedirect(
                    reverse('page_show',
                            kwargs={
                                'slug': slug,
                                'page_slug': page_slug,
                            }))
        else:
            messages.error(request, _('Please correct errors below.'))
    else:
        page.title = version.title
        page.content = version.content
        form = form_cls(instance=page, initial={'minor_update': True})
    return render_to_response(
        'content/restore_version.html', {
            'form': form,
            'page': page,
            'version': version,
            'project': page.project,
            'preview': ('show_preview' in request.POST),
            'is_challenge': (page.project.category == Project.CHALLENGE),
        },
        context_instance=RequestContext(request))
示例#5
0
def edit_page(request, slug, page_slug):
    page = get_object_or_404(Page, project__slug=slug, slug=page_slug)
    if page.deleted:
        return http.HttpResponseForbidden(_("You can't edit this page"))
    if page.project.is_organizing(request.user):
        form_cls = OwnersPageForm if page.listed else OwnersNotListedPageForm
    elif page.collaborative:
        form_cls = PageForm if page.listed else NotListedPageForm
    else:
        # Restrict permissions for non-collaborative pages.
        return http.HttpResponseForbidden(_("You can't edit this page"))
    if request.method == 'POST':
        old_version = PageVersion(title=page.title,
                                  content=page.content,
                                  author=page.author,
                                  date=page.last_update,
                                  page=page)
        form = form_cls(request.POST, instance=page)
        if form.is_valid():
            page = form.save(commit=False)
            page.author = request.user.get_profile()
            page.last_update = datetime.datetime.now()
            if 'show_preview' not in request.POST:
                old_version.save()
                page.save()
                messages.success(request, _('%s updated!') % page.title)
                if form.cleaned_data.get('next_url', None):
                    return http.HttpResponseRedirect(
                        form.cleaned_data.get('next_url'))
                else:
                    return http.HttpResponseRedirect(
                        reverse('page_show',
                                kwargs={
                                    'slug': slug,
                                    'page_slug': page_slug
                                }))
        else:
            messages.error(request, _('Please correct errors below.'))
    else:
        initial = {'minor_update': True}
        if request.GET.get('next_url', None):
            initial['next_url'] = request.GET.get('next_url', None)
        form = form_cls(instance=page, initial=initial)

    context = {
        'form': form,
        'page': page,
        'project': page.project,
        'preview': ('show_preview' in request.POST),
        'is_challenge': (page.project.category == Project.CHALLENGE),
    }

    return render_to_response('content/edit_page.html',
                              context,
                              context_instance=RequestContext(request))
示例#6
0
def edit_page(request, slug, page_slug):
    page = get_object_or_404(Page, project__slug=slug, slug=page_slug)
    if not page.editable or page.deleted:
        return http.HttpResponseForbidden(_("You can't edit this page"))
    if page.project.is_organizing(request.user):
        form_cls = OwnersPageForm if page.listed else OwnersNotListedPageForm
    elif page.collaborative:
        form_cls = PageForm if page.listed else NotListedPageForm
    else:
        # Restrict permissions for non-collaborative pages.
        return http.HttpResponseForbidden(_("You can't edit this page"))
    preview = False
    if request.method == 'POST':
        old_version = PageVersion(title=page.title,
                                  content=page.content,
                                  author=page.author,
                                  date=page.last_update,
                                  page=page)
        form = form_cls(request.POST, instance=page)
        if form.is_valid():
            page = form.save(commit=False)
            page.author = request.user.get_profile()
            page.last_update = datetime.datetime.now()
            if 'show_preview' in request.POST:
                preview = True
                page.content = bleach.clean(
                    page.content,
                    tags=settings.RICH_ALLOWED_TAGS,
                    attributes=settings.RICH_ALLOWED_ATTRIBUTES,
                    styles=settings.RICH_ALLOWED_STYLES,
                    strip=True)
            else:
                old_version.save()
                page.save()
                messages.success(request, _('%s updated!') % page.title)
                return http.HttpResponseRedirect(
                    reverse('page_show',
                            kwargs={
                                'slug': slug,
                                'page_slug': page_slug,
                            }))
        else:
            messages.error(request, _('Please correct errors bellow.'))
    else:
        form = form_cls(instance=page, initial={'minor_update': True})
    return render_to_response('content/edit_page.html', {
        'form': form,
        'page': page,
        'project': page.project,
        'preview': preview,
    },
                              context_instance=RequestContext(request))
示例#7
0
def restore_version(request, slug, page_slug, version_id):
    version = get_object_or_404(PageVersion, page__project__slug=slug, page__slug=page_slug, id=version_id)
    page = version.page
    if version.deleted:
        return http.HttpResponseForbidden(_("You can't restore this page"))
    if page.project.is_organizing(request.user):
        form_cls = OwnersPageForm if page.listed else OwnersNotListedPageForm
    elif page.collaborative:
        form_cls = PageForm if page.listed else NotListedPageForm
    else:
        # Restrict permissions for non-collaborative pages.
        return http.HttpResponseForbidden(_("You can't edit this page"))
    if request.method == "POST":
        old_version = PageVersion(
            title=page.title,
            sub_header=page.sub_header,
            content=page.content,
            author=page.author,
            date=page.last_update,
            page=page,
            deleted=page.deleted,
        )
        form = form_cls(request.POST, instance=page)
        if form.is_valid():
            page = form.save(commit=False)
            page.deleted = False
            page.author = request.user.get_profile()
            page.last_update = datetime.datetime.now()
            if "show_preview" not in request.POST:
                old_version.save()
                page.save()
                messages.success(request, _("%s restored!") % page.title)
                return http.HttpResponseRedirect(reverse("page_show", kwargs={"slug": slug, "page_slug": page_slug}))
        else:
            messages.error(request, _("Please correct errors below."))
    else:
        page.title = version.title
        page.content = version.content
        form = form_cls(instance=page, initial={"minor_update": True})
    return render_to_response(
        "content/restore_version.html",
        {
            "form": form,
            "page": page,
            "version": version,
            "project": page.project,
            "preview": ("show_preview" in request.POST),
            "is_challenge": (page.project.category == Project.CHALLENGE),
        },
        context_instance=RequestContext(request),
    )
示例#8
0
文件: views.py 项目: vtamara/lernanta
def restore_version(request, slug, page_slug, version_id):
    version = get_object_or_404(PageVersion, page__project__slug=slug,
        page__slug=page_slug, id=version_id)
    page = version.page
    if not page.editable or version.deleted:
        return http.HttpResponseForbidden(_("You can't edit this page"))
    if page.project.is_organizing(request.user):
        form_cls = OwnersPageForm if page.listed else OwnersNotListedPageForm
    elif page.collaborative:
        form_cls = PageForm if page.listed else NotListedPageForm
    else:
        # Restrict permissions for non-collaborative pages.
        return http.HttpResponseForbidden(_("You can't edit this page"))
    preview = False
    if request.method == 'POST':
        old_version = PageVersion(title=page.title, content=page.content,
            author=page.author, date=page.last_update, page=page,
            deleted=page.deleted)
        form = form_cls(request.POST, instance=page)
        if form.is_valid():
            page = form.save(commit=False)
            page.deleted = False
            page.author = request.user.get_profile()
            page.last_update = datetime.datetime.now()
            if 'show_preview' in request.POST:
                preview = True
                page.content = bleach.clean(page.content,
                    tags=settings.RICH_ALLOWED_TAGS,
                    attributes=settings.RICH_ALLOWED_ATTRIBUTES,
                    styles=settings.RICH_ALLOWED_STYLES, strip=True)
            else:
                old_version.save()
                page.save()
                messages.success(request, _('%s restored!') % page.title)
                return http.HttpResponseRedirect(reverse('page_show', kwargs={
                    'slug': slug,
                    'page_slug': page_slug,
                }))
        else:
            messages.error(request, _('Please correct errors bellow.'))
    else:
        page.title = version.title
        page.content = version.content
        form = form_cls(instance=page)
    return render_to_response('content/restore_version.html', {
        'form': form,
        'page': page,
        'version': version,
        'project': page.project,
        'preview': preview,
    }, context_instance=RequestContext(request))
示例#9
0
文件: views.py 项目: p2pu/lernanta
def edit_page(request, slug, page_slug):
    page = get_object_or_404(Page, project__slug=slug, slug=page_slug)
    if page.deleted:
        return http.HttpResponseForbidden(_("You can't edit this page"))
    if page.project.is_organizing(request.user):
        form_cls = OwnersPageForm if page.listed else OwnersNotListedPageForm
    elif page.collaborative:
        form_cls = PageForm if page.listed else NotListedPageForm
    else:
        # Restrict permissions for non-collaborative pages.
        return http.HttpResponseForbidden(_("You can't edit this page"))
    if request.method == "POST":
        old_version = PageVersion(
            title=page.title, content=page.content, author=page.author, date=page.last_update, page=page
        )
        form = form_cls(request.POST, instance=page)
        if form.is_valid():
            page = form.save(commit=False)
            page.author = request.user.get_profile()
            page.last_update = datetime.datetime.now()
            if "show_preview" not in request.POST:
                old_version.save()
                page.save()
                messages.success(request, _("%s updated!") % page.title)
                if form.cleaned_data.get("next_url", None):
                    return http.HttpResponseRedirect(form.cleaned_data.get("next_url"))
                else:
                    return http.HttpResponseRedirect(
                        reverse("page_show", kwargs={"slug": slug, "page_slug": page_slug})
                    )
        else:
            messages.error(request, _("Please correct errors below."))
    else:
        initial = {"minor_update": True}
        if request.GET.get("next_url", None):
            initial["next_url"] = request.GET.get("next_url", None)
        form = form_cls(instance=page, initial=initial)

    context = {
        "form": form,
        "page": page,
        "project": page.project,
        "preview": ("show_preview" in request.POST),
        "is_challenge": (page.project.category == Project.CHALLENGE),
    }

    return render_to_response("content/edit_page.html", context, context_instance=RequestContext(request))
示例#10
0
文件: views.py 项目: JiaFeiX/lernanta
def restore_version(request, slug, page_slug, version_id):
    version = get_object_or_404(PageVersion, page__project__slug=slug,
        page__slug=page_slug, id=version_id)
    page = version.page
    if version.deleted:
        return http.HttpResponseForbidden(_("You can't restore this page"))
    if page.project.is_organizing(request.user):
        form_cls = OwnersPageForm if page.listed else OwnersNotListedPageForm
    elif page.collaborative:
        form_cls = PageForm if page.listed else NotListedPageForm
    else:
        # Restrict permissions for non-collaborative pages.
        return http.HttpResponseForbidden(_("You can't edit this page"))
    if request.method == 'POST':
        old_version = PageVersion(title=page.title, sub_header=page.sub_header,
            content=page.content, author=page.author, date=page.last_update,
            page=page, deleted=page.deleted)
        form = form_cls(request.POST, instance=page)
        if form.is_valid():
            page = form.save(commit=False)
            page.deleted = False
            page.author = request.user.get_profile()
            page.last_update = datetime.datetime.now()
            if 'show_preview' not in request.POST:
                old_version.save()
                page.save()
                messages.success(request, _('%s restored!') % page.title)
                return http.HttpResponseRedirect(reverse('page_show', kwargs={
                    'slug': slug,
                    'page_slug': page_slug,
                }))
        else:
            messages.error(request, _('Please correct errors below.'))
    else:
        page.title = version.title
        page.content = version.content
        form = form_cls(instance=page, initial={'minor_update': True})
    return render_to_response('content/restore_version.html', {
        'form': form,
        'page': page,
        'version': version,
        'project': page.project,
        'preview': ('show_preview' in request.POST),
        'is_challenge': (page.project.category == Project.CHALLENGE),
    }, context_instance=RequestContext(request))
示例#11
0
def restore_version(request, slug, page_slug, version_id):
    version = get_object_or_404(PageVersion, page__project__slug=slug,
        page__slug=page_slug, id=version_id)
    page = version.page
    if not page.editable or version.deleted:
        return HttpResponseForbidden(_("You can't edit this page"))
    if page.project.is_organizing(request.user):
        form_cls = OwnersPageForm if page.listed else OwnersNotListedPageForm
    elif page.collaborative:
        form_cls = PageForm if page.listed else NotListedPageForm
    else:
        # Restrict permissions for non-collaborative pages.
        return HttpResponseForbidden(_("You can't edit this page"))
    if request.method == 'POST':
        old_version = PageVersion(title=page.title, content=page.content,
            author=page.author, date=page.last_update, page=page, deleted=page.deleted)
        form = form_cls(request.POST, instance=page)
        if form.is_valid():
            old_version.save()
            page = form.save(commit=False)
            page.deleted = False
            page.author = request.user.get_profile()
            page.last_update = datetime.datetime.now()
            page.save()
            messages.success(request, _('%s restored!') % page.title)
            return HttpResponseRedirect(reverse('page_show', kwargs={
                'slug': slug,
                'page_slug': page_slug,
            }))
        else:
            messages.error(request,
                           _('There was a problem saving %s.' % page.title))
    else:
        page.title = version.title
        page.content = version.content
        form = form_cls(instance=page)
    return render_to_response('content/restore_version.html', {
        'form': form,
        'page': page,
        'version': version,
        'project': page.project,
    }, context_instance=RequestContext(request))
示例#12
0
文件: views.py 项目: MJae/lernanta
def delete_page(request, slug, page_slug):
    page = get_object_or_404(Page, project__slug=slug, slug=page_slug)
    if page.deleted or not page.editable or not page.listed:
        return HttpResponseForbidden(_("You can't edit this page"))
    if not page.project.is_organizing(request.user) and not page.collaborative:
        return HttpResponseForbidden(_("You can't edit this page"))
    if request.method == 'POST':
        old_version = PageVersion(title=page.title, content=page.content,
            author=page.author, date=page.last_update, page=page)
        old_version.save()
        page.author = request.user.get_profile()
        page.last_update = datetime.datetime.now()
        page.deleted = True
        page.save()
        messages.success(request, _('%s deleted!') % page.title)
        return HttpResponseRedirect(reverse('page_history',
            kwargs={'slug':page.project.slug, 'page_slug':page.slug}))
    else:
        return render_to_response('content/confirm_delete_page.html', {
            'page': page,
            'project': page.project,
        }, context_instance=RequestContext(request))
示例#13
0
def edit_page(request, slug, page_slug):
    page = get_object_or_404(Page, project__slug=slug, slug=page_slug)
    if not page.editable:
        return HttpResponseForbidden()
    user = request.user.get_profile()
    if request.user.is_superuser or user == page.project.created_by:
        form_cls = OwnersPageForm if page.listed else OwnersNotListedPageForm
    elif page.collaborative:
        form_cls = PageForm if page.listed else NotListedPageForm
    else:
        # Restrict permissions for non-collaborative pages.
        return HttpResponseForbidden()
    if request.method == 'POST':
        old_version = PageVersion(title=page.title, content=page.content,
            author=page.author, date=page.last_update, page=page)
        form = form_cls(request.POST, instance=page)
        if form.is_valid():
            old_version.save()
            page = form.save(commit=False)
            page.author = user
            page.last_update = datetime.datetime.now()
            page.save()
            messages.success(request, _('%s updated!') % page.title)
            return HttpResponseRedirect(reverse('page_show', kwargs={
                'slug': slug,
                'page_slug': page_slug,
            }))
        else:
            messages.error(request,
                           _('There was a problem saving %s.' % page.title))
    else:
        form = form_cls(instance=page)
    return render_to_response('content/edit_page.html', {
        'form': form,
        'page': page,
        'project': page.project,
    }, context_instance=RequestContext(request))
示例#14
0
def edit_pages(request, slug):
    project = get_object_or_404(Project, slug=slug)
    pages = project.pages.filter(deleted=False, listed=True).order_by("index")
    if project.is_organizing(request.user):
        form_cls = OwnersPageForm
    else:
        form_cls = PageForm
        pages = pages.filter(collaborative=True)
    PageFormSet = modelformset_factory(Page, extra=0, fields=form_cls.Meta.fields, can_order=True, can_delete=True)
    preview = "show_preview" in request.POST
    edit_mode = "edit_mode" in request.POST
    add_page = "add_page" in request.POST
    save_action = not preview and not edit_mode and not add_page
    final_save = "final_save" in request.POST
    if request.method == "POST":
        post_data = request.POST
        try:
            total_forms_count = int(post_data["form-TOTAL_FORMS"])
        except ValueError, KeyError:
            total_forms_count = 0
        if add_page:
            total_forms_count += 1
            post_data = post_data.copy()
            post_data["form-TOTAL_FORMS"] = total_forms_count
        formset = PageFormSet(post_data, queryset=pages)
        forms = formset.forms
        if formset.is_valid():
            forms = formset.ordered_forms
            if save_action:
                profile = request.user.get_profile()
                current_order = list(pages.values_list("index", flat=True))
                new_forms_count = total_forms_count - len(current_order)
                if new_forms_count > 0:
                    try:
                        first_available_index = project.pages.order_by("-index")[0].index + 1
                    except IndexError:
                        first_available_index = 1
                    current_order.extend(xrange(first_available_index, first_available_index + new_forms_count + 1))
            for form in forms:
                instance = form.save(commit=False)
                if save_action:
                    instance.author = profile
                    # FIXME: Starting with Django 1.4 it is possible to
                    # specify initial values on model formsets so we could include
                    # the minor_update and collaborative form fields in the future.
                    if instance.id:
                        old_page = Page.objects.get(id=instance.id)
                        old_version = PageVersion(
                            title=old_page.title,
                            content=old_page.content,
                            author=old_page.author,
                            date=old_page.last_update,
                            page=instance,
                        )
                        old_version.save()
                        instance.minor_update = True
                        instance.last_update = datetime.datetime.now()
                    else:
                        instance.project = project
                        if project.category != Project.STUDY_GROUP:
                            instance.collaborative = False
                    if form.cleaned_data["ORDER"]:
                        instance.index = current_order[form.cleaned_data["ORDER"] - 1]
                    instance.save()
            for form in formset.deleted_forms:
                instance = form.instance
                instance.deleted = True
                if save_action and instance.id:
                    old_page = Page.objects.get(id=instance.id)
                    old_version = PageVersion(
                        title=old_page.title,
                        content=old_page.content,
                        author=old_page.author,
                        date=old_page.last_update,
                        page=instance,
                    )
                    old_version.save()
                    old_page.deleted = True
                    old_page.author = profile
                    old_page.last_update = datetime.datetime.now()
                    old_page.save()
            if final_save:
                return http.HttpResponseRedirect(project.get_absolute_url())
            elif save_action:
                return http.HttpResponseRedirect(reverse("edit_pages", kwargs=dict(slug=project.slug)))
        else:
            if add_page:
                messages.info(request, _("Please fill out the new task."))
            else:
                messages.error(request, _("Please correct errors below."))
            preview = False