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