Ejemplo n.º 1
0
/**
 * Function that allows a question to be edited.
 */
function WPCW_showPage_ModifyQuestion_load()
{
    $page = new PageBuilder(true);
    $page->showPageHeader(__('Edit Single Question', 'wp_courseware'), '70%', WPCW_icon_getPageIconURL());
    $questionID = false;
    // Check POST and GET
    if (isset($_GET['question_id'])) {
        $questionID = $_GET['question_id'] + 0;
    } else {
        if (isset($_POST['question_id'])) {
            $questionID = $_POST['question_id'] + 0;
        }
    }
    // Trying to edit a question
    $questionDetails = WPCW_questions_getQuestionDetails($questionID, true);
    // Abort if question not found.
    if (!$questionDetails) {
        $page->showMessage(__('Sorry, but that question could not be found.', 'wp_courseware'), true);
        $page->showPageFooter();
        return;
    }
    // See if the question has been submitted for saving.
    if ('true' == WPCW_arrays_getValue($_POST, 'question_save_mode')) {
        WPCW_handler_questions_processSave(false, true);
        $page->showMessage(__('Question successfully updated.', 'wp_courseware'));
        // Assume save has happened, so reload the settings.
        $questionDetails = WPCW_questions_getQuestionDetails($questionID, true);
    }
    // Manually set the order to zero, as not needed for ordering in this context.
    $questionDetails->question_order = 0;
    switch ($questionDetails->question_type) {
        case 'multi':
            $quizObj = new WPCW_quiz_MultipleChoice($questionDetails);
            break;
        case 'truefalse':
            $quizObj = new WPCW_quiz_TrueFalse($questionDetails);
            break;
        case 'open':
            $quizObj = new WPCW_quiz_OpenEntry($questionDetails);
            break;
        case 'upload':
            $quizObj = new WPCW_quiz_FileUpload($questionDetails);
            break;
        default:
            die(__('Unknown quiz type: ', 'wp_courseware') . $questionDetails->question_type);
            break;
    }
    $quizObj->showErrors = true;
    $quizObj->needCorrectAnswers = true;
    $quizObj->hideDragActions = true;
    // #wpcw_quiz_details_questions = needed for media uploader
    // .wpcw_question_holder_static = needed for wrapping the question using existing HTML.
    printf('<div id="wpcw_quiz_details_questions"><ul class="wpcw_question_holder_static">');
    // Create form wrapper, so that we can save this question.
    printf('<form method="POST" action="%s?page=WPCW_showPage_ModifyQuestion&question_id=%d" />', admin_url('admin.php'), $questionDetails->question_id);
    // Question hidden fields
    printf('<input name="question_id" type="hidden" value="%d" />', $questionDetails->question_id);
    printf('<input name="question_save_mode" type="hidden" value="true" />');
    // Show the quiz so that it can be edited. We're re-using the code we have for editing questions,
    // to save creating any special form edit code.
    echo $quizObj->editForm_toString();
    // Save and return buttons.
    printf('<div class="wpcw_button_group"><br/>');
    printf('<a href="%s?page=WPCW_showPage_QuestionPool" class="button-secondary">%s</a>&nbsp;&nbsp;', admin_url('admin.php'), __('&laquo; Return to Question Pool', 'wp_courseware'));
    printf('<input type="submit" class="button-primary" value="%s" />', __('Save Question Details', 'wp_courseware'));
    printf('</div>');
    printf('</form>');
    printf('</ul></div>');
    $page->showPageFooter();
}
Ejemplo n.º 2
0
/**
 * Show the forms where the quiz answers can be editied.
 * 
 * @param Integer $quizID the ID of the quiz to be edited.
 * @param Object $page The associated page object for showing messages.
 */
function WPCW_showPage_ModifyQuiz_showQuizEntryForms($quizID, $page)
{
    // Handle the saving of quiz questions
    WPCW_showPage_ModifyQuiz_showQuizEntryForms_processSave($quizID, $page);
    global $wpdb, $wpcwdb;
    $wpdb->show_errors();
    // Work out if we need correct answers or not. And what the pass mark is.
    $quizDetails = WPCW_quizzes_getQuizDetails($quizID, true);
    $needCorrectAnswers = 'survey' != $quizDetails->quiz_type;
    // Got URL in action to ensure we go to top of page to see the success message.
    printf('<form method="post" id="wpcw_question_update_form" action="%s&quiz_id=%d">', admin_url('admin.php?page=WPCW_showPage_ModifyQuiz'), $quizID);
    // Show the existing quiz questions as a series of forms.
    $quizItems = WPCW_quizzes_getListOfQuestions($quizID);
    // Show the number of correct answers the user must get in order to pass.
    if ('quiz_block' == $quizDetails->quiz_type) {
        $totalQs = count($quizItems);
        $passQs = ceil($quizDetails->quiz_pass_mark / 100 * $totalQs);
        printf('<div class="wpcw_msg wpcw_msg_info">');
        printf(__('The trainee will be required to correctly answer at least <b>%d of the %d</b> following questions (<b>at least %d%%</b>) to progress.', 'wp_courseware'), $passQs, $totalQs, $quizDetails->quiz_pass_mark);
        printf('</div>');
    }
    // Got a  quiz, and trainer is requiring to show answers. Tell them we can't show answers
    // as this quiz contains open-ended questions that need grading.
    if ($needCorrectAnswers && 'show_answers' == $quizDetails->quiz_show_answers && WPCW_quizzes_containsQuestionsNeedingManualGrading($quizItems)) {
        printf('<div class="wpcw_msg wpcw_msg_error">');
        printf(__('This quiz contains questions that need <b>manual grading</b>, and you\'ve selected \'<b>Show Answers</b>\' when the user completes this quiz. ', 'wp_courseware') . '<br/><br/>' . __('Since answers cannot be shown to the user because they are not known at that stage, <b>answers cannot be shown</b>. To hide this message, select \'<b>No Answers</b>\' above.'));
        printf('</div>');
    }
    $errorCount = 0;
    global $errorCount;
    // Wrapper for questions
    printf('<ol class="wpcw_dragable_question_holder">');
    if ($quizItems) {
        // Render edit form for each of the quizzes that already exist
        foreach ($quizItems as $quizItem) {
            switch ($quizItem->question_type) {
                case 'multi':
                    $quizObj = new WPCW_quiz_MultipleChoice($quizItem);
                    break;
                case 'truefalse':
                    $quizObj = new WPCW_quiz_TrueFalse($quizItem);
                    break;
                case 'open':
                    $quizObj = new WPCW_quiz_OpenEntry($quizItem);
                    break;
                case 'upload':
                    $quizObj = new WPCW_quiz_FileUpload($quizItem);
                    break;
                default:
                    die(__('Unknown quiz type: ', 'wp_courseware') . $quizItem->question_type);
                    break;
            }
            $quizObj->showErrors = true;
            $quizObj->needCorrectAnswers = $needCorrectAnswers;
            // Keep track of errors
            if ($quizObj && $quizObj->gotError) {
                $errorCount++;
            }
            echo $quizObj->editForm_toString();
        }
    }
    printf('</ol>');
    // Do any of the questions have residual errors? Tell the user.
    if ($errorCount > 0) {
        $page->showMessage(sprintf(__('%d of the questions below have errors. Please make corrections and then save the changes.', 'wp_courseware'), $errorCount), true);
    }
    $page->showPageMiddle('35%');
    // Show the menu for saving and adding new items.
    WPCW_showPage_ModifyQuiz_FloatMenu($page);
    // Flag to indicate that questions have been updated.
    printf('<input type="hidden" name="survey_updated" value="survey_updated" />');
    printf('</form><a name="new_question"></a>');
    // The empty forms for adding a new question
    $quizItemDummy = new stdClass();
    $quizItemDummy->question_question = '';
    $quizItemDummy->question_answers = "\n\n\n";
    $quizItemDummy->question_correct_answer = false;
    $quizItemDummy->question_order = 0;
    $quizItemDummy->question_answer_type = false;
    $quizItemDummy->question_answer_hint = false;
    $quizItemDummy->question_answer_file_types = 'doc, pdf, jpg, png, jpeg, gif';
    $quizFormsToCreate = array('new_multi' => 'WPCW_quiz_MultipleChoice', 'new_tf' => 'WPCW_quiz_TrueFalse', 'new_open' => 'WPCW_quiz_OpenEntry', 'new_upload' => 'WPCW_quiz_FileUpload');
    // Create the dummy quiz objects
    foreach ($quizFormsToCreate as $dummyid => $objClass) {
        // Set placeholder class
        $quizItemDummy->question_id = $dummyid;
        // Create new object and set it up with defaults
        $quizObj = new $objClass($quizItemDummy);
        $quizObj->cssClasses = 'wpcw_question_template';
        $quizObj->showErrors = false;
        $quizObj->needCorrectAnswers = $needCorrectAnswers;
        echo $quizObj->editForm_toString();
    }
}