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 function showAction()
 {
     if (!current_user_can('wpProQuiz_show')) {
         wp_die(__('You do not have sufficient permissions to access this page.'));
     }
     $m = new WpProQuiz_Model_QuizMapper();
     $mm = new WpProQuiz_Model_QuestionMapper();
     $categoryMapper = new WpProQuiz_Model_CategoryMapper();
     $view = new WpProQuiz_View_QuestionOverall();
     $view->quiz = $m->fetch($this->_quizId);
     $per_page = (int) get_user_option('wp_pro_quiz_question_overview_per_page');
     if (empty($per_page) || $per_page < 1) {
         $per_page = 20;
     }
     $current_page = $this->getCurrentPage();
     $search = isset($_GET['s']) ? trim($_GET['s']) : '';
     $orderBy = isset($_GET['orderby']) ? trim($_GET['orderby']) : '';
     $order = isset($_GET['order']) ? trim($_GET['order']) : '';
     $offset = ($current_page - 1) * $per_page;
     $limit = $per_page;
     $filter = array();
     if (isset($_GET['cat'])) {
         $filter['cat'] = $_GET['cat'];
     }
     $result = $mm->fetchTable($this->_quizId, $orderBy, $order, $search, $limit, $offset, $filter);
     $view->questionItems = $result['questions'];
     $view->questionCount = $result['count'];
     $view->categoryItems = $categoryMapper->fetchAll(WpProQuiz_Model_Category::CATEGORY_TYPE_QUESTION);
     $view->perPage = $per_page;
     $view->show();
 }
 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 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());
 }
 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());
 }