20 from pyams_pagelet.interfaces import PageletCreatedEvent |
20 from pyams_pagelet.interfaces import PageletCreatedEvent |
21 from pyams_security.interfaces import IUsersFolderPlugin, ISecurityManager, ILocalUser, IUserRegistrationInfo |
21 from pyams_security.interfaces import IUsersFolderPlugin, ISecurityManager, ILocalUser, IUserRegistrationInfo |
22 from pyams_skin.interfaces.viewlet import IToolbarAddingMenu, IWidgetTitleViewletManager |
22 from pyams_skin.interfaces.viewlet import IToolbarAddingMenu, IWidgetTitleViewletManager |
23 from pyams_skin.interfaces import IPageHeader |
23 from pyams_skin.interfaces import IPageHeader |
24 from pyams_skin.layer import IPyAMSLayer |
24 from pyams_skin.layer import IPyAMSLayer |
|
25 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION, MANAGE_SYSTEM_PERMISSION |
25 from pyams_zmi.layer import IAdminLayer |
26 from pyams_zmi.layer import IAdminLayer |
26 from z3c.form.interfaces import DISPLAY_MODE, IDataExtractedEvent |
27 from z3c.form.interfaces import DISPLAY_MODE, IDataExtractedEvent |
27 from z3c.table.interfaces import IColumn |
28 from z3c.table.interfaces import IColumn |
28 from zope.component.interfaces import ISite |
29 from zope.component.interfaces import ISite |
29 from zope.dublincore.interfaces import IZopeDublinCore |
30 from zope.dublincore.interfaces import IZopeDublinCore |
57 # Users folder views |
58 # Users folder views |
58 # |
59 # |
59 |
60 |
60 @viewlet_config(name='add-users-folder.menu', context=ISite, layer=IAdminLayer, |
61 @viewlet_config(name='add-users-folder.menu', context=ISite, layer=IAdminLayer, |
61 view=SecurityManagerPluginsTable, manager=IToolbarAddingMenu, |
62 view=SecurityManagerPluginsTable, manager=IToolbarAddingMenu, |
62 permission='system.manage', weight=10) |
63 permission=MANAGE_SYSTEM_PERMISSION, weight=10) |
63 class UsersFolderAddMenu(ToolbarMenuItem): |
64 class UsersFolderAddMenu(ToolbarMenuItem): |
64 """Local users folder add menu""" |
65 """Local users folder add menu""" |
65 |
66 |
66 label = _("Add local users folder...") |
67 label = _("Add local users folder...") |
67 label_css_class = 'fa fa-fw fa-user' |
68 label_css_class = 'fa fa-fw fa-user' |
68 url = 'add-users-folder.html' |
69 url = 'add-users-folder.html' |
69 modal_target = True |
70 modal_target = True |
70 |
71 |
71 |
72 |
72 @pagelet_config(name='add-users-folder.html', context=ISite, layer=IPyAMSLayer, |
73 @pagelet_config(name='add-users-folder.html', context=ISite, layer=IPyAMSLayer, |
73 permission='system.manage') |
74 permission=MANAGE_SYSTEM_PERMISSION) |
74 class UsersFolderAddForm(AdminDialogAddForm): |
75 class UsersFolderAddForm(AdminDialogAddForm): |
75 """Users folder plug-in add form""" |
76 """Users folder plug-in add form""" |
76 |
77 |
77 title = _("System security manager") |
78 title = _("System security manager") |
78 legend = _("Add local users folder plug-in") |
79 legend = _("Add local users folder plug-in") |
79 icon_css_class = 'fa fa-fw fa-user' |
80 icon_css_class = 'fa fa-fw fa-user' |
80 |
81 |
81 fields = field.Fields(IUsersFolderPlugin).omit('__name__', '__parent__') |
82 fields = field.Fields(IUsersFolderPlugin).omit('__name__', '__parent__') |
82 ajax_handler = 'add-users-folder.json' |
83 ajax_handler = 'add-users-folder.json' |
83 edit_permission = 'system.manage' |
84 edit_permission = MANAGE_SYSTEM_PERMISSION |
84 |
85 |
85 def create(self, data): |
86 def create(self, data): |
86 return UsersFolder() |
87 return UsersFolder() |
87 |
88 |
88 def add(self, plugin): |
89 def add(self, plugin): |
101 if prefix in manager: |
102 if prefix in manager: |
102 event.form.widgets.errors += (Invalid(_("Specified prefix is already used!")),) |
103 event.form.widgets.errors += (Invalid(_("Specified prefix is already used!")),) |
103 |
104 |
104 |
105 |
105 @view_config(name='add-users-folder.json', context=ISite, request_type=IPyAMSLayer, |
106 @view_config(name='add-users-folder.json', context=ISite, request_type=IPyAMSLayer, |
106 permission='system.manage', renderer='json', xhr=True) |
107 permission=MANAGE_SYSTEM_PERMISSION, renderer='json', xhr=True) |
107 class UsersFolderAJAXAddForm(AJAXAddForm, UsersFolderAddForm): |
108 class UsersFolderAJAXAddForm(AJAXAddForm, UsersFolderAddForm): |
108 """users folder plug-in add form, AJAX handler""" |
109 """users folder plug-in add form, AJAX handler""" |
109 |
110 |
110 |
111 |
111 @pagelet_config(name='properties.html', context=IUsersFolderPlugin, layer=IPyAMSLayer, |
112 @pagelet_config(name='properties.html', context=IUsersFolderPlugin, layer=IPyAMSLayer, |
112 permission='system.view') |
113 permission=VIEW_SYSTEM_PERMISSION) |
113 class UsersFolderEditForm(AdminDialogEditForm): |
114 class UsersFolderEditForm(AdminDialogEditForm): |
114 """Users folder plug-in edit form""" |
115 """Users folder plug-in edit form""" |
115 |
116 |
116 @property |
117 @property |
117 def title(self): |
118 def title(self): |
120 legend = _("Edit local users folder plug-in properties") |
121 legend = _("Edit local users folder plug-in properties") |
121 icon_css_class = 'fa fa-fw fa-user' |
122 icon_css_class = 'fa fa-fw fa-user' |
122 |
123 |
123 fields = field.Fields(IUsersFolderPlugin).omit('__name__', '__parent__') |
124 fields = field.Fields(IUsersFolderPlugin).omit('__name__', '__parent__') |
124 ajax_handler = 'properties.json' |
125 ajax_handler = 'properties.json' |
125 edit_permission = 'system.manage' |
126 edit_permission = MANAGE_SYSTEM_PERMISSION |
126 |
127 |
127 def updateWidgets(self, prefix=None): |
128 def updateWidgets(self, prefix=None): |
128 super(UsersFolderEditForm, self).updateWidgets() |
129 super(UsersFolderEditForm, self).updateWidgets() |
129 self.widgets['prefix'].mode = DISPLAY_MODE |
130 self.widgets['prefix'].mode = DISPLAY_MODE |
130 |
131 |
131 |
132 |
132 @view_config(name='properties.json', context=IUsersFolderPlugin, request_type=IPyAMSLayer, |
133 @view_config(name='properties.json', context=IUsersFolderPlugin, request_type=IPyAMSLayer, |
133 permission='system.manage', renderer='json', xhr=True) |
134 permission=MANAGE_SYSTEM_PERMISSION, renderer='json', xhr=True) |
134 class UsersFolderAJAXEditForm(AJAXEditForm, UsersFolderEditForm): |
135 class UsersFolderAJAXEditForm(AJAXEditForm, UsersFolderEditForm): |
135 """Users folder plug-in edit form, AJAX handler""" |
136 """Users folder plug-in edit form, AJAX handler""" |
136 |
137 |
137 |
138 |
138 # |
139 # |
139 # Users folder search views |
140 # Users folder search views |
140 # |
141 # |
141 |
142 |
142 @pagelet_config(name='search.html', context=IUsersFolderPlugin, layer=IPyAMSLayer, permission='system.view') |
143 @pagelet_config(name='search.html', context=IUsersFolderPlugin, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION) |
143 class UsersFolderSearchView(AdminView, SearchView): |
144 class UsersFolderSearchView(AdminView, SearchView): |
144 """Users folder search view""" |
145 """Users folder search view""" |
145 |
146 |
146 def __init__(self, context, request): |
147 def __init__(self, context, request): |
147 super(UsersFolderSearchView, self).__init__(context, request) |
148 super(UsersFolderSearchView, self).__init__(context, request) |
159 def subtitle(self): |
160 def subtitle(self): |
160 return self.context.title |
161 return self.context.title |
161 |
162 |
162 |
163 |
163 @view_config(name='search-results.html', context=IUsersFolderPlugin, request_type=IPyAMSLayer, |
164 @view_config(name='search-results.html', context=IUsersFolderPlugin, request_type=IPyAMSLayer, |
164 permission='system.view') |
165 permission=VIEW_SYSTEM_PERMISSION) |
165 class UsersFolderSearchResultsView(AdminView, SearchResultsView): |
166 class UsersFolderSearchResultsView(AdminView, SearchResultsView): |
166 """Users folder search results view table""" |
167 """Users folder search results view table""" |
167 |
168 |
168 id = 'users_folder_search_table' |
169 id = 'users_folder_search_table' |
169 title = _("Search results") |
170 title = _("Search results") |
239 # Users views |
240 # Users views |
240 # |
241 # |
241 |
242 |
242 @viewlet_config(name='users-folder.toolbar.adding', context=IUsersFolderPlugin, |
243 @viewlet_config(name='users-folder.toolbar.adding', context=IUsersFolderPlugin, |
243 view=UsersFolderSearchView.search_form_factory, layer=IAdminLayer, |
244 view=UsersFolderSearchView.search_form_factory, layer=IAdminLayer, |
244 manager=IWidgetTitleViewletManager, permission='system.manage') |
245 manager=IWidgetTitleViewletManager, permission=MANAGE_SYSTEM_PERMISSION) |
245 class LocalUserAddAction(ToolbarAction): |
246 class LocalUserAddAction(ToolbarAction): |
246 """Users folder adding action""" |
247 """Users folder adding action""" |
247 |
248 |
248 label = _("Add user") |
249 label = _("Add user") |
249 url = 'add-user.html' |
250 url = 'add-user.html' |
250 modal_target = True |
251 modal_target = True |
251 |
252 |
252 |
253 |
253 @pagelet_config(name='add-user.html', context=IUsersFolderPlugin, layer=IPyAMSLayer, permission='system.manage') |
254 @pagelet_config(name='add-user.html', context=IUsersFolderPlugin, layer=IPyAMSLayer, |
|
255 permission=MANAGE_SYSTEM_PERMISSION) |
254 class LocalUserAddForm(AdminDialogAddForm): |
256 class LocalUserAddForm(AdminDialogAddForm): |
255 """Local user add form""" |
257 """Local user add form""" |
256 |
258 |
257 @property |
259 @property |
258 def title(self): |
260 def title(self): |
268 field.Fields(IUserRegistrationInfo).select('password', 'confirmed_password') + \ |
270 field.Fields(IUserRegistrationInfo).select('password', 'confirmed_password') + \ |
269 field.Fields(ILocalUser).select('wait_confirmation') |
271 field.Fields(ILocalUser).select('wait_confirmation') |
270 |
272 |
271 autocomplete = 'off' |
273 autocomplete = 'off' |
272 ajax_handler = 'add-user.json' |
274 ajax_handler = 'add-user.json' |
273 edit_permission = 'system.manage' |
275 edit_permission = MANAGE_SYSTEM_PERMISSION |
274 |
276 |
275 def updateWidgets(self, prefix=None): |
277 def updateWidgets(self, prefix=None): |
276 super(LocalUserAddForm, self).updateWidgets() |
278 super(LocalUserAddForm, self).updateWidgets() |
277 self.widgets['password'].input_css_class = 'col-md-4' |
279 self.widgets['password'].input_css_class = 'col-md-4' |
278 self.widgets['confirmed_password'].input_css_class = 'col-md-4' |
280 self.widgets['confirmed_password'].input_css_class = 'col-md-4' |
310 if not folder.check_login(data.get('login')): |
312 if not folder.check_login(data.get('login')): |
311 event.form.widgets.errors += (Invalid(_("Specified login can't be used!")),) |
313 event.form.widgets.errors += (Invalid(_("Specified login can't be used!")),) |
312 |
314 |
313 |
315 |
314 @view_config(name='add-user.json', context=IUsersFolderPlugin, request_type=IPyAMSLayer, |
316 @view_config(name='add-user.json', context=IUsersFolderPlugin, request_type=IPyAMSLayer, |
315 permission='system.manage', renderer='json', xhr=True) |
317 permission=MANAGE_SYSTEM_PERMISSION, renderer='json', xhr=True) |
316 class LocalUserAJAXAddForm(AJAXAddForm, LocalUserAddForm): |
318 class LocalUserAJAXAddForm(AJAXAddForm, LocalUserAddForm): |
317 """Local user add form, AJAX view""" |
319 """Local user add form, AJAX view""" |
318 |
320 |
319 def get_ajax_output(self, changes): |
321 def get_ajax_output(self, changes): |
320 translate = self.request.localizer.translate |
322 translate = self.request.localizer.translate |
321 return {'status': 'success', |
323 return {'status': 'success', |
322 'message': translate(_("User was created successfully"))} |
324 'message': translate(_("User was created successfully"))} |
323 |
325 |
324 |
326 |
325 @pagelet_config(name='properties.html', context=ILocalUser, layer=IPyAMSLayer, permission='system.view') |
327 @pagelet_config(name='properties.html', context=ILocalUser, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION) |
326 class LocalUserEditForm(AdminDialogEditForm): |
328 class LocalUserEditForm(AdminDialogEditForm): |
327 """Local user edit form""" |
329 """Local user edit form""" |
328 |
330 |
329 @property |
331 @property |
330 def title(self): |
332 def title(self): |
337 |
339 |
338 fields = field.Fields(ILocalUser).select('login', 'email', 'firstname', 'lastname', 'company_name', |
340 fields = field.Fields(ILocalUser).select('login', 'email', 'firstname', 'lastname', 'company_name', |
339 'self_registered', 'activation_hash', 'activation_date') |
341 'self_registered', 'activation_hash', 'activation_date') |
340 |
342 |
341 ajax_handler = 'properties.json' |
343 ajax_handler = 'properties.json' |
342 edit_permission = 'system.manage' |
344 edit_permission = MANAGE_SYSTEM_PERMISSION |
343 |
345 |
344 def updateWidgets(self, prefix=None): |
346 def updateWidgets(self, prefix=None): |
345 super(LocalUserEditForm, self).updateWidgets() |
347 super(LocalUserEditForm, self).updateWidgets() |
346 self.widgets['self_registered'].mode = DISPLAY_MODE |
348 self.widgets['self_registered'].mode = DISPLAY_MODE |
347 self.widgets['activation_hash'].mode = DISPLAY_MODE |
349 self.widgets['activation_hash'].mode = DISPLAY_MODE |
348 self.widgets['activation_date'].mode = DISPLAY_MODE |
350 self.widgets['activation_date'].mode = DISPLAY_MODE |
349 |
351 |
350 |
352 |
351 @view_config(name='properties.json', context=ILocalUser, request_type=IPyAMSLayer, |
353 @view_config(name='properties.json', context=ILocalUser, request_type=IPyAMSLayer, |
352 permission='system.manage', renderer='json', xhr=True) |
354 permission=MANAGE_SYSTEM_PERMISSION, renderer='json', xhr=True) |
353 class LocalUserAJAXEditForm(AJAXEditForm, LocalUserEditForm): |
355 class LocalUserAJAXEditForm(AJAXEditForm, LocalUserEditForm): |
354 """Local user edit form, AJAX view""" |
356 """Local user edit form, AJAX view""" |