[extensions-web] Allow approve extensions
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [extensions-web] Allow approve extensions
- Date: Tue, 27 Sep 2011 03:38:53 +0000 (UTC)
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]