/** * Saves a node. * * @param AmNav_NodeModel $node * * @throws Exception * @return bool|AmNav_NodeModel */ public function saveNode(AmNav_NodeModel $node) { $isNewNode = !$node->id; // Node data if ($node->id) { $nodeRecord = AmNav_NodeRecord::model()->findById($node->id); if (!$nodeRecord) { throw new Exception(Craft::t('No node exists with the ID “{id}”.', array('id' => $node->id))); } } else { $nodeRecord = new AmNav_NodeRecord(); } // Set attributes $nodeRecord->setAttributes($node->getAttributes(), false); if ($isNewNode) { $nodeRecord->order = $this->_getNewOrderNumber($node->navId, $node->parentId, $node->locale); } // Validate $nodeRecord->validate(); $node->addErrors($nodeRecord->getErrors()); // Save node if (!$node->hasErrors()) { if ($nodeRecord->save()) { return AmNav_NodeModel::populateModel($nodeRecord); } } return false; }