You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by jo...@apache.org on 2013/05/28 18:01:19 UTC

[27/50] git commit: [#5656] ticket:301 Skeleton for bulk move UI

[#5656] ticket:301 Skeleton for bulk move UI


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/c0797acc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/c0797acc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/c0797acc

Branch: refs/heads/cj/5913
Commit: c0797acc6d69a2a6cf55530f7e150721f94f4525
Parents: e375efb
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Apr 30 13:28:14 2013 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Fri May 24 18:35:50 2013 +0000

----------------------------------------------------------------------
 .../forgetracker/templates/tracker/index.html      |    3 +
 .../forgetracker/templates/tracker/mass_move.html  |   38 +++++++++++++++
 .../forgetracker/templates/tracker/milestone.html  |    3 +
 .../forgetracker/templates/tracker/search.html     |    5 ++-
 ForgeTracker/forgetracker/tracker_main.py          |   23 ++++++++-
 ForgeTracker/forgetracker/widgets/ticket_search.py |    9 ++++
 6 files changed, 79 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c0797acc/ForgeTracker/forgetracker/templates/tracker/index.html
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/templates/tracker/index.html b/ForgeTracker/forgetracker/templates/tracker/index.html
index 1d1145c..7b3ad36 100644
--- a/ForgeTracker/forgetracker/templates/tracker/index.html
+++ b/ForgeTracker/forgetracker/templates/tracker/index.html
@@ -36,6 +36,9 @@
   {% if allow_edit %}
     <a href="{{tg.url(c.app.url+'edit/', dict(q=url_q, limit=limit, sort=url_sort, page=page))}}" title="Bulk Edit"><b data-icon="{{g.icons['pencil'].char}}" class="ico {{g.icons['pencil'].css}}"></b></a>
   {% endif %}
+  {% if allow_move %}
+    <a href="{{tg.url(c.app.url + 'move/', dict(q=url_q, limit=limit, sort=url_sort, page=page))}}" title="Bulk Move"><b data-icon="" class=""></b>Bulk Move</a>
+  {% endif %}
 {% endblock %}
 
 {% block content %}

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c0797acc/ForgeTracker/forgetracker/templates/tracker/mass_move.html
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/templates/tracker/mass_move.html b/ForgeTracker/forgetracker/templates/tracker/mass_move.html
new file mode 100644
index 0000000..1953801
--- /dev/null
+++ b/ForgeTracker/forgetracker/templates/tracker/mass_move.html
@@ -0,0 +1,38 @@
+{#-
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+-#}
+{% extends 'forgetracker:templates/tracker/mass_edit.html' %}
+
+{% block actions %}
+<a href="{{tg.url(c.app.url+'move/', dict(q=q, limit=limit, sort=sort, page=page))}}" title="Bulk Move" class="active"><b data-icon="" class=""></b>Bulk Move</a>
+{% endblock %}
+
+{% block edit_box %}
+<div class="editbox">
+  {{c.mass_move_form.display()}}
+</div>
+{% endblock %}
+
+{% block content %}
+  {{c.mass_move.display(count=count,
+    limit=limit,
+    query=q,
+    tickets=tickets,
+    sort=sort,
+    page=page)}}
+{% endblock %}

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c0797acc/ForgeTracker/forgetracker/templates/tracker/milestone.html
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/templates/tracker/milestone.html b/ForgeTracker/forgetracker/templates/tracker/milestone.html
index 4c1e61c..7c1cd00 100644
--- a/ForgeTracker/forgetracker/templates/tracker/milestone.html
+++ b/ForgeTracker/forgetracker/templates/tracker/milestone.html
@@ -28,6 +28,9 @@
 {% if allow_edit %}
   <a href="{{tg.url(c.app.url+'edit/', dict(q=q, limit=limit, sort=url_sort, page=page))}}" title="Bulk Edit"><b data-icon="{{g.icons['pencil'].char}}" class="ico {{g.icons['pencil'].css}}"></b></a>
 {% endif %}
+{% if allow_move %}
+  <a href="{{tg.url(c.app.url + 'move/', dict(q=q, limit=limit, sort=url_sort, page=page))}}" title="Bulk Move"><b data-icon="" class=""></b>Bulk Move</a>
+{% endif %}
 {% endblock %}
 
 {% block edit_box %}

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c0797acc/ForgeTracker/forgetracker/templates/tracker/search.html
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/templates/tracker/search.html b/ForgeTracker/forgetracker/templates/tracker/search.html
index 48516f8..dda451d 100644
--- a/ForgeTracker/forgetracker/templates/tracker/search.html
+++ b/ForgeTracker/forgetracker/templates/tracker/search.html
@@ -33,6 +33,9 @@
 {% if allow_edit and count != 0 %}
   <a href="{{tg.url(c.app.url+'edit/', dict(q=q, limit=limit, sort=sort, page=page))}}" title="Bulk Edit"><b data-icon="{{g.icons['pencil'].char}}" class="ico {{g.icons['pencil'].css}}"></b></a>
 {% endif %}
+{% if allow_move and count != 0 %}
+  <a href="{{tg.url(c.app.url + 'move/', dict(q=q, limit=limit, sort=sort, page=page))}}" title="Bulk Move"><b data-icon="" class=""></b>Bulk Move</a>
+{% endif %}
 {% endblock %}
 
 {% if q and h.has_access(c.app, 'save_searches')() %}
@@ -67,7 +70,7 @@
   <input type="text" name="q" value="{{q}}" style="width: 280px; float: left; margin-right: .5em" id="bin_terms">
   {% if bin and h.has_access(c.app, 'save_searches')() %}
     <input type="button" value="Update Search" id="save_search"/>
-  {% endif %}  
+  {% endif %}
   <input type="submit" value="Search"/>
 </form>
 <a href="#" class="btn search_help_modal"><b data-icon="{{g.icons['help'].char}}" class="ico {{g.icons['help'].css}}"></b> Help</a>

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c0797acc/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index 17f3b6b..b1bd941 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -71,7 +71,7 @@ from forgetracker import version
 from forgetracker.widgets.admin import OptionsAdmin
 from forgetracker.widgets.ticket_form import TicketForm, TicketCustomField
 from forgetracker.widgets.bin_form import BinForm
-from forgetracker.widgets.ticket_search import TicketSearchResults, MassEdit, MassEditForm, SearchHelp
+from forgetracker.widgets.ticket_search import TicketSearchResults, MassEdit, MassEditForm, MassMoveForm, SearchHelp
 from forgetracker.widgets.admin_custom_fields import TrackerFieldAdmin, TrackerFieldDisplay
 from forgetracker.import_support import ImportSupport
 from forgetracker.plugins import ImportIdConverter
@@ -163,6 +163,7 @@ class W:
     search_help_modal = SearchHelp()
     vote_form = w.VoteForm()
     move_ticket_form = w.forms.MoveTicketForm
+    mass_move_form = MassMoveForm
 
 class ForgeTrackerApp(Application):
     __version__ = version.__version__
@@ -547,6 +548,7 @@ class RootController(BaseController, FeedController):
         result['sortable_custom_fields'] = c.app.globals.sortable_custom_fields_shown_in_search()
         result['subscribed'] = M.Mailbox.subscribed()
         result['allow_edit'] = has_access(c.app, 'update')()
+        result['allow_move'] = has_access(c.app, 'admin')()
         result['help_msg'] = c.app.config.options.get('TicketHelpSearch','').strip()
         result['url_q'] = c.app.globals.not_closed_query
         result['url_sort'] = ''
@@ -650,6 +652,7 @@ class RootController(BaseController, FeedController):
         result['columns'] = columns or solr_columns()
         result['sortable_custom_fields'] = c.app.globals.sortable_custom_fields_shown_in_search()
         result['allow_edit'] = has_access(c.app, 'update')()
+        result['allow_move'] = has_access(c.app, 'admin')()
         result['bin'] = bin
         result['help_msg'] = c.app.config.options.get('TicketHelpSearch', '').strip()
         result['deleted'] = deleted
@@ -758,6 +761,23 @@ class RootController(BaseController, FeedController):
         c.mass_edit_form = W.mass_edit_form
         return result
 
+    @with_trailing_slash
+    @expose('jinja:forgetracker:templates/tracker/mass_move.html')
+    @validate(dict(q=validators.UnicodeString(if_empty=None),
+                   limit=validators.Int(if_empty=10),
+                   page=validators.Int(if_empty=0),
+                   sort=validators.UnicodeString(if_empty='ticket_num_i asc')))
+    def move(self, q=None, limit=None, page=None, sort=None, **kw):
+        require_access(c.app, 'admin')
+        result = TM.Ticket.paged_search(c.app.config, c.user, q, sort=sort, limit=limit, page=page, show_deleted=False, **kw)
+        result['columns'] = solr_columns()
+        result['sortable_custom_fields'] = c.app.globals.sortable_custom_fields_shown_in_search()
+        result['globals'] = c.app.globals
+        result['cancel_href'] = url(c.app.url + 'search/', dict(q=q, limit=limit, sort=sort))
+        c.mass_move = W.mass_edit
+        c.mass_move_form = W.mass_move_form(tracker=[])
+        return result
+
     @expose()
     @require_post()
     def update_tickets(self, **post_data):
@@ -1768,6 +1788,7 @@ class MilestoneController(BaseController):
         result['columns'] = columns or mongo_columns()
         result['sortable_custom_fields'] = c.app.globals.sortable_custom_fields_shown_in_search()
         result['allow_edit'] = has_access(c.app, 'update')()
+        result['allow_move'] = has_access(c.app, 'admin')()
         result['help_msg'] = c.app.config.options.get('TicketHelpSearch','').strip()
         result['deleted'] = deleted
         progress = c.app.globals.milestone_count(self.progress_key)

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c0797acc/ForgeTracker/forgetracker/widgets/ticket_search.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/widgets/ticket_search.py b/ForgeTracker/forgetracker/widgets/ticket_search.py
index 38a91a7..fdc257a 100644
--- a/ForgeTracker/forgetracker/widgets/ticket_search.py
+++ b/ForgeTracker/forgetracker/widgets/ticket_search.py
@@ -23,6 +23,7 @@ import ew as ew_core
 import ew.jinja2_ew as ew
 
 from allura.lib.widgets import form_fields as ffw
+from allura.lib.widgets import forms
 
 class TicketSearchResults(ew_core.SimpleForm):
     template='jinja:forgetracker:templates/tracker_widgets/ticket_search_results.html'
@@ -84,6 +85,14 @@ class MassEditForm(ew_core.Widget):
     def resources(self):
         yield ew.JSLink('tracker_js/mass-edit.js')
 
+class MassMoveForm(forms.MoveTicketForm):
+    defaults=dict(
+        forms.MoveTicketForm.defaults,
+        action='.')
+
+    def resources(self):
+        yield ew.JSLink('tracker_js/mass-edit.js')
+
 class SearchHelp(ffw.Lightbox):
     defaults=dict(
         ffw.Lightbox.defaults,