Esempio n. 1
0
def approve_moderation(request, revision_id):
    revision = get_object_or_404(PageRevision, id=revision_id)
    if not revision.page.permissions_for_user(request.user).can_publish():
        raise PermissionDenied

    if not revision.submitted_for_moderation:
        messages.error(
            request,
            _("The page '{0}' is not currently awaiting moderation.").format(
                revision.page.get_admin_display_title()))
        return redirect('tuiuiuadmin_home')

    if request.method == 'POST':
        revision.approve_moderation()
        messages.success(request,
                         _("Page '{0}' published.").format(
                             revision.page.get_admin_display_title()),
                         buttons=[
                             messages.button(revision.page.url,
                                             _('View live'),
                                             new_window=True),
                             messages.button(
                                 reverse('tuiuiuadmin_pages:edit',
                                         args=(revision.page.id, )), _('Edit'))
                         ])
        if not send_notification(revision.id, 'approved', request.user.pk):
            messages.error(request, _("Failed to send approval notifications"))

    return redirect('tuiuiuadmin_home')
Esempio n. 2
0
def edit(request, user_id):
    user = get_object_or_404(User, pk=user_id)
    can_delete = user_can_delete_user(request.user, user)

    if request.method == 'POST':
        form = get_user_edit_form()(request.POST, request.FILES, instance=user)
        if form.is_valid():
            user = form.save()
            messages.success(request,
                             _("User '{0}' updated.").format(user),
                             buttons=[
                                 messages.button(
                                     reverse('tuiuiuusers_users:edit',
                                             args=(user.pk, )), _('Edit'))
                             ])
            return redirect('tuiuiuusers_users:index')
        else:
            messages.error(request,
                           _("The user could not be saved due to errors."))
    else:
        form = get_user_edit_form()(instance=user)

    return render(request, 'tuiuiuusers/users/edit.html', {
        'user': user,
        'form': form,
        'can_delete': can_delete,
    })
Esempio n. 3
0
def add(request):
    Document = get_document_model()
    DocumentForm = get_document_form(Document)

    if request.method == 'POST':
        doc = Document(uploaded_by_user=request.user)
        form = DocumentForm(request.POST,
                            request.FILES,
                            instance=doc,
                            user=request.user)
        if form.is_valid():
            form.save()

            # Reindex the document to make sure all tags are indexed
            search_index.insert_or_update_object(doc)

            messages.success(request,
                             _("Document '{0}' added.").format(doc.title),
                             buttons=[
                                 messages.button(
                                     reverse('tuiuiudocs:edit',
                                             args=(doc.id, )), _('Edit'))
                             ])
            return redirect('tuiuiudocs:index')
        else:
            messages.error(request,
                           _("The document could not be saved due to errors."))
    else:
        form = DocumentForm(user=request.user)

    return render(request, "tuiuiudocs/documents/add.html", {
        'form': form,
    })
Esempio n. 4
0
def edit(request, redirect_id):
    theredirect = get_object_or_404(models.Redirect, id=redirect_id)

    if not permission_policy.user_has_permission_for_instance(
        request.user, 'change', theredirect
    ):
        return permission_denied(request)

    if request.method == 'POST':
        form = RedirectForm(request.POST, request.FILES, instance=theredirect)
        if form.is_valid():
            form.save()
            messages.success(request, _("Redirect '{0}' updated.").format(theredirect.title), buttons=[
                messages.button(reverse('tuiuiuredirects:edit', args=(theredirect.id,)), _('Edit'))
            ])
            return redirect('tuiuiuredirects:index')
        else:
            messages.error(request, _("The redirect could not be saved due to errors."))
    else:
        form = RedirectForm(instance=theredirect)

    return render(request, "tuiuiuredirects/edit.html", {
        'redirect': theredirect,
        'form': form,
        'user_can_delete': permission_policy.user_has_permission(request.user, 'delete'),
    })
Esempio n. 5
0
def move_confirm(request, page_to_move_id, destination_id):
    page_to_move = get_object_or_404(Page, id=page_to_move_id).specific
    destination = get_object_or_404(Page, id=destination_id)
    if not page_to_move.permissions_for_user(
            request.user).can_move_to(destination):
        raise PermissionDenied

    if request.method == 'POST':
        # any invalid moves *should* be caught by the permission check above,
        # so don't bother to catch InvalidMoveToDescendant
        page_to_move.move(destination, pos='last-child')

        messages.success(request,
                         _("Page '{0}' moved.").format(
                             page_to_move.get_admin_display_title()),
                         buttons=[
                             messages.button(
                                 reverse('tuiuiuadmin_pages:edit',
                                         args=(page_to_move.id, )), _('Edit'))
                         ])

        return redirect('tuiuiuadmin_explore', destination.id)

    return render(request, 'tuiuiuadmin/pages/confirm_move.html', {
        'page_to_move': page_to_move,
        'destination': destination,
    })
Esempio n. 6
0
 def form_valid(self, form):
     self.form = form
     self.object = self.save_instance()
     success_message = self.get_success_message(self.object)
     if success_message is not None:
         messages.success(self.request, success_message, buttons=[
             messages.button(reverse(self.edit_url_name, args=(self.object.id,)), _('Edit'))
         ])
     return redirect(self.get_success_url())
Esempio n. 7
0
def index(request):

    form = SearchForm(placeholder=_("Search something"))

    example_form = ExampleForm()

    messages.success(request,
                     _("Success message"),
                     buttons=[
                         messages.button('', _('View live')),
                         messages.button('', _('Edit'))
                     ])
    messages.warning(request,
                     _("Warning message"),
                     buttons=[
                         messages.button('', _('View live')),
                         messages.button('', _('Edit'))
                     ])
    messages.error(request,
                   _("Error message"),
                   buttons=[
                       messages.button('', _('View live')),
                       messages.button('', _('Edit'))
                   ])

    paginator = Paginator(list(range(100)), 10)
    page = paginator.page(2)

    return render(request, 'styleguide/base.html', {
        'search_form': form,
        'example_form': example_form,
        'example_page': page,
    })
Esempio n. 8
0
def edit(request, query_id):
    query = get_object_or_404(Query, id=query_id)

    if request.method == 'POST':
        # Get query
        query_form = search_forms.QueryForm(request.POST)
        # and the recommendations
        searchpicks_formset = forms.SearchPromotionsFormSet(request.POST,
                                                            instance=query)

        if query_form.is_valid():
            new_query = Query.get(query_form['query_string'].value())

            # Save search picks
            if save_searchpicks(query, new_query, searchpicks_formset):
                messages.success(
                    request,
                    _("Editor's picks for '{0}' updated.").format(new_query),
                    buttons=[
                        messages.button(
                            reverse('searchpromotions:edit',
                                    args=(query.id, )), _('Edit'))
                    ])
                return redirect('searchpromotions:index')
            else:
                if len(searchpicks_formset.non_form_errors()):
                    messages.error(
                        request,
                        " ".join(error for error in
                                 searchpicks_formset.non_form_errors()))
                    # formset level error (e.g. no forms submitted)
                else:
                    messages.error(
                        request,
                        _("Recommendations have not been saved due to errors"))
                    # specific errors will be displayed within form fields

    else:
        query_form = search_forms.QueryForm(initial=dict(
            query_string=query.query_string))
        searchpicks_formset = forms.SearchPromotionsFormSet(instance=query)

    return render(
        request, 'searchpromotions/edit.html', {
            'query_form': query_form,
            'searchpicks_formset': searchpicks_formset,
            'query': query,
        })
Esempio n. 9
0
def add(request):
    if request.method == 'POST':
        form = RedirectForm(request.POST, request.FILES)
        if form.is_valid():
            theredirect = form.save()

            messages.success(request, _("Redirect '{0}' added.").format(theredirect.title), buttons=[
                messages.button(reverse('tuiuiuredirects:edit', args=(theredirect.id,)), _('Edit'))
            ])
            return redirect('tuiuiuredirects:index')
        else:
            messages.error(request, _("The redirect could not be created due to errors."))
    else:
        form = RedirectForm()

    return render(request, "tuiuiuredirects/add.html", {
        'form': form,
    })
Esempio n. 10
0
def edit(request, app_label, model_name, id):
    model = get_snippet_model_from_url_params(app_label, model_name)

    permission = get_permission_name('change', model)
    if not request.user.has_perm(permission):
        return permission_denied(request)

    instance = get_object_or_404(model, id=id)
    edit_handler_class = get_snippet_edit_handler(model)
    form_class = edit_handler_class.get_form_class(model)

    if request.method == 'POST':
        form = form_class(request.POST, request.FILES, instance=instance)

        if form.is_valid():
            form.save()

            messages.success(
                request,
                _("{snippet_type} '{instance}' updated.").format(
                    snippet_type=capfirst(model._meta.verbose_name_plural),
                    instance=instance),
                buttons=[
                    messages.button(
                        reverse('tuiuiusnippets:edit',
                                args=(app_label, model_name, instance.id)),
                        _('Edit'))
                ])
            return redirect('tuiuiusnippets:list', app_label, model_name)
        else:
            messages.error(request,
                           _("The snippet could not be saved due to errors."))
            edit_handler = edit_handler_class(instance=instance, form=form)
    else:
        form = form_class(instance=instance)
        edit_handler = edit_handler_class(instance=instance, form=form)

    return render(
        request, 'tuiuiusnippets/snippets/edit.html', {
            'model_opts': model._meta,
            'instance': instance,
            'edit_handler': edit_handler,
            'form': form,
        })
Esempio n. 11
0
def add(request):
    if request.method == 'POST':
        # Get query
        query_form = search_forms.QueryForm(request.POST)
        if query_form.is_valid():
            query = Query.get(query_form['query_string'].value())

            # Save search picks
            searchpicks_formset = forms.SearchPromotionsFormSet(request.POST,
                                                                instance=query)
            if save_searchpicks(query, query, searchpicks_formset):
                messages.success(
                    request,
                    _("Editor's picks for '{0}' created.").format(query),
                    buttons=[
                        messages.button(
                            reverse('searchpromotions:edit',
                                    args=(query.id, )), _('Edit'))
                    ])
                return redirect('searchpromotions:index')
            else:
                if len(searchpicks_formset.non_form_errors()):
                    # formset level error (e.g. no forms submitted)
                    messages.error(
                        request,
                        " ".join(error for error in
                                 searchpicks_formset.non_form_errors()))
                else:
                    # specific errors will be displayed within form fields
                    messages.error(
                        request,
                        _("Recommendations have not been created due to errors"
                          ))
        else:
            searchpicks_formset = forms.SearchPromotionsFormSet()
    else:
        query_form = search_forms.QueryForm()
        searchpicks_formset = forms.SearchPromotionsFormSet()

    return render(request, 'searchpromotions/add.html', {
        'query_form': query_form,
        'searchpicks_formset': searchpicks_formset,
    })
Esempio n. 12
0
def create(request):
    if request.method == 'POST':
        form = get_user_creation_form()(request.POST, request.FILES)
        if form.is_valid():
            user = form.save()
            messages.success(request,
                             _("User '{0}' created.").format(user),
                             buttons=[
                                 messages.button(
                                     reverse('tuiuiuusers_users:edit',
                                             args=(user.pk, )), _('Edit'))
                             ])
            return redirect('tuiuiuusers_users:index')
        else:
            messages.error(request,
                           _("The user could not be created due to errors."))
    else:
        form = get_user_creation_form()()

    return render(request, 'tuiuiuusers/users/create.html', {
        'form': form,
    })
Esempio n. 13
0
def unpublish(request, page_id):
    page = get_object_or_404(Page, id=page_id).specific

    user_perms = UserPagePermissionsProxy(request.user)
    if not user_perms.for_page(page).can_unpublish():
        raise PermissionDenied

    next_url = get_valid_next_url_from_request(request)

    if request.method == 'POST':
        include_descendants = request.POST.get("include_descendants", False)

        page.unpublish()

        if include_descendants:
            live_descendant_pages = page.get_descendants().live().specific()
            for live_descendant_page in live_descendant_pages:
                if user_perms.for_page(live_descendant_page).can_unpublish():
                    live_descendant_page.unpublish()

        messages.success(request,
                         _("Page '{0}' unpublished.").format(
                             page.get_admin_display_title()),
                         buttons=[
                             messages.button(
                                 reverse('tuiuiuadmin_pages:edit',
                                         args=(page.id, )), _('Edit'))
                         ])

        if next_url:
            return redirect(next_url)
        return redirect('tuiuiuadmin_explore', page.get_parent().id)

    return render(
        request, 'tuiuiuadmin/pages/confirm_unpublish.html', {
            'page': page,
            'next': next_url,
            'live_descendant_count': page.get_descendants().live().count(),
        })
Esempio n. 14
0
def edit(request, group_id):
    group = get_object_or_404(Group, id=group_id)
    if request.method == 'POST':
        form = GroupForm(request.POST, instance=group)
        permission_panels = [
            cls(request.POST, instance=group)
            for cls in get_permission_panel_classes()
        ]
        if form.is_valid() and all(panel.is_valid()
                                   for panel in permission_panels):
            form.save()

            for panel in permission_panels:
                panel.save()

            messages.success(request,
                             _("Group '{0}' updated.").format(group),
                             buttons=[
                                 messages.button(
                                     reverse('tuiuiuusers_groups:edit',
                                             args=(group.id, )), _('Edit'))
                             ])
            return redirect('tuiuiuusers_groups:index')
        else:
            messages.error(request,
                           _("The group could not be saved due to errors."))
    else:
        form = GroupForm(instance=group)
        permission_panels = [
            cls(instance=group) for cls in get_permission_panel_classes()
        ]

    return render(request, 'tuiuiuusers/groups/edit.html', {
        'group': group,
        'form': form,
        'permission_panels': permission_panels,
    })
Esempio n. 15
0
def add(request):
    ImageModel = get_image_model()
    ImageForm = get_image_form(ImageModel)

    if request.method == 'POST':
        image = ImageModel(uploaded_by_user=request.user)
        form = ImageForm(request.POST,
                         request.FILES,
                         instance=image,
                         user=request.user)
        if form.is_valid():
            # Set image file size
            image.file_size = image.file.size

            form.save()

            # Reindex the image to make sure all tags are indexed
            search_index.insert_or_update_object(image)

            messages.success(request,
                             _("Image '{0}' added.").format(image.title),
                             buttons=[
                                 messages.button(
                                     reverse('tuiuiuimages:edit',
                                             args=(image.id, )), _('Edit'))
                             ])
            return redirect('tuiuiuimages:index')
        else:
            messages.error(request,
                           _("The image could not be created due to errors."))
    else:
        form = ImageForm(user=request.user)

    return render(request, "tuiuiuimages/images/add.html", {
        'form': form,
    })
Esempio n. 16
0
def edit(request, image_id):
    Image = get_image_model()
    ImageForm = get_image_form(Image)

    image = get_object_or_404(Image, id=image_id)

    if not permission_policy.user_has_permission_for_instance(
            request.user, 'change', image):
        return permission_denied(request)

    if request.method == 'POST':
        original_file = image.file
        form = ImageForm(request.POST,
                         request.FILES,
                         instance=image,
                         user=request.user)
        if form.is_valid():
            if 'file' in form.changed_data:
                # if providing a new image file, delete the old one and all renditions.
                # NB Doing this via original_file.delete() clears the file field,
                # which definitely isn't what we want...
                original_file.storage.delete(original_file.name)
                image.renditions.all().delete()

                # Set new image file size
                image.file_size = image.file.size

            form.save()

            # Reindex the image to make sure all tags are indexed
            search_index.insert_or_update_object(image)

            messages.success(request,
                             _("Image '{0}' updated.").format(image.title),
                             buttons=[
                                 messages.button(
                                     reverse('tuiuiuimages:edit',
                                             args=(image.id, )),
                                     _('Edit again'))
                             ])
            return redirect('tuiuiuimages:index')
        else:
            messages.error(request,
                           _("The image could not be saved due to errors."))
    else:
        form = ImageForm(instance=image, user=request.user)

    # Check if we should enable the frontend url generator
    # :) foo
    try:
        reverse('tuiuiuimages_serve', args=('foo', '1', 'bar'))
        url_generator_enabled = True
    except NoReverseMatch:
        url_generator_enabled = False

    if image.is_stored_locally():
        # Give error if image file doesn't exist
        if not os.path.isfile(image.file.path):
            messages.error(
                request,
                _("The source image file could not be found. Please change the source or delete the image."
                  ).format(image.title),
                buttons=[
                    messages.button(
                        reverse('tuiuiuimages:delete', args=(image.id, )),
                        _('Delete'))
                ])

    return render(
        request, "tuiuiuimages/images/edit.html", {
            'image':
            image,
            'form':
            form,
            'url_generator_enabled':
            url_generator_enabled,
            'filesize':
            image.get_file_size(),
            'user_can_delete':
            permission_policy.user_has_permission_for_instance(
                request.user, 'delete', image),
        })
Esempio n. 17
0
def edit(request, page_id):
    latest_revision = get_object_or_404(Page, id=page_id).get_latest_revision()
    page = get_object_or_404(Page, id=page_id).get_latest_revision_as_page()
    parent = page.get_parent()

    content_type = ContentType.objects.get_for_model(page)
    page_class = content_type.model_class()

    page_perms = page.permissions_for_user(request.user)
    if not page_perms.can_edit():
        raise PermissionDenied

    for fn in hooks.get_hooks('before_edit_page'):
        result = fn(request, page)
        if hasattr(result, 'status_code'):
            return result

    edit_handler_class = page_class.get_edit_handler()
    form_class = edit_handler_class.get_form_class(page_class)

    next_url = get_valid_next_url_from_request(request)

    errors_debug = None

    if request.method == 'POST':
        form = form_class(request.POST,
                          request.FILES,
                          instance=page,
                          parent_page=parent)

        if form.is_valid() and not page.locked:
            page = form.save(commit=False)

            is_publishing = bool(request.POST.get(
                'action-publish')) and page_perms.can_publish()
            is_submitting = bool(request.POST.get('action-submit'))
            is_reverting = bool(request.POST.get('revision'))

            # If a revision ID was passed in the form, get that revision so its
            # date can be referenced in notification messages
            if is_reverting:
                previous_revision = get_object_or_404(
                    page.revisions, id=request.POST.get('revision'))

            # Save revision
            revision = page.save_revision(
                user=request.user,
                submitted_for_moderation=is_submitting,
            )

            # Publish
            if is_publishing:
                revision.publish()
                # Need to reload the page because the URL may have changed, and we
                # need the up-to-date URL for the "View Live" button.
                page = page.specific_class.objects.get(pk=page.pk)

            # Notifications
            if is_publishing:
                if page.go_live_at and page.go_live_at > timezone.now():
                    # Page has been scheduled for publishing in the future

                    if is_reverting:
                        message = _(
                            "Revision from {0} of page '{1}' has been scheduled for publishing."
                        ).format(
                            previous_revision.created_at.strftime(
                                "%d %b %Y %H:%M"),
                            page.get_admin_display_title())
                    else:
                        message = _(
                            "Page '{0}' has been scheduled for publishing."
                        ).format(page.get_admin_display_title())

                    messages.success(request,
                                     message,
                                     buttons=[
                                         messages.button(
                                             reverse('tuiuiuadmin_pages:edit',
                                                     args=(page.id, )),
                                             _('Edit'))
                                     ])

                else:
                    # Page is being published now

                    if is_reverting:
                        message = _(
                            "Revision from {0} of page '{1}' has been published."
                        ).format(
                            previous_revision.created_at.strftime(
                                "%d %b %Y %H:%M"),
                            page.get_admin_display_title())
                    else:
                        message = _("Page '{0}' has been published.").format(
                            page.get_admin_display_title())

                    messages.success(request,
                                     message,
                                     buttons=[
                                         messages.button(page.url,
                                                         _('View live'),
                                                         new_window=True),
                                         messages.button(
                                             reverse('tuiuiuadmin_pages:edit',
                                                     args=(page_id, )),
                                             _('Edit'))
                                     ])

            elif is_submitting:

                message = _(
                    "Page '{0}' has been submitted for moderation.").format(
                        page.get_admin_display_title())

                messages.success(request,
                                 message,
                                 buttons=[
                                     messages.button(reverse(
                                         'tuiuiuadmin_pages:view_draft',
                                         args=(page_id, )),
                                                     _('View draft'),
                                                     new_window=True),
                                     messages.button(
                                         reverse('tuiuiuadmin_pages:edit',
                                                 args=(page_id, )), _('Edit'))
                                 ])

                if not send_notification(page.get_latest_revision().id,
                                         'submitted', request.user.pk):
                    messages.error(
                        request,
                        _("Failed to send notifications to moderators"))

            else:  # Saving

                if is_reverting:
                    message = _(
                        "Page '{0}' has been replaced with revision from {1}."
                    ).format(
                        page.get_admin_display_title(),
                        previous_revision.created_at.strftime(
                            "%d %b %Y %H:%M"))
                else:
                    message = _("Page '{0}' has been updated.").format(
                        page.get_admin_display_title())

                messages.success(request, message)

            for fn in hooks.get_hooks('after_edit_page'):
                result = fn(request, page)
                if hasattr(result, 'status_code'):
                    return result

            if is_publishing or is_submitting:
                # we're done here - redirect back to the explorer
                if next_url:
                    # redirect back to 'next' url if present
                    return redirect(next_url)
                # redirect back to the explorer
                return redirect('tuiuiuadmin_explore', page.get_parent().id)
            else:
                # Just saving - remain on edit page for further edits
                target_url = reverse('tuiuiuadmin_pages:edit', args=[page.id])
                if next_url:
                    # Ensure the 'next' url is passed through again if present
                    target_url += '?next=%s' % urlquote(next_url)
                return redirect(target_url)
        else:
            if page.locked:
                messages.error(
                    request, _("The page could not be saved as it is locked"))
            else:
                messages.validation_error(
                    request,
                    _("The page could not be saved due to validation errors"),
                    form)

            edit_handler = edit_handler_class(instance=page, form=form)
            errors_debug = (repr(edit_handler.form.errors) + repr(
                [(name, formset.errors)
                 for (name, formset) in edit_handler.form.formsets.items()
                 if formset.errors]))
            has_unsaved_changes = True
    else:
        form = form_class(instance=page, parent_page=parent)
        edit_handler = edit_handler_class(instance=page, form=form)
        has_unsaved_changes = False

    # Check for revisions still undergoing moderation and warn
    if latest_revision and latest_revision.submitted_for_moderation:
        buttons = []

        if page.live:
            buttons.append(
                messages.button(
                    reverse('tuiuiuadmin_pages:revisions_compare',
                            args=(page.id, 'live', latest_revision.id)),
                    _('Compare with live version')))

        messages.warning(request,
                         _("This page is currently awaiting moderation"),
                         buttons=buttons)

    return render(
        request, 'tuiuiuadmin/pages/edit.html', {
            'page': page,
            'content_type': content_type,
            'edit_handler': edit_handler,
            'errors_debug': errors_debug,
            'preview_modes': page.preview_modes,
            'form': form,
            'next': next_url,
            'has_unsaved_changes': has_unsaved_changes,
        })
Esempio n. 18
0
def create(request, content_type_app_name, content_type_model_name,
           parent_page_id):
    parent_page = get_object_or_404(Page, id=parent_page_id).specific
    parent_page_perms = parent_page.permissions_for_user(request.user)
    if not parent_page_perms.can_add_subpage():
        raise PermissionDenied

    try:
        content_type = ContentType.objects.get_by_natural_key(
            content_type_app_name, content_type_model_name)
    except ContentType.DoesNotExist:
        raise Http404

    # Get class
    page_class = content_type.model_class()

    # Make sure the class is a descendant of Page
    if not issubclass(page_class, Page):
        raise Http404

    # page must be in the list of allowed subpage types for this parent ID
    if page_class not in parent_page.creatable_subpage_models():
        raise PermissionDenied

    if not page_class.can_create_at(parent_page):
        raise PermissionDenied

    for fn in hooks.get_hooks('before_create_page'):
        result = fn(request, parent_page, page_class)
        if hasattr(result, 'status_code'):
            return result

    page = page_class(owner=request.user)
    edit_handler_class = page_class.get_edit_handler()
    form_class = edit_handler_class.get_form_class(page_class)

    next_url = get_valid_next_url_from_request(request)

    if request.method == 'POST':
        form = form_class(request.POST,
                          request.FILES,
                          instance=page,
                          parent_page=parent_page)

        if form.is_valid():
            page = form.save(commit=False)

            is_publishing = bool(request.POST.get(
                'action-publish')) and parent_page_perms.can_publish_subpage()
            is_submitting = bool(request.POST.get('action-submit'))

            if not is_publishing:
                page.live = False

            # Save page
            parent_page.add_child(instance=page)

            # Save revision
            revision = page.save_revision(
                user=request.user,
                submitted_for_moderation=is_submitting,
            )

            # Publish
            if is_publishing:
                revision.publish()

            # Notifications
            if is_publishing:
                if page.go_live_at and page.go_live_at > timezone.now():
                    messages.success(
                        request,
                        _("Page '{0}' created and scheduled for publishing."
                          ).format(page.get_admin_display_title()),
                        buttons=[
                            messages.button(
                                reverse('tuiuiuadmin_pages:edit',
                                        args=(page.id, )), _('Edit'))
                        ])
                else:
                    messages.success(
                        request,
                        _("Page '{0}' created and published.").format(
                            page.get_admin_display_title()),
                        buttons=[
                            messages.button(page.url,
                                            _('View live'),
                                            new_window=True),
                            messages.button(
                                reverse('tuiuiuadmin_pages:edit',
                                        args=(page.id, )), _('Edit'))
                        ])
            elif is_submitting:
                messages.success(
                    request,
                    _("Page '{0}' created and submitted for moderation."
                      ).format(page.get_admin_display_title()),
                    buttons=[
                        messages.button(reverse('tuiuiuadmin_pages:view_draft',
                                                args=(page.id, )),
                                        _('View draft'),
                                        new_window=True),
                        messages.button(
                            reverse('tuiuiuadmin_pages:edit',
                                    args=(page.id, )), _('Edit'))
                    ])
                if not send_notification(page.get_latest_revision().id,
                                         'submitted', request.user.pk):
                    messages.error(
                        request,
                        _("Failed to send notifications to moderators"))
            else:
                messages.success(
                    request,
                    _("Page '{0}' created.").format(
                        page.get_admin_display_title()))

            for fn in hooks.get_hooks('after_create_page'):
                result = fn(request, page)
                if hasattr(result, 'status_code'):
                    return result

            if is_publishing or is_submitting:
                # we're done here
                if next_url:
                    # redirect back to 'next' url if present
                    return redirect(next_url)
                # redirect back to the explorer
                return redirect('tuiuiuadmin_explore', page.get_parent().id)
            else:
                # Just saving - remain on edit page for further edits
                target_url = reverse('tuiuiuadmin_pages:edit', args=[page.id])
                if next_url:
                    # Ensure the 'next' url is passed through again if present
                    target_url += '?next=%s' % urlquote(next_url)
                return redirect(target_url)
        else:
            messages.validation_error(
                request,
                _("The page could not be created due to validation errors"),
                form)
            edit_handler = edit_handler_class(instance=page, form=form)
            has_unsaved_changes = True
    else:
        signals.init_new_page.send(sender=create,
                                   page=page,
                                   parent=parent_page)
        form = form_class(instance=page, parent_page=parent_page)
        edit_handler = edit_handler_class(instance=page, form=form)
        has_unsaved_changes = False

    return render(
        request, 'tuiuiuadmin/pages/create.html', {
            'content_type': content_type,
            'page_class': page_class,
            'parent_page': parent_page,
            'edit_handler': edit_handler,
            'preview_modes': page.preview_modes,
            'form': form,
            'next': next_url,
            'has_unsaved_changes': has_unsaved_changes,
        })
Esempio n. 19
0
 def get_success_message_buttons(self, instance):
     button_url = self.url_helper.get_action_url('edit', quote(instance.pk))
     return [messages.button(button_url, _('Edit'))]
Esempio n. 20
0
def edit(request, document_id):
    Document = get_document_model()
    DocumentForm = get_document_form(Document)

    doc = get_object_or_404(Document, id=document_id)

    if not permission_policy.user_has_permission_for_instance(
            request.user, 'change', doc):
        return permission_denied(request)

    if request.method == 'POST':
        original_file = doc.file
        form = DocumentForm(request.POST,
                            request.FILES,
                            instance=doc,
                            user=request.user)
        if form.is_valid():
            if 'file' in form.changed_data:
                # if providing a new document file, delete the old one.
                # NB Doing this via original_file.delete() clears the file field,
                # which definitely isn't what we want...
                original_file.storage.delete(original_file.name)
            doc = form.save()

            # Reindex the document to make sure all tags are indexed
            search_index.insert_or_update_object(doc)

            messages.success(request,
                             _("Document '{0}' updated").format(doc.title),
                             buttons=[
                                 messages.button(
                                     reverse('tuiuiudocs:edit',
                                             args=(doc.id, )), _('Edit'))
                             ])
            return redirect('tuiuiudocs:index')
        else:
            messages.error(request,
                           _("The document could not be saved due to errors."))
    else:
        form = DocumentForm(instance=doc, user=request.user)

    filesize = None

    # Get file size when there is a file associated with the Document object
    if doc.file:
        try:
            filesize = doc.file.size
        except OSError:
            # File doesn't exist
            pass

    if not filesize:
        messages.error(
            request,
            _("The file could not be found. Please change the source or delete the document"
              ),
            buttons=[
                messages.button(reverse('tuiuiudocs:delete', args=(doc.id, )),
                                _('Delete'))
            ])

    return render(
        request, "tuiuiudocs/documents/edit.html", {
            'document':
            doc,
            'filesize':
            filesize,
            'form':
            form,
            'user_can_delete':
            permission_policy.user_has_permission_for_instance(
                request.user, 'delete', doc),
        })