Skip to content

Commit

Permalink
Merge pull request #28425 from demeritcowboy/lang-eco
Browse files Browse the repository at this point in the history
Update language download during install to use existing folder if present
  • Loading branch information
totten authored Dec 4, 2023
2 parents d55fc07 + 6767fbb commit a2353ce
Showing 1 changed file with 45 additions and 25 deletions.
70 changes: 45 additions & 25 deletions setup/plugins/installFiles/l10nDownload.civi-setup.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,30 +16,48 @@
->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.
putenv('CIVICRM_L10N_BASEDIR=' . $e->getModel()->paths['civicrm.l10n']['path']);
}
if (!is_dir($e->getModel()->paths['civicrm.l10n']['path'])) {
\Civi\Setup::log()->info("Creating directory: " . $e->getModel()->paths['civicrm.l10n']['path']);
\CRM_Utils_File::createDir($e->getModel()->paths['civicrm.l10n']['path'], FALSE);
if (!mkdir($e->getModel()->paths['civicrm.l10n']['path'], 0777, TRUE)) {
$e->addError('system', 'l10nWritable', sprintf('Unable to create l10n directory "%s"', $e->getModel()->paths['civicrm.l10n']['path']));
}
}
}
}, \Civi\Setup::PRIORITY_MAIN);
Expand All @@ -51,19 +69,21 @@
$downloadDir = $e->getModel()->paths['civicrm.l10n']['path'] . DIRECTORY_SEPARATOR . $lang . DIRECTORY_SEPARATOR . 'LC_MESSAGES';
if (!is_dir($downloadDir)) {
\Civi\Setup::log()->info("Creating directory: " . $downloadDir);
\CRM_Utils_File::createDir($downloadDir, FALSE);
}
if (!mkdir($downloadDir, 0777, TRUE)) {
$e->addError('system', 'l10nWritable', sprintf('Unable to create language directory "%s"', $downloadDir));
}

foreach ($e->getModel()->moFiles as $moFile => $url) {
$l10DownloadFile = str_replace('[locale]', $lang, $url);
\Civi\Setup::log()
->info("Download translation '.$moFile.' from " . $l10DownloadFile . ' into ' . $downloadDir);
$client = new \GuzzleHttp\Client();
$response = $client->get($l10DownloadFile);
if ($response->getStatusCode() == 200) {
$success = file_put_contents($downloadDir . DIRECTORY_SEPARATOR . $moFile, $response->getBody());
if (!$success) {
$e->addError('l10n', 'download', 'Unable to download translation file');
foreach ($e->getModel()->moFiles as $moFile => $url) {
$l10DownloadFile = str_replace('[locale]', $lang, $url);
\Civi\Setup::log()
->info("Download translation '$moFile' from " . $l10DownloadFile . ' into ' . $downloadDir);
$client = new \GuzzleHttp\Client();
$response = $client->get($l10DownloadFile);
if ($response->getStatusCode() == 200) {
$success = file_put_contents($downloadDir . DIRECTORY_SEPARATOR . $moFile, $response->getBody());
if (!$success) {
$e->addError('l10n', 'download', 'Unable to download translation file');
}
}
}
}
Expand Down

0 comments on commit a2353ce

Please sign in to comment.