From 42f1a95785ed839d49f2a97285b44e7ca05d3990 Mon Sep 17 00:00:00 2001 From: demeritcowboy Date: Fri, 1 Dec 2023 23:26:05 -0500 Subject: [PATCH] find best candidate folder --- .../installFiles/l10nDownload.civi-setup.php | 40 +++++++++++++------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/setup/plugins/installFiles/l10nDownload.civi-setup.php b/setup/plugins/installFiles/l10nDownload.civi-setup.php index 8c7f881d5f..96b006cbb2 100644 --- a/setup/plugins/installFiles/l10nDownload.civi-setup.php +++ b/setup/plugins/installFiles/l10nDownload.civi-setup.php @@ -16,22 +16,38 @@ if (!defined('CIVI_SETUP')) { ->addListener('civi.setup.checkRequirements', function(\Civi\Setup\Event\CheckRequirementsEvent $e) { $lang = \Civi\Setup::instance()->getModel()->lang; if ($lang && $lang != 'en_US') { - // Use CiviCRM Core directory as a fall back. - $baseDir = $e->getModel()->srcPath; - if (isset($e->getModel()->paths['civicrm.private']['path'])) { - // If the civicrm files directory is set use this as the base path. - $baseDir = $e->getModel()->paths['civicrm.private']['path']; + // build list of candidate folders in preferred order + $candidates = []; + // if it's already set, that's our pref + if (isset($e->getModel()->paths['civicrm.l10n']['path'])) { + $candidates[] = $e->getModel()->paths['civicrm.l10n']['path']; } - // Set l10n basedir as a define. The GenCode.php tries to locate the l10n files + // Now check CIVICRM_L10N_BASEDIR via either define or env. + // The GenCode.php tries to locate the l10n files // from this location if other than l10n in the civicrm core directory. - if (!isset($e->getModel()->paths['civicrm.l10n']['path'])) { - if (\CRM_Utils_Constant::value('CIVICRM_L10N_BASEDIR')) { - $e->getModel()->paths['civicrm.l10n']['path'] = \CRM_Utils_Constant::value('CIVICRM_L10N_BASEDIR'); - } - else { - $e->getModel()->paths['civicrm.l10n']['path'] = $baseDir . DIRECTORY_SEPARATOR . 'l10n'; + $civicrm_l10n_basedir = CRM_Utils_Constant::value('CIVICRM_L10N_BASEDIR'); + if ($civicrm_l10n_basedir) { + $candidates[] = $civicrm_l10n_basedir . DIRECTORY_SEPARATOR . 'l10n'; + } + elseif (isset($e->getModel()->paths['civicrm.private']['path'])) { + // If the civicrm files directory is set use this as the base path. + $candidates[] = $e->getModel()->paths['civicrm.private']['path'] . DIRECTORY_SEPARATOR . 'l10n'; + } + // Use CiviCRM Core directory as a fall back. + $candidates[] = $e->getModel()->srcPath . DIRECTORY_SEPARATOR . 'l10n'; + + // Now see if any of the folders already exist. + foreach ($candidates as $candidate) { + if (is_dir($candidate)) { + $e->getModel()->paths['civicrm.l10n']['path'] = $candidate; + break; } } + // If none existed, then take our first preference. We know there's always at least one. + if (!isset($e->getModel()->paths['civicrm.l10n']['path'])) { + $e->getModel()->paths['civicrm.l10n']['path'] = $candidates[0]; + } + if (getenv('CIVICRM_L10N_BASEDIR') === FALSE) { // Set the environment variable CIVICRM_L10N_BASEDIR which is used in xml/GenCode.php // to create the localized sql files. -- 2.25.1