Exemplo n.º 1
0
 private function addMenu(\Symforce\AdminBundle\Compiler\CacheObject\Menu $tree, \Knp\Menu\MenuItem $menu, $as_root = true)
 {
     if ($as_root) {
         $_menu = $menu;
     } else {
         $options = array('attributes' => array(), 'childrenAttributes' => array(), 'linkAttributes' => array(), 'extras' => array());
         $label = $this->translator->trans($tree->getLabel(), array(), $tree->getDomain());
         if ($tree->admin) {
             $admin_name = $tree->getName();
             if (!$this->loadder->auth($admin_name, 'list')) {
                 return;
             }
             $admin = $this->loadder->getAdminByName($admin_name);
             $options['uri'] = $admin->path('list');
         } else {
             if ($tree->getUrl()) {
                 $options['uri'] = $tree->getUrl();
             } else {
                 if ($tree->getRouteName()) {
                     $options['uri'] = $this->container->get('router')->generate($tree->getRouteName());
                 } else {
                     $options['uri'] = 'javascript:alert(0)';
                 }
             }
         }
         if ($tree->hasChildren()) {
             if ($menu->isRoot()) {
                 $options['attributes']['class'] = 'dropdown';
                 $options['extras']['caret'] = true;
             } else {
                 $options['attributes']['class'] = 'dropdown-submenu';
             }
             $options['childrenAttributes']['class'] = 'dropdown-menu bottom-down';
             $options['linkAttributes']['class'] = 'dropdown-toggle';
             $options['linkAttributes']['data-toggle'] = 'dropdown';
         }
         if (!$menu->isRoot()) {
             if (null !== $tree->getDivider()) {
                 if ($tree->getDivider()) {
                     $options['extras']['after_divider'] = true;
                 } else {
                     $options['extras']['before_divider'] = true;
                 }
             }
         }
         if (null !== $tree->getIcon()) {
             $options['extras']['icon'] = $tree->getIcon();
         }
         $_menu = $menu->addChild($label, $options);
     }
     foreach ($tree->getChildren() as $child) {
         $this->addMenu($child, $_menu, false);
     }
 }
Exemplo n.º 2
0
 public function buildMenuTree(\Symforce\AdminBundle\Compiler\Generator $gen, array &$menu_config)
 {
     $list = array('root' => new Menu('root'));
     $tr = $gen->getTransNodeByPath($gen->sf_domain, 'sf.menu');
     foreach ($menu_config['groups'] as $name => $attr) {
         $_menu = new Menu($name);
         if (false !== $attr['position']) {
             $_menu->setPosition($attr['position']);
         }
         if ($attr['label']) {
             $tr->set($name, $attr['label']);
         }
         $_menu->setLabel('sf.menu.' . $name);
         $_menu->setDomain($gen->sf_domain);
         if (false !== $attr['route']) {
             $_menu->setRouteName($attr['route']);
         }
         if (false !== $attr['url']) {
             $_menu->setUrl($attr['url']);
         }
         if (isset($attr['divider'])) {
             $_menu->setDivider($attr['divider']);
         }
         if (isset($attr['icon'])) {
             $_menu->setIcon($attr['icon']);
         }
         $list[$name] = $_menu;
         $parent_name = $attr['parent'];
         if (!isset($list[$parent_name])) {
             $_parent = new Menu($parent_name);
             $list[$parent_name] = $_parent;
         }
         $list[$parent_name]->addChild($_menu);
     }
     foreach ($gen->admin_generators as $object) {
         if ($object instanceof \Symforce\AdminBundle\Compiler\MetaType\Admin\Entity) {
             /**
              * @var \Symforce\AdminBundle\Compiler\MetaType\Entity 
              */
             $menu = $object->menu;
             if (!$menu) {
                 continue;
             }
             if ($menu instanceof \Symforce\AdminBundle\Compiler\MetaType\Admin\Menu) {
                 $name = $object->name;
                 $tr = $object->tr_node;
                 if (isset($list[$name])) {
                     $_menu = $list[$name];
                 } else {
                     $_menu = new Menu($name);
                     $list[$name] = $_menu;
                 }
                 if (null !== $menu->divider) {
                     $_menu->setDivider($menu->divider);
                 }
                 if (null !== $menu->label) {
                     $tr->set('menu', $menu->label);
                     $_menu->setLabel($name . '.menu');
                 } else {
                     $_menu->setLabel($name . '.label');
                 }
                 $_menu->setDomain($object->tr_domain);
                 if (null !== $menu->icon) {
                     $_menu->setIcon($menu->icon);
                 } else {
                     if (null !== $object->icon) {
                         $_menu->setIcon($object->icon);
                     }
                 }
                 if (null !== $menu->position) {
                     $_menu->setPosition($menu->position);
                 }
                 $_menu->admin = true;
                 $_parent_name = $menu->group;
                 if (true === $_parent_name) {
                     continue;
                     $_parent_name = $gen->getEntityByName($name)->getParent()->getName();
                 }
                 if (isset($list[$_parent_name])) {
                     $_parent = $list[$_parent_name];
                 } else {
                     $_parent = new Menu($_parent_name);
                     $list[$_parent_name] = $_parent;
                 }
                 $_parent->addChild($_menu);
             } else {
                 echo __FILE__, ':', __LINE__, "\n";
                 exit;
             }
         } else {
             echo __FILE__, ':', __LINE__, "\n";
             exit;
         }
     }
     /* check associated */
     foreach ($list as $name => $menu) {
         if (!$menu->admin) {
             continue;
         }
         if (!$menu->getParent()) {
             continue;
         }
         if (!$menu->getParent()->admin) {
             continue;
         }
         continue;
         $_entity = $this->getAdminByName($name);
         if ($_entity->getParent()->getName() != $menu->getParent()->getName()) {
             $_entity->throwError("memu group(%s) is not associated parent `%s`", $menu->getParent()->getName(), $_entity->getPureObject()->getParent()->getName());
         }
     }
     return $list['root'];
 }