public function handle(Navigation $navigation, Factory $validator, Dispatcher $dispatcher)
 {
     // check if user has permission
     if (!$this->disablePermissionChecking) {
         if (!$this->user->hasAnyPermission(['navigationBuilder.manage'])) {
             return new CommandResult(false, "Not enough permission.", null, 403);
         }
     }
     // validate data
     $validationResult = $validator->make(array('name' => $this->name, 'data' => $this->data), Navigation::$rules);
     if ($validationResult->fails()) {
         return new CommandResult(false, $validationResult->getMessageBag()->first(), null, 400);
     }
     if (!($nav = $navigation->find($this->id))) {
         return new CommandResult(false, 'Navigation does not exist.', null, 400);
     }
     // fire before create event
     $dispatcher->fire('navigationBuilder.updating', array($nav, $this->args));
     $nav->name = $this->name;
     $nav->data = $this->data;
     $nav->save();
     // fire after create
     $dispatcher->fire('navigationBuilder.updated', array($nav, $this->args));
     // all good
     return new CommandResult(true, "Navigation successfully updated.", $nav, 200);
 }
 /**
  * @param Navigation $navigation
  * @param Dispatcher $dispatcher
  * @return CommandResult
  */
 public function handle(Navigation $navigation, Dispatcher $dispatcher)
 {
     // check if user has permission
     if (!$this->disablePermissionChecking) {
         if (!$this->user->hasAnyPermission(['navigationBuilder.manage'])) {
             return new CommandResult(false, "Not enough permission.", null, 403);
         }
     }
     // fire before create event
     $dispatcher->fire('navigationBuilder.beforeQuery', array($this->args));
     if ($this->id && $this->id != '') {
         if (!($res = $navigation->with(array())->find($this->id))) {
             return new CommandResult(false, "Navigation does not exist.", null, 404);
         }
     } else {
         if ($this->paginated) {
             $res = $navigation->with(array())->paginate($this->perPage);
         } else {
             $res = $navigation->all();
         }
     }
     // fire after create
     $dispatcher->fire('navigationBuilder.afterQuery', array($this->args));
     // all good
     return new CommandResult(true, "List custom navigation command successful.", $res, 200);
 }
 /**
  * @param Navigation $navigation
  * @param Factory $validator
  * @param Dispatcher $dispatcher
  * @return CommandResult
  */
 public function handle(Navigation $navigation, Factory $validator, Dispatcher $dispatcher)
 {
     // check if user has permission
     if (!$this->disablePermissionChecking) {
         if (!$this->user->hasAnyPermission(['navigationBuilder.delete'])) {
             return new CommandResult(false, "Not enough permission.", null, 403);
         }
     }
     // make sure we have a navigation to delete
     if (!($nav = $navigation->find($this->id))) {
         return new CommandResult(false, "Navigation does not exist.", null, 400);
     }
     // fire before delete event
     $dispatcher->fire('navigationBuilder.deleting', array($nav, $this->args));
     // delete
     $nav->delete();
     // fire after create
     $dispatcher->fire('navigationBuilder.deleted', array($nav, $this->args));
     // all good
     return new CommandResult(true, "Navigation successfully deleted.", null, 200);
 }
 public function testShouldNowCreateIfAllCheckPointPassed()
 {
     $user = $this->createUserAndLoggedIn(array('navigationBuilder.manage' => 1));
     $result = $this->commandDispatcher->dispatchFromArray('Darryldecode\\Backend\\Components\\Navigation\\Commands\\CreateNavigationCommand', array('name' => 'SomeNavigationName', 'data' => array('title' => 'home', 'class' => 'some-class', 'url' => 'www.url.com', 'items' => [])));
     $this->assertTrue($result->isSuccessful(), "Command should be a success.");
     $this->assertEquals(201, $result->getStatusCode(), "Status code should be created.");
     $this->assertEquals('Navigation successfully created.', $result->getMessage());
     // prove that nav exist
     $this->assertCount(1, Navigation::all()->toArray());
     $this->assertEquals('SomeNavigationName', Navigation::all()->first()->name);
     $this->assertInternalType('array', Navigation::all()->first()->data);
 }
 protected function createDummyNavigation()
 {
     return Navigation::create(array('name' => 'main navigation', 'data' => array('title' => 'home', 'attr' => array('class' => 'some-class', 'id' => 'some-id'), 'url' => 'http://www.url.com', 'items' => [])));
 }
 protected function createDummyData()
 {
     Navigation::create(array('name' => 'SomeNavigationName 1', 'data' => array(array('title' => 'home', 'class' => 'some-class', 'url' => 'www.url.com', 'items' => []))));
     Navigation::create(array('name' => 'SomeNavigationName 2', 'data' => array(array('title' => 'home', 'class' => 'some-class', 'url' => 'www.url.com', 'items' => []))));
     Navigation::create(array('name' => 'SomeNavigationName 3', 'data' => array(array('title' => 'home', 'class' => 'some-class', 'url' => 'www.url.com', 'items' => []), array('title' => 'about', 'class' => 'some-class', 'url' => 'www.url.com/about', 'items' => []))));
 }