##// END OF EJS Templates
Added simple UI for admin to manage emails map
marcink -
r2330:b0fef8a7 codereview
parent child Browse files
Show More
@@ -212,6 +212,10 b' def make_map(config):'
212 #EXTRAS USER ROUTES
212 #EXTRAS USER ROUTES
213 m.connect("user_perm", "/users_perm/{id}",
213 m.connect("user_perm", "/users_perm/{id}",
214 action="update_perm", conditions=dict(method=["PUT"]))
214 action="update_perm", conditions=dict(method=["PUT"]))
215 m.connect("user_emails", "/users_emails/{id}",
216 action="add_email", conditions=dict(method=["PUT"]))
217 m.connect("user_emails_delete", "/users_emails/{id}",
218 action="delete_email", conditions=dict(method=["DELETE"]))
215
219
216 #ADMIN USERS REST ROUTES
220 #ADMIN USERS REST ROUTES
217 with rmap.submapper(path_prefix=ADMIN_PREFIX,
221 with rmap.submapper(path_prefix=ADMIN_PREFIX,
@@ -38,7 +38,7 b' from rhodecode.lib import helpers as h'
38 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
38 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
39 from rhodecode.lib.base import BaseController, render
39 from rhodecode.lib.base import BaseController, render
40
40
41 from rhodecode.model.db import User, Permission
41 from rhodecode.model.db import User, Permission, UserEmailMap
42 from rhodecode.model.forms import UserForm
42 from rhodecode.model.forms import UserForm
43 from rhodecode.model.user import UserModel
43 from rhodecode.model.user import UserModel
44 from rhodecode.model.meta import Session
44 from rhodecode.model.meta import Session
@@ -171,7 +171,8 b' class UsersController(BaseController):'
171 c.user.permissions = {}
171 c.user.permissions = {}
172 c.granted_permissions = UserModel().fill_perms(c.user)\
172 c.granted_permissions = UserModel().fill_perms(c.user)\
173 .permissions['global']
173 .permissions['global']
174
174 c.user_email_map = UserEmailMap.query()\
175 .filter(UserEmailMap.user == c.user).all()
175 defaults = c.user.get_dict()
176 defaults = c.user.get_dict()
176 perm = Permission.get_by_key('hg.create.repository')
177 perm = Permission.get_by_key('hg.create.repository')
177 defaults.update({'create_repo_perm': UserModel().has_perm(id, perm)})
178 defaults.update({'create_repo_perm': UserModel().has_perm(id, perm)})
@@ -209,3 +210,30 b' class UsersController(BaseController):'
209 category='success')
210 category='success')
210 Session.commit()
211 Session.commit()
211 return redirect(url('edit_user', id=id))
212 return redirect(url('edit_user', id=id))
213
214 def add_email(self, id):
215 """PUT /user_emails/id: Update an existing item"""
216 # url('user_emails', id=ID, method='put')
217
218 #TODO: validation and form !!!
219 email = request.POST.get('new_email')
220 user_model = UserModel()
221
222 try:
223 user_model.add_extra_email(id, email)
224 Session.commit()
225 h.flash(_("Added email %s to user" % email), category='success')
226 except Exception:
227 log.error(traceback.format_exc())
228 h.flash(_('An error occurred during email saving'),
229 category='error')
230 return redirect(url('edit_user', id=id))
231
232 def delete_email(self, id):
233 """DELETE /user_emails_delete/id: Delete an existing item"""
234 # url('user_emails_delete', id=ID, method='delete')
235 user_model = UserModel()
236 user_model.delete_extra_email(id, request.POST.get('del_email'))
237 Session.commit()
238 h.flash(_("Removed email from user"), category='success')
239 return redirect(url('edit_user', id=id))
@@ -36,7 +36,7 b' from rhodecode.model import BaseModel'
36 from rhodecode.model.db import User, UserRepoToPerm, Repository, Permission, \
36 from rhodecode.model.db import User, UserRepoToPerm, Repository, Permission, \
37 UserToPerm, UsersGroupRepoToPerm, UsersGroupToPerm, UsersGroupMember, \
37 UserToPerm, UsersGroupRepoToPerm, UsersGroupToPerm, UsersGroupMember, \
38 Notification, RepoGroup, UserRepoGroupToPerm, UsersGroup,\
38 Notification, RepoGroup, UserRepoGroupToPerm, UsersGroup,\
39 UsersGroupRepoGroupToPerm
39 UsersGroupRepoGroupToPerm, UserEmailMap
40 from rhodecode.lib.exceptions import DefaultUserException, \
40 from rhodecode.lib.exceptions import DefaultUserException, \
41 UserOwnsReposException
41 UserOwnsReposException
42
42
@@ -587,3 +587,29 b' class UserModel(BaseModel):'
587 .scalar()
587 .scalar()
588 if obj:
588 if obj:
589 self.sa.delete(obj)
589 self.sa.delete(obj)
590
591 def add_extra_email(self, user, email):
592 """
593 Adds email address to UserEmailMap
594
595 :param user:
596 :param email:
597 """
598 user = self.__get_user(user)
599 obj = UserEmailMap()
600 obj.user = user
601 obj.email = email
602 self.sa.add(obj)
603 return obj
604
605 def delete_extra_email(self, user, email_id):
606 """
607 Removes email address from UserEmailMap
608
609 :param user:
610 :param email_id:
611 """
612 user = self.__get_user(user)
613 obj = UserEmailMap.query().get(email_id)
614 if obj:
615 self.sa.delete(obj) No newline at end of file
@@ -3712,6 +3712,21 b' div#legend_container table td,div#legend'
3712 padding:0px 0px 0px 10px;
3712 padding:0px 0px 0px 10px;
3713 }
3713 }
3714
3714
3715 .emails_wrap{
3716 padding: 0px 20px;
3717 }
3718
3719 .emails_wrap .email_entry{
3720 height: 30px;
3721 padding:0px 0px 0px 10px;
3722 }
3723 .emails_wrap .email_entry .email{
3724 float: left
3725 }
3726 .emails_wrap .email_entry .email_action{
3727 float: left
3728 }
3729
3715 /*README STYLE*/
3730 /*README STYLE*/
3716
3731
3717 div.readme {
3732 div.readme {
@@ -158,4 +158,48 b''
158 </div>
158 </div>
159 ${h.end_form()}
159 ${h.end_form()}
160 </div>
160 </div>
161 <div class="box box-right">
162 <!-- box / title -->
163 <div class="title">
164 <h5>${_('Email addresses')}</h5>
165 </div>
166
167 <div class="emails_wrap">
168 <table class="noborder">
169 %for em in c.user_email_map:
170 <tr>
171 <td><div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(em.user.email,16)}"/> </div></td>
172 <td><div class="email">${em.email}</div></td>
173 <td>
174 ${h.form(url('user_emails_delete', id=c.user.user_id),method='delete')}
175 ${h.hidden('del_email',em.email_id)}
176 ${h.submit('remove_',_('delete'),id="remove_email_%s" % em.email_id,
177 class_="delete_icon action_button", onclick="return confirm('"+_('Confirm to delete this email: %s') % em.email+"');")}
178 ${h.end_form()}
179 </td>
180 </tr>
181 %endfor
182 </table>
183 </div>
184
185 ${h.form(url('user_emails', id=c.user.user_id),method='put')}
186 <div class="form">
187 <!-- fields -->
188 <div class="fields">
189 <div class="field">
190 <div class="label">
191 <label for="email">${_('New email address')}:</label>
192 </div>
193 <div class="input">
194 ${h.text('new_email', class_='medium')}
195 </div>
196 </div>
197 <div class="buttons">
198 ${h.submit('save',_('Add'),class_="ui-button")}
199 ${h.reset('reset',_('Reset'),class_="ui-button")}
200 </div>
201 </div>
202 </div>
203 ${h.end_form()}
204 </div>
161 </%def>
205 </%def>
General Comments 0
You need to be logged in to leave comments. Login now