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'])
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)
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))