##// END OF EJS Templates
sort permission lists by (repository) name...
Mads Kiilerich -
r3623:ce9a226e beta
parent child Browse files
Show More
@@ -1,215 +1,215 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/base/base.html"/>
2 <%inherit file="/base/base.html"/>
3
3
4 <%def name="title()">
4 <%def name="title()">
5 ${_('Permissions administration')} &middot; ${c.rhodecode_name}
5 ${_('Permissions administration')} &middot; ${c.rhodecode_name}
6 </%def>
6 </%def>
7
7
8 <%def name="breadcrumbs_links()">
8 <%def name="breadcrumbs_links()">
9 ${h.link_to(_('Admin'),h.url('admin_home'))}
9 ${h.link_to(_('Admin'),h.url('admin_home'))}
10 &raquo;
10 &raquo;
11 ${_('permissions')}
11 ${_('permissions')}
12 </%def>
12 </%def>
13
13
14 <%def name="page_nav()">
14 <%def name="page_nav()">
15 ${self.menu('admin')}
15 ${self.menu('admin')}
16 </%def>
16 </%def>
17
17
18 <%def name="main()">
18 <%def name="main()">
19 <div class="box box-left">
19 <div class="box box-left">
20 <!-- box / title -->
20 <!-- box / title -->
21 <div class="title">
21 <div class="title">
22 ${self.breadcrumbs()}
22 ${self.breadcrumbs()}
23 </div>
23 </div>
24 <h3>${_('Default permissions')}</h3>
24 <h3>${_('Default permissions')}</h3>
25 ${h.form(url('permission', id='default'),method='put')}
25 ${h.form(url('permission', id='default'),method='put')}
26 <div class="form">
26 <div class="form">
27 <!-- fields -->
27 <!-- fields -->
28 <div class="fields">
28 <div class="fields">
29 <div class="field">
29 <div class="field">
30 <div class="label label-checkbox">
30 <div class="label label-checkbox">
31 <label for="anonymous">${_('Anonymous access')}:</label>
31 <label for="anonymous">${_('Anonymous access')}:</label>
32 </div>
32 </div>
33 <div class="checkboxes">
33 <div class="checkboxes">
34 <div class="checkbox">
34 <div class="checkbox">
35 ${h.checkbox('anonymous',True)}
35 ${h.checkbox('anonymous',True)}
36 </div>
36 </div>
37 </div>
37 </div>
38 </div>
38 </div>
39 <div class="field">
39 <div class="field">
40 <div class="label">
40 <div class="label">
41 <label for="default_repo_perm">${_('Repository')}:</label>
41 <label for="default_repo_perm">${_('Repository')}:</label>
42 </div>
42 </div>
43 <div class="select">
43 <div class="select">
44 ${h.select('default_repo_perm','',c.repo_perms_choices)}
44 ${h.select('default_repo_perm','',c.repo_perms_choices)}
45
45
46 ${h.checkbox('overwrite_default_repo','true')}
46 ${h.checkbox('overwrite_default_repo','true')}
47 <label for="overwrite_default_repo">
47 <label for="overwrite_default_repo">
48 <span class="tooltip"
48 <span class="tooltip"
49 title="${h.tooltip(_('All default permissions on each repository will be reset to chosen permission, note that all custom default permission on repositories will be lost'))}">
49 title="${h.tooltip(_('All default permissions on each repository will be reset to chosen permission, note that all custom default permission on repositories will be lost'))}">
50 ${_('overwrite existing settings')}</span> </label>
50 ${_('overwrite existing settings')}</span> </label>
51 </div>
51 </div>
52 </div>
52 </div>
53 <div class="field">
53 <div class="field">
54 <div class="label">
54 <div class="label">
55 <label for="default_group_perm">${_('Repository group')}:</label>
55 <label for="default_group_perm">${_('Repository group')}:</label>
56 </div>
56 </div>
57 <div class="select">
57 <div class="select">
58 ${h.select('default_group_perm','',c.group_perms_choices)}
58 ${h.select('default_group_perm','',c.group_perms_choices)}
59 ${h.checkbox('overwrite_default_group','true')}
59 ${h.checkbox('overwrite_default_group','true')}
60 <label for="overwrite_default_group">
60 <label for="overwrite_default_group">
61 <span class="tooltip"
61 <span class="tooltip"
62 title="${h.tooltip(_('All default permissions on each repository group will be reset to chosen permission, note that all custom default permission on repository groups will be lost'))}">
62 title="${h.tooltip(_('All default permissions on each repository group will be reset to chosen permission, note that all custom default permission on repository groups will be lost'))}">
63 ${_('overwrite existing settings')}</span> </label>
63 ${_('overwrite existing settings')}</span> </label>
64
64
65 </div>
65 </div>
66 </div>
66 </div>
67 <div class="field">
67 <div class="field">
68 <div class="label">
68 <div class="label">
69 <label for="default_register">${_('Registration')}:</label>
69 <label for="default_register">${_('Registration')}:</label>
70 </div>
70 </div>
71 <div class="select">
71 <div class="select">
72 ${h.select('default_register','',c.register_choices)}
72 ${h.select('default_register','',c.register_choices)}
73 </div>
73 </div>
74 </div>
74 </div>
75 <div class="field">
75 <div class="field">
76 <div class="label">
76 <div class="label">
77 <label for="default_create">${_('Repository creation')}:</label>
77 <label for="default_create">${_('Repository creation')}:</label>
78 </div>
78 </div>
79 <div class="select">
79 <div class="select">
80 ${h.select('default_create','',c.create_choices)}
80 ${h.select('default_create','',c.create_choices)}
81 </div>
81 </div>
82 </div>
82 </div>
83 <div class="field">
83 <div class="field">
84 <div class="label">
84 <div class="label">
85 <label for="default_fork">${_('Repository forking')}:</label>
85 <label for="default_fork">${_('Repository forking')}:</label>
86 </div>
86 </div>
87 <div class="select">
87 <div class="select">
88 ${h.select('default_fork','',c.fork_choices)}
88 ${h.select('default_fork','',c.fork_choices)}
89 </div>
89 </div>
90 </div>
90 </div>
91 <div class="buttons">
91 <div class="buttons">
92 ${h.submit('save',_('Save'),class_="ui-btn large")}
92 ${h.submit('save',_('Save'),class_="ui-btn large")}
93 ${h.reset('reset',_('Reset'),class_="ui-btn large")}
93 ${h.reset('reset',_('Reset'),class_="ui-btn large")}
94 </div>
94 </div>
95 </div>
95 </div>
96 </div>
96 </div>
97 ${h.end_form()}
97 ${h.end_form()}
98 </div>
98 </div>
99
99
100 <div style="min-height:780px" class="box box-right">
100 <div style="min-height:780px" class="box box-right">
101 <!-- box / title -->
101 <!-- box / title -->
102 <div class="title">
102 <div class="title">
103 <h5>${_('Default User Permissions')}</h5>
103 <h5>${_('Default User Permissions')}</h5>
104 </div>
104 </div>
105
105
106 ## permissions overview
106 ## permissions overview
107 <div id="perms" class="table">
107 <div id="perms" class="table">
108 %for section in sorted(c.perm_user.permissions.keys()):
108 %for section in sorted(c.perm_user.permissions.keys()):
109 <div class="perms_section_head">${section.replace("_"," ").capitalize()}</div>
109 <div class="perms_section_head">${section.replace("_"," ").capitalize()}</div>
110 %if not c.perm_user.permissions[section]:
110 %if not c.perm_user.permissions[section]:
111 <span class="empty_data">${_('Nothing here yet')}</span>
111 <span class="empty_data">${_('Nothing here yet')}</span>
112 %else:
112 %else:
113 <div id='tbl_list_wrap_${section}' class="yui-skin-sam">
113 <div id='tbl_list_wrap_${section}' class="yui-skin-sam">
114 <table id="tbl_list_${section}">
114 <table id="tbl_list_${section}">
115 <thead>
115 <thead>
116 <tr>
116 <tr>
117 <th class="left">${_('Name')}</th>
117 <th class="left">${_('Name')}</th>
118 <th class="left">${_('Permission')}</th>
118 <th class="left">${_('Permission')}</th>
119 <th class="left">${_('Edit Permission')}</th>
119 <th class="left">${_('Edit Permission')}</th>
120 </thead>
120 </thead>
121 <tbody>
121 <tbody>
122 %for k in c.perm_user.permissions[section]:
122 %for k in sorted(c.perm_user.permissions[section], key=lambda s: s.lower):
123 <%
123 <%
124 if section != 'global':
124 if section != 'global':
125 section_perm = c.perm_user.permissions[section].get(k)
125 section_perm = c.perm_user.permissions[section].get(k)
126 _perm = section_perm.split('.')[-1]
126 _perm = section_perm.split('.')[-1]
127 else:
127 else:
128 _perm = section_perm = None
128 _perm = section_perm = None
129 %>
129 %>
130 <tr>
130 <tr>
131 <td>
131 <td>
132 %if section == 'repositories':
132 %if section == 'repositories':
133 <a href="${h.url('summary_home',repo_name=k)}">${k}</a>
133 <a href="${h.url('summary_home',repo_name=k)}">${k}</a>
134 %elif section == 'repositories_groups':
134 %elif section == 'repositories_groups':
135 <a href="${h.url('repos_group_home',group_name=k)}">${k}</a>
135 <a href="${h.url('repos_group_home',group_name=k)}">${k}</a>
136 %else:
136 %else:
137 ${h.get_permission_name(k)}
137 ${h.get_permission_name(k)}
138 %endif
138 %endif
139 </td>
139 </td>
140 <td>
140 <td>
141 %if section == 'global':
141 %if section == 'global':
142 ${h.bool2icon(k.split('.')[-1] != 'none')}
142 ${h.bool2icon(k.split('.')[-1] != 'none')}
143 %else:
143 %else:
144 <span class="perm_tag ${_perm}">${section_perm}</span>
144 <span class="perm_tag ${_perm}">${section_perm}</span>
145 %endif
145 %endif
146 </td>
146 </td>
147 <td>
147 <td>
148 %if section == 'repositories':
148 %if section == 'repositories':
149 <a href="${h.url('edit_repo',repo_name=k,anchor='permissions_manage')}">${_('edit')}</a>
149 <a href="${h.url('edit_repo',repo_name=k,anchor='permissions_manage')}">${_('edit')}</a>
150 %elif section == 'repositories_groups':
150 %elif section == 'repositories_groups':
151 <a href="${h.url('edit_repos_group',group_name=k,anchor='permissions_manage')}">${_('edit')}</a>
151 <a href="${h.url('edit_repos_group',group_name=k,anchor='permissions_manage')}">${_('edit')}</a>
152 %else:
152 %else:
153 --
153 --
154 %endif
154 %endif
155 </td>
155 </td>
156 </tr>
156 </tr>
157 %endfor
157 %endfor
158 </tbody>
158 </tbody>
159 </table>
159 </table>
160 </div>
160 </div>
161 %endif
161 %endif
162 %endfor
162 %endfor
163 </div>
163 </div>
164 </div>
164 </div>
165 <div class="box box-left" style="clear:left">
165 <div class="box box-left" style="clear:left">
166 <!-- box / title -->
166 <!-- box / title -->
167 <div class="title">
167 <div class="title">
168 <h5>${_('Allowed IP addresses')}</h5>
168 <h5>${_('Allowed IP addresses')}</h5>
169 </div>
169 </div>
170
170
171 <div class="ips_wrap">
171 <div class="ips_wrap">
172 <table class="noborder">
172 <table class="noborder">
173 %if c.user_ip_map:
173 %if c.user_ip_map:
174 %for ip in c.user_ip_map:
174 %for ip in c.user_ip_map:
175 <tr>
175 <tr>
176 <td><div class="ip">${ip.ip_addr}</div></td>
176 <td><div class="ip">${ip.ip_addr}</div></td>
177 <td><div class="ip">${h.ip_range(ip.ip_addr)}</div></td>
177 <td><div class="ip">${h.ip_range(ip.ip_addr)}</div></td>
178 <td>
178 <td>
179 ${h.form(url('user_ips_delete', id=c.user.user_id),method='delete')}
179 ${h.form(url('user_ips_delete', id=c.user.user_id),method='delete')}
180 ${h.hidden('del_ip',ip.ip_id)}
180 ${h.hidden('del_ip',ip.ip_id)}
181 ${h.hidden('default_user', 'True')}
181 ${h.hidden('default_user', 'True')}
182 ${h.submit('remove_',_('delete'),id="remove_ip_%s" % ip.ip_id,
182 ${h.submit('remove_',_('delete'),id="remove_ip_%s" % ip.ip_id,
183 class_="delete_icon action_button", onclick="return confirm('"+_('Confirm to delete this ip: %s') % ip.ip_addr+"');")}
183 class_="delete_icon action_button", onclick="return confirm('"+_('Confirm to delete this ip: %s') % ip.ip_addr+"');")}
184 ${h.end_form()}
184 ${h.end_form()}
185 </td>
185 </td>
186 </tr>
186 </tr>
187 %endfor
187 %endfor
188 %else:
188 %else:
189 <tr><td><div class="ip">${_('All IP addresses are allowed')}</div></td></tr>
189 <tr><td><div class="ip">${_('All IP addresses are allowed')}</div></td></tr>
190 %endif
190 %endif
191 </table>
191 </table>
192 </div>
192 </div>
193
193
194 ${h.form(url('user_ips', id=c.user.user_id),method='put')}
194 ${h.form(url('user_ips', id=c.user.user_id),method='put')}
195 <div class="form">
195 <div class="form">
196 <!-- fields -->
196 <!-- fields -->
197 <div class="fields">
197 <div class="fields">
198 <div class="field">
198 <div class="field">
199 <div class="label">
199 <div class="label">
200 <label for="new_ip">${_('New ip address')}:</label>
200 <label for="new_ip">${_('New ip address')}:</label>
201 </div>
201 </div>
202 <div class="input">
202 <div class="input">
203 ${h.hidden('default_user', 'True')}
203 ${h.hidden('default_user', 'True')}
204 ${h.text('new_ip', class_='medium')}
204 ${h.text('new_ip', class_='medium')}
205 </div>
205 </div>
206 </div>
206 </div>
207 <div class="buttons">
207 <div class="buttons">
208 ${h.submit('save',_('Add'),class_="ui-btn large")}
208 ${h.submit('save',_('Add'),class_="ui-btn large")}
209 ${h.reset('reset',_('Reset'),class_="ui-btn large")}
209 ${h.reset('reset',_('Reset'),class_="ui-btn large")}
210 </div>
210 </div>
211 </div>
211 </div>
212 </div>
212 </div>
213 ${h.end_form()}
213 ${h.end_form()}
214 </div>
214 </div>
215 </%def>
215 </%def>
@@ -1,343 +1,343 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/base/base.html"/>
2 <%inherit file="/base/base.html"/>
3
3
4 <%def name="title()">
4 <%def name="title()">
5 ${_('Edit user')} ${c.user.username} &middot; ${c.rhodecode_name}
5 ${_('Edit user')} ${c.user.username} &middot; ${c.rhodecode_name}
6 </%def>
6 </%def>
7
7
8 <%def name="breadcrumbs_links()">
8 <%def name="breadcrumbs_links()">
9 ${h.link_to(_('Admin'),h.url('admin_home'))}
9 ${h.link_to(_('Admin'),h.url('admin_home'))}
10 &raquo;
10 &raquo;
11 ${h.link_to(_('Users'),h.url('users'))}
11 ${h.link_to(_('Users'),h.url('users'))}
12 &raquo;
12 &raquo;
13 ${_('edit')} "${c.user.username}"
13 ${_('edit')} "${c.user.username}"
14 </%def>
14 </%def>
15
15
16 <%def name="page_nav()">
16 <%def name="page_nav()">
17 ${self.menu('admin')}
17 ${self.menu('admin')}
18 </%def>
18 </%def>
19
19
20 <%def name="main()">
20 <%def name="main()">
21 <div class="box box-left">
21 <div class="box box-left">
22 <!-- box / title -->
22 <!-- box / title -->
23 <div class="title">
23 <div class="title">
24 ${self.breadcrumbs()}
24 ${self.breadcrumbs()}
25 </div>
25 </div>
26 <!-- end box / title -->
26 <!-- end box / title -->
27 ${h.form(url('update_user', id=c.user.user_id),method='put')}
27 ${h.form(url('update_user', id=c.user.user_id),method='put')}
28 <div class="form">
28 <div class="form">
29 <div class="field">
29 <div class="field">
30 <div class="gravatar_box">
30 <div class="gravatar_box">
31 <div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(c.user.email)}"/></div>
31 <div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(c.user.email)}"/></div>
32 <p>
32 <p>
33 %if c.use_gravatar:
33 %if c.use_gravatar:
34 <strong>${_('Change your avatar at')} <a href="http://gravatar.com">gravatar.com</a></strong>
34 <strong>${_('Change your avatar at')} <a href="http://gravatar.com">gravatar.com</a></strong>
35 <br/>${_('Using')} ${c.user.email}
35 <br/>${_('Using')} ${c.user.email}
36 %else:
36 %else:
37 <br/>${c.user.email}
37 <br/>${c.user.email}
38 %endif
38 %endif
39 </div>
39 </div>
40 </div>
40 </div>
41 <div class="field">
41 <div class="field">
42 <div class="label">
42 <div class="label">
43 <label>${_('API key')}:</label> ${c.user.api_key}
43 <label>${_('API key')}:</label> ${c.user.api_key}
44 </div>
44 </div>
45 </div>
45 </div>
46 ##show current ip just if we show ourself
46 ##show current ip just if we show ourself
47 %if c.rhodecode_user.username == c.user.username:
47 %if c.rhodecode_user.username == c.user.username:
48 <div class="field">
48 <div class="field">
49 <div class="label">
49 <div class="label">
50 <label>${_('Current IP')}:</label> ${c.perm_user.ip_addr or "?"}
50 <label>${_('Current IP')}:</label> ${c.perm_user.ip_addr or "?"}
51 </div>
51 </div>
52 </div>
52 </div>
53 %endif
53 %endif
54 <div class="fields">
54 <div class="fields">
55 <div class="field">
55 <div class="field">
56 <div class="label">
56 <div class="label">
57 <label for="username">${_('Username')}:</label>
57 <label for="username">${_('Username')}:</label>
58 </div>
58 </div>
59 <div class="input">
59 <div class="input">
60 %if c.ldap_dn:
60 %if c.ldap_dn:
61 ${h.text('username',class_='medium disabled', readonly="readonly")}
61 ${h.text('username',class_='medium disabled', readonly="readonly")}
62 %else:
62 %else:
63 ${h.text('username',class_='medium')}
63 ${h.text('username',class_='medium')}
64 %endif:
64 %endif:
65 </div>
65 </div>
66 </div>
66 </div>
67
67
68 <div class="field">
68 <div class="field">
69 <div class="label">
69 <div class="label">
70 <label for="ldap_dn">${_('LDAP DN')}:</label>
70 <label for="ldap_dn">${_('LDAP DN')}:</label>
71 </div>
71 </div>
72 <div class="input">
72 <div class="input">
73 ${h.text('ldap_dn',class_='medium disabled',readonly="readonly")}
73 ${h.text('ldap_dn',class_='medium disabled',readonly="readonly")}
74 </div>
74 </div>
75 </div>
75 </div>
76
76
77 <div class="field">
77 <div class="field">
78 <div class="label">
78 <div class="label">
79 <label for="new_password">${_('New password')}:</label>
79 <label for="new_password">${_('New password')}:</label>
80 </div>
80 </div>
81 <div class="input">
81 <div class="input">
82 ${h.password('new_password',class_='medium',autocomplete="off")}
82 ${h.password('new_password',class_='medium',autocomplete="off")}
83 </div>
83 </div>
84 </div>
84 </div>
85
85
86 <div class="field">
86 <div class="field">
87 <div class="label">
87 <div class="label">
88 <label for="password_confirmation">${_('New password confirmation')}:</label>
88 <label for="password_confirmation">${_('New password confirmation')}:</label>
89 </div>
89 </div>
90 <div class="input">
90 <div class="input">
91 ${h.password('password_confirmation',class_="medium",autocomplete="off")}
91 ${h.password('password_confirmation',class_="medium",autocomplete="off")}
92 </div>
92 </div>
93 </div>
93 </div>
94
94
95 <div class="field">
95 <div class="field">
96 <div class="label">
96 <div class="label">
97 <label for="firstname">${_('First Name')}:</label>
97 <label for="firstname">${_('First Name')}:</label>
98 </div>
98 </div>
99 <div class="input">
99 <div class="input">
100 ${h.text('firstname',class_='medium')}
100 ${h.text('firstname',class_='medium')}
101 </div>
101 </div>
102 </div>
102 </div>
103
103
104 <div class="field">
104 <div class="field">
105 <div class="label">
105 <div class="label">
106 <label for="lastname">${_('Last Name')}:</label>
106 <label for="lastname">${_('Last Name')}:</label>
107 </div>
107 </div>
108 <div class="input">
108 <div class="input">
109 ${h.text('lastname',class_='medium')}
109 ${h.text('lastname',class_='medium')}
110 </div>
110 </div>
111 </div>
111 </div>
112
112
113 <div class="field">
113 <div class="field">
114 <div class="label">
114 <div class="label">
115 <label for="email">${_('Email')}:</label>
115 <label for="email">${_('Email')}:</label>
116 </div>
116 </div>
117 <div class="input">
117 <div class="input">
118 ${h.text('email',class_='medium')}
118 ${h.text('email',class_='medium')}
119 </div>
119 </div>
120 </div>
120 </div>
121
121
122 <div class="field">
122 <div class="field">
123 <div class="label label-checkbox">
123 <div class="label label-checkbox">
124 <label for="active">${_('Active')}:</label>
124 <label for="active">${_('Active')}:</label>
125 </div>
125 </div>
126 <div class="checkboxes">
126 <div class="checkboxes">
127 ${h.checkbox('active',value=True)}
127 ${h.checkbox('active',value=True)}
128 </div>
128 </div>
129 </div>
129 </div>
130
130
131 <div class="field">
131 <div class="field">
132 <div class="label label-checkbox">
132 <div class="label label-checkbox">
133 <label for="admin">${_('Admin')}:</label>
133 <label for="admin">${_('Admin')}:</label>
134 </div>
134 </div>
135 <div class="checkboxes">
135 <div class="checkboxes">
136 ${h.checkbox('admin',value=True)}
136 ${h.checkbox('admin',value=True)}
137 </div>
137 </div>
138 </div>
138 </div>
139 <div class="buttons">
139 <div class="buttons">
140 ${h.submit('save',_('Save'),class_="ui-btn large")}
140 ${h.submit('save',_('Save'),class_="ui-btn large")}
141 ${h.reset('reset',_('Reset'),class_="ui-btn large")}
141 ${h.reset('reset',_('Reset'),class_="ui-btn large")}
142 </div>
142 </div>
143 </div>
143 </div>
144 </div>
144 </div>
145 ${h.end_form()}
145 ${h.end_form()}
146 </div>
146 </div>
147 <div style="min-height:780px" class="box box-right">
147 <div style="min-height:780px" class="box box-right">
148 <!-- box / title -->
148 <!-- box / title -->
149 <div class="title">
149 <div class="title">
150 <h5>${_('Permissions')}</h5>
150 <h5>${_('Permissions')}</h5>
151 </div>
151 </div>
152 ${h.form(url('user_perm', id=c.user.user_id),method='put')}
152 ${h.form(url('user_perm', id=c.user.user_id),method='put')}
153 <div class="form">
153 <div class="form">
154 <!-- fields -->
154 <!-- fields -->
155 <div class="fields">
155 <div class="fields">
156 <div class="field">
156 <div class="field">
157 <div class="label label-checkbox">
157 <div class="label label-checkbox">
158 <label for="inherit_permissions">${_('Inherit default permissions')}:</label>
158 <label for="inherit_permissions">${_('Inherit default permissions')}:</label>
159 </div>
159 </div>
160 <div class="checkboxes">
160 <div class="checkboxes">
161 ${h.checkbox('inherit_default_permissions',value=True)}
161 ${h.checkbox('inherit_default_permissions',value=True)}
162 </div>
162 </div>
163 <span class="help-block">${h.literal(_('Select to inherit permissions from %s settings. '
163 <span class="help-block">${h.literal(_('Select to inherit permissions from %s settings. '
164 'With this selected below options does not have any action') % h.link_to('default', url('edit_permission', id='default')))}</span>
164 'With this selected below options does not have any action') % h.link_to('default', url('edit_permission', id='default')))}</span>
165 </div>
165 </div>
166 <div id="inherit_overlay" style="${'opacity:0.3' if c.user.inherit_default_permissions else ''}" >
166 <div id="inherit_overlay" style="${'opacity:0.3' if c.user.inherit_default_permissions else ''}" >
167 <div class="field">
167 <div class="field">
168 <div class="label label-checkbox">
168 <div class="label label-checkbox">
169 <label for="create_repo_perm">${_('Create repositories')}:</label>
169 <label for="create_repo_perm">${_('Create repositories')}:</label>
170 </div>
170 </div>
171 <div class="checkboxes">
171 <div class="checkboxes">
172 ${h.checkbox('create_repo_perm',value=True)}
172 ${h.checkbox('create_repo_perm',value=True)}
173 </div>
173 </div>
174 </div>
174 </div>
175 <div class="field">
175 <div class="field">
176 <div class="label label-checkbox">
176 <div class="label label-checkbox">
177 <label for="fork_repo_perm">${_('Fork repositories')}:</label>
177 <label for="fork_repo_perm">${_('Fork repositories')}:</label>
178 </div>
178 </div>
179 <div class="checkboxes">
179 <div class="checkboxes">
180 ${h.checkbox('fork_repo_perm',value=True)}
180 ${h.checkbox('fork_repo_perm',value=True)}
181 </div>
181 </div>
182 </div>
182 </div>
183 </div>
183 </div>
184 <div class="buttons">
184 <div class="buttons">
185 ${h.submit('save',_('Save'),class_="ui-btn large")}
185 ${h.submit('save',_('Save'),class_="ui-btn large")}
186 ${h.reset('reset',_('Reset'),class_="ui-btn large")}
186 ${h.reset('reset',_('Reset'),class_="ui-btn large")}
187 </div>
187 </div>
188 </div>
188 </div>
189 </div>
189 </div>
190 ${h.end_form()}
190 ${h.end_form()}
191
191
192 ## permissions overview
192 ## permissions overview
193 <div id="perms" class="table">
193 <div id="perms" class="table">
194 %for section in sorted(c.perm_user.permissions.keys()):
194 %for section in sorted(c.perm_user.permissions.keys()):
195 <div class="perms_section_head">${section.replace("_"," ").capitalize()}</div>
195 <div class="perms_section_head">${section.replace("_"," ").capitalize()}</div>
196 %if not c.perm_user.permissions[section]:
196 %if not c.perm_user.permissions[section]:
197 <span class="empty_data">${_('Nothing here yet')}</span>
197 <span class="empty_data">${_('Nothing here yet')}</span>
198 %else:
198 %else:
199 <div id='tbl_list_wrap_${section}' class="yui-skin-sam">
199 <div id='tbl_list_wrap_${section}' class="yui-skin-sam">
200 <table id="tbl_list_${section}">
200 <table id="tbl_list_${section}">
201 <thead>
201 <thead>
202 <tr>
202 <tr>
203 <th class="left">${_('Name')}</th>
203 <th class="left">${_('Name')}</th>
204 <th class="left">${_('Permission')}</th>
204 <th class="left">${_('Permission')}</th>
205 <th class="left">${_('Edit Permission')}</th>
205 <th class="left">${_('Edit Permission')}</th>
206 </thead>
206 </thead>
207 <tbody>
207 <tbody>
208 %for k in c.perm_user.permissions[section]:
208 %for k in sorted(c.perm_user.permissions[section], key=lambda s: s.lower):
209 <%
209 <%
210 if section != 'global':
210 if section != 'global':
211 section_perm = c.perm_user.permissions[section].get(k)
211 section_perm = c.perm_user.permissions[section].get(k)
212 _perm = section_perm.split('.')[-1]
212 _perm = section_perm.split('.')[-1]
213 else:
213 else:
214 _perm = section_perm = None
214 _perm = section_perm = None
215 %>
215 %>
216 <tr>
216 <tr>
217 <td>
217 <td>
218 %if section == 'repositories':
218 %if section == 'repositories':
219 <a href="${h.url('summary_home',repo_name=k)}">${k}</a>
219 <a href="${h.url('summary_home',repo_name=k)}">${k}</a>
220 %elif section == 'repositories_groups':
220 %elif section == 'repositories_groups':
221 <a href="${h.url('repos_group_home',group_name=k)}">${k}</a>
221 <a href="${h.url('repos_group_home',group_name=k)}">${k}</a>
222 %else:
222 %else:
223 ${h.get_permission_name(k)}
223 ${h.get_permission_name(k)}
224 %endif
224 %endif
225 </td>
225 </td>
226 <td>
226 <td>
227 %if section == 'global':
227 %if section == 'global':
228 ${h.bool2icon(k.split('.')[-1] != 'none')}
228 ${h.bool2icon(k.split('.')[-1] != 'none')}
229 %else:
229 %else:
230 <span class="perm_tag ${_perm}">${section_perm}</span>
230 <span class="perm_tag ${_perm}">${section_perm}</span>
231 %endif
231 %endif
232 </td>
232 </td>
233 <td>
233 <td>
234 %if section == 'repositories':
234 %if section == 'repositories':
235 <a href="${h.url('edit_repo',repo_name=k,anchor='permissions_manage')}">${_('edit')}</a>
235 <a href="${h.url('edit_repo',repo_name=k,anchor='permissions_manage')}">${_('edit')}</a>
236 %elif section == 'repositories_groups':
236 %elif section == 'repositories_groups':
237 <a href="${h.url('edit_repos_group',group_name=k,anchor='permissions_manage')}">${_('edit')}</a>
237 <a href="${h.url('edit_repos_group',group_name=k,anchor='permissions_manage')}">${_('edit')}</a>
238 %else:
238 %else:
239 --
239 --
240 %endif
240 %endif
241 </td>
241 </td>
242 </tr>
242 </tr>
243 %endfor
243 %endfor
244 </tbody>
244 </tbody>
245 </table>
245 </table>
246 </div>
246 </div>
247 %endif
247 %endif
248 %endfor
248 %endfor
249 </div>
249 </div>
250 </div>
250 </div>
251 <div class="box box-left" style="clear:left">
251 <div class="box box-left" style="clear:left">
252 <!-- box / title -->
252 <!-- box / title -->
253 <div class="title">
253 <div class="title">
254 <h5>${_('Email addresses')}</h5>
254 <h5>${_('Email addresses')}</h5>
255 </div>
255 </div>
256
256
257 <div class="emails_wrap">
257 <div class="emails_wrap">
258 <table class="noborder">
258 <table class="noborder">
259 %for em in c.user_email_map:
259 %for em in c.user_email_map:
260 <tr>
260 <tr>
261 <td><div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(em.user.email,16)}"/> </div></td>
261 <td><div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(em.user.email,16)}"/> </div></td>
262 <td><div class="email">${em.email}</div></td>
262 <td><div class="email">${em.email}</div></td>
263 <td>
263 <td>
264 ${h.form(url('user_emails_delete', id=c.user.user_id),method='delete')}
264 ${h.form(url('user_emails_delete', id=c.user.user_id),method='delete')}
265 ${h.hidden('del_email',em.email_id)}
265 ${h.hidden('del_email',em.email_id)}
266 ${h.submit('remove_',_('delete'),id="remove_email_%s" % em.email_id,
266 ${h.submit('remove_',_('delete'),id="remove_email_%s" % em.email_id,
267 class_="delete_icon action_button", onclick="return confirm('"+_('Confirm to delete this email: %s') % em.email+"');")}
267 class_="delete_icon action_button", onclick="return confirm('"+_('Confirm to delete this email: %s') % em.email+"');")}
268 ${h.end_form()}
268 ${h.end_form()}
269 </td>
269 </td>
270 </tr>
270 </tr>
271 %endfor
271 %endfor
272 </table>
272 </table>
273 </div>
273 </div>
274
274
275 ${h.form(url('user_emails', id=c.user.user_id),method='put')}
275 ${h.form(url('user_emails', id=c.user.user_id),method='put')}
276 <div class="form">
276 <div class="form">
277 <!-- fields -->
277 <!-- fields -->
278 <div class="fields">
278 <div class="fields">
279 <div class="field">
279 <div class="field">
280 <div class="label">
280 <div class="label">
281 <label for="new_email">${_('New email address')}:</label>
281 <label for="new_email">${_('New email address')}:</label>
282 </div>
282 </div>
283 <div class="input">
283 <div class="input">
284 ${h.text('new_email', class_='medium')}
284 ${h.text('new_email', class_='medium')}
285 </div>
285 </div>
286 </div>
286 </div>
287 <div class="buttons">
287 <div class="buttons">
288 ${h.submit('save',_('Add'),class_="ui-btn large")}
288 ${h.submit('save',_('Add'),class_="ui-btn large")}
289 ${h.reset('reset',_('Reset'),class_="ui-btn large")}
289 ${h.reset('reset',_('Reset'),class_="ui-btn large")}
290 </div>
290 </div>
291 </div>
291 </div>
292 </div>
292 </div>
293 ${h.end_form()}
293 ${h.end_form()}
294 </div>
294 </div>
295 <div class="box box-left" style="clear:left">
295 <div class="box box-left" style="clear:left">
296 <!-- box / title -->
296 <!-- box / title -->
297 <div class="title">
297 <div class="title">
298 <h5>${_('Allowed IP addresses')}</h5>
298 <h5>${_('Allowed IP addresses')}</h5>
299 </div>
299 </div>
300
300
301 <div class="ips_wrap">
301 <div class="ips_wrap">
302 <table class="noborder">
302 <table class="noborder">
303 %if c.user_ip_map:
303 %if c.user_ip_map:
304 %for ip in c.user_ip_map:
304 %for ip in c.user_ip_map:
305 <tr>
305 <tr>
306 <td><div class="ip">${ip.ip_addr}</div></td>
306 <td><div class="ip">${ip.ip_addr}</div></td>
307 <td><div class="ip">${h.ip_range(ip.ip_addr)}</div></td>
307 <td><div class="ip">${h.ip_range(ip.ip_addr)}</div></td>
308 <td>
308 <td>
309 ${h.form(url('user_ips_delete', id=c.user.user_id),method='delete')}
309 ${h.form(url('user_ips_delete', id=c.user.user_id),method='delete')}
310 ${h.hidden('del_ip',ip.ip_id)}
310 ${h.hidden('del_ip',ip.ip_id)}
311 ${h.submit('remove_',_('delete'),id="remove_ip_%s" % ip.ip_id,
311 ${h.submit('remove_',_('delete'),id="remove_ip_%s" % ip.ip_id,
312 class_="delete_icon action_button", onclick="return confirm('"+_('Confirm to delete this ip: %s') % ip.ip_addr+"');")}
312 class_="delete_icon action_button", onclick="return confirm('"+_('Confirm to delete this ip: %s') % ip.ip_addr+"');")}
313 ${h.end_form()}
313 ${h.end_form()}
314 </td>
314 </td>
315 </tr>
315 </tr>
316 %endfor
316 %endfor
317 %else:
317 %else:
318 <tr><td><div class="ip">${_('All IP addresses are allowed')}</div></td></tr>
318 <tr><td><div class="ip">${_('All IP addresses are allowed')}</div></td></tr>
319 %endif
319 %endif
320 </table>
320 </table>
321 </div>
321 </div>
322
322
323 ${h.form(url('user_ips', id=c.user.user_id),method='put')}
323 ${h.form(url('user_ips', id=c.user.user_id),method='put')}
324 <div class="form">
324 <div class="form">
325 <!-- fields -->
325 <!-- fields -->
326 <div class="fields">
326 <div class="fields">
327 <div class="field">
327 <div class="field">
328 <div class="label">
328 <div class="label">
329 <label for="new_ip">${_('New ip address')}:</label>
329 <label for="new_ip">${_('New ip address')}:</label>
330 </div>
330 </div>
331 <div class="input">
331 <div class="input">
332 ${h.text('new_ip', class_='medium')}
332 ${h.text('new_ip', class_='medium')}
333 </div>
333 </div>
334 </div>
334 </div>
335 <div class="buttons">
335 <div class="buttons">
336 ${h.submit('save',_('Add'),class_="ui-btn large")}
336 ${h.submit('save',_('Add'),class_="ui-btn large")}
337 ${h.reset('reset',_('Reset'),class_="ui-btn large")}
337 ${h.reset('reset',_('Reset'),class_="ui-btn large")}
338 </div>
338 </div>
339 </div>
339 </div>
340 </div>
340 </div>
341 ${h.end_form()}
341 ${h.end_form()}
342 </div>
342 </div>
343 </%def>
343 </%def>
@@ -1,284 +1,284 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/base/base.html"/>
2 <%inherit file="/base/base.html"/>
3
3
4 <%def name="title()">
4 <%def name="title()">
5 ${_('My account')} ${c.rhodecode_user.username} &middot; ${c.rhodecode_name}
5 ${_('My account')} ${c.rhodecode_user.username} &middot; ${c.rhodecode_name}
6 </%def>
6 </%def>
7
7
8 <%def name="breadcrumbs_links()">
8 <%def name="breadcrumbs_links()">
9 ${_('My Account')}
9 ${_('My Account')}
10 </%def>
10 </%def>
11
11
12 <%def name="page_nav()">
12 <%def name="page_nav()">
13 ${self.menu('admin')}
13 ${self.menu('admin')}
14 </%def>
14 </%def>
15
15
16 <%def name="main()">
16 <%def name="main()">
17
17
18 <div class="box box-left">
18 <div class="box box-left">
19 <!-- box / title -->
19 <!-- box / title -->
20 <div class="title">
20 <div class="title">
21 ${self.breadcrumbs()}
21 ${self.breadcrumbs()}
22 </div>
22 </div>
23 <!-- end box / title -->
23 <!-- end box / title -->
24 ${c.form|n}
24 ${c.form|n}
25 </div>
25 </div>
26
26
27 <div class="box box-right">
27 <div class="box box-right">
28 <!-- box / title -->
28 <!-- box / title -->
29 <div class="title">
29 <div class="title">
30 <h5>
30 <h5>
31 <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" value="${_('quick filter...')}" style="display: none"/>
31 <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" value="${_('quick filter...')}" style="display: none"/>
32 </h5>
32 </h5>
33 <ul class="links" style="color:#DADADA">
33 <ul class="links" style="color:#DADADA">
34 <li>
34 <li>
35 <span><a id="show_perms" class="link-white current" href="#perms">${_('My permissions')}</a> </span>
35 <span><a id="show_perms" class="link-white current" href="#perms">${_('My permissions')}</a> </span>
36 </li>
36 </li>
37 <li>
37 <li>
38 <span><a id="show_my" class="link-white" href="#my">${_('My repos')}</a> </span>
38 <span><a id="show_my" class="link-white" href="#my">${_('My repos')}</a> </span>
39 </li>
39 </li>
40 <li>
40 <li>
41 <span><a id="show_pullrequests" class="link-white" href="#pullrequests">${_('My pull requests')}</a> </span>
41 <span><a id="show_pullrequests" class="link-white" href="#pullrequests">${_('My pull requests')}</a> </span>
42 </li>
42 </li>
43 </ul>
43 </ul>
44 </div>
44 </div>
45 <!-- end box / title -->
45 <!-- end box / title -->
46 <div id="perms_container">
46 <div id="perms_container">
47 <div id="perms" class="table">
47 <div id="perms" class="table">
48 %for section in sorted(c.rhodecode_user.permissions.keys()):
48 %for section in sorted(c.rhodecode_user.permissions.keys()):
49 <div class="perms_section_head">${section.replace("_"," ").capitalize()}</div>
49 <div class="perms_section_head">${section.replace("_"," ").capitalize()}</div>
50
50
51 <div id='tbl_list_wrap_${section}' class="yui-skin-sam">
51 <div id='tbl_list_wrap_${section}' class="yui-skin-sam">
52 <table id="tbl_list_${section}">
52 <table id="tbl_list_${section}">
53 <thead>
53 <thead>
54 <tr>
54 <tr>
55 <th class="left">${_('Name')}</th>
55 <th class="left">${_('Name')}</th>
56 <th class="left">${_('Permission')}</th>
56 <th class="left">${_('Permission')}</th>
57 </thead>
57 </thead>
58 <tbody>
58 <tbody>
59 %for k in c.rhodecode_user.permissions[section]:
59 %for k in sorted(c.rhodecode_user.permissions[section], key=lambda s: s.lower):
60 <%
60 <%
61 if section != 'global':
61 if section != 'global':
62 section_perm = c.rhodecode_user.permissions[section].get(k)
62 section_perm = c.rhodecode_user.permissions[section].get(k)
63 _perm = section_perm.split('.')[-1]
63 _perm = section_perm.split('.')[-1]
64 else:
64 else:
65 _perm = section_perm = None
65 _perm = section_perm = None
66 %>
66 %>
67 %if _perm not in ['none']:
67 %if _perm not in ['none']:
68 <tr>
68 <tr>
69 <td>
69 <td>
70 %if section == 'repositories':
70 %if section == 'repositories':
71 <a href="${h.url('summary_home',repo_name=k)}">${k}</a>
71 <a href="${h.url('summary_home',repo_name=k)}">${k}</a>
72 %elif section == 'repositories_groups':
72 %elif section == 'repositories_groups':
73 <a href="${h.url('repos_group_home',group_name=k)}">${k}</a>
73 <a href="${h.url('repos_group_home',group_name=k)}">${k}</a>
74 %else:
74 %else:
75 ${k}
75 ${k}
76 %endif
76 %endif
77 </td>
77 </td>
78 <td>
78 <td>
79 %if section == 'global':
79 %if section == 'global':
80 ${h.bool2icon(True)}
80 ${h.bool2icon(True)}
81 %else:
81 %else:
82 <span class="perm_tag ${_perm}">${section_perm}</span>
82 <span class="perm_tag ${_perm}">${section_perm}</span>
83 %endif
83 %endif
84 </td>
84 </td>
85 </tr>
85 </tr>
86 %endif
86 %endif
87 %endfor
87 %endfor
88 </tbody>
88 </tbody>
89 </table>
89 </table>
90 </div>
90 </div>
91 %endfor
91 %endfor
92 </div>
92 </div>
93 </div>
93 </div>
94 <div id="my_container" style="display:none">
94 <div id="my_container" style="display:none">
95 <div class="table yui-skin-sam" id="repos_list_wrap"></div>
95 <div class="table yui-skin-sam" id="repos_list_wrap"></div>
96 <div id="user-paginator" style="padding: 0px 0px 0px 20px"></div>
96 <div id="user-paginator" style="padding: 0px 0px 0px 20px"></div>
97 </div>
97 </div>
98 <div id="pullrequests_container" class="table" style="display:none">
98 <div id="pullrequests_container" class="table" style="display:none">
99 ## loaded via AJAX
99 ## loaded via AJAX
100 ${_('Loading...')}
100 ${_('Loading...')}
101 </div>
101 </div>
102 </div>
102 </div>
103
103
104 <script type="text/javascript">
104 <script type="text/javascript">
105 pyroutes.register('admin_settings_my_pullrequests', "${url('admin_settings_my_pullrequests')}", []);
105 pyroutes.register('admin_settings_my_pullrequests', "${url('admin_settings_my_pullrequests')}", []);
106
106
107 var show_perms = function(e){
107 var show_perms = function(e){
108 YUD.addClass('show_perms', 'current');
108 YUD.addClass('show_perms', 'current');
109 YUD.removeClass('show_my','current');
109 YUD.removeClass('show_my','current');
110 YUD.removeClass('show_pullrequests','current');
110 YUD.removeClass('show_pullrequests','current');
111
111
112 YUD.setStyle('my_container','display','none');
112 YUD.setStyle('my_container','display','none');
113 YUD.setStyle('pullrequests_container','display','none');
113 YUD.setStyle('pullrequests_container','display','none');
114 YUD.setStyle('perms_container','display','');
114 YUD.setStyle('perms_container','display','');
115 YUD.setStyle('q_filter','display','none');
115 YUD.setStyle('q_filter','display','none');
116 }
116 }
117 YUE.on('show_perms','click',function(e){
117 YUE.on('show_perms','click',function(e){
118 show_perms();
118 show_perms();
119 })
119 })
120
120
121 var show_my = function(e){
121 var show_my = function(e){
122 YUD.addClass('show_my', 'current');
122 YUD.addClass('show_my', 'current');
123 YUD.removeClass('show_perms','current');
123 YUD.removeClass('show_perms','current');
124 YUD.removeClass('show_pullrequests','current');
124 YUD.removeClass('show_pullrequests','current');
125
125
126 YUD.setStyle('perms_container','display','none');
126 YUD.setStyle('perms_container','display','none');
127 YUD.setStyle('pullrequests_container','display','none');
127 YUD.setStyle('pullrequests_container','display','none');
128 YUD.setStyle('my_container','display','');
128 YUD.setStyle('my_container','display','');
129 YUD.setStyle('q_filter','display','');
129 YUD.setStyle('q_filter','display','');
130 if(!YUD.hasClass('show_my', 'loaded')){
130 if(!YUD.hasClass('show_my', 'loaded')){
131 table_renderer(${c.data |n});
131 table_renderer(${c.data |n});
132 YUD.addClass('show_my', 'loaded');
132 YUD.addClass('show_my', 'loaded');
133 }
133 }
134 }
134 }
135 YUE.on('show_my','click',function(e){
135 YUE.on('show_my','click',function(e){
136 show_my(e);
136 show_my(e);
137 })
137 })
138
138
139 var show_pullrequests = function(e){
139 var show_pullrequests = function(e){
140 YUD.addClass('show_pullrequests', 'current');
140 YUD.addClass('show_pullrequests', 'current');
141 YUD.removeClass('show_my','current');
141 YUD.removeClass('show_my','current');
142 YUD.removeClass('show_perms','current');
142 YUD.removeClass('show_perms','current');
143
143
144 YUD.setStyle('my_container','display','none');
144 YUD.setStyle('my_container','display','none');
145 YUD.setStyle('perms_container','display','none');
145 YUD.setStyle('perms_container','display','none');
146 YUD.setStyle('pullrequests_container','display','');
146 YUD.setStyle('pullrequests_container','display','');
147 YUD.setStyle('q_filter','display','none');
147 YUD.setStyle('q_filter','display','none');
148
148
149 var url = pyroutes.url('admin_settings_my_pullrequests');
149 var url = pyroutes.url('admin_settings_my_pullrequests');
150 if(YUD.get('show_closed') && YUD.get('show_closed').checked) {
150 if(YUD.get('show_closed') && YUD.get('show_closed').checked) {
151 var url = pyroutes.url('admin_settings_my_pullrequests', {'pr_show_closed': '1'});
151 var url = pyroutes.url('admin_settings_my_pullrequests', {'pr_show_closed': '1'});
152 }
152 }
153 ypjax(url, 'pullrequests_container', function(){
153 ypjax(url, 'pullrequests_container', function(){
154 YUE.on('show_closed','change',function (e) {
154 YUE.on('show_closed','change',function (e) {
155 show_pullrequests(e);
155 show_pullrequests(e);
156 });
156 });
157 });
157 });
158 }
158 }
159 YUE.on('show_pullrequests','click',function(e){
159 YUE.on('show_pullrequests','click',function(e){
160 show_pullrequests(e)
160 show_pullrequests(e)
161 })
161 })
162
162
163 var tabs = {
163 var tabs = {
164 'perms': show_perms,
164 'perms': show_perms,
165 'my': show_my,
165 'my': show_my,
166 'pullrequests': show_pullrequests
166 'pullrequests': show_pullrequests
167 }
167 }
168 var url = location.href.split('#');
168 var url = location.href.split('#');
169 if (url[1]) {
169 if (url[1]) {
170 //We have a hash
170 //We have a hash
171 var tabHash = url[1];
171 var tabHash = url[1];
172 var func = tabs[tabHash]
172 var func = tabs[tabHash]
173 if (func){
173 if (func){
174 func();
174 func();
175 }
175 }
176 }
176 }
177
177
178 function table_renderer(data){
178 function table_renderer(data){
179 var myDataSource = new YAHOO.util.DataSource(data);
179 var myDataSource = new YAHOO.util.DataSource(data);
180 myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
180 myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
181
181
182 myDataSource.responseSchema = {
182 myDataSource.responseSchema = {
183 resultsList: "records",
183 resultsList: "records",
184 fields: [
184 fields: [
185 {key:"menu"},
185 {key:"menu"},
186 {key:"raw_name"},
186 {key:"raw_name"},
187 {key:"name"},
187 {key:"name"},
188 {key:"last_changeset"},
188 {key:"last_changeset"},
189 {key:"action"},
189 {key:"action"},
190 ]
190 ]
191 };
191 };
192 myDataSource.doBeforeCallback = function(req,raw,res,cb) {
192 myDataSource.doBeforeCallback = function(req,raw,res,cb) {
193 // This is the filter function
193 // This is the filter function
194 var data = res.results || [],
194 var data = res.results || [],
195 filtered = [],
195 filtered = [],
196 i,l;
196 i,l;
197
197
198 if (req) {
198 if (req) {
199 req = req.toLowerCase();
199 req = req.toLowerCase();
200 for (i = 0; i<data.length; i++) {
200 for (i = 0; i<data.length; i++) {
201 var pos = data[i].raw_name.toLowerCase().indexOf(req)
201 var pos = data[i].raw_name.toLowerCase().indexOf(req)
202 if (pos != -1) {
202 if (pos != -1) {
203 filtered.push(data[i]);
203 filtered.push(data[i]);
204 }
204 }
205 }
205 }
206 res.results = filtered;
206 res.results = filtered;
207 }
207 }
208 return res;
208 return res;
209 }
209 }
210
210
211 // main table sorting
211 // main table sorting
212 var myColumnDefs = [
212 var myColumnDefs = [
213 {key:"menu",label:"",sortable:false,className:"quick_repo_menu hidden"},
213 {key:"menu",label:"",sortable:false,className:"quick_repo_menu hidden"},
214 {key:"name",label:"${_('Name')}",sortable:true,
214 {key:"name",label:"${_('Name')}",sortable:true,
215 sortOptions: { sortFunction: nameSort }},
215 sortOptions: { sortFunction: nameSort }},
216 {key:"last_changeset",label:"${_('Tip')}",sortable:true,
216 {key:"last_changeset",label:"${_('Tip')}",sortable:true,
217 sortOptions: { sortFunction: revisionSort }},
217 sortOptions: { sortFunction: revisionSort }},
218 {key:"action",label:"${_('Action')}",sortable:false},
218 {key:"action",label:"${_('Action')}",sortable:false},
219 ];
219 ];
220
220
221 var myDataTable = new YAHOO.widget.DataTable("repos_list_wrap", myColumnDefs, myDataSource,{
221 var myDataTable = new YAHOO.widget.DataTable("repos_list_wrap", myColumnDefs, myDataSource,{
222 sortedBy:{key:"name",dir:"asc"},
222 sortedBy:{key:"name",dir:"asc"},
223 paginator: new YAHOO.widget.Paginator({
223 paginator: new YAHOO.widget.Paginator({
224 rowsPerPage: 50,
224 rowsPerPage: 50,
225 alwaysVisible: false,
225 alwaysVisible: false,
226 template : "{PreviousPageLink} {FirstPageLink} {PageLinks} {LastPageLink} {NextPageLink}",
226 template : "{PreviousPageLink} {FirstPageLink} {PageLinks} {LastPageLink} {NextPageLink}",
227 pageLinks: 5,
227 pageLinks: 5,
228 containerClass: 'pagination-wh',
228 containerClass: 'pagination-wh',
229 currentPageClass: 'pager_curpage',
229 currentPageClass: 'pager_curpage',
230 pageLinkClass: 'pager_link',
230 pageLinkClass: 'pager_link',
231 nextPageLinkLabel: '&gt;',
231 nextPageLinkLabel: '&gt;',
232 previousPageLinkLabel: '&lt;',
232 previousPageLinkLabel: '&lt;',
233 firstPageLinkLabel: '&lt;&lt;',
233 firstPageLinkLabel: '&lt;&lt;',
234 lastPageLinkLabel: '&gt;&gt;',
234 lastPageLinkLabel: '&gt;&gt;',
235 containers:['user-paginator']
235 containers:['user-paginator']
236 }),
236 }),
237
237
238 MSG_SORTASC:"${_('Click to sort ascending')}",
238 MSG_SORTASC:"${_('Click to sort ascending')}",
239 MSG_SORTDESC:"${_('Click to sort descending')}",
239 MSG_SORTDESC:"${_('Click to sort descending')}",
240 MSG_EMPTY:"${_('No records found.')}",
240 MSG_EMPTY:"${_('No records found.')}",
241 MSG_ERROR:"${_('Data error.')}",
241 MSG_ERROR:"${_('Data error.')}",
242 MSG_LOADING:"${_('Loading...')}",
242 MSG_LOADING:"${_('Loading...')}",
243 }
243 }
244 );
244 );
245 myDataTable.subscribe('postRenderEvent',function(oArgs) {
245 myDataTable.subscribe('postRenderEvent',function(oArgs) {
246 tooltip_activate();
246 tooltip_activate();
247 quick_repo_menu();
247 quick_repo_menu();
248 });
248 });
249
249
250 var filterTimeout = null;
250 var filterTimeout = null;
251
251
252 updateFilter = function() {
252 updateFilter = function() {
253 // Reset timeout
253 // Reset timeout
254 filterTimeout = null;
254 filterTimeout = null;
255
255
256 // Reset sort
256 // Reset sort
257 var state = myDataTable.getState();
257 var state = myDataTable.getState();
258 state.sortedBy = {key:'name', dir:YAHOO.widget.DataTable.CLASS_ASC};
258 state.sortedBy = {key:'name', dir:YAHOO.widget.DataTable.CLASS_ASC};
259
259
260 // Get filtered data
260 // Get filtered data
261 myDataSource.sendRequest(YUD.get('q_filter').value,{
261 myDataSource.sendRequest(YUD.get('q_filter').value,{
262 success : myDataTable.onDataReturnInitializeTable,
262 success : myDataTable.onDataReturnInitializeTable,
263 failure : myDataTable.onDataReturnInitializeTable,
263 failure : myDataTable.onDataReturnInitializeTable,
264 scope : myDataTable,
264 scope : myDataTable,
265 argument: state
265 argument: state
266 });
266 });
267
267
268 };
268 };
269 YUE.on('q_filter','click',function(){
269 YUE.on('q_filter','click',function(){
270 if(!YUD.hasClass('q_filter', 'loaded')){
270 if(!YUD.hasClass('q_filter', 'loaded')){
271 YUD.get('q_filter').value = '';
271 YUD.get('q_filter').value = '';
272 //TODO: load here full list later to do search within groups
272 //TODO: load here full list later to do search within groups
273 YUD.addClass('q_filter', 'loaded');
273 YUD.addClass('q_filter', 'loaded');
274 }
274 }
275 });
275 });
276
276
277 YUE.on('q_filter','keyup',function (e) {
277 YUE.on('q_filter','keyup',function (e) {
278 clearTimeout(filterTimeout);
278 clearTimeout(filterTimeout);
279 filterTimeout = setTimeout(updateFilter,600);
279 filterTimeout = setTimeout(updateFilter,600);
280 });
280 });
281
281
282 }
282 }
283 </script>
283 </script>
284 </%def>
284 </%def>
@@ -1,228 +1,228 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/base/base.html"/>
2 <%inherit file="/base/base.html"/>
3
3
4 <%def name="title()">
4 <%def name="title()">
5 ${_('Edit user group')} ${c.users_group.users_group_name} &middot; ${c.rhodecode_name}
5 ${_('Edit user group')} ${c.users_group.users_group_name} &middot; ${c.rhodecode_name}
6 </%def>
6 </%def>
7
7
8 <%def name="breadcrumbs_links()">
8 <%def name="breadcrumbs_links()">
9 ${h.link_to(_('Admin'),h.url('admin_home'))}
9 ${h.link_to(_('Admin'),h.url('admin_home'))}
10 &raquo;
10 &raquo;
11 ${h.link_to(_('UserGroups'),h.url('users_groups'))}
11 ${h.link_to(_('UserGroups'),h.url('users_groups'))}
12 &raquo;
12 &raquo;
13 ${_('edit')} "${c.users_group.users_group_name}"
13 ${_('edit')} "${c.users_group.users_group_name}"
14 </%def>
14 </%def>
15
15
16 <%def name="page_nav()">
16 <%def name="page_nav()">
17 ${self.menu('admin')}
17 ${self.menu('admin')}
18 </%def>
18 </%def>
19
19
20 <%def name="main()">
20 <%def name="main()">
21 <div class="box box-left">
21 <div class="box box-left">
22 <!-- box / title -->
22 <!-- box / title -->
23 <div class="title">
23 <div class="title">
24 ${self.breadcrumbs()}
24 ${self.breadcrumbs()}
25 </div>
25 </div>
26 <!-- end box / title -->
26 <!-- end box / title -->
27 ${h.form(url('users_group', id=c.users_group.users_group_id),method='put', id='edit_users_group')}
27 ${h.form(url('users_group', id=c.users_group.users_group_id),method='put', id='edit_users_group')}
28 <div class="form">
28 <div class="form">
29 <!-- fields -->
29 <!-- fields -->
30 <div class="fields">
30 <div class="fields">
31 <div class="field">
31 <div class="field">
32 <div class="label">
32 <div class="label">
33 <label for="users_group_name">${_('Group name')}:</label>
33 <label for="users_group_name">${_('Group name')}:</label>
34 </div>
34 </div>
35 <div class="input">
35 <div class="input">
36 ${h.text('users_group_name',class_='small')}
36 ${h.text('users_group_name',class_='small')}
37 </div>
37 </div>
38 </div>
38 </div>
39
39
40 <div class="field">
40 <div class="field">
41 <div class="label label-checkbox">
41 <div class="label label-checkbox">
42 <label for="users_group_active">${_('Active')}:</label>
42 <label for="users_group_active">${_('Active')}:</label>
43 </div>
43 </div>
44 <div class="checkboxes">
44 <div class="checkboxes">
45 ${h.checkbox('users_group_active',value=True)}
45 ${h.checkbox('users_group_active',value=True)}
46 </div>
46 </div>
47 </div>
47 </div>
48 <div class="field">
48 <div class="field">
49 <div class="label">
49 <div class="label">
50 <label for="users_group_active">${_('Members')}:</label>
50 <label for="users_group_active">${_('Members')}:</label>
51 </div>
51 </div>
52 <div class="select">
52 <div class="select">
53 <table>
53 <table>
54 <tr>
54 <tr>
55 <td>
55 <td>
56 <div>
56 <div>
57 <div style="float:left">
57 <div style="float:left">
58 <div class="text" style="padding: 0px 0px 6px;">${_('Chosen group members')}</div>
58 <div class="text" style="padding: 0px 0px 6px;">${_('Chosen group members')}</div>
59 ${h.select('users_group_members',[x[0] for x in c.group_members],c.group_members,multiple=True,size=8,style="min-width:210px")}
59 ${h.select('users_group_members',[x[0] for x in c.group_members],c.group_members,multiple=True,size=8,style="min-width:210px")}
60 <div id="remove_all_elements" style="cursor:pointer;text-align:center">
60 <div id="remove_all_elements" style="cursor:pointer;text-align:center">
61 ${_('Remove all elements')}
61 ${_('Remove all elements')}
62 <img alt="remove" style="vertical-align:text-bottom" src="${h.url('/images/icons/arrow_right.png')}"/>
62 <img alt="remove" style="vertical-align:text-bottom" src="${h.url('/images/icons/arrow_right.png')}"/>
63 </div>
63 </div>
64 </div>
64 </div>
65 <div style="float:left;width:20px;padding-top:50px">
65 <div style="float:left;width:20px;padding-top:50px">
66 <img alt="add" id="add_element"
66 <img alt="add" id="add_element"
67 style="padding:2px;cursor:pointer"
67 style="padding:2px;cursor:pointer"
68 src="${h.url('/images/icons/arrow_left.png')}"/>
68 src="${h.url('/images/icons/arrow_left.png')}"/>
69 <br />
69 <br />
70 <img alt="remove" id="remove_element"
70 <img alt="remove" id="remove_element"
71 style="padding:2px;cursor:pointer"
71 style="padding:2px;cursor:pointer"
72 src="${h.url('/images/icons/arrow_right.png')}"/>
72 src="${h.url('/images/icons/arrow_right.png')}"/>
73 </div>
73 </div>
74 <div style="float:left">
74 <div style="float:left">
75 <div class="text" style="padding: 0px 0px 6px;">${_('Available members')}</div>
75 <div class="text" style="padding: 0px 0px 6px;">${_('Available members')}</div>
76 ${h.select('available_members',[],c.available_members,multiple=True,size=8,style="min-width:210px")}
76 ${h.select('available_members',[],c.available_members,multiple=True,size=8,style="min-width:210px")}
77 <div id="add_all_elements" style="cursor:pointer;text-align:center">
77 <div id="add_all_elements" style="cursor:pointer;text-align:center">
78 <img alt="add" style="vertical-align:text-bottom" src="${h.url('/images/icons/arrow_left.png')}"/>
78 <img alt="add" style="vertical-align:text-bottom" src="${h.url('/images/icons/arrow_left.png')}"/>
79 ${_('Add all elements')}
79 ${_('Add all elements')}
80 </div>
80 </div>
81 </div>
81 </div>
82 </div>
82 </div>
83 </td>
83 </td>
84 </tr>
84 </tr>
85 </table>
85 </table>
86 </div>
86 </div>
87
87
88 </div>
88 </div>
89 <div class="buttons">
89 <div class="buttons">
90 ${h.submit('save',_('save'),class_="ui-btn large")}
90 ${h.submit('save',_('save'),class_="ui-btn large")}
91 </div>
91 </div>
92 </div>
92 </div>
93 </div>
93 </div>
94 ${h.end_form()}
94 ${h.end_form()}
95 </div>
95 </div>
96
96
97 <div class="box box-right">
97 <div class="box box-right">
98 <!-- box / title -->
98 <!-- box / title -->
99 <div class="title">
99 <div class="title">
100 <h5>${_('Permissions')}</h5>
100 <h5>${_('Permissions')}</h5>
101 </div>
101 </div>
102 ${h.form(url('users_group_perm', id=c.users_group.users_group_id), method='put')}
102 ${h.form(url('users_group_perm', id=c.users_group.users_group_id), method='put')}
103 <div class="form">
103 <div class="form">
104 <!-- fields -->
104 <!-- fields -->
105 <div class="fields">
105 <div class="fields">
106 <div class="field">
106 <div class="field">
107 <div class="label label-checkbox">
107 <div class="label label-checkbox">
108 <label for="inherit_permissions">${_('Inherit default permissions')}:</label>
108 <label for="inherit_permissions">${_('Inherit default permissions')}:</label>
109 </div>
109 </div>
110 <div class="checkboxes">
110 <div class="checkboxes">
111 ${h.checkbox('inherit_default_permissions',value=True)}
111 ${h.checkbox('inherit_default_permissions',value=True)}
112 </div>
112 </div>
113 <span class="help-block">${h.literal(_('Select to inherit permissions from %s settings. '
113 <span class="help-block">${h.literal(_('Select to inherit permissions from %s settings. '
114 'With this selected below options does not have any action') % h.link_to('default', url('edit_permission', id='default')))}</span>
114 'With this selected below options does not have any action') % h.link_to('default', url('edit_permission', id='default')))}</span>
115 </div>
115 </div>
116 <div id="inherit_overlay" style="${'opacity:0.3' if c.users_group.inherit_default_permissions else ''}" >
116 <div id="inherit_overlay" style="${'opacity:0.3' if c.users_group.inherit_default_permissions else ''}" >
117 <div class="field">
117 <div class="field">
118 <div class="label label-checkbox">
118 <div class="label label-checkbox">
119 <label for="create_repo_perm">${_('Create repositories')}:</label>
119 <label for="create_repo_perm">${_('Create repositories')}:</label>
120 </div>
120 </div>
121 <div class="checkboxes">
121 <div class="checkboxes">
122 ${h.checkbox('create_repo_perm',value=True)}
122 ${h.checkbox('create_repo_perm',value=True)}
123 </div>
123 </div>
124 </div>
124 </div>
125 <div class="field">
125 <div class="field">
126 <div class="label label-checkbox">
126 <div class="label label-checkbox">
127 <label for="fork_repo_perm">${_('Fork repositories')}:</label>
127 <label for="fork_repo_perm">${_('Fork repositories')}:</label>
128 </div>
128 </div>
129 <div class="checkboxes">
129 <div class="checkboxes">
130 ${h.checkbox('fork_repo_perm',value=True)}
130 ${h.checkbox('fork_repo_perm',value=True)}
131 </div>
131 </div>
132 </div>
132 </div>
133 </div>
133 </div>
134 <div class="buttons">
134 <div class="buttons">
135 ${h.submit('save',_('Save'),class_="ui-btn large")}
135 ${h.submit('save',_('Save'),class_="ui-btn large")}
136 ${h.reset('reset',_('Reset'),class_="ui-btn large")}
136 ${h.reset('reset',_('Reset'),class_="ui-btn large")}
137 </div>
137 </div>
138 </div>
138 </div>
139 </div>
139 </div>
140 ${h.end_form()}
140 ${h.end_form()}
141 </div>
141 </div>
142
142
143 <div class="box box-right">
143 <div class="box box-right">
144 <!-- box / title -->
144 <!-- box / title -->
145 <div class="title">
145 <div class="title">
146 <h5>${_('Group members')}</h5>
146 <h5>${_('Group members')}</h5>
147 </div>
147 </div>
148
148
149 <div class="group_members_wrap">
149 <div class="group_members_wrap">
150 % if c.group_members_obj:
150 % if c.group_members_obj:
151 <ul class="group_members">
151 <ul class="group_members">
152 %for user in c.group_members_obj:
152 %for user in c.group_members_obj:
153 <li>
153 <li>
154 <div class="group_member">
154 <div class="group_member">
155 <div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(user.email,24)}"/> </div>
155 <div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(user.email,24)}"/> </div>
156 <div>${h.link_to(user.username, h.url('edit_user',id=user.user_id))}</div>
156 <div>${h.link_to(user.username, h.url('edit_user',id=user.user_id))}</div>
157 <div>${user.full_name}</div>
157 <div>${user.full_name}</div>
158 </div>
158 </div>
159 </li>
159 </li>
160 %endfor
160 %endfor
161 </ul>
161 </ul>
162 %else:
162 %else:
163 <span class="empty_data">${_('No members yet')}</span>
163 <span class="empty_data">${_('No members yet')}</span>
164 %endif
164 %endif
165 </div>
165 </div>
166 </div>
166 </div>
167
167
168 <div class="box box-left">
168 <div class="box box-left">
169 <!-- box / title -->
169 <!-- box / title -->
170 <div class="title">
170 <div class="title">
171 <h5>${_('Permissions defined for this group')}</h5>
171 <h5>${_('Permissions defined for this group')}</h5>
172 </div>
172 </div>
173 ## permissions overview
173 ## permissions overview
174 <div id="perms" class="table">
174 <div id="perms" class="table">
175 %for section in sorted(c.users_group.permissions.keys()):
175 %for section in sorted(c.users_group.permissions.keys()):
176 <div class="perms_section_head">${section.replace("_"," ").capitalize()}</div>
176 <div class="perms_section_head">${section.replace("_"," ").capitalize()}</div>
177 %if not c.users_group.permissions:
177 %if not c.users_group.permissions:
178 <span class="empty_data">${_('No permissions set yet')}</span>
178 <span class="empty_data">${_('No permissions set yet')}</span>
179 %else:
179 %else:
180 <div id='tbl_list_wrap_${section}' class="yui-skin-sam">
180 <div id='tbl_list_wrap_${section}' class="yui-skin-sam">
181 <table id="tbl_list_repository">
181 <table id="tbl_list_repository">
182 <thead>
182 <thead>
183 <tr>
183 <tr>
184 <th class="left">${_('Name')}</th>
184 <th class="left">${_('Name')}</th>
185 <th class="left">${_('Permission')}</th>
185 <th class="left">${_('Permission')}</th>
186 <th class="left">${_('Edit Permission')}</th>
186 <th class="left">${_('Edit Permission')}</th>
187 </thead>
187 </thead>
188 <tbody>
188 <tbody>
189 %for k in c.users_group.permissions[section]:
189 %for k in sorted(c.users_group.permissions[section], key=lambda s: s.lower):
190 <%
190 <%
191 section_perm = c.users_group.permissions[section].get(k)
191 section_perm = c.users_group.permissions[section].get(k)
192 _perm = section_perm.split('.')[-1]
192 _perm = section_perm.split('.')[-1]
193 %>
193 %>
194 <tr>
194 <tr>
195 <td>
195 <td>
196 %if section == 'repositories':
196 %if section == 'repositories':
197 <a href="${h.url('summary_home',repo_name=k)}">${k}</a>
197 <a href="${h.url('summary_home',repo_name=k)}">${k}</a>
198 %elif section == 'repositories_groups':
198 %elif section == 'repositories_groups':
199 <a href="${h.url('repos_group_home',group_name=k)}">${k}</a>
199 <a href="${h.url('repos_group_home',group_name=k)}">${k}</a>
200 %endif
200 %endif
201 </td>
201 </td>
202 <td>
202 <td>
203 <span class="perm_tag ${_perm}">${section_perm}</span>
203 <span class="perm_tag ${_perm}">${section_perm}</span>
204 </td>
204 </td>
205 <td>
205 <td>
206 %if section == 'repositories':
206 %if section == 'repositories':
207 <a href="${h.url('edit_repo',repo_name=k,anchor='permissions_manage')}">${_('edit')}</a>
207 <a href="${h.url('edit_repo',repo_name=k,anchor='permissions_manage')}">${_('edit')}</a>
208 %elif section == 'repositories_groups':
208 %elif section == 'repositories_groups':
209 <a href="${h.url('edit_repos_group',group_name=k,anchor='permissions_manage')}">${_('edit')}</a>
209 <a href="${h.url('edit_repos_group',group_name=k,anchor='permissions_manage')}">${_('edit')}</a>
210 %else:
210 %else:
211 --
211 --
212 %endif
212 %endif
213 </td>
213 </td>
214 </tr>
214 </tr>
215 %endfor
215 %endfor
216 </tbody>
216 </tbody>
217 </table>
217 </table>
218 </div>
218 </div>
219 %endif
219 %endif
220 %endfor
220 %endfor
221 </div>
221 </div>
222 </div>
222 </div>
223
223
224
224
225 <script type="text/javascript">
225 <script type="text/javascript">
226 MultiSelectWidget('users_group_members','available_members','edit_users_group');
226 MultiSelectWidget('users_group_members','available_members','edit_users_group');
227 </script>
227 </script>
228 </%def>
228 </%def>
General Comments 0
You need to be logged in to leave comments. Login now