public function export($ids)
 {
     $dom = new DOMDocument('1.0', 'utf-8');
     $root = $dom->createElement('wpProQuiz');
     $dom->appendChild($root);
     $header = $dom->createElement('header');
     $header->setAttribute('version', WPPROQUIZ_VERSION);
     $header->setAttribute('exportVersion', 1);
     $root->appendChild($header);
     $data = $dom->createElement('data');
     $quizMapper = new WpProQuiz_Model_QuizMapper();
     $questionMapper = new WpProQuiz_Model_QuestionMapper();
     $formMapper = new WpProQuiz_Model_FormMapper();
     foreach ($ids as $id) {
         $quizModel = $quizMapper->fetch($id);
         if ($quizModel->getId() <= 0) {
             continue;
         }
         $questionModel = $questionMapper->fetchAll($quizModel->getId());
         $forms = array();
         if ($quizModel->isFormActivated()) {
             $forms = $formMapper->fetch($quizModel->getId());
         }
         $quizElement = $this->getQuizElement($dom, $quizModel, $forms);
         $quizElement->appendChild($questionsElement = $dom->createElement('questions'));
         foreach ($questionModel as $model) {
             $questionElement = $this->createQuestionElement($dom, $model);
             $questionsElement->appendChild($questionElement);
         }
         $data->appendChild($quizElement);
     }
     $root->appendChild($data);
     return $dom->saveXML();
 }
 public function quizCompleted()
 {
     $lockMapper = new WpProQuiz_Model_LockMapper();
     $quizMapper = new WpProQuiz_Model_QuizMapper();
     $categoryMapper = new WpProQuiz_Model_CategoryMapper();
     $statistics = new WpProQuiz_Controller_Statistics();
     $quiz = $quizMapper->fetch($this->data['quizId']);
     if ($quiz === null || $quiz->getId() <= 0) {
         return;
     }
     $categories = $categoryMapper->fetchByQuiz($quiz->getId());
     $userId = get_current_user_id();
     $resultInPercent = floor($this->data['results']['comp']['result']);
     $this->setResultCookie($quiz);
     $this->emailNote($quiz, $this->data['results']['comp'], $categories);
     if (!$this->isPreLockQuiz($quiz)) {
         $statistics->save();
         do_action('wp_pro_quiz_completed_quiz');
         do_action('wp_pro_quiz_completed_quiz_' . $resultInPercent . '_percent');
         return;
     }
     $lockMapper->deleteOldLock(60 * 60 * 24 * 7, $this->_post['quizId'], time(), WpProQuiz_Model_Lock::TYPE_QUIZ, 0);
     $lockIp = $lockMapper->isLock($this->_post['quizId'], $this->getIp(), get_current_user_id(), WpProQuiz_Model_Lock::TYPE_QUIZ);
     $lockCookie = false;
     $cookieTime = $quiz->getQuizRunOnceTime();
     $cookieJson = null;
     if (isset($this->_cookie['wpProQuiz_lock']) && get_current_user_id() == 0 && $quiz->isQuizRunOnceCookie()) {
         $cookieJson = json_decode($this->_cookie['wpProQuiz_lock'], true);
         if ($cookieJson !== false) {
             if (isset($cookieJson[$this->_post['quizId']]) && $cookieJson[$this->_post['quizId']] == $cookieTime) {
                 $lockCookie = true;
             }
         }
     }
     if (!$lockIp && !$lockCookie) {
         $statistics->save();
         do_action('wp_pro_quiz_completed_quiz');
         do_action('wp_pro_quiz_completed_quiz_' . $resultInPercent . '_percent');
         if (get_current_user_id() == 0 && $quiz->isQuizRunOnceCookie()) {
             $cookieData = array();
             if ($cookieJson !== null || $cookieJson !== false) {
                 $cookieData = $cookieJson;
             }
             $cookieData[$this->_post['quizId']] = $quiz->getQuizRunOnceTime();
             $url = parse_url(get_bloginfo('url'));
             setcookie('wpProQuiz_lock', json_encode($cookieData), time() + 60 * 60 * 24 * 60, empty($url['path']) ? '/' : $url['path']);
         }
         $lock = new WpProQuiz_Model_Lock();
         $lock->setUserId(get_current_user_id());
         $lock->setQuizId($this->_post['quizId']);
         $lock->setLockDate(time());
         $lock->setLockIp($this->getIp());
         $lock->setLockType(WpProQuiz_Model_Lock::TYPE_QUIZ);
         $lockMapper->insert($lock);
     }
     return;
 }
 /**
  * @param $ids
  * @return WpProQuiz_Model_Quiz[]
  */
 private function getQuizMaster($ids)
 {
     $m = new WpProQuiz_Model_QuizMapper();
     $r = array();
     foreach ($ids as $id) {
         $master = $m->fetch($id);
         if ($master->getId() > 0) {
             $r[] = $master;
         }
     }
     return $r;
 }
 /**
  *
  * @param WpProQuiz_Model_Quiz $quiz
  * @return void|boolean
  */
 public function save($quiz = null)
 {
     $quizId = $this->_post['quizId'];
     $array = $this->_post['results'];
     $lockIp = $this->getIp();
     $userId = get_current_user_id();
     if ($lockIp === false) {
         return false;
     }
     if ($quiz === null) {
         $quizMapper = new WpProQuiz_Model_QuizMapper();
         $quiz = $quizMapper->fetch($quizId);
     }
     if (!$quiz->isStatisticsOn()) {
         return false;
     }
     $values = $this->makeDataList($quizId, $array, $quiz->getQuizModus());
     $formValues = $this->makeFormData($quiz, isset($this->_post['forms']) ? $this->_post['forms'] : null);
     if ($values === false) {
         return false;
     }
     if ($quiz->getStatisticsIpLock() > 0) {
         $lockMapper = new WpProQuiz_Model_LockMapper();
         $lockTime = $quiz->getStatisticsIpLock() * 60;
         $lockMapper->deleteOldLock($lockTime, $quiz->getId(), time(), WpProQuiz_Model_Lock::TYPE_STATISTIC);
         if ($lockMapper->isLock($quizId, $lockIp, $userId, WpProQuiz_Model_Lock::TYPE_STATISTIC)) {
             return false;
         }
         $lock = new WpProQuiz_Model_Lock();
         $lock->setQuizId($quizId)->setLockIp($lockIp)->setUserId($userId)->setLockType(WpProQuiz_Model_Lock::TYPE_STATISTIC)->setLockDate(time());
         $lockMapper->insert($lock);
     }
     $statisticRefModel = new WpProQuiz_Model_StatisticRefModel();
     $statisticRefModel->setCreateTime(time());
     $statisticRefModel->setUserId($userId);
     $statisticRefModel->setQuizId($quizId);
     $statisticRefModel->setFormData($formValues);
     $statisticRefMapper = new WpProQuiz_Model_StatisticRefMapper();
     $statisticRefMapper->statisticSave($statisticRefModel, $values);
     return true;
 }
 public function showAction($id)
 {
     $view = new WpProQuiz_View_FrontQuiz();
     $quizMapper = new WpProQuiz_Model_QuizMapper();
     $questionMapper = new WpProQuiz_Model_QuestionMapper();
     $categoryMapper = new WpProQuiz_Model_CategoryMapper();
     $formMapper = new WpProQuiz_Model_FormMapper();
     $quiz = $quizMapper->fetch($id);
     if ($quiz->isShowMaxQuestion() && $quiz->getShowMaxQuestionValue() > 0) {
         $value = $quiz->getShowMaxQuestionValue();
         if ($quiz->isShowMaxQuestionPercent()) {
             $count = $questionMapper->count($id);
             $value = ceil($count * $value / 100);
         }
         $question = $questionMapper->fetchAll($id, true, $value);
     } else {
         $question = $questionMapper->fetchAll($id);
     }
     $view->quiz = $quiz;
     $view->question = $question;
     $view->category = $categoryMapper->fetchByQuiz($quiz->getId());
     $view->forms = $formMapper->fetch($quiz->getId());
     $view->show(true);
 }
 public static function ajaxLoadCopyQuestion($data)
 {
     if (!current_user_can('wpProQuiz_edit_quiz')) {
         echo json_encode(array());
         exit;
     }
     $quizId = $data['quizId'];
     $quizMapper = new WpProQuiz_Model_QuizMapper();
     $questionMapper = new WpProQuiz_Model_QuestionMapper();
     $data = array();
     $quiz = $quizMapper->fetchAll();
     foreach ($quiz as $qz) {
         if ($qz->getId() == $quizId) {
             continue;
         }
         $question = $questionMapper->fetchAll($qz->getId());
         $questionArray = array();
         foreach ($question as $qu) {
             $questionArray[] = array('name' => $qu->getTitle(), 'id' => $qu->getId());
         }
         $data[] = array('name' => $qz->getName(), 'id' => $qz->getId(), 'question' => $questionArray);
     }
     return json_encode($data);
 }
 public function fetchCountQuestions()
 {
     $m = new WpProQuiz_Model_QuizMapper();
     return $m->countQuestion($this->_id);
 }
 public static function ajaxShowFrontToplist($data)
 {
     // workaround ...
     $_POST = $_POST['data'];
     $quizIds = empty($data['quizIds']) ? array() : array_unique((array) $data['quizIds']);
     $toplistMapper = new WpProQuiz_Model_ToplistMapper();
     $quizMapper = new WpProQuiz_Model_QuizMapper();
     $j = array();
     foreach ($quizIds as $quizId) {
         $quiz = $quizMapper->fetch($quizId);
         if ($quiz == null || $quiz->getId() == 0) {
             continue;
         }
         $toplist = $toplistMapper->fetch($quizId, $quiz->getToplistDataShowLimit(), $quiz->getToplistDataSort());
         foreach ($toplist as $tp) {
             $j[$quizId][] = array('name' => $tp->getName(), 'date' => WpProQuiz_Helper_Until::convertTime($tp->getDate(), get_option('wpProQuiz_toplistDataFormat', 'Y/m/d g:i A')), 'points' => $tp->getPoints(), 'result' => $tp->getResult());
         }
     }
     return json_encode($j);
 }
 public function saveImport($ids)
 {
     $quizMapper = new WpProQuiz_Model_QuizMapper();
     $questionMapper = new WpProQuiz_Model_QuestionMapper();
     $categoryMapper = new WpProQuiz_Model_CategoryMapper();
     $formMapper = new WpProQuiz_Model_FormMapper();
     $data = $this->getImportData();
     $categoryArray = $categoryMapper->getCategoryArrayForImport();
     $categoryArrayQuiz = $categoryMapper->getCategoryArrayForImport(WpProQuiz_Model_Category::CATEGORY_TYPE_QUIZ);
     foreach ($data['master'] as $quiz) {
         if (get_class($quiz) !== 'WpProQuiz_Model_Quiz') {
             continue;
         }
         $oldId = $quiz->getId();
         if ($ids !== false && !in_array($oldId, $ids)) {
             continue;
         }
         $quiz->setId(0);
         $quiz->setCategoryId(0);
         if (trim($quiz->getCategoryName()) != '') {
             if (isset($categoryArrayQuiz[strtolower($quiz->getCategoryName())])) {
                 $quiz->setCategoryId($categoryArrayQuiz[strtolower($quiz->getCategoryName())]);
             } else {
                 $categoryModel = new WpProQuiz_Model_Category();
                 $categoryModel->setCategoryName($quiz->getCategoryName());
                 $categoryModel->setType(WpProQuiz_Model_Category::CATEGORY_TYPE_QUIZ);
                 $categoryMapper->save($categoryModel);
                 $quiz->setCategoryId($categoryModel->getCategoryId());
                 $categoryArrayQuiz[strtolower($quiz->getCategoryName())] = $categoryModel->getCategoryId();
             }
         }
         $quizMapper->save($quiz);
         if (isset($data['forms']) && isset($data['forms'][$oldId])) {
             $sort = 0;
             foreach ($data['forms'][$oldId] as $form) {
                 $form->setQuizId($quiz->getId());
                 $form->setSort($sort++);
             }
             $formMapper->update($data['forms'][$oldId]);
         }
         $sort = 0;
         foreach ($data['question'][$oldId] as $question) {
             if (get_class($question) !== 'WpProQuiz_Model_Question') {
                 continue;
             }
             $question->setQuizId($quiz->getId());
             $question->setId(0);
             $question->setSort($sort++);
             $question->setCategoryId(0);
             if (trim($question->getCategoryName()) != '') {
                 if (isset($categoryArray[strtolower($question->getCategoryName())])) {
                     $question->setCategoryId($categoryArray[strtolower($question->getCategoryName())]);
                 } else {
                     $categoryModel = new WpProQuiz_Model_Category();
                     $categoryModel->setCategoryName($question->getCategoryName());
                     $categoryMapper->save($categoryModel);
                     $question->setCategoryId($categoryModel->getCategoryId());
                     $categoryArray[strtolower($question->getCategoryName())] = $categoryModel->getCategoryId();
                 }
             }
             $questionMapper->save($question);
         }
     }
     return true;
 }
 public static function ajaxQuizLoadData($data)
 {
     $id = $data['quizId'];
     $view = new WpProQuiz_View_FrontQuiz();
     $quizMapper = new WpProQuiz_Model_QuizMapper();
     $questionMapper = new WpProQuiz_Model_QuestionMapper();
     $categoryMapper = new WpProQuiz_Model_CategoryMapper();
     $formMapper = new WpProQuiz_Model_FormMapper();
     $quiz = $quizMapper->fetch($id);
     if ($quiz->isShowMaxQuestion() && $quiz->getShowMaxQuestionValue() > 0) {
         $value = $quiz->getShowMaxQuestionValue();
         if ($quiz->isShowMaxQuestionPercent()) {
             $count = $questionMapper->count($id);
             $value = ceil($count * $value / 100);
         }
         $question = $questionMapper->fetchAll($id, true, $value);
     } else {
         $question = $questionMapper->fetchAll($id);
     }
     if (empty($quiz) || empty($question)) {
         return null;
     }
     $view->quiz = $quiz;
     $view->question = $question;
     $view->category = $categoryMapper->fetchByQuiz($quiz->getId());
     $view->forms = $formMapper->fetch($quiz->getId());
     return json_encode($view->getQuizData());
 }
 private function importData($o, $ids = false, $version = '1')
 {
     $quizMapper = new WpProQuiz_Model_QuizMapper();
     $questionMapper = new WpProQuiz_Model_QuestionMapper();
     $categoryMapper = new WpProQuiz_Model_CategoryMapper();
     $formMapper = new WpProQuiz_Model_FormMapper();
     $categoryArray = $categoryMapper->getCategoryArrayForImport();
     $categoryArrayQuiz = $categoryMapper->getCategoryArrayForImport(WpProQuiz_Model_Category::CATEGORY_TYPE_QUIZ);
     foreach ($o['master'] as $master) {
         if (get_class($master) !== 'WpProQuiz_Model_Quiz') {
             continue;
         }
         $oldId = $master->getId();
         if ($ids !== false) {
             if (!in_array($oldId, $ids)) {
                 continue;
             }
         }
         $master->setId(0);
         if ($version == 3) {
             if ($master->isQuestionOnSinglePage()) {
                 $master->setQuizModus(WpProQuiz_Model_Quiz::QUIZ_MODUS_SINGLE);
             } else {
                 if ($master->isCheckAnswer()) {
                     $master->setQuizModus(WpProQuiz_Model_Quiz::QUIZ_MODUS_CHECK);
                 } else {
                     if ($master->isBackButton()) {
                         $master->setQuizModus(WpProQuiz_Model_Quiz::QUIZ_MODUS_BACK_BUTTON);
                     } else {
                         $master->setQuizModus(WpProQuiz_Model_Quiz::QUIZ_MODUS_NORMAL);
                     }
                 }
             }
         }
         $master->setCategoryId(0);
         if (trim($master->getCategoryName()) != '') {
             if (isset($categoryArrayQuiz[strtolower($master->getCategoryName())])) {
                 $master->setCategoryId($categoryArrayQuiz[strtolower($master->getCategoryName())]);
             } else {
                 $categoryModel = new WpProQuiz_Model_Category();
                 $categoryModel->setCategoryName($master->getCategoryName());
                 $categoryModel->setType(WpProQuiz_Model_Category::CATEGORY_TYPE_QUIZ);
                 $categoryMapper->save($categoryModel);
                 $master->setCategoryId($categoryModel->getCategoryId());
                 $categoryArrayQuiz[strtolower($master->getCategoryName())] = $categoryModel->getCategoryId();
             }
         }
         $quizMapper->save($master);
         if (isset($o['forms']) && isset($o['forms'][$oldId])) {
             foreach ($o['forms'][$oldId] as $form) {
                 /** @var WpProQuiz_Model_Form $form **/
                 $form->setFormId(0);
                 $form->setQuizId($master->getId());
             }
             $formMapper->update($o['forms'][$oldId]);
         }
         $sort = 0;
         foreach ($o['question'][$oldId] as $question) {
             if (get_class($question) !== 'WpProQuiz_Model_Question') {
                 continue;
             }
             $question->setQuizId($master->getId());
             $question->setId(0);
             $question->setSort($sort++);
             $question->setCategoryId(0);
             if (trim($question->getCategoryName()) != '') {
                 if (isset($categoryArray[strtolower($question->getCategoryName())])) {
                     $question->setCategoryId($categoryArray[strtolower($question->getCategoryName())]);
                 } else {
                     $categoryModel = new WpProQuiz_Model_Category();
                     $categoryModel->setCategoryName($question->getCategoryName());
                     $categoryMapper->save($categoryModel);
                     $question->setCategoryId($categoryModel->getCategoryId());
                     $categoryArray[strtolower($question->getCategoryName())] = $categoryModel->getCategoryId();
                 }
             }
             $questionMapper->save($question);
         }
     }
     return true;
 }
 public static function ajaxCompletedQuiz($data)
 {
     // workaround ...
     $_POST = $_POST['data'];
     $ctr = new WpProQuiz_Controller_Quiz();
     $lockMapper = new WpProQuiz_Model_LockMapper();
     $quizMapper = new WpProQuiz_Model_QuizMapper();
     $categoryMapper = new WpProQuiz_Model_CategoryMapper();
     $formMapper = new WpProQuiz_Model_FormMapper();
     $is100P = $data['results']['comp']['result'] == 100;
     $quiz = $quizMapper->fetch($data['quizId']);
     if ($quiz === null || $quiz->getId() <= 0) {
         return json_encode(array());
     }
     $categories = $categoryMapper->fetchByQuiz($quiz->getId());
     $forms = $formMapper->fetch($quiz->getId());
     $ctr->setResultCookie($quiz);
     $ctr->emailNote($quiz, $data['results']['comp'], $categories, $forms, isset($data['forms']) ? $data['forms'] : array());
     if (!$ctr->isPreLockQuiz($quiz)) {
         $statistics = new WpProQuiz_Controller_Statistics();
         $statistics->save($quiz);
         do_action('wp_pro_quiz_completed_quiz');
         if ($is100P) {
             do_action('wp_pro_quiz_completed_quiz_100_percent');
         }
         return json_encode(array());
     }
     $lockMapper->deleteOldLock(60 * 60 * 24 * 7, $data['quizId'], time(), WpProQuiz_Model_Lock::TYPE_QUIZ, 0);
     $lockIp = $lockMapper->isLock($data['quizId'], $ctr->getIp(), get_current_user_id(), WpProQuiz_Model_Lock::TYPE_QUIZ);
     $lockCookie = false;
     $cookieTime = $quiz->getQuizRunOnceTime();
     $cookieJson = null;
     if (isset($ctr->_cookie['wpProQuiz_lock']) && get_current_user_id() == 0 && $quiz->isQuizRunOnceCookie()) {
         $cookieJson = json_decode($ctr->_cookie['wpProQuiz_lock'], true);
         if ($cookieJson !== false) {
             if (isset($cookieJson[$data['quizId']]) && $cookieJson[$data['quizId']] == $cookieTime) {
                 $lockCookie = true;
             }
         }
     }
     if (!$lockIp && !$lockCookie) {
         $statistics = new WpProQuiz_Controller_Statistics();
         $statistics->save($quiz);
         do_action('wp_pro_quiz_completed_quiz');
         if ($is100P) {
             do_action('wp_pro_quiz_completed_quiz_100_percent');
         }
         if (get_current_user_id() == 0 && $quiz->isQuizRunOnceCookie()) {
             $cookieData = array();
             if ($cookieJson !== null || $cookieJson !== false) {
                 $cookieData = $cookieJson;
             }
             $cookieData[$data['quizId']] = $quiz->getQuizRunOnceTime();
             $url = parse_url(get_bloginfo('url'));
             setcookie('wpProQuiz_lock', json_encode($cookieData), time() + 60 * 60 * 24 * 60, empty($url['path']) ? '/' : $url['path']);
         }
         $lock = new WpProQuiz_Model_Lock();
         $lock->setUserId(get_current_user_id());
         $lock->setQuizId($data['quizId']);
         $lock->setLockDate(time());
         $lock->setLockIp($ctr->getIp());
         $lock->setLockType(WpProQuiz_Model_Lock::TYPE_QUIZ);
         $lockMapper->insert($lock);
     }
     return json_encode(array());
 }
 public static function ajaxSetQuizMultipleCategories($data, $func)
 {
     if (!current_user_can('wpProQuiz_edit_quiz')) {
         return json_encode(array());
     }
     $quizMapper = new WpProQuiz_Model_QuizMapper();
     $quizMapper->setMultipeCategories($data['quizIds'], $data['categoryId']);
     return json_encode(array());
 }
 /**
  * @deprecated
  */
 public static function ajaxLoadFormOverview($data, $func)
 {
     if (!current_user_can('wpProQuiz_show_statistics')) {
         return json_encode(array());
     }
     $statisticRefMapper = new WpProQuiz_Model_StatisticRefMapper();
     $quizMapper = new WpProQuiz_Model_QuizMapper();
     $quizId = $data['quizId'];
     $page = isset($data['page']) && $data['page'] > 0 ? $data['page'] : 1;
     $limit = $data['pageLimit'];
     $start = $limit * ($page - 1);
     $statisticModel = $statisticRefMapper->fetchFormOverview($quizId, $start, $limit, $data['onlyUser']);
     $items = array();
     $maxPoints = $quizMapper->sumQuestionPoints($quizId);
     $sumQuestion = $quizMapper->countQuestion($quizId);
     foreach ($statisticModel as $model) {
         /*@var $model WpProQuiz_Model_StatisticFormOverview */
         if (!$model->getUserId()) {
             $model->setUserName(__('Anonymous', 'wp-pro-quiz'));
         }
         $sum = $model->getCorrectCount() + $model->getIncorrectCount();
         $result = round(100 * $model->getPoints() / ($sum * $maxPoints / $sumQuestion), 2) . '%';
         $items[] = array('userName' => $model->getUserName(), 'userId' => $model->getUserId(), 'testId' => $model->getStatisticRefId(), 'date' => WpProQuiz_Helper_Until::convertTime($model->getCreateTime(), get_option('wpProQuiz_statisticTimeFormat', 'Y/m/d g:i A')), 'result' => $result);
     }
     $d = array('items' => $items);
     if (isset($data['nav']) && $data['nav']) {
         $count = $statisticRefMapper->countFormOverview($quizId, $data['onlyUser']);
         $d['page'] = ceil(($count > 0 ? $count : 1) / $limit);
     }
     return json_encode($d);
 }