private function parseTemplate(XmlElement $composition) { $templateName = $composition->getAttribute("template"); $title = $composition->getAttribute("title"); $description = $composition->getAttribute("description"); $tplXml = $this->getTemplateLocation($templateName); if (!file_exists($tplXml)) { throw new TemplateNotExistsException($templateName); } $replaces = array(); foreach ($composition->getChildren() as $define) { $key = "<insert name=\"{$define->getAttribute("name")}\"/>"; $replaces[$key] = $define->asXmlChildren(); } $tplNode = $this->xmlFactory->fromFile($tplXml)->getRootElement(); $result = $tplNode->asXml(); $result = StringUtil::replaceWith($result, "<template>", "<view>"); $result = StringUtil::replaceWith($result, "</template>", "</view>"); $inserts = $tplNode->getNbDescendants("insert"); for ($i = 0; $i < $inserts; $i++) { $result = StringUtil::replaceAssoc($result, $replaces); } $root = $this->xmlFactory->fromString($result)->getRootElement(); if (!is_null($title)) { $root->addAttribute("title", $title); } if (!is_null($description)) { $root->addAttribute("description", $description); } return $root; }
/** * @param XmlElement $menu_node * @return \stdClass */ private static function getMenuManifestNode(XmlElement $menu_node) { $Cyan = \Cyan::initialize(); $App = $Cyan->getContainer('application'); $User = $App->getContainer('user'); $acl_menu_permission = $menu_node->getAttribute('acl_check'); if ($acl_menu_permission) { $acl_check = explode(',', $acl_menu_permission); $continue = false; foreach ($acl_check as $acl_permission) { if (!$continue && $User->can($acl_permission)) { $continue = true; break; } } if (!$continue) { return []; } } $route_name = $menu_node->getAttribute('route_name'); $route_params = json_decode($menu_node->getAttribute('route_params', '{}'), true); if (!is_array($route_params)) { $route_params = []; } $menu = new \stdClass(); $menu->icon = $menu_node->getAttribute('icon', 'fa fa-circle-o'); $menu->title = $menu_node->getAttribute('title'); $menu->link = !empty($route_name) ? $App->Router->generate($route_name, $route_params) : '#'; if (isset($menu_node->submenu) && $menu_node->submenu->menu->count()) { $menu->items = []; foreach ($menu_node->submenu->menu as $submenu_node) { $submenu_items = self::getMenuManifestNode($submenu_node); if (!empty($submenu_items)) { $menu->items[] = $submenu_items; } } } return $menu; }