Ejemplo n.º 1
0
def root_create(request):
    try:
        root = models.URLPath.root()
        if not root.article:
            # TODO: This is too dangerous... let's say there is no root.article and we end up here,
            # then it might cascade to delete a lot of things on an existing installation.... / benjaoming
            root.delete()
            raise NoRootURL
        return redirect('wiki:get', path=root.path)
    except NoRootURL:
        pass
    if not request.user.is_superuser:
        return redirect(settings.LOGIN_URL + "?next=" +
                        reverse("wiki:root_create"))
    if request.method == 'POST':
        create_form = forms.CreateRootForm(request.POST)
        if create_form.is_valid():
            models.URLPath.create_root(
                title=create_form.cleaned_data["title"],
                content=create_form.cleaned_data["content"])
            return redirect("wiki:root")
    else:
        create_form = forms.CreateRootForm()

    c = RequestContext(request, {
        'create_form': create_form,
        'editor': editors.getEditor(),
    })
    return render_to_response("wiki/article/create_root.html",
                              context_instance=c)
Ejemplo n.º 2
0
 def get_context_data(self, **kwargs):
     c = ArticleMixin.get_context_data(self, **kwargs)
     c["parent_urlpath"] = self.urlpath
     c["parent_article"] = self.article
     c["create_form"] = kwargs.pop("form", None)
     c["editor"] = editors.getEditor()
     return c
Ejemplo n.º 3
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)

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

    def clean(self):
        super().clean()
        self.check_spam()
        return self.cleaned_data
Ejemplo n.º 4
0
def root_create(request):
    try:
        root = models.URLPath.root()
        if not root.article:
            # TODO: This is too dangerous... let's say there is no root.article and we end up here,
            # then it might cascade to delete a lot of things on an existing installation.... / benjaoming
            root.delete()
            raise NoRootURL
        return redirect('wiki:get', path=root.path)
    except NoRootURL:
        pass
    if not request.user.is_superuser:
        return redirect(settings.LOGIN_URL + "?next=" + reverse("wiki:root_create"))
    if request.method == 'POST':
        create_form = forms.CreateRootForm(request.POST)
        if create_form.is_valid():
            models.URLPath.create_root(title=create_form.cleaned_data["title"],
                                       content=create_form.cleaned_data["content"])
            return redirect("wiki:root")
    else:
        create_form = forms.CreateRootForm()
    
    c = RequestContext(request, {'create_form': create_form,
                                 'editor': editors.getEditor(),})
    return render_to_response("wiki/article/create_root.html", context_instance=c)
Ejemplo n.º 5
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)
Ejemplo n.º 6
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)
Ejemplo n.º 7
0
 def get_context_data(self, **kwargs):
     c = ArticleMixin.get_context_data(self, **kwargs)
     c['parent_urlpath'] = self.urlpath
     c['parent_article'] = self.article
     c['create_form'] = kwargs.pop('form', None)
     c['editor'] = editors.getEditor()
     return c
Ejemplo n.º 8
0
 def get_context_data(self, **kwargs):
     c = ArticleMixin.get_context_data(self, **kwargs)
     c['parent_urlpath'] = self.urlpath
     c['parent_article'] = self.article
     c['create_form'] = kwargs.pop('form', None)
     c['editor'] = editors.getEditor()
     return c
Ejemplo n.º 9
0
 def get_context_data(self, **kwargs):
     kwargs = super().get_context_data(**kwargs)
     kwargs['editor'] = editors.getEditor()
     # Needed since Django 1.9 because get_context_data is no longer called
     # with the form instance
     if 'form' not in kwargs:
         kwargs['form'] = self.get_form()
     return kwargs
Ejemplo n.º 10
0
 def get_context_data(self, **kwargs):
     kwargs = super(CreateRootView, self).get_context_data(**kwargs)
     kwargs['editor'] = editors.getEditor()
     # Needed since Django 1.9 because get_context_data is no longer called
     # with the form instance
     if 'form' not in kwargs:
         kwargs['form'] = self.get_form()
     return kwargs
Ejemplo n.º 11
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
Ejemplo n.º 12
0
 def get_context_data(self, **kwargs):
     kwargs = super(CreateRootView, self).get_context_data(**kwargs)
     kwargs["editor"] = editors.getEditor()
     # Needed since Django 1.9 because get_context_data is no longer called
     # with the form instance
     if "form" not in kwargs:
         kwargs["form"] = self.get_form()
     return kwargs
Ejemplo n.º 13
0
 def get_context_data(self, **kwargs):
     # Needed for Django 1.9 because get_context_data is no longer called
     # with the form instance
     if "form" not in 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(Edit, self).get_context_data(**kwargs)
Ejemplo n.º 14
0
 def get_context_data(self, **kwargs):
     # Needed for Django 1.9 because get_context_data is no longer called
     # with the form instance
     if 'form' not in 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)
Ejemplo n.º 15
0
 def get_context_data(self, **kwargs):
     # Needed for Django 1.9 because get_context_data is no longer called
     # with the form instance
     if 'form' not in 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(Edit, self).get_context_data(**kwargs)
Ejemplo n.º 16
0
class CreateForm(forms.Form, SpamProtectionMixin):
    def __init__(self, request, urlpath_parent, *args, **kwargs):
        super(CreateForm, self).__init__(*args, **kwargs)
        self.request = request
        self.urlpath_parent = urlpath_parent

    title = forms.CharField(label=_('Title'), )
    slug = forms.SlugField(
        label=_('Slug'),
        help_text=
        _("This will be the address where your article can be found. Use only alphanumeric characters and - or _. Note that you cannot change the slug after creating the article."
          ),
        max_length=models.URLPath.SLUG_MAX_LENGTH)
    content = forms.CharField(
        label=_('Contents'), required=False,
        widget=getEditor().get_widget())  #@UndefinedVariable

    summary = forms.CharField(
        label=_('Summary'),
        help_text=_("Write a brief message for the article's history log."),
        required=False)

    def clean_slug(self):
        slug = self.cleaned_data['slug']
        if slug.startswith("_"):
            raise forms.ValidationError(
                ugettext('A slug may not begin with an underscore.'))
        if slug == 'admin':
            raise forms.ValidationError(
                ugettext("'admin' is not a permitted slug name."))

        if settings.URL_CASE_SENSITIVE:
            already_existing_slug = models.URLPath.objects.filter(
                slug=slug, parent=self.urlpath_parent)
        else:
            slug = slug.lower()
            slug = slug.replace('-', '_')
            already_existing_slug = models.URLPath.objects.filter(
                slug__iexact=slug, parent=self.urlpath_parent)
        if already_existing_slug:
            already_urlpath = already_existing_slug[0]
            if already_urlpath.article and already_urlpath.article.current_revision.deleted:
                raise forms.ValidationError(
                    ugettext(
                        'A deleted article with slug "%s" already exists.') %
                    already_urlpath.slug)
            else:
                raise forms.ValidationError(
                    ugettext('A slug named "%s" already exists.') %
                    already_urlpath.slug)
        return slug

    def clean(self):
        self.check_spam()
        return self.cleaned_data
Ejemplo n.º 17
0
 def get_context_data(self, **kwargs):
     c = ArticleMixin.get_context_data(self, **kwargs)
     # Needed since Django 1.9 because get_context_data is no longer called
     # with the form instance
     if "form" not in c:
         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
Ejemplo n.º 18
0
 def get_context_data(self, **kwargs):
     c = ArticleMixin.get_context_data(self, **kwargs)
     # Needed since Django 1.9 because get_context_data is no longer called
     # with the form instance
     if 'form' not in c:
         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
Ejemplo n.º 19
0
 def get_context_data(self, **kwargs):
     c = ArticleMixin.get_context_data(self, **kwargs)
     # Needed since Django 1.9 because get_context_data is no longer called
     # with the form instance
     if 'form' not in c:
         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
Ejemplo n.º 20
0
Archivo: forms.py Proyecto: biwoom/obn
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
Ejemplo n.º 21
0
    def get_urls(self):
        urlpatterns = self.get_root_urls()
        urlpatterns += getEditor().get_urls()
        urlpatterns += self.get_accounts_urls()
        urlpatterns += self.get_deleted_list_urls()
        urlpatterns += self.get_revision_urls()
        urlpatterns += self.get_article_urls()
        urlpatterns += self.get_plugin_urls()

        # This ALWAYS has to be the last of all the patterns since
        # the paths in theory could wrongly match other targets.
        urlpatterns += self.get_article_path_urls()
        return urlpatterns
Ejemplo n.º 22
0
 def get_context_data(self, **kwargs):
     # Needed for Django 1.9 because get_context_data is no longer called
     # with the form instance
     if 'form' not in kwargs:
         kwargs['form'] = self.get_form()
     kwargs['edit_form'] = kwargs['form']
     kwargs['editor'] = editors.getEditor()
     kwargs['selected_tab'] = 'edit'
     kwargs['sidebar'] = self.sidebar
     # try:  # TODO: remove
     #     kwargs['metadata'] = Supersense.objects.get(article = self.article)
     # except:
     #     pass
     return super(Edit, self).get_context_data(**kwargs)
Ejemplo n.º 23
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
Ejemplo n.º 24
0
 def get_context_data(self, **kwargs):
     kwargs = super(RevisionAddView, self).get_context_data(**kwargs)
     kwargs['template'] = self.template
     kwargs['editor'] = editors.getEditor()
     kwargs['selected_tab'] = 'template'
     return kwargs
Ejemplo n.º 25
0
 def get_context_data(self, **kwargs):
     kwargs['selected_tab'] = 'template'
     kwargs['editor'] = editors.getEditor()
     return super(TemplateCreateView, self).get_context_data(**kwargs)
Ejemplo n.º 26
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:
            initial = {
                'content': current_revision.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
                    newdata['content'] = simple_merge(
                        self.initial_revision.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
        """
        cd = super().clean()
        if self.no_clean or self.preview:
            return cd
        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 cd) and cd['title'] == self.initial_revision.title and cd[
                    'content'] == self.initial_revision.content:
            raise forms.ValidationError(
                gettext('No changes made. Nothing to save.'))
        self.check_spam()
        return cd
Ejemplo n.º 27
0
 def get_context_data(self, **kwargs):
     kwargs['parent_urlpath'] = self.urlpath
     kwargs['parent_article'] = self.article
     kwargs['create_form'] = kwargs.pop('form', None)
     kwargs['editor'] = editors.getEditor()
     return super(Create, self).get_context_data(**kwargs)
Ejemplo n.º 28
0
 def get_context_data(self, **kwargs):
     data = super(CreateRootView, self).get_context_data(**kwargs)
     data['editor'] = editors.getEditor()
     return data
Ejemplo n.º 29
0
 def get_context_data(self, **kwargs):
     data = super(CreateRootView, self).get_context_data(**kwargs)
     data["editor"] = editors.getEditor()
     return data
Ejemplo n.º 30
0
 def get_context_data(self, **kwargs):
     kwargs = super().get_context_data(**kwargs)
     kwargs['editor'] = editors.getEditor()
     return kwargs
Ejemplo n.º 31
0
 def get_context_data(self, **kwargs):
     kwargs["edit_form"] = kwargs.pop("form", None)
     kwargs["editor"] = editors.getEditor()
     kwargs["selected_tab"] = "edit"
     kwargs["sidebar"] = self.sidebar
     return super(Edit, self).get_context_data(**kwargs)
Ejemplo n.º 32
0
 def get_context_data(self, **kwargs):
     kwargs['parent_urlpath'] = self.urlpath
     kwargs['parent_article'] = self.article
     kwargs['create_form'] = kwargs.pop('form', None)
     kwargs['editor'] = editors.getEditor()
     return super(Create, self).get_context_data(**kwargs)
Ejemplo n.º 33
0
 def get_context_data(self, **kwargs):
     kwargs['edit_form'] = kwargs.pop('form', None)
     kwargs['editor'] = editors.getEditor()
     kwargs['selected_tab'] = 'edit'
     kwargs['sidebar'] = self.sidebar
     return super(Edit, self).get_context_data(**kwargs)
Ejemplo n.º 34
0
class BotUpdateForm(forms.ModelForm):
    """
    Standard form for updating a bot
    """
    wiki_article_content = forms.CharField(label='Bot page content', required=False, widget=getEditor().get_widget())

    def __init__(self, *args, **kwargs, ):
        super().__init__(*args, **kwargs)

        # change the available fields based upon whether the bot_data is available for editing or not
        # and whether there's a current season
        if self.instance.bot_data_is_currently_frozen():
            self.fields['bot_data'].disabled = True

        try:
            Season.get_current_season()
            # in season
        except NoCurrentSeason:
            # outside season - don't allow activation
            self.fields['active'].disabled = True
            self.fields['active'].required = False


    class Meta:
        model = Bot
        fields = ['active', 'bot_zip', 'bot_zip_publicly_downloadable', 'bot_data',
                  'bot_data_publicly_downloadable', 'bot_data_enabled']
Ejemplo n.º 35
0
class EditForm(forms.Form):

    title = forms.CharField(label=_(u'Title'), )
    content = forms.CharField(
        label=_(u'Contents'), required=False,
        widget=getEditor().get_widget())  #@UndefinedVariable

    summary = forms.CharField(
        label=_(u'Summary'),
        help_text=
        _(u'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, current_revision, *args, **kwargs):

        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:
            initial = {
                'content': current_revision.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]
            if not data:
                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
                    newdata['content'] = simple_merge(
                        self.initial_revision.content, data.get('content', ""))
                    newdata['title'] = current_revision.title
                    kwargs['data'] = newdata

            kwargs['initial'] = initial

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

    def clean(self):
        cd = self.cleaned_data
        if self.no_clean or self.preview:
            return cd
        if not str(self.initial_revision.id) == str(self.presumed_revision):
            raise forms.ValidationError(
                _(u'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 cd['title'] == self.initial_revision.title and cd[
                'content'] == self.initial_revision.content:
            raise forms.ValidationError(
                _(u'No changes made. Nothing to save.'))
        return cd