84 return $compositeBuilder->create($nodes);
97 $this->expressions = $manufacturer->match($this->condition);
110 $this->operators = $manufacturer->match($this->condition);
123 $this->condition = preg_replace($manufacturer->getPattern(),
'n', $this->condition);
125 $this->condition = preg_replace($manufacturer->getPattern(),
'o', $this->condition);
126 $this->condition = preg_replace(
"/no/",
"n o", $this->condition);
127 $this->condition = preg_replace(
"/on/",
"o n", $this->condition);
129 for ($i = 0; $i < strlen($this->condition); $i++) {
138 $num_brackets_open = substr_count($this->condition,
"(");
139 $num_brackets_close = substr_count($this->condition,
")");
141 if ($num_brackets_open > $num_brackets_close) {
144 if ($num_brackets_open < $num_brackets_close) {
173 $expected = [
"n",
"(",
"!"];
177 while ($this->index < strlen($this->condition)) {
179 if (trim($this->condition[$this->index]) !=
"" && in_array($this->condition[$this->index], $expected)) {
180 if ($this->condition[$this->index] ==
')') {
182 } elseif ($this->condition[$this->index] ==
'n') {
183 $group[] = [
'type' =>
'expression',
'value' => array_shift($this->expressions)];
184 $expected = [
"o",
")"];
185 } elseif ($this->condition[$this->index] ==
'o') {
186 $group[] = [
'type' =>
'operator',
'value' => array_shift($this->operators)];
187 $expected = [
"n",
"(",
"!"];
188 } elseif ($this->condition[$this->index] ==
'(') {
191 $group[] = [
'type' =>
"group",
"negated" => $negation,
'nodes' => $elements];
193 $expected = [
"o",
")"];
194 } elseif ($this->condition[$this->index] ==
"!") {
197 } elseif (trim($this->condition[$this->index]) !=
"") {
205 return [
'type' =>
'group',
"negated" => $negation,
'nodes' => $group];
221 $start = strpos($this->condition,
"n",
$index + 1);
224 if ($start !==
false) {
225 $end = strpos($this->condition,
"n", $start + 1);
228 if ($start !==
false && $end !==
false) {
229 $this->condition = substr_replace($this->condition,
"(n o n)", $start, $end - $start + 1);
240 $next_bracket = strpos($this->condition,
"(",
$index + 1);
241 $next_expression = strpos($this->condition,
"n",
$index + 1);
243 return $next_bracket !==
false && $next_bracket < $next_expression;
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
createNodeArray()
Creates an array representing all Nodes in a condition based on the fetched expressions and operators...
cannonicalizeCondition()
Cannonicalize the condition into a more general form.
fetchExpressions()
Matches all expressions in the current condition and assign these to the class attribute ConditionPar...
isNegationSurroundedByBrackets($index)
fetchOperators()
Matches all operators in the current condition and assign these to the class attribute ConditionParse...
parse($condition)
Parses the delivered condition and creates a composite tree Structure.
surroundNegationExpression($index)
static _getInstance()
Get an Instance of ExpressionManufacturer.
static _getInstance()
Get an Instance of OperationManufacturer.
$a
thx to https://mlocati.github.io/php-cs-fixer-configurator for the examples