/** * Constructor. * * @since 0.4.6 * * @param IParamDefinition|Parameter|array $param * @param mixed $currentValue */ public function __construct($param, $currentValue = false) { if ($param instanceof IParamDefinition) { $this->param = $param; } elseif (is_array($param)) { $this->param = ParamDefinition::newFromArray($param); } else { // Compat code, will go in 0.7 $this->param = ParamDefinition::newFromParameter($param); } $this->currentValue = $currentValue; $this->inputName = $param->getName(); $this->inputClass = ''; }
/** * Does the actual parameter processing. * * @since 0.4 */ protected function doParamProcessing() { $this->getParamsToProcess(array(), $this->paramDefinitions); while ($this->paramsToHandle !== array()) { $paramName = array_shift($this->paramsToHandle); $definition = $this->paramDefinitions[$paramName]; // Compat code for 0.4.x style definitions, will be removed in 0.7. if ($definition instanceof Parameter) { $definition = ParamDefinition::newFromParameter($definition); } $param = new Param($definition); $setUserValue = $this->attemptToSetUserValue($param); // If the parameter is required but not provided, register a fatal error and stop processing. if (!$setUserValue && $param->isRequired()) { $this->registerNewError(wfMsgExt('validator_error_required_missing', 'parsemag', $paramName), array($paramName, 'missing'), ValidationError::SEVERITY_FATAL); break; } else { $this->params[$param->getName()] = $param; $param->validate($this->paramDefinitions, $this->params, $this->options); foreach ($param->getErrors() as $error) { $this->registerError($error); } if ($param->hasFatalError()) { // If there was a fatal error, and the parameter is required, stop processing. break; } $initialSet = $this->paramDefinitions; $param->format($this->paramDefinitions, $this->params, $this->options); $this->getParamsToProcess($initialSet, $this->paramDefinitions); } } }
/** * Applies the parameter manipulations. * @see IParam::format * * @since 0.5 * * @param $definitions array of IParamDefinition * @param $params array of IParam * @param ValidatorOptions $options */ public function format(array &$definitions, array $params, ValidatorOptions $options) { if ($this->definition->shouldManipulateDefault() || !$this->wasSetToDefault()) { $this->definition->format($this, $definitions, $params); $definitions = ParamDefinition::getCleanDefinitions($definitions); // Compat code. $manipulations = array(); foreach ($this->definition->getManipulations() as $manipulation) { if (!$manipulation instanceof ParamManipulationInteger && !$manipulation instanceof ParamManipulationFloat && !$manipulation instanceof ParamManipulationString) { $manipulations[] = $manipulation; } } // This whole block is compat code, to be removed in 0.7. if ($manipulations !== array()) { $parameter = $this->toParameter(); $parameters = array(); foreach ($params as $param) { $parameters[$param->getName()] = $param->toParameter(); } foreach ($definitions as $definition) { if (!array_key_exists($definition->getName(), $parameters)) { $parameters[$definition->getName()] = $definition->toParameter(); } } foreach ($manipulations as $manipulation) { $manipulation->manipulate($parameter, $parameters); } $this->setValue($parameter->getValue()); foreach ($parameters as $parameterObject) { if (!array_key_exists($parameterObject->getName(), $params)) { $definitions[$parameterObject->getName()] = ParamDefinition::newFromParameter($parameterObject); } } } } }
/** * Returns a cleaned version of the list of parameter definitions. * This includes having converted all supported definition types to * ParamDefinition classes and having all keys set to the names of the * corresponding parameters. * * * @since 0.5 * * @param $definitions array of IParamDefinition * * @return array * @throws MWException */ public static function getCleanDefinitions(array $definitions) { $cleanList = array(); foreach ($definitions as $key => $definition) { if (is_array($definition)) { if (!array_key_exists('name', $definition) && is_string($key)) { $definition['name'] = $key; } $definition = ParamDefinition::newFromArray($definition); } elseif ($definition instanceof Parameter) { // This if for backwards compat, will be removed in 0.7. $definition = ParamDefinition::newFromParameter($definition); } if (!$definition instanceof ParamDefinition) { throw new MWException('$definition not an instance of ParamDefinition'); } $cleanList[$definition->getName()] = $definition; } return $cleanList; }