You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2012/12/19 00:12:15 UTC
[3/4] git commit: [#4790] ticket:234 add option to show/hide default
fields on search
[#4790] ticket:234 add option to show/hide default fields on search
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/750e966f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/750e966f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/750e966f
Branch: refs/heads/master
Commit: 750e966f478cda94130c98e2dfea8e26e8463b2c
Parents: ad9554e
Author: Yuriy Arhipov <yu...@yandex.ru>
Authored: Mon Dec 17 07:46:06 2012 +0400
Committer: Dave Brondsema <db...@geek.net>
Committed: Tue Dec 18 23:11:27 2012 +0000
----------------------------------------------------------------------
ForgeTracker/forgetracker/model/ticket.py | 8 ++
.../templates/tracker/admin_fields.html | 17 +++
.../tracker_widgets/ticket_search_results.html | 7 +
.../forgetracker/tests/functional/test_root.py | 36 +++++-
ForgeTracker/forgetracker/tracker_main.py | 94 +++++++++++++--
5 files changed, 149 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/750e966f/ForgeTracker/forgetracker/model/ticket.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/model/ticket.py b/ForgeTracker/forgetracker/model/ticket.py
index cd23784..a86a44a 100644
--- a/ForgeTracker/forgetracker/model/ticket.py
+++ b/ForgeTracker/forgetracker/model/ticket.py
@@ -56,6 +56,14 @@ class Globals(MappedClass):
_bin_counts_expire = FieldProperty(datetime)
_milestone_counts = FieldProperty([dict(name=str,hits=int,closed=int)])
_milestone_counts_expire = FieldProperty(datetime)
+ show_in_search = FieldProperty({str: bool}, if_missing={'ticket_num': True,
+ 'summary': True,
+ '_milestone': True,
+ 'status': True,
+ 'assigned_to': True,
+ 'reported_by': True,
+ 'created_date': True,
+ 'mod_date': True})
@classmethod
def next_ticket_num(cls):
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/750e966f/ForgeTracker/forgetracker/templates/tracker/admin_fields.html
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/templates/tracker/admin_fields.html b/ForgeTracker/forgetracker/templates/tracker/admin_fields.html
index a3ab1e6..7336c08 100644
--- a/ForgeTracker/forgetracker/templates/tracker/admin_fields.html
+++ b/ForgeTracker/forgetracker/templates/tracker/admin_fields.html
@@ -10,6 +10,23 @@
{% block content %}
{{c.form.display(value=globals, action='set_custom_fields')}}
+<h1>Default fields</h1>
+<form name="show_fields_in_search" method="POST" action="allow_default_field">
+ <table>
+ <thead>
+ <tr>
+ <th>Filed name</th>
+ <th>Show in search</th>
+ </tr>
+ </thead>
+ {%for column in columns.keys()%}
+ <tr>
+ <td>{{columns[column]}}</td> <td><input type="checkbox" name="{{column}}" {%if globals.show_in_search[column]%}checked {%endif%}></td>
+ </tr>
+ {%endfor%}
+ <tr><td><input type="submit" value="Save"></td><td></td></tr>
+ </table>
+</form>
{% endblock %}
{% block extra_css %}
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/750e966f/ForgeTracker/forgetracker/templates/tracker_widgets/ticket_search_results.html
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/templates/tracker_widgets/ticket_search_results.html b/ForgeTracker/forgetracker/templates/tracker_widgets/ticket_search_results.html
index 3420108..1d88558 100644
--- a/ForgeTracker/forgetracker/templates/tracker_widgets/ticket_search_results.html
+++ b/ForgeTracker/forgetracker/templates/tracker_widgets/ticket_search_results.html
@@ -1,3 +1,4 @@
+{% from 'allura:templates/jinja_master/lib.html' import abbr_date with context %}
<div id="ticket_search_results_holder" style="clear:both">
{% if solr_error %}<p>{{solr_error}}</p>{% endif %}
{{widget.fields['page_size'].display(page=page, count=count, limit=limit)}}
@@ -31,6 +32,12 @@
<td class="{{t.open_or_closed}}">{{t.status}}</td>
{% elif col['name'] == 'assigned_to' %}
<td>{% if t.assigned_to_id %}{{t.assigned_to.display_name}}{% endif %}</td>
+ {% elif col['name'] == 'reported_by' %}
+ <td>{% if t.reported_by %}{{t.reported_by.display_name}}{% endif %}</td>
+ {% elif col['name'] == 'created_date' %}
+ <td>{% if t.created_date %}{{abbr_date(t.created_date)}}{% endif %}</td>
+ {% elif col['name'] == 'mod_date' %}
+ <td>{% if t.mod_date %}{{abbr_date(t.mod_date)}}{% endif %}</td>
{% elif col['name'] == 'votes' %}
<td>{{ t.votes }}</td>
{% else %}
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/750e966f/ForgeTracker/forgetracker/tests/functional/test_root.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/test_root.py b/ForgeTracker/forgetracker/tests/functional/test_root.py
index 72d91fe..defa5c4 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -1281,8 +1281,8 @@ class TestCustomUserField(TrackerTestController):
kw = {'custom_fields._code_review': 'test-admin'}
self.new_ticket(summary='test custom fields', **kw)
r = self.app.get('/bugs/')
- assert r.html.find('table', 'ticket-list').findAll('th')[5].text == 'Code Review'
- assert r.html.find('table', 'ticket-list').tbody.tr.findAll('td')[5].text == 'Test Admin'
+ assert r.html.find('table', 'ticket-list').findAll('th')[8].text == 'Code Review'
+ assert r.html.find('table', 'ticket-list').tbody.tr.findAll('td')[8].text == 'Test Admin'
class TestHelpTextOptions(TrackerTestController):
def _set_options(self, new_txt='', search_txt=''):
@@ -1315,6 +1315,38 @@ class TestHelpTextOptions(TrackerTestController):
r = self.app.get('/bugs/new/')
assert len(r.html.findAll(attrs=dict(id='new-ticket-help-msg'))) == 0
+class test_show_default_fields(TrackerTestController):
+ def test_show_default_fields(self):
+ r = self.app.get('/admin/bugs/fields')
+ assert '<td>Ticket Number</td> <td><input type="checkbox" name="ticket_num" checked ></td>' in r
+ assert '<td>Summary</td> <td><input type="checkbox" name="summary" checked ></td>' in r
+ assert '<td>Milestone</td> <td><input type="checkbox" name="_milestone" checked ></td>' in r
+ assert '<td>Status</td> <td><input type="checkbox" name="status" checked ></td>' in r
+ assert '<td>Owner</td> <td><input type="checkbox" name="assigned_to" checked ></td>' in r
+ assert '<td>Creator</td> <td><input type="checkbox" name="reported_by" checked ></td>' in r
+ assert '<td>Created</td> <td><input type="checkbox" name="created_date" checked ></td>' in r
+ assert '<td>Updated</td> <td><input type="checkbox" name="mod_date" checked ></td>' in r
+ self.new_ticket(summary='test')
+ M.MonQTask.run_ready()
+ r = self.app.get('/bugs/search', params=dict(q='test'))
+ assert '<td><a href="/p/test/bugs/1/">1</a></td>' in r
+ p = M.Project.query.get(shortname='test')
+ app = p.app_instance('bugs')
+ app.globals.show_in_search['ticket_num'] = False
+ r = self.app.get('/bugs/search', params=dict(q='test'))
+ assert '<td><a href="/p/test/bugs/1/">1</a></td>' not in r
+ self.app.post('/admin/bugs/allow_default_field', params={'status': 'on'})
+ r = self.app.get('/admin/bugs/fields')
+ assert '<td>Ticket Number</td> <td><input type="checkbox" name="ticket_num" ></td>' in r
+ assert '<td>Summary</td> <td><input type="checkbox" name="summary" ></td>' in r
+ assert '<td>Milestone</td> <td><input type="checkbox" name="_milestone" ></td>' in r
+ assert '<td>Status</td> <td><input type="checkbox" name="status" checked ></td>' in r
+ assert '<td>Owner</td> <td><input type="checkbox" name="assigned_to" ></td>' in r
+ assert '<td>Creator</td> <td><input type="checkbox" name="reported_by" ></td>' in r
+ assert '<td>Created</td> <td><input type="checkbox" name="created_date" ></td>' in r
+ assert '<td>Updated</td> <td><input type="checkbox" name="mod_date" ></td>' in r
+
+
def sidebar_contains(response, text):
sidebar_menu = response.html.find('div', attrs={'id': 'sidebar'})
return text in str(sidebar_menu)
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/750e966f/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index 83c2a0b..bad0ba5 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -79,6 +79,12 @@ def _mongo_col_to_solr_col(name):
return 'assigned_to_s'
elif name == 'custom_fields._milestone':
return '_milestone_s'
+ elif name == 'reported_by':
+ return 'reported_by_s'
+ elif name == 'created_date':
+ return 'created_date_dt'
+ elif name == 'mod_date':
+ return 'mod_date_dt'
else:
for field in c.app.globals.sortable_custom_fields_shown_in_search():
if name == field['name']:
@@ -329,11 +335,38 @@ class ForgeTrackerApp(Application):
### Controllers ###
def mongo_columns():
- columns = [dict(name='ticket_num', sort_name='ticket_num', label='Ticket Number', active=True),
- dict(name='summary', sort_name='summary', label='Summary', active=True),
- dict(name='_milestone', sort_name='custom_fields._milestone', label='Milestone', active=True),
- dict(name='status', sort_name='status', label='Status', active=True),
- dict(name='assigned_to', sort_name='assigned_to_username', label='Owner', active=True)]
+ columns = [dict(name='ticket_num',
+ sort_name='ticket_num',
+ label='Ticket Number',
+ active=c.app.globals.show_in_search['ticket_num']),
+ dict(name='summary',
+ sort_name='summary',
+ label='Summary',
+ active=c.app.globals.show_in_search['summary']),
+ dict(name='_milestone',
+ sort_name='custom_fields._milestone',
+ label='Milestone',
+ active=c.app.globals.show_in_search['_milestone']),
+ dict(name='status',
+ sort_name='status',
+ label='Status',
+ active=c.app.globals.show_in_search['status']),
+ dict(name='assigned_to',
+ sort_name='assigned_to_username',
+ label='Owner',
+ active=c.app.globals.show_in_search['assigned_to']),
+ dict(name='reported_by',
+ sort_name='reported_by',
+ label='Creator',
+ active=c.app.globals.show_in_search['reported_by']),
+ dict(name='created_date',
+ sort_name='created_date',
+ label='Created',
+ active=c.app.globals.show_in_search['created_date']),
+ dict(name='mod_date',
+ sort_name='mod_date',
+ label='Updated',
+ active=c.app.globals.show_in_search['mod_date'])]
for field in c.app.globals.sortable_custom_fields_shown_in_search():
columns.append(
dict(name=field['name'], sort_name=field['name'], label=field['label'], active=True))
@@ -342,11 +375,38 @@ def mongo_columns():
return columns
def solr_columns():
- columns = [dict(name='ticket_num', sort_name='ticket_num_i', label='Ticket Number', active=True),
- dict(name='summary', sort_name='snippet_s', label='Summary', active=True),
- dict(name='_milestone', sort_name='_milestone_s', label='Milestone', active=True),
- dict(name='status', sort_name='status_s', label='Status', active=True),
- dict(name='assigned_to', sort_name='assigned_to_s', label='Owner', active=True)]
+ columns = [dict(name='ticket_num',
+ sort_name='ticket_num_i',
+ label='Ticket Number',
+ active=c.app.globals.show_in_search['ticket_num']),
+ dict(name='summary',
+ sort_name='snippet_s',
+ label='Summary',
+ active=c.app.globals.show_in_search['summary']),
+ dict(name='_milestone',
+ sort_name='_milestone_s',
+ label='Milestone',
+ active=c.app.globals.show_in_search['_milestone']),
+ dict(name='status',
+ sort_name='status_s',
+ label='Status',
+ active=c.app.globals.show_in_search['status']),
+ dict(name='assigned_to',
+ sort_name='assigned_to_s',
+ label='Owner',
+ active=c.app.globals.show_in_search['assigned_to']),
+ dict(name='reported_by',
+ sort_name='reported_by_s',
+ label='Creator',
+ active=c.app.globals.show_in_search['reported_by']),
+ dict(name='created_date',
+ sort_name='created_date_dt',
+ label='Created',
+ active=c.app.globals.show_in_search['created_date']),
+ dict(name='mod_date',
+ sort_name='mod_date_dt',
+ label='Updated',
+ active=c.app.globals.show_in_search['mod_date'])]
for field in c.app.globals.sortable_custom_fields_shown_in_search():
columns.append(dict(name=field['name'], sort_name=field['sortable_name'], label=field['label'], active=True))
if c.app.config.options.get('EnableVoting'):
@@ -1222,7 +1282,9 @@ class TrackerAdminController(DefaultAdminController):
@expose('jinja:forgetracker:templates/tracker/admin_fields.html')
def fields(self, **kw):
c.form = W.field_admin
- return dict(app=self.app, globals=self.app.globals)
+ c.app = self.app
+ columns = dict((column, get_label(column)) for column in self.app.globals['show_in_search'].keys())
+ return dict(app=self.app, globals=self.app.globals, columns=columns)
@expose('jinja:forgetracker:templates/tracker/admin_options.html')
def options(self, **kw):
@@ -1246,6 +1308,16 @@ class TrackerAdminController(DefaultAdminController):
redirect(c.project.url() + 'admin/tools')
@expose()
+ @require_post()
+ def allow_default_field(self, **post_data):
+ for column in self.app.globals['show_in_search'].keys():
+ if post_data.has_key(column) and post_data[column] == 'on':
+ self.app.globals['show_in_search'][column] = True
+ else:
+ self.app.globals['show_in_search'][column] = False
+ redirect(request.referer)
+
+ @expose()
def update_tickets(self, **post_data):
pass