/** * @dataProvider nodeDefinitionProvider * * @param GroupNodeDefinition $node */ public function testToBlockConfig(GroupNodeDefinition $node) { $result = $node->toBlockConfig(); $this->assertArrayHasKey($node->getName(), $result); $result = $result[$node->getName()]; $this->assertArrayHasKey('title', $result); $this->assertArrayHasKey('priority', $result); $this->assertArrayHasKey('description', $result); $this->assertArrayNotHasKey('some_another', $result); $this->assertArrayNotHasKey('icon', $result); }
/** * 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; }