/** * @param \DOMNode $parent * @param ValuesGroup $valuesGroup * @param FieldSet $fieldSet */ private function exportGroupNode(\DOMNode $parent, ValuesGroup $valuesGroup, FieldSet $fieldSet) { $fields = $valuesGroup->getFields(); if ($valuesGroup->countValues() > 0) { $fieldsNode = $this->document->createElement('fields'); foreach ($fields as $name => $values) { if (!$values->count()) { continue; } $fieldLabel = $this->labelResolver->resolveFieldLabel($fieldSet, $name); $fieldNode = $this->document->createElement('field'); $fieldNode->setAttribute('name', $fieldLabel); $this->exportValuesToNode($values, $fieldNode, $fieldSet->get($name)); $fieldsNode->appendChild($fieldNode); } $parent->appendChild($fieldsNode); } if ($valuesGroup->hasGroups()) { $groupsNode = $this->document->createElement('groups'); foreach ($valuesGroup->getGroups() as $group) { $groupNode = $this->document->createElement('group'); $groupNode->setAttribute('logical', $group->getGroupLogical()); $this->exportGroupNode($groupNode, $group, $fieldSet); $groupsNode->appendChild($groupNode); } $parent->appendChild($groupsNode); } }
/** * @param ValuesGroup $valuesGroup * @param FieldSet $fieldSet * @param bool $isRoot * * @return string */ protected function exportGroup(ValuesGroup $valuesGroup, FieldSet $fieldSet, $isRoot = false) { $result = ''; $exportedGroups = ''; if ($isRoot && $valuesGroup->countValues() > 0 && ValuesGroup::GROUP_LOGICAL_OR === $valuesGroup->getGroupLogical()) { $result .= '*'; } foreach ($valuesGroup->getFields() as $name => $values) { if (0 === $values->count()) { continue; } $result .= $this->labelResolver->resolveFieldLabel($fieldSet, $name); $result .= ': ' . $this->exportValues($values, $fieldSet->get($name)) . '; '; } foreach ($valuesGroup->getGroups() as $group) { $exportedGroup = '(' . trim($this->exportGroup($group, $fieldSet), ' ;') . '); '; if ('(); ' !== $exportedGroup && ValuesGroup::GROUP_LOGICAL_OR === $group->getGroupLogical()) { $exportedGroups .= '*'; } $exportedGroups .= $exportedGroup; } $result .= $exportedGroups; return trim($result); }