/**
  * 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;
     }
 }