/** * Saves New Navigation * */ public function actionSaveNavigation() { $this->requirePostRequest(); $navigation = new NavigationBuilder_NavigationModel(); $navigation->id = craft()->request->getPost('navigationId'); $navigation->name = craft()->request->getPost('name'); $navigation->handle = craft()->request->getPost('handle'); $navigation->description = craft()->request->getPost('description'); if ($navigation->validate()) { if (craft()->navigationBuilder_navigation->saveNavigationService($navigation)) { craft()->userSession->setNotice(Craft::t('Navigation saved')); $this->redirectToPostedUrl($navigation); } else { craft()->userSession->setError(Craft::t('Could not save navigation')); } } else { $navigation->getErrors(); } craft()->urlManager->setRouteVariables(array('navigation' => $navigation)); }
/** * Save New Navigation * */ public function saveNavigationService(NavigationBuilder_NavigationModel $navigation) { if ($navigation->id) { $navigationRecord = NavigationBuilder_NavigationRecord::model()->findById($navigation->id); if (!$navigationRecord) { throw new Exception(Craft::t('No navigation exists with the ID “{id}”', array('id' => $navigation->id))); } $isNewNavigation = false; } else { $navigationRecord = new NavigationBuilder_NavigationRecord(); $isNewNavigation = true; } $navigationRecord->name = $navigation->name; $navigationRecord->handle = $navigation->handle; $navigationRecord->description = $navigation->description; // $navigationRecord->navNode = JsonHelper::encode($navigation->navNode); $navigationRecord->validate(); $navigation->addErrors($navigationRecord->getErrors()); if (!$navigation->hasErrors()) { $transaction = craft()->db->getCurrentTransaction() === null ? craft()->db->beginTransaction() : null; try { $navigationRecord->save(); if (!$navigation->id) { $navigation->id = $navigationRecord->id; } $this->_navigationsById[$navigation->id] = $navigation; if ($transaction !== null) { $transaction->commit(); } } catch (\Exception $e) { if ($transaction !== null) { $transaction->rollback(); } throw $e; } return true; } else { return false; } }