/** * saves the settings to the database * @param array $aData an associative array of fieldnames and values */ public function savePreferences($aData) { if (wfReadOnly()) { $url = SpecialPage::getTitleFor('WikiAdmin')->getFullURL(array('mode' => 'Preferences', 'success' => 0)); $this->getOutput()->redirect($url); return false; } $vars = BsConfig::getRegisteredVars(); foreach ($vars as $var) { $options = $var->getOptions(); if (!($options & (BsConfig::LEVEL_PUBLIC | BsConfig::LEVEL_USER))) { continue; } if ($options & BsConfig::NO_DEFAULT) { continue; } $name = $this->generateFieldId($var); $value = isset($aData[$name]) ? $aData[$name] : NULL; if ($var->getOptions() & BsConfig::TYPE_BOOL && $value == NULL) { BsConfig::set($var->getKey(), 0, true); } $bReturn = true; wfRunHooks('BSWikiAdminPreferencesBeforeSetVariable', array($this, &$var, &$value, &$bReturn)); if ($value !== null && $bReturn !== false) { BsConfig::set($var->getKey(), $value, true); } } BsConfig::saveSettings(); $url = SpecialPage::getTitleFor('WikiAdmin')->getFullURL(array('mode' => 'Preferences', 'success' => 1)); $this->getOutput()->redirect($url); return false; }
/** * Hook handler for UserSaveOptions * @param User $user User whose options are being modified. * @param Array &$options Options array * @return true always true to keep hook alive */ public function onUserSaveOptions($user, &$options) { BsConfig::loadSettings(); $oCurrentTitle = $this->getTitle(); //May return null in CLI if ($oCurrentTitle instanceof Title && $oCurrentTitle->isSpecialPage()) { $bDeliverUserSettings = true; } else { $bDeliverUserSettings = false; } $bOrigDeliver = BsConfig::deliverUsersSettings($bDeliverUserSettings); $aRegisteredVariables = BsConfig::getRegisteredVars(); $aSortedVariables = array(); foreach ($aRegisteredVariables as $oVariable) { $iOptions = $oVariable->getOptions(); if (!($iOptions & BsConfig::LEVEL_USER)) { continue; } if ($bDeliverUserSettings === false) { if ($iOptions & BsConfig::NO_DEFAULT) { continue; } } $sAdapterName = strtoupper($oVariable->getAdapter()); $sExtensionName = $oVariable->getExtension(); if (empty($sExtensionName)) { $sExtensionName = 'BASE'; } $aSortedVariables[$sAdapterName][$sExtensionName][] = $oVariable; } foreach ($aSortedVariables as $sAdapterName => $aExtensions) { if (!count($aExtensions)) { continue; } foreach ($aExtensions as $sExtensionName => $aSettings) { // if continue, then $oAdapterSetView is not added to output if (!count($aSettings)) { continue; } foreach ($aSettings as $oVariable) { //Avoid "undefined index" notices and weird NULL values in settings $value = $oVariable->getValue(); if (isset($options[$oVariable->generateFieldId()])) { //Set but no bool $value = $options[$oVariable->generateFieldId()]; } if (isset($options[$oVariable->getKey()])) { //Set but no bool $value = $options[$oVariable->getKey()]; } $options[$oVariable->getKey()] = BsStringHelper::isSerialized($value) ? $value : serialize($value); unset($options[$oVariable->generateFieldId()]); } } } BsConfig::deliverUsersSettings($bOrigDeliver); return true; }