summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@infradead.org>2019-06-04 18:31:39 -0300
committerStephen Finucane <stephen@that.guru>2019-06-05 11:25:51 +0100
commite99490cf28e8104f42746d71f11618f4e6f427e1 (patch)
treef9ae2c0950c125d1a9f8a969bb6c30d1118f3813
parent1d563f750fefb62ebc121dc238c858a766e21a7a (diff)
downloadpatchwork-e99490cf28e8104f42746d71f11618f4e6f427e1.tar
patchwork-e99490cf28e8104f42746d71f11618f4e6f427e1.tar.gz
filters: re-add the possibility of filtering undelegated patches
The filters.py redesign that happened for patchwork 1.1 removed a functionality that we use a lot: to filter patches that weren't delegated to anyone. Also, it is a way harder to find someone to delegate with a free text input. Use, instead a combo-box just like before. Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com> Signed-off-by: Stephen Finucane <stephen@that.guru> Fixes: f439f541 ("Add delegate filter autocomplete support") Closes: #60 [stephenfin: Rework release note and fix some style issues]
-rw-r--r--patchwork/filters.py36
-rw-r--r--patchwork/templates/patchwork/partials/filters.html38
-rw-r--r--releasenotes/notes/issue-60-9d4fc111242f7db6.yaml8
3 files changed, 42 insertions, 40 deletions
diff --git a/patchwork/filters.py b/patchwork/filters.py
index 79aaea4..e2d2f59 100644
--- a/patchwork/filters.py
+++ b/patchwork/filters.py
@@ -385,6 +385,7 @@ class ArchiveFilter(Filter):
class DelegateFilter(Filter):
name = 'Delegate'
param = 'delegate'
+ no_delegate_str = 'Nobody'
ANY_DELEGATE = object()
def __init__(self, filters):
@@ -416,6 +417,11 @@ class DelegateFilter(Filter):
if not key:
return
+ if key == self.no_delegate_str:
+ self.delegate_match = key
+ self.applied = True
+ return
+
try:
self.delegate = User.objects.get(id=int(key))
except (ValueError, User.DoesNotExist):
@@ -436,6 +442,9 @@ class DelegateFilter(Filter):
if self.delegate:
return {'delegate': self.delegate}
+ if self.delegate_match == self.no_delegate_str:
+ return {'delegate__username__isnull': True}
+
if self.delegate_match:
return {'delegate__username__icontains': self.delegate_match}
@@ -447,8 +456,31 @@ class DelegateFilter(Filter):
return mark_safe('<input type="hidden" value="%s">%s' % (
self.param, self.condition))
- return mark_safe('<input type="text" name="delegate" '
- 'id="delegate_input" class="form-control">')
+ delegates = User.objects.filter(
+ profile__maintainer_projects__isnull=False)
+
+ out = '<select name="delegate" class="form-control">'
+
+ selected = ''
+ if not self.applied:
+ selected = 'selected'
+ out += '<option %s value="">------</option>' % selected
+
+ selected = ''
+ if self.applied and self.delegate is None:
+ selected = 'selected'
+ out += '<option %s value="%s">%s</option>' % (
+ selected, self.no_delegate_str, self.no_delegate_str)
+
+ for delegate in delegates:
+ selected = ''
+ if delegate == self.delegate:
+ selected = ' selected'
+
+ out += '<option %s value="%s">%s</option>' % (
+ selected, delegate.id, delegate.username)
+ out += '</select>'
+ return mark_safe(out)
def set_status(self, *args, **kwargs):
if 'delegate' in kwargs:
diff --git a/patchwork/templates/patchwork/partials/filters.html b/patchwork/templates/patchwork/partials/filters.html
index 41ed2c2..e89c4d0 100644
--- a/patchwork/templates/patchwork/partials/filters.html
+++ b/patchwork/templates/patchwork/partials/filters.html
@@ -76,44 +76,6 @@ $(document).ready(function() {
});
}
});
-
- $('#delegate_input').selectize({
- plugins: ['enter_key_submit'],
- maxItems: 1,
- persist: false,
- onInitialize: function() {
- this.on('submit', function() {
- if (!this.items.length)
- this.$input.val(this.lastValue);
- this.$input.closest('form').submit();
- }, this);
- },
-{% if "delegate" in filters.applied_filters %}
-{% with delegate_filter=filters.applied_filters.delegate %}
- options: [
- {
- value: "{{ delegate_filter.key }}",
- text: "{{ delegate_filter.condition }}",
- },
- ],
- items: ["{{ delegate_filter.key }}"],
-{% endwith %}
-{% endif %}
- load: function(query, callback) {
- req = $.ajax({
- url: "{% url 'api-delegates' %}",
- data: {q: query, l: 10},
- error: function() {
- callback();
- },
- success: function(res) {
- callback($.map(res, function (obj) {
- return {value: obj.pk, text: obj.name};
- }));
- }
- });
- }
- });
});
</script>
diff --git a/releasenotes/notes/issue-60-9d4fc111242f7db6.yaml b/releasenotes/notes/issue-60-9d4fc111242f7db6.yaml
new file mode 100644
index 0000000..7988659
--- /dev/null
+++ b/releasenotes/notes/issue-60-9d4fc111242f7db6.yaml
@@ -0,0 +1,8 @@
+---
+fixes:
+ - |
+ In the past, Patchwork used to support filtering patches that weren't
+ delegated to anyone. This feature was removed in v1.1.0, as part of a patch
+ designed to support delegation to anyone. However, that feature didn't scale
+ and was later removed. The ability to delegate to anyone is now itself
+ re-introduced.