Esempio n. 1
0
 public static function restoreSettings()
 {
     General::connectToOriginalDB(array('table_prefix' => General::formatPrefix()));
     $was_settings_backed_up = db_get_field("SHOW TABLES LIKE '?:settings_objects_upg'");
     if (!empty($was_settings_backed_up)) {
         $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);
                 }
                 fn_update_addon_settings($addon_scheme, false);
                 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);
                 }
             }
         }
         $settings = db_get_array('SELECT * FROM ?:settings_objects_upg');
         foreach ($settings as $setting) {
             Settings::instance()->updateValue($setting['name'], $setting['value'], $setting['section_name'], false, null, false);
         }
         db_query('DROP TABLE ?:settings_objects_upg');
         $was_company_settings_backed_up = db_get_field("SHOW TABLES LIKE '?:settings_vendor_values_upg'");
         if (!empty($was_company_settings_backed_up)) {
             $company_settings = db_get_array('SELECT * FROM ?:settings_vendor_values_upg');
             foreach ($company_settings as $setting) {
                 Settings::instance($setting['company_id'])->updateValue($setting['name'], $setting['value'], $setting['section_name'], false, $setting['company_id'], false);
             }
             db_query('DROP TABLE ?:settings_vendor_values_upg');
         }
     }
     return true;
 }
Esempio n. 2
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' => $translation['description']));
        }
        if ($original = $addon_scheme->getOriginals()) {
            db_query("REPLACE INTO ?:original_values ?e", array('msgctxt' => 'Addon:' . $addon, 'msgid' => $original['name']));
            db_query("REPLACE INTO ?:original_values ?e", array('msgctxt' => 'AddonDescription:' . $addon, 'msgid' => $original['description']));
        }
        // 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. 3
0
 public static function restoreSettings()
 {
     General::connectToOriginalDB(array('table_prefix' => General::formatPrefix()));
     $was_settings_backed_up = db_get_field("SHOW TABLES LIKE '?:settings_objects_upg'");
     //Should be here because we use default functions to restore addon settings to upgrade old versions.
     db_query("CREATE TABLE IF NOT EXISTS ?:original_values (`msgctxt` varchar(128) NOT NULL DEFAULT '',  `msgid` text,  PRIMARY KEY (`msgctxt`)) ENGINE=MyISAM DEFAULT CHARSET=utf8");
     if (!empty($was_settings_backed_up)) {
         $addons = self::getInstalledAddons();
         foreach ($addons as $addon) {
             $addon_scheme = AddonSchemesManager::getScheme($addon);
             if (!empty($addon_scheme)) {
                 fn_update_addon_settings($addon_scheme, false);
             }
         }
         $settings = db_get_array('SELECT * FROM ?:settings_objects_upg');
         foreach ($settings as $setting) {
             Settings::instance()->updateValue($setting['name'], $setting['value'], $setting['section_name'], false, null, false);
         }
         db_query('DROP TABLE ?:settings_objects_upg');
         $was_company_settings_backed_up = db_get_field("SHOW TABLES LIKE '?:settings_vendor_values_upg'");
         if (!empty($was_company_settings_backed_up)) {
             $company_settings = db_get_array('SELECT * FROM ?:settings_vendor_values_upg');
             foreach ($company_settings as $setting) {
                 Settings::instance($setting['company_id'])->updateValue($setting['name'], $setting['value'], $setting['section_name'], false, $setting['company_id'], false);
             }
             db_query('DROP TABLE ?:settings_vendor_values_upg');
         }
     }
     return true;
 }