From 2daeb956defabc57f2ea517dec4a793a4ec283b8 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Wed, 21 Apr 2021 23:26:26 -0400 Subject: [PATCH] Switch l10n.js from ajax callback to assetBuilder The generated javascript in l10n.js predates assetBuilder, this is how it should have been written had the tool been available. --- CRM/Core/Config.php | 12 ----------- CRM/Core/Resources.php | 22 +++++++++------------ CRM/Core/Resources/Common.php | 34 ++++++++++++++++++++------------ CRM/Core/xml/Menu/Misc.xml | 6 ------ Civi/Core/Container.php | 1 + templates/CRM/common/l10n.js.tpl | 8 ++++---- 6 files changed, 35 insertions(+), 48 deletions(-) diff --git a/CRM/Core/Config.php b/CRM/Core/Config.php index b11fc554e2..aef4a308b8 100644 --- a/CRM/Core/Config.php +++ b/CRM/Core/Config.php @@ -425,18 +425,6 @@ class CRM_Core_Config extends CRM_Core_Config_MagicMerge { return TRUE; } - if ($path && preg_match('/^civicrm\/ajax\/l10n-js/', $path) - && !empty($_SERVER['HTTP_REFERER']) - ) { - $ref = parse_url($_SERVER['HTTP_REFERER']); - if ( - (!empty($ref['path']) && preg_match('/civicrm\/upgrade/', $ref['path'])) || - (!empty($ref['query']) && preg_match('/civicrm\/upgrade/', urldecode($ref['query']))) - ) { - return TRUE; - } - } - return FALSE; } diff --git a/CRM/Core/Resources.php b/CRM/Core/Resources.php index faadb5c754..0175befd74 100644 --- a/CRM/Core/Resources.php +++ b/CRM/Core/Resources.php @@ -420,22 +420,18 @@ class CRM_Core_Resources implements CRM_Core_Resources_CollectionAdderInterface /** * Create dynamic script for localizing js widgets. */ - public static function outputLocalizationJS() { - CRM_Core_Page_AJAX::setJsHeaders(); - $config = CRM_Core_Config::singleton(); - $vars = [ - 'moneyFormat' => json_encode(CRM_Utils_Money::format(1234.56)), - 'contactSearch' => json_encode($config->includeEmailInName ? ts('Search by name/email or id...') : ts('Search by name or id...')), + public static function renderL10nJs(GenericHookEvent $e) { + if ($e->asset !== 'crm-l10n.js') { + return; + } + $e->mimeType = 'application/javascript'; + $params = $e->params; + $params += [ + 'contactSearch' => json_encode($params['includeEmailInName'] ? ts('Search by name/email or id...') : ts('Search by name or id...')), 'otherSearch' => json_encode(ts('Enter search term or id...')), 'entityRef' => self::getEntityRefMetadata(), - 'ajaxPopupsEnabled' => self::singleton()->ajaxPopupsEnabled, - 'allowAlertAutodismissal' => (bool) Civi::settings()->get('allow_alert_autodismissal'), - 'resourceCacheCode' => self::singleton()->getCacheCode(), - 'locale' => CRM_Core_I18n::getLocale(), - 'cid' => (int) CRM_Core_Session::getLoggedInContactID(), ]; - print CRM_Core_Smarty::singleton()->fetchWith('CRM/common/l10n.js.tpl', $vars); - CRM_Utils_System::civiExit(); + $e->content = CRM_Core_Smarty::singleton()->fetchWith('CRM/common/l10n.js.tpl', $params); } /** diff --git a/CRM/Core/Resources/Common.php b/CRM/Core/Resources/Common.php index 13b86a233d..5f11d0314f 100644 --- a/CRM/Core/Resources/Common.php +++ b/CRM/Core/Resources/Common.php @@ -176,7 +176,8 @@ class CRM_Core_Resources_Common { * @return array */ protected static function coreResourceList($region) { - $config = CRM_Core_Config::singleton(); + $settings = Civi::settings(); + $contactID = (int) CRM_Core_Session::getLoggedInContactID(); // Scripts needed by everyone, everywhere // FIXME: This is too long; list needs finer-grained segmentation @@ -204,13 +205,21 @@ class CRM_Core_Resources_Common { ]; // Dynamic localization script - $items[] = Civi::resources()->addCacheCode( - CRM_Utils_System::url('civicrm/ajax/l10n-js/' . CRM_Core_I18n::getLocale(), - ['cid' => CRM_Core_Session::getLoggedInContactID()], FALSE, NULL, FALSE) - ); + $items[] = Civi::service('asset_builder')->getUrl('crm-l10n.js', [ + 'cid' => $contactID, + 'includeEmailInName' => (bool) $settings->get('includeEmailInName'), + 'ajaxPopupsEnabled' => (bool) $settings->get('ajaxPopupsEnabled'), + 'allowAlertAutodismissal' => (bool) $settings->get('allow_alert_autodismissal'), + 'resourceCacheCode' => Civi::resources()->getCacheCode(), + 'locale' => CRM_Core_I18n::getLocale(), + 'lcMessages' => $settings->get('lcMessages'), + 'dateInputFormat' => $settings->get('dateInputFormat'), + 'timeInputFormat' => $settings->get('timeInputFormat'), + 'moneyFormat' => CRM_Utils_Money::format(1234.56), + ]); // add wysiwyg editor - $editor = Civi::settings()->get('editor_id'); + $editor = $settings->get('editor_id'); if ($editor == "CKEditor") { CRM_Admin_Form_CKEditorConfig::setConfigDefault(); $items[] = [ @@ -227,17 +236,15 @@ class CRM_Core_Resources_Common { $items[] = "packages/jquery/plugins/jquery.notify.min.js"; } - $contactID = CRM_Core_Session::getLoggedInContactID(); - // Menubar $position = 'none'; if ( - $contactID && !$config->userFrameworkFrontend + $contactID && !CRM_Core_Config::singleton()->userFrameworkFrontend && CRM_Core_Permission::check('access CiviCRM') && !@constant('CIVICRM_DISABLE_DEFAULT_MENU') && !CRM_Core_Config::isUpgradeMode() ) { - $position = Civi::settings()->get('menubar_position') ?: 'over-cms-menu'; + $position = $settings->get('menubar_position') ?: 'over-cms-menu'; } if ($position !== 'none') { $items[] = 'bower_components/smartmenus/dist/jquery.smartmenus.min.js'; @@ -245,7 +252,7 @@ class CRM_Core_Resources_Common { $items[] = 'js/crm.menubar.js'; // @see CRM_Core_Resources::renderMenubarStylesheet $items[] = Civi::service('asset_builder')->getUrl('crm-menubar.css', [ - 'menubarColor' => Civi::settings()->get('menubar_color'), + 'menubarColor' => $settings->get('menubar_color'), 'height' => 40, 'breakpoint' => 768, ]); @@ -260,12 +267,13 @@ class CRM_Core_Resources_Common { } // JS for multilingual installations - if (!empty($config->languageLimit) && count($config->languageLimit) > 1 && CRM_Core_Permission::check('translate CiviCRM')) { + $languageLimit = $settings->get('languageLimit'); + if (is_array($languageLimit) && count($languageLimit) > 1 && CRM_Core_Permission::check('translate CiviCRM')) { $items[] = "js/crm.multilingual.js"; } // Enable administrators to edit option lists in a dialog - if (CRM_Core_Permission::check('administer CiviCRM') && Civi::settings()->get('ajaxPopupsEnabled')) { + if (CRM_Core_Permission::check('administer CiviCRM') && $settings->get('ajaxPopupsEnabled')) { $items[] = "js/crm.optionEdit.js"; } diff --git a/CRM/Core/xml/Menu/Misc.xml b/CRM/Core/xml/Menu/Misc.xml index 762e25d445..5be55e8322 100644 --- a/CRM/Core/xml/Menu/Misc.xml +++ b/CRM/Core/xml/Menu/Misc.xml @@ -205,12 +205,6 @@ access CiviCRM Confirm dates - - civicrm/ajax/l10n-js - CRM_Core_Resources::outputLocalizationJS - 1 - true - civicrm/shortcode CRM_Core_Form_ShortCode diff --git a/Civi/Core/Container.php b/Civi/Core/Container.php index c4f8ca72ab..947a2657d8 100644 --- a/Civi/Core/Container.php +++ b/Civi/Core/Container.php @@ -381,6 +381,7 @@ class Container { $dispatcher->addListener('hook_civicrm_buildAsset', ['\CRM_Utils_VisualBundle', 'buildAssetJs']); $dispatcher->addListener('hook_civicrm_buildAsset', ['\CRM_Utils_VisualBundle', 'buildAssetCss']); $dispatcher->addListener('hook_civicrm_buildAsset', ['\CRM_Core_Resources', 'renderMenubarStylesheet']); + $dispatcher->addListener('hook_civicrm_buildAsset', ['\CRM_Core_Resources', 'renderL10nJs']); $dispatcher->addListener('hook_civicrm_coreResourceList', ['\CRM_Utils_System', 'appendCoreResources']); $dispatcher->addListener('hook_civicrm_getAssetUrl', ['\CRM_Utils_System', 'alterAssetUrl']); $dispatcher->addListener('hook_civicrm_alterExternUrl', ['\CRM_Utils_System', 'migrateExternUrl'], 1000); diff --git a/templates/CRM/common/l10n.js.tpl b/templates/CRM/common/l10n.js.tpl index 1612f23393..2b0f76073a 100644 --- a/templates/CRM/common/l10n.js.tpl +++ b/templates/CRM/common/l10n.js.tpl @@ -16,11 +16,11 @@ CRM.config.resourceBase = {$config->userFrameworkResourceURL|@json_encode}; {* packageseBase: The URL of `civicrm-packages` assets. Ends with "/". *} CRM.config.packagesBase = {capture assign=packagesBase}{crmResURL expr='[civicrm.packages]/'}{/capture}{$packagesBase|@json_encode}; - CRM.config.lcMessages = {$config->lcMessages|@json_encode}; + CRM.config.lcMessages = {$lcMessages|@json_encode}; CRM.config.locale = {$locale|@json_encode}; CRM.config.cid = {$cid|@json_encode}; - $.datepicker._defaults.dateFormat = CRM.config.dateInputFormat = {$config->dateInputFormat|@json_encode}; - CRM.config.timeIs24Hr = {if $config->timeInputFormat eq 2}true{else}false{/if}; + $.datepicker._defaults.dateFormat = CRM.config.dateInputFormat = {$dateInputFormat|@json_encode}; + CRM.config.timeIs24Hr = {if $timeInputFormat eq 2}true{else}false{/if}; CRM.config.ajaxPopupsEnabled = {$ajaxPopupsEnabled|@json_encode}; CRM.config.allowAlertAutodismissal = {$allowAlertAutodismissal|@json_encode}; CRM.config.resourceCacheCode = {$resourceCacheCode|@json_encode}; @@ -30,7 +30,7 @@ // Initialize CRM.url and CRM.formatMoney CRM.url({ldelim}back: '{crmURL p="civicrm/placeholder-url-path" q="civicrm-placeholder-url-query=1" h=0 fb=1}', front: '{crmURL p="civicrm/placeholder-url-path" q="civicrm-placeholder-url-query=1" h=0 fe=1}'{rdelim}); - CRM.formatMoney('init', false, {$moneyFormat}); + CRM.formatMoney('init', false, {$moneyFormat|@json_encode}); // Localize select2 $.fn.select2.defaults.formatNoMatches = "{ts escape='js'}None found.{/ts}"; -- 2.25.1