src/pyams_content/component/theme/zmi/__init__.py
changeset 829 f933926ed0a1
parent 825 3f5684390091
child 1389 1485db1e2b5e
equal deleted inserted replaced
828:bf12603398b2 829:f933926ed0a1
    15 
    15 
    16 # import standard library
    16 # import standard library
    17 
    17 
    18 # import interfaces
    18 # import interfaces
    19 from pyams_content.component.theme import ITagsTarget, ITagsInfo, ITagsManager, IThemesTarget, IThemesInfo, \
    19 from pyams_content.component.theme import ITagsTarget, ITagsInfo, ITagsManager, IThemesTarget, IThemesInfo, \
    20     IThemesManagerTarget, IThemesManager
    20     IThemesManagerTarget, IThemesManager, ICollectionsTarget, ICollectionsInfo, ICollectionsManager, \
       
    21     ICollectionsManagerTarget
    21 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
    22 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
    22 from pyams_form.interfaces.form import IWidgetForm
    23 from pyams_form.interfaces.form import IWidgetForm
    23 from pyams_skin.interfaces import IInnerPage, IPageHeader, IDialog
    24 from pyams_skin.interfaces import IInnerPage, IPageHeader, IDialog
    24 from pyams_skin.layer import IPyAMSLayer
    25 from pyams_skin.layer import IPyAMSLayer
    25 from pyams_thesaurus.interfaces.thesaurus import IThesaurus
       
    26 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
    26 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
    27 from pyams_zmi.interfaces.menu import IPropertiesMenu
    27 from pyams_zmi.interfaces.menu import IPropertiesMenu
    28 from pyams_zmi.layer import IAdminLayer
    28 from pyams_zmi.layer import IAdminLayer
    29 
    29 
    30 # import packages
    30 # import packages
    31 from pyams_content.shared.common.zmi import WfSharedContentHeaderAdapter
    31 from pyams_content.shared.common.zmi import WfSharedContentHeaderAdapter
    32 from pyams_form.form import ajax_config, AJAXEditForm, EditForm
    32 from pyams_form.form import ajax_config, AJAXEditForm, EditForm
    33 from pyams_pagelet.pagelet import pagelet_config
    33 from pyams_pagelet.pagelet import pagelet_config
    34 from pyams_skin.viewlet.menu import MenuItem
    34 from pyams_skin.viewlet.menu import MenuItem
    35 from pyams_thesaurus.widget import ThesaurusTermsTreeFieldWidget
    35 from pyams_thesaurus.zmi.widget import ThesaurusTermsTreeFieldWidget
    36 from pyams_utils.adapter import adapter_config
    36 from pyams_utils.adapter import adapter_config
    37 from pyams_utils.registry import query_utility
       
    38 from pyams_utils.traversing import get_parent
    37 from pyams_utils.traversing import get_parent
    39 from pyams_viewlet.viewlet import viewlet_config
    38 from pyams_viewlet.viewlet import viewlet_config
    40 from pyams_zmi.form import AdminEditForm, AdminDialogEditForm
    39 from pyams_zmi.form import AdminEditForm, AdminDialogEditForm
    41 from z3c.form import field
    40 from z3c.form import field
    42 from zope.interface import implementer
    41 from zope.interface import implementer
    70     input_css_class = 'col-md-12'
    69     input_css_class = 'col-md-12'
    71 
    70 
    72     fields = field.Fields(ITagsInfo)
    71     fields = field.Fields(ITagsInfo)
    73     fields['tags'].widgetFactory = ThesaurusTermsTreeFieldWidget
    72     fields['tags'].widgetFactory = ThesaurusTermsTreeFieldWidget
    74 
    73 
    75     def __init__(self, context, request):
       
    76         super(TagsEditForm, self).__init__(context, request)
       
    77         manager = ITagsManager(request.root)
       
    78         self.thesaurus_name = manager.thesaurus_name
       
    79         self.extract_name = manager.extract_name
       
    80 
       
    81     def updateWidgets(self, prefix=None):
    74     def updateWidgets(self, prefix=None):
    82         super(TagsEditForm, self).updateWidgets(prefix)
    75         super(TagsEditForm, self).updateWidgets(prefix)
    83         widget = self.widgets['tags']
    76         if 'tags' in self.widgets:
    84         widget.thesaurus_name = self.thesaurus_name
    77             widget = self.widgets['tags']
    85         widget.extract_name = self.extract_name
    78             manager = ITagsManager(self.request.root)
    86 
    79             widget.thesaurus_name = manager.thesaurus_name
    87     @property
    80             widget.extract_name = manager.extract_name
    88     def top_terms(self):
       
    89         thesaurus = query_utility(IThesaurus, name=self.thesaurus_name)
       
    90         if thesaurus is not None:
       
    91             return sorted(thesaurus.get_top_terms(extract=self.extract_name),
       
    92                           key=lambda x: x.label)
       
    93         else:
       
    94             return ()
       
    95 
       
    96     def get_subterms(self, term):
       
    97         for subterm in term.specifics:
       
    98             if (not self.extract_name) or (self.extract_name in subterm.extracts):
       
    99                 yield subterm
       
   100                 for another in self.get_subterms(subterm):
       
   101                     yield another
       
   102 
    81 
   103 
    82 
   104 @adapter_config(context=(ITagsTarget, IAdminLayer, TagsEditForm), provides=IPageHeader)
    83 @adapter_config(context=(ITagsTarget, IAdminLayer, TagsEditForm), provides=IPageHeader)
   105 class TagsHeaderAdapter(WfSharedContentHeaderAdapter):
    84 class TagsHeaderAdapter(WfSharedContentHeaderAdapter):
   106     """Shared content tags header adapter"""
    85     """Shared content tags header adapter"""
   164 @implementer(IDialog)
   143 @implementer(IDialog)
   165 class DialogThemesEditForm(BaseThemesEditForm, AdminDialogEditForm):
   144 class DialogThemesEditForm(BaseThemesEditForm, AdminDialogEditForm):
   166     """Dialog themes edit form"""
   145     """Dialog themes edit form"""
   167 
   146 
   168     dialog_class = 'modal-large'
   147     dialog_class = 'modal-large'
       
   148 
       
   149 
       
   150 #
       
   151 # Collections management
       
   152 #
       
   153 
       
   154 @viewlet_config(name='collections.menu', context=ICollectionsTarget, layer=IAdminLayer,
       
   155                 manager=IPropertiesMenu, permission=VIEW_SYSTEM_PERMISSION, weight=354)
       
   156 class CollectionsMenu(MenuItem):
       
   157     """Collections menu"""
       
   158 
       
   159     label = _("Collections...")
       
   160     icon_class = 'fa-book'
       
   161     url = '#collections.html'
       
   162 
       
   163 
       
   164 @pagelet_config(name='collections.html', context=ICollectionsTarget, layer=IPyAMSLayer,
       
   165                 permission=VIEW_SYSTEM_PERMISSION)
       
   166 @ajax_config(name='collections.json', context=ICollectionsTarget, layer=IPyAMSLayer,
       
   167              permission=MANAGE_CONTENT_PERMISSION)
       
   168 @implementer(IWidgetForm, IInnerPage)
       
   169 class CollectionsEditForm(AdminEditForm):
       
   170     """Collections edit form"""
       
   171 
       
   172     legend = _("Content collections")
       
   173 
       
   174     label_css_class = 'control-label hidden'
       
   175     input_css_class = 'col-md-12'
       
   176 
       
   177     fields = field.Fields(ICollectionsInfo)
       
   178     fields['collections'].widgetFactory = ThesaurusTermsTreeFieldWidget
       
   179 
       
   180     def __init__(self, context, request):
       
   181         super(CollectionsEditForm, self).__init__(context, request)
       
   182         target = get_parent(self.context, ICollectionsManagerTarget)
       
   183         manager = ICollectionsManager(target)
       
   184         self.thesaurus_name = manager.thesaurus_name
       
   185         self.extract_name = manager.extract_name
       
   186 
       
   187     def updateWidgets(self, prefix=None):
       
   188         super(CollectionsEditForm, self).updateWidgets(prefix)
       
   189         if 'collections' in self.widgets:
       
   190             widget = self.widgets['collections']
       
   191             target = get_parent(self.context, ICollectionsManagerTarget)
       
   192             manager = ICollectionsManager(target)
       
   193             widget.thesaurus_name = manager.thesaurus_name
       
   194             widget.extract_name = manager.extract_name
       
   195 
       
   196 
       
   197 @adapter_config(context=(ICollectionsTarget, IAdminLayer, CollectionsEditForm), provides=IPageHeader)
       
   198 class CollectionsHeaderAdapter(WfSharedContentHeaderAdapter):
       
   199     """Shared content collections header adapter"""
       
   200 
       
   201     icon_class = 'fa fa-fw fa-book'