'); define('QUIZREG_MESSAGE_ERROR_BEFORE_QUIZ', t("Quiz error. If you see this message, please contact to site administrator.")); /********************************************************************* DRUPAL HOOKS *********************************************************************/ /** * Implementation of hook_user. */ function quizreg_user($op, &$edit, &$account, $category = NULL) { $dbresult = array(); if ($op == 'register') { if (!$_SESSION['quizreg']['quiz_passed'] && !user_access('administer users')) { $len = drupal_strlen(variable_get('quizreg_quizes', '')); $len = $len - 5; if ($len > 0) { $quizreg_quiz = drupal_substr(variable_get('quizreg_quizes', ''), 5, $len); $sql = "SELECT * FROM {quiz_node_properties} n WHERE n.nid = %d"; $dbresult = db_fetch_object(db_query($sql, $quizreg_quiz)); drupal_set_message(variable_get('quizreg_text', QUIZREG_MESSAGE_BEFORE_QUIZ)); $form = quiz_take_quiz($dbresult); } else { drupal_set_message(QUIZREG_MESSAGE_ERROR_BEFORE_QUIZ, 'error'); //drupal_goto(''); } return $form; } } } /** * Implementation of hook_menu(). */ function quizreg_menu() { $items = array(); $items['admin/settings/quizreg'] = array( 'access arguments' => array('access administration pages'), 'description' => 'Configure settings for the "Quiz for register" module.', 'page arguments' => array('quizreg_settings'), 'page callback' => 'drupal_get_form', 'title' => 'Quiz for register Settings.', 'type' => MENU_NORMAL_ITEM, ); return $items; } /* * * Implementation hook_quiz_finished() * performs actions like sending quiz results over email at the end of quiz. */ function quizreg_quiz_finished($quiz, $score, $rid) { global $user; if (!$user->uid) { // If we are using pass/fail, and they passed. if ($quiz->pass_rate > 0 && $score['percentage_score'] >= $quiz->pass_rate) { $_SESSION['quizreg']['quiz_passed'] = TRUE; if (trim($quiz->summary_pass) != '') { drupal_set_message($quiz->summary_pass); } // Remove session variables. unset($_SESSION['quiz_'. $quiz->nid]); drupal_goto(variable_get('quizreg_after_passed_url', QUIZREG_AFTER_PASSED_QUIZ_REDIRECT_URL)); } // If the user did not pass. else { $_SESSION['quizreg']['quiz_passed'] = FALSE; if (trim($quiz->summary_default) != '') { drupal_set_message(check_markup($quiz->summary_default), 'error'); } } // Remove session variables. //unset($_SESSION['quiz_'. $quiz->nid]); //drupal_goto(variable_get('quizreg_after_failed_url', QUIZREG_AFTER_FAILED_QUIZ_REDIRECT_URL)); } } /********************************************************************* CALLBACKS *********************************************************************/ /** * Callback for admin/settings/quizreg * Defines the settings form using FAPI. */ function quizreg_settings() { // When a user changes the URL of the page the menu will need to be rebuilt. // Submitting the form lands the user right back here. menu_rebuild(); $form = array(); $form['quizreg_text'] = array( '#default_value' => variable_get('quizreg_text', QUIZREG_MESSAGE_BEFORE_QUIZ), '#description' => t("This is the quizreg text. It will show to user before quiz."), '#title' => t("Text before quiz"), '#type' => 'textarea', ); $form['quizreg_quizes'] = array( '#type' => 'select', '#description' => t("Select quiz for users who want to register"), '#default_value' => variable_get('quizreg_quizes', -1), '#options' => array_merge(array(0 => t("- None selected -")), _quizreg_list_of_quizzes()), '#title' => t("Quiz for testing"), '#required' => TRUE, ); $form['quizreg_after_passed_url'] = array( '#default_value' => variable_get('quizreg_after_passed_url', QUIZREG_AFTER_PASSED_QUIZ_REDIRECT_URL), '#description' => t("URL for redirect after passed quiz. user/register as default."), '#title' => t("Redirect after passed quiz"), '#type' => 'textfield', '#required' => TRUE, ); /* $form['quizreg_after_failed_url'] = array( '#default_value' => variable_get('quizreg_after_failed_url', QUIZREG_AFTER_FAILED_QUIZ_REDIRECT_URL), '#description' => t("URL for redirect after failed quiz. <front> as default."), '#title' => t("Redirect after failed quiz"), '#type' => 'textfield', '#required' => TRUE, );*/ return system_settings_form($form); } /** * Validation handler for quizreg_settings() * * @ingroup forms * @see quizreg_settings() */ function quizreg_settings_validate($form, &$form_state) { if (!$form_state['values']['quizreg_quizes']['option']) { form_set_error('quizreg_quizes', t("You must select quiz.")); } } /********************************************************************* INTERNAL *********************************************************************/ /** * Internal function to get the list of available quizes. * @return Data to fill the form */ function _quizreg_list_of_quizzes() { $results = array(); /* This seems to have an unnecessary join in here: $sql = "SELECT n.nid, n.title FROM {node} n WHERE n.type = 'quiz' */ $sql = "SELECT n.nid, n.title FROM {node} n WHERE n.type = 'quiz' ORDER BY n.nid ASC"; $dbresult = db_query(db_rewrite_sql($sql)); while ($line = db_fetch_array($dbresult, $n.nid)) { $results['node/' . $line['nid']] = $line['title']; } return $results; }