/** * @param FieldConfigInterface $config * @param $comparisonFunc * @param ValuesBag $valuesBag */ private function optimizeValuesInValuesBag(FieldConfigInterface $config, $comparisonFunc, ValuesBag $valuesBag) { if ($valuesBag->hasSimpleValues()) { $values = $valuesBag->getSimpleValues(); uasort($values, $comparisonFunc); $this->listToRanges($values, $valuesBag, $config); } if ($valuesBag->hasExcludedSimpleValues()) { $excludes = $valuesBag->getExcludedSimpleValues(); uasort($excludes, $comparisonFunc); $this->listToRanges($excludes, $valuesBag, $config, true); } }
/** * @param ValuesBag $valuesBag * @param \DOMNode $parent * * @return \DOMNode */ private function exportValuesToNode(ValuesBag $valuesBag, \DOMNode $parent, FieldConfigInterface $field) { if ($valuesBag->hasSimpleValues()) { $valuesNode = $this->document->createElement('single-values'); foreach ($valuesBag->getSimpleValues() as $value) { $element = $this->document->createElement('value'); $element->appendChild($this->document->createTextNode($this->normToView($value, $field))); $valuesNode->appendChild($element); } $parent->appendChild($valuesNode); } if ($valuesBag->hasExcludedSimpleValues()) { $valuesNode = $this->document->createElement('excluded-values'); foreach ($valuesBag->getExcludedSimpleValues() as $value) { $element = $this->document->createElement('value'); $element->appendChild($this->document->createTextNode($this->normToView($value, $field))); $valuesNode->appendChild($element); } $parent->appendChild($valuesNode); } if ($valuesBag->has(Range::class)) { $valuesNode = $this->document->createElement('ranges'); foreach ($valuesBag->get(Range::class) as $value) { $this->exportRangeValueToNode($valuesNode, $value, $field); } $parent->appendChild($valuesNode); } if ($valuesBag->has(ExcludedRange::class)) { $valuesNode = $this->document->createElement('excluded-ranges'); foreach ($valuesBag->get(ExcludedRange::class) as $value) { $this->exportRangeValueToNode($valuesNode, $value, $field); } $parent->appendChild($valuesNode); } if ($valuesBag->has(Compare::class)) { $valuesNode = $this->document->createElement('comparisons'); foreach ($valuesBag->get(Compare::class) as $value) { $element = $this->document->createElement('compare'); $element->setAttribute('operator', $value->getOperator()); $element->appendChild($this->document->createTextNode($this->normToView($value->getValue(), $field))); $valuesNode->appendChild($element); } $parent->appendChild($valuesNode); } if ($valuesBag->has(PatternMatch::class)) { $valuesNode = $this->document->createElement('pattern-matchers'); foreach ($valuesBag->get(PatternMatch::class) as $value) { $element = $this->document->createElement('pattern-matcher'); $element->setAttribute('type', strtolower($this->getPatternMatchType($value))); $element->setAttribute('case-insensitive', $value->isCaseInsensitive() ? 'true' : 'false'); $element->appendChild($this->document->createTextNode($value->getValue())); $valuesNode->appendChild($element); } $parent->appendChild($valuesNode); } }