public function save(WpProQuiz_Model_Quiz $data) { if ($data->isResultGradeEnabled()) { $resultText = serialize($data->getResultText()); } else { $resultText = $data->getResultText(); } $set = array('name' => $data->getName(), 'text' => $data->getText(), 'result_text' => $resultText, 'title_hidden' => (int) $data->isTitleHidden(), 'btn_restart_quiz_hidden' => (int) $data->isBtnRestartQuizHidden(), 'btn_view_question_hidden' => (int) $data->isBtnViewQuestionHidden(), 'question_random' => (int) $data->isQuestionRandom(), 'answer_random' => (int) $data->isAnswerRandom(), 'time_limit' => (int) $data->getTimeLimit(), 'statistics_on' => (int) $data->isStatisticsOn(), 'statistics_ip_lock' => (int) $data->getStatisticsIpLock(), 'result_grade_enabled' => (int) $data->isResultGradeEnabled(), 'show_points' => (int) $data->isShowPoints(), 'quiz_run_once' => (int) $data->isQuizRunOnce(), 'quiz_run_once_type' => $data->getQuizRunOnceType(), 'quiz_run_once_cookie' => (int) $data->isQuizRunOnceCookie(), 'quiz_run_once_time' => (int) $data->getQuizRunOnceTime(), 'numbered_answer' => (int) $data->isNumberedAnswer(), 'hide_answer_message_box' => (int) $data->isHideAnswerMessageBox(), 'disabled_answer_mark' => (int) $data->isDisabledAnswerMark(), 'show_max_question' => (int) $data->isShowMaxQuestion(), 'show_max_question_value' => (int) $data->getShowMaxQuestionValue(), 'show_max_question_percent' => (int) $data->isShowMaxQuestionPercent(), 'toplist_activated' => (int) $data->isToplistActivated(), 'toplist_data' => $data->getToplistData(), 'show_average_result' => (int) $data->isShowAverageResult(), 'prerequisite' => (int) $data->isPrerequisite(), 'quiz_modus' => (int) $data->getQuizModus(), 'show_review_question' => (int) $data->isShowReviewQuestion(), 'quiz_summary_hide' => (int) $data->isQuizSummaryHide(), 'skip_question_disabled' => (int) $data->isSkipQuestionDisabled(), 'email_notification' => $data->getEmailNotification(), 'user_email_notification' => (int) $data->isUserEmailNotification(), 'show_category_score' => (int) $data->isShowCategoryScore(), 'hide_result_correct_question' => (int) $data->isHideResultCorrectQuestion(), 'hide_result_quiz_time' => (int) $data->isHideResultQuizTime(), 'hide_result_points' => (int) $data->isHideResultPoints(), 'autostart' => (int) $data->isAutostart(), 'forcing_question_solve' => (int) $data->isForcingQuestionSolve(), 'hide_question_position_overview' => (int) $data->isHideQuestionPositionOverview(), 'hide_question_numbering' => (int) $data->isHideQuestionNumbering(), 'form_activated' => (int) $data->isFormActivated(), 'form_show_position' => $data->getFormShowPosition(), 'start_only_registered_user' => (int) $data->isStartOnlyRegisteredUser(), 'questions_per_page' => $data->getQuestionsPerPage(), 'sort_categories' => (int) $data->isSortCategories(), 'show_category' => (int) $data->isShowCategory(), 'category_id' => (int) $data->getCategoryId(), 'admin_email' => $data->getAdminEmail(true), 'user_email' => $data->getUserEmail(true), 'plugin_container' => $data->getPluginContainer(true)); if ($data->getId() != 0) { $result = $this->_wpdb->update($this->_table, $set, array('id' => $data->getId()), array('%s', '%s', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%s', '%s', '%s'), array('%d')); } else { $result = $this->_wpdb->insert($this->_table, $set, array('%s', '%s', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%s', '%s', '%s')); $data->setId($this->_wpdb->insert_id); } if ($result === false) { return null; } return $data; }
/** * @param DOMDocument $dom * @param WpProQuiz_Model_Quiz $quiz * @param $forms * @return DOMElement */ private function getQuizElement($dom, $quiz, $forms) { $quizElement = $dom->createElement('quiz'); $title = $dom->createElement('title'); $title->appendChild($dom->createCDATASection($quiz->getName())); $title->setAttribute('titleHidden', $this->booleanToTrueOrFalse($quiz->isTitleHidden())); $quizElement->appendChild($title); $quizElement->appendChild($text = $dom->createElement('text')); $text->appendChild($dom->createCDATASection($quiz->getText())); $quizElement->appendChild($dom->createElement('category', $quiz->getCategoryName())); if (is_array($quiz->getResultText())) { $resultArray = $quiz->getResultText(); $result = $dom->createElement('resultText'); $result->setAttribute('gradeEnabled', $this->booleanToTrueOrFalse($quiz->isResultGradeEnabled())); for ($i = 0; $i < count($resultArray); $i++) { $r = $dom->createElement('text'); $r->appendChild($dom->createCDATASection($resultArray['text'][$i])); $r->setAttribute('prozent', $resultArray['prozent'][$i]); $result->appendChild($r); } $quizElement->appendChild($result); } else { $result = $dom->createElement('resultText'); $result->setAttribute('gradeEnabled', $this->booleanToTrueOrFalse($quiz->isResultGradeEnabled())); $result->appendChild($dom->createCDATASection($quiz->getResultText())); $quizElement->appendChild($result); } $quizElement->appendChild($dom->createElement('btnRestartQuizHidden', $this->booleanToTrueOrFalse($quiz->isBtnRestartQuizHidden()))); $quizElement->appendChild($dom->createElement('btnViewQuestionHidden', $this->booleanToTrueOrFalse($quiz->isBtnViewQuestionHidden()))); $quizElement->appendChild($dom->createElement('questionRandom', $this->booleanToTrueOrFalse($quiz->isQuestionRandom()))); $quizElement->appendChild($dom->createElement('answerRandom', $this->booleanToTrueOrFalse($quiz->isAnswerRandom()))); $quizElement->appendChild($dom->createElement('timeLimit', $quiz->getTimeLimit())); $quizElement->appendChild($dom->createElement('showPoints', $this->booleanToTrueOrFalse($quiz->isShowPoints()))); $statistic = $dom->createElement('statistic'); $statistic->setAttribute('activated', $this->booleanToTrueOrFalse($quiz->isStatisticsOn())); $statistic->setAttribute('ipLock', $quiz->getStatisticsIpLock()); $quizElement->appendChild($statistic); $quizElement->appendChild($quizRunOnce = $dom->createElement('quizRunOnce', $this->booleanToTrueOrFalse($quiz->isQuizRunOnce()))); $quizRunOnce->setAttribute('type', $quiz->getQuizRunOnceType()); $quizRunOnce->setAttribute('cookie', $this->booleanToTrueOrFalse($quiz->isQuizRunOnceCookie())); $quizRunOnce->setAttribute('time', $quiz->getQuizRunOnceTime()); $quizElement->appendChild($dom->createElement('numberedAnswer', $this->booleanToTrueOrFalse($quiz->isNumberedAnswer()))); $quizElement->appendChild($dom->createElement('hideAnswerMessageBox', $this->booleanToTrueOrFalse($quiz->isHideAnswerMessageBox()))); $quizElement->appendChild($dom->createElement('disabledAnswerMark', $this->booleanToTrueOrFalse($quiz->isDisabledAnswerMark()))); $quizElement->appendChild($showMaxQuestion = $dom->createElement('showMaxQuestion', $this->booleanToTrueOrFalse($quiz->isShowMaxQuestion()))); $showMaxQuestion->setAttribute('showMaxQuestionValue', $quiz->getShowMaxQuestionValue()); $showMaxQuestion->setAttribute('showMaxQuestionPercent', $this->booleanToTrueOrFalse($quiz->isShowMaxQuestionPercent())); //Toplist $toplist = $dom->createElement('toplist'); $toplist->setAttribute('activated', $this->booleanToTrueOrFalse($quiz->isToplistActivated())); $toplist->appendChild($dom->createElement('toplistDataAddPermissions', $quiz->getToplistDataAddPermissions())); $toplist->appendChild($dom->createElement('toplistDataSort', $quiz->getToplistDataSort())); $toplist->appendChild($dom->createElement('toplistDataAddMultiple', $this->booleanToTrueOrFalse($quiz->isToplistDataAddMultiple()))); $toplist->appendChild($dom->createElement('toplistDataAddBlock', $quiz->getToplistDataAddBlock())); $toplist->appendChild($dom->createElement('toplistDataShowLimit', $quiz->getToplistDataShowLimit())); $toplist->appendChild($dom->createElement('toplistDataShowIn', $quiz->getToplistDataShowIn())); $toplist->appendChild($dom->createElement('toplistDataCaptcha', $this->booleanToTrueOrFalse($quiz->isToplistDataCaptcha()))); $toplist->appendChild($dom->createElement('toplistDataAddAutomatic', $this->booleanToTrueOrFalse($quiz->isToplistDataAddAutomatic()))); $quizElement->appendChild($toplist); $quizElement->appendChild($dom->createElement('showAverageResult', $this->booleanToTrueOrFalse($quiz->isShowAverageResult()))); $quizElement->appendChild($dom->createElement('prerequisite', $this->booleanToTrueOrFalse($quiz->isPrerequisite()))); $quizElement->appendChild($dom->createElement('showReviewQuestion', $this->booleanToTrueOrFalse($quiz->isShowReviewQuestion()))); $quizElement->appendChild($dom->createElement('quizSummaryHide', $this->booleanToTrueOrFalse($quiz->isQuizSummaryHide()))); $quizElement->appendChild($dom->createElement('skipQuestionDisabled', $this->booleanToTrueOrFalse($quiz->isSkipQuestionDisabled()))); $quizElement->appendChild($dom->createElement('emailNotification', $quiz->getEmailNotification())); $quizElement->appendChild($dom->createElement('userEmailNotification', $this->booleanToTrueOrFalse($quiz->isUserEmailNotification()))); $quizElement->appendChild($dom->createElement('showCategoryScore', $this->booleanToTrueOrFalse($quiz->isShowCategoryScore()))); $quizElement->appendChild($dom->createElement('hideResultCorrectQuestion', $this->booleanToTrueOrFalse($quiz->isHideResultCorrectQuestion()))); $quizElement->appendChild($dom->createElement('hideResultQuizTime', $this->booleanToTrueOrFalse($quiz->isHideResultQuizTime()))); $quizElement->appendChild($dom->createElement('hideResultPoints', $this->booleanToTrueOrFalse($quiz->isHideResultPoints()))); $quizElement->appendChild($dom->createElement('autostart', $this->booleanToTrueOrFalse($quiz->isAutostart()))); $quizElement->appendChild($dom->createElement('forcingQuestionSolve', $this->booleanToTrueOrFalse($quiz->isForcingQuestionSolve()))); $quizElement->appendChild($dom->createElement('hideQuestionPositionOverview', $this->booleanToTrueOrFalse($quiz->isHideQuestionPositionOverview()))); $quizElement->appendChild($dom->createElement('hideQuestionNumbering', $this->booleanToTrueOrFalse($quiz->isHideQuestionNumbering()))); //0.27 $quizElement->appendChild($dom->createElement('sortCategories', $this->booleanToTrueOrFalse($quiz->isSortCategories()))); $quizElement->appendChild($dom->createElement('showCategory', $this->booleanToTrueOrFalse($quiz->isShowCategory()))); $quizModus = $dom->createElement('quizModus', $quiz->getQuizModus()); $quizModus->setAttribute('questionsPerPage', $quiz->getQuestionsPerPage()); $quizElement->appendChild($quizModus); $quizElement->appendChild($dom->createElement('startOnlyRegisteredUser', $this->booleanToTrueOrFalse($quiz->isStartOnlyRegisteredUser()))); $formsElement = $dom->createElement('forms'); $formsElement->setAttribute('activated', $this->booleanToTrueOrFalse($quiz->isFormActivated())); $formsElement->setAttribute('position', $quiz->getFormShowPosition()); //0.29 if ($quiz->getAdminEmail() !== null) { /* @var $adminEmail WpProQuiz_Model_Email */ $adminEmail = $quiz->getAdminEmail(); $adminEmailXml = $dom->createElement('adminEmail'); /* * $qElement->appendChild($title = $dom->createElement('title')); $title->appendChild($dom->createCDATASection($question->getTitle())); */ $adminEmailXml->appendChild($dom->createElement('to', $adminEmail->getTo())); $adminEmailXml->appendChild($dom->createElement('form', $adminEmail->getFrom())); $adminEmailXml->appendChild($dom->createElement('subject', $adminEmail->getSubject())); $adminEmailXml->appendChild($dom->createElement('html', $this->booleanToTrueOrFalse($adminEmail->isHtml()))); $adminEmailXml->appendChild($message = $dom->createElement('message')); $message->appendChild($dom->createCDATASection($adminEmail->getMessage())); $quizElement->appendChild($adminEmailXml); } if ($quiz->getUserEmail() !== null) { /* @var $adminEmail WpProQuiz_Model_Email */ $userEmail = $quiz->getUserEmail(); $userEmaillXml = $dom->createElement('userEmail'); $userEmaillXml->appendChild($dom->createElement('to', $userEmail->getTo())); $userEmaillXml->appendChild($dom->createElement('toUser', $this->booleanToTrueOrFalse($userEmail->isToUser()))); $userEmaillXml->appendChild($dom->createElement('toForm', $this->booleanToTrueOrFalse($userEmail->isToForm()))); $userEmaillXml->appendChild($dom->createElement('form', $userEmail->getFrom())); $userEmaillXml->appendChild($dom->createElement('subject', $userEmail->getSubject())); $userEmaillXml->appendChild($dom->createElement('html', $this->booleanToTrueOrFalse($userEmail->isHtml()))); $userEmaillXml->appendChild($message = $dom->createElement('message')); $message->appendChild($dom->createCDATASection($userEmail->getMessage())); $quizElement->appendChild($userEmaillXml); } foreach ($forms as $form) { /** @var WpProQuiz_Model_Form $form * */ $formElement = $dom->createElement('form'); $formElement->setAttribute('type', $form->getType()); $formElement->setAttribute('required', $this->booleanToTrueOrFalse($form->isRequired())); $formElement->setAttribute('fieldname', $form->getFieldname()); if ($form->getData() !== null) { $data = $form->getData(); foreach ($data as $d) { $formDataElement = $dom->createElement('formData', $d); $formElement->appendChild($formDataElement); } } $formsElement->appendChild($formElement); } $quizElement->appendChild($formsElement); return $quizElement; }
private function adminEmailOption() { /** @var WpProQuiz_Model_Email **/ $email = $this->quiz->getAdminEmail(); $email = $email === null ? WpProQuiz_Model_Email::getDefault(true) : $email; ?> <div class="postbox" id="adminEmailSettings"> <h3 class="hndle"><?php _e('Admin e-mail settings', 'wp-pro-quiz'); ?> </h3> <div class="inside"> <table class="form-table"> <tbody> <tr> <th scope="row"> <?php _e('Admin e-mail notification', 'wp-pro-quiz'); ?> </th> <td> <fieldset> <legend class="screen-reader-text"> <span><?php _e('Admin e-mail notification', 'wp-pro-quiz'); ?> </span> </legend> <label> <input type="radio" name="emailNotification" value="<?php echo WpProQuiz_Model_Quiz::QUIZ_EMAIL_NOTE_NONE; ?> " <?php $this->checked($this->quiz->getEmailNotification(), WpProQuiz_Model_Quiz::QUIZ_EMAIL_NOTE_NONE); ?> > <?php _e('Deactivate', 'wp-pro-quiz'); ?> </label> <label> <input type="radio" name="emailNotification" value="<?php echo WpProQuiz_Model_Quiz::QUIZ_EMAIL_NOTE_REG_USER; ?> " <?php $this->checked($this->quiz->getEmailNotification(), WpProQuiz_Model_Quiz::QUIZ_EMAIL_NOTE_REG_USER); ?> > <?php _e('for registered users only', 'wp-pro-quiz'); ?> </label> <label> <input type="radio" name="emailNotification" value="<?php echo WpProQuiz_Model_Quiz::QUIZ_EMAIL_NOTE_ALL; ?> " <?php $this->checked($this->quiz->getEmailNotification(), WpProQuiz_Model_Quiz::QUIZ_EMAIL_NOTE_ALL); ?> > <?php _e('for all users', 'wp-pro-quiz'); ?> </label> <p class="description"> <?php _e('If you enable this option, you will be informed if a user completes this quiz.', 'wp-pro-quiz'); ?> </p> </fieldset> </td> </tr> <tr> <th scope="row"> <?php _e('To:', 'wp-pro-quiz'); ?> </th> <td> <label> <input type="text" name="adminEmail[to]" value="<?php echo $email->getTo(); ?> " class="regular-text"> </label> <p class="description"> <?php _e('Separate multiple email addresses with a comma, e.g. wp@test.com, test@test.com', 'wp-pro-quiz'); ?> </p> </td> </tr> <tr> <th scope="row"> <?php _e('From:', 'wp-pro-quiz'); ?> </th> <td> <label> <input type="text" name="adminEmail[from]" value="<?php echo $email->getFrom(); ?> " class="regular-text"> </label> <!-- <p class="description"> --> <?php //_e('Server-Adresse empfohlen, z.B. info@YOUR-PAGE.com', 'wp-pro-quiz'); ?> <!-- </p> --> </td> </tr> <tr> <th scope="row"> <?php _e('Subject:', 'wp-pro-quiz'); ?> </th> <td> <label> <input type="text" name="adminEmail[subject]" value="<?php echo $email->getSubject(); ?> " class="regular-text"> </label> </td> </tr> <tr> <th scope="row"> <?php _e('HTML', 'wp-pro-quiz'); ?> </th> <td> <label> <input type="checkbox" name="adminEmail[html]" value="1" <?php $this->checked($email->isHtml()); ?> > <?php _e('Activate', 'wp-pro-quiz'); ?> </label> </td> </tr> <tr> <th scope="row"> <?php _e('Message body:', 'wp-pro-quiz'); ?> </th> <td> <?php wp_editor($email->getMessage(), 'adminEmailEditor', array('textarea_rows' => 20, 'textarea_name' => 'adminEmail[message]')); ?> <div style="padding-top: 10px;"> <table style="width: 100%;"> <thead> <tr> <th style="padding: 0;"> <?php _e('Allowed variables', 'wp-pro-quiz'); ?> </th> <th style="padding: 0;"> <?php _e('Custom fields - Variables', 'wp-pro-quiz'); ?> </th> </tr> </thead> <tbody> <tr> <td style="vertical-align: top;"> <ul> <li><span>$userId</span> - <?php _e('User-ID', 'wp-pro-quiz'); ?> </li> <li><span>$username</span> - <?php _e('Username', 'wp-pro-quiz'); ?> </li> <li><span>$quizname</span> - <?php _e('Quiz-Name', 'wp-pro-quiz'); ?> </li> <li><span>$result</span> - <?php _e('Result in precent', 'wp-pro-quiz'); ?> </li> <li><span>$points</span> - <?php _e('Reached points', 'wp-pro-quiz'); ?> </li> <li><span>$ip</span> - <?php _e('IP-address of the user', 'wp-pro-quiz'); ?> </li> <li><span>$categories</span> - <?php _e('Category-Overview', 'wp-pro-quiz'); ?> </li> </ul> </td> <td style="vertical-align: top;"> <ul class="formVariables"></ul> </td> </tr> </tbody> </table> </div> </td> </tr> </tbody> </table> </div> </div> <?php }
/** * @param WpProQuiz_Model_Quiz $quiz * @param $result * @param WpProQuiz_Model_Category[] $categories * @param WpProQuiz_Model_Form[] $forms * @param $inputForms */ private function emailNote(WpProQuiz_Model_Quiz $quiz, $result, $categories, $forms, $inputForms) { $user = wp_get_current_user(); $r = array('$userId' => $user->ID, '$username' => $user->display_name, '$quizname' => $quiz->getName(), '$result' => $result['result'] . '%', '$points' => $result['points'], '$ip' => filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP), '$categories' => empty($result['cats']) ? '' : $this->setCategoryOverview($result['cats'], $categories)); if ($quiz->isFormActivated() && $forms !== null) { foreach ($forms as $form) { $value = ''; if ($form->getType() == WpProQuiz_Model_Form::FORM_TYPE_DATE) { if (isset($inputForms[$form->getFormId()])) { $value = $inputForms[$form->getFormId()]['day'] . '-' . $inputForms[$form->getFormId()]['month'] . '-' . $inputForms[$form->getFormId()]['year']; } } else { $value = isset($inputForms[$form->getFormId()]) ? $inputForms[$form->getFormId()] : ''; } $r['$form{' . $form->getSort() . '}'] = esc_html($value); } } if ($user->ID == 0) { $r['$username'] = $r['$ip']; } if ($quiz->isUserEmailNotification()) { $userEmail = $quiz->getUserEmail(); $userAdress = null; if ($userEmail->isToUser() && get_current_user_id() > 0) { $userAdress = $user->user_email; } else { if ($userEmail->isToForm() && $quiz->isFormActivated()) { foreach ($forms as $form) { if ($form->getSort() == $userEmail->getTo()) { if (isset($inputForms[$form->getFormId()])) { $userAdress = $inputForms[$form->getFormId()]; } break; } } } } if (!empty($userAdress) && filter_var($userAdress, FILTER_VALIDATE_EMAIL) !== false) { $msg = str_replace(array_keys($r), $r, $userEmail->getMessage()); $headers = ''; $email = $userEmail->getFrom(); if (!empty($email)) { $headers = 'From: ' . $userEmail->getFrom(); } if ($userEmail->isHtml()) { add_filter('wp_mail_content_type', array($this, 'htmlEmailContent')); } wp_mail($userAdress, $userEmail->getSubject(), $msg, $headers); if ($userEmail->isHtml()) { remove_filter('wp_mail_content_type', array($this, 'htmlEmailContent')); } } } if ($quiz->getEmailNotification() == WpProQuiz_Model_Quiz::QUIZ_EMAIL_NOTE_ALL || get_current_user_id() > 0 && $quiz->getEmailNotification() == WpProQuiz_Model_Quiz::QUIZ_EMAIL_NOTE_REG_USER) { $adminEmail = $quiz->getAdminEmail(); $msg = str_replace(array_keys($r), $r, $adminEmail->getMessage()); $headers = ''; $email = $adminEmail->getFrom(); if (!empty($email)) { $headers = 'From: ' . $adminEmail->getFrom(); } if ($adminEmail->isHtml()) { add_filter('wp_mail_content_type', array($this, 'htmlEmailContent')); } wp_mail($adminEmail->getTo(), $adminEmail->getSubject(), $msg, $headers); if ($adminEmail->isHtml()) { remove_filter('wp_mail_content_type', array($this, 'htmlEmailContent')); } } }