[extensions-web] Allow approve extensions



commit 38d284795a594d129182bef5248b92e12eebeb8a
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Mon Sep 26 16:46:40 2011 -0400

    Allow approve extensions

 .../review/templates/review/review_reviewer.html   |   14 ++++++++++
 sweettooth/review/urls.py                          |    3 ++
 sweettooth/review/views.py                         |   28 +++++++++++++------
 sweettooth/static/css/review.css                   |   18 ++++++++++---
 4 files changed, 50 insertions(+), 13 deletions(-)
---
diff --git a/sweettooth/review/templates/review/review_reviewer.html b/sweettooth/review/templates/review/review_reviewer.html
index 25291bf..5c37db2 100644
--- a/sweettooth/review/templates/review/review_reviewer.html
+++ b/sweettooth/review/templates/review/review_reviewer.html
@@ -1,6 +1,8 @@
 {% extends "review/review.html" %}
 
 {% block extra %}
+{{ block.super }}
+
 <h2 class="expanded"> Review </h2>
 <div id="review">
   <form id="review_form" action="{% url review-submit pk=version.pk %}" method="POST">
@@ -9,4 +11,16 @@
     <input type="submit" value="Add review">
   </form>
 </div>
+
+{% if can_approve %}
+<div id="approve">
+  <hr>
+  <form id="approve_form" action="{% url review-approve pk=version.pk %}" method="POST">
+    {% csrf_token %}
+    <input name="newstatus" type="submit" class="approve" value="Approve">
+    <input name="newstatus" type="submit" class="reject" value="Reject">
+  </form>
+</div>
+{% endif %}
+
 {% endblock %}
diff --git a/sweettooth/review/urls.py b/sweettooth/review/urls.py
index 301291b..6f8e37d 100644
--- a/sweettooth/review/urls.py
+++ b/sweettooth/review/urls.py
@@ -8,5 +8,8 @@ urlpatterns = patterns('',
     url(r'^$', views.ReviewListView.as_view(), name='review-list'),
     url(r'^ajax/get-files/(?P<pk>\d+)', views.AjaxGetFilesView.as_view(), name='review-ajax-files'),
     url(r'^submit/(?P<pk>\d+)', views.SubmitReviewView.as_view(), name='review-submit'),
+    url(r'^approve/(?P<pk>\d+)', views.ChangeStatusView.as_view(), name='review-approve'),
+
     url(r'^(?P<pk>\d+)', views.ReviewVersionView.as_view(), name='review-version'),
+
 )
diff --git a/sweettooth/review/views.py b/sweettooth/review/views.py
index 8430a09..ef98073 100644
--- a/sweettooth/review/views.py
+++ b/sweettooth/review/views.py
@@ -32,6 +32,12 @@ def can_review_extension(user, extension):
 
     return False
 
+def can_approve_extension(user, extension):
+    if user.has_perm("review.can-review-extensions"):
+        return user != extension.creator
+
+    return False
+
 class AjaxGetFilesView(SingleObjectMixin, View):
     model = models.ExtensionVersion
     formatter = pygments.formatters.HtmlFormatter(style="borland", cssclass="code")
@@ -67,7 +73,7 @@ class AjaxGetFilesView(SingleObjectMixin, View):
         return HttpResponse(mark_safe(json.dumps(files)),
                             content_type="application/json")
 
-class AjaxChangeStatusView(SingleObjectMixin, View):
+class ChangeStatusView(SingleObjectMixin, View):
     model = models.ExtensionVersion
 
     def get(self, request, *args, **kwargs):
@@ -76,23 +82,24 @@ class AjaxChangeStatusView(SingleObjectMixin, View):
     def post(self, request, *args, **kwargs):
         self.object = self.get_object()
 
-        if not can_review_extension(request.user, self.object.extension):
-            return HttpResponseForbidden()
-
-        # Do not let reviewers change the status of their own extension
-        if request.user == self.object.extension:
+        if not can_approve_extension(request.user, self.object.extension):
             return HttpResponseForbidden()
 
-        newstatus = request.POST.get('newstatus')
+        newstatus_string = request.POST.get('newstatus')
+        newstatus = dict(Approve=models.STATUS_ACTIVE,
+                         Reject=models.STATUS_REJECTED)[newstatus_string]
 
         log = ChangeStatusLog(user=request.user,
                               version=self.object,
                               newstatus=newstatus)
         log.save()
 
+        self.object.status = newstatus
+        self.object.save()
+
         models.status_changed.send(sender=self, version=self.object, log=log)
 
-        self.object.status = newstatus
+        return redirect('review-list')
 
 class SubmitReviewView(SingleObjectMixin, View):
     model = models.ExtensionVersion
@@ -129,8 +136,11 @@ class ReviewVersionView(DetailView):
         # Other reviews on the same version
         previous_reviews = self.object.reviews.all()
 
+        can_approve = can_approve_extension(self.request.user, self.object.extension)
+
         context.update(dict(previous_versions=previous_versions,
-                            previous_reviews=previous_reviews))
+                            previous_reviews=previous_reviews,
+                            can_approve=can_approve))
         return context
 
     @property
diff --git a/sweettooth/static/css/review.css b/sweettooth/static/css/review.css
index 6bb9229..000fb9b 100644
--- a/sweettooth/static/css/review.css
+++ b/sweettooth/static/css/review.css
@@ -75,6 +75,7 @@ h2 {
     padding-left: 0.5em;
     margin-bottom: 0;
     margin-top: 10px;
+    clear: both;
 }
 
 h2:hover {
@@ -121,6 +122,7 @@ h2.expanded:before {
 
 #review_form input[type=submit] {
     float: right;
+    margin-bottom: 20px;
 }
 
 #previous_versions table {
@@ -136,12 +138,20 @@ h2.expanded:before {
     font-size: larger;
 }
 
-.rejected {
-    color: #c00;
+.rejected, .reject {
+    color: #c00 !important;
     font-weight: bold;
 }
 
-.active {
-    color: #0a0;
+.active, .approve {
+    color: #0a0 !important;
     font-weight: bold;
 }
+
+#approve {
+    clear: right;
+}
+
+#approve_form {
+    float: right;
+}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]