Esempio n. 1
0
 def get_context_data(self, **kwargs):
     kwargs["form"] = self.get_form()
     kwargs["edit_form"] = kwargs["form"]
     kwargs["editor"] = editors.getEditor()
     kwargs["selected_tab"] = "edit"
     kwargs["sidebar"] = self.sidebar
     return super().get_context_data(**kwargs)
Esempio n. 2
0
 def get_context_data(self, **kwargs):
     c = ArticleMixin.get_context_data(self, **kwargs)
     c["form"] = self.get_form()
     c["parent_urlpath"] = self.urlpath
     c["parent_article"] = self.article
     c["create_form"] = c.pop("form", None)
     c["editor"] = editors.getEditor()
     return c
Esempio n. 3
0
class CreateRootForm(forms.Form):
    title = forms.CharField(
        label=_("Title"),
        help_text=
        _("Initial title of the article. May be overridden with revision titles."
          ),
    )
    content = forms.CharField(
        label=_("Type in some contents"),
        help_text=
        _("This is just the initial contents of your article. After creating it, you can use more complex features like adding plugins, meta data, related articles etc..."
          ),
        required=False,
        widget=getEditor().get_widget(),
    )  # @UndefinedVariable
Esempio n. 4
0
class CreateForm(forms.Form, SpamProtectionMixin):
    def __init__(self, request, urlpath_parent, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.request = request
        self.urlpath_parent = urlpath_parent

    title = forms.CharField(label=_("Title"), )
    slug = WikiSlugField(
        label=_("Slug"),
        help_text=
        _("This will be the address where your article can be found. Use only alphanumeric characters and - or _.<br>Note: If you change the slug later on, links pointing to this article are <b>not</b> updated."
          ),
        max_length=models.URLPath.SLUG_MAX_LENGTH,
    )
    content = forms.CharField(
        label=_("Contents"), required=False,
        widget=getEditor().get_widget())  # @UndefinedVariable

    summary = forms.CharField(
        label=pgettext_lazy("Revision comment", "Summary"),
        help_text=_("Write a brief message for the article's history log."),
        required=False,
    )
    project = forms.ModelChoiceField(
        label=pgettext_lazy("project", "Project"),
        help_text='Choose your project',
        required=False,
        queryset=Project.objects.all(),
    )

    def clean_slug(self):
        return _clean_slug(self.cleaned_data["slug"], self.urlpath_parent)

    def clean(self):
        self.check_spam()
        return self.cleaned_data
Esempio n. 5
0
class EditForm(forms.Form, SpamProtectionMixin):
    title = forms.CharField(label=_("Title"), )
    content = forms.CharField(
        label=_("Contents"), required=False,
        widget=getEditor().get_widget())  # @UndefinedVariable

    summary = forms.CharField(
        label=pgettext_lazy("Revision comment", "Summary"),
        help_text=
        _("Give a short reason for your edit, which will be stated in the revision log."
          ),
        required=False,
    )

    current_revision = forms.IntegerField(required=False,
                                          widget=forms.HiddenInput())

    def __init__(self, request, current_revision, *args, **kwargs):

        self.request = request
        self.no_clean = kwargs.pop("no_clean", False)
        self.preview = kwargs.pop("preview", False)
        self.initial_revision = current_revision
        self.presumed_revision = None
        if current_revision:
            # For e.g. editing a section of the text: The content provided by the caller is used.
            #      Otherwise use the content of the revision.
            provided_content = True
            content = kwargs.pop("content", None)
            if content is None:
                provided_content = False
                content = current_revision.content
            initial = {
                "content": content,
                "title": current_revision.title,
                "current_revision": current_revision.id,
            }
            initial.update(kwargs.get("initial", {}))

            # Manipulate any data put in args[0] such that the current_revision
            # is reset to match the actual current revision.
            data = None
            if len(args) > 0:
                data = args[0]
                args = args[1:]
            if data is None:
                data = kwargs.get("data", None)
            if data:
                self.presumed_revision = data.get("current_revision", None)
                if not str(self.presumed_revision) == str(
                        self.initial_revision.id):
                    newdata = {}
                    for k, v in data.items():
                        newdata[k] = v
                    newdata["current_revision"] = self.initial_revision.id
                    # Don't merge if content comes from the caller
                    if provided_content:
                        self.presumed_revision = self.initial_revision.id
                    else:
                        newdata["content"] = simple_merge(
                            content, data.get("content", ""))
                    newdata["title"] = current_revision.title
                    kwargs["data"] = newdata
                else:
                    # Always pass as kwarg
                    kwargs["data"] = data

            kwargs["initial"] = initial

        super().__init__(*args, **kwargs)

    def clean_title(self):
        title = self.cleaned_data.get("title", None)
        title = (title or "").strip()
        if not title:
            raise forms.ValidationError(
                gettext("Article is missing title or has an invalid title"))
        return title

    def clean(self):
        """Validates form data by checking for the following
        No new revisions have been created since user attempted to edit
        Revision title or content has changed
        """
        if self.no_clean or self.preview:
            return self.cleaned_data
        if not str(self.initial_revision.id) == str(self.presumed_revision):
            raise forms.ValidationError(
                gettext(
                    "While you were editing, someone else changed the revision. Your contents have been automatically merged with the new contents. Please review the text below."
                ))
        if ("title" in self.cleaned_data
                and self.cleaned_data["title"] == self.initial_revision.title
                and self.cleaned_data["content"]
                == self.initial_revision.content):
            raise forms.ValidationError(
                gettext("No changes made. Nothing to save."))
        self.check_spam()
        return self.cleaned_data
Esempio n. 6
0
 def get_context_data(self, **kwargs):
     kwargs = super().get_context_data(**kwargs)
     kwargs["editor"] = editors.getEditor()
     return kwargs