public function createQuestionTransaction($questionData) { $QuestionTip = new Model_QuestionTip(); $Alternative = new Model_Alternative(); DbTable_Question::getInstance()->getAdapter()->beginTransaction(); try { $questionParentId = isset($questionData['parent_question_id']) ? $questionData['parent_question_id'] : null; $insert = $this->createQuestion($questionData, $questionParentId); if (!$insert['status']) { throw new Vtx_UserException($insert['messageError']); } if (isset($questionData['helper'])) { $helpersData = $questionData['helper']; $insertHelper = $QuestionTip->createQuestionTipsByQuestion($helpersData, $insert['lastInsertId']); if (!$insertHelper['status']) { throw new Vtx_UserException($insertHelper['messageError']); } } $alternativeRowData = $questionData['alternative']; if (isset($alternativeRowData)) { $insertAlternative = $Alternative->createAlternativesByQuestion($alternativeRowData, $insert['lastInsertId']); if (!$insertAlternative['status']) { throw new Vtx_UserException($insertAlternative['messageError']); } } DbTable_Question::getInstance()->getAdapter()->commit(); return array('status' => true, 'lastInsertId' => $insert['lastInsertId'], 'lastDesignation' => $insert['lastDesignation']); } catch (Vtx_UserException $e) { DbTable_Question::getInstance()->getAdapter()->rollBack(); return array('status' => false, 'messageError' => $e->getMessage()); } catch (Exception $e) { DbTable_Question::getInstance()->getAdapter()->rollBack(); throw new Exception($e); } }