/**
  * {@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');
     }
 }
Esempio n. 2
0
 /**
  * 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);
         }
     }
 }