/** * Loads the configuration and works as singleton therefore called static. The call using the program cache * is 10 times faster then taking from the session. The session is still approx. 30 times faster then using the file. * The db is 10 times slower then the session. * * Performance: * * Fastest is * Program Cache: 1.5974044799805E-5 * Session Cache: 0.00016094612121582 * * First config db load: 0.00052118301391602 * Parsed and in session: 0.001554012298584 * * After install from file: 0.0040450096130371 * Parsed and in session: 0.0051419734954834 * * * Functions tests if already loaded in program cache, session cache, database and at last the file. * * Load the configuration values from the database into a session variable. * This step is done to prevent accessing the database for every configuration variable lookup. * * @author Max Milbers * @param $force boolean Forces the function to load the config from the db */ public static function loadConfig($force = FALSE, $fresh = FALSE) { if ($fresh) { self::$_jpConfig = new VmConfig(); return self::$_jpConfig; } vmSetStartTime('loadConfig'); if (!$force) { if (!empty(self::$_jpConfig) && !empty(self::$_jpConfig->_params)) { return self::$_jpConfig; } } self::$_jpConfig = new VmConfig(); if (!class_exists('VirtueMartModelConfig')) { require VMPATH_ADMIN . '/models/config.php'; } $configTable = VirtueMartModelConfig::checkConfigTableExists(); $app = JFactory::getApplication(); $db = JFactory::getDBO(); self::$installed = true; $install = vRequest::getInt('install', false); $redirected = vRequest::getInt('redirected', false); $link = ''; if (empty($configTable)) { self::$installed = false; $jlang = JFactory::getLanguage(); $selectedLang = $jlang->getTag(); if (empty($selectedLang)) { $selectedLang = $jlang->setLanguage($selectedLang); } $q = 'SELECT `element` FROM `#__extensions` WHERE type = "language" and enabled = "1"'; $db->setQuery($q); $knownLangs = $db->loadColumn(); //vmdebug('Selected language '.$selectedLang.' $knownLangs ',$knownLangs); if ($app->isAdmin() and !in_array($selectedLang, $knownLangs)) { $link = 'index.php?option=com_installer&view=languages'; $msg = 'Install your selected language <b>' . $selectedLang . '</b> first in <a href="' . $link . '">joomla language manager</a>, just select then the component VirtueMart under menu "component", to proceed with the installation '; $app->enqueueMessage($msg); } self::$installed = VirtueMartModelConfig::checkVirtuemartInstalled(); if (!self::$installed) { if (!$redirected and !$install) { $link = 'index.php?option=com_virtuemart&view=updatesmigration&redirected=1'; $msg = ''; if ($app->isSite()) { $link = JURI::root(true) . '/administrator/' . $link; } else { $msg = 'Install Virtuemart first, click on the menu component and select VirtueMart'; } } } } else { $query = ' SELECT `config` FROM `#__virtuemart_configs` WHERE `virtuemart_config_id` = "1";'; $db->setQuery($query); self::$_jpConfig->_raw = $db->loadResult(); //vmTime('time to load config','loadConfig'); } if (empty(self::$_jpConfig->_raw)) { $_value = VirtueMartModelConfig::readConfigFile(); if (!$_value) { vmError('Serious error, config file could not be filled with data'); return FALSE; } $_value = join('|', $_value); self::$_jpConfig->_raw = $_value; self::$_jpConfig->setParams(self::$_jpConfig->_raw); self::$_jpConfig->storeConfig(); } else { self::$_jpConfig->setParams(self::$_jpConfig->_raw); } self::$_secret = JFactory::getConfig()->get('secret'); self::$_jpConfig->_params['sctime'] = microtime(TRUE); self::$_jpConfig->_params['vmlang'] = self::setdbLanguageTag(); vmTime('time to load config', 'loadConfig'); if ($app->isSite()) { // try plugins JPluginHelper::importPlugin('vmuserfield'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('plgVmInitialise', array()); } if (!self::$installed) { $user = JFactory::getUser(); if ($user->authorise('core.admin', 'com_virtuemart') and ($install or $redirected)) { VmConfig::$_jpConfig->set('dangeroustools', 1); } if (!empty($link)) { $app->redirect($link, $msg); } } return self::$_jpConfig; }
/** * Loads the configuration and works as singleton therefore called static. The call using the program cache * is 10 times faster then taking from the session. The session is still approx. 30 times faster then using the file. * The db is 10 times slower then the session. * * Performance: * * Fastest is * Program Cache: 1.5974044799805E-5 * Session Cache: 0.00016094612121582 * * First config db load: 0.00052118301391602 * Parsed and in session: 0.001554012298584 * * After install from file: 0.0040450096130371 * Parsed and in session: 0.0051419734954834 * * * Functions tests if already loaded in program cache, session cache, database and at last the file. * * Load the configuration values from the database into a session variable. * This step is done to prevent accessing the database for every configuration variable lookup. * * @author Max Milbers * @param $force boolean Forces the function to load the config from the db */ public static function loadConfig($force = FALSE) { vmSetStartTime('loadConfig'); if (!$force) { if (!empty(self::$_jpConfig) && !empty(self::$_jpConfig->_params)) { return self::$_jpConfig; } } self::$_jpConfig = new VmConfig(); $db = JFactory::getDBO(); $query = 'SHOW TABLES LIKE "%virtuemart_configs%"'; $db->setQuery($query); $configTable = $db->loadResult(); // self::$_debug = true; if (empty($configTable)) { self::$_jpConfig->installVMconfig(); } $app = JFactory::getApplication(); $install = 'no'; if (empty(self::$_jpConfig->_raw)) { $query = ' SELECT `config` FROM `#__virtuemart_configs` WHERE `virtuemart_config_id` = "1";'; $db->setQuery($query); self::$_jpConfig->_raw = $db->loadResult(); if (empty(self::$_jpConfig->_raw)) { if (self::installVMconfig()) { $install = 'yes'; $db->setQuery($query); self::$_jpConfig->_raw = $db->loadResult(); self::$_jpConfig->_params = NULL; } else { $app->enqueueMessage('Error loading configuration file', 'Error loading configuration file, please contact the storeowner'); } } } $i = 0; $pair = array(); if (!empty(self::$_jpConfig->_raw)) { $config = explode('|', self::$_jpConfig->_raw); foreach ($config as $item) { $item = explode('=', $item); if (!empty($item[1])) { // if($item[0]!=='offline_message' && $item[0]!=='dateformat' ){ if ($item[0] !== 'offline_message') { try { $value = @unserialize($item[1]); if ($value === FALSE) { $app->enqueueMessage('Exception in loadConfig for unserialize ' . $item[0] . ' ' . $item[1]); $uri = JFactory::getURI(); $configlink = $uri->root() . 'administrator/index.php?option=com_virtuemart&view=config'; $app->enqueueMessage('To avoid this message, enter your virtuemart <a href="' . $configlink . '">config</a> and just save it one time'); } else { $pair[$item[0]] = $value; } } catch (Exception $e) { vmdebug('Exception in loadConfig for unserialize ' . $e->getMessage(), $item); } } else { $pair[$item[0]] = unserialize(base64_decode($item[1])); } } else { $pair[$item[0]] = ''; } } // $pair['sctime'] = microtime(true); self::$_jpConfig->_params = $pair; self::$_jpConfig->set('sctime', microtime(TRUE)); self::$_jpConfig->set('vmlang', self::setdbLanguageTag()); self::$_jpConfig->setSession(); vmTime('loadConfig db ' . $install, 'loadConfig'); return self::$_jpConfig; } $app->enqueueMessage('Attention config is empty'); return self::$_jpConfig; }
/** * Loads the configuration and works as singleton therefore called static. The call using the program cache * is 10 times faster then taking from the session. The session is still approx. 30 times faster then using the file. * The db is 10 times slower then the session. * * Performance: * * Fastest is * Program Cache: 1.5974044799805E-5 * Session Cache: 0.00016094612121582 * * First config db load: 0.00052118301391602 * Parsed and in session: 0.001554012298584 * * After install from file: 0.0040450096130371 * Parsed and in session: 0.0051419734954834 * * * Functions tests if alread loaded in program cache, session cache, database and at last the file. * * Load the configuration values from the database into a session variable. * This step is done to prevent accessing the database for every configuration variable lookup. * * @author Max Milbers * @param $force boolean Forces the function to load the config from the db */ public function loadConfig($force = false) { vmSetStartTime('loadConfig'); if (!$force) { if (!empty(self::$_jpConfig) && !empty(self::$_jpConfig->_params)) { // vmTime('loadConfig Program Cache','loadConfig'); return self::$_jpConfig; } /* else { $session = JFactory::getSession(); $vmConfig = $session->get('vmconfig','','vm'); if(!empty($vmConfig)){ $params = unserialize($vmConfig); if(!empty($params)) { //This is our cache valid time, atm I use 5 minutes, that means that for exampel changes at the config //have at least 5 minutes later an effect of a currently logged in user (shopper) // 5 minutes until the config settings takes effect for OTHER users. $app = JFactory::getApplication(); $cacheenabled = $app->getCfg('caching'); $cachetime = $app->getCfg('cachetime'); if(!empty($cacheenabled) and !empty($params['sctime']) and (microtime(true) - $params['sctime'])<$cachetime) { $params['offline_message'] = base64_decode($params['offline_message']); // $params['dateformat'] = base64_decode($params['dateformat']); self::$_jpConfig = new VmConfig(); self::$_jpConfig->_params = $params; self::$_jpConfig->set('vmlang',self::setdbLanguageTag()); vmTime('loadConfig Session','loadConfig'); return self::$_jpConfig; } else { // VmInfo('empty $params->sctime'); } } } } */ } self::$_jpConfig = new VmConfig(); $db = JFactory::getDBO(); $query = 'SHOW TABLES LIKE "%virtuemart_configs%"'; $db->setQuery($query); $configTable = $db->loadResult(); // self::$_debug = true; if (empty($configTable)) { self::$_jpConfig->installVMconfig(); } $install = 'no'; if (empty(self::$_jpConfig->_raw)) { $query = ' SELECT `config` FROM `#__virtuemart_configs` WHERE `virtuemart_config_id` = "1";'; $db->setQuery($query); self::$_jpConfig->_raw = $db->loadResult(); if (empty(self::$_jpConfig->_raw)) { if (self::installVMconfig()) { $install = 'yes'; $db->setQuery($query); self::$_jpConfig->_raw = $db->loadResult(); self::$_jpConfig->_params = null; } else { VmError('Error loading configuration file', 'Error loading configuration file, please contact the storeowner'); } } } $i = 0; $pair = array(); if (!empty(self::$_jpConfig->_raw)) { $config = explode('|', self::$_jpConfig->_raw); foreach ($config as $item) { $item = explode('=', $item); if (!empty($item[1])) { // if($item[0]!=='offline_message' && $item[0]!=='dateformat' ){ if ($item[0] !== 'offline_message') { $pair[$item[0]] = unserialize($item[1]); } else { $pair[$item[0]] = unserialize(base64_decode($item[1])); } } else { $pair[$item[0]] = ''; } } // $pair['sctime'] = microtime(true); self::$_jpConfig->_params = $pair; self::$_jpConfig->set('sctime', microtime(true)); self::$_jpConfig->set('vmlang', self::setdbLanguageTag()); self::$_jpConfig->setSession(); vmTime('loadConfig db ' . $install, 'loadConfig'); return self::$_jpConfig; } $app = JFactory::getApplication(); $app->enqueueMessage('Attention config is empty'); return 'Was not able to create config'; }
/** * Loads the configuration and works as singleton therefore called static. The call using the program cache * is 10 times faster then taking from the session. The session is still approx. 30 times faster then using the file. * The db is 10 times slower then the session. * * Performance: * * Fastest is * Program Cache: 1.5974044799805E-5 * Session Cache: 0.00016094612121582 * * First config db load: 0.00052118301391602 * Parsed and in session: 0.001554012298584 * * After install from file: 0.0040450096130371 * Parsed and in session: 0.0051419734954834 * * * Functions tests if already loaded in program cache, session cache, database and at last the file. * * Load the configuration values from the database into a session variable. * This step is done to prevent accessing the database for every configuration variable lookup. * * @author Max Milbers * @param $force boolean Forces the function to load the config from the db */ public static function loadConfig($force = FALSE, $fresh = FALSE) { if ($fresh) { return self::$_jpConfig = new VmConfig(); } vmSetStartTime('loadConfig'); if (!$force) { if (!empty(self::$_jpConfig) && !empty(self::$_jpConfig->_params)) { return self::$_jpConfig; } } self::$_jpConfig = new VmConfig(); if (!class_exists('VirtueMartModelConfig')) { require JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'config.php'; } $configTable = VirtueMartModelConfig::checkConfigTableExists(); $db = JFactory::getDBO(); $app = JFactory::getApplication(); $freshInstall = vRequest::getInt('install', false); if (empty($configTable) or $freshInstall) { if (!$freshInstall) { $installed = VirtueMartModelConfig::checkVirtuemartInstalled(); if (!$installed) { $jlang = JFactory::getLanguage(); $selectedLang = $jlang->getTag(); if (empty($selectedLang)) { $selectedLang = $jlang->setLanguage($selectedLang); } $msg = ''; $q = 'SELECT `element` FROM `#__extensions` WHERE type = "language" and enabled = "1"'; $db->setQuery($q); $knownLangs = $db->loadColumn(); //vmdebug('Selected language '.$selectedLang.' $knownLangs ',$knownLangs); if ($app->isAdmin() and !in_array($selectedLang, $knownLangs)) { $link = 'index.php?option=com_installer&view=languages'; $msg = 'Install your selected language <b>' . $selectedLang . '</b> first in <a href="' . $link . '">joomla language manager</a>, just select then the component VirtueMart under menu "component", to proceed with the installation '; $app->enqueueMessage($msg); } //else { if ($app->isSite()) { $link = 'index.php?option=com_virtuemart'; } else { $link = 'index.php?option=com_virtuemart&view=updatesmigration&install=1'; $msg = 'Install Virtuemart first, click on the menu component and select VirtueMart'; } if ($app->isSite()) { $link = JURI::root(true) . '/administrator/' . $link; } $app->redirect($link, $msg); //} } if ($installed) { self::$_jpConfig->installVMconfig(); } } else { self::$_jpConfig->installVMconfig($freshInstall); } } $install = 'no'; if (empty(self::$_jpConfig->_raw)) { $query = ' SELECT `config` FROM `#__virtuemart_configs` WHERE `virtuemart_config_id` = "1";'; $db->setQuery($query); self::$_jpConfig->_raw = $db->loadResult(); if (empty(self::$_jpConfig->_raw)) { if (self::installVMconfig($freshInstall)) { $install = 'yes'; $db->setQuery($query); self::$_jpConfig->_raw = $db->loadResult(); self::$_jpConfig->_params = NULL; } else { $app->enqueueMessage('Error loading configuration file', 'Error loading configuration file, please contact the storeowner'); } } } $i = 0; $pair = array(); if (!empty(self::$_jpConfig->_raw)) { $config = explode('|', self::$_jpConfig->_raw); foreach ($config as $item) { $item = explode('=', $item); if (!empty($item[1])) { // if($item[0]!=='offline_message' && $item[0]!=='dateformat' ){ if ($item[0] !== 'offline_message') { try { $value = @unserialize($item[1]); if ($value === FALSE) { $app->enqueueMessage('Exception in loadConfig for unserialize ' . $item[0] . ' ' . $item[1]); $uri = JFactory::getURI(); $configlink = $uri->root() . 'administrator/index.php?option=com_virtuemart&view=config'; $app->enqueueMessage('To avoid this message, enter your virtuemart <a href="' . $configlink . '">config</a> and just save it one time'); } else { $pair[$item[0]] = $value; } } catch (Exception $e) { vmdebug('Exception in loadConfig for unserialize ' . $e->getMessage(), $item); } } else { $pair[$item[0]] = unserialize(base64_decode($item[1])); } } else { $pair[$item[0]] = ''; } } // $pair['sctime'] = microtime(true); self::$_jpConfig->_params = $pair; self::$_jpConfig->_params['sctime'] = microtime(TRUE); //self::$_jpConfig->set('sctime',microtime(TRUE)); //self::setdbLanguageTag(); self::$_jpConfig->_params['vmlang'] = self::setdbLanguageTag(); vmTime('loadConfig db ' . $install, 'loadConfig'); // try plugins if ($app->isSite()) { if (!class_exists('VmImage')) { require JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'image.php'; } JPluginHelper::importPlugin('vmuserfield'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('plgVmInitialise', array()); } return self::$_jpConfig; } $app->enqueueMessage('Attention config is empty'); return self::$_jpConfig; }
/** * Loads the configuration and works as singleton therefore called static. The call using the program cache * is 10 times faster then taking from the session. The session is still approx. 30 times faster then using the file. * The db is 10 times slower then the session. * * Performance: * * Fastest is * Program Cache: 1.5974044799805E-5 * Session Cache: 0.00016094612121582 * * First config db load: 0.00052118301391602 * Parsed and in session: 0.001554012298584 * * After install from file: 0.0040450096130371 * Parsed and in session: 0.0051419734954834 * * * Functions tests if already loaded in program cache, session cache, database and at last the file. * * Load the configuration values from the database into a session variable. * This step is done to prevent accessing the database for every configuration variable lookup. * * @author Max Milbers * @param $force boolean Forces the function to load the config from the db * Note Patrick Kohl STUDIO42 * added prefix from joomla in like to prevent getting false config for multiple use of joomla in same database */ public static function loadConfig($force = FALSE, $fresh = FALSE) { if ($fresh) { return self::$_jpConfig = new VmConfig(); } vmSetStartTime('loadConfig'); if (!$force) { if (!empty(self::$_jpConfig) && !empty(self::$_jpConfig->_params)) { return self::$_jpConfig; } } self::$_jpConfig = new VmConfig(); $db = JFactory::getDBO(); $prefix = $db->getPrefix(); $query = 'SHOW TABLES LIKE "' . $prefix . 'virtuemart_configs"'; $db->setQuery($query); $configTable = $db->loadResult(); // self::$_debug = true; if (empty($configTable)) { self::$_jpConfig->installVMconfig(); } $app = JFactory::getApplication(); $install = 'no'; if (empty(self::$_jpConfig->_raw)) { $query = ' SELECT `config` FROM `#__virtuemart_configs` WHERE `virtuemart_config_id` = "1";'; $db->setQuery($query); self::$_jpConfig->_raw = json_decode($db->loadResult(), TRUE); if (empty(self::$_jpConfig->_raw)) { if (self::installVMconfig()) { $install = 'yes'; $db->setQuery($query); self::$_jpConfig->_raw = json_decode($db->loadResult(), TRUE); self::$_jpConfig->_params =& self::$_jpConfig->_raw; } else { $app->enqueueMessage('Error loading configuration file', 'Error loading configuration file, please contact the storeowner'); } } } $i = 0; $pair = array(); if (!empty(self::$_jpConfig->_raw)) { // $pair['sctime'] = microtime(true); self::$_jpConfig->_params =& self::$_jpConfig->_raw; self::$_jpConfig->set('sctime', microtime(TRUE)); self::$_jpConfig->set('vmlang', self::setdbLanguageTag()); self::$_jpConfig->setSession(); vmTime('loadConfig db ' . $install, 'loadConfig'); return self::$_jpConfig; } $app->enqueueMessage('Attention config is empty'); return self::$_jpConfig; }