src/pyams_content/features/share/zmi/container.py
changeset 1436 758f1ae21724
parent 1247 2b1abe98ff47
equal deleted inserted replaced
1435:347a4c2ef20c 1436:758f1ae21724
    18 from pyramid.exceptions import NotFound
    18 from pyramid.exceptions import NotFound
    19 from pyramid.view import view_config
    19 from pyramid.view import view_config
    20 from z3c.form import field
    20 from z3c.form import field
    21 from z3c.table.interfaces import IColumn, IValues
    21 from z3c.table.interfaces import IColumn, IValues
    22 from zope.interface import implementer
    22 from zope.interface import implementer
    23 from zope.schema import getFieldNamesInOrder
       
    24 
    23 
    25 from pyams_content import _
    24 from pyams_content import _
    26 from pyams_content.features.share.interfaces import ISocialShareInfo, ISocialShareManager, ISocialShareManagerTarget
    25 from pyams_content.features.share.interfaces import ISocialShareInfo, ISocialShareManager, \
       
    26     ISocialShareManagerTarget
    27 from pyams_content.features.share.zmi.interfaces import ISocialShareMenu
    27 from pyams_content.features.share.zmi.interfaces import ISocialShareMenu
    28 from pyams_content.interfaces import MANAGE_SITE_ROOT_PERMISSION
    28 from pyams_content.interfaces import MANAGE_SITE_ROOT_PERMISSION
    29 from pyams_content.zmi import pyams_content
    29 from pyams_content.zmi import pyams_content
    30 from pyams_form.form import ajax_config
    30 from pyams_form.form import ajax_config
    31 from pyams_form.group import NamedWidgetsGroup
    31 from pyams_form.group import NamedWidgetsGroup
    32 from pyams_pagelet.pagelet import pagelet_config
    32 from pyams_pagelet.pagelet import pagelet_config
    33 from pyams_skin.help import ContentHelp
    33 from pyams_skin.help import ContentHelp
    34 from pyams_skin.interfaces import IContentHelp, IPageHeader
    34 from pyams_skin.interfaces import IContentHelp, IPageHeader
    35 from pyams_skin.layer import IPyAMSLayer
    35 from pyams_skin.layer import IPyAMSLayer
    36 from pyams_skin.page import DefaultPageHeaderAdapter
    36 from pyams_skin.page import DefaultPageHeaderAdapter
    37 from pyams_skin.table import AttributeSwitcherColumn, BaseTable, I18nColumn, I18nValueColumn, SorterColumn, TrashColumn
    37 from pyams_skin.table import AttributeSwitcherColumn, BaseTable, I18nColumn, I18nValueColumn, \
       
    38     SorterColumn, TrashColumn
    38 from pyams_skin.viewlet.menu import MenuItem
    39 from pyams_skin.viewlet.menu import MenuItem
    39 from pyams_utils.adapter import ContextRequestViewAdapter, adapter_config
    40 from pyams_utils.adapter import ContextRequestViewAdapter, adapter_config
    40 from pyams_utils.fanstatic import get_resource_path
    41 from pyams_utils.fanstatic import get_resource_path
    41 from pyams_utils.url import absolute_url
    42 from pyams_utils.url import absolute_url
    42 from pyams_viewlet.viewlet import viewlet_config
    43 from pyams_viewlet.viewlet import viewlet_config
    94             translate = self.request.localizer.translate
    95             translate = self.request.localizer.translate
    95             return translate(_("No currently defined social network share item."))
    96             return translate(_("No currently defined social network share item."))
    96         return super(SocialShareContainerTable, self).render()
    97         return super(SocialShareContainerTable, self).render()
    97 
    98 
    98 
    99 
    99 @adapter_config(context=(ISocialShareManagerTarget, IPyAMSLayer, SocialShareContainerTable), provides=IValues)
   100 @adapter_config(context=(ISocialShareManagerTarget, IPyAMSLayer, SocialShareContainerTable),
       
   101                 provides=IValues)
   100 class SocialShareContainerValues(ContextRequestViewAdapter):
   102 class SocialShareContainerValues(ContextRequestViewAdapter):
   101     """Social network share items container values"""
   103     """Social network share items container values"""
   102 
   104 
   103     @property
   105     @property
   104     def values(self):
   106     def values(self):
   105         return ISocialShareManager(self.context).values()
   107         return ISocialShareManager(self.context).values()
   106 
   108 
   107 
   109 
   108 @adapter_config(name='sorter', context=(ISocialShareManagerTarget, IPyAMSLayer, SocialShareContainerTable),
   110 @adapter_config(name='sorter',
       
   111                 context=(ISocialShareManagerTarget, IPyAMSLayer, SocialShareContainerTable),
   109                 provides=IColumn)
   112                 provides=IColumn)
   110 class SocialShareContainerSorterColumn(SorterColumn):
   113 class SocialShareContainerSorterColumn(SorterColumn):
   111     """Social network share items container sorter column"""
   114     """Social network share items container sorter column"""
   112 
   115 
   113 
   116 
   114 @view_config(name='set-social-items-order.json', context=ISocialShareManager, request_type=IPyAMSLayer,
   117 @view_config(name='set-social-items-order.json', context=ISocialShareManager,
   115              permission=MANAGE_SITE_ROOT_PERMISSION, renderer='json', xhr=True)
   118              request_type=IPyAMSLayer, permission=MANAGE_SITE_ROOT_PERMISSION,
       
   119              renderer='json', xhr=True)
   116 def set_social_items_order(request):
   120 def set_social_items_order(request):
   117     """Update social network share items order"""
   121     """Update social network share items order"""
   118     order = list(map(str, json.loads(request.params.get('names'))))
   122     order = list(map(str, json.loads(request.params.get('names'))))
   119     request.context.updateOrder(order)
   123     request.context.updateOrder(order)
   120     return {'status': 'success'}
   124     return {'status': 'success'}
   121 
   125 
   122 
   126 
   123 @adapter_config(name='enable-disable', context=(ISocialShareManagerTarget, IPyAMSLayer, SocialShareContainerTable),
   127 @adapter_config(name='enable-disable',
       
   128                 context=(ISocialShareManagerTarget, IPyAMSLayer, SocialShareContainerTable),
   124                 provides=IColumn)
   129                 provides=IColumn)
   125 class SocialShareContainerEnablerColumn(AttributeSwitcherColumn):
   130 class SocialShareContainerEnablerColumn(AttributeSwitcherColumn):
   126     """Social network share items container enabler switcher column"""
   131     """Social network share items container enabler switcher column"""
   127 
   132 
   128     switch_attribute = 'active'
   133     switch_attribute = 'active'
   133     icon_hint = _("Enable/disable item")
   138     icon_hint = _("Enable/disable item")
   134 
   139 
   135     weight = 6
   140     weight = 6
   136 
   141 
   137 
   142 
   138 @view_config(name='switch-item-activity.json', context=ISocialShareManager, request_type=IPyAMSLayer,
   143 @view_config(name='switch-item-activity.json', context=ISocialShareManager,
   139              permission=MANAGE_SITE_ROOT_PERMISSION, renderer='json', xhr=True)
   144              request_type=IPyAMSLayer, permission=MANAGE_SITE_ROOT_PERMISSION,
       
   145              renderer='json', xhr=True)
   140 def switch_social_item_activity(request):
   146 def switch_social_item_activity(request):
   141     """Switch social item activity"""
   147     """Switch social item activity"""
   142     container = ISocialShareManager(request.context)
   148     container = ISocialShareManager(request.context)
   143     item = container.get(str(request.params.get('object_name')))
   149     item = container.get(str(request.params.get('object_name')))
   144     if item is None:
   150     if item is None:
   145         raise NotFound()
   151         raise NotFound()
   146     item.active = not item.active
   152     item.active = not item.active
   147     return {'on': item.active}
   153     return {
   148 
   154         'status': 'success',
   149 
   155         'on': item.active
   150 @adapter_config(name='name', context=(ISocialShareManagerTarget, IPyAMSLayer, SocialShareContainerTable),
   156     }
       
   157 
       
   158 
       
   159 @adapter_config(name='name',
       
   160                 context=(ISocialShareManagerTarget, IPyAMSLayer, SocialShareContainerTable),
   151                 provides=IColumn)
   161                 provides=IColumn)
   152 class SocialShareContainerNameColumn(I18nColumn, I18nValueColumn):
   162 class SocialShareContainerNameColumn(I18nColumn, I18nValueColumn):
   153     """Social network share items container name column"""
   163     """Social network share items container name column"""
   154 
   164 
   155     _header = _("Label")
   165     _header = _("Label")
   156     attrName = 'label'
   166     attrName = 'label'
   157     weight = 10
   167     weight = 10
   158 
   168 
   159 
   169 
   160 @adapter_config(name='trash', context=(ISocialShareManagerTarget, IPyAMSLayer, SocialShareContainerTable),
   170 @adapter_config(name='trash',
       
   171                 context=(ISocialShareManagerTarget, IPyAMSLayer, SocialShareContainerTable),
   161                 provides=IColumn)
   172                 provides=IColumn)
   162 class SocialShareContainerTrashColumn(TrashColumn):
   173 class SocialShareContainerTrashColumn(TrashColumn):
   163     """Social network share items container trash column"""
   174     """Social network share items container trash column"""
   164 
   175 
   165     permission = MANAGE_SITE_ROOT_PERMISSION
   176     permission = MANAGE_SITE_ROOT_PERMISSION
   172 
   183 
   173     title = _("Social networks share")
   184     title = _("Social networks share")
   174     table_class = SocialShareContainerTable
   185     table_class = SocialShareContainerTable
   175 
   186 
   176 
   187 
   177 @adapter_config(context=(ISocialShareManagerTarget, IAdminLayer, SocialShareContainerView), provides=IPageHeader)
   188 @adapter_config(context=(ISocialShareManagerTarget, IAdminLayer, SocialShareContainerView),
       
   189                 provides=IPageHeader)
   178 class SocialShareContainerViewHeaderAdapter(DefaultPageHeaderAdapter):
   190 class SocialShareContainerViewHeaderAdapter(DefaultPageHeaderAdapter):
   179     """Social network share items container view header adapter"""
   191     """Social network share items container view header adapter"""
   180 
   192 
   181     icon_class = 'fa fa-fw fa-share-alt'
   193     icon_class = 'fa fa-fw fa-share-alt'
   182 
   194 
   183 
   195 
   184 @adapter_config(context=(ISocialShareManagerTarget, IAdminLayer, SocialShareContainerView), provides=IContentHelp)
   196 @adapter_config(context=(ISocialShareManagerTarget, IAdminLayer, SocialShareContainerView),
       
   197                 provides=IContentHelp)
   185 class SocialShareContainerHelpAdapter(ContentHelp):
   198 class SocialShareContainerHelpAdapter(ContentHelp):
   186     """Social network share items container help adapter"""
   199     """Social network share items container help adapter"""
   187 
   200 
   188     header = _("Social networks share")
   201     header = _("Social networks share")
   189     message = _("""Social networks share items are used to define share options available on your contents.
   202     message = _("""Social networks share items are used to define share options available on your contents.
   195 
   208 
   196 #
   209 #
   197 # General social share info
   210 # General social share info
   198 #
   211 #
   199 
   212 
   200 @viewlet_config(name='social-share-info.menu', context=ISocialShareManagerTarget, layer=IPyAMSLayer,
   213 @viewlet_config(name='social-share-info.menu', context=ISocialShareManagerTarget,
   201                 manager=ISocialShareMenu, permission=MANAGE_SITE_ROOT_PERMISSION, weight=10)
   214                 layer=IPyAMSLayer, manager=ISocialShareMenu,
       
   215                 permission=MANAGE_SITE_ROOT_PERMISSION, weight=10)
   202 class SocialShareInfoMenu(MenuItem):
   216 class SocialShareInfoMenu(MenuItem):
   203     """Social share info menu"""
   217     """Social share info menu"""
   204 
   218 
   205     label = _("Social networks info...")
   219     label = _("Social networks info...")
   206     icon_class = 'fa-twitter'
   220     icon_class = 'fa-twitter'
   207     url = 'social-share-info.html'
   221     url = 'social-share-info.html'
   208     modal_target = True
   222     modal_target = True
   209 
   223 
   210 
   224 
   211 @pagelet_config(name='social-share-info.html', context=ISocialShareManagerTarget, layer=IPyAMSLayer,
   225 @pagelet_config(name='social-share-info.html', context=ISocialShareManagerTarget,
   212                 permission=MANAGE_SITE_ROOT_PERMISSION)
   226                 layer=IPyAMSLayer, permission=MANAGE_SITE_ROOT_PERMISSION)
   213 @ajax_config(name='social-share-info.json', context=ISocialShareManagerTarget, layer=IPyAMSLayer)
   227 @ajax_config(name='social-share-info.json', context=ISocialShareManagerTarget, layer=IPyAMSLayer)
   214 class SocialShareInfoEditForm(AdminDialogEditForm):
   228 class SocialShareInfoEditForm(AdminDialogEditForm):
   215     """Social share info properties edit form"""
   229     """Social share info properties edit form"""
   216 
   230 
   217     legend = _("Edit social networks properties")
   231     legend = _("Edit social networks properties")