Skip to content
This repository was archived by the owner on Dec 11, 2018. It is now read-only.

Commit d2851bb

Browse files
committed
Allow filtering review queue
Let reviewers filter the review queue to show their unreviewed proposals, globally unreviewed proposals or all proposals. Also allow them to restrict to a certain theme. This change also introduces i18n keys that can be used to give themes pretty names.
1 parent b41e27c commit d2851bb

File tree

6 files changed

+70
-7
lines changed

6 files changed

+70
-7
lines changed

data/i18n/en.json

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,5 +179,19 @@
179179
"report-aggregated-recommend": "Recommend",
180180
"report-format-recommend": "$3% ($1/$2)",
181181

182-
"reviews-notes": "Reviewer notes"
182+
"reviews-notes": "Reviewer notes",
183+
184+
"theme-online": "Online community organizing",
185+
"theme-offline": "Offline outreach & partnerships",
186+
"theme-tool": "Tools",
187+
"theme-research": "Research",
188+
189+
"proposals-queue-type": "Type",
190+
"proposals-queue-type-empty": "Select queue",
191+
"proposals-queue-type-myqueue": "My unreviewed",
192+
"proposals-queue-type-unreviewed": "Globally unreviewed",
193+
"proposals-queue-type-all": "All",
194+
"proposals-queue-theme": "Theme",
195+
"proposals-queue-theme-empty": "Select theme",
196+
"proposals-queue-go": "Filter queue"
183197
}

data/i18n/qqq.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,4 +134,18 @@
134134
"proposals-list-myreviews": "Table column header",
135135

136136
"reviews-notes": "Section header"
137+
138+
"theme-online": "Theme long name",
139+
"theme-offline": "Theme long name",
140+
"theme-tool": "Theme long name",
141+
"theme-research": "Theme long name",
142+
143+
"proposals-queue-type": "Input label, followed by select list.",
144+
"proposals-queue-type-empty": "Select list usage prompt.",
145+
"proposals-queue-type-myqueue": "Select list label",
146+
"proposals-queue-type-unreviewed": "Select list label",
147+
"proposals-queue-type-all": "Select list label",
148+
"proposals-queue-theme": "Input label, followed by select list.",
149+
"proposals-queue-theme-empty": "Select list usage prompt.",
150+
"proposals-queue-go": "Form submit button label"
137151
}

data/templates/proposals/queue.html

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,37 @@
2222
<li>{{ 'nav-proposals-queue'|message }}</li>
2323
</ol>
2424

25+
<form class="form-inline" method="get" action="{{ urlFor( route ) }}" role="form">
26+
<input type="hidden" name="p" value="0">
27+
<input type="hidden" name="o" value="{{ o }}">
28+
<input type="hidden" name="s" value="{{ s }}">
29+
<div class="form-group">
30+
<label class="sr-only" for="type">{{ 'proposals-queue-type'|message }}</label>
31+
<select id="type" name="type" class="form-control">
32+
<option value="">{{ 'proposals-queue-type-empty'|message }}</option>
33+
{% for val in [ 'myqueue', 'unreviewed', 'all' ] %}
34+
<option value="{{ val }}" {{ val == type ? 'selected="selected"' }}>{{ "proposals-queue-type-#{val}"|message }}</option>
35+
{% endfor %}
36+
</select>
37+
</div>
38+
<div class="form-group">
39+
<label class="sr-only" for="th">{{ 'proposals-queue-theme'|message }}</label>
40+
<select id="th" name="th" class="form-control">
41+
<option value="">{{ 'proposals-queue-theme-empty'|message }}</option>
42+
{% for val in [ 'online', 'offline', 'tool', 'research' ] %}
43+
<option value="{{ val }}" {{ val == th ? 'selected="selected"' }}>{{ "theme-#{val}"|message }}</option>
44+
{% endfor %}
45+
</select>
46+
</div>
47+
<div class="form-group">
48+
<button type="submit" class="btn btn-sm btn-primary">
49+
<i class="glyphicon glyphicon-filter"></i>
50+
{{ 'proposals-queue-go'|message }}
51+
</button>
52+
</div>
53+
</form>
54+
55+
<p></p>
2556
<table class="table table-striped table-hover table-condensed table-responsive">
2657
<tr>
2758
{{ _self.sortHeader( 'title', ctx ) }}

data/templates/proposals/search.html

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,8 @@
3131
<label class="sr-only" for="th">{{ 'proposals-search-theme'|message }}</label>
3232
<select id="th" name="th" class="form-control">
3333
<option value="">{{ 'proposals-search-theme-empty'|message }}</option>
34-
{{ forms.select( ctx, 'proposals-edit-theme', 'theme', { 'online':'online', 'offline':'offline', 'tool':'tool', 'research':'research' }, { 'required':true } ) }}
3534
{% for val in [ 'online', 'offline', 'tool', 'research' ] %}
36-
<option value="{{ val }}" {{ val == th ? 'selected="selected"' }}>{{ val }}</option>
35+
<option value="{{ val }}" {{ val == th ? 'selected="selected"' }}>{{ "theme-#{val}"|message }}</option>
3736
{% endfor %}
3837
</select>
3938
</div>

src/Controllers/Proposals/Queue.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,24 +34,29 @@
3434
class Queue extends Controller {
3535

3636
protected function handleGet() {
37+
$this->form->expectString( 'type', array( 'default' => 'myqueue' ) );
38+
$this->form->expectString( 'th' );
3739
$this->form->expectInt( 'items',
3840
array( 'min_range' => 1, 'max_range' => 250, 'default' => 20 )
3941
);
4042
$this->form->expectInt( 'p', array( 'min_range' => 0, 'default' => 0 ) );
41-
$this->form->expectString( 's', array( 'default' => 'id' ) );
43+
$this->form->expectString( 's', array( 'default' => 'theme' ) );
4244
$this->form->expectInArray( 'o', array( 'asc', 'desc' ),
4345
array( 'default' => 'asc' )
4446
);
4547
$this->form->validate( $_GET );
4648

49+
$this->view->set( 'type', $this->form->get( 'type' ) );
50+
$this->view->set( 'theme', $this->form->get( 'th' ) );
4751
$this->view->set( 'items', $this->form->get( 'items' ) );
4852
$this->view->set( 'p', $this->form->get( 'p' ) );
4953
$this->view->set( 's', $this->form->get( 's' ) );
5054
$this->view->set( 'o', $this->form->get( 'o' ) );
5155
$this->view->set( 'found', null );
5256

5357
$params = array(
54-
'proposals' => 'myqueue',
58+
'type' => $this->form->get( 'type' ),
59+
'theme' => $this->form->get( 'th' ),
5560
'items' => $this->form->get( 'items' ),
5661
'page' => $this->form->get( 'p' ),
5762
'sort' => $this->form->get( 's' ),

src/Dao/Proposals.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public function updateProposal( $id, $data ) {
106106
*/
107107
public function search( array $params ) {
108108
$defaults = array(
109-
'proposals' => null,
109+
'type' => null,
110110
'title' => null,
111111
'theme' => null,
112112
'sort' => 'id',
@@ -158,7 +158,7 @@ public function search( array $params ) {
158158
'COALESCE(mc.myreviews, 0) as myreviews',
159159
);
160160

161-
switch( $params['proposals'] ) {
161+
switch( $params['type'] ) {
162162
case 'unreviewed':
163163
$where[] = 'reviews IS NULL';
164164
break;

0 commit comments

Comments
 (0)