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; }
/** * 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; } }
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; }