##// END OF EJS Templates
fixed typo in repo create
marcink -
r2484:69625d67 beta
parent child Browse files
Show More
@@ -1,427 +1,427 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 rhodecode.controllers.admin.settings
3 rhodecode.controllers.admin.settings
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5
5
6 settings controller for rhodecode admin
6 settings controller for rhodecode admin
7
7
8 :created_on: Jul 14, 2010
8 :created_on: Jul 14, 2010
9 :author: marcink
9 :author: marcink
10 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
10 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
11 :license: GPLv3, see COPYING for more details.
11 :license: GPLv3, see COPYING for more details.
12 """
12 """
13 # This program is free software: you can redistribute it and/or modify
13 # This program is free software: you can redistribute it and/or modify
14 # it under the terms of the GNU General Public License as published by
14 # it under the terms of the GNU General Public License as published by
15 # the Free Software Foundation, either version 3 of the License, or
15 # the Free Software Foundation, either version 3 of the License, or
16 # (at your option) any later version.
16 # (at your option) any later version.
17 #
17 #
18 # This program is distributed in the hope that it will be useful,
18 # This program is distributed in the hope that it will be useful,
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 # GNU General Public License for more details.
21 # GNU General Public License for more details.
22 #
22 #
23 # You should have received a copy of the GNU General Public License
23 # You should have received a copy of the GNU General Public License
24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
25
25
26 import logging
26 import logging
27 import traceback
27 import traceback
28 import formencode
28 import formencode
29 import pkg_resources
29 import pkg_resources
30 import platform
30 import platform
31
31
32 from sqlalchemy import func
32 from sqlalchemy import func
33 from formencode import htmlfill
33 from formencode import htmlfill
34 from pylons import request, session, tmpl_context as c, url, config
34 from pylons import request, session, tmpl_context as c, url, config
35 from pylons.controllers.util import abort, redirect
35 from pylons.controllers.util import abort, redirect
36 from pylons.i18n.translation import _
36 from pylons.i18n.translation import _
37
37
38 from rhodecode.lib import helpers as h
38 from rhodecode.lib import helpers as h
39 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \
39 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \
40 HasPermissionAnyDecorator, NotAnonymous
40 HasPermissionAnyDecorator, NotAnonymous
41 from rhodecode.lib.base import BaseController, render
41 from rhodecode.lib.base import BaseController, render
42 from rhodecode.lib.celerylib import tasks, run_task
42 from rhodecode.lib.celerylib import tasks, run_task
43 from rhodecode.lib.utils import repo2db_mapper, invalidate_cache, \
43 from rhodecode.lib.utils import repo2db_mapper, invalidate_cache, \
44 set_rhodecode_config, repo_name_slug
44 set_rhodecode_config, repo_name_slug
45 from rhodecode.model.db import RhodeCodeUi, Repository, RepoGroup, \
45 from rhodecode.model.db import RhodeCodeUi, Repository, RepoGroup, \
46 RhodeCodeSetting
46 RhodeCodeSetting
47 from rhodecode.model.forms import UserForm, ApplicationSettingsForm, \
47 from rhodecode.model.forms import UserForm, ApplicationSettingsForm, \
48 ApplicationUiSettingsForm
48 ApplicationUiSettingsForm
49 from rhodecode.model.scm import ScmModel
49 from rhodecode.model.scm import ScmModel
50 from rhodecode.model.user import UserModel
50 from rhodecode.model.user import UserModel
51 from rhodecode.model.db import User
51 from rhodecode.model.db import User
52 from rhodecode.model.notification import EmailNotificationModel
52 from rhodecode.model.notification import EmailNotificationModel
53 from rhodecode.model.meta import Session
53 from rhodecode.model.meta import Session
54
54
55 log = logging.getLogger(__name__)
55 log = logging.getLogger(__name__)
56
56
57
57
58 class SettingsController(BaseController):
58 class SettingsController(BaseController):
59 """REST Controller styled on the Atom Publishing Protocol"""
59 """REST Controller styled on the Atom Publishing Protocol"""
60 # To properly map this controller, ensure your config/routing.py
60 # To properly map this controller, ensure your config/routing.py
61 # file has a resource setup:
61 # file has a resource setup:
62 # map.resource('setting', 'settings', controller='admin/settings',
62 # map.resource('setting', 'settings', controller='admin/settings',
63 # path_prefix='/admin', name_prefix='admin_')
63 # path_prefix='/admin', name_prefix='admin_')
64
64
65 @LoginRequired()
65 @LoginRequired()
66 def __before__(self):
66 def __before__(self):
67 c.admin_user = session.get('admin_user')
67 c.admin_user = session.get('admin_user')
68 c.admin_username = session.get('admin_username')
68 c.admin_username = session.get('admin_username')
69 c.modules = sorted([(p.project_name, p.version)
69 c.modules = sorted([(p.project_name, p.version)
70 for p in pkg_resources.working_set],
70 for p in pkg_resources.working_set],
71 key=lambda k: k[0].lower())
71 key=lambda k: k[0].lower())
72 c.py_version = platform.python_version()
72 c.py_version = platform.python_version()
73 c.platform = platform.platform()
73 c.platform = platform.platform()
74 super(SettingsController, self).__before__()
74 super(SettingsController, self).__before__()
75
75
76 @HasPermissionAllDecorator('hg.admin')
76 @HasPermissionAllDecorator('hg.admin')
77 def index(self, format='html'):
77 def index(self, format='html'):
78 """GET /admin/settings: All items in the collection"""
78 """GET /admin/settings: All items in the collection"""
79 # url('admin_settings')
79 # url('admin_settings')
80
80
81 defaults = RhodeCodeSetting.get_app_settings()
81 defaults = RhodeCodeSetting.get_app_settings()
82 defaults.update(self.get_hg_ui_settings())
82 defaults.update(self.get_hg_ui_settings())
83
83
84 return htmlfill.render(
84 return htmlfill.render(
85 render('admin/settings/settings.html'),
85 render('admin/settings/settings.html'),
86 defaults=defaults,
86 defaults=defaults,
87 encoding="UTF-8",
87 encoding="UTF-8",
88 force_defaults=False
88 force_defaults=False
89 )
89 )
90
90
91 @HasPermissionAllDecorator('hg.admin')
91 @HasPermissionAllDecorator('hg.admin')
92 def create(self):
92 def create(self):
93 """POST /admin/settings: Create a new item"""
93 """POST /admin/settings: Create a new item"""
94 # url('admin_settings')
94 # url('admin_settings')
95
95
96 @HasPermissionAllDecorator('hg.admin')
96 @HasPermissionAllDecorator('hg.admin')
97 def new(self, format='html'):
97 def new(self, format='html'):
98 """GET /admin/settings/new: Form to create a new item"""
98 """GET /admin/settings/new: Form to create a new item"""
99 # url('admin_new_setting')
99 # url('admin_new_setting')
100
100
101 @HasPermissionAllDecorator('hg.admin')
101 @HasPermissionAllDecorator('hg.admin')
102 def update(self, setting_id):
102 def update(self, setting_id):
103 """PUT /admin/settings/setting_id: Update an existing item"""
103 """PUT /admin/settings/setting_id: Update an existing item"""
104 # Forms posted to this method should contain a hidden field:
104 # Forms posted to this method should contain a hidden field:
105 # <input type="hidden" name="_method" value="PUT" />
105 # <input type="hidden" name="_method" value="PUT" />
106 # Or using helpers:
106 # Or using helpers:
107 # h.form(url('admin_setting', setting_id=ID),
107 # h.form(url('admin_setting', setting_id=ID),
108 # method='put')
108 # method='put')
109 # url('admin_setting', setting_id=ID)
109 # url('admin_setting', setting_id=ID)
110 if setting_id == 'mapping':
110 if setting_id == 'mapping':
111 rm_obsolete = request.POST.get('destroy', False)
111 rm_obsolete = request.POST.get('destroy', False)
112 log.debug('Rescanning directories with destroy=%s' % rm_obsolete)
112 log.debug('Rescanning directories with destroy=%s' % rm_obsolete)
113 initial = ScmModel().repo_scan()
113 initial = ScmModel().repo_scan()
114 log.debug('invalidating all repositories')
114 log.debug('invalidating all repositories')
115 for repo_name in initial.keys():
115 for repo_name in initial.keys():
116 invalidate_cache('get_repo_cached_%s' % repo_name)
116 invalidate_cache('get_repo_cached_%s' % repo_name)
117
117
118 added, removed = repo2db_mapper(initial, rm_obsolete)
118 added, removed = repo2db_mapper(initial, rm_obsolete)
119
119
120 h.flash(_('Repositories successfully'
120 h.flash(_('Repositories successfully'
121 ' rescanned added: %s,removed: %s') % (added, removed),
121 ' rescanned added: %s,removed: %s') % (added, removed),
122 category='success')
122 category='success')
123
123
124 if setting_id == 'whoosh':
124 if setting_id == 'whoosh':
125 repo_location = self.get_hg_ui_settings()['paths_root_path']
125 repo_location = self.get_hg_ui_settings()['paths_root_path']
126 full_index = request.POST.get('full_index', False)
126 full_index = request.POST.get('full_index', False)
127 run_task(tasks.whoosh_index, repo_location, full_index)
127 run_task(tasks.whoosh_index, repo_location, full_index)
128
128
129 h.flash(_('Whoosh reindex task scheduled'), category='success')
129 h.flash(_('Whoosh reindex task scheduled'), category='success')
130 if setting_id == 'global':
130 if setting_id == 'global':
131
131
132 application_form = ApplicationSettingsForm()()
132 application_form = ApplicationSettingsForm()()
133 try:
133 try:
134 form_result = application_form.to_python(dict(request.POST))
134 form_result = application_form.to_python(dict(request.POST))
135
135
136 try:
136 try:
137 hgsettings1 = RhodeCodeSetting.get_by_name('title')
137 hgsettings1 = RhodeCodeSetting.get_by_name('title')
138 hgsettings1.app_settings_value = \
138 hgsettings1.app_settings_value = \
139 form_result['rhodecode_title']
139 form_result['rhodecode_title']
140
140
141 hgsettings2 = RhodeCodeSetting.get_by_name('realm')
141 hgsettings2 = RhodeCodeSetting.get_by_name('realm')
142 hgsettings2.app_settings_value = \
142 hgsettings2.app_settings_value = \
143 form_result['rhodecode_realm']
143 form_result['rhodecode_realm']
144
144
145 hgsettings3 = RhodeCodeSetting.get_by_name('ga_code')
145 hgsettings3 = RhodeCodeSetting.get_by_name('ga_code')
146 hgsettings3.app_settings_value = \
146 hgsettings3.app_settings_value = \
147 form_result['rhodecode_ga_code']
147 form_result['rhodecode_ga_code']
148
148
149 self.sa.add(hgsettings1)
149 self.sa.add(hgsettings1)
150 self.sa.add(hgsettings2)
150 self.sa.add(hgsettings2)
151 self.sa.add(hgsettings3)
151 self.sa.add(hgsettings3)
152 self.sa.commit()
152 self.sa.commit()
153 set_rhodecode_config(config)
153 set_rhodecode_config(config)
154 h.flash(_('Updated application settings'),
154 h.flash(_('Updated application settings'),
155 category='success')
155 category='success')
156
156
157 except Exception:
157 except Exception:
158 log.error(traceback.format_exc())
158 log.error(traceback.format_exc())
159 h.flash(_('error occurred during updating '
159 h.flash(_('error occurred during updating '
160 'application settings'),
160 'application settings'),
161 category='error')
161 category='error')
162
162
163 self.sa.rollback()
163 self.sa.rollback()
164
164
165 except formencode.Invalid, errors:
165 except formencode.Invalid, errors:
166 return htmlfill.render(
166 return htmlfill.render(
167 render('admin/settings/settings.html'),
167 render('admin/settings/settings.html'),
168 defaults=errors.value,
168 defaults=errors.value,
169 errors=errors.error_dict or {},
169 errors=errors.error_dict or {},
170 prefix_error=False,
170 prefix_error=False,
171 encoding="UTF-8")
171 encoding="UTF-8")
172
172
173 if setting_id == 'mercurial':
173 if setting_id == 'mercurial':
174 application_form = ApplicationUiSettingsForm()()
174 application_form = ApplicationUiSettingsForm()()
175 try:
175 try:
176 form_result = application_form.to_python(dict(request.POST))
176 form_result = application_form.to_python(dict(request.POST))
177 # fix namespaces for hooks
177 # fix namespaces for hooks
178 _f = lambda s: s.replace('.', '_')
178 _f = lambda s: s.replace('.', '_')
179 try:
179 try:
180
180
181 hgsettings1 = self.sa.query(RhodeCodeUi)\
181 hgsettings1 = self.sa.query(RhodeCodeUi)\
182 .filter(RhodeCodeUi.ui_key == 'push_ssl').one()
182 .filter(RhodeCodeUi.ui_key == 'push_ssl').one()
183 hgsettings1.ui_value = form_result['web_push_ssl']
183 hgsettings1.ui_value = form_result['web_push_ssl']
184
184
185 hgsettings2 = self.sa.query(RhodeCodeUi)\
185 hgsettings2 = self.sa.query(RhodeCodeUi)\
186 .filter(RhodeCodeUi.ui_key == '/').one()
186 .filter(RhodeCodeUi.ui_key == '/').one()
187 hgsettings2.ui_value = form_result['paths_root_path']
187 hgsettings2.ui_value = form_result['paths_root_path']
188
188
189 #HOOKS
189 #HOOKS
190 hgsettings3 = self.sa.query(RhodeCodeUi)\
190 hgsettings3 = self.sa.query(RhodeCodeUi)\
191 .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_UPDATE)\
191 .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_UPDATE)\
192 .one()
192 .one()
193 hgsettings3.ui_active = bool(form_result[_f('hooks_%s' %
193 hgsettings3.ui_active = bool(form_result[_f('hooks_%s' %
194 RhodeCodeUi.HOOK_UPDATE)])
194 RhodeCodeUi.HOOK_UPDATE)])
195
195
196 hgsettings4 = self.sa.query(RhodeCodeUi)\
196 hgsettings4 = self.sa.query(RhodeCodeUi)\
197 .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_REPO_SIZE)\
197 .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_REPO_SIZE)\
198 .one()
198 .one()
199 hgsettings4.ui_active = bool(form_result[_f('hooks_%s' %
199 hgsettings4.ui_active = bool(form_result[_f('hooks_%s' %
200 RhodeCodeUi.HOOK_REPO_SIZE)])
200 RhodeCodeUi.HOOK_REPO_SIZE)])
201
201
202 hgsettings5 = self.sa.query(RhodeCodeUi)\
202 hgsettings5 = self.sa.query(RhodeCodeUi)\
203 .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_PUSH)\
203 .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_PUSH)\
204 .one()
204 .one()
205 hgsettings5.ui_active = bool(form_result[_f('hooks_%s' %
205 hgsettings5.ui_active = bool(form_result[_f('hooks_%s' %
206 RhodeCodeUi.HOOK_PUSH)])
206 RhodeCodeUi.HOOK_PUSH)])
207
207
208 hgsettings6 = self.sa.query(RhodeCodeUi)\
208 hgsettings6 = self.sa.query(RhodeCodeUi)\
209 .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_PULL)\
209 .filter(RhodeCodeUi.ui_key == RhodeCodeUi.HOOK_PULL)\
210 .one()
210 .one()
211 hgsettings6.ui_active = bool(form_result[_f('hooks_%s' %
211 hgsettings6.ui_active = bool(form_result[_f('hooks_%s' %
212 RhodeCodeUi.HOOK_PULL)])
212 RhodeCodeUi.HOOK_PULL)])
213
213
214 self.sa.add(hgsettings1)
214 self.sa.add(hgsettings1)
215 self.sa.add(hgsettings2)
215 self.sa.add(hgsettings2)
216 self.sa.add(hgsettings3)
216 self.sa.add(hgsettings3)
217 self.sa.add(hgsettings4)
217 self.sa.add(hgsettings4)
218 self.sa.add(hgsettings5)
218 self.sa.add(hgsettings5)
219 self.sa.add(hgsettings6)
219 self.sa.add(hgsettings6)
220 self.sa.commit()
220 self.sa.commit()
221
221
222 h.flash(_('Updated mercurial settings'),
222 h.flash(_('Updated mercurial settings'),
223 category='success')
223 category='success')
224
224
225 except:
225 except:
226 log.error(traceback.format_exc())
226 log.error(traceback.format_exc())
227 h.flash(_('error occurred during updating '
227 h.flash(_('error occurred during updating '
228 'application settings'), category='error')
228 'application settings'), category='error')
229
229
230 self.sa.rollback()
230 self.sa.rollback()
231
231
232 except formencode.Invalid, errors:
232 except formencode.Invalid, errors:
233 return htmlfill.render(
233 return htmlfill.render(
234 render('admin/settings/settings.html'),
234 render('admin/settings/settings.html'),
235 defaults=errors.value,
235 defaults=errors.value,
236 errors=errors.error_dict or {},
236 errors=errors.error_dict or {},
237 prefix_error=False,
237 prefix_error=False,
238 encoding="UTF-8")
238 encoding="UTF-8")
239
239
240 if setting_id == 'hooks':
240 if setting_id == 'hooks':
241 ui_key = request.POST.get('new_hook_ui_key')
241 ui_key = request.POST.get('new_hook_ui_key')
242 ui_value = request.POST.get('new_hook_ui_value')
242 ui_value = request.POST.get('new_hook_ui_value')
243 try:
243 try:
244
244
245 if ui_value and ui_key:
245 if ui_value and ui_key:
246 RhodeCodeUi.create_or_update_hook(ui_key, ui_value)
246 RhodeCodeUi.create_or_update_hook(ui_key, ui_value)
247 h.flash(_('Added new hook'),
247 h.flash(_('Added new hook'),
248 category='success')
248 category='success')
249
249
250 # check for edits
250 # check for edits
251 update = False
251 update = False
252 _d = request.POST.dict_of_lists()
252 _d = request.POST.dict_of_lists()
253 for k, v in zip(_d.get('hook_ui_key', []),
253 for k, v in zip(_d.get('hook_ui_key', []),
254 _d.get('hook_ui_value_new', [])):
254 _d.get('hook_ui_value_new', [])):
255 RhodeCodeUi.create_or_update_hook(k, v)
255 RhodeCodeUi.create_or_update_hook(k, v)
256 update = True
256 update = True
257
257
258 if update:
258 if update:
259 h.flash(_('Updated hooks'), category='success')
259 h.flash(_('Updated hooks'), category='success')
260 self.sa.commit()
260 self.sa.commit()
261 except:
261 except:
262 log.error(traceback.format_exc())
262 log.error(traceback.format_exc())
263 h.flash(_('error occurred during hook creation'),
263 h.flash(_('error occurred during hook creation'),
264 category='error')
264 category='error')
265
265
266 return redirect(url('admin_edit_setting', setting_id='hooks'))
266 return redirect(url('admin_edit_setting', setting_id='hooks'))
267
267
268 if setting_id == 'email':
268 if setting_id == 'email':
269 test_email = request.POST.get('test_email')
269 test_email = request.POST.get('test_email')
270 test_email_subj = 'RhodeCode TestEmail'
270 test_email_subj = 'RhodeCode TestEmail'
271 test_email_body = 'RhodeCode Email test'
271 test_email_body = 'RhodeCode Email test'
272
272
273 test_email_html_body = EmailNotificationModel()\
273 test_email_html_body = EmailNotificationModel()\
274 .get_email_tmpl(EmailNotificationModel.TYPE_DEFAULT,
274 .get_email_tmpl(EmailNotificationModel.TYPE_DEFAULT,
275 body=test_email_body)
275 body=test_email_body)
276
276
277 recipients = [test_email] if [test_email] else None
277 recipients = [test_email] if [test_email] else None
278
278
279 run_task(tasks.send_email, recipients, test_email_subj,
279 run_task(tasks.send_email, recipients, test_email_subj,
280 test_email_body, test_email_html_body)
280 test_email_body, test_email_html_body)
281
281
282 h.flash(_('Email task created'), category='success')
282 h.flash(_('Email task created'), category='success')
283 return redirect(url('admin_settings'))
283 return redirect(url('admin_settings'))
284
284
285 @HasPermissionAllDecorator('hg.admin')
285 @HasPermissionAllDecorator('hg.admin')
286 def delete(self, setting_id):
286 def delete(self, setting_id):
287 """DELETE /admin/settings/setting_id: Delete an existing item"""
287 """DELETE /admin/settings/setting_id: Delete an existing item"""
288 # Forms posted to this method should contain a hidden field:
288 # Forms posted to this method should contain a hidden field:
289 # <input type="hidden" name="_method" value="DELETE" />
289 # <input type="hidden" name="_method" value="DELETE" />
290 # Or using helpers:
290 # Or using helpers:
291 # h.form(url('admin_setting', setting_id=ID),
291 # h.form(url('admin_setting', setting_id=ID),
292 # method='delete')
292 # method='delete')
293 # url('admin_setting', setting_id=ID)
293 # url('admin_setting', setting_id=ID)
294 if setting_id == 'hooks':
294 if setting_id == 'hooks':
295 hook_id = request.POST.get('hook_id')
295 hook_id = request.POST.get('hook_id')
296 RhodeCodeUi.delete(hook_id)
296 RhodeCodeUi.delete(hook_id)
297 self.sa.commit()
297 self.sa.commit()
298
298
299 @HasPermissionAllDecorator('hg.admin')
299 @HasPermissionAllDecorator('hg.admin')
300 def show(self, setting_id, format='html'):
300 def show(self, setting_id, format='html'):
301 """
301 """
302 GET /admin/settings/setting_id: Show a specific item"""
302 GET /admin/settings/setting_id: Show a specific item"""
303 # url('admin_setting', setting_id=ID)
303 # url('admin_setting', setting_id=ID)
304
304
305 @HasPermissionAllDecorator('hg.admin')
305 @HasPermissionAllDecorator('hg.admin')
306 def edit(self, setting_id, format='html'):
306 def edit(self, setting_id, format='html'):
307 """
307 """
308 GET /admin/settings/setting_id/edit: Form to
308 GET /admin/settings/setting_id/edit: Form to
309 edit an existing item"""
309 edit an existing item"""
310 # url('admin_edit_setting', setting_id=ID)
310 # url('admin_edit_setting', setting_id=ID)
311
311
312 c.hooks = RhodeCodeUi.get_builtin_hooks()
312 c.hooks = RhodeCodeUi.get_builtin_hooks()
313 c.custom_hooks = RhodeCodeUi.get_custom_hooks()
313 c.custom_hooks = RhodeCodeUi.get_custom_hooks()
314
314
315 return htmlfill.render(
315 return htmlfill.render(
316 render('admin/settings/hooks.html'),
316 render('admin/settings/hooks.html'),
317 defaults={},
317 defaults={},
318 encoding="UTF-8",
318 encoding="UTF-8",
319 force_defaults=False
319 force_defaults=False
320 )
320 )
321
321
322 @NotAnonymous()
322 @NotAnonymous()
323 def my_account(self):
323 def my_account(self):
324 """
324 """
325 GET /_admin/my_account Displays info about my account
325 GET /_admin/my_account Displays info about my account
326 """
326 """
327 # url('admin_settings_my_account')
327 # url('admin_settings_my_account')
328
328
329 c.user = User.get(self.rhodecode_user.user_id)
329 c.user = User.get(self.rhodecode_user.user_id)
330 all_repos = self.sa.query(Repository)\
330 all_repos = self.sa.query(Repository)\
331 .filter(Repository.user_id == c.user.user_id)\
331 .filter(Repository.user_id == c.user.user_id)\
332 .order_by(func.lower(Repository.repo_name)).all()
332 .order_by(func.lower(Repository.repo_name)).all()
333
333
334 c.user_repos = ScmModel().get_repos(all_repos)
334 c.user_repos = ScmModel().get_repos(all_repos)
335
335
336 if c.user.username == 'default':
336 if c.user.username == 'default':
337 h.flash(_("You can't edit this user since it's"
337 h.flash(_("You can't edit this user since it's"
338 " crucial for entire application"), category='warning')
338 " crucial for entire application"), category='warning')
339 return redirect(url('users'))
339 return redirect(url('users'))
340
340
341 defaults = c.user.get_dict()
341 defaults = c.user.get_dict()
342
342
343 c.form = htmlfill.render(
343 c.form = htmlfill.render(
344 render('admin/users/user_edit_my_account_form.html'),
344 render('admin/users/user_edit_my_account_form.html'),
345 defaults=defaults,
345 defaults=defaults,
346 encoding="UTF-8",
346 encoding="UTF-8",
347 force_defaults=False
347 force_defaults=False
348 )
348 )
349 return render('admin/users/user_edit_my_account.html')
349 return render('admin/users/user_edit_my_account.html')
350
350
351 def my_account_update(self):
351 def my_account_update(self):
352 """PUT /_admin/my_account_update: Update an existing item"""
352 """PUT /_admin/my_account_update: Update an existing item"""
353 # Forms posted to this method should contain a hidden field:
353 # Forms posted to this method should contain a hidden field:
354 # <input type="hidden" name="_method" value="PUT" />
354 # <input type="hidden" name="_method" value="PUT" />
355 # Or using helpers:
355 # Or using helpers:
356 # h.form(url('admin_settings_my_account_update'),
356 # h.form(url('admin_settings_my_account_update'),
357 # method='put')
357 # method='put')
358 # url('admin_settings_my_account_update', id=ID)
358 # url('admin_settings_my_account_update', id=ID)
359 user_model = UserModel()
359 user_model = UserModel()
360 uid = self.rhodecode_user.user_id
360 uid = self.rhodecode_user.user_id
361 _form = UserForm(edit=True,
361 _form = UserForm(edit=True,
362 old_data={'user_id': uid,
362 old_data={'user_id': uid,
363 'email': self.rhodecode_user.email})()
363 'email': self.rhodecode_user.email})()
364 form_result = {}
364 form_result = {}
365 try:
365 try:
366 form_result = _form.to_python(dict(request.POST))
366 form_result = _form.to_python(dict(request.POST))
367 user_model.update_my_account(uid, form_result)
367 user_model.update_my_account(uid, form_result)
368 h.flash(_('Your account was updated successfully'),
368 h.flash(_('Your account was updated successfully'),
369 category='success')
369 category='success')
370 Session.commit()
370 Session.commit()
371 except formencode.Invalid, errors:
371 except formencode.Invalid, errors:
372 c.user = User.get(self.rhodecode_user.user_id)
372 c.user = User.get(self.rhodecode_user.user_id)
373 all_repos = self.sa.query(Repository)\
373 all_repos = self.sa.query(Repository)\
374 .filter(Repository.user_id == c.user.user_id)\
374 .filter(Repository.user_id == c.user.user_id)\
375 .order_by(func.lower(Repository.repo_name))\
375 .order_by(func.lower(Repository.repo_name))\
376 .all()
376 .all()
377 c.user_repos = ScmModel().get_repos(all_repos)
377 c.user_repos = ScmModel().get_repos(all_repos)
378
378
379 c.form = htmlfill.render(
379 c.form = htmlfill.render(
380 render('admin/users/user_edit_my_account_form.html'),
380 render('admin/users/user_edit_my_account_form.html'),
381 defaults=errors.value,
381 defaults=errors.value,
382 errors=errors.error_dict or {},
382 errors=errors.error_dict or {},
383 prefix_error=False,
383 prefix_error=False,
384 encoding="UTF-8")
384 encoding="UTF-8")
385 return render('admin/users/user_edit_my_account.html')
385 return render('admin/users/user_edit_my_account.html')
386 except Exception:
386 except Exception:
387 log.error(traceback.format_exc())
387 log.error(traceback.format_exc())
388 h.flash(_('error occurred during update of user %s') \
388 h.flash(_('error occurred during update of user %s') \
389 % form_result.get('username'), category='error')
389 % form_result.get('username'), category='error')
390
390
391 return redirect(url('my_account'))
391 return redirect(url('my_account'))
392
392
393 @NotAnonymous()
393 @NotAnonymous()
394 @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository')
394 @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository')
395 def create_repository(self):
395 def create_repository(self):
396 """GET /_admin/create_repository: Form to create a new item"""
396 """GET /_admin/create_repository: Form to create a new item"""
397
397
398 c.repo_groups = RepoGroup.groups_choices()
398 c.repo_groups = RepoGroup.groups_choices()
399 c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
399 c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
400 c.landing_revs = ScmModel().get_repo_landing_revs()
400 choices, c.landing_revs = ScmModel().get_repo_landing_revs()
401
401
402 new_repo = request.GET.get('repo', '')
402 new_repo = request.GET.get('repo', '')
403 c.new_repo = repo_name_slug(new_repo)
403 c.new_repo = repo_name_slug(new_repo)
404
404
405 return render('admin/repos/repo_add_create_repository.html')
405 return render('admin/repos/repo_add_create_repository.html')
406
406
407 def get_hg_ui_settings(self):
407 def get_hg_ui_settings(self):
408 ret = self.sa.query(RhodeCodeUi).all()
408 ret = self.sa.query(RhodeCodeUi).all()
409
409
410 if not ret:
410 if not ret:
411 raise Exception('Could not get application ui settings !')
411 raise Exception('Could not get application ui settings !')
412 settings = {}
412 settings = {}
413 for each in ret:
413 for each in ret:
414 k = each.ui_key
414 k = each.ui_key
415 v = each.ui_value
415 v = each.ui_value
416 if k == '/':
416 if k == '/':
417 k = 'root_path'
417 k = 'root_path'
418
418
419 if k.find('.') != -1:
419 if k.find('.') != -1:
420 k = k.replace('.', '_')
420 k = k.replace('.', '_')
421
421
422 if each.ui_section == 'hooks':
422 if each.ui_section == 'hooks':
423 v = each.ui_active
423 v = each.ui_active
424
424
425 settings[each.ui_section + '_' + k] = v
425 settings[each.ui_section + '_' + k] = v
426
426
427 return settings
427 return settings
General Comments 0
You need to be logged in to leave comments. Login now