# HG changeset patch # User Marcin Kuzminski # Date 1337727517 -7200 # Node ID b0fef8a77568d4459355aa553ee43b30c72f2346 # Parent 20e307d5250fef6047a6818d39f3c067d879c445 Added simple UI for admin to manage emails map diff -r 20e307d5250f -r b0fef8a77568 rhodecode/config/routing.py --- a/rhodecode/config/routing.py Wed May 23 00:11:45 2012 +0200 +++ b/rhodecode/config/routing.py Wed May 23 00:58:37 2012 +0200 @@ -212,6 +212,10 @@ #EXTRAS USER ROUTES m.connect("user_perm", "/users_perm/{id}", action="update_perm", conditions=dict(method=["PUT"])) + m.connect("user_emails", "/users_emails/{id}", + action="add_email", conditions=dict(method=["PUT"])) + m.connect("user_emails_delete", "/users_emails/{id}", + action="delete_email", conditions=dict(method=["DELETE"])) #ADMIN USERS REST ROUTES with rmap.submapper(path_prefix=ADMIN_PREFIX, diff -r 20e307d5250f -r b0fef8a77568 rhodecode/controllers/admin/users.py --- a/rhodecode/controllers/admin/users.py Wed May 23 00:11:45 2012 +0200 +++ b/rhodecode/controllers/admin/users.py Wed May 23 00:58:37 2012 +0200 @@ -38,7 +38,7 @@ from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator from rhodecode.lib.base import BaseController, render -from rhodecode.model.db import User, Permission +from rhodecode.model.db import User, Permission, UserEmailMap from rhodecode.model.forms import UserForm from rhodecode.model.user import UserModel from rhodecode.model.meta import Session @@ -171,7 +171,8 @@ c.user.permissions = {} c.granted_permissions = UserModel().fill_perms(c.user)\ .permissions['global'] - + c.user_email_map = UserEmailMap.query()\ + .filter(UserEmailMap.user == c.user).all() defaults = c.user.get_dict() perm = Permission.get_by_key('hg.create.repository') defaults.update({'create_repo_perm': UserModel().has_perm(id, perm)}) @@ -209,3 +210,30 @@ category='success') Session.commit() return redirect(url('edit_user', id=id)) + + def add_email(self, id): + """PUT /user_emails/id: Update an existing item""" + # url('user_emails', id=ID, method='put') + + #TODO: validation and form !!! + email = request.POST.get('new_email') + user_model = UserModel() + + try: + user_model.add_extra_email(id, email) + Session.commit() + h.flash(_("Added email %s to user" % email), category='success') + except Exception: + log.error(traceback.format_exc()) + h.flash(_('An error occurred during email saving'), + category='error') + return redirect(url('edit_user', id=id)) + + def delete_email(self, id): + """DELETE /user_emails_delete/id: Delete an existing item""" + # url('user_emails_delete', id=ID, method='delete') + user_model = UserModel() + user_model.delete_extra_email(id, request.POST.get('del_email')) + Session.commit() + h.flash(_("Removed email from user"), category='success') + return redirect(url('edit_user', id=id)) diff -r 20e307d5250f -r b0fef8a77568 rhodecode/model/user.py --- a/rhodecode/model/user.py Wed May 23 00:11:45 2012 +0200 +++ b/rhodecode/model/user.py Wed May 23 00:58:37 2012 +0200 @@ -36,7 +36,7 @@ from rhodecode.model.db import User, UserRepoToPerm, Repository, Permission, \ UserToPerm, UsersGroupRepoToPerm, UsersGroupToPerm, UsersGroupMember, \ Notification, RepoGroup, UserRepoGroupToPerm, UsersGroup,\ - UsersGroupRepoGroupToPerm + UsersGroupRepoGroupToPerm, UserEmailMap from rhodecode.lib.exceptions import DefaultUserException, \ UserOwnsReposException @@ -587,3 +587,29 @@ .scalar() if obj: self.sa.delete(obj) + + def add_extra_email(self, user, email): + """ + Adds email address to UserEmailMap + + :param user: + :param email: + """ + user = self.__get_user(user) + obj = UserEmailMap() + obj.user = user + obj.email = email + self.sa.add(obj) + return obj + + def delete_extra_email(self, user, email_id): + """ + Removes email address from UserEmailMap + + :param user: + :param email_id: + """ + user = self.__get_user(user) + obj = UserEmailMap.query().get(email_id) + if obj: + self.sa.delete(obj) \ No newline at end of file diff -r 20e307d5250f -r b0fef8a77568 rhodecode/public/css/style.css --- a/rhodecode/public/css/style.css Wed May 23 00:11:45 2012 +0200 +++ b/rhodecode/public/css/style.css Wed May 23 00:58:37 2012 +0200 @@ -3712,6 +3712,21 @@ padding:0px 0px 0px 10px; } +.emails_wrap{ + padding: 0px 20px; +} + +.emails_wrap .email_entry{ + height: 30px; + padding:0px 0px 0px 10px; +} +.emails_wrap .email_entry .email{ + float: left +} +.emails_wrap .email_entry .email_action{ + float: left +} + /*README STYLE*/ div.readme { diff -r 20e307d5250f -r b0fef8a77568 rhodecode/templates/admin/users/user_edit.html --- a/rhodecode/templates/admin/users/user_edit.html Wed May 23 00:11:45 2012 +0200 +++ b/rhodecode/templates/admin/users/user_edit.html Wed May 23 00:58:37 2012 +0200 @@ -158,4 +158,48 @@ ${h.end_form()} +
+ +
+
${_('Email addresses')}
+
+ +
+ + %for em in c.user_email_map: + + + + + + %endfor +
gravatar
+ ${h.form(url('user_emails_delete', id=c.user.user_id),method='delete')} + ${h.hidden('del_email',em.email_id)} + ${h.submit('remove_',_('delete'),id="remove_email_%s" % em.email_id, + class_="delete_icon action_button", onclick="return confirm('"+_('Confirm to delete this email: %s') % em.email+"');")} + ${h.end_form()} +
+
+ + ${h.form(url('user_emails', id=c.user.user_id),method='put')} +
+ +
+
+
+ +
+
+ ${h.text('new_email', class_='medium')} +
+
+
+ ${h.submit('save',_('Add'),class_="ui-button")} + ${h.reset('reset',_('Reset'),class_="ui-button")} +
+
+
+ ${h.end_form()} +