changeset 2833:2f3cba7b6d16 beta

Add quick toggle link for locking for users with write or admin permissions
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 12 Sep 2012 17:15:25 +0200
parents b711b3377372
children 925c77b9d3f1
files rhodecode/config/routing.py rhodecode/controllers/settings.py rhodecode/public/css/style.css rhodecode/templates/base/base.html
diffstat 4 files changed, 66 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/config/routing.py	Wed Sep 12 16:37:10 2012 +0200
+++ b/rhodecode/config/routing.py	Wed Sep 12 17:15:25 2012 +0200
@@ -141,6 +141,7 @@
         m.connect('repo_locking', "/repo_locking/{repo_name:.*?}",
                   action="repo_locking", conditions=dict(method=["PUT"],
                                                       function=check_repo))
+
     with rmap.submapper(path_prefix=ADMIN_PREFIX,
                         controller='admin/repos_groups') as m:
         m.connect("repos_groups", "/repos_groups",
@@ -561,6 +562,10 @@
                 controller='settings', action='index',
                 conditions=dict(function=check_repo))
 
+    rmap.connect('toggle_locking', "/{repo_name:.*?}/locking_toggle",
+                 controller='settings', action="toggle_locking",
+                 conditions=dict(method=["GET"], function=check_repo))
+
     rmap.connect('repo_fork_create_home', '/{repo_name:.*?}/fork',
                 controller='forks', action='fork_create',
                 conditions=dict(function=check_repo, method=["POST"]))
--- a/rhodecode/controllers/settings.py	Wed Sep 12 16:37:10 2012 +0200
+++ b/rhodecode/controllers/settings.py	Wed Sep 12 17:15:25 2012 +0200
@@ -35,13 +35,14 @@
 
 import rhodecode.lib.helpers as h
 
-from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAllDecorator
+from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAllDecorator,\
+    HasRepoPermissionAnyDecorator
 from rhodecode.lib.base import BaseRepoController, render
 from rhodecode.lib.utils import invalidate_cache, action_logger
 
 from rhodecode.model.forms import RepoSettingsForm
 from rhodecode.model.repo import RepoModel
-from rhodecode.model.db import RepoGroup
+from rhodecode.model.db import RepoGroup, Repository
 from rhodecode.model.meta import Session
 from rhodecode.model.scm import ScmModel
 
@@ -109,7 +110,7 @@
             changed_name = form_result['repo_name_full']
             action_logger(self.rhodecode_user, 'user_updated_repo',
                           changed_name, self.ip_addr, self.sa)
-            Session.commit()
+            Session().commit()
         except formencode.Invalid, errors:
             c.repo_info = repo_model.get_by_repo_name(repo_name)
             c.users_array = repo_model.get_users_js()
@@ -153,10 +154,38 @@
             repo_model.delete(repo)
             invalidate_cache('get_repo_cached_%s' % repo_name)
             h.flash(_('deleted repository %s') % repo_name, category='success')
-            Session.commit()
+            Session().commit()
         except Exception:
             log.error(traceback.format_exc())
             h.flash(_('An error occurred during deletion of %s') % repo_name,
                     category='error')
 
         return redirect(url('home'))
+
+    @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
+    def toggle_locking(self, repo_name):
+        """
+        Toggle locking of repository by simple GET call to url
+
+        :param repo_name:
+        """
+
+        try:
+            repo = Repository.get_by_repo_name(repo_name)
+
+            if repo.enable_locking:
+                if repo.locked[0]:
+                    Repository.unlock(repo)
+                    action = _('unlocked')
+                else:
+                    Repository.lock(repo, c.rhodecode_user.user_id)
+                    action = _('locked')
+
+                h.flash(_('Repository has been %s') % action,
+                        category='success')
+        except Exception, e:
+            log.error(traceback.format_exc())
+            h.flash(_('An error occurred during unlocking'),
+                    category='error')
+        return redirect(url('summary_home', repo_name=repo_name))
+
--- a/rhodecode/public/css/style.css	Wed Sep 12 16:37:10 2012 +0200
+++ b/rhodecode/public/css/style.css	Wed Sep 12 17:15:25 2012 +0200
@@ -658,6 +658,24 @@
 	padding: 12px 9px 7px 24px;
 }
 
+#header #header-inner #quick li ul li a.locking_add,#header #header-inner #quick li ul li a.locking_add:hover
+    {
+    background: #FFF url("../images/icons/lock_add.png") no-repeat 4px
+        9px;
+    width: 167px;
+    margin: 0;
+    padding: 12px 9px 7px 24px;
+}
+
+#header #header-inner #quick li ul li a.locking_del,#header #header-inner #quick li ul li a.locking_del:hover
+    {
+    background: #FFF url("../images/icons/lock_delete.png") no-repeat 4px
+        9px;
+    width: 167px;
+    margin: 0;
+    padding: 12px 9px 7px 24px;
+}
+
 #header #header-inner #quick li ul li a.pull_request,#header #header-inner #quick li ul li a.pull_request:hover
     {
     background: #FFF url("../images/icons/arrow_join.png") no-repeat 4px
--- a/rhodecode/templates/base/base.html	Wed Sep 12 16:37:10 2012 +0200
+++ b/rhodecode/templates/base/base.html	Wed Sep 12 17:15:25 2012 +0200
@@ -206,12 +206,21 @@
                          <li>${h.link_to(_('settings'),h.url('repo_settings_home',repo_name=c.repo_name),class_='settings')}</li>
                      %endif
                    %endif
+
                    	<li>${h.link_to(_('fork'),h.url('repo_fork_home',repo_name=c.repo_name),class_='fork')}</li>
                     %if h.is_hg(c.rhodecode_repo):
                      <li>${h.link_to(_('Open new pull request'),h.url('pullrequest_home',repo_name=c.repo_name),class_='pull_request')}</li>
                     %endif
                    	<li>${h.link_to(_('search'),h.url('search_repo',search_repo=c.repo_name),class_='search')}</li>
 
+                    %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.rhodecode_db_repo.enable_locking:
+                      %if c.rhodecode_db_repo.locked[0]:
+                        <li>${h.link_to(_('unlock'), h.url('toggle_locking',repo_name=c.repo_name),class_='locking_del')}</li>
+                      %else:
+                        <li>${h.link_to(_('lock'), h.url('toggle_locking',repo_name=c.repo_name),class_='locking_add')}</li>
+                      %endif
+                    %endif
+
                     % if h.HasPermissionAll('hg.admin')('access admin main page'):
                      <li>
                        ${h.link_to(_('admin'),h.url('admin_home'),class_='admin')}
@@ -227,7 +236,7 @@
                             <li class="last">${h.link_to(_('settings'),h.url('admin_settings'),class_='settings')}</li>
                         </ul>
                         </%def>
-
+                        ## ADMIN MENU
                         ${admin_menu()}
                      </li>
                     % endif