private function setAnswerObject(WpProQuiz_Model_Question $question = null)
 {
     //Defaults
     $data = array('sort_answer' => array(new WpProQuiz_Model_AnswerTypes()), 'classic_answer' => array(new WpProQuiz_Model_AnswerTypes()), 'matrix_sort_answer' => array(new WpProQuiz_Model_AnswerTypes()), 'cloze_answer' => array(new WpProQuiz_Model_AnswerTypes()), 'free_answer' => array(new WpProQuiz_Model_AnswerTypes()), 'assessment_answer' => array(new WpProQuiz_Model_AnswerTypes()));
     if ($question !== null) {
         $type = $question->getAnswerType();
         $type = $type == 'single' || $type == 'multiple' ? 'classic_answer' : $type;
         $answerData = $question->getAnswerData();
         if (isset($data[$type]) && $answerData !== null) {
             $data[$type] = $question->getAnswerData();
         }
     }
     return $data;
 }
 /**
  * 
  * @param DOMDocument $xml
  * @return NULL|WpProQuiz_Model_Question
  */
 private function createQuestionModel($xml)
 {
     $model = new WpProQuiz_Model_Question();
     $model->setTitle(trim($xml->title));
     $model->setQuestion(trim($xml->questionText));
     $model->setCorrectMsg(trim($xml->correctMsg));
     $model->setIncorrectMsg(trim($xml->incorrectMsg));
     $model->setAnswerType(trim($xml->attributes()->answerType));
     $model->setCorrectSameText($xml->correctSameText == 'true');
     $model->setTipMsg(trim($xml->tipMsg));
     if (isset($xml->tipMsg) && $xml->tipMsg->attributes() !== null) {
         $model->setTipEnabled($xml->tipMsg->attributes()->enabled == 'true');
     }
     $model->setPoints($xml->points);
     $model->setShowPointsInBox($xml->showPointsInBox == 'true');
     $model->setAnswerPointsActivated($xml->answerPointsActivated == 'true');
     $model->setAnswerPointsDiffModusActivated($xml->answerPointsDiffModusActivated == 'true');
     $model->setDisableCorrect($xml->disableCorrect == 'true');
     $model->setCategoryName(trim($xml->category));
     $answerData = array();
     if (isset($xml->answers)) {
         foreach ($xml->answers->answer as $answer) {
             $answerModel = new WpProQuiz_Model_AnswerTypes();
             $attr = $answer->attributes();
             if ($attr !== null) {
                 $answerModel->setCorrect($attr->correct == 'true');
                 $answerModel->setPoints($attr->points);
             }
             $answerModel->setAnswer(trim($answer->answerText));
             if ($answer->answerText->attributes() !== null) {
                 $answerModel->setHtml($answer->answerText->attributes()->html);
             }
             $answerModel->setSortString(trim($answer->stortText));
             if ($answer->stortText->attributes() !== null) {
                 $answerModel->setSortStringHtml($answer->stortText->attributes()->html);
             }
             $answerData[] = $answerModel;
         }
     }
     $model->setAnswerData($answerData);
     //Check
     if (trim($model->getAnswerType()) == '') {
         return null;
     }
     if (trim($model->getQuestion()) == '') {
         return null;
     }
     if (trim($model->getTitle()) == '') {
         return null;
     }
     if (count($model->getAnswerData()) == 0) {
         return null;
     }
     return $model;
 }
 /**
  * @param DOMDocument $dom
  * @param WpProQuiz_Model_Question $question
  * @return DOMDocument
  */
 private function createQuestionElement($dom, $question)
 {
     $qElement = $dom->createElement('question');
     $qElement->setAttribute('answerType', $question->getAnswerType());
     $qElement->appendChild($title = $dom->createElement('title'));
     $title->appendChild($dom->createCDATASection($question->getTitle()));
     $qElement->appendChild($dom->createElement('points', $question->getPoints()));
     $qElement->appendChild($questionText = $dom->createElement('questionText'));
     $questionText->appendChild($dom->createCDATASection($question->getQuestion()));
     $qElement->appendChild($correctMsg = $dom->createElement('correctMsg'));
     $correctMsg->appendChild($dom->createCDATASection($question->getCorrectMsg()));
     $qElement->appendChild($incorrectMsg = $dom->createElement('incorrectMsg'));
     $incorrectMsg->appendChild($dom->createCDATASection($question->getIncorrectMsg()));
     $qElement->appendChild($tipMsg = $dom->createElement('tipMsg'));
     $tipMsg->setAttribute('enabled', $this->booleanToTrueOrFalse($question->isTipEnabled()));
     $tipMsg->appendChild($dom->createCDATASection($question->getTipMsg()));
     $qElement->appendChild($dom->createElement('category', $question->getCategoryName()));
     $qElement->appendChild($dom->createElement('correctSameText', $this->booleanToTrueOrFalse($question->isCorrectSameText())));
     $qElement->appendChild($dom->createElement('showPointsInBox', $this->booleanToTrueOrFalse($question->isShowPointsInBox())));
     $qElement->appendChild($dom->createElement('answerPointsActivated', $this->booleanToTrueOrFalse($question->isAnswerPointsActivated())));
     $qElement->appendChild($dom->createElement('answerPointsDiffModusActivated', $this->booleanToTrueOrFalse($question->isAnswerPointsDiffModusActivated())));
     $qElement->appendChild($dom->createElement('disableCorrect', $this->booleanToTrueOrFalse($question->isDisableCorrect())));
     $answersElement = $dom->createElement('answers');
     $answerData = $question->getAnswerData();
     if (is_array($answerData)) {
         foreach ($answerData as $answer) {
             /** @var WpProQuiz_Model_AnswerTypes $answer */
             $answerElement = $dom->createElement('answer');
             $answerElement->setAttribute('points', $answer->getPoints());
             $answerElement->setAttribute('correct', $this->booleanToTrueOrFalse($answer->isCorrect()));
             $answerText = $dom->createElement('answerText');
             $answerText->setAttribute('html', $this->booleanToTrueOrFalse($answer->isHtml()));
             $answerText->appendChild($dom->createCDATASection($answer->getAnswer()));
             $answerElement->appendChild($answerText);
             $sortText = $dom->createElement('stortText');
             $sortText->setAttribute('html', $this->booleanToTrueOrFalse($answer->isSortStringHtml()));
             $sortText->appendChild($dom->createCDATASection($answer->getSortString()));
             $answerElement->appendChild($sortText);
             $answersElement->appendChild($answerElement);
         }
     }
     $qElement->appendChild($answersElement);
     return $qElement;
 }
 public function save(WpProQuiz_Model_Question $question, $auto = false)
 {
     $sort = null;
     if ($auto && $question->getId()) {
         $statisticMapper = new WpProQuiz_Model_StatisticMapper();
         if ($statisticMapper->isStatisticByQuestionId($question->getId())) {
             $this->setOnlineOff($question->getId());
             $question->setQuizId($this->getQuizId($question->getId()));
             $sort = $this->getSortByQuestionId($question->getId());
             $question->setId(0);
         }
     }
     if ($question->getId() != 0) {
         $this->_wpdb->update($this->_table, array('title' => $question->getTitle(), 'points' => $question->getPoints(), 'question' => $question->getQuestion(), 'correct_msg' => $question->getCorrectMsg(), 'incorrect_msg' => $question->getIncorrectMsg(), 'correct_same_text' => (int) $question->isCorrectSameText(), 'tip_enabled' => (int) $question->isTipEnabled(), 'tip_msg' => $question->getTipMsg(), 'answer_type' => $question->getAnswerType(), 'show_points_in_box' => (int) $question->isShowPointsInBox(), 'answer_points_activated' => (int) $question->isAnswerPointsActivated(), 'answer_data' => $question->getAnswerData(true), 'category_id' => $question->getCategoryId(), 'answer_points_diff_modus_activated' => (int) $question->isAnswerPointsDiffModusActivated(), 'disable_correct' => (int) $question->isDisableCorrect(), 'matrix_sort_answer_criteria_width' => $question->getMatrixSortAnswerCriteriaWidth()), array('id' => $question->getId()), array('%s', '%d', '%s', '%s', '%s', '%d', '%d', '%s', '%s', '%d', '%d', '%s', '%d', '%d', '%d', '%d'), array('%d'));
     } else {
         $this->_wpdb->insert($this->_table, array('quiz_id' => $question->getQuizId(), 'online' => 1, 'sort' => $sort !== null ? $sort : $this->getMaxSort($question->getQuizId()) + 1, 'title' => $question->getTitle(), 'points' => $question->getPoints(), 'question' => $question->getQuestion(), 'correct_msg' => $question->getCorrectMsg(), 'incorrect_msg' => $question->getIncorrectMsg(), 'correct_same_text' => (int) $question->isCorrectSameText(), 'tip_enabled' => (int) $question->isTipEnabled(), 'tip_msg' => $question->getTipMsg(), 'answer_type' => $question->getAnswerType(), 'show_points_in_box' => (int) $question->isShowPointsInBox(), 'answer_points_activated' => (int) $question->isAnswerPointsActivated(), 'answer_data' => $question->getAnswerData(true), 'category_id' => $question->getCategoryId(), 'answer_points_diff_modus_activated' => (int) $question->isAnswerPointsDiffModusActivated(), 'disable_correct' => (int) $question->isDisableCorrect(), 'matrix_sort_answer_criteria_width' => $question->getMatrixSortAnswerCriteriaWidth()), array('%d', '%d', '%d', '%s', '%d', '%s', '%s', '%s', '%d', '%d', '%s', '%s', '%d', '%d', '%s', '%d', '%d', '%d', '%d'));
         $question->setId($this->_wpdb->insert_id);
     }
     return $question;
 }