[extensions-web] review: Add a new WAITING state



commit 45162b8d6f1b10ff6e0b85e4220ecde42a6785b8
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Mon Aug 6 15:28:00 2012 -0300

    review: Add a new WAITING state
    
    The WAITING state is used to put an extension in limbo, and will
    automatically reset to UNREVIEWED when the author comments.

 sweettooth/extensions/models.py                |    3 ++-
 sweettooth/review/templates/review/review.html |    1 +
 sweettooth/review/views.py                     |   23 ++++++++++++++---------
 3 files changed, 17 insertions(+), 10 deletions(-)
---
diff --git a/sweettooth/extensions/models.py b/sweettooth/extensions/models.py
index 5c44778..f5c4d68 100644
--- a/sweettooth/extensions/models.py
+++ b/sweettooth/extensions/models.py
@@ -17,7 +17,7 @@ from sorl import thumbnail
 
 (STATUS_NEW, STATUS_UNREVIEWED,
  STATUS_REJECTED, STATUS_INACTIVE,
- STATUS_ACTIVE) = xrange(5)
+ STATUS_ACTIVE, STATUS_WAITING) = xrange(6)
 
 STATUSES = {
     STATUS_NEW: u"New",
@@ -25,6 +25,7 @@ STATUSES = {
     STATUS_REJECTED: u"Rejected",
     STATUS_INACTIVE: u"Inactive",
     STATUS_ACTIVE: u"Active",
+    STATUS_WAITING: u"Waiting for author",
 }
 
 APPROVED_STATUSES = (STATUS_INACTIVE, STATUS_ACTIVE)
diff --git a/sweettooth/review/templates/review/review.html b/sweettooth/review/templates/review/review.html
index 938d4be..f42d948 100644
--- a/sweettooth/review/templates/review/review.html
+++ b/sweettooth/review/templates/review/review.html
@@ -122,6 +122,7 @@
       <option value="approve" class="approve">Approve</option>
 {% endif %}
       <option value="reject" class="reject">Reject</option>
+      <option value="wait" class="waiting">Needs reply from author</option>
     </select>
     <input type="submit" value="Submit">
   </form>
diff --git a/sweettooth/review/views.py b/sweettooth/review/views.py
index 67b684f..3c6ebc4 100644
--- a/sweettooth/review/views.py
+++ b/sweettooth/review/views.py
@@ -227,7 +227,10 @@ def download_zipfile(request, pk):
 def submit_review_view(request, obj):
     extension, version = obj.extension, obj
 
-    if not can_review_extension(request.user, extension):
+    can_approve = can_approve_extension(request.user, extension)
+    can_review = can_review_extension(request.user, extension)
+
+    if not can_review:
         return HttpResponseForbidden()
 
     review = CodeReview(version=version,
@@ -238,21 +241,23 @@ def submit_review_view(request, obj):
 
     status_string = request.POST.get('status')
     newstatus = dict(approve=models.STATUS_ACTIVE,
+                     wait=models.STATUS_WAITING,
                      reject=models.STATUS_REJECTED).get(status_string, None)
 
+    # If a normal user didn't change the status and it was in WAITING,
+    # change it back to UNREVIEWED
+    if not can_approve and obj.status == models.STATUS_WAITING:
+        newstatus = models.STATUS_UNREVIEWED
+
     if newstatus is not None:
-        if newstatus == models.STATUS_ACTIVE and not can_approve_extension(request.user, extension):
+        if newstatus == models.STATUS_ACTIVE and not can_approve:
             return HttpResponseForbidden()
 
-        log = ChangeStatusLog.objects.create(user=request.user,
-                                             version=obj,
-                                             newstatus=newstatus)
-
+        review.changelog = ChangeStatusLog.objects.create(user=request.user,
+                                                          version=obj,
+                                                          newstatus=newstatus)
         obj.status = newstatus
         obj.save()
-
-        review.changelog = log
-
         models.status_changed.send(sender=request, version=obj, log=log)
 
     review.save()



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