/** * {@inheritDoc} */ public function check($value = null, $schema = null, $path = null, $i = null) { $type = isset($schema->type) ? $schema->type : null; $isValid = true; if (is_array($type)) { // @TODO refactor $validatedOneType = false; $errors = array(); foreach ($type as $tp) { $validator = new static($this->checkMode); $subSchema = new \stdClass(); $subSchema->type = $tp; $validator->check($value, $subSchema, $path, null); $error = $validator->getErrors(); if (!count($error)) { $validatedOneType = true; break; } $errors = $error; } if (!$validatedOneType) { $this->addErrors($errors); return; } } elseif (is_object($type)) { $this->checkUndefined($value, $type, $path); } else { $isValid = $this->validateType($value, $type); } if ($isValid === false) { if (!isset(self::$wording[$type])) { throw new StandardUnexpectedValueException(sprintf("No wording for %s available, expected wordings are: [%s]", var_export($type, true), implode(', ', array_filter(self::$wording)))); } $errorMsg = I18n::t("constraints.type.required", ['actual' => ucwords(gettype($value)), 'required' => self::$wording[$type]]); $this->addError($path, $errorMsg, 'type'); } }
/** * Vérifie que l'utilisateur a les droits de faire l'ensemble d'action décrits dans $input * Agit comme une série de CommonDBTM::check en faisant varier l'objet sur lequel elle s'applique et le droit demandé * * @param array $input * tableau d'actions (typiquement POST après le formulaire) */ public static final function checkAll($input) { $instance = new static(); if (isset($input['rules'])) { foreach ($input['rules'] as $id => $rule) { if (preg_match('@' . self::NEW_ID_TAG . '(\\d*)@', $id)) { $instance->check(-1, CREATE, $rule); } else { $instance->check($id, UPDATE); } } } if (isset($input['delete_rules'])) { foreach ($input['delete_rules'] as $id) { $instance->check($id, DELETE); } } }