public static function _ConfigSubmit(Form $form) { $elements = $form->getElements(); $updatedcount = 0; foreach ($elements as $e) { /** @var FormElement $e */ // I'm only interested in config options. if (strpos($e->get('name'), 'config[') === false) continue; // Make the name usable a little. $n = $e->get('name'); if (($pos = strpos($n, '[]')) !== false) $n = substr($n, 0, $pos); $n = substr($n, 7, -1); // And get the config object $c = new ConfigModel($n); $val = null; switch ($c->get('type')) { case 'string': case 'text': case 'enum': case 'boolean': case 'int': $val = $e->get('value'); break; case 'set': $val = implode('|', $e->get('value')); break; default: throw new Exception('Unsupported configuration type for ' . $c->get('key') . ', [' . $c->get('type') . ']'); break; } // This is required because enterprise multisite mode has a different location for site configs. if(Core::IsComponentAvailable('multisite') && MultiSiteHelper::GetCurrentSiteID()){ $siteconfig = MultiSiteConfigModel::Construct($c->get('key'), MultiSiteHelper::GetCurrentSiteID()); $siteconfig->setValue($val); if($siteconfig->save()) ++$updatedcount; } else{ $c->setValue($val); if ($c->save()) ++$updatedcount; } } \Core\set_message('t:MESSAGE_SUCCESS_UPDATED_N_CONFIGURATION', $updatedcount); return true; }
/** * Set a configuration value. * * This CANNOT create new configuration keys! * Please use GetConfig() for that. * * @param string $key The key to set * @param string $value The value to set * @return bool True/False on success or failure. */ public static function Set($key, $value) { $instance = self::GetInstance(); if(!isset($instance->_cacheFromDB[$key])){ return false; } /** @var $config ConfigModel */ $config = $instance->_cacheFromDB[$key]; // This is required because enterprise multisite mode has a different location for site configs. // Instead of having this outside the code, it's here for now at least. // This is a trade-off between standard procedure and convenience. if( $config->get('overrideable') == 1 && Core::IsComponentAvailable('multisite') && MultiSiteHelper::GetCurrentSiteID() ){ $siteconfig = MultiSiteConfigModel::Construct($key, MultiSiteHelper::GetCurrentSiteID()); $siteconfig->set('value', $value); $siteconfig->save(); $instance->_overrides[$key] = $value; } else{ $config->setValue($value); $config->save(); } return true; }