src/pyams_content/shared/common/zmi/types.py
changeset 986 3fc7f8f84864
parent 984 754d0102389d
child 1070 ea0c7ac589c4
equal deleted inserted replaced
985:5045e1a3a4bb 986:3fc7f8f84864
     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 
    12 
       
    13 
    13 __docformat__ = 'restructuredtext'
    14 __docformat__ = 'restructuredtext'
    14 
    15 
    15 
       
    16 # import standard library
       
    17 import json
    16 import json
    18 
    17 
    19 from pyramid.decorator import reify
    18 from pyramid.decorator import reify
    20 from pyramid.events import subscriber
    19 from pyramid.events import subscriber
    21 from pyramid.exceptions import NotFound
    20 from pyramid.exceptions import NotFound
    22 from pyramid.view import view_config
    21 from pyramid.view import view_config
    23 from z3c.form import field
    22 from z3c.form import field
    24 from z3c.form.interfaces import DISPLAY_MODE, IDataExtractedEvent
    23 from z3c.form.interfaces import DISPLAY_MODE, IDataExtractedEvent
    25 from z3c.table.interfaces import IColumn, IValues
    24 from z3c.table.interfaces import IColumn, IValues
    26 from zope.interface import Invalid
    25 from zope.interface import Invalid, implementer
    27 
    26 
    28 from pyams_content import _
    27 from pyams_content import _
    29 # import interfaces
       
    30 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION, MANAGE_TOOL_PERMISSION
    28 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION, MANAGE_TOOL_PERMISSION
    31 # import packages
       
    32 from pyams_content.reference.pictograms.zmi.widget import PictogramSelectFieldWidget
    29 from pyams_content.reference.pictograms.zmi.widget import PictogramSelectFieldWidget
    33 from pyams_content.shared.common.interfaces.types import IBaseDataType, IDataType, ISubType, ITypedDataManager, \
    30 from pyams_content.shared.common.interfaces.types import IBaseDataType, IDataType, ISubType, ITypedDataManager, \
    34     ITypedSharedTool, IWfTypedSharedContent
    31     ITypedSharedTool, IWfTypedSharedContent
    35 from pyams_content.shared.common.types import DataType, SubType
    32 from pyams_content.shared.common.types import DataType, SubType
    36 from pyams_content.shared.common.zmi import SharedContentAddForm
    33 from pyams_content.shared.common.zmi import SharedContentAddForm
    37 from pyams_content.shared.common.zmi.properties import SharedContentPropertiesEditForm
    34 from pyams_content.shared.common.zmi.properties import SharedContentPropertiesEditForm
    38 from pyams_content.skin import pyams_content
    35 from pyams_content.skin import pyams_content
    39 from pyams_form.form import AJAXAddForm, ajax_config
    36 from pyams_form.form import AJAXAddForm, ajax_config
       
    37 from pyams_form.interfaces.form import IWidgetForm
    40 from pyams_form.security import ProtectedFormObjectMixin
    38 from pyams_form.security import ProtectedFormObjectMixin
    41 from pyams_i18n.interfaces import II18n
    39 from pyams_i18n.interfaces import II18n
    42 from pyams_i18n.widget import I18nSEOTextLineFieldWidget
    40 from pyams_i18n.widget import I18nSEOTextLineFieldWidget
    43 from pyams_pagelet.pagelet import pagelet_config
    41 from pyams_pagelet.pagelet import pagelet_config
    44 from pyams_skin.container import delete_container_element
    42 from pyams_skin.container import delete_container_element
    45 from pyams_skin.event import get_json_table_refresh_event
    43 from pyams_skin.event import get_json_table_refresh_event
       
    44 from pyams_skin.interfaces import IInnerPage
    46 from pyams_skin.interfaces.container import ITableElementName
    45 from pyams_skin.interfaces.container import ITableElementName
    47 from pyams_skin.interfaces.viewlet import IWidgetTitleViewletManager
    46 from pyams_skin.interfaces.viewlet import IWidgetTitleViewletManager
    48 from pyams_skin.layer import IPyAMSLayer
    47 from pyams_skin.layer import IPyAMSLayer
    49 from pyams_skin.table import ActionColumn, BaseTable, NameColumn, SorterColumn, TrashColumn
    48 from pyams_skin.table import ActionColumn, BaseTable, NameColumn, SorterColumn, TrashColumn
    50 from pyams_skin.viewlet.menu import MenuItem
    49 from pyams_skin.viewlet.menu import MenuItem
    54 from pyams_utils.traversing import get_parent
    53 from pyams_utils.traversing import get_parent
    55 from pyams_utils.unicode import translate_string
    54 from pyams_utils.unicode import translate_string
    56 from pyams_utils.url import absolute_url
    55 from pyams_utils.url import absolute_url
    57 from pyams_viewlet.interfaces import IViewletManager
    56 from pyams_viewlet.interfaces import IViewletManager
    58 from pyams_viewlet.viewlet import viewlet_config
    57 from pyams_viewlet.viewlet import viewlet_config
    59 from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm
    58 from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm, AdminEditForm
    60 from pyams_zmi.interfaces.menu import IPropertiesMenu
    59 from pyams_zmi.interfaces.menu import IPropertiesMenu
    61 from pyams_zmi.layer import IAdminLayer
    60 from pyams_zmi.layer import IAdminLayer
    62 from pyams_zmi.view import ContainerAdminView
    61 from pyams_zmi.view import ContainerAdminView
    63 
    62 
    64 
    63 
   155                '    <span class="small hint" title="{hint}" data-ams-hint-gravity="e">' \
   154                '    <span class="small hint" title="{hint}" data-ams-hint-gravity="e">' \
   156                '        <i class="fa fa-plus-square-o switch"></i>' \
   155                '        <i class="fa fa-plus-square-o switch"></i>' \
   157                '    </span>' \
   156                '    </span>' \
   158                '</span>&nbsp;&nbsp;&nbsp;<span class="title">{title}</span>' \
   157                '</span>&nbsp;&nbsp;&nbsp;<span class="title">{title}</span>' \
   159                '<div class="inner-table-form subtypes margin-x-10 margin-bottom-0 padding-left-5"></div>'.format(
   158                '<div class="inner-table-form subtypes margin-x-10 margin-bottom-0 padding-left-5"></div>'.format(
   160                 hint=self.request.localizer.translate(_("Click to see subtypes")),
   159             hint=self.request.localizer.translate(_("Click to see subtypes")),
   161                 title=super(TypedSharedToolTypesNameColumn, self).renderCell(item))
   160             title=super(TypedSharedToolTypesNameColumn, self).renderCell(item))
   162 
   161 
   163 
   162 
   164 @adapter_config(name='paragraphs', context=(ITypedSharedTool, IPyAMSLayer, TypedSharedToolTypesTable),
   163 @adapter_config(name='paragraphs', context=(ITypedSharedTool, IPyAMSLayer, TypedSharedToolTypesTable),
   165                 provides=IColumn)
   164                 provides=IColumn)
   166 class TypedSharedToolTypesParagraphsColumn(ActionColumn):
   165 class TypedSharedToolTypesParagraphsColumn(ActionColumn):
   590         if not self.context.handle_header:
   589         if not self.context.handle_header:
   591             fields = fields.omit('header')
   590             fields = fields.omit('header')
   592         if not self.context.handle_description:
   591         if not self.context.handle_description:
   593             fields = fields.omit('description')
   592             fields = fields.omit('description')
   594         return fields
   593         return fields
       
   594 
       
   595 
       
   596 #
       
   597 # Typed shared content custom fields edit form
       
   598 #
       
   599 
       
   600 @implementer(IWidgetForm, IInnerPage)
       
   601 class TypedSharedContentTypeFieldsEditForm(AdminEditForm):
       
   602     """Typed shared content type fields properties edit form"""
       
   603 
       
   604     prefix = 'type_properties.'
       
   605 
       
   606     @property
       
   607     def legend(self):
       
   608         translate = self.request.localizer.translate
       
   609         data_type = self.context.get_data_type()
       
   610         return translate(_("Custom properties for type « {0} »")).format(
       
   611             II18n(data_type).query_attribute('label', request=self.request))
       
   612 
       
   613     @property
       
   614     def fields(self):
       
   615         data_type = self.context.get_data_type()
       
   616         if data_type is not None:
       
   617             manager = get_parent(self.context, ITypedSharedTool)
       
   618             return field.Fields(manager.shared_content_types_fields).select(*data_type.field_names)