N°4543 - Restore API to add dictionary entries in the backoffice pages

This commit is contained in:
acognet
2021-12-14 13:24:30 +01:00
parent 427ec288ef
commit cde2f333b4
3 changed files with 71 additions and 3 deletions

View File

@@ -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
*

View File

@@ -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();

View File

@@ -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);
}
}
}