7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED |
7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED |
8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS |
9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS |
10 # FOR A PARTICULAR PURPOSE. |
10 # FOR A PARTICULAR PURPOSE. |
11 # |
11 # |
12 |
|
13 __docformat__ = 'restructuredtext' |
|
14 |
12 |
15 import json |
13 import json |
16 |
14 |
17 from pyramid.decorator import reify |
15 from pyramid.decorator import reify |
18 from pyramid.events import subscriber |
16 from pyramid.events import subscriber |
32 from pyams_content.shared.common.zmi.properties import SharedContentPropertiesEditForm |
30 from pyams_content.shared.common.zmi.properties import SharedContentPropertiesEditForm |
33 from pyams_content.shared.common.zmi.types.manager import TypedSharedToolTypesView |
31 from pyams_content.shared.common.zmi.types.manager import TypedSharedToolTypesView |
34 from pyams_form.form import AJAXAddForm, ajax_config |
32 from pyams_form.form import AJAXAddForm, ajax_config |
35 from pyams_form.interfaces.form import IWidgetForm |
33 from pyams_form.interfaces.form import IWidgetForm |
36 from pyams_i18n.interfaces import II18n |
34 from pyams_i18n.interfaces import II18n |
37 from pyams_i18n.widget import I18nSEOTextLineFieldWidget |
|
38 from pyams_pagelet.pagelet import pagelet_config |
35 from pyams_pagelet.pagelet import pagelet_config |
39 from pyams_skin.container import delete_container_element |
36 from pyams_skin.container import delete_container_element |
40 from pyams_skin.event import get_json_table_refresh_event |
37 from pyams_skin.event import get_json_table_refresh_event |
41 from pyams_skin.interfaces import IInnerPage |
38 from pyams_skin.interfaces import IInnerPage |
42 from pyams_skin.interfaces.container import ITableElementName |
39 from pyams_skin.interfaces.container import ITableElementName |
43 from pyams_skin.interfaces.viewlet import IWidgetTitleViewletManager |
40 from pyams_skin.interfaces.viewlet import IWidgetTitleViewletManager |
44 from pyams_skin.layer import IPyAMSLayer |
41 from pyams_skin.layer import IPyAMSLayer |
45 from pyams_skin.table import ActionColumn, BaseTable, NameColumn, SorterColumn, TrashColumn |
42 from pyams_skin.table import ActionColumn, BaseTable, NameColumn, SorterColumn, TrashColumn |
46 from pyams_skin.viewlet.toolbar import ToolbarAction |
43 from pyams_skin.viewlet.toolbar import ToolbarAction |
47 from pyams_utils.adapter import ContextRequestAdapter, ContextRequestViewAdapter, adapter_config |
44 from pyams_utils.adapter import ContextRequestAdapter, ContextRequestViewAdapter, adapter_config |
|
45 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION |
48 from pyams_utils.traversing import get_parent |
46 from pyams_utils.traversing import get_parent |
49 from pyams_utils.unicode import translate_string |
47 from pyams_utils.unicode import translate_string |
50 from pyams_utils.url import absolute_url |
48 from pyams_utils.url import absolute_url |
51 from pyams_viewlet.interfaces import IViewletManager |
49 from pyams_viewlet.interfaces import IViewletManager |
52 from pyams_viewlet.viewlet import viewlet_config |
50 from pyams_viewlet.viewlet import viewlet_config |
53 from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm, AdminEditForm |
51 from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm, AdminEditForm |
54 from pyams_zmi.layer import IAdminLayer |
52 from pyams_zmi.layer import IAdminLayer |
55 |
53 |
|
54 |
|
55 __docformat__ = 'restructuredtext' |
|
56 |
56 from pyams_content import _ |
57 from pyams_content import _ |
57 |
58 |
58 |
59 |
59 # |
60 # |
60 # Data type views |
61 # Data type views |
81 modal_target = True |
82 modal_target = True |
82 |
83 |
83 |
84 |
84 @pagelet_config(name='add-data-type.html', context=ITypedSharedTool, layer=IPyAMSLayer, |
85 @pagelet_config(name='add-data-type.html', context=ITypedSharedTool, layer=IPyAMSLayer, |
85 permission=MANAGE_TOOL_PERMISSION) |
86 permission=MANAGE_TOOL_PERMISSION) |
86 @ajax_config(name='add-data-type.json', context=ITypedSharedTool, layer=IPyAMSLayer, base=AJAXAddForm) |
87 @ajax_config(name='add-data-type.json', context=ITypedSharedTool, layer=IPyAMSLayer, |
|
88 base=AJAXAddForm) |
87 class DataTypeAddForm(AdminDialogAddForm): |
89 class DataTypeAddForm(AdminDialogAddForm): |
88 """Data type add form""" |
90 """Data type add form""" |
89 |
91 |
90 legend = _("Add new data type") |
92 legend = _("Add new data type") |
91 icon_css_class = 'fa fa-fw fa-folder-o' |
93 icon_css_class = 'fa fa-fw fa-folder-o' |
121 name = event.data.get('name') |
123 name = event.data.get('name') |
122 if translate_string(name, spaces='-') in manager: |
124 if translate_string(name, spaces='-') in manager: |
123 event.form.widgets.errors += (Invalid(_("Specified type name is already used!")),) |
125 event.form.widgets.errors += (Invalid(_("Specified type name is already used!")),) |
124 |
126 |
125 |
127 |
126 @pagelet_config(name='properties.html', context=IDataType, layer=IPyAMSLayer, permission=MANAGE_TOOL_PERMISSION) |
128 @pagelet_config(name='properties.html', context=IDataType, layer=IPyAMSLayer, |
|
129 permission=MANAGE_TOOL_PERMISSION) |
127 @ajax_config(name='properties.json', context=IDataType, layer=IPyAMSLayer) |
130 @ajax_config(name='properties.json', context=IDataType, layer=IPyAMSLayer) |
128 class DataTypeEditForm(AdminDialogEditForm): |
131 class DataTypeEditForm(AdminDialogEditForm): |
129 """Data type edit form""" |
132 """Data type edit form""" |
130 |
133 |
131 prefix = 'datatype_properties.' |
134 prefix = 'datatype_properties.' |
191 @property |
194 @property |
192 def values(self): |
195 def values(self): |
193 return self.context.values() |
196 return self.context.values() |
194 |
197 |
195 |
198 |
196 @adapter_config(name='sorter', context=(IDataType, IPyAMSLayer, DatatypeSubtypesTable), provides=IColumn) |
199 @adapter_config(name='sorter', context=(IDataType, IPyAMSLayer, DatatypeSubtypesTable), |
|
200 provides=IColumn) |
197 class DatatypeSubtypesTableSorterColumn(SorterColumn): |
201 class DatatypeSubtypesTableSorterColumn(SorterColumn): |
198 """Data type subtypes table sorter column""" |
202 """Data type subtypes table sorter column""" |
199 |
203 |
200 |
204 |
201 @view_config(name='set-subtypes-order.json', context=IDataType, request_type=IPyAMSLayer, |
205 @view_config(name='set-subtypes-order.json', context=IDataType, request_type=IPyAMSLayer, |
205 order = list(map(str, json.loads(request.params.get('names')))) |
209 order = list(map(str, json.loads(request.params.get('names')))) |
206 request.context.updateOrder(order) |
210 request.context.updateOrder(order) |
207 return {'status': 'success'} |
211 return {'status': 'success'} |
208 |
212 |
209 |
213 |
210 @adapter_config(name='name', context=(IDataType, IPyAMSLayer, DatatypeSubtypesTable), provides=IColumn) |
214 @adapter_config(name='name', context=(IDataType, IPyAMSLayer, DatatypeSubtypesTable), |
|
215 provides=IColumn) |
211 class DatatypeSubtypesTableNameColumn(NameColumn): |
216 class DatatypeSubtypesTableNameColumn(NameColumn): |
212 """Data type subtypes table name column""" |
217 """Data type subtypes table name column""" |
213 |
218 |
214 _header = _("Subtype label") |
219 _header = _("Subtype label") |
215 |
220 |
216 def renderHeadCell(self): |
221 def renderHeadCell(self): |
217 result = super(DatatypeSubtypesTableNameColumn, self).renderHeadCell() |
222 result = super(DatatypeSubtypesTableNameColumn, self).renderHeadCell() |
218 registry = self.request.registry |
223 registry = self.request.registry |
219 viewlet = registry.queryMultiAdapter((self.context, self.request, self.table), IViewletManager, |
224 viewlet = registry.queryMultiAdapter((self.context, self.request, self.table), |
|
225 IViewletManager, |
220 name='pyams.widget_title') |
226 name='pyams.widget_title') |
221 if viewlet is not None: |
227 if viewlet is not None: |
222 viewlet.update() |
228 viewlet.update() |
223 result += viewlet.render() |
229 result += viewlet.render() |
224 return result |
230 return result |
254 modal_target = True |
260 modal_target = True |
255 |
261 |
256 permission = MANAGE_TOOL_PERMISSION |
262 permission = MANAGE_TOOL_PERMISSION |
257 |
263 |
258 |
264 |
259 @adapter_config(name='trash', context=(IDataType, IPyAMSLayer, DatatypeSubtypesTable), provides=IColumn) |
265 @adapter_config(name='trash', context=(IDataType, IPyAMSLayer, DatatypeSubtypesTable), |
|
266 provides=IColumn) |
260 class DatatypeSubtypesTableTrashColumn(TrashColumn): |
267 class DatatypeSubtypesTableTrashColumn(TrashColumn): |
261 """Data type subtypes table trash column""" |
268 """Data type subtypes table trash column""" |
262 |
269 |
263 permission = MANAGE_TOOL_PERMISSION |
270 permission = MANAGE_TOOL_PERMISSION |
264 |
271 |
342 name = event.data.get('name') |
349 name = event.data.get('name') |
343 if translate_string(name, spaces='-') in manager: |
350 if translate_string(name, spaces='-') in manager: |
344 event.form.widgets.errors += (Invalid(_("Specified subtype name is already used!")),) |
351 event.form.widgets.errors += (Invalid(_("Specified subtype name is already used!")),) |
345 |
352 |
346 |
353 |
347 @pagelet_config(name='properties.html', context=ISubType, layer=IPyAMSLayer, permission=MANAGE_TOOL_PERMISSION) |
354 @pagelet_config(name='properties.html', context=ISubType, layer=IPyAMSLayer, |
|
355 permission=MANAGE_TOOL_PERMISSION) |
348 @ajax_config(name='properties.json', context=ISubType, layer=IPyAMSLayer) |
356 @ajax_config(name='properties.json', context=ISubType, layer=IPyAMSLayer) |
349 class DataSubtypeEditForm(AdminDialogEditForm): |
357 class DataSubtypeEditForm(AdminDialogEditForm): |
350 """Data subtype edit form""" |
358 """Data subtype edit form""" |
351 |
359 |
352 prefix = 'subtype_properties.' |
360 prefix = 'subtype_properties.' |
395 self.widgets['data_type'].prompt = True |
403 self.widgets['data_type'].prompt = True |
396 self.widgets['data_type'].promptMessage = _("Select content type...") |
404 self.widgets['data_type'].promptMessage = _("Select content type...") |
397 |
405 |
398 |
406 |
399 @pagelet_config(name='properties.html', context=IWfTypedSharedContent, layer=IPyAMSLayer, |
407 @pagelet_config(name='properties.html', context=IWfTypedSharedContent, layer=IPyAMSLayer, |
400 permission=MANAGE_CONTENT_PERMISSION) |
408 permission=VIEW_SYSTEM_PERMISSION) |
401 @ajax_config(name='properties.json', context=IWfTypedSharedContent, layer=IPyAMSLayer, |
409 @ajax_config(name='properties.json', context=IWfTypedSharedContent, layer=IPyAMSLayer, |
402 permission=MANAGE_CONTENT_PERMISSION) |
410 permission=MANAGE_CONTENT_PERMISSION) |
403 class TypedSharedContentPropertiesEditForm(SharedContentPropertiesEditForm): |
411 class TypedSharedContentPropertiesEditForm(SharedContentPropertiesEditForm): |
404 """Typed shared content properties edit form""" |
412 """Typed shared content properties edit form""" |
405 |
413 |