diff --git a/classes/LocalizationPack.php b/classes/LocalizationPack.php index 8c0bccfa1..cb96729de 100644 --- a/classes/LocalizationPack.php +++ b/classes/LocalizationPack.php @@ -292,53 +292,46 @@ class LocalizationPackCore foreach ($xml->languages->language as $data) { $attributes = $data->attributes(); - if (Language::getIdByIso($attributes['iso_code'])) - continue; - $native_lang = Language::getLanguages(); - $native_iso_code = array(); - foreach ($native_lang as $lang) - $native_iso_code[] = $lang['iso_code']; // if we are not in an installation context or if the pack is not available in the local directory - if (!$install_mode || !in_array((string)$attributes['iso_code'], $native_iso_code)) + if (Language::getIdByIso($attributes['iso_code']) && !$install_mode) + continue; + + $errno = 0; + $errstr = ''; + if (!$lang_pack_link = Tools::file_get_contents('http://www.prestashop.com/download/lang_packs/get_language_pack.php?version='._PS_VERSION_.'&iso_lang='.$attributes['iso_code'])) + $this->_errors[] = Tools::displayError('Archive cannot be downloaded from prestashop.com.'); + elseif (!$lang_pack = Tools::jsonDecode($lang_pack_link)) + $this->_errors[] = Tools::displayError('Error occurred when language was checked according to your Prestashop version.'); + elseif ($content = Tools::file_get_contents('http://translations.prestashop.com/download/lang_packs/gzip/'.$lang_pack->version.'/'.$attributes['iso_code'].'.gzip')) { - $errno = 0; - $errstr = ''; - if (!@fsockopen('api.prestashop.com', 80, $errno, $errstr, 5)) - $this->_errors[] = Tools::displayError('Archive cannot be downloaded from prestashop.com.'); - elseif (!($lang_pack = Tools::jsonDecode(Tools::file_get_contents('http://www.prestashop.com/download/lang_packs/get_language_pack.php?version='._PS_VERSION_.'&iso_lang='.$attributes['iso_code'])))) - $this->_errors[] = Tools::displayError('Error occurred when language was checked according to your Prestashop version.'); - elseif ($content = Tools::file_get_contents('http://translations.prestashop.com/download/lang_packs/gzip/'.$lang_pack->version.'/'.$attributes['iso_code'].'.gzip')) + $file = _PS_TRANSLATIONS_DIR_.$attributes['iso_code'].'.gzip'; + if (file_put_contents($file, $content)) { - $file = _PS_TRANSLATIONS_DIR_.$attributes['iso_code'].'.gzip'; - if (file_put_contents($file, $content)) + $gz = new Archive_Tar($file, true); + $files_list = $gz->listContent(); + + if (!$gz->extract(_PS_TRANSLATIONS_DIR_.'../', false)) { - $gz = new Archive_Tar($file, true); - $files_list = $gz->listContent(); - - if (!$gz->extract(_PS_TRANSLATIONS_DIR_.'../', false)) - { - $this->_errors[] = Tools::displayError('Cannot decompress the translation file for the following language: ').(string)$attributes['iso_code']; - return false; - } - else - { - AdminTranslationsController::checkAndAddMailsFiles($attributes['iso_code'], $files_list); - AdminTranslationsController::addNewTabs($attributes['iso_code'], $files_list); - } - - if (!Language::checkAndAddLanguage((string)$attributes['iso_code'])) - { - $this->_errors[] = Tools::displayError('An error occurred while creating the language: ').(string)$attributes['iso_code']; - return false; - } - - @unlink($file); + $this->_errors[] = Tools::displayError('Cannot decompress the translation file for the following language: ').(string)$attributes['iso_code']; + return false; } else - $this->_errors[] = Tools::displayError('Server does not have permissions for writing.'); + { + AdminTranslationsController::checkAndAddMailsFiles($attributes['iso_code'], $files_list); + AdminTranslationsController::addNewTabs($attributes['iso_code'], $files_list); + } + if (!Language::checkAndAddLanguage((string)$attributes['iso_code'])) + { + $this->_errors[] = Tools::displayError('An error occurred while creating the language: ').(string)$attributes['iso_code']; + return false; + } + @unlink($file); } + else + $this->_errors[] = Tools::displayError('Server does not have permissions for writing.'); } } + } // change the default language if there is only one language in the localization pack if (!count($this->_errors) && $install_mode && isset($attributes['iso_code']) && count($xml->languages->language) == 1)