# HG changeset patch # User Thierry Florac # Date 1531843734 -7200 # Node ID 5139e1da058e4a477cc282ea914b83b8a998bd7f # Parent 0e8c775ca958a948f927a72ff924140a035f6c3d# Parent 1afd36ed6947d2cb4f2ac5e4bda584f1a66cb890 Merge branch dev-dc diff -r 1afd36ed6947 -r 5139e1da058e src/pyams_content/features/menu/portlet/navigation/double.py --- a/src/pyams_content/features/menu/portlet/navigation/double.py Tue Jul 17 15:12:43 2018 +0200 +++ b/src/pyams_content/features/menu/portlet/navigation/double.py Tue Jul 17 18:08:54 2018 +0200 @@ -46,7 +46,6 @@ """Double navigation portlet settings""" title = FieldProperty(IDoubleNavigationPortletSettings['title']) - subtitle = FieldProperty(IDoubleNavigationPortletSettings['subtitle']) @property def menus(self): diff -r 1afd36ed6947 -r 5139e1da058e src/pyams_content/features/menu/portlet/navigation/interfaces/double.py --- a/src/pyams_content/features/menu/portlet/navigation/interfaces/double.py Tue Jul 17 15:12:43 2018 +0200 +++ b/src/pyams_content/features/menu/portlet/navigation/interfaces/double.py Tue Jul 17 18:08:54 2018 +0200 @@ -32,10 +32,6 @@ description=_("Portlet main title"), required=False) - subtitle = I18nTextLineField(title=_("Subtitle"), - description=_("Portlet subtitle"), - required=False) - menus = Attribute("Navigation menus") diff -r 1afd36ed6947 -r 5139e1da058e src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.mo Binary file src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.mo has changed diff -r 1afd36ed6947 -r 5139e1da058e src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.po --- a/src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.po Tue Jul 17 15:12:43 2018 +0200 +++ b/src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.po Tue Jul 17 18:08:54 2018 +0200 @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE 1.0\n" -"POT-Creation-Date: 2018-07-17 14:54+0200\n" +"POT-Creation-Date: 2018-07-17 17:31+0200\n" "PO-Revision-Date: 2015-09-10 10:42+0200\n" "Last-Translator: Thierry Florac \n" "Language-Team: French\n" @@ -2095,8 +2095,7 @@ msgid "" "You must confirm that you checked this content before requesting " "publication!!" -msgstr "" -"Vous devez avoir audité ce contenu avant de pouvoir le publier !!" +msgstr "Vous devez avoir audité ce contenu avant de pouvoir le publier !!" #: src/pyams_content/shared/common/zmi/workflow.py:84 #: src/pyams_content/workflow/__init__.py:648 @@ -3625,7 +3624,7 @@ "Trier tous les résultats sur la date de première publication (du plus récent " "au plus ancien)" -#: src/pyams_content/shared/view/zmi/properties.py:40 +#: src/pyams_content/shared/view/zmi/properties.py:45 msgid "Main view settings" msgstr "Paramètres de la vue" @@ -3726,7 +3725,7 @@ "uniquement sur les paramètres de la vue." #: src/pyams_content/shared/view/portlet/interfaces.py:91 -#: src/pyams_content/shared/view/interfaces/__init__.py:86 +#: src/pyams_content/shared/view/interfaces/__init__.py:102 msgid "Results count limit" msgstr "Limite de résultats" @@ -3745,139 +3744,161 @@ msgid "No selected view" msgstr "Aucune vue sélectionnée." -#: src/pyams_content/shared/view/interfaces/__init__.py:32 +#: src/pyams_content/shared/view/interfaces/__init__.py:34 msgid "View" msgstr "Vue" -#: src/pyams_content/shared/view/interfaces/__init__.py:150 +#: src/pyams_content/shared/view/interfaces/__init__.py:166 msgid "Always include selected internal references" msgstr "Toujours inclure toutes les références internes" -#: src/pyams_content/shared/view/interfaces/__init__.py:151 +#: src/pyams_content/shared/view/interfaces/__init__.py:167 msgid "Include selected internal references only if empty" msgstr "Inclure les références internes seulement lorsque la vue est vide" -#: src/pyams_content/shared/view/interfaces/__init__.py:41 +#: src/pyams_content/shared/view/interfaces/__init__.py:43 #: src/pyams_content/interfaces/__init__.py:113 #: src/pyams_content/features/review/interfaces.py:74 msgid "Creation date" msgstr "Date de création" -#: src/pyams_content/shared/view/interfaces/__init__.py:42 +#: src/pyams_content/shared/view/interfaces/__init__.py:44 msgid "Last update date" msgstr "Date de dernière modification" -#: src/pyams_content/shared/view/interfaces/__init__.py:43 +#: src/pyams_content/shared/view/interfaces/__init__.py:45 msgid "Current publication date" msgstr "Date de publication de la version actuelle" -#: src/pyams_content/shared/view/interfaces/__init__.py:44 +#: src/pyams_content/shared/view/interfaces/__init__.py:46 msgid "First publication date" msgstr "Date de première publication" -#: src/pyams_content/shared/view/interfaces/__init__.py:62 +#: src/pyams_content/shared/view/interfaces/__init__.py:64 msgid "Select context type?" -msgstr "Type du contexte ?" - -#: src/pyams_content/shared/view/interfaces/__init__.py:63 +msgstr "Gabarit du contexte ?" + +#: src/pyams_content/shared/view/interfaces/__init__.py:65 msgid "If 'yes', content type will be extracted from context" msgstr "" -"Si 'oui', seuls des contenus du même type que le contexte seront " +"Si 'oui', seuls des contenus du même gabarit que le contexte seront " "automatiquement sélectionnés" -#: src/pyams_content/shared/view/interfaces/__init__.py:67 +#: src/pyams_content/shared/view/interfaces/__init__.py:69 msgid "Other content types" -msgstr "Autres types de contenus" - -#: src/pyams_content/shared/view/interfaces/__init__.py:68 +msgstr "Autres gabarits" + +#: src/pyams_content/shared/view/interfaces/__init__.py:70 msgid "Selected content types; leave empty for all" msgstr "" -"Autres types de contenus sélectionnés ; si l'on n'extrait pas le type du " -"contexte et si cette sélection est vide, tous les types seront pris en charge" - -#: src/pyams_content/shared/view/interfaces/__init__.py:75 +"Autres gabarits sélectionnés ; si l'on n'extrait pas le gabarit du contexte " +"et si cette sélection est vide, tous les gabarits seront pris en charge" + +#: src/pyams_content/shared/view/interfaces/__init__.py:77 +msgid "Select context data type?" +msgstr "Type du contexte ?" + +#: src/pyams_content/shared/view/interfaces/__init__.py:78 +msgid "" +"If 'yes', content data type (if available) will be extracted from context" +msgstr "" +"Si 'oui', et si le contexte de la vue est \"typé\", seuls des contenus du même type " +"que le contexte seront automatiquement sélectionnés" + +#: src/pyams_content/shared/view/interfaces/__init__.py:83 +msgid "Other data types" +msgstr "Autres types de contenus" + +#: src/pyams_content/shared/view/interfaces/__init__.py:84 +msgid "Selected data types; leave empty for all" +msgstr "" +"Autres types de contenus sélectionnés ; si l'on n'extrait pas le type du contexte " +"et si cette sélection est vide, tous les contenus (typés ou non) seront " +"pris en charge" + +#: src/pyams_content/shared/view/interfaces/__init__.py:91 msgid "Order by" msgstr "Ordre de tri" -#: src/pyams_content/shared/view/interfaces/__init__.py:76 +#: src/pyams_content/shared/view/interfaces/__init__.py:92 msgid "Property to use to sort results" msgstr "" "Propriété utilisée pour trier les résultats ; par défaut, le tri se fait en " "ordre inverse, donc du plus récent au plus ancien" -#: src/pyams_content/shared/view/interfaces/__init__.py:81 +#: src/pyams_content/shared/view/interfaces/__init__.py:97 msgid "Reversed order?" msgstr "Ordre inverse ?" -#: src/pyams_content/shared/view/interfaces/__init__.py:82 +#: src/pyams_content/shared/view/interfaces/__init__.py:98 msgid "If 'yes', items order will be reversed" msgstr "" "Si 'non', le tri se fera en ordre \"naturel\", donc du plus ancien au plus " "récent" -#: src/pyams_content/shared/view/interfaces/__init__.py:87 +#: src/pyams_content/shared/view/interfaces/__init__.py:103 msgid "Maximum number of results that the view may retrieve" msgstr "Nombre maximal de résultats que la vue doit renvoyer" -#: src/pyams_content/shared/view/interfaces/__init__.py:160 +#: src/pyams_content/shared/view/interfaces/__init__.py:176 msgid "Internal references usage" msgstr "Utilisation des références internes" -#: src/pyams_content/shared/view/interfaces/__init__.py:161 +#: src/pyams_content/shared/view/interfaces/__init__.py:177 msgid "Specify how selected references are included into view results" msgstr "" "Indique comment les références internes indiquées seront intégrées à la " "liste des résultats" -#: src/pyams_content/shared/view/interfaces/__init__.py:166 +#: src/pyams_content/shared/view/interfaces/__init__.py:182 msgid "Exclude context?" msgstr "Exclure le contexte ?" -#: src/pyams_content/shared/view/interfaces/__init__.py:167 +#: src/pyams_content/shared/view/interfaces/__init__.py:183 msgid "If 'yes', context will be excluded from results list" msgstr "" "Si 'oui', le contexte d'application de la vue sera automatiquement exclus de " "la liste des résultats" -#: src/pyams_content/shared/view/interfaces/__init__.py:178 +#: src/pyams_content/shared/view/interfaces/__init__.py:194 msgid "Select context tags?" msgstr "Tags du contexte ?" -#: src/pyams_content/shared/view/interfaces/__init__.py:179 +#: src/pyams_content/shared/view/interfaces/__init__.py:195 msgid "If 'yes', tags will be extracted from context" msgstr "" "Si 'oui', les tags associés au contexte d'application de la vue seront " "automatiquement sélectionnés" -#: src/pyams_content/shared/view/interfaces/__init__.py:183 +#: src/pyams_content/shared/view/interfaces/__init__.py:199 msgid "Other tags" msgstr "Autres tags" -#: src/pyams_content/shared/view/interfaces/__init__.py:199 +#: src/pyams_content/shared/view/interfaces/__init__.py:215 msgid "Select context themes?" msgstr "Thèmes du contexte ?" -#: src/pyams_content/shared/view/interfaces/__init__.py:200 +#: src/pyams_content/shared/view/interfaces/__init__.py:216 msgid "If 'yes', themes will be extracted from context" msgstr "" "Si 'oui', les thèmes associés au contexte d'application de la vue seront " "automatiquement sélectionnés" -#: src/pyams_content/shared/view/interfaces/__init__.py:204 +#: src/pyams_content/shared/view/interfaces/__init__.py:220 msgid "Other themes" msgstr "Autres thèmes" -#: src/pyams_content/shared/view/interfaces/__init__.py:220 +#: src/pyams_content/shared/view/interfaces/__init__.py:236 msgid "Select context collections?" msgstr "Collections du contexte ?" -#: src/pyams_content/shared/view/interfaces/__init__.py:221 +#: src/pyams_content/shared/view/interfaces/__init__.py:237 msgid "If 'yes', collections will be extracted from context" msgstr "" "Si 'oui', les collections associées au contexte d'application de la vue " "seront automatiquement sélectionnés" -#: src/pyams_content/shared/view/interfaces/__init__.py:225 +#: src/pyams_content/shared/view/interfaces/__init__.py:241 msgid "Other collections" msgstr "Autres collections" diff -r 1afd36ed6947 -r 5139e1da058e src/pyams_content/locales/pyams_content.pot --- a/src/pyams_content/locales/pyams_content.pot Tue Jul 17 15:12:43 2018 +0200 +++ b/src/pyams_content/locales/pyams_content.pot Tue Jul 17 18:08:54 2018 +0200 @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE 1.0\n" -"POT-Creation-Date: 2018-07-17 14:54+0200\n" +"POT-Creation-Date: 2018-07-17 17:31+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" @@ -3396,7 +3396,7 @@ msgid "Sort all results by first publication date" msgstr "" -#: ./src/pyams_content/shared/view/zmi/properties.py:40 +#: ./src/pyams_content/shared/view/zmi/properties.py:45 msgid "Main view settings" msgstr "" @@ -3482,7 +3482,7 @@ msgstr "" #: ./src/pyams_content/shared/view/portlet/interfaces.py:91 -#: ./src/pyams_content/shared/view/interfaces/__init__.py:86 +#: ./src/pyams_content/shared/view/interfaces/__init__.py:102 msgid "Results count limit" msgstr "" @@ -3499,121 +3499,138 @@ msgid "No selected view" msgstr "" -#: ./src/pyams_content/shared/view/interfaces/__init__.py:32 +#: ./src/pyams_content/shared/view/interfaces/__init__.py:34 msgid "View" msgstr "" -#: ./src/pyams_content/shared/view/interfaces/__init__.py:150 +#: ./src/pyams_content/shared/view/interfaces/__init__.py:166 msgid "Always include selected internal references" msgstr "" -#: ./src/pyams_content/shared/view/interfaces/__init__.py:151 +#: ./src/pyams_content/shared/view/interfaces/__init__.py:167 msgid "Include selected internal references only if empty" msgstr "" -#: ./src/pyams_content/shared/view/interfaces/__init__.py:41 +#: ./src/pyams_content/shared/view/interfaces/__init__.py:43 #: ./src/pyams_content/interfaces/__init__.py:113 #: ./src/pyams_content/features/review/interfaces.py:74 msgid "Creation date" msgstr "" -#: ./src/pyams_content/shared/view/interfaces/__init__.py:42 -msgid "Last update date" -msgstr "" - -#: ./src/pyams_content/shared/view/interfaces/__init__.py:43 -msgid "Current publication date" -msgstr "" - #: ./src/pyams_content/shared/view/interfaces/__init__.py:44 +msgid "Last update date" +msgstr "" + +#: ./src/pyams_content/shared/view/interfaces/__init__.py:45 +msgid "Current publication date" +msgstr "" + +#: ./src/pyams_content/shared/view/interfaces/__init__.py:46 msgid "First publication date" msgstr "" -#: ./src/pyams_content/shared/view/interfaces/__init__.py:62 +#: ./src/pyams_content/shared/view/interfaces/__init__.py:64 msgid "Select context type?" msgstr "" -#: ./src/pyams_content/shared/view/interfaces/__init__.py:63 +#: ./src/pyams_content/shared/view/interfaces/__init__.py:65 msgid "If 'yes', content type will be extracted from context" msgstr "" -#: ./src/pyams_content/shared/view/interfaces/__init__.py:67 +#: ./src/pyams_content/shared/view/interfaces/__init__.py:69 msgid "Other content types" msgstr "" -#: ./src/pyams_content/shared/view/interfaces/__init__.py:68 +#: ./src/pyams_content/shared/view/interfaces/__init__.py:70 msgid "Selected content types; leave empty for all" msgstr "" -#: ./src/pyams_content/shared/view/interfaces/__init__.py:75 +#: ./src/pyams_content/shared/view/interfaces/__init__.py:77 +msgid "Select context data type?" +msgstr "" + +#: ./src/pyams_content/shared/view/interfaces/__init__.py:78 +msgid "" +"If 'yes', content data type (if available) will be extracted from context" +msgstr "" + +#: ./src/pyams_content/shared/view/interfaces/__init__.py:83 +msgid "Other data types" +msgstr "" + +#: ./src/pyams_content/shared/view/interfaces/__init__.py:84 +msgid "Selected data types; leave empty for all" +msgstr "" + +#: ./src/pyams_content/shared/view/interfaces/__init__.py:91 msgid "Order by" msgstr "" -#: ./src/pyams_content/shared/view/interfaces/__init__.py:76 +#: ./src/pyams_content/shared/view/interfaces/__init__.py:92 msgid "Property to use to sort results" msgstr "" -#: ./src/pyams_content/shared/view/interfaces/__init__.py:81 +#: ./src/pyams_content/shared/view/interfaces/__init__.py:97 msgid "Reversed order?" msgstr "" -#: ./src/pyams_content/shared/view/interfaces/__init__.py:82 +#: ./src/pyams_content/shared/view/interfaces/__init__.py:98 msgid "If 'yes', items order will be reversed" msgstr "" -#: ./src/pyams_content/shared/view/interfaces/__init__.py:87 +#: ./src/pyams_content/shared/view/interfaces/__init__.py:103 msgid "Maximum number of results that the view may retrieve" msgstr "" -#: ./src/pyams_content/shared/view/interfaces/__init__.py:160 +#: ./src/pyams_content/shared/view/interfaces/__init__.py:176 msgid "Internal references usage" msgstr "" -#: ./src/pyams_content/shared/view/interfaces/__init__.py:161 +#: ./src/pyams_content/shared/view/interfaces/__init__.py:177 msgid "Specify how selected references are included into view results" msgstr "" -#: ./src/pyams_content/shared/view/interfaces/__init__.py:166 +#: ./src/pyams_content/shared/view/interfaces/__init__.py:182 msgid "Exclude context?" msgstr "" -#: ./src/pyams_content/shared/view/interfaces/__init__.py:167 -msgid "If 'yes', context will be excluded from results list" -msgstr "" - -#: ./src/pyams_content/shared/view/interfaces/__init__.py:178 -msgid "Select context tags?" -msgstr "" - -#: ./src/pyams_content/shared/view/interfaces/__init__.py:179 -msgid "If 'yes', tags will be extracted from context" -msgstr "" - #: ./src/pyams_content/shared/view/interfaces/__init__.py:183 -msgid "Other tags" +msgid "If 'yes', context will be excluded from results list" +msgstr "" + +#: ./src/pyams_content/shared/view/interfaces/__init__.py:194 +msgid "Select context tags?" +msgstr "" + +#: ./src/pyams_content/shared/view/interfaces/__init__.py:195 +msgid "If 'yes', tags will be extracted from context" msgstr "" #: ./src/pyams_content/shared/view/interfaces/__init__.py:199 +msgid "Other tags" +msgstr "" + +#: ./src/pyams_content/shared/view/interfaces/__init__.py:215 msgid "Select context themes?" msgstr "" -#: ./src/pyams_content/shared/view/interfaces/__init__.py:200 +#: ./src/pyams_content/shared/view/interfaces/__init__.py:216 msgid "If 'yes', themes will be extracted from context" msgstr "" -#: ./src/pyams_content/shared/view/interfaces/__init__.py:204 -msgid "Other themes" -msgstr "" - #: ./src/pyams_content/shared/view/interfaces/__init__.py:220 +msgid "Other themes" +msgstr "" + +#: ./src/pyams_content/shared/view/interfaces/__init__.py:236 msgid "Select context collections?" msgstr "" -#: ./src/pyams_content/shared/view/interfaces/__init__.py:221 +#: ./src/pyams_content/shared/view/interfaces/__init__.py:237 msgid "If 'yes', collections will be extracted from context" msgstr "" -#: ./src/pyams_content/shared/view/interfaces/__init__.py:225 +#: ./src/pyams_content/shared/view/interfaces/__init__.py:241 msgid "Other collections" msgstr "" diff -r 1afd36ed6947 -r 5139e1da058e src/pyams_content/shared/common/__init__.py --- a/src/pyams_content/shared/common/__init__.py Tue Jul 17 15:12:43 2018 +0200 +++ b/src/pyams_content/shared/common/__init__.py Tue Jul 17 18:08:54 2018 +0200 @@ -22,7 +22,7 @@ from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE, ERROR_VALUE from pyams_content.features.review.interfaces import IReviewComments from pyams_content.shared.common.interfaces import IWfSharedContent, IWfSharedContentRoles, ISharedContent, \ - IBaseSharedTool, ISharedSite, IWfSharedContentFactory + IBaseSharedTool, ISharedSite, IWfSharedContentFactory, CONTENT_TYPES_VOCABULARY from pyams_i18n.interfaces import II18nManager, II18n from pyams_portal.interfaces import DESIGNER_ROLE from pyams_security.interfaces import IDefaultProtectionPolicy @@ -94,7 +94,7 @@ del CONTENT_TYPES[key] -@vocabulary_config(name='PyAMS content types') +@vocabulary_config(name=CONTENT_TYPES_VOCABULARY) class ContentTypesVocabulary(SimpleVocabulary): """Content types vocabulary""" diff -r 1afd36ed6947 -r 5139e1da058e src/pyams_content/shared/common/interfaces/__init__.py --- a/src/pyams_content/shared/common/interfaces/__init__.py Tue Jul 17 15:12:43 2018 +0200 +++ b/src/pyams_content/shared/common/interfaces/__init__.py Tue Jul 17 18:08:54 2018 +0200 @@ -225,6 +225,9 @@ """Workflow managed shared content factory interface""" +CONTENT_TYPES_VOCABULARY = 'PyAMS content types' + + # # Generic restrictions interfaces # diff -r 1afd36ed6947 -r 5139e1da058e src/pyams_content/shared/common/types.py --- a/src/pyams_content/shared/common/types.py Tue Jul 17 15:12:43 2018 +0200 +++ b/src/pyams_content/shared/common/types.py Tue Jul 17 18:08:54 2018 +0200 @@ -21,9 +21,10 @@ from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget from pyams_content.component.theme.interfaces import IThemesTarget, IThemesInfo from pyams_content.interfaces import MANAGE_TOOL_PERMISSION +from pyams_content.shared.common.interfaces import ISharedContentFactory from pyams_content.shared.common.interfaces.types import IDataType, ISubType, IBaseDataType, ITypedSharedTool, \ ITypedDataManager, DATA_MANAGER_ANNOTATION_KEY, DATA_TYPES_VOCABULARY, DATA_TYPE_FIELDS_VOCABULARY, \ - IWfTypedSharedContent, DATA_SUBTYPES_VOCABULARY + IWfTypedSharedContent, DATA_SUBTYPES_VOCABULARY, ALL_DATA_TYPES_VOCABULARY from pyams_form.interfaces.form import IFormContextPermissionChecker from pyams_i18n.interfaces import II18n from zope.lifecycleevent.interfaces import IObjectAddedEvent @@ -32,9 +33,10 @@ # import packages from persistent import Persistent -from pyams_content.shared.common import WfSharedContent +from pyams_content.shared.common import WfSharedContent, IWfSharedContentFactory from pyams_content.shared.common.manager import SharedTool from pyams_utils.adapter import adapter_config, ContextAdapter, get_annotation_adapter +from pyams_utils.registry import get_local_registry from pyams_utils.request import check_request from pyams_utils.traversing import get_parent from pyams_utils.vocabulary import vocabulary_config @@ -147,6 +149,43 @@ # Data types vocabularies # +@vocabulary_config(name=ALL_DATA_TYPES_VOCABULARY) +class AllTypedSharedToolDataTypesVocabulary(SimpleVocabulary): + """Vocabulary consolidating all data types""" + + def __init__(self, context): + terms = [] + request = check_request() + registry = get_local_registry() + for tool in registry.getAllUtilitiesRegisteredFor(ITypedSharedTool): + manager = ITypedDataManager(tool) + terms.extend([SimpleTerm(datatype.__name__, + title=II18n(datatype).query_attribute('label', request=request)) + for datatype in manager.values()]) + terms.sort(key=lambda x: x.title) + super(AllTypedSharedToolDataTypesVocabulary, self).__init__(terms) + + +def get_all_data_types(request): + """Get list of all registered data types as JSON object""" + results = [] + registry = get_local_registry() + for tool in sorted(registry.getAllUtilitiesRegisteredFor(ITypedSharedTool), + key=lambda x: II18n(x).query_attribute('title', request=request)): + manager = ITypedDataManager(tool) + terms = [{ + 'id': datatype.__name__, + 'text': II18n(datatype).query_attribute('label', request=request) + } for datatype in manager.values()] + content_factory = IWfSharedContentFactory(ISharedContentFactory(tool)) + results.append({ + 'text': request.localizer.translate(content_factory.content_name), + 'disabled': True, + 'children': terms + }) + return results + + @vocabulary_config(name=DATA_TYPES_VOCABULARY) class TypedSharedToolDataTypesVocabulary(SimpleVocabulary): """Typed shared tool data types vocabulary""" diff -r 1afd36ed6947 -r 5139e1da058e src/pyams_content/shared/view/__init__.py --- a/src/pyams_content/shared/view/__init__.py Tue Jul 17 15:12:43 2018 +0200 +++ b/src/pyams_content/shared/view/__init__.py Tue Jul 17 18:08:54 2018 +0200 @@ -9,6 +9,7 @@ # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS # FOR A PARTICULAR PURPOSE. # +from pyams_content.shared.common.interfaces.types import IWfTypedSharedContent __docformat__ = 'restructuredtext' @@ -65,6 +66,8 @@ select_context_type = FieldProperty(IWfView['select_context_type']) selected_content_types = FieldProperty(IWfView['selected_content_types']) + select_context_datatype = FieldProperty(IWfView['select_context_datatype']) + selected_datatypes = FieldProperty(IWfView['selected_datatypes']) order_by = FieldProperty(IWfView['order_by']) reversed_order = FieldProperty(IWfView['reversed_order']) limit = FieldProperty(IWfView['limit']) @@ -89,6 +92,16 @@ content_types |= set(self.selected_content_types) return list(content_types) + def get_data_types(self, context): + data_types = set() + if self.select_context_datatype: + content = IWfTypedSharedContent(context, None) + if content is not None: + data_types.add(content.data_type) + if self.selected_datatypes: + data_types |= set(self.selected_datatypes) + return list(data_types) + def get_results(self, context, sort_index=None, reverse=None, limit=None, ignore_cache=False): results = _MARKER if not ignore_cache: @@ -153,6 +166,10 @@ content_types = view.get_content_types(context) if content_types: params &= Any(catalog['content_type'], content_types) + # check data types + data_types = view.get_data_types(context) + if data_types: + params &= Any(catalog['data_type'], data_types) # check workflow states wf_params = None for workflow in registry.getAllUtilitiesRegisteredFor(IWorkflow): diff -r 1afd36ed6947 -r 5139e1da058e src/pyams_content/shared/view/interfaces/__init__.py --- a/src/pyams_content/shared/view/interfaces/__init__.py Tue Jul 17 15:12:43 2018 +0200 +++ b/src/pyams_content/shared/view/interfaces/__init__.py Tue Jul 17 18:08:54 2018 +0200 @@ -16,13 +16,15 @@ # import standard library # import interfaces -from pyams_content.shared.common.interfaces import ISharedContent, IWfSharedContent, ISharedTool +from pyams_content.shared.common.interfaces import ISharedContent, IWfSharedContent, ISharedTool, \ + CONTENT_TYPES_VOCABULARY +from pyams_content.shared.common.interfaces.types import ALL_DATA_TYPES_VOCABULARY from pyams_sequence.interfaces import IInternalReferencesList # import packages from pyams_thesaurus.schema import ThesaurusTermsListField from zope.interface import Interface, Attribute -from zope.schema import List, Choice, Bool, Int +from zope.schema import List, Set, Choice, Bool, Int from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm from pyams_content import _ @@ -64,14 +66,28 @@ required=True, default=False) - selected_content_types = List(title=_("Other content types"), - description=_("Selected content types; leave empty for all"), - value_type=Choice(vocabulary='PyAMS content types'), - required=False) + selected_content_types = Set(title=_("Other content types"), + description=_("Selected content types; leave empty for all"), + value_type=Choice(vocabulary=CONTENT_TYPES_VOCABULARY), + required=False) def get_content_types(self, context): """Get content types for given context""" + select_context_datatype = Bool(title=_("Select context data type?"), + description=_("If 'yes', content data type (if available) will be extracted from " + "context"), + required=True, + default=False) + + selected_datatypes = Set(title=_("Other data types"), + description=_("Selected data types; leave empty for all"), + value_type=Choice(vocabulary=ALL_DATA_TYPES_VOCABULARY), + required=False) + + def get_data_types(self, context): + """Get data types for given context""" + order_by = Choice(title=_("Order by"), description=_("Property to use to sort results"), vocabulary=VIEW_ORDER_VOCABULARY, diff -r 1afd36ed6947 -r 5139e1da058e src/pyams_content/shared/view/zmi/properties.py --- a/src/pyams_content/shared/view/zmi/properties.py Tue Jul 17 15:12:43 2018 +0200 +++ b/src/pyams_content/shared/view/zmi/properties.py Tue Jul 17 18:08:54 2018 +0200 @@ -14,17 +14,22 @@ # import standard library +import json # import interfaces from pyams_content.shared.view.interfaces import IWfView from pyams_form.interfaces.form import IInnerSubForm from pyams_skin.layer import IPyAMSLayer +from pyams_utils.interfaces.data import IObjectData # import packages +from pyams_content.shared.common.types import get_all_data_types from pyams_content.shared.common.zmi.properties import SharedContentPropertiesEditForm +from pyams_form.widget import HiddenSelect2FieldWidget from pyams_utils.adapter import adapter_config from pyams_zmi.form import InnerAdminEditForm from z3c.form import field +from zope.interface import alsoProvides from pyams_content import _ @@ -41,5 +46,19 @@ fieldset_class = 'bordered no-x-margin margin-y-10' fields = field.Fields(IWfView).select('select_context_type', 'selected_content_types', + 'select_context_datatype', 'selected_datatypes', 'order_by', 'reversed_order', 'limit') + fields['selected_datatypes'].widgetFactory = HiddenSelect2FieldWidget + weight = 1 + + def updateWidgets(self, prefix=None): + super(ViewPropertiesEditForm, self).updateWidgets(prefix) + if 'selected_datatypes' in self.widgets: + widget = self.widgets['selected_datatypes'] + # widget.multiple = True + widget.object_data = { + 'ams-select2-multiple': True, + 'ams-select2-data': json.dumps(get_all_data_types(self.request)) + } + alsoProvides(widget, IObjectData)