def get_object_data(self): is_dp = False if not IFolder.providedBy(self.obj): if defaultpage: container = aq_parent(self.obj) if container: is_dp = defaultpage.is_default_page(container, self.obj) else: is_dp = ptool.isDefaultPage(self.obj) has_sibling_pages = True if is_dp: container = aq_parent(self.obj) res = catalog( path={'query': '/'.join(container.getPhysicalPath())}) if len([b for b in res if b.UID != self.image_to_lead]) > 1: has_sibling_pages = False try: state = workflow.getInfoFor(ob=self.obj, name='review_state') except: state = None return { 'portal_type': self.obj.portal_type, 'layout': self.obj.getLayout(), 'uid': get_uid(self.obj), 'is_default_page': is_dp, 'state': state, 'has_sibling_pages': has_sibling_pages }
def root_item_class(self): context = aq_inner(self.context) root = self.getNavRoot() container = aq_parent(context) if (aq_base(root) is aq_base(context) or (aq_base(root) is aq_base(container) and is_default_page(container, context))): return 'navTreeCurrentItem' return ''
def get_social_counts(site, obj, site_url, count=0): counts = {} site_path = '/'.join(site.getPhysicalPath()) obj_path = '/'.join(obj.getPhysicalPath()) rel_path = obj_path[len(site_path):].strip('/') print('Looking up ' + rel_path) urls = [site_url.rstrip('/') + '/' + rel_path] registry = getUtility(IRegistry) if obj.portal_type in registry.get('plone.types_use_view_action_in_listings', []): urls.append(urls[0] + '/view') container = aq_parent(obj) if defaultpage.is_default_page(container, obj): container_path = '/'.join(container.getPhysicalPath()) rel_path = container_path[len(site_path):].strip('/') urls.append(site_url.rstrip('/') + '/' + rel_path) redirector = getUtility(IRedirectionStorage) for redirect in redirector.redirects(obj_path): rel_path = redirect[len(site_path):].strip('/') urls.append(site_url.rstrip('/') + '/' + rel_path) urls = _get_urls(urls) counts = _get_counts(urls) if not _has_data(counts): return obj._p_jar.sync() annotations = IAnnotations(obj) existing = annotations.get(COUNT_ANNOTATION_KEY, OOBTree()) if not _count_diff(existing, counts): return # XXX check if value different first before transaction! existing.update(counts) annotations[COUNT_ANNOTATION_KEY] = existing transaction.commit() index_in_es(obj) if count % 200 == 0: clear_object_cache(site)
def getMenuItems(self, context, request): """Return menu item entries in a TAL-friendly form. """ try: lang_names = request.locale.displayNames.languages except AttributeError: lang_names = {} menu = [] url = context.absolute_url() lt = getToolByName(context, "portal_languages") site_url = getSite().absolute_url() showflags = lt.showFlags context_id = ITranslationManager(context).tg registry = getUtility(IRegistry) settings = registry.forInterface(IMultiLanguageExtraOptionsSchema, prefix="plone") edit_view = 'babel_edit' if settings.redirect_babel_view else 'edit' # In case is neutral language show set language menu only is_neutral_content = (ILanguage(context).get_language() == LANGUAGE_INDEPENDENT or is_language_independent(context)) shared_folder_url = site_url + '/folder_contents' pc = getToolByName(getSite(), 'portal_catalog') results = pc.unrestrictedSearchResults( portal_type='LIF', Language=ILanguage(context).get_language()) for brain in results: shared_folder_url = brain.getURL() + '/folder_contents' if not is_neutral_content and not INavigationRoot.providedBy(context): menu.append({ "title": _(u"title_babel_edit", default=u"Edit with babel view"), "description": _(u"description_babel_edit", default=u"Edit with the babel_edit"), "action": url + "/" + edit_view, "selected": False, "icon": None, "extra": { "id": "_edit_babel_edit", "separator": None, "class": "", }, "submenu": None, }) if ITranslatable.providedBy(context): contexts = [ context, ] else: contexts = [] prt = aq_parent(context) if is_default_page(prt, context) and ITranslatable.providedBy(prt): contexts.append(prt) for idx, context in enumerate(contexts): url = context.absolute_url() ulangs = untranslated_languages(context) for lang in ulangs: lang_name = lang_names.get(lang.value, lang.title) lang_id = lang.value icon = showflags and lt.getFlagForLanguageCode(lang_id)\ or None item = { "description": _(u"description_translate_into", default=u"Translate into ${lang_name}", mapping={"lang_name": lang_name}), "action": "%s/@@create_translation?language=%s" % (url, lang_id), "selected": False, "icon": icon, "width": "14", "height": "11", "extra": { "id": "translate_into_%s" % lang_id, "separator": None, "class": "contentmenuflags" }, "submenu": None, } item['title'] = idx and _( u'create_translation_folder', default=u"Create ${lang_name} folder", mapping={"lang_name": lang_name}) or _( u'create_translation', default=u"Create ${lang_name}", mapping={"lang_name": lang_name}) menu.append(item) langs = translated_languages(context) urls = translated_urls(context) for lang in langs: if lang.value not in urls.by_token: # omit if translation is not permitted to access. continue lang_name = lang_names.get(lang.value, lang.title) lang_id = lang.value icon = showflags and lt.getFlagForLanguageCode(lang_id)\ or None item = { "description": _(u"description_babeledit_menu", default=u"Babel edit ${lang_name}", mapping={"lang_name": lang_name}), "action": (urls.getTerm(lang_id).title + "/" + edit_view), "selected": False, "icon": icon, "width": "14", "height": "11", "extra": { "id": "babel_edit_%s" % lang_id, "separator": None, "class": "contentmenuflags" }, "submenu": None, } item['title'] = idx and _( u'edit_translation_folder', default=u"Edit ${lang_name} folder", mapping={"lang_name": lang_name}) or _( u'edit_translation', default=u"Edit ${lang_name}", mapping={"lang_name": lang_name}) menu.append(item) item = { "description": _(u"description_add_translations", default=u"Add existing content as translation"), "action": url + "/add_translations", "selected": False, "icon": None, "extra": { "id": "_add_translations", "separator": langs and "actionSeparator" or None, "class": "" }, "submenu": None, } item['title'] = idx and _( u"title_add_translations_folder", default=u"Add translations for folder...") or _( u"title_add_translations", default=u"Add translations...") menu.append(item) item = { "title": _(u"title_remove_translations", default=u"Remove translations..."), "description": _(u"description_remove_translations", default=u"Delete translations or remove the relations"), "action": url + "/remove_translations", "selected": False, "icon": None, "extra": { "id": "_remove_translations", "separator": langs and "actionSeparator" or None, "class": "" }, "submenu": None, } menu.append(item) elif is_neutral_content: menu.append({ "title": _(u"language_folder", default=u"Return to language folder"), "description": _(u"description_language_folder", default=u"Go to the user's browser preferred language " u"related folder"), "action": site_url + '/' + lt.getPreferredLanguage(), "selected": False, "icon": None, "extra": { "id": "_shared_folder", "separator": None, "class": "" }, "submenu": None, }) if not is_neutral_content: menu.append({ "title": _(u"universal_link", default=u"Universal Link"), "description": _(u"description_universal_link", default=u"Universal Language content link"), "action": "%s/@@multilingual-universal-link/%s" % (site_url, context_id), "selected": False, "icon": None, "extra": { "id": "_universal_link", "separator": None, "class": "" }, "submenu": None, }) menu.append({ "title": _(u"shared_folder", default=u"Go to shared folder"), "description": _(u"description_shared_folder", default=u"Show the language shared (neutral language) " u"folder"), "action": shared_folder_url, "selected": False, "icon": None, "extra": { "id": "_shared_folder", "separator": None, "class": "" }, "submenu": None, }) menu.append({ "title": _(u"title_set_language", default=u"Set content language"), "description": _(u"description_set_language", default=u"Set or change the current content language"), "action": url + "/update_language", "selected": False, "icon": None, "extra": { "id": "_set_language", "separator": None, "class": "" }, "submenu": None, }) return menu
def getMenuItems(self, context, request): """Return menu item entries in a TAL-friendly form. """ # Settings site_url = getSite().absolute_url() language_tool = getToolByName(context, "portal_languages") show_flags = language_tool.showFlags try: lang_names = request.locale.displayNames.languages except AttributeError: lang_names = {} registry = getUtility(IRegistry) settings = registry.forInterface(IMultiLanguageExtraOptionsSchema, prefix="plone") if settings.redirect_babel_view: translation_view = 'babel_edit' else: translation_view = 'edit' # Content content = context content_url = context.absolute_url() content_language = ILanguage(content).get_language() content_translatable = not ( content_language == LANGUAGE_INDEPENDENT or is_language_independent(content) or ILanguageRootFolder.providedBy(content) ) content_translated = translated_languages(content) content_untranslated = untranslated_languages(content) content_translation_group = ITG(content, '') if not ITranslatable.providedBy(content): content = None # Folder when content is default page folder = aq_parent(context) if not is_default_page(folder, context): folder = None if folder and ITranslatable.providedBy(folder): # noqa folder_url = folder.absolute_url() folder_language = ILanguage(folder).get_language() folder_translatable = not ( folder_language == LANGUAGE_INDEPENDENT or is_language_independent(folder) or ILanguageRootFolder.providedBy(folder) ) folder_translated = translated_languages(folder) folder_untranslated = untranslated_languages(folder) folder_translation_group = ITG(folder, '') else: folder_url = '' folder_language = '' folder_translatable = False folder_translated = [] folder_untranslated = [] folder_translation_group = '' # Assets folder assets_folder_url = None assets_folder_title = None pc = getToolByName(getSite(), 'portal_catalog') results = pc.unrestrictedSearchResults( portal_type='LIF', Language=ILanguage(context).get_language()) for brain in results: assets_folder_url = brain.getURL() + '/folder_contents' assets_folder_title = safe_unicode(brain.Title) break # Menu items results = [] results_folder = [] results_content = [] if folder_translatable: # Folder translation view lang_name = lang_names.get(folder_language, folder_language) results_folder.append({ "title": _( u'edit_translation', default=u"Edit ${lang_name}", mapping={"lang_name": lang_name} ), "description": _( u"description_babeledit_menu", default=u"Edit {lang_name} with the two-column translation view", # noqa mapping={"lang_name": lang_name} ), "action": folder_url + "/" + translation_view, "selected": False, "icon": None, "extra": { "id": "_edit_folder_babel_edit", "separator": None, "class": "", }, "submenu": None, }) if folder and folder_untranslated and False: # disabled in favor of cut & paste # noqa # Set folder language results_folder.append({ "title": _( u'title_set_language', default=u"Change content language" ), "description": _( u"description_set_language", default=u"Move the translation under another language folder" # noqa ), "action": folder_url + "/update_language", "selected": False, "icon": None, "extra": { "id": "_set_folder_language", "separator": None, "class": "" }, "submenu": None, }) if folder_translatable: for idx, lang in enumerate(folder_untranslated): lang_name = lang_names.get(lang.value, lang.title) lang_id = lang.value icon = show_flags and language_tool.getFlagForLanguageCode(lang_id) or None # noqa results_folder.append({ "title": _( u'create_translation', default=u"Create ${lang_name}", mapping={"lang_name": lang_name} ), "description": _( u"description_translate_into", default=u"Translate into ${lang_name}", mapping={"lang_name": lang_name} ), "action": "%s/@@create_translation?language=%s" % ( folder_url, lang_id), "selected": False, "icon": icon, "width": "14", "height": "11", "extra": {"id": "translate_folder_into_%s" % lang_id, "separator": None, "class": "contentmenuflags"}, "submenu": None, }) urls = translated_urls(folder) for lang in folder_translated: if lang.value not in urls.by_token: # omit if translation is not permitted to access. continue lang_name = lang_names.get(lang.value, lang.title) lang_id = lang.value icon = show_flags and language_tool.getFlagForLanguageCode(lang_id) or None # noqa results_folder.append({ "title": _( u'edit_translation', default=u"Edit ${lang_name}", mapping={"lang_name": lang_name} ), "description": _( u"description_babeledit_menu", default=u"Edit {lang_name} with the two-column translation view", # noqa mapping={"lang_name": lang_name} ), "action": (urls.getTerm(lang_id).title + "/" + translation_view), "selected": False, "icon": icon, "width": "14", "height": "11", "extra": {"id": "babel_edit_%s" % lang_id, "separator": None, "class": "contentmenuflags"}, "submenu": None, }) # Manage folder translations results_folder.append({ "title": _( u"title_modify_translations", default=u"Manage translations" ), "description": _( u"description_modify_translations", default=u"Add or delete translations" ), "action": folder_url + "/modify_translations", "selected": False, "icon": None, "extra": { "id": "_modify_folder_translations", "separator": None, "class": "" }, "submenu": None, }) # Universal link if folder_translation_group: results_folder.append({ "title": _( u"universal_link", default=u"Universal link" ), "description": _( u"description_universal_link", default=u"Universal link to the content in user's preferred language" # noqa ), "action": "%s/@@multilingual-universal-link/%s" % ( site_url, folder_translation_group), "selected": False, "icon": None, "extra": { "id": "_universal_folder_link", "separator": None, "class": "" }, "submenu": None, }) if results_folder: # Folder translation separator results.append({ 'title': _( u'title_translate_current_folder', default=u'Folder translation' ), 'description': '', 'action': None, 'selected': False, 'icon': None, 'extra': {'id': 'translateFolderHeader', 'separator': 'actionSeparator', 'class': 'plone-toolbar-submenu-header'}, 'submenu': None, }) results.extend(results_folder) lang_name = lang_names.get(content_language, content_language) # Content language if content_untranslated and False: # disabled in favor of cut & paste results_content.append({ "title": _( u"title_set_language", default=u"Change content language" ), "description": _( u"description_set_language", default=u"Move the translation under another language folder" # noqa ), "action": content_url + "/update_language", "selected": False, "icon": None, "extra": { "id": "_set_language", "separator": None, "class": "" }, "submenu": None, }) if content_translatable: # Content translation view results_content.append({ "title": _( u'edit_translation', default=u"Edit ${lang_name}", mapping={"lang_name": lang_name} ), "description": _( u"description_babeledit_menu", default=u"Edit {lang_name} with the two-column translation view", # noqa mapping={"lang_name": lang_name} ), "action": content_url + "/" + translation_view, "selected": False, "icon": None, "extra": { "id": "_edit_babel_edit", "separator": None, "class": "", }, "submenu": None, }) if content_translatable: for idx, lang in enumerate(content_untranslated): lang_name = lang_names.get(lang.value, lang.title) lang_id = lang.value icon = show_flags and language_tool.getFlagForLanguageCode(lang_id) or None # noqa results_content.append({ "title": _( u'create_translation', default=u"Create ${lang_name}", mapping={"lang_name": lang_name} ), "description": _( u"description_translate_into", default=u"Translate into ${lang_name}", mapping={"lang_name": lang_name} ), "action": "%s/@@create_translation?language=%s" % ( content_url, lang_id), "selected": False, "icon": icon, "width": "14", "height": "11", "extra": {"id": "translate_into_%s" % lang_id, "separator": None, "class": "contentmenuflags"}, "submenu": None, }) urls = translated_urls(content) for lang in content_translated: if lang.value not in urls.by_token: # omit if translation is not permitted to access. continue lang_name = lang_names.get(lang.value, lang.title) lang_id = lang.value icon = show_flags and language_tool.getFlagForLanguageCode(lang_id) or None # noqa results_content.append({ "title": _( u'edit_translation', default=u"Edit ${lang_name}", mapping={"lang_name": lang_name} ), "description": _( u"description_babeledit_menu", default=u"Edit {lang_name} with the two-column translation view", # noqa mapping={"lang_name": lang_name} ), "action": (urls.getTerm(lang_id).title + "/" + translation_view), "selected": False, "icon": icon, "width": "14", "height": "11", "extra": {"id": "babel_edit_%s" % lang_id, "separator": None, "class": "contentmenuflags"}, "submenu": None, }) # Manage content translations results_content.append({ "title": _(u"title_modify_translations", default=u"Manage translations"), "description": _( u"description_modify_translations", default=u"Add or delete translations" ), "action": content_url + "/modify_translations", "selected": False, "icon": None, "extra": { "id": "_modify_translations", "separator": None, "class": "" }, "submenu": None, }) # Universal link if content_translation_group: results_content.append({ "title": _( u"universal_link", default=u"Universal link" ), "description": _( u"description_universal_link", default=u"Universal link to the content in user's preferred language" # noqa ), "action": "%s/@@multilingual-universal-link/%s" % ( site_url, content_translation_group), "selected": False, "icon": None, "extra": { "id": "_universal_link", "separator": None, "class": "" }, "submenu": None, }) if results_folder and results_content: # Item translations separator results.append({ 'title': _( u'title_translate_current_item', default=u'Item translation' ), 'description': '', 'action': None, 'selected': False, 'icon': None, 'extra': {'id': 'translateItemHeader', 'separator': 'actionSeparator', 'class': ''}, 'submenu': None, }) results.extend(results_content) # Language independent assets folder if assets_folder_url: results.append({ "title": _( u"shared_folder", default=u"Open ${title} folder", mapping={"title": assets_folder_title} ), "description": _( u"description_shared_folder", default=u"Open the language independent assets folder" ), "action": assets_folder_url, "selected": False, "icon": None, "extra": { "id": "_shared_folder", "separator": results and 'actionSeparator' or None, "class": ""}, "submenu": None, }) # User preferred language root folder if not folder_translatable and not content_translatable: results.append({ "title": _( u"language_folder", default=u"Return to language folder" ), "description": _( u"description_language_folder", default=u"Go to the user's browser preferred language " u"related folder" ), "action": site_url + '/' + language_tool.getPreferredLanguage(), # noqa "selected": False, "icon": None, "extra": { "id": "_language_folder", "separator": ( (results and not assets_folder_url) and 'actionSeparator' or None ), "class": "" }, "submenu": None, }) return results
def getMenuItems(self, context, request): """Return menu item entries in a TAL-friendly form. """ try: lang_names = request.locale.displayNames.languages except AttributeError: lang_names = {} menu = [] url = context.absolute_url() lt = getToolByName(context, "portal_languages") site_url = getSite().absolute_url() showflags = lt.showFlags context_id = ITranslationManager(context).tg registry = getUtility(IRegistry) settings = registry.forInterface(IMultiLanguageExtraOptionsSchema, prefix="plone") edit_view = "babel_edit" if settings.redirect_babel_view else "edit" # In case is neutral language show set language menu only is_neutral_content = ILanguage(context).get_language() == LANGUAGE_INDEPENDENT or is_language_independent( context ) shared_folder_url = site_url + "/folder_contents" pc = getToolByName(getSite(), "portal_catalog") results = pc.unrestrictedSearchResults(portal_type="LIF", Language=ILanguage(context).get_language()) for brain in results: shared_folder_url = brain.getURL() + "/folder_contents" if not is_neutral_content and not INavigationRoot.providedBy(context): menu.append( { "title": _(u"title_babel_edit", default=u"Edit with babel view"), "description": _(u"description_babel_edit", default=u"Edit with the babel_edit"), "action": url + "/" + edit_view, "selected": False, "icon": None, "extra": {"id": "_edit_babel_edit", "separator": None, "class": ""}, "submenu": None, } ) if ITranslatable.providedBy(context): contexts = [context] else: contexts = [] prt = aq_parent(context) if is_default_page(prt, context) and ITranslatable.providedBy(prt): contexts.append(prt) for idx, context in enumerate(contexts): url = context.absolute_url() ulangs = untranslated_languages(context) for lang in ulangs: lang_name = lang_names.get(lang.value, lang.title) lang_id = lang.value icon = showflags and lt.getFlagForLanguageCode(lang_id) or None item = { "description": _( u"description_translate_into", default=u"Translate into ${lang_name}", mapping={"lang_name": lang_name}, ), "action": "%s/@@create_translation?language=%s" % (url, lang_id), "selected": False, "icon": icon, "width": "14", "height": "11", "extra": {"id": "translate_into_%s" % lang_id, "separator": None, "class": "contentmenuflags"}, "submenu": None, } item["title"] = ( idx and _( u"create_translation_folder", default=u"Create ${lang_name} folder", mapping={"lang_name": lang_name}, ) or _(u"create_translation", default=u"Create ${lang_name}", mapping={"lang_name": lang_name}) ) menu.append(item) langs = translated_languages(context) urls = translated_urls(context) for lang in langs: if lang.value not in urls.by_token: # omit if translation is not permitted to access. continue lang_name = lang_names.get(lang.value, lang.title) lang_id = lang.value icon = showflags and lt.getFlagForLanguageCode(lang_id) or None item = { "description": _( u"description_babeledit_menu", default=u"Babel edit ${lang_name}", mapping={"lang_name": lang_name}, ), "action": (urls.getTerm(lang_id).title + "/" + edit_view), "selected": False, "icon": icon, "width": "14", "height": "11", "extra": {"id": "babel_edit_%s" % lang_id, "separator": None, "class": "contentmenuflags"}, "submenu": None, } item["title"] = ( idx and _( u"edit_translation_folder", default=u"Edit ${lang_name} folder", mapping={"lang_name": lang_name}, ) or _(u"edit_translation", default=u"Edit ${lang_name}", mapping={"lang_name": lang_name}) ) menu.append(item) item = { "description": _(u"description_add_translations", default=u"Add existing content as translation"), "action": url + "/add_translations", "selected": False, "icon": None, "extra": {"id": "_add_translations", "separator": langs and "actionSeparator" or None, "class": ""}, "submenu": None, } item["title"] = ( idx and _(u"title_add_translations_folder", default=u"Add translations for folder...") or _(u"title_add_translations", default=u"Add translations...") ) menu.append(item) item = { "title": _(u"title_remove_translations", default=u"Remove translations..."), "description": _( u"description_remove_translations", default=u"Delete translations or remove the relations" ), "action": url + "/remove_translations", "selected": False, "icon": None, "extra": { "id": "_remove_translations", "separator": langs and "actionSeparator" or None, "class": "", }, "submenu": None, } menu.append(item) elif is_neutral_content: menu.append( { "title": _(u"language_folder", default=u"Return to language folder"), "description": _( u"description_language_folder", default=u"Go to the user's browser preferred language " u"related folder", ), "action": site_url + "/" + lt.getPreferredLanguage(), "selected": False, "icon": None, "extra": {"id": "_language_folder", "separator": None, "class": ""}, "submenu": None, } ) if not is_neutral_content: menu.append( { "title": _(u"universal_link", default=u"Universal Link"), "description": _(u"description_universal_link", default=u"Universal Language content link"), "action": "%s/@@multilingual-universal-link/%s" % (site_url, context_id), "selected": False, "icon": None, "extra": {"id": "_universal_link", "separator": None, "class": ""}, "submenu": None, } ) menu.append( { "title": _(u"shared_folder", default=u"Go to Media folder"), "description": _( u"description_shared_folder", default=u"Show the shared Language Independent Folder" ), "action": shared_folder_url, "selected": False, "icon": None, "extra": {"id": "_shared_folder", "separator": None, "class": ""}, "submenu": None, } ) menu.append( { "title": _(u"title_set_language", default=u"Set content language"), "description": _(u"description_set_language", default=u"Set or change the current content language"), "action": url + "/update_language", "selected": False, "icon": None, "extra": {"id": "_set_language", "separator": None, "class": ""}, "submenu": None, } ) return menu
def getMenuItems(self, context, request): """Return menu item entries in a TAL-friendly form. """ # Settings site_url = getSite().absolute_url() language_tool = getToolByName(context, "portal_languages") show_flags = language_tool.showFlags try: lang_names = request.locale.displayNames.languages except AttributeError: lang_names = {} registry = getUtility(IRegistry) settings = registry.forInterface(IMultiLanguageExtraOptionsSchema, prefix="plone") if settings.redirect_babel_view: translation_view = 'babel_edit' else: translation_view = 'edit' # Content content = context content_url = context.absolute_url() content_language = ILanguage(content).get_language() content_translatable = not (content_language == LANGUAGE_INDEPENDENT or is_language_independent(content) or ILanguageRootFolder.providedBy(content)) content_translated = translated_languages(content) content_untranslated = untranslated_languages(content) content_translation_group = ITG(content, '') if not ITranslatable.providedBy(content): content = None # Folder when content is default page folder = aq_parent(context) if not is_default_page(folder, context): folder = None if folder and ITranslatable.providedBy(folder): # noqa folder_url = folder.absolute_url() folder_language = ILanguage(folder).get_language() folder_translatable = not (folder_language == LANGUAGE_INDEPENDENT or is_language_independent(folder) or ILanguageRootFolder.providedBy(folder)) folder_translated = translated_languages(folder) folder_untranslated = untranslated_languages(folder) folder_translation_group = ITG(folder, '') else: folder_url = '' folder_language = '' folder_translatable = False folder_translated = [] folder_untranslated = [] folder_translation_group = '' # Assets folder assets_folder_url = None assets_folder_title = None pc = getToolByName(getSite(), 'portal_catalog') results = pc.unrestrictedSearchResults( portal_type='LIF', Language=ILanguage(context).get_language()) for brain in results: assets_folder_url = brain.getURL() + '/folder_contents' assets_folder_title = safe_unicode(brain.Title) break # Menu items results = [] results_folder = [] results_content = [] if folder_translatable: # Folder translation view lang_name = lang_names.get(folder_language, folder_language) results_folder.append({ "title": _(u'edit_translation', default=u"Edit ${lang_name}", mapping={"lang_name": lang_name}), "description": _( u"description_babeledit_menu", default= u"Edit {lang_name} with the two-column translation view", # noqa mapping={"lang_name": lang_name}), "action": folder_url + "/" + translation_view, "selected": False, "icon": None, "extra": { "id": "_edit_folder_babel_edit", "separator": None, "class": "", }, "submenu": None, }) if folder and folder_untranslated and False: # disabled in favor of cut & paste # noqa # Set folder language results_folder.append({ "title": _(u'title_set_language', default=u"Change content language"), "description": _( u"description_set_language", default= u"Move the translation under another language folder" # noqa ), "action": folder_url + "/update_language", "selected": False, "icon": None, "extra": { "id": "_set_folder_language", "separator": None, "class": "" }, "submenu": None, }) if folder_translatable: for idx, lang in enumerate(folder_untranslated): lang_name = lang_names.get(lang.value, lang.title) lang_id = lang.value icon = show_flags and language_tool.getFlagForLanguageCode( lang_id) or None # noqa results_folder.append({ "title": _(u'create_translation', default=u"Create ${lang_name}", mapping={"lang_name": lang_name}), "description": _(u"description_translate_into", default=u"Translate into ${lang_name}", mapping={"lang_name": lang_name}), "action": "%s/@@create_translation?language=%s" % (folder_url, lang_id), "selected": False, "icon": icon, "width": "14", "height": "11", "extra": { "id": "translate_folder_into_%s" % lang_id, "separator": None, "class": "contentmenuflags" }, "submenu": None, }) urls = translated_urls(folder) for lang in folder_translated: if lang.value not in urls.by_token: # omit if translation is not permitted to access. continue lang_name = lang_names.get(lang.value, lang.title) lang_id = lang.value icon = show_flags and language_tool.getFlagForLanguageCode( lang_id) or None # noqa results_folder.append({ "title": _(u'edit_translation', default=u"Edit ${lang_name}", mapping={"lang_name": lang_name}), "description": _( u"description_babeledit_menu", default= u"Edit {lang_name} with the two-column translation view", # noqa mapping={"lang_name": lang_name}), "action": (urls.getTerm(lang_id).title + "/" + translation_view), "selected": False, "icon": icon, "width": "14", "height": "11", "extra": { "id": "babel_edit_%s" % lang_id, "separator": None, "class": "contentmenuflags" }, "submenu": None, }) # Manage folder translations results_folder.append({ "title": _(u"title_modify_translations", default=u"Manage translations"), "description": _(u"description_modify_translations", default=u"Add or delete translations"), "action": folder_url + "/modify_translations", "selected": False, "icon": None, "extra": { "id": "_modify_folder_translations", "separator": None, "class": "" }, "submenu": None, }) # Universal link if folder_translation_group: results_folder.append({ "title": _(u"universal_link", default=u"Universal link"), "description": _( u"description_universal_link", default= u"Universal link to the content in user's preferred language" # noqa ), "action": "%s/@@multilingual-universal-link/%s" % (site_url, folder_translation_group), "selected": False, "icon": None, "extra": { "id": "_universal_folder_link", "separator": None, "class": "" }, "submenu": None, }) if results_folder: # Folder translation separator results.append({ 'title': _(u'title_translate_current_folder', default=u'Folder translation'), 'description': '', 'action': None, 'selected': False, 'icon': None, 'extra': { 'id': 'translateFolderHeader', 'separator': 'actionSeparator', 'class': 'plone-toolbar-submenu-header' }, 'submenu': None, }) results.extend(results_folder) lang_name = lang_names.get(content_language, content_language) # Content language if content_untranslated and False: # disabled in favor of cut & paste results_content.append({ "title": _(u"title_set_language", default=u"Change content language"), "description": _( u"description_set_language", default= u"Move the translation under another language folder" # noqa ), "action": content_url + "/update_language", "selected": False, "icon": None, "extra": { "id": "_set_language", "separator": None, "class": "" }, "submenu": None, }) if content_translatable: # Content translation view results_content.append({ "title": _(u'edit_translation', default=u"Edit ${lang_name}", mapping={"lang_name": lang_name}), "description": _( u"description_babeledit_menu", default= u"Edit {lang_name} with the two-column translation view", # noqa mapping={"lang_name": lang_name}), "action": content_url + "/" + translation_view, "selected": False, "icon": None, "extra": { "id": "_edit_babel_edit", "separator": None, "class": "", }, "submenu": None, }) if content_translatable: for idx, lang in enumerate(content_untranslated): lang_name = lang_names.get(lang.value, lang.title) lang_id = lang.value icon = show_flags and language_tool.getFlagForLanguageCode( lang_id) or None # noqa results_content.append({ "title": _(u'create_translation', default=u"Create ${lang_name}", mapping={"lang_name": lang_name}), "description": _(u"description_translate_into", default=u"Translate into ${lang_name}", mapping={"lang_name": lang_name}), "action": "%s/@@create_translation?language=%s" % (content_url, lang_id), "selected": False, "icon": icon, "width": "14", "height": "11", "extra": { "id": "translate_into_%s" % lang_id, "separator": None, "class": "contentmenuflags" }, "submenu": None, }) urls = translated_urls(content) for lang in content_translated: if lang.value not in urls.by_token: # omit if translation is not permitted to access. continue lang_name = lang_names.get(lang.value, lang.title) lang_id = lang.value icon = show_flags and language_tool.getFlagForLanguageCode( lang_id) or None # noqa results_content.append({ "title": _(u'edit_translation', default=u"Edit ${lang_name}", mapping={"lang_name": lang_name}), "description": _( u"description_babeledit_menu", default= u"Edit {lang_name} with the two-column translation view", # noqa mapping={"lang_name": lang_name}), "action": (urls.getTerm(lang_id).title + "/" + translation_view), "selected": False, "icon": icon, "width": "14", "height": "11", "extra": { "id": "babel_edit_%s" % lang_id, "separator": None, "class": "contentmenuflags" }, "submenu": None, }) # Manage content translations results_content.append({ "title": _(u"title_modify_translations", default=u"Manage translations"), "description": _(u"description_modify_translations", default=u"Add or delete translations"), "action": content_url + "/modify_translations", "selected": False, "icon": None, "extra": { "id": "_modify_translations", "separator": None, "class": "" }, "submenu": None, }) # Universal link if content_translation_group: results_content.append({ "title": _(u"universal_link", default=u"Universal link"), "description": _( u"description_universal_link", default= u"Universal link to the content in user's preferred language" # noqa ), "action": "%s/@@multilingual-universal-link/%s" % (site_url, content_translation_group), "selected": False, "icon": None, "extra": { "id": "_universal_link", "separator": None, "class": "" }, "submenu": None, }) if results_folder and results_content: # Item translations separator results.append({ 'title': _(u'title_translate_current_item', default=u'Item translation'), 'description': '', 'action': None, 'selected': False, 'icon': None, 'extra': { 'id': 'translateItemHeader', 'separator': 'actionSeparator', 'class': '' }, 'submenu': None, }) results.extend(results_content) # Language independent assets folder if assets_folder_url: results.append({ "title": _(u"shared_folder", default=u"Open ${title} folder", mapping={"title": assets_folder_title}), "description": _(u"description_shared_folder", default=u"Open the language independent assets folder"), "action": assets_folder_url, "selected": False, "icon": None, "extra": { "id": "_shared_folder", "separator": results and 'actionSeparator' or None, "class": "" }, "submenu": None, }) # User preferred language root folder if not folder_translatable and not content_translatable: results.append({ "title": _(u"language_folder", default=u"Return to language folder"), "description": _(u"description_language_folder", default=u"Go to the user's browser preferred language " u"related folder"), "action": site_url + '/' + language_tool.getPreferredLanguage(), # noqa "selected": False, "icon": None, "extra": { "id": "_language_folder", "separator": ((results and not assets_folder_url) and 'actionSeparator' or None), "class": "" }, "submenu": None, }) return results
def exportObj(obj): data = {} im_width = 0 image_to_lead = None for field in obj.Schema().fields(): fdata = field.getRaw(obj) if type(fdata) == ImplicitAcquisitionWrapper: fdata = fdata.aq_base data[field.__name__] = fdata if field.__name__ in ('image', 'file'): data[field.__name__ + '_filename'] = field.getFilename(obj) data[field.__name__ + '_contentType'] = field.getContentType(obj) if field.__name__ == 'image': im = field.get(obj) if im: im_width = im.width images = getReferencedImages(data) # try to find image to associate with it if there is none if im_width < 200: if len(images) > 0 and images[0].portal_type == 'Image': image = images[0] if len(image.getBackReferences(relationship='isReferencing')) < 2: im = image.getImage() data.update({ 'image': image.Schema().getField('image').getRaw(image), 'image_filename': image.getFilename(), 'image_contentType': image.getContentType(), 'imageCaption': image.Description() }) image_to_lead = image.UID() images = images[1:] if image_to_lead and 'text' in data: data['text'] = data['text'].replace(image_to_lead, obj.UID()) is_dp = False if not IFolder.providedBy(obj): if defaultpage: container = aq_parent(obj) if container: is_dp = defaultpage.is_default_page(container, obj) else: is_dp = ptool.isDefaultPage(obj) has_sibling_pages = True if is_dp: container = aq_parent(obj) res = catalog(path={'query': '/'.join(container.getPhysicalPath())}) if len([b for b in res if b.UID != image_to_lead]) > 1: has_sibling_pages = False try: state = workflow.getInfoFor(ob=obj, name='review_state') except: state = None alldata = { 'portal_type': obj.portal_type, 'layout': obj.getLayout(), 'data': data, 'uid': obj.UID(), 'is_default_page': is_dp, 'state': state, 'has_sibling_pages': has_sibling_pages } yield obj, alldata for ref in images: if ref.UID() == obj.UID(): continue if ref.portal_type != 'Image': continue if image_to_lead == ref.UID(): continue for o, d in exportObj(ref): if o.UID() == ref.UID() or o.UID() == obj.UID(): continue yield o, d
def isDefaultPage(self, obj): return is_default_page(aq_inner(self.context), obj)