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:24 UTC
[32/50] git commit: [#5656] ticket:301 Bulk move tickets
[#5656] ticket:301 Bulk move tickets
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/ffb9e7f6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/ffb9e7f6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/ffb9e7f6
Branch: refs/heads/cj/5913
Commit: ffb9e7f685be99e9935e5315fc6fb02456b77f78
Parents: a087f64
Author: Igor Bondarenko <je...@gmail.com>
Authored: Wed May 1 08:48:35 2013 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Fri May 24 18:35:51 2013 +0000
----------------------------------------------------------------------
.../forgetracker/tests/functional/test_root.py | 11 +++-
ForgeTracker/forgetracker/tracker_main.py | 35 ++++++++++++++-
2 files changed, 42 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ffb9e7f6/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 7015cd4..2a0e3e9 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -2236,10 +2236,15 @@ class TestBulkMove(TrackerTestController):
def test_access_restriction(self):
self.app.get('/bugs/move/', status=200)
- self.app.get('/bugs/move/', extra_environ={'username': 'test-user-0'},
+ self.app.get('/bugs/move/',
+ extra_environ={'username': 'test-user-0'},
status=403)
- self.app.get('/bugs/move/', extra_environ={'username': '*anonymous'},
+ self.app.get('/bugs/move/',
+ extra_environ={'username': '*anonymous'},
status=302)
+ self.app.post('/bugs/move_tickets',
+ extra_environ={'username': 'test-user-0'},
+ status=403)
def test_ticket_list(self):
r = self.app.get('/bugs/move/?q=The')
@@ -2285,7 +2290,7 @@ class TestBulkMove(TrackerTestController):
assert_equal(ticket.discussion_thread.app_config_id, ac_id)
assert_equal(ticket.discussion_thread.discussion.app_config_id, ac_id)
post = ticket.discussion_thread.last_post
- assert_equal(post.text, 'Ticket moved from /p/test/bugs/1/')
+ assert_in('Ticket moved from /p/test/bugs/', post.text)
for t in original_tickets:
assert_equal(t.discussion_thread.app_config_id, original_ac_id)
assert_equal(t.discussion_thread.discussion.app_config_id, original_ac_id)
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/ffb9e7f6/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index b2cc363..e5cf057 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -795,11 +795,44 @@ class RootController(BaseController, FeedController):
result['cancel_href'] = url(c.app.url + 'search/', dict(q=q, limit=limit, sort=sort))
c.mass_move = W.mass_edit
trackers = _my_trackers(c.user, c.app.config)
- c.mass_move_form = W.mass_move_form(trackers=trackers)
+ c.mass_move_form = W.mass_move_form(
+ trackers=trackers,
+ action=c.app.url + 'move_tickets')
return result
@expose()
@require_post()
+ def move_tickets(self, **post_data):
+ require_access(c.app, 'admin')
+ ticket_ids = aslist(post_data.get('__ticket_ids', []))
+ search = post_data.get('__search', '')
+ try:
+ destination_tracker_id = ObjectId(post_data.get('tracker', ''))
+ except InvalidId:
+ destination_tracker_id = None
+ tracker = M.AppConfig.query.get(_id=destination_tracker_id)
+ if tracker is None:
+ flash('Select valid tracker', 'error')
+ redirect('move/' + search)
+ if tracker == c.app.config:
+ flash('Ticket already in a selected tracker', 'info')
+ redirect('move/' + search)
+ if not has_access(tracker, 'admin')():
+ flash('You should have admin access to destination tracker', 'error')
+ redirect('move/' + search)
+ tickets = TM.Ticket.query.find(dict(
+ _id={'$in': [ObjectId(id) for id in ticket_ids]},
+ app_config_id=c.app.config._id)).all()
+ for ticket in tickets:
+ ticket.move(tracker)
+ c.app.globals.invalidate_bin_counts()
+ ThreadLocalORMSession.flush_all()
+ count = len(tickets)
+ flash('Moved {} ticket{}'.format(count, 's' if count != 1 else ''), 'ok')
+ redirect('move/' + search)
+
+ @expose()
+ @require_post()
def update_tickets(self, **post_data):
tickets = TM.Ticket.query.find(dict(
_id={'$in':[ObjectId(id) for id in aslist(post_data['__ticket_ids'])]},