src/pyams_content/shared/common/zmi/types/__init__.py
changeset 1357 329116e5f8e3
parent 1342 999fa08d99c2
child 1384 cdf63a1c7dc9
equal deleted inserted replaced
1356:d40f66f6bb55 1357:329116e5f8e3
     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