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; }
/** * Updates addon settings in database * * @param XmlScheme $addon_scheme Data from addon.xml file * @return bool True in success, false otherwise */ function fn_update_addon_settings($addon_scheme, $execute_functions = true) { $tabs = $addon_scheme->getSections(); // If isset section settings in xml data and that addon settings is not exists if (!empty($tabs)) { Registry::set('runtime.database.skip_errors', true); // Create root settings section $addon_section_id = Settings::instance()->updateSection(array('parent_id' => 0, 'edition_type' => $addon_scheme->getEditionType(), 'name' => $addon_scheme->getId(), 'type' => Settings::ADDON_SECTION)); foreach ($tabs as $tab_index => $tab) { // Add addon tab as setting section tab $section_tab_id = Settings::instance()->updateSection(array('parent_id' => $addon_section_id, 'edition_type' => $tab['edition_type'], 'name' => $tab['id'], 'position' => $tab_index * 10, 'type' => isset($tab['separate']) ? Settings::SEPARATE_TAB_SECTION : Settings::TAB_SECTION)); // Import translations for tab if (!empty($section_tab_id)) { fn_update_addon_settings_descriptions($section_tab_id, Settings::SECTION_DESCRIPTION, $tab['translations']); $settings = $addon_scheme->getSettings($tab['id']); foreach ($settings as $k => $setting) { if (!empty($setting['id'])) { if (!empty($setting['parent_id'])) { $setting['parent_id'] = Settings::instance()->getId($setting['parent_id'], $addon_scheme->getId()); } $setting_id = Settings::instance()->update(array('name' => $setting['id'], 'section_id' => $addon_section_id, 'section_tab_id' => $section_tab_id, 'type' => $setting['type'], 'position' => isset($setting['position']) ? $setting['position'] : $k * 10, 'edition_type' => $setting['edition_type'], 'is_global' => 'N', 'handler' => $setting['handler'], 'parent_id' => intval($setting['parent_id']))); if (!empty($setting_id)) { Settings::instance()->updateValueById($setting_id, $setting['default_value'], null, $execute_functions); 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 = Settings::instance()->updateVariant(array('object_id' => $setting_id, 'name' => $variant['id'], 'position' => isset($variant['position']) ? $variant['position'] : $variant_k * 10)); if (!empty($variant_id)) { fn_update_addon_settings_descriptions($variant_id, Settings::VARIANT_DESCRIPTION, $variant['translations']); } } } } } } } } Registry::set('runtime.database.skip_errors', false); $errors = Registry::get('runtime.database.errors'); if (!empty($errors)) { $error_text = ''; foreach ($errors as $error) { $error_text .= '<br/>' . $error['message'] . ': <code>' . $error['query'] . '</code>'; } fn_set_notification('E', __('addon_sql_error'), $error_text); return false; } } return true; }
function fn_uc_update_addon_settings($addon_scheme) { $tabs = $addon_scheme->getSections(); if (!empty($tabs)) { $addon_section_id = Settings::instance()->updateSection(array('parent_id' => 0, 'edition_type' => $addon_scheme->getEditionType(), 'name' => $addon_scheme->getId(), 'type' => Settings::ADDON_SECTION)); foreach ($tabs as $tab_index => $tab) { $section_tab_id = Settings::instance()->updateSection(array('parent_id' => $addon_section_id, 'edition_type' => $tab['edition_type'], 'name' => $tab['id'], 'position' => $tab_index * 10, 'type' => isset($tab['separate']) ? Settings::SEPARATE_TAB_SECTION : Settings::TAB_SECTION)); if (!empty($section_tab_id)) { fn_update_addon_settings_descriptions($section_tab_id, Settings::SECTION_DESCRIPTION, $tab['translations']); $settings = $addon_scheme->getSettings($tab['id']); foreach ($settings as $k => $setting) { if (!empty($setting['id'])) { if (!empty($setting['parent_id'])) { $setting['parent_id'] = Settings::instance()->getId($setting['parent_id'], $addon_scheme->getId()); } $setting_id = Settings::instance()->update(array('name' => $setting['id'], 'section_id' => $addon_section_id, 'section_tab_id' => $section_tab_id, 'type' => $setting['type'], 'position' => isset($setting['position']) ? $setting['position'] : $k * 10, 'edition_type' => $setting['edition_type'], 'is_global' => 'N', 'handler' => $setting['handler'], 'parent_id' => intval($setting['parent_id']))); if (!empty($setting_id)) { fn_uc_update_setting_value($setting['id'], $setting['default_value'], $tab['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 = Settings::instance()->updateVariant(array('object_id' => $setting_id, 'name' => $variant['id'], 'position' => isset($variant['position']) ? $variant['position'] : $variant_k * 10)); if (!empty($variant_id)) { fn_update_addon_settings_descriptions($variant_id, Settings::VARIANT_DESCRIPTION, $variant['translations']); } } } } } } } } } }