diff --git a/app/Tygh/UpgradeCenter/App.php b/app/Tygh/UpgradeCenter/App.php index 2e1f78e..049f72f 100644 --- a/app/Tygh/UpgradeCenter/App.php +++ b/app/Tygh/UpgradeCenter/App.php @@ -638,7 +638,7 @@ class App $this->applyPackageFiles($content_path . 'package', $this->config['dir']['root']); $logger->add('Deleting files removed at new version'); - $this->cleanupOldFiles($schema); + $this->cleanupOldFiles($schema, $this->config['dir']['root']); // Copy files from themes_repository to design folder $logger->add('Processing themes files'); @@ -701,12 +701,93 @@ class App } } + // Install languages Output::display(__('uc_install_languages'), '', true); - list ($lang_codes_to_install, $failed_lang_codes) = $this->installLanguages($schema, $logger, $content_path); - if (!empty($lang_codes_to_install) && !empty($failed_lang_codes)) { - $result = self::PACKAGE_INSTALL_RESULT_WITH_ERRORS; - $logger->add('Failed to install languages: %s', implode(', ', $failed_lang_codes)); + // Install langs that are provided by package + if (!empty($schema['languages'])) { + $logger->add('Installing languages provided by package'); + $logger->add(sprintf('Package languages: %s', implode(', ', $schema['languages']))); + + $avail_languages = Languages::getAvailable('A', true); + + $logger->add(sprintf('Already installed languages: %s', implode(', ', array_keys($avail_languages)))); + + foreach ($avail_languages as $lang_code => $language) { + if (in_array($lang_code, $schema['languages'])) { + $logger->add(sprintf('Installing "%s" language', $lang_code)); + Output::display(__('install') . ': ' . $lang_code, '', false); + + Languages::installCrowdinPack($content_path . 'languages/' . $lang_code, array( + 'install_newly_added' => true, + 'validate_lang_code' => true, + 'reinstall' => true, + )); + } else { + $pack_code = ''; + if (in_array(CART_LANGUAGE, $schema['languages'])) { + $pack_code = CART_LANGUAGE; + } elseif (in_array('en', $schema['languages'])) { + $pack_code = 'en'; + } + + if (!empty($pack_code) && file_exists($content_path . 'languages/' . $pack_code)) { + // Fill the unknown language by the Default/EN language variables + Languages::installCrowdinPack($content_path . 'languages/' . $pack_code, array( + 'reinstall' => true, + 'force_lang_code' => $lang_code, + 'install_newly_added' => true + )); + } + } + } + } else { + // Install languages using upgraded /var/langs/*/*.po files + $logger->add('Installing languages using upgraded *.po files'); + + $langs_meta = Languages::getLangPacksMeta('', '', true); + $lang_packs = array(); + + foreach ($langs_meta as $value) { + $lang_packs[$value['lang_code']] = $value; + } + + $logger->add(sprintf('Found language packs: %s', implode(', ', array_keys($lang_packs)))); + + $avail_languages = Languages::getAvailable('A', true); + $logger->add(sprintf('Already installed languages: %s', implode(', ', array_keys($avail_languages)))); + + foreach ($avail_languages as $lang_code => $language) { + if (isset($lang_packs[$lang_code])) { + $logger->add(sprintf('Installing "%s" language', $lang_code)); + Output::display(__('install') . ': ' . $lang_code, '', false); + + $pack_path = $this->config['dir']['lang_packs'] . $lang_code; + Languages::installCrowdinPack($pack_path, array( + 'install_newly_added' => true, + 'validate_lang_code' => true, + 'reinstall' => true, + )); + } else { + $pack_code = ''; + if (isset($lang_packs[CART_LANGUAGE])) { + $pack_code = CART_LANGUAGE; + } elseif (isset($lang_packs['en'])) { + $pack_code = 'en'; + } + + $pack_path = $this->config['dir']['lang_packs'] . $pack_code; + + if (!empty($pack_code) && file_exists($pack_path)) { + // Fill the unknown language by the Default/EN language variables + Languages::installCrowdinPack($pack_path, array( + 'reinstall' => true, + 'force_lang_code' => $lang_code, + 'install_newly_added' => true + )); + } + } + } } } @@ -962,9 +1043,9 @@ class App { $logger->add(str_repeat('-', 10)); $logger->add(sprintf('Changing permissions of "%s" to %o', $path, $permissions)); - $logger->lineStart('Using chmod()... '); + $logger->add('Using chmod()... ', true, true, false); $result = @chmod($path, $permissions); - $logger->lineEnd($result ? 'OK' : 'FAILED'); + $logger->add($result ? 'OK' : 'FAILED', true, false, true); if (!$result) { $logger->add('Using FTP...'); @@ -1424,74 +1505,4 @@ class App $this->params = $params; $this->settings = Settings::instance()->getValues('Upgrade_center'); } - - /** - * @param array $package_content_schema Package content schema - * @param Log $logger Logger instance - * @param string $package_content_path Package content path - * - * @return array First element is a list of languages to be installed, second element is a list languages failed to install - */ - public function installLanguages($package_content_schema, Log $logger, $package_content_path) - { - $failed_to_install = array(); - $installed_languages = array_keys(Languages::getAvailable('A', true)); - - if (empty($package_content_schema['languages'])) { - $logger->add('Installing languages using upgraded *.po files'); - $po_pack_basepath = $this->config['dir']['lang_packs']; - $lang_codes_to_install = array(); - foreach (Languages::getLangPacksMeta('', '', true) as $value) { - $lang_codes_to_install[] = $value['lang_code']; - } - } else { - $logger->add('Installing languages provided by package'); - $po_pack_basepath = $package_content_path . 'languages/'; - $lang_codes_to_install = (array) $package_content_schema['languages']; - } - $logger->add(sprintf('Already installed languages: %s', implode(', ', $installed_languages))); - $logger->add(sprintf('Languages to be installed: %s', implode(', ', $lang_codes_to_install))); - - if (in_array(CART_LANGUAGE, $lang_codes_to_install)) { - $fallback_lang_code = CART_LANGUAGE; - } elseif (in_array('en', $lang_codes_to_install)) { - $fallback_lang_code = 'en'; - } else { - $fallback_lang_code = null; - } - - foreach ($installed_languages as $lang_code) { - $logger->lineStart(sprintf('Installing "%s" language... ', $lang_code)); - - if (in_array($lang_code, $lang_codes_to_install)) { - Output::display(__('install') . ': ' . $lang_code, '', false); - - if (false === Languages::installCrowdinPack($po_pack_basepath . $lang_code, array( - 'install_newly_added' => true, - 'validate_lang_code' => true, - 'reinstall' => true, - ))) { - $logger->lineEnd('FAILED'); - $failed_to_install[] = $lang_code; - } else { - $logger->lineEnd('OK'); - } - } elseif ($fallback_lang_code !== null) { - if (false === Languages::installCrowdinPack($po_pack_basepath . $fallback_lang_code, array( - 'reinstall' => true, - 'force_lang_code' => $lang_code, - 'install_newly_added' => true, - ))) { - $logger->lineEnd('FAILED'); - $failed_to_install[] = $lang_code; - } else { - $logger->lineEnd('OK'); - } - } else { - $logger->lineEnd('SKIPPED'); - } - } - - return array($lang_codes_to_install, $failed_to_install); - } -} \ No newline at end of file +}