public function testGetSetLevel() { $node = new GroupNodeDefinition(self::TEST_NAME); $this->assertEquals(0, $node->getLevel()); $node->setLevel(self::TEST_LEVEL); $this->assertEquals(self::TEST_LEVEL, $node->getLevel()); }
/** * Test group tree * * @return GroupNodeDefinition */ protected static function getTestGroup() { $node1 = new GroupNodeDefinition('node1', array(), array()); $node1->setLevel(1); $node2 = new GroupNodeDefinition('node2', array(), array()); $node2->setLevel(2); $node3 = new GroupNodeDefinition('node3', array(), array($node2)); $node3->setLevel(1); $root = new GroupNodeDefinition('node4', array(), array($node1, $node3)); $root->setLevel(0); return $root; }
/** * Builds group node, called recursively * * @param array $nodes * @param int $correctFieldsLevel fields should be placed on the same levels that comes from view * @param int $level current level * * @throws \Exception * @return array */ protected function buildGroupNode($nodes, $correctFieldsLevel, $level = 0) { $level++; foreach ($nodes as $name => $node) { if (is_array($node) && isset($node['children'])) { if (!isset($this->config[ProcessorDecorator::GROUPS_NODE][$name])) { throw new \Exception(sprintf('Group "%s" does not defined', $name)); } $group = $this->config[ProcessorDecorator::GROUPS_NODE][$name]; $data = $this->buildGroupNode($node['children'], $correctFieldsLevel, $level); $node = new GroupNodeDefinition($name, array_merge($group, $nodes[$name]), $data); $node->setLevel($level); $nodes[$node->getName()] = $node; } else { if ($level !== $correctFieldsLevel) { throw new \Exception(sprintf('Field "%s" will not be ever rendered. Please check nesting level', $node)); } $nodes[$name] = $this->buildFieldNode($node); } } return $nodes; }
/** * Builds group node, called recursively * * @param array $nodes * @param int $correctFieldsLevel fields should be placed on the same levels that comes from view * @param int $level current level * * @throws ItemNotFoundException * @throws \Exception * @return array */ protected function buildGroupNode($nodes, $correctFieldsLevel, $level = 0) { $level++; foreach ($nodes as $name => $node) { if (is_array($node) && isset($node['children'])) { $group = $this->configBag->getGroupsNode($name); if ($group === false) { throw new ItemNotFoundException(sprintf('Group "%s" is not defined.', $name)); } $data = $this->buildGroupNode($node['children'], $correctFieldsLevel, $level); $node = new GroupNodeDefinition($name, array_merge($group, $nodes[$name]), $data); $node->setLevel($level); $nodes[$node->getName()] = $node; } else { if ($level !== $correctFieldsLevel) { throw new \Exception(sprintf('Field "%s" will not be ever rendered. Please check nesting level', $node)); } $nodes[$name] = $this->buildFieldNode($node); } } return $nodes; }