From cde2f333b4d9bce6c3320af275b1a8ef26a58134 Mon Sep 17 00:00:00 2001 From: acognet Date: Tue, 14 Dec 2021 13:24:30 +0100 Subject: [PATCH] =?UTF-8?q?N=C2=B04543=20-=20Restore=20API=20to=20add=20di?= =?UTF-8?q?ctionary=20entries=20in=20the=20backoffice=20pages?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/applicationextension.inc.php | 32 ++++++++++++++++++++++++ core/metamodel.class.php | 27 +++++++++++++++++++- sources/application/WebPage/WebPage.php | 15 +++++++++-- 3 files changed, 71 insertions(+), 3 deletions(-) diff --git a/application/applicationextension.inc.php b/application/applicationextension.inc.php index 0579a6bd0..94254dc95 100644 --- a/application/applicationextension.inc.php +++ b/application/applicationextension.inc.php @@ -1367,6 +1367,38 @@ interface iBackofficeStyleExtension public function GetStyle(): string; } +/** + * Implement this interface to add Dict entries + * + * @see \iTopWebPage::$a_dict_entries + * @api + * @since 3.0.0 + */ +interface iBackofficeDictEntriesExtension +{ + /** + * @see \iTopWebPage::a_dict_entries + * @return array + */ + public function GetDictEntries(): array; +} + +/** + * Implement this interface to add Dict entries prefixes + * + * @see \iTopWebPage::$a_dict_entries_prefixes + * @api + * @since 3.0.0 + */ +interface iBackofficeDictEntriesPrefixesExtension +{ + /** + * @see \iTopWebPage::a_dict_entries_prefixes + * @return array + */ + public function GetDictEntriesPrefixes(): array; +} + /** * Implement this interface to add content to any enhanced portal page * diff --git a/core/metamodel.class.php b/core/metamodel.class.php index 5bf537699..4b64b1e41 100644 --- a/core/metamodel.class.php +++ b/core/metamodel.class.php @@ -3001,7 +3001,32 @@ abstract class MetaModel // Build the list of available extensions // - $aInterfaces = array('iApplicationUIExtension', 'iPreferencesExtension', 'iApplicationObjectExtension', 'iLoginFSMExtension', 'iLoginUIExtension', 'iLogoutExtension', 'iQueryModifier', 'iOnClassInitialization', 'iPopupMenuExtension', 'iPageUIExtension', 'iPageUIBlockExtension', 'iPortalUIExtension', 'ModuleHandlerApiInterface', 'iNewsroomProvider', 'iModuleExtension'); + $aInterfaces = [ + 'iApplicationUIExtension', + 'iPreferencesExtension', + 'iApplicationObjectExtension', + 'iLoginFSMExtension', + 'iLoginUIExtension', + 'iLogoutExtension', + 'iQueryModifier', + 'iOnClassInitialization', + 'iPopupMenuExtension', + 'iPageUIExtension', + 'iPageUIBlockExtension', + 'iBackofficeLinkedScriptsExtension', + 'iBackofficeEarlyScriptExtension', + 'iBackofficeScriptExtension', + 'iBackofficeInitScriptExtension', + 'iBackofficeReadyScriptExtension', + 'iBackofficeLinkedStylesheetsExtension', + 'iBackofficeStyleExtension', + 'iBackofficeDictEntriesExtension', + 'iBackofficeDictEntriesPrefixesExtension', + 'iPortalUIExtension', + 'ModuleHandlerApiInterface', + 'iNewsroomProvider', + 'iModuleExtension', + ]; foreach($aInterfaces as $sInterface) { self::$m_aExtensionClassNames[$sInterface] = array(); diff --git a/sources/application/WebPage/WebPage.php b/sources/application/WebPage/WebPage.php index 024fdbbbb..11bca425f 100644 --- a/sources/application/WebPage/WebPage.php +++ b/sources/application/WebPage/WebPage.php @@ -1566,6 +1566,18 @@ JS; */ protected function output_dict_entries($bReturnOutput = false) { + /** @var \iBackofficeDictEntriesExtension $oExtensionInstance */ + foreach (MetaModel::EnumPlugins('iBackofficeDictEntriesExtension') as $oExtensionInstance) { + foreach ($oExtensionInstance->GetDictEntries() as $sDictEntry) { + $this->add_dict_entry($sDictEntry); + } + } + /** @var \iBackofficeDictEntriesPrefixesExtension $oExtensionInstance */ + foreach (MetaModel::EnumPlugins('iBackofficeDictEntriesPrefixesExtension') as $oExtensionInstance) { + foreach ($oExtensionInstance->GetDictEntriesPrefixes() as $sDictEntryPrefix) { + $this->add_dict_entries($sDictEntryPrefix); + } + } if ((count($this->a_dict_entries) > 0) || (count($this->a_dict_entries_prefixes) > 0)) { if (class_exists('Dict')) { // The dictionary may not be available for example during the setup... @@ -1576,8 +1588,7 @@ JS; file_put_contents($sJSFileName, $this->get_dict_file_content()); } // Load the dictionary as the first javascript file, so that other JS file benefit from the translations - array_unshift($this->a_linked_scripts, - utils::GetAbsoluteUrlAppRoot().'pages/ajax.document.php?operation=dict&s='.$sSignature); + array_unshift($this->a_linked_scripts, utils::GetAbsoluteUrlAppRoot().'pages/ajax.document.php?operation=dict&s='.$sSignature); } } }