/** * Add a navigation item */ public function addAction() { $form = new NavigationConfigForm(); $form->setRedirectUrl('navigation'); $form->setUser($this->Auth()->getUser()); $form->setItemTypes($this->listItemTypes()); $form->addDescription($this->translate('Create a new navigation item, such as a menu entry or dashlet.')); // TODO: Fetch all "safe" parameters from the url and populate them $form->setDefaultUrl(rawurldecode($this->params->get('url', ''))); $form->setOnSuccess(function (NavigationConfigForm $form) { $data = $form::transformEmptyValuesToNull($form->getValues()); try { $form->add($data); } catch (Exception $e) { $form->error($e->getMessage()); return false; } if ($form->save()) { if ($data['type'] === 'menu-item') { $form->getResponse()->setRerenderLayout(); } Notification::success(t('Navigation item successfully created')); return true; } return false; }); $form->handleRequest(); $this->renderForm($form, $this->translate('New Navigation Item')); }
/** * Edit a navigation item */ public function editAction() { $itemName = $this->params->getRequired('name'); $referrer = $this->params->get('referrer', 'index'); $form = new NavigationConfigForm(); $form->setRedirectUrl($referrer === 'shared' ? 'navigation/shared' : 'navigation'); $form->setItemTypes($this->listItemTypes()); $form->setTitle(sprintf($this->translate('Edit Navigation Item %s'), $itemName)); $form->setUser($this->Auth()->getUser()); $form->setShareConfig(Config::app('navigation')); $form->setOnSuccess(function (NavigationConfigForm $form) use($itemName) { $data = array_map(function ($v) { return $v !== '' ? $v : null; }, $form->getValues()); try { $form->edit($itemName, $data); } catch (NotFoundError $e) { throw $e; } catch (Exception $e) { $form->error($e->getMessage()); return false; } if ($form->save()) { if (isset($data['type']) && $data['type'] === 'menu-item') { $form->getResponse()->setRerenderLayout(); } Notification::success(sprintf(t('Navigation item "%s" successfully updated'), $itemName)); return true; } return false; }); try { $form->load($itemName); $form->handleRequest(); } catch (NotFoundError $_) { $this->httpNotFound(sprintf($this->translate('Navigation item "%s" not found'), $itemName)); } $this->view->form = $form; $this->render('form'); }