/** * @param string $name * @param mixed $value * * @throws ResponseCode * @throws \Exception * * @return array|bool|float|string */ public function validateCondition(string $name, $value) { foreach ($this->validations as $validation) { $success = true; list($condition, $conditionValue) = $validation; $conditionValue = is_array($conditionValue) ? implode(';', $conditionValue) : $conditionValue; switch ($condition) { case 'gte': if ($value < $conditionValue) { $success = false; } break; case 'gt': if ($value <= $conditionValue) { $success = false; } break; case 'lte': if ($value > $conditionValue) { $success = false; } break; case 'lt': if ($value >= $conditionValue) { $success = false; } break; case 'in': $allValues = strpos($this->getType(), '[]') !== false ? $value : [$value]; $conditionValue = is_array($conditionValue) ? $conditionValue : [$conditionValue]; foreach ($allValues as $currentValue) { if (!in_array($currentValue, $conditionValue)) { $success = false; } } break; case 'isip': $isValid = Ip::isValid(); $success = $isValid && $conditionValue == 'true' || !$isValid && $conditionValue == 'false'; break; default: throw new \Exception(sprintf("Invalid condition parameters '%s: %s' for parameter '%s' with value '%s'", $condition, $conditionValue, $name, $value)); break; } if (!$success) { $value = is_array($value) ? json_encode($value) : $value; throw new ResponseCode(sprintf("Invalid conditions for parameter '%s' with value '%s' for condition '%s : %s'", $name, $value, $condition, is_array($conditionValue) ? json_encode($conditionValue) : $conditionValue), 422); } } return $value; }