Beispiel #1
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;
 }
/**
* 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']);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}