changeset 2127:b745d5d2563c beta

implemented #377 Users view own permissions - my account page uses YUI DT by default now
author Marcin Kuzminski <marcin@python-works.com>
date Tue, 13 Mar 2012 06:36:53 +0200
parents de72388c713d
children e29c688e6885
files docs/changelog.rst rhodecode/public/css/style.css rhodecode/public/js/rhodecode.js rhodecode/templates/admin/users/user_edit_my_account.html rhodecode/templates/journal/journal.html
diffstat 5 files changed, 196 insertions(+), 36 deletions(-) [+]
line wrap: on
line diff
--- a/docs/changelog.rst	Tue Mar 13 04:24:45 2012 +0200
+++ b/docs/changelog.rst	Tue Mar 13 06:36:53 2012 +0200
@@ -19,6 +19,7 @@
 - added help text into repo add/edit forms
 - created rcextensions module with additional mappings (ref #322) and
   post push/pull/create repo hooks callbacks
+- implemented #377 Users view for his own permissions on account page
 
 fixes
 +++++
--- a/rhodecode/public/css/style.css	Tue Mar 13 04:24:45 2012 +0200
+++ b/rhodecode/public/css/style.css	Tue Mar 13 06:36:53 2012 +0200
@@ -4155,6 +4155,47 @@
     padding:5px 0px 5px 38px;
 }
 
+/****
+  PERMS
+*****/
+#perms .perms_section_head {
+   padding:10px 10px 10px 0px;
+   font-size:16px;
+   font-weight: bold;
+}
+
+#perms .perm_tag{
+  padding: 1px 3px 1px 3px;
+  font-size: 10px;
+  font-weight: bold;
+  text-transform: uppercase;
+  white-space: nowrap;
+  -webkit-border-radius: 3px;
+  -moz-border-radius: 3px;
+  border-radius: 3px;
+}
+
+#perms .perm_tag.admin{
+  background-color: #B94A48;
+  color: #ffffff;
+}
+
+#perms .perm_tag.write{
+  background-color: #B94A48;
+  color: #ffffff;    
+}
+
+#perms .perm_tag.read{
+  background-color: #468847;
+  color: #ffffff;    
+}
+
+#perms .perm_tag.none{
+  background-color: #bfbfbf;
+  color: #ffffff;    
+}
+
+
 
 /*****************************************************************************
                                   DIFFS CSS
--- a/rhodecode/public/js/rhodecode.js	Tue Mar 13 04:24:45 2012 +0200
+++ b/rhodecode/public/js/rhodecode.js	Tue Mar 13 06:36:53 2012 +0200
@@ -700,6 +700,18 @@
     return compState;
 };
 
+var permNameSort = function(a, b, desc, field) {
+    var a_ = fromHTML(a.getData(field));
+    var b_ = fromHTML(b.getData(field));
+    // extract name from table
+    a_ = a_.innerHTML;
+    b_ = b_.innerHTML;      
+    
+    var comp = YAHOO.util.Sort.compare;
+    var compState = comp(a_, b_, desc);
+    return compState;
+};
+
 var groupNameSort = function(a, b, desc, field) {
     var a_ = fromHTML(a.getData(field));
     var b_ = fromHTML(b.getData(field));
--- a/rhodecode/templates/admin/users/user_edit_my_account.html	Tue Mar 13 04:24:45 2012 +0200
+++ b/rhodecode/templates/admin/users/user_edit_my_account.html	Tue Mar 13 06:36:53 2012 +0200
@@ -113,52 +113,45 @@
     <div class="title">
         <h5>
         <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" value="${_('quick filter...')}"/>
-        ${_('My repositories')}
+        <a id="show_my" class="link-white" href="#my">${_('My repos')}</a> / <a id="show_perms" class="link-white" href="#perms">${_('My permissions')}</a>
         </h5>
          %if h.HasPermissionAny('hg.admin','hg.create.repository')():
          <ul class="links">
            <li>
-             <span>${h.link_to(_('ADD REPOSITORY'),h.url('admin_settings_create_repository'))}</span>
+             <span>${h.link_to(_('ADD'),h.url('admin_settings_create_repository'))}</span>
            </li>
          </ul>
          %endif
     </div>
     <!-- end box / title -->
-    <div class="table">
-	    <table>
+    <div id="my" class="table">
+        <div id='repos_list_wrap' class="yui-skin-sam">
+        <table id="repos_list">
 	    <thead>
             <tr>
+            <th></th>
             <th class="left">${_('Name')}</th>
-            <th class="left">${_('revision')}</th>
-            <th colspan="2" class="left">${_('action')}</th>
+            <th class="left">${_('Revision')}</th>
+            <th class="left">${_('Action')}</th>
+            <th class="left">${_('Action')}</th>
 	    </thead>
 	     <tbody>
+         <%namespace name="dt" file="/_data_table/_dt_elements.html"/>
 	     %if c.user_repos:
-		     %for repo in c.user_repos:
+		     %for repo in c.user_repos:     
 		        <tr>
-		            <td>
-                     %if h.is_hg(repo['dbrepo']['repo_type']):
-                       <img class="icon" title="${_('Mercurial repository')}" alt="${_('Mercurial repository')}" src="${h.url('/images/icons/hgicon.png')}"/>
-                     %elif h.is_git(repo['dbrepo']['repo_type']):
-                       <img class="icon" title="${_('Git repository')}" alt="${_('Git repository')}" src="${h.url('/images/icons/giticon.png')}"/>
-                     %else:
-
-                     %endif
-		             %if repo['dbrepo']['private']:
-		                <img class="icon" alt="${_('private')}" src="${h.url('/images/icons/lock.png')}"/>
-		             %else:
-		                <img class="icon" alt="${_('public')}" src="${h.url('/images/icons/lock_open.png')}"/>
-		             %endif
-
-		            ${h.link_to(repo['name'], h.url('summary_home',repo_name=repo['name']),class_="repo_name")}
-		            %if repo['dbrepo_fork']:
-		            	<a href="${h.url('summary_home',repo_name=repo['dbrepo_fork']['repo_name'])}">
-		            	<img class="icon" alt="${_('public')}"
-		            	title="${_('Fork of')} ${repo['dbrepo_fork']['repo_name']}"
-		            	src="${h.url('/images/icons/arrow_divide.png')}"/></a>
-		            %endif
-		            </td>
-		            <td><span class="tooltip" title="${repo['last_change']}">${("r%s:%s") % (repo['rev'],h.short_id(repo['tip']))}</span></td>
+                    ##QUICK MENU
+                    <td class="quick_repo_menu">
+                      ${dt.quick_menu(repo['name'])}
+                    </td>                
+                    ##REPO NAME AND ICONS
+                    <td class="reponame">
+                      ${dt.repo_name(repo['name'],repo['dbrepo']['repo_type'],repo['dbrepo']['private'],repo['dbrepo_fork'].get('repo_name'))}
+                    </td>
+                    ##LAST REVISION
+                    <td>
+                        ${dt.revision(repo['name'],repo['rev'],repo['tip'],repo['author'],repo['last_msg'])}
+                    </td>
 		            <td><a href="${h.url('repo_settings_home',repo_name=repo['name'])}" title="${_('edit')}"><img class="icon" alt="${_('private')}" src="${h.url('/images/icons/application_form_edit.png')}"/></a></td>
 		            <td>
 	                  ${h.form(url('repo_settings_delete', repo_name=repo['name']),method='delete')}
@@ -177,14 +170,127 @@
 	     %endif
 	     </tbody>
 	     </table>
+       </div>
+    </div>
+    <div id="perms" class="table" style="display:none">
+           %for section in sorted(c.rhodecode_user.permissions.keys()):
+            <div class="perms_section_head">${section.replace("_"," ").capitalize()}</div>
+            
+            <div id='tbl_list_wrap_${section}' class="yui-skin-sam">
+            <table id="tbl_list_${section}">
+              <thead>
+                  <tr>
+                  <th class="left">${_('Name')}</th>
+                  <th class="left">${_('Permission')}</th>
+              </thead>
+              <tbody>
+            %for k in c.rhodecode_user.permissions[section]:
+                <tr>
+                    <td>${k}</td>
+                    <td>
+                        %if section == 'global':
+                         ${', '.join(c.rhodecode_user.permissions[section])}
+                        %else:
+                        <span class="perm_tag ${c.rhodecode_user.permissions[section].get(k).split('.')[-1] }">${c.rhodecode_user.permissions[section].get(k)}</span>
+                        %endif
+                     </td>
+                </tr>
+            %endfor
+            </tbody>
+            </table>
+            </div>
+           %endfor
     </div>
 </div>
 <script type="text/javascript">
-var nodes = YUQ('div.table tr td a.repo_name');
-var target = 'q_filter';
-var func = function(node){
-    return node.parentNode.parentNode;
+var filter_activate = function(){
+    var nodes = YUQ('#my tr td a.repo_name');
+    var func = function(node){
+        return node.parentNode.parentNode.parentNode.parentNode;
+    }
+    q_filter('q_filter',YUQ('#my tr td a.repo_name'),func);	
 }
-q_filter(target,nodes,func);
+
+YUE.on('show_my','click',function(e){
+    YUD.setStyle('perms','display','none');
+    YUD.setStyle('my','display','');
+    YUD.get('q_filter').removeAttribute('disabled');
+    filter_activate();
+    YUE.preventDefault(e);
+})
+YUE.on('show_perms','click',function(e){
+    YUD.setStyle('my','display','none');
+    YUD.setStyle('perms','display','');
+    YUD.setAttribute('q_filter','disabled','disabled');
+    YUE.preventDefault(e);
+})
+
+
+// main table sorting
+var myColumnDefs = [
+    {key:"menu",label:"",sortable:false,className:"quick_repo_menu hidden"},
+    {key:"name",label:"${_('Name')}",sortable:true,
+        sortOptions: { sortFunction: nameSort }},
+    {key:"tip",label:"${_('Tip')}",sortable:true,
+        sortOptions: { sortFunction: revisionSort }},
+    {key:"action1",label:"",sortable:false},
+    {key:"action2",label:"",sortable:false},
+];
+
+var myDataSource = new YAHOO.util.DataSource(YUD.get("repos_list"));
+myDataSource.responseType = YAHOO.util.DataSource.TYPE_HTMLTABLE;
+myDataSource.responseSchema = {
+    fields: [
+        {key:"menu"},
+        {key:"name"},
+        {key:"tip"},
+        {key:"action1"},
+        {key:"action2"},
+    ]
+};
+var trans_defs =  {
+    sortedBy:{key:"name",dir:"asc"},
+    MSG_SORTASC:"${_('Click to sort ascending')}",
+    MSG_SORTDESC:"${_('Click to sort descending')}",
+    MSG_EMPTY:"${_('No records found.')}",
+    MSG_ERROR:"${_('Data error.')}",
+    MSG_LOADING:"${_('Loading...')}",
+}
+var myDataTable = new YAHOO.widget.DataTable("repos_list_wrap", myColumnDefs, myDataSource,trans_defs);
+myDataTable.subscribe('postRenderEvent',function(oArgs) {
+    tooltip_activate();
+    quick_repo_menu();
+    filter_activate();
+});
+
+var permsColumnDefs = [
+    {key:"name",label:"${_('Name')}",sortable:true, sortOptions: { sortFunction: permNameSort }},
+    {key:"perm",label:"${_('Permission')}",sortable:false,},
+];
+
+// perms repos table
+var myDataSource2 = new YAHOO.util.DataSource(YUD.get("tbl_list_repositories"));
+myDataSource2.responseType = YAHOO.util.DataSource.TYPE_HTMLTABLE;
+myDataSource2.responseSchema = {
+    fields: [
+        {key:"name"},
+        {key:"perm"},
+    ]
+};
+
+new YAHOO.widget.DataTable("tbl_list_wrap_repositories", permsColumnDefs, myDataSource2, trans_defs);
+
+//perms groups table
+var myDataSource3 = new YAHOO.util.DataSource(YUD.get("tbl_list_repositories_groups"));
+myDataSource3.responseType = YAHOO.util.DataSource.TYPE_HTMLTABLE;
+myDataSource3.responseSchema = {
+    fields: [
+        {key:"name"},
+        {key:"perm"},
+    ]
+};
+
+new YAHOO.widget.DataTable("tbl_list_wrap_repositories_groups", permsColumnDefs, myDataSource3, trans_defs);
+
 </script>
 </%def>
--- a/rhodecode/templates/journal/journal.html	Tue Mar 13 04:24:45 2012 +0200
+++ b/rhodecode/templates/journal/journal.html	Tue Mar 13 06:36:53 2012 +0200
@@ -48,7 +48,7 @@
                   <tr>
                   <th></th>
                   <th class="left">${_('Name')}</th>
-                  <th class="left">${_('Tip')}</th>
+                  <th class="left">${_('Revision')}</th>
                   <th class="left">${_('Action')}</th>
                   <th class="left">${_('Action')}</th>
              </thead>