Esempio n. 1
0
 /**
  * Gets available languages
  * @return array languages list
  */
 public function getLanguages()
 {
     if (empty($this->languages)) {
         $this->languages = Languages::getAll();
     }
     return $this->languages;
 }
Esempio n. 2
0
function fn_rus_spsr_install()
{
    $service = array('status' => 'A', 'module' => 'spsr', 'code' => 'spsr', 'sp_file' => '', 'description' => 'СПСР');
    $service['service_id'] = db_query('INSERT INTO ?:shipping_services ?e', $service);
    foreach (Languages::getAll() as $service['lang_code'] => $lang_data) {
        db_query('INSERT INTO ?:shipping_service_descriptions ?e', $service);
    }
}
Esempio n. 3
0
function fn_rus_dellin_install()
{
    $service = array('status' => 'A', 'module' => 'dellin', 'code' => '301', 'sp_file' => '', 'description' => 'Деловые линии');
    $service_id = db_query('INSERT INTO ?:shipping_services ?e', $service);
    $service['service_id'] = $service_id;
    foreach (Languages::getAll() as $service['lang_code'] => $lang_data) {
        db_query('INSERT INTO ?:shipping_service_descriptions ?e', $service);
    }
}
Esempio n. 4
0
function fn_rus_pecom_install()
{
    $objects = fn_rus_pecom_schema();
    foreach ($objects as $object) {
        $service = array('status' => $object['status'], 'module' => $object['module'], 'code' => $object['code'], 'sp_file' => $object['sp_file'], 'description' => $object['description']);
        $service['service_id'] = db_query('INSERT INTO ?:shipping_services ?e', $service);
        foreach (Languages::getAll() as $service['lang_code'] => $lang_data) {
            db_query('INSERT INTO ?:shipping_service_descriptions ?e', $service);
        }
    }
}
Esempio n. 5
0
function fn_rus_edost_install()
{
    $services = fn_get_schema('edost', 'services', 'php', true);
    foreach ($services as $service) {
        $service_id = db_query('INSERT INTO ?:shipping_services ?e', $service);
        $service['service_id'] = $service_id;
        foreach (Languages::getAll() as $service['lang_code'] => $lang_data) {
            db_query('INSERT INTO ?:shipping_service_descriptions ?e', $service);
        }
    }
}
Esempio n. 6
0
 public function delete($id)
 {
     $data = array();
     $status = Response::STATUS_BAD_REQUEST;
     if (LLanguages::deleteLanguages(array($id))) {
         $status = Response::STATUS_NO_CONTENT;
     } elseif (!fn_notification_exists('extra', 'language_is_default')) {
         $status = Response::STATUS_NOT_FOUND;
     }
     return array('status' => $status, 'data' => $data);
 }
Esempio n. 7
0
function fn_rus_pickpoint_install()
{
    $service = array('status' => 'A', 'module' => 'pickpoint', 'code' => 'pickpoint', 'sp_file' => '', 'description' => 'Pickpoint');
    $service['service_id'] = db_query('INSERT INTO ?:shipping_services ?e', $service);
    foreach (Languages::getAll() as $service['lang_code'] => $lang_data) {
        db_query('INSERT INTO ?:shipping_service_descriptions ?e', $service);
    }
    db_query("CREATE TABLE IF NOT EXISTS `?:rus_pickpoint_postamat` (\n        `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,\n        `city_name` varchar(150) NOT NULL,\n        `country_name` varchar(150) NOT NULL,\n        `region_name` varchar(150) NOT NULL,\n        `number` varchar(20) NOT NULL,\n        `name` varchar(250) NOT NULL,\n        `work_time` varchar(100) NOT NULL,\n        `post_code` varchar(16) NOT NULL,\n        `address` varchar(255) NOT NULL,\n        PRIMARY KEY (`id`)\n    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;");
    $http_url = fn_get_storefront_protocol();
    $url = $http_url . '://e-solution.pickpoint.ru/api/';
    RusPickpoint::postamatPickpoint($url . 'postamatlist');
}
Esempio n. 8
0
function fn_rus_russianpost_install()
{
    $objects = fn_rus_russianpost_schema();
    foreach ($objects as $object) {
        $service = array('status' => $object['status'], 'module' => $object['module'], 'code' => $object['code'], 'sp_file' => $object['sp_file'], 'description' => $object['description']);
        $service_id = db_get_field('SELECT service_id FROM ?:shipping_services WHERE module = ?s AND code = ?s', $object['module'], $object['code']);
        if (empty($service_id)) {
            $service['service_id'] = db_query('INSERT INTO ?:shipping_services ?e', $service);
            foreach (Languages::getAll() as $service['lang_code'] => $lang_data) {
                db_query('INSERT INTO ?:shipping_service_descriptions ?e', $service);
            }
        }
    }
}
Esempio n. 9
0
function fn_rus_pickup_install()
{
    $service = array('status' => 'A', 'module' => 'pickup', 'code' => 'pickup', 'sp_file' => '', 'description' => 'Pickup');
    $service['service_id'] = db_get_field('SELECT service_id FROM ?:shipping_services WHERE module = ?s AND code = ?s', $service['module'], $service['code']);
    if (empty($service['service_id'])) {
        $service['service_id'] = db_query('INSERT INTO ?:shipping_services ?e', $service);
    }
    $languages = Languages::getAll();
    foreach ($languages as $lang_code => $lang_data) {
        if ($lang_code == 'ru') {
            $service['description'] = "Самовывоз";
        } else {
            $service['description'] = "Pickup";
        }
        $service['lang_code'] = $lang_code;
        db_query('INSERT INTO ?:shipping_service_descriptions ?e', $service);
    }
}
Esempio n. 10
0
function fn_yandex_delivery_install()
{
    $service = array('status' => 'A', 'module' => 'yandex', 'code' => 'yandex', 'sp_file' => '', 'description' => 'Yandex.Delivery');
    $service['service_id'] = db_get_field('SELECT service_id FROM ?:shipping_services WHERE module = ?s AND code = ?s', $service['module'], $service['code']);
    if (empty($service['service_id'])) {
        $service['service_id'] = db_query('INSERT INTO ?:shipping_services ?e', $service);
    }
    $languages = Languages::getAll();
    foreach ($languages as $lang_code => $lang_data) {
        if ($lang_code == 'ru') {
            $service['description'] = "Яндекс.Доставка";
        } else {
            $service['description'] = "Yandex.Delivery";
        }
        $service['lang_code'] = $lang_code;
        db_query('INSERT INTO ?:shipping_service_descriptions ?e', $service);
    }
}
Esempio n. 11
0
function fn_settings_actions_addons_banners_banner_multilang($new_value, $old_value)
{
    if ($new_value == 'N') {
        $lang_codes = Languages::getAll();
        unset($lang_codes[DEFAULT_LANGUAGE]);
        $banners_multilang = array();
        foreach ($lang_codes as $lang_code => $lang_data) {
            list($banners) = fn_get_banners(array(), $lang_code);
            foreach ($banners as $banner) {
                $banners_multilang[$lang_code][$banner['banner_id']] = $banner;
            }
        }
        list($banners) = fn_get_banners(array(), DEFAULT_LANGUAGE);
        foreach ($banners as $banner) {
            if ($banner['type'] != 'G') {
                continue;
            }
            $main_image_id = !empty($banner['main_pair']['image_id']) ? $banner['main_pair']['image_id'] : 0;
            foreach ($lang_codes as $lang_code => $lang_data) {
                $banner_lang = $banners_multilang[$lang_code][$banner['banner_id']];
                $lang_image_id = !empty($banner_lang['main_pair']['image_id']) ? $banner_lang['main_pair']['image_id'] : 0;
                if ($lang_image_id != 0 && ($main_image_id == 0 || $main_image_id != $lang_image_id)) {
                    fn_delete_image($lang_image_id, $banner_lang['main_pair']['pair_id'], 'promo');
                    $lang_image_id = 0;
                }
                if ($lang_image_id == 0 && $main_image_id != 0) {
                    $data_banner_image = array('banner_id' => $banner['banner_id'], 'lang_code' => $lang_code);
                    $banner_image_id = db_query("INSERT INTO ?:banner_images ?e", $data_banner_image);
                    fn_add_image_link($banner_image_id, $banner['main_pair']['pair_id']);
                    $data_desc = array('description' => empty($banner['main_pair']['icon']['alt']) ? '' : $banner['main_pair']['icon']['alt'], 'object_holder' => 'images');
                    fn_create_description('common_descriptions', 'object_id', $main_image_id, $data_desc);
                }
                db_query("UPDATE ?:banner_descriptions SET url = ?s WHERE banner_id = ?i", $banner['url'], $banner['banner_id']);
            }
        }
    }
    return true;
}
Esempio n. 12
0
/**
 * Updates product feature variant
 *
 * @param int $feature_id Feature identifier
 * @param array $feature_type Feature type
 * @param array $variant Feature variant data
 * @param string $lang_code 2-letters language code
 *
 * @return array $variant_id Feature variant identifier
 */
function fn_update_product_feature_variant($feature_id, $feature_type, $variant, $lang_code = DESCR_SL)
{
    if (empty($variant['variant']) && (!isset($variant['variant']) || $variant['variant'] !== '0')) {
        return false;
    }
    $variant['feature_id'] = $feature_id;
    if (isset($variant['variant_id'])) {
        $variant_id = db_get_field('SELECT variant_id FROM ?:product_feature_variants WHERE variant_id = ?i', $variant['variant_id']);
        unset($variant['variant_id']);
    }
    if (empty($variant_id)) {
        $join = db_quote('INNER JOIN ?:product_feature_variants fv ON fv.variant_id = fvd.variant_id');
        $variant_id = db_get_field("SELECT fvd.variant_id FROM ?:product_feature_variant_descriptions AS fvd {$join} WHERE variant = ?s AND feature_id = ?i", $variant['variant'], $feature_id);
    }
    if (empty($variant_id)) {
        $variant_id = $variant['variant_id'] = db_query("INSERT INTO ?:product_feature_variants ?e", $variant);
        foreach (Languages::getAll() as $variant['lang_code'] => $_v) {
            db_query("INSERT INTO ?:product_feature_variant_descriptions ?e", $variant);
        }
    } else {
        db_query("UPDATE ?:product_feature_variants SET ?u WHERE variant_id = ?i", $variant, $variant_id);
        db_query("UPDATE ?:product_feature_variant_descriptions SET ?u WHERE variant_id = ?i AND lang_code = ?s", $variant, $variant_id, $lang_code);
    }
    if ($feature_type == 'N') {
        // number
        db_query('UPDATE ?:product_features_values SET ?u WHERE variant_id = ?i AND lang_code = ?s', array('value_int' => $variant['variant']), $variant_id, $lang_code);
    }
    return $variant_id;
}
Esempio n. 13
0
/**
 * @deprecated
 *
 * Gets list of all languages defined in store
 * used for adding desciptions and etc.
 *
 * @param boolean $edit Flag that determines if language list is used to be edited
 * @return array $languages Languages list
 */
function fn_get_translation_languages($edit = false)
{
    return Languages::getAll($edit);
}
Esempio n. 14
0
/**
 * @deprecated
 *
 * Updates language
 *
 * @param array $language_data Language data
 * @param string $lang_id language id
 * @return string language id
 */
function fn_update_language($language_data, $lang_id)
{
    return Languages::update($language_data, $lang_id);
}
Esempio n. 15
0
 protected function getLangCodes()
 {
     return array_keys(Languages::getAll());
 }
Esempio n. 16
0
function fn_banners_install()
{
    // FIXME
    if (DEFAULT_LANGUAGE != 'en') {
        db_query("UPDATE ?:banner_images SET lang_code = ?s WHERE lang_code = ?s", DEFAULT_LANGUAGE, 'en');
        // Demo data
    }
    $banners = db_get_array("SELECT ?:banners.banner_id, ?:banner_images.banner_image_id FROM ?:banners LEFT JOIN ?:banner_images ON ?:banner_images.banner_id = ?:banners.banner_id AND ?:banner_images.lang_code = ?s", DEFAULT_LANGUAGE);
    foreach ($banners as $k => $v) {
        $banners[$k]['main_pair'] = fn_get_image_pairs($v['banner_image_id'], 'promo', 'M', true, false, DEFAULT_LANGUAGE);
    }
    foreach (Languages::getAll() as $lang_code => $v) {
        fn_banners_clone($banners, $lang_code);
    }
    return true;
}
Esempio n. 17
0
function fn_banners_install()
{
    $banners = db_get_hash_multi_array("SELECT ?:banners.banner_id, ?:banner_images.banner_image_id, ?:banner_images.lang_code FROM ?:banners LEFT JOIN ?:banner_images ON ?:banner_images.banner_id = ?:banners.banner_id", array('lang_code', 'banner_id'));
    $langs = array_keys(Languages::getAll());
    $need_clone_langs = array_diff($langs, array_keys($banners));
    if (!empty($need_clone_langs)) {
        $clone_lang = DEFAULT_LANGUAGE;
        if (in_array(DEFAULT_LANGUAGE, $need_clone_langs)) {
            $clone_lang = 'en';
        }
        foreach ($banners[$clone_lang] as $banner_id => &$banner) {
            $banner['main_pair'] = fn_get_image_pairs($banner['banner_image_id'], 'promo', 'M', true, false, $clone_lang);
        }
        foreach ($need_clone_langs as $need_clone_lang) {
            fn_banners_clone($banners[$clone_lang], $need_clone_lang);
        }
    }
    foreach ($banners['en'] as $banner_id => &$banner) {
        $banner['main_pair'] = fn_get_image_pairs($banner['banner_image_id'], 'promo', 'M', true, false, 'en');
    }
    if (!in_array('en', $langs)) {
        $banner_images_ids = db_get_fields("SELECT banner_image_id FROM ?:banner_images WHERE lang_code = ?s", 'en');
        foreach ($banner_images_ids as $banner_image_id) {
            fn_delete_image_pairs($banner_image_id, 'promo');
        }
        if (!empty($banner_images_ids)) {
            db_query("DELETE FROM ?:banner_images WHERE banner_image_id IN (?n)", $banner_images_ids);
        }
    }
    return true;
}
Esempio n. 18
0
function fn_yml_add_logs()
{
    $setting = Settings::instance()->getSettingDataByName('log_type_yml_export');
    if (!$setting) {
        $setting = array('name' => 'log_type_yml_export', 'section_id' => 12, 'section_tab_id' => 0, 'type' => 'N', 'position' => 10, 'is_global' => 'N', 'edition_type' => 'ROOT,VENDOR', 'value' => '#M#export');
        $descriptions = array();
        foreach (Languages::getAll() as $lang_code => $_lang) {
            $descriptions[] = array('object_type' => Settings::SETTING_DESCRIPTION, 'lang_code' => $lang_code, 'value' => __('yml2_log'));
        }
        $setting_id = Settings::instance()->update($setting, null, $descriptions, true);
        $variant_id = Settings::instance()->updateVariant(array('object_id' => $setting_id, 'name' => 'export', 'position' => 5));
        foreach (Languages::getAll() as $lang_code => $_lang) {
            $description = array('object_id' => $variant_id, 'object_type' => Settings::VARIANT_DESCRIPTION, 'lang_code' => $lang_code, 'value' => __('yml2_log_export'));
            Settings::instance()->updateDescription($description);
        }
    }
    return true;
}
Esempio n. 19
0
/**
 * @deprecated
 *
 * Gets only active languages list (as lang_code => name)
 *
 * @param bool $include_hidden if true get hiddenlanguages too
 * @return array Currencies list
 */
function fn_get_simple_languages($include_hidden = false)
{
    return Languages::getSimpleLanguages($include_hidden);
}
Esempio n. 20
0
/**
 * Installes addon
 *
 * @param string $addon Addon to install
 * @param bool $show_notification Display notification if set to true
 * @param bool $install_demo If defined as true, addon's demo data will be installed
 * @return bool True if addons installed successfully, false otherwise
 */
function fn_install_addon($addon, $show_notification = true, $install_demo = false)
{
    $status = db_get_field("SELECT status FROM ?:addons WHERE addon = ?s", $addon);
    // Return true if addon is installed
    if (!empty($status)) {
        return true;
    }
    $addon_scheme = SchemesManager::getScheme($addon);
    if (empty($addon_scheme)) {
        // Required add-on was not found in store.
        return false;
    }
    // Unmanaged addons can be installed via console only
    if ($addon_scheme->getUnmanaged() && !defined('CONSOLE')) {
        return false;
    }
    if ($addon_scheme != false) {
        // Register custom classes
        Registry::get('class_loader')->add('', Registry::get('config.dir.addons') . $addon);
        if ($addon_scheme->isPromo()) {
            $texts = fn_get_addon_permissions_text();
            fn_set_notification('E', __('error'), $texts['text']);
            return false;
        }
        $_data = array('addon' => $addon_scheme->getId(), 'priority' => $addon_scheme->getPriority(), 'dependencies' => implode(',', $addon_scheme->getDependencies()), 'conflicts' => implode(',', $addon_scheme->getConflicts()), 'requirements' => $addon_scheme->getRequirements(), 'version' => $addon_scheme->getVersion(), 'separate' => $addon_scheme->getSettingsLayout() == 'separate' ? 1 : 0, 'has_icon' => $addon_scheme->hasIcon(), 'unmanaged' => $addon_scheme->getUnmanaged(), 'status' => 'D');
        // Check system requirements (needed versions, installed extensions, etc.)
        if (!$addon_scheme->checkRequirements($_data['requirements'])) {
            return false;
        }
        $dependencies = SchemesManager::getInstallDependencies($_data['addon']);
        if (!empty($dependencies)) {
            fn_set_notification('W', __('warning'), __('text_addon_install_dependencies', array('[addon]' => implode(',', $dependencies))));
            return false;
        }
        if ($addon_scheme->callCustomFunctions('before_install') == false) {
            fn_uninstall_addon($addon, false);
            return false;
        }
        // Add add-on to registry
        Registry::set('addons.' . $addon, array('status' => 'D', 'priority' => $_data['priority']));
        // Execute optional queries
        if ($addon_scheme->processQueries('install', Registry::get('config.dir.addons') . $addon) == false) {
            fn_uninstall_addon($addon, false);
            return false;
        }
        if (fn_update_addon_settings($addon_scheme) == false) {
            fn_uninstall_addon($addon, false);
            return false;
        }
        db_query("REPLACE INTO ?:addons ?e", $_data);
        foreach ($addon_scheme->getAddonTranslations() as $translation) {
            db_query("REPLACE INTO ?:addon_descriptions ?e", array('lang_code' => $translation['lang_code'], 'addon' => $addon_scheme->getId(), 'name' => $translation['value'], 'description' => isset($translation['description']) ? $translation['description'] : ''));
        }
        foreach ($addon_scheme->getLanguages() as $lang_code => $_v) {
            $lang_code = strtolower($lang_code);
            $path = $addon_scheme->getPoPath($lang_code);
            if (!empty($path)) {
                Languages::installLanguagePack($path, array('reinstall' => true, 'validate_lang_code' => $lang_code));
            }
        }
        // Install templates
        fn_install_addon_templates($addon_scheme->getId());
        // Put this addon settings to the registry
        $settings = Settings::instance()->getValues($addon_scheme->getId(), Settings::ADDON_SECTION, false);
        if (!empty($settings)) {
            Registry::set('settings.' . $addon, $settings);
            $addon_data = Registry::get('addons.' . $addon);
            Registry::set('addons.' . $addon, fn_array_merge($addon_data, $settings));
        }
        // Add optional language variables
        $language_variables = $addon_scheme->getLanguageValues(false);
        if (!empty($language_variables)) {
            db_query('REPLACE INTO ?:language_values ?m', $language_variables);
        }
        // Get only original values
        $language_variables = $addon_scheme->getLanguageValues(true);
        if (!empty($language_variables)) {
            db_query('REPLACE INTO ?:original_values ?m', $language_variables);
        }
        if (fn_allowed_for('ULTIMATE')) {
            foreach (fn_get_all_companies_ids() as $company) {
                ProductTabs::instance($company)->createAddonTabs($addon_scheme->getId(), $addon_scheme->getTabOrder());
            }
        } else {
            ProductTabs::instance()->createAddonTabs($addon_scheme->getId(), $addon_scheme->getTabOrder());
        }
        // Execute custom functions
        if ($addon_scheme->callCustomFunctions('install') == false) {
            fn_uninstall_addon($addon, false);
            return false;
        }
        if ($show_notification == true) {
            fn_set_notification('N', __('notice'), __('text_addon_installed', array('[addon]' => $addon_scheme->getName())));
        }
        // If we need to activate addon after install, call "update status" procedure
        if ($addon_scheme->getStatus() != 'D') {
            fn_update_addon_status($addon, $addon_scheme->getStatus(), false);
        }
        if (file_exists(Registry::get('config.dir.addons') . $addon . '/layouts.xml')) {
            if (fn_allowed_for('ULTIMATE')) {
                foreach (fn_get_all_companies_ids() as $company) {
                    $layouts = Layout::instance($company)->getList();
                    foreach ($layouts as $layout_id => $layout) {
                        Exim::instance($company, $layout_id)->importFromFile(Registry::get('config.dir.addons') . $addon . '/layouts.xml');
                    }
                }
            } else {
                $layouts = Layout::instance()->getList();
                foreach ($layouts as $layout_id => $layout) {
                    Exim::instance(0, $layout_id)->importFromFile(Registry::get('config.dir.addons') . $addon . '/layouts.xml');
                }
            }
        }
        // Clean cache
        fn_clear_cache();
        if ($install_demo) {
            $addon_scheme->processQueries('demo', Registry::get('config.dir.addons') . $addon);
            if ($addon_scheme->callCustomFunctions('demo') == false) {
                fn_uninstall_addon($addon, false);
                return false;
            }
        }
        return true;
    } else {
        // Addon was not installed because scheme is not exists.
        return false;
    }
}
Esempio n. 21
0
 public static function setActualLangValues()
 {
     $addons = self::getInstalledAddons();
     $languages = db_get_fields("SELECT lang_code FROM ?:languages");
     foreach ($addons as $addon) {
         $addon_scheme = AddonSchemesManager::getScheme($addon);
         if (!empty($addon_scheme)) {
             // Add optional language variables
             $language_variables = $addon_scheme->getLanguageValues();
             if (!empty($language_variables)) {
                 db_query('REPLACE INTO ?:language_values ?m', $language_variables);
             }
             foreach ($languages as $lang_code) {
                 $description = $addon_scheme->getDescription($lang_code);
                 $addon_name = $addon_scheme->getName($lang_code);
                 db_query("UPDATE ?:addon_descriptions SET description = ?s, name = ?s WHERE addon = ?s AND lang_code = ?s", $description, $addon_name, $addon, $lang_code);
             }
             $tabs = $addon_scheme->getSections();
             if (!empty($tabs)) {
                 foreach ($tabs as $tab_index => $tab) {
                     $addon_section_id = db_get_field("SELECT section_id FROM ?:settings_sections WHERE name = ?s AND parent_id = (SELECT section_id FROM ?:settings_sections WHERE name = ?s)", $tab['id'], $addon);
                     //Can't check edition here, so just skip description update if addon section was not found.
                     if (!empty($addon_section_id)) {
                         fn_update_addon_settings_descriptions($addon_section_id, Settings::SECTION_DESCRIPTION, $tab['translations']);
                         $settings = $addon_scheme->getSettings($tab['id']);
                         foreach ($settings as $k => $setting) {
                             $setting_id = db_get_field("SELECT object_id FROM ?:settings_objects WHERE name = ?s AND section_tab_id = ?i", $setting['id'], $addon_section_id);
                             if (!empty($setting_id)) {
                                 fn_update_addon_settings_descriptions($setting_id, Settings::SETTING_DESCRIPTION, $setting['translations']);
                                 if (isset($setting['variants'])) {
                                     foreach ($setting['variants'] as $variant_k => $variant) {
                                         $variant_id = db_get_field("SELECT variant_id FROM ?:settings_variants WHERE object_id = ?i AND name = ?s", $setting_id, $variant['id']);
                                         if (!empty($variant_id)) {
                                             fn_update_addon_settings_descriptions($variant_id, Settings::VARIANT_DESCRIPTION, $variant['translations']);
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     General::connectToOriginalDB(array('table_prefix' => General::formatPrefix()));
     $prefix = Registry::get('config.table_prefix');
     /*
            db_query("INSERT INTO ?:state_descriptions (SELECT state_id, ?s as lang_code, state FROM " . $prefix . "state_descriptions WHERE lang_code = ?s) ON DUPLICATE KEY UPDATE ?:state_descriptions.state_id = ?:state_descriptions.state_id", General::$default_language, DEFAULT_LANGUAGE);
            if (fn_allowed_for('ULTIMATE')) {
                db_query("INSERT  INTO ?:ult_language_values (SELECT ?s as lang_code, name, value, company_id FROM " . $prefix . "ult_language_values WHERE lang_code = ?s) ON DUPLICATE KEY UPDATE ?:ult_language_values.value = ?:ult_language_values.value", General::$default_language, DEFAULT_LANGUAGE);
            }
     
            $new_ver_langs = db_get_fields("SELECT lang_code FROM " . $prefix . "languages");
            foreach (db_get_fields("SELECT lang_code FROM ?:languages") as $lang_code) {
                $_lang_code = in_array($lang_code, $new_ver_langs) ? $lang_code : DEFAULT_LANGUAGE;
                //We can update only core settings descriptions because addons descriptions were updated during settings restore.
                db_query("INSERT INTO ?:settings_descriptions "
                        . "(SELECT object_id, object_type, ?s as lang_code, value, tooltip FROM " . $prefix . "settings_descriptions WHERE object_id IN "
                            . "(SELECT object_id FROM " . $prefix . "settings_objects WHERE section_id IN "
                                . "(SELECT section_id FROM " . $prefix . "settings_sections WHERE type = 'CORE')) "
                        . "AND lang_code = ?s) "
                        . "ON DUPLICATE KEY UPDATE ?:settings_descriptions.value = " . $prefix . "settings_descriptions.value, ?:settings_descriptions.tooltip = " . $prefix . "settings_descriptions.tooltip",
                        $lang_code, $_lang_code
                );
                db_query("INSERT INTO ?:language_values "
                        . "(SELECT ?s as lang_code, name, value FROM " . $prefix . "language_values WHERE lang_code = ?s) "
                        . "ON DUPLICATE KEY UPDATE ?:language_values.name = " . $prefix . "language_values.name",
                        $lang_code, $_lang_code
                );
            }
     
            db_query("REPLACE INTO ?:original_values (SELECT * FROM " . $prefix . "original_values)");
     */
     $langs = db_get_fields("SELECT lang_code FROM ?:languages");
     $po_path = Registry::get('config.dir.lang_packs');
     $params = array('install_newly_added' => true, 'reinstall' => true);
     foreach ($langs as $lang_code) {
         $params['force_lang_code'] = $lang_code;
         $params['validate_lang_code'] = true;
         if (!is_dir($po_path . $lang_code)) {
             $params['validate_lang_code'] = false;
             if (is_dir($po_path . General::$default_language)) {
                 $lang_code = General::$default_language;
                 $params['force_lang_code'] = General::$default_language;
             } elseif (is_dir($po_path . 'en')) {
                 $lang_code = 'en';
                 $params['force_lang_code'] = 'en';
             }
         }
         $result = Languages::installCrowdinPack($po_path . $lang_code, $params);
     }
     return true;
 }
Esempio n. 22
0
 /**
  * Imports nessesared languages
  *
  * @return bool true on success, false otherwise
  */
 public function setupLanguages($demo)
 {
     $languages = $this->_cart_settings['languages'];
     if (!empty($languages)) {
         foreach ($languages as $lang_code) {
             $pack_path = Registry::get('config.dir.install') . App::DB_LANG . "/{$lang_code}/{$lang_code}.po";
             $edition_pack_path = Registry::get('config.dir.install') . App::DB_LANG . "/{$lang_code}/{$lang_code}" . '_' . fn_get_edition_acronym(PRODUCT_EDITION) . '.po';
             if (!file_exists($pack_path)) {
                 App::instance()->setNotification('W', 'Missing language pack', 'Unable to find: ' . $pack_path . ' (skipped)', true);
                 continue;
             }
             $this->_parseSql(Registry::get('config.dir.install') . App::DB_LANG . "/{$lang_code}/" . App::DB_LANG_DATA, 'text_installing_additional_language', array('lang_code' => $lang_code));
             if ($demo) {
                 $this->_parseSql(Registry::get('config.dir.install') . App::DB_LANG . "/{$lang_code}/" . App::DB_LANG_DEMO, 'text_installing_additional_language', array('lang_code' => $lang_code));
             }
             // Install language variables from PO files
             $params = array('lang_code' => $lang_code);
             $_langs = Languages::get($params);
             $is_exists = count($_langs) > 0 ? true : false;
             Languages::installLanguagePack($pack_path, array('reinstall' => $is_exists));
             if (file_exists($edition_pack_path)) {
                 Languages::installLanguagePack($edition_pack_path, array('reinstall' => true));
             }
         }
         // share all additional languages
         if (fn_allowed_for('ULTIMATE')) {
             db_query("REPLACE INTO ?:ult_objects_sharing (`share_company_id`, `share_object_id`, `share_object_type`) " . "SELECT ?:companies.company_id, ?:languages.lang_id, 'languages' " . "FROM ?:languages INNER JOIN ?:companies;");
         }
         $languages = db_get_hash_array("SELECT * FROM ?:languages", 'lang_code');
         Registry::set('languages', $languages);
         return true;
     } else {
         return false;
     }
 }
Esempio n. 23
0
function fn_qwintry_create_shipping_service()
{
    $service = array('status' => 'A', 'module' => 'qwintry', 'code' => 'Qwintry Air');
    $service_id = db_query('INSERT INTO ?:shipping_services ?e', $service);
    $service_description = array('service_id' => $service_id, 'description' => 'Qwintry Air');
    foreach (Languages::getAll() as $service_description['lang_code'] => $_v) {
        db_query("INSERT INTO ?:shipping_service_descriptions ?e", $service_description);
    }
    $section_id = db_get_field('SELECT section_id FROM ?:settings_sections WHERE name = ?s', 'Shippings');
    $setting = array('edition_type' => 'ROOT', 'name' => 'qwintry_enabled', 'section_id' => $section_id, 'section_tab_id' => 0, 'type' => 'C', 'value' => 'Y', 'position' => 35, 'is_global' => 'N', 'handler' => '', 'parent_id' => 0);
    $setting_id = db_query('INSERT INTO ?:settings_objects ?e', $setting);
    $setting_description = array('object_id' => $setting_id, 'object_type' => 'O', 'value' => 'Enable Qwintry Air', 'tooltip' => '');
    foreach (Languages::getAll() as $setting_description['lang_code'] => $_v) {
        db_query("INSERT INTO ?:settings_descriptions ?e", $setting_description);
    }
}
Esempio n. 24
0
 protected function insert()
 {
     $table_name = $this->getTableName();
     $description_table_name = $this->getDescriptionTableName();
     $primary_field = $this->getPrimaryField();
     $_data = $this->prepareAttributes();
     $result = db_query("INSERT INTO {$table_name} ?e", $_data);
     if ($this->primaryAutoIncrement()) {
         $this->id = $result;
     } else {
         $this->id = $this->{$primary_field};
     }
     if (!empty($description_table_name)) {
         $_data[$primary_field] = $this->id;
         foreach (Languages::getAll() as $_data['lang_code'] => $v) {
             db_query("INSERT INTO {$description_table_name} ?e", $_data);
         }
     }
     $this->{$primary_field} = $this->id;
     return true;
 }
Esempio n. 25
0
/**
 * Updates SEO names according to path when parent was changed for object.
 *
 * @param integer $object_id   object ID
 * @param string  $object_type object type
 * @param array   $params      params
 *
 * @return bool Whether SEO-names were regenerated successfully.
 */
function fn_seo_update_tree_object($object_id, $object_type, $params)
{
    if (isset($params['old_id_path']) && empty($params['old_id_path'])) {
        return false;
        // newly created object, skip
    }
    // Update item itself if it wasn't deleted
    if (!isset($params['after_deletion']) || !$params['after_deletion']) {
        $lang_codes = array();
        $seo_settings = fn_get_seo_settings($params['company_id']);
        if ($seo_settings['single_url'] == 'Y') {
            $lang_codes[] = Registry::get('settings.Appearance.frontend_default_language');
        } else {
            $lang_codes = array_keys(Languages::getAll());
        }
        foreach ($lang_codes as $lang_code) {
            $seo_name = fn_seo_get_name($object_type, $object_id, '', $params['company_id'], $lang_code);
            fn_create_seo_name($object_id, $object_type, $seo_name, 0, '', $params['company_id'], $lang_code, true);
        }
    }
    if (empty($params['old_id_path'])) {
        return true;
    }
    $condition = fn_get_seo_company_condition('?:seo_names.company_id', '', $params['company_id']);
    // Regenerate siblings' SEO-names
    fn_iterate_through_seo_names('fn_regenerate_seo_name', db_quote("path = ?s AND type IN (?a) ?p", $params['old_id_path'], $params['object_types'], $condition));
    // Regenerate children SEO-names
    fn_iterate_through_seo_names('fn_regenerate_seo_name', db_quote("path LIKE ?l AND type IN (?a) ?p", $params['old_id_path'] . '/%', $params['object_types'], $condition));
    return true;
}
Esempio n. 26
0
 /**
  * Validates and installs package
  *
  * @todo Implement language installer
  * @todo Additional migrations validation
  *
  * @param string $package_id Package id like "core", "access_restrictions", etc
  * @return array($result, $data) Installation result
  */
 public function install($package_id, $request)
 {
     $result = true;
     $logger = Log::instance($package_id);
     $logger->add('');
     $logger->add(str_replace('[package_id]', $package_id, 'Start installation of the "[package_id]" upgrade package'));
     $logger->add('================================================');
     $logger->add('Get all available validators');
     Output::steps(5);
     // Validators, Backups (database/files), Copying Files, Migrations, Languages
     Output::display(__('uc_title_validators'), __('uc_upgrade_progress'), false);
     $validators = $this->getValidators();
     $schema = $this->getSchema($package_id, true);
     $information_schema = $this->getSchema($package_id, false);
     $package_validators = $this->getPackageValidators($package_id, $schema);
     if (!empty($package_validators)) {
         $validators = array_merge($package_validators, $validators);
     }
     foreach ($validators as $validator) {
         $logger->add(str_replace('[validator]', $validator->getName(), 'Execute "[validator]" validator'));
         Output::display(__('uc_execute_validator', array('[validator]' => $validator->getName())), '', false);
         list($result, $data) = $validator->check($schema, $request);
         if (!$result) {
             break;
         }
     }
     if (!$result) {
         $logger->add('Upgrade stopped: Awaiting resolving validation errors: ' . $validator->getName());
         return array($result, array($validator->getName() => $data));
     } else {
         $backup_filename = "upg_{$package_id}_{$information_schema['from_version']}-{$information_schema['to_version']}_" . date('dMY_His', TIME);
         // Prepare restore.php file. Paste necessary data and access information
         $restore_key = $this->prepareRestore($backup_filename . '.zip');
         if (empty($restore_key)) {
             $logger->add('Upgrade stopped: Unable to prepare restore file. restore.php was locally modified/removed or renamed.');
             return array(false, array(__('restore') => __('upgrade_center.unable_to_prepare_restore')));
         }
         $content_path = $this->getPackagesDir() . $package_id . '/content/';
         // Run pre script
         if (!empty($schema['scripts']['pre'])) {
             include_once $content_path . 'scripts/' . $schema['scripts']['pre'];
         }
         $this->closeStore();
         $logger->add('Backup files and Database');
         Output::display(__('backup_data'), '', true);
         $backup_file = DataKeeper::backup(array('pack_name' => $backup_filename, 'compress' => 'zip', 'set_comet_steps' => false, 'move_progress' => false));
         if (empty($backup_file) || !file_exists($backup_file)) {
             $logger->add('Upgrade stopped: Failed to backup DB/Files');
             return array(false, array(__('backup') => __('text_uc_failed_to_backup_tables')));
         }
         // Send mail to admin e-mail with information about backup
         Mailer::sendMail(array('to' => 'company_site_administrator', 'from' => 'default_company_site_administrator', 'data' => array('backup_file' => $backup_file, 'settings_section_url' => fn_url('settings.manage'), 'restore_link' => Registry::get('config.http_location') . '/var/upgrade/restore.php?uak=' . $restore_key), 'tpl' => 'upgrade/backup_info.tpl'), 'A', Registry::get('settings.Appearance.backend_default_language'));
         $logger->add('Copy package files');
         Output::display(__('uc_copy_files'), '', true);
         // Move files from package
         $this->applyPackageFiles($content_path . 'package', $this->config['dir']['root']);
         $this->cleanupOldFiles($schema, $this->config['dir']['root']);
         // Copy files from themes_repository to design folder
         $this->processThemesFiles($schema);
         Output::display(__('uc_run_migrations'), '', true);
         // Run migrations
         if (!empty($schema['migrations'])) {
             $logger->add('Run migrations');
             $minimal_date = 0;
             foreach ($schema['migrations'] as $migration) {
                 preg_match('/^[0-9]+/', $migration, $matches);
                 if (!empty($matches[0])) {
                     $date = $matches[0];
                     if ($date < $minimal_date || empty($minimal_date)) {
                         $minimal_date = $date;
                     }
                 }
             }
             $config = array('migration_dir' => $content_path . 'migrations/', 'package_id' => $package_id);
             Migration::instance($config)->migrate($minimal_date);
         }
         // Install languages
         Output::display(__('uc_install_languages'), '', true);
         if (!empty($schema['languages'])) {
             $logger->add('Install langauges from the upgrade package');
             $avail_languages = Languages::getAvailable('A', true);
             foreach ($avail_languages as $lang_code => $language) {
                 if (in_array($lang_code, $schema['languages'])) {
                     $logger->add(str_replace('[lang_code]', $lang_code, 'Install the \\"[lang_code]\\" language'));
                     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 (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));
                     }
                 }
             }
         }
     }
     // Run post script
     if (!empty($schema['scripts']['post'])) {
         include_once $content_path . 'scripts/' . $schema['scripts']['post'];
     }
     Output::display(__('text_uc_upgrade_completed'), '', true);
     $logger->add('Upgrade completed');
     $this->deletePackage($package_id);
     // Clear obsolete files
     fn_clear_cache();
     fn_rm(Registry::get('config.dir.cache_templates'));
     return array(true, array());
 }
<?php

/***************************************************************************
 *                                                                          *
 *   (c) 2004 Vladimir V. Kalynyak, Alexey V. Vinokurov, Ilya M. Shalnev    *
 *                                                                          *
 * This  is  commercial  software,  only  users  who have purchased a valid *
 * license  and  accept  to the terms of the  License Agreement can install *
 * and use this program.                                                    *
 *                                                                          *
 ****************************************************************************
 * PLEASE READ THE FULL TEXT  OF THE SOFTWARE  LICENSE   AGREEMENT  IN  THE *
 * "copyright.txt" FILE PROVIDED WITH THIS DISTRIBUTION PACKAGE.            *
 ****************************************************************************/
defined('BOOTSTRAP') or die('Access denied');
if ($mode == 'generate_ammo_file') {
    $ammo_file_generator = new \Tygh\Addons\YandexTank\AmmoFileGenerator(Tygh::$app['db'], array_keys(\Tygh\Languages\Languages::getActive()), \Tygh\Registry::get('config.current_host'));
    $ammo_file_generator->generate(\Tygh\Registry::get('config.dir.var') . 'ammo.txt');
}
Esempio n. 28
0
 /**
  * @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 = $this->getLangCodesToReinstallFromContentSchema($package_content_schema);
     } 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' => $lang_code, '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);
 }
Esempio n. 29
0
 protected function installUpgradePackage($package_id, $request)
 {
     $result = true;
     $information_schema = $this->getSchema($package_id, false);
     $logger = Log::instance($package_id);
     $logger->drawHeader()->add(array(sprintf('Starting installation of the "%s" upgrade package', $package_id), sprintf('Upgrading version %s to %s', $information_schema['from_version'], $information_schema['to_version']), sprintf('Running as user "%s"', fn_get_process_owner_name())));
     Output::steps(5);
     // Validators, Backups (database/files), Copying Files, Migrations, Languages
     Output::display(__('uc_title_validators'), __('uc_upgrade_progress'), false);
     $logger->add('Executing pre-upgrade validators');
     $validators = $this->getValidators();
     $schema = $this->getSchema($package_id, true);
     $package_validators = $this->getPackageValidators($package_id, $schema);
     $logger->add(sprintf('Found %u validators at package', sizeof($package_validators)));
     if (!empty($package_validators)) {
         $validators = array_merge($package_validators, $validators);
     }
     foreach ($validators as $validator) {
         $logger->add(sprintf('Executing "%s" validator', $validator->getName()));
         Output::display(__('uc_execute_validator', array('[validator]' => $validator->getName())), '', false);
         list($result, $data) = $validator->check($schema, $request);
         if (!$result) {
             break;
         }
     }
     if (!$result) {
         $logger->add(sprintf('Upgrade stopped: awaiting resolving "%s" validator errors', $validator->getName()));
         return array($result, array($validator->getName() => $data));
     } else {
         $result = self::PACKAGE_INSTALL_RESULT_SUCCESS;
         $backup_filename = "upg_{$package_id}_{$information_schema['from_version']}-{$information_schema['to_version']}_" . date('dMY_His', TIME);
         $logger->add(sprintf('Backup filename is "%s"', $backup_filename));
         // Prepare restore.php file. Paste necessary data and access information
         $restore_preparation_result = $this->prepareRestore($package_id, $schema, $information_schema, $backup_filename . '.zip');
         if (!$restore_preparation_result) {
             $logger->add('Upgrade stopped: unable to prepare restore file.');
             return array(false, array(__('restore') => __('upgrade_center.error_unable_to_prepare_restore')));
         }
         list($restore_key, $restore_file_path, $restore_http_path) = $restore_preparation_result;
         $content_path = $this->getPackagesDir() . $package_id . '/content/';
         // Run pre script
         if (!empty($schema['scripts']['pre'])) {
             $pre_script_file_path = $content_path . 'scripts/' . $schema['scripts']['pre'];
             $logger->add(sprintf('Executing pre-upgrade script "%s"', $pre_script_file_path));
             include_once $pre_script_file_path;
             $logger->add('Pre-upgrade script executed successfully');
         }
         $logger->add('Closing storefront');
         $this->closeStore();
         $logger->add('Backing up files and database');
         Output::display(__('backup_data'), '', true);
         $backup_file = DataKeeper::backup(array('pack_name' => $backup_filename, 'compress' => 'zip', 'set_comet_steps' => false, 'move_progress' => false, 'extra_folders' => array('var/langs')));
         if (empty($backup_file) || !file_exists($backup_file)) {
             $logger->add('Upgrade stopped: failed to backup DB/files');
             return array(false, array(__('backup') => __('text_uc_failed_to_backup_tables')));
         }
         $logger->add(sprintf('Backup created at "%s"', $backup_file));
         // Send mail to admin e-mail with information about backup
         $email_recipients = array();
         $user_data = fn_get_user_short_info($_SESSION['auth']['user_id']);
         if (!empty($user_data['email'])) {
             $email_recipients[] = $user_data['email'];
         }
         $user_is_root_admin = isset($_SESSION['auth']['is_root']) && $_SESSION['auth']['is_root'] == 'Y';
         if (!$user_is_root_admin) {
             $root_admin_id = db_get_field("SELECT user_id FROM ?:users WHERE company_id = 0 AND is_root = 'Y' AND user_type = 'A'");
             $root_admin_data = fn_get_user_short_info($root_admin_id);
             if (!empty($root_admin_data['email'])) {
                 $email_recipients[] = $root_admin_data['email'];
             }
         }
         $logger->add(sprintf('Sending upgrade information e-mail to: %s', implode(', ', $email_recipients)));
         $mail_sent = Mailer::sendMail(array('to' => $email_recipients, 'from' => 'default_company_site_administrator', 'data' => array('backup_file' => $backup_file, 'settings_section_url' => fn_url('settings.manage'), 'restore_link' => "{$restore_http_path}?uak={$restore_key}"), 'tpl' => 'upgrade/backup_info.tpl'), 'A', Registry::get('settings.Appearance.backend_default_language'));
         if ($mail_sent) {
             $logger->add('E-mail was successfully sent');
         } else {
             $logger->add('Failed to send e-mail');
             return array(false, array());
         }
         Output::display(__('uc_copy_files'), '', true);
         // Move files from package
         $logger->add('Copying package files');
         $this->applyPackageFiles($content_path . 'package', $this->config['dir']['root']);
         $logger->add('Deleting files removed at new version');
         $this->cleanupOldFiles($schema, $this->config['dir']['root']);
         // Copy files from themes_repository to design folder
         $logger->add('Processing themes files');
         $this->processThemesFiles($schema);
         Output::display(__('uc_run_migrations'), '', true);
         // Run migrations
         if (empty($schema['migrations'])) {
             $logger->add('No migrations found at package');
         } else {
             $logger->add(sprintf('Executing %u migrations found at package', sizeof($schema['migrations'])));
             $minimal_date = 0;
             foreach ($schema['migrations'] as $migration) {
                 preg_match('/^[0-9]+/', $migration, $matches);
                 if (!empty($matches[0])) {
                     $date = $matches[0];
                     if ($date < $minimal_date || empty($minimal_date)) {
                         $minimal_date = $date;
                     }
                 }
             }
             $config = array('migration_dir' => realpath($content_path . 'migrations/'), 'package_id' => $package_id);
             try {
                 $migration_succeed = Migration::instance($config)->migrate($minimal_date);
             } catch (DatabaseException $e) {
                 // Find out which migration caused an exception using its trace
                 $failed_migration_file = null;
                 // DatabaseException could be thrown as a replacement of original exception,
                 // in this case we should look through original's exception trace
                 $exception_with_trace = $e->getPrevious() ?: $e;
                 foreach ($exception_with_trace->getTrace() as $trace) {
                     if (isset($trace['file']) && strpos($trace['file'], $config['migration_dir']) === 0) {
                         $failed_migration_file = basename($trace['file']);
                         break;
                     }
                 }
                 $this->setNotification('E', __('error'), __('uc_migration_failed', array('[migration]' => $failed_migration_file)));
                 $migration_succeed = false;
                 $logger->add((string) $e);
             }
             if ($migration_succeed) {
                 $logger->add('Migrations were executed successfully');
             } else {
                 $result = self::PACKAGE_INSTALL_RESULT_WITH_ERRORS;
                 $logger->add('Failed to execute migrations');
             }
         }
         // Install languages
         Output::display(__('uc_install_languages'), '', true);
         // 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));
                     }
                 }
             }
         }
     }
     $upgrade_schema = $this->getSchema($package_id);
     // Run post script
     if (!empty($schema['scripts']['post'])) {
         $post_script_file_path = $content_path . 'scripts/' . $schema['scripts']['post'];
         $logger->add(sprintf('Executing post-upgrade script "%s"', $post_script_file_path));
         include_once $post_script_file_path;
         $logger->add('Post-upgrade script executed successfully');
     }
     // Clear obsolete files
     $logger->add('Cleaning cache');
     fn_clear_cache();
     fn_rm(Registry::get('config.dir.cache_templates'));
     // Add information to "Installed upgrades section"
     $logger->add('Saving upgrade information to DB');
     $this->storeInstalledUpgrade($upgrade_schema);
     // Collect statistic data
     $logger->add('Sending statistics');
     Http::get(Registry::get('config.resources.updates_server') . '/index.php?dispatch=product_updates.updated', $this->getStatsData($package_id), array('timeout' => 10));
     $this->onSuccessPackageInstall($package_id, $schema, $information_schema);
     $logger->add('Deleting package contents');
     $this->deletePackage($package_id);
     Output::display(__('text_uc_upgrade_completed'), '', true);
     $logger->add('Upgrade completed!');
     return array($result, array());
 }