Sindbad~EG File Manager
<?php
namespace FluentForm\App\Services;
use FluentForm\App\Helpers\Str;
use FluentForm\Framework\Helpers\ArrayHelper as Arr;
class ConditionAssesor
{
public static function evaluate(&$field, &$inputs)
{
$status = Arr::get($field, 'conditionals.status');
$conditionals = $status ? Arr::get($field, 'conditionals.conditions') : false;
$hasConditionMet = true;
if ($conditionals) {
$toMatch = Arr::get($field, 'conditionals.type');
foreach ($conditionals as $conditional) {
$hasConditionMet = static::assess($conditional, $inputs);
if($hasConditionMet && $toMatch == 'any') {
return true;
}
if ($toMatch === 'all' && !$hasConditionMet) {
return false;
}
}
}
return $hasConditionMet;
}
public static function assess(&$conditional, &$inputs)
{
if ($conditional['field']) {
$inputValue = Arr::get($inputs, $conditional['field']);
switch ($conditional['operator']) {
case '=':
if(is_array($inputValue)) {
return in_array($conditional['value'], $inputValue);
}
return $inputValue == $conditional['value'];
break;
case '!=':
if(is_array($inputValue)) {
return !in_array($conditional['value'], $inputValue);
}
return $inputValue != $conditional['value'];
break;
case '>':
return $inputValue > $conditional['value'];
break;
case '<':
return $inputValue < $conditional['value'];
break;
case '>=':
return $inputValue >= $conditional['value'];
break;
case '<=':
return $inputValue <= $conditional['value'];
break;
case 'startsWith':
return Str::startsWith($inputValue, $conditional['value']);
break;
case 'endsWith':
return Str::endsWith($inputValue, $conditional['value']);
break;
case 'contains':
return Str::contains($inputValue, $conditional['value']);
break;
case 'doNotContains':
return !Str::contains($inputValue, $conditional['value']);
break;
case 'length_equal':
if(is_array($inputValue)) {
return count($inputValue) == $conditional['value'];
}
$inputValue = strval($inputValue);
return strlen($inputValue) == $conditional['value'];
break;
case 'length_less_than':
if(is_array($inputValue)) {
return count($inputValue) < $conditional['value'];
}
$inputValue = strval($inputValue);
return strlen($inputValue) < $conditional['value'];
break;
case 'length_greater_than':
if(is_array($inputValue)) {
return count($inputValue) > $conditional['value'];
}
$inputValue = strval($inputValue);
return strlen($inputValue) > $conditional['value'];
break;
case 'test_regex':
if(is_array($inputValue)) {
$inputValue = implode(' ', $inputValue);
}
$result = preg_match('/'.$conditional['value'].'/', $inputValue);
return !!$result;
break;
}
}
return false;
}
}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists