/**
  * findMenuIdOnMap
  *
  * @param string $itemId menu item object id
  *
  * @return string
  */
 protected function findMenuIdOnMap($itemId)
 {
     $menuMap = $this->cache->getMenuMap();
     if (isset($menuMap[$itemId])) {
         $menuId = $menuMap[$itemId];
         if ($menuId !== null) {
             return $menuId;
         }
     }
     $menuId = $this->menuRepository->getMenuIdByItem($itemId);
     return $menuId;
 }
 /**
  * testGetCachedMenuThrowException
  *
  * @return void
  */
 public function testGetCachedMenuThrowException()
 {
     $this->setExpectedException('\\XpressEngine\\Menu\\Exceptions\\NotFoundMenuException');
     $cache = $this->cache;
     $cache->shouldReceive('has')->andReturn(false);
     $menuCacheHandler = new MenuCacheHandler($cache, false);
     $menuCacheHandler->getCachedMenu('testMenuId');
 }
 /**
  * setOrder
  *
  * @param MenuItem $menuItem to change ordering menu item instance
  * @param int      $ordering new ordering number
  *
  * @return void
  */
 public function setOrder(MenuItem $menuItem, $ordering)
 {
     $items = $this->menuRepository->children(new MenuItem(['id' => $menuItem->parentId]));
     $children = array_filter($items, function ($child) use($menuItem) {
         return $child->id != $menuItem->id;
     });
     $children = array_merge(array_slice($children, 0, $ordering), [$menuItem], array_slice($children, $ordering));
     $seq = 0;
     foreach ($children as $child) {
         $child->ordering = $seq;
         $this->menuRepository->updateItem($child);
         $this->cache->deleteCachedMenu($child->id);
         $seq++;
     }
     $this->cache->deleteCachedMenu($menuItem->menuId);
 }
 /**
  * updateItemPermission
  *
  * @param MenuRetrieveHandler   $menuHandler       menu handler
  * @param MenuCacheHandler      $cacheHandler      menu cache handler
  * @param MenuPermissionHandler $permissionHandler menu permission handler
  * @param string                $menuId            menu id
  * @param string                $itemId            menu item id
  *
  * @return RedirectResponse
  */
 public function updateItemPermission(MenuRetrieveHandler $menuHandler, MenuCacheHandler $cacheHandler, MenuPermissionHandler $permissionHandler, $menuId, $itemId)
 {
     XeDB::beginTransaction();
     try {
         $inputs = Request::all();
         $menu = $menuHandler->getMenu($menuId);
         $item = $menu->getItem($itemId);
         $menuGrant = $permissionHandler->createAccessGrant($inputs);
         $menuGrant = $permissionHandler->createVisibleGrant($inputs, $menuGrant);
         $permissionHandler->registerItemPermission($item, $menuGrant);
         $cacheHandler->deleteCachedMenu($item->menuId);
     } catch (Exception $e) {
         XeDB::rollback();
         Request::flash();
         return Redirect::back()->with('alert', ['type' => 'danger', 'message' => $e->getMessage()]);
     }
     XeDB::commit();
     return Redirect::route('settings.menu.index');
 }