예제 #1
0
 public function updateQuestionTransaction($questionRow, $questionRowData)
 {
     $QuestionTip = new Model_QuestionTip();
     $Alternative = new Model_Alternative();
     DbTable_Question::getInstance()->getAdapter()->beginTransaction();
     try {
         $updateQuestion = $this->updateQuestion($questionRow, $questionRowData);
         if (!$updateQuestion['status']) {
             throw new Vtx_UserException($updateQuestion['messageError']);
         }
         $questionId = $questionRow->getId();
         $questionIsAnswered = $this->dbTable_Question->isAnswered($questionId);
         // Logica da "Ajuda da Questão"
         $QuestionTip->deleteAllByQuestionId($questionId);
         if (isset($questionRowData['helper'])) {
             $helpersData = $questionRowData['helper'];
             $insertHelper = $QuestionTip->createQuestionTipsByQuestion($helpersData, $questionId);
             if (!$insertHelper['status']) {
                 throw new Vtx_UserException($insertHelper['messageError']);
             }
         }
         // Logica das "Alternativas"
         if ($questionIsAnswered) {
             if ($questionRow->getQuestionTypeId() != $questionRowData['question_type_id']) {
                 $errorQuestionType['messageError'] = 'Não é possível alterar o tipo da questão, pois há respostas.';
                 throw new Vtx_UserException($errorQuestionType['messageError']);
             }
         }
         if (isset($questionRowData['alternative'])) {
             $updateAlternative = $Alternative->updateAlternativesByQuestion($questionRowData['alternative'], $questionId);
             if (!$updateAlternative['status']) {
                 throw new Vtx_UserException($updateAlternative['messageError']);
             }
         }
         DbTable_Question::getInstance()->getAdapter()->commit();
         return array('status' => true);
     } 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);
     }
 }