]> git.openstreetmap.org Git - osqa.git/blobdiff - forum/views/commands.py
Adds the hability to create custom css. Fixes a small issue with admin area forms.
[osqa.git] / forum / views / commands.py
index 1b3afc5ef3a3f8e0c014c34fe146697a9763e175..ed6c03ffbe923b62886c5e4190baf732bf1cbeca 100644 (file)
@@ -179,7 +179,7 @@ def delete_comment(request, id):
     if not user.can_delete_comment(comment):
         raise NotEnoughRepPointsException( _('delete comments'))
 
-    if not comment.deleted:
+    if not comment.nis.deleted:
         DeleteAction(node=comment, user=user, ip=request.META['REMOTE_ADDR']).save()
 
     return {
@@ -288,13 +288,14 @@ def accept_answer(request, id):
 
     commands = {}
 
-    if answer.accepted:
-        answer.accepted.cancel(user, ip=request.META['REMOTE_ADDR'])
+    if answer.nis.accepted:
+        answer.nstate.accepted.cancel(user, ip=request.META['REMOTE_ADDR'])
         commands['unmark_accepted'] = [answer.id]
     else:
-        if question.answer_accepted:
-            accepted = question.accepted_answer
-            accepted.accepted.cancel(user, ip=request.META['REMOTE_ADDR'])
+        accepted = question.accepted_answer
+
+        if accepted:
+            accepted.nstate.accepted.cancel(user, ip=request.META['REMOTE_ADDR'])
             commands['unmark_accepted'] = [accepted.id]
 
         AcceptAnswerAction(node=answer, user=user, ip=request.META['REMOTE_ADDR']).save()
@@ -315,8 +316,8 @@ def delete_post(request, id):
 
     ret = {'commands': {}}
 
-    if post.deleted:
-        post.deleted.cancel(user, ip=request.META['REMOTE_ADDR'])
+    if post.nis.deleted:
+        post.nstate.deleted.cancel(user, ip=request.META['REMOTE_ADDR'])
         ret['commands']['unmark_deleted'] = [post.node_type, id]
     else:
         DeleteAction(node=post, user=user, ip=request.META['REMOTE_ADDR']).save()
@@ -336,11 +337,11 @@ def close(request, id, close):
     if not user.is_authenticated():
         raise AnonymousNotAllowedException(_('close questions'))
 
-    if question.extra_action:
+    if question.nis.closed:
         if not user.can_reopen_question(question):
             raise NotEnoughRepPointsException(_('reopen questions'))
 
-        question.extra_action.cancel(user, ip=request.META['REMOTE_ADDR'])
+        question.nstate.closed.cancel(user, ip=request.META['REMOTE_ADDR'])
     else:
         if not request.user.can_close_question(question):
             raise NotEnoughRepPointsException(_('close questions'))
@@ -360,7 +361,31 @@ def close(request, id, close):
 
 @command
 def wikify(request, id):
-    pass
+    node = get_object_or_404(Node, id=id)
+    user = request.user
+
+    if not user.is_authenticated():
+        raise AnonymousNotAllowedException(_('mark posts as community wiki'))
+
+    if node.nis.wiki:
+        if not user.can_cancel_wiki(node):
+            raise NotEnoughRepPointsException(_('cancel a community wiki post'))
+
+        if node.nstate.wiki.action_type == "wikify":
+            node.nstate.wiki.cancel()
+        else:
+            node.nstate.wiki = None
+    else:
+        if not user.can_wikify(node):
+            raise NotEnoughRepPointsException(_('mark posts as community wiki'))
+
+        WikifyAction(node=node, user=user, ip=request.META['REMOTE_ADDR']).save()
+
+    return {
+        'commands': {
+            'refresh_page': []
+        }
+    }
 
 @command
 def convert_to_comment(request, id):
@@ -371,7 +396,7 @@ def convert_to_comment(request, id):
     if not request.POST:
         description = lambda a: _("Answer by %(uname)s: %(snippet)s...") % {'uname': a.author.username, 'snippet': a.summary[:10]}
         nodes = [(question.id, _("Question"))]
-        [nodes.append((a.id, description(a))) for a in question.answers.filter(deleted=None).exclude(id=answer.id)]
+        [nodes.append((a.id, description(a))) for a in question.answers.filter_state(deleted=False).exclude(id=answer.id)]
 
         return render_to_response('node/convert_to_comment.html', {'answer': answer, 'nodes': nodes})
 
@@ -442,7 +467,7 @@ def matching_tags(request):
     if len(request.GET['q']) == 0:
        raise CommandException(_("Invalid request"))
 
-    possible_tags = Tag.objects.filter(name__istartswith = request.GET['q'])
+    possible_tags = Tag.active.filter(name__istartswith = request.GET['q'])
     tag_output = ''
     for tag in possible_tags:
         tag_output += (tag.name + "|" + tag.name + "." + tag.used_count.__str__() + "\n")
@@ -453,7 +478,7 @@ def related_questions(request):
     if request.POST and request.POST.get('title', None):
         return HttpResponse(simplejson.dumps(
                 [dict(title=q.title, url=q.get_absolute_url(), score=q.score, summary=q.summary)
-                 for q in Question.objects.search(request.POST['title'])[0:10]]), mimetype="application/json")
+                 for q in Question.objects.search(request.POST['title']).filter_state(deleted=False)[0:10]]), mimetype="application/json")
     else:
         raise Http404()