Example #1
0
def article_list(request,
                 group_slug=None, bridge=None,
                 article_qs=ALL_ARTICLES,
                 ArticleClass=Article,
                 SearchFormClass=SearchForm,
                 template_name='index.html',
                 template_dir='wiki',
                 extra_context=None,
                 is_member=None,
                 is_private=None,
                 *args, **kw):
    if request.method == 'GET':
        group, bridge = group_and_bridge(request)
        articles, group = get_articles_by_group(article_qs, group, bridge)

        allow_read = has_read_perm(request.user, group, is_member, is_private)
        allow_write = has_write_perm(request.user, group, is_member)

        if not allow_read:
            return HttpResponseForbidden()

        articles = articles.order_by('-created_at')

        search_form = SearchFormClass()

        template_params = {'articles': articles,
                           'search_form': search_form,
                           'allow_write': allow_write,
                           'group': group}

        if group:
            new_article = ArticleClass(title="NewArticle",
                                       content_type=get_ct(group),
                                       object_id=group.id)
        else:
            new_article = ArticleClass(title="NewArticle")
        template_params['new_article'] = new_article
        if extra_context is not None:
            template_params.update(extra_context)

        return render_to_response(os.path.join(template_dir, template_name),
                                  template_params,
                                  context_instance=RequestContext(request))
    return HttpResponseNotAllowed(['GET'])
Example #2
0
def get_articles_for_object(object, article_qs=None):
    if article_qs is None:
        article_qs = ALL_ARTICLES
    return article_qs.filter(content_type=get_ct(object),
                                       object_id=object.id)
Example #3
0
def edit_article(request, title,
                 group_slug=None, bridge=None,
                 article_qs=ALL_ARTICLES,
                 ArticleClass=Article,  # to get the DoesNotExist exception
                 ArticleFormClass=ArticleForm,
                 template_name='edit.html',
                 template_dir='wiki',
                 extra_context=None,
                 check_membership=False,
                 is_member=None,
                 is_private=None,
                 *args, **kw):
    group, bridge = group_and_bridge(request)
    allow_read = has_read_perm(request.user, group, is_member, is_private)
    allow_write = has_write_perm(request.user, group, is_member)

    try:
        article = article_qs.get_by(title, group)
        allow_read = request.user.has_perm('wiki.view_article', article)
        allow_write = request.user.has_perm('wiki.change_article', article)
    except ArticleClass.DoesNotExist:
        article = None

    if not allow_write:
        return HttpResponseForbidden()

    if request.method == 'POST':

        form = ArticleFormClass(request.POST, instance=article)

        if form.is_valid():

            if request.user.is_authenticated():
                form.editor = request.user
                if article is None:
                    user_message = "Your article was created successfully."
                else:
                    user_message = "Your article was edited successfully."
                request.user.message_set.create(message=user_message)

            if ((article is None) and group):
                form.group = group

            new_article = form.save()
            ArticleEditLock.unlock(title)

            url = get_url('wiki_article', group, kw={
                'title': new_article.title,
            }, bridge=bridge)

            return HttpResponseRedirect(url)

    elif request.method == 'GET':
        user_ip = get_real_ip(request)

        lock = ArticleEditLock.get(title, request)
        lock.create_message(request)

        initial = {'user_ip': user_ip}
        if group:
            # @@@ wikiapp currently handles the group filtering, but we will
            # eventually want to handle that via the bridge.
            initial.update({'content_type': get_ct(group).id,
                            'object_id': group.id})

        if article is None:
            initial.update({'title': title,
                            'action': 'create'})
            form = ArticleFormClass(initial=initial)
        else:
            initial['action'] = 'edit'
            form = ArticleFormClass(instance=article,
                                    initial=initial)

    template_params = {'form': form}

    template_params['group'] = group
    if extra_context is not None:
        template_params.update(extra_context)

    return render_to_response(os.path.join(template_dir, template_name),
                              template_params,
                              context_instance=RequestContext(request))