function definition_inner(&$mform)
 {
     $question_type_names = question_type_menu();
     $mform->addRule('questiontext', null, 'required', null, 'client');
     // Remove meaningless defaultgrade field.
     $mform->removeElement('defaultgrade');
     // display the questions from questiontext;
     if ("" != optional_param('questiontext', '', PARAM_RAW)) {
         $this->questiondisplay = fullclone(qtype_multianswer_extract_question(optional_param('questiontext', '', PARAM_RAW)));
     } else {
         $this->questiondisplay = "";
     }
     if (isset($this->questiondisplay->options->questions) && is_array($this->questiondisplay->options->questions)) {
         $countsubquestions = 0;
         foreach ($this->questiondisplay->options->questions as $subquestion) {
             if (!empty($subquestion)) {
                 $countsubquestions++;
             }
         }
     } else {
         $countsubquestions = 0;
     }
     $mform->addElement('submit', 'analyzequestion', get_string('decodeverifyquestiontext', 'qtype_multianswer'));
     $mform->registerNoSubmitButton('analyzequestion');
     for ($sub = 1; $sub <= $countsubquestions; $sub++) {
         $this->editas[$sub] = 'unknown type';
         if (isset($this->questiondisplay->options->questions[$sub]->qtype)) {
             $this->editas[$sub] = $this->questiondisplay->options->questions[$sub]->qtype;
         } else {
             if (optional_param('sub_' . $sub . "_" . 'qtype', '', PARAM_RAW) != '') {
                 $this->editas[$sub] = optional_param('sub_' . $sub . "_" . 'qtype', '', PARAM_RAW);
             }
         }
         $mform->addElement('header', 'subhdr', get_string('questionno', 'quiz', '{#' . $sub . '}') . '&nbsp;' . $question_type_names[$this->questiondisplay->options->questions[$sub]->qtype]);
         $mform->addElement('static', 'sub_' . $sub . "_" . 'questiontext', get_string('questiondefinition', 'qtype_multianswer'), array('cols' => 60, 'rows' => 3));
         if (isset($this->questiondisplay->options->questions[$sub]->questiontext)) {
             $mform->setDefault('sub_' . $sub . "_" . 'questiontext', $this->questiondisplay->options->questions[$sub]->questiontext);
         }
         $mform->addElement('static', 'sub_' . $sub . "_" . 'defaultgrade', get_string('defaultgrade', 'quiz'));
         $mform->setDefault('sub_' . $sub . "_" . 'defaultgrade', $this->questiondisplay->options->questions[$sub]->defaultgrade);
         if ($this->questiondisplay->options->questions[$sub]->qtype == 'shortanswer') {
             $mform->addElement('static', 'sub_' . $sub . "_" . 'usecase', get_string('casesensitive', 'quiz'));
         }
         if ($this->questiondisplay->options->questions[$sub]->qtype == 'multichoice') {
             $mform->addElement('static', 'sub_' . $sub . "_" . 'layout', get_string('layout', 'qtype_multianswer'), array('cols' => 60, 'rows' => 1));
             //, $gradeoptions);
         }
         foreach ($this->questiondisplay->options->questions[$sub]->answer as $key => $ans) {
             $mform->addElement('static', 'sub_' . $sub . "_" . 'answer[' . $key . ']', get_string('answer', 'quiz'), array('cols' => 60, 'rows' => 1));
             if ($this->questiondisplay->options->questions[$sub]->qtype == 'numerical' && $key == 0) {
                 $mform->addElement('static', 'sub_' . $sub . "_" . 'tolerance[' . $key . ']', get_string('acceptederror', 'quiz'));
                 //, $gradeoptions);
             }
             $mform->addElement('static', 'sub_' . $sub . "_" . 'fraction[' . $key . ']', get_string('grade'));
             //, $gradeoptions);
             $mform->addElement('static', 'sub_' . $sub . "_" . 'feedback[' . $key . ']', get_string('feedback', 'quiz'));
         }
     }
 }
Exemplo n.º 2
0
/**
* Prints the table of questions in a category with interactions
*
* @param object $course   The course object
* @param int $categoryid  The id of the question category to be displayed
* @param int $quizid      The quiz id if we are in the context of a particular quiz, 0 otherwise
* @param int $recurse     This is 1 if subcategories should be included, 0 otherwise
* @param int $page        The number of the page to be displayed
* @param int $perpage     Number of questions to show per page
* @param boolean $showhidden   True if also hidden questions should be displayed
* @param boolean $showquestiontext whether the text of each question should be shown in the list
*/
function question_list($course, $categoryid, $quizid = 0, $recurse = 1, $page = 0, $perpage = 100, $showhidden = false, $sortorder = 'qtype, name ASC', $showquestiontext = false)
{
    global $USER, $CFG, $THEME;
    $qtypemenu = question_type_menu();
    if ($rqp_types = get_records('question_rqp_types')) {
        foreach ($rqp_types as $type) {
            $qtypemenu['rqp_' . $type->id] = $type->name;
        }
    }
    $strcategory = get_string("category", "quiz");
    $strquestion = get_string("question", "quiz");
    $straddquestions = get_string("addquestions", "quiz");
    $strimportquestions = get_string("importquestions", "quiz");
    $strexportquestions = get_string("exportquestions", "quiz");
    $strnoquestions = get_string("noquestions", "quiz");
    $strselect = get_string("select", "quiz");
    $strselectall = get_string("selectall", "quiz");
    $strselectnone = get_string("selectnone", "quiz");
    $strcreatenewquestion = get_string("createnewquestion", "quiz");
    $strquestionname = get_string("questionname", "quiz");
    $strdelete = get_string("delete");
    $stredit = get_string("edit");
    $straction = get_string("action");
    $strrestore = get_string('restore');
    $straddtoquiz = get_string("addtoquiz", "quiz");
    $strtype = get_string("type", "quiz");
    $strcreatemultiple = get_string("createmultiple", "quiz");
    $strpreview = get_string("preview", "quiz");
    if (!$categoryid) {
        echo "<p style=\"text-align:center;\"><b>";
        print_string("selectcategoryabove", "quiz");
        echo "</b></p>";
        if ($quizid) {
            echo "<p>";
            print_string("addingquestions", "quiz");
            echo "</p>";
        }
        return;
    }
    if (!($category = get_record('question_categories', 'id', $categoryid))) {
        notify('Category not found!');
        return;
    }
    $canedit = has_capability('moodle/question:manage', get_context_instance(CONTEXT_COURSE, $category->course));
    $editingquiz = false;
    if ($quizid) {
        $cm = get_coursemodule_from_instance('quiz', $quizid);
        $editingquiz = has_capability('mod/quiz:manage', get_context_instance(CONTEXT_MODULE, $cm->id));
    }
    echo '<div class="boxaligncenter">';
    $formatoptions = new stdClass();
    $formatoptions->noclean = true;
    echo format_text($category->info, FORMAT_MOODLE, $formatoptions, $course->id);
    echo '<table><tr>';
    // check if editing questions in this category is allowed
    if ($canedit) {
        echo "<td valign=\"top\"><b>{$strcreatenewquestion}:</b></td>";
        echo '<td valign="top" align="right">';
        popup_form("{$CFG->wwwroot}/question/question.php?category={$category->id}&amp;qtype=", $qtypemenu, "addquestion", "", "choose", "", "", false, "self");
        echo '</td><td valign="top" align="right">';
        helpbutton("questiontypes", $strcreatenewquestion, "quiz");
        echo '</td>';
    } else {
        echo '<td>';
        print_string("publishedit", "quiz");
        echo '</td>';
    }
    echo '</tr></table>';
    echo '</div>';
    $categorylist = $recurse ? question_categorylist($category->id) : $category->id;
    // hide-feature
    $showhidden = $showhidden ? '' : " AND hidden = '0'";
    if (!($totalnumber = count_records_select('question', "category IN ({$categorylist}) AND parent = '0' {$showhidden}"))) {
        echo "<p style=\"text-align:center;\">";
        print_string("noquestions", "quiz");
        echo "</p>";
        return;
    }
    if (!($questions = get_records_select('question', "category IN ({$categorylist}) AND parent = '0' {$showhidden}", $sortorder, '*', $page * $perpage, $perpage))) {
        // There are no questions on the requested page.
        $page = 0;
        if (!($questions = get_records_select('question', "category IN ({$categorylist}) AND parent = '0' {$showhidden}", $sortorder, '*', 0, $perpage))) {
            // There are no questions at all
            echo "<p style=\"text-align:center;\">";
            print_string("noquestions", "quiz");
            echo "</p>";
            return;
        }
    }
    print_paging_bar($totalnumber, $page, $perpage, "edit.php?courseid={$course->id}&amp;perpage={$perpage}&amp;");
    echo '<form method="post" action="edit.php?courseid=' . $course->id . '">';
    echo '<fieldset class="invisiblefieldset" style="display: block;">';
    echo '<input type="hidden" name="sesskey" value="' . $USER->sesskey . '" />';
    echo '<table id="categoryquestions" style="width: 100%"><tr>';
    echo "<th style=\"white-space:nowrap;\" class=\"header\" scope=\"col\">{$straction}</th>";
    $sortoptions = array('name, qtype ASC' => get_string("sortalpha", "quiz"), 'qtype, name ASC' => get_string("sorttypealpha", "quiz"), 'id ASC' => get_string("sortage", "quiz"));
    $orderselect = choose_from_menu($sortoptions, 'sortorder', $sortorder, false, 'this.form.submit();', '0', true);
    $orderselect .= '<noscript><div><input type="submit" value="' . get_string("sortsubmit", "quiz") . '" /></div></noscript>';
    echo "<th style=\"white-space:nowrap; text-align: left;\" class=\"header\" scope=\"col\">{$strquestionname} {$orderselect}</th>\n    <th style=\"white-space:nowrap; text-align: right;\" class=\"header\" scope=\"col\">{$strtype}</th>";
    echo "</tr>\n";
    foreach ($questions as $question) {
        $nameclass = '';
        $textclass = '';
        if ($question->hidden) {
            $nameclass = 'dimmed_text';
            $textclass = 'dimmed_text';
        }
        if ($showquestiontext) {
            $nameclass .= ' header';
        }
        if ($nameclass) {
            $nameclass = 'class="' . $nameclass . '"';
        }
        if ($textclass) {
            $textclass = 'class="' . $textclass . '"';
        }
        echo "<tr>\n<td style=\"white-space:nowrap;\" {$nameclass}>\n";
        // add to quiz
        if ($editingquiz) {
            echo "<a title=\"{$straddtoquiz}\" href=\"edit.php?addquestion={$question->id}&amp;quizid={$quizid}&amp;sesskey={$USER->sesskey}\"><img\n                  src=\"{$CFG->pixpath}/t/moveleft.gif\" alt=\"{$straddtoquiz}\" /></a>&nbsp;";
        }
        // preview
        link_to_popup_window('/question/preview.php?id=' . $question->id . '&amp;quizid=' . $quizid, 'questionpreview', "<img src=\"{$CFG->pixpath}/t/preview.gif\" class=\"iconsmall\" alt=\"{$strpreview}\" />", 0, 0, $strpreview, QUESTION_PREVIEW_POPUP_OPTIONS);
        // edit, hide, delete question, using question capabilities, not quiz capabilieies
        if ($canedit) {
            echo "<a title=\"{$stredit}\" href=\"{$CFG->wwwroot}/question/question.php?id={$question->id}\"><img\n                    src=\"{$CFG->pixpath}/t/edit.gif\" alt=\"{$stredit}\" /></a>&nbsp;";
            // hide-feature
            if ($question->hidden) {
                echo "<a title=\"{$strrestore}\" href=\"edit.php?courseid={$course->id}&amp;unhide={$question->id}&amp;sesskey={$USER->sesskey}\"><img\n                        src=\"{$CFG->pixpath}/t/restore.gif\" alt=\"{$strrestore}\" /></a>";
            } else {
                echo "<a title=\"{$strdelete}\" href=\"edit.php?courseid={$course->id}&amp;deleteselected={$question->id}&amp;q{$question->id}=1\"><img\n                        src=\"{$CFG->pixpath}/t/delete.gif\" alt=\"{$strdelete}\" /></a>";
            }
        }
        echo "&nbsp;<input title=\"{$strselect}\" type=\"checkbox\" name=\"q{$question->id}\" value=\"1\" />";
        echo "</td>\n";
        echo "<td {$nameclass}>" . format_string($question->name) . "</td>\n";
        echo "<td {$nameclass} style='text-align: right'>\n";
        print_question_icon($question);
        echo "</td>\n";
        echo "</tr>\n";
        if ($showquestiontext) {
            echo '<tr><td colspan="3" ' . $textclass . '>';
            $formatoptions = new stdClass();
            $formatoptions->noclean = true;
            $formatoptions->para = false;
            echo format_text($question->questiontext, $question->questiontextformat, $formatoptions, $course->id);
            echo "</td></tr>\n";
        }
    }
    echo "</table>\n";
    $paging = print_paging_bar($totalnumber, $page, $perpage, "edit.php?courseid={$course->id}&amp;perpage={$perpage}&amp;", 'page', false, true);
    if ($totalnumber > DEFAULT_QUESTIONS_PER_PAGE) {
        if ($perpage == DEFAULT_QUESTIONS_PER_PAGE) {
            $showall = '<a href="edit.php?courseid=' . $course->id . '&amp;perpage=1000">' . get_string('showall', 'moodle', $totalnumber) . '</a>';
        } else {
            $showall = '<a href="edit.php?courseid=' . $course->id . '&amp;perpage=' . DEFAULT_QUESTIONS_PER_PAGE . '">' . get_string('showperpage', 'moodle', DEFAULT_QUESTIONS_PER_PAGE) . '</a>';
        }
        if ($paging) {
            $paging = substr($paging, 0, strrpos($paging, '</div>'));
            $paging .= "<br />{$showall}</div>";
        } else {
            $paging = "<div class='paging'>{$showall}</div>";
        }
    }
    echo $paging;
    echo '<table class="quiz-edit-selected"><tr><td colspan="2">';
    echo '<a href="javascript:select_all_in(\'TABLE\',null,\'categoryquestions\');">' . $strselectall . '</a> /' . ' <a href="javascript:deselect_all_in(\'TABLE\',null,\'categoryquestions\');">' . $strselectnone . '</a>' . '</td><td align="right"><b>&nbsp;' . get_string('withselected', 'quiz') . ':</b></td></tr><tr><td>';
    if ($editingquiz) {
        echo "<input type=\"submit\" name=\"add\" value=\"{$THEME->larrow} {$straddtoquiz}\" />\n";
        echo '</td><td>';
    }
    // print delete and move selected question
    if ($canedit) {
        echo '<input type="submit" name="deleteselected" value="' . $strdelete . "\" /></td><td>\n";
        echo '<input type="submit" name="move" value="' . get_string('moveto', 'quiz') . "\" />\n";
        question_category_select_menu($course->id, false, true, $category->id);
    }
    echo "</td></tr></table>";
    // add random question
    if ($editingquiz) {
        for ($i = 1; $i <= min(10, $totalnumber); $i++) {
            $randomcount[$i] = $i;
        }
        for ($i = 20; $i <= min(100, $totalnumber); $i += 10) {
            $randomcount[$i] = $i;
        }
        echo '<br />';
        print_string('addrandom', 'quiz', choose_from_menu($randomcount, 'randomcount', '1', '', '', '', true));
        echo '<input type="hidden" name="recurse" value="' . $recurse . '" />';
        echo "<input type=\"hidden\" name=\"categoryid\" value=\"{$category->id}\" />";
        echo ' <input type="submit" name="addrandom" value="' . get_string('add') . '" />';
        helpbutton('random', get_string('random', 'quiz'), 'quiz');
    }
    echo '</fieldset>';
    echo "</form>\n";
}
Exemplo n.º 3
0
/**
* Prints the table of questions in a category with interactions
*
* @param object $course   The course object
* @param int $categoryid  The id of the question category to be displayed
* @param int $cm      The course module record if we are in the context of a particular module, 0 otherwise
* @param int $recurse     This is 1 if subcategories should be included, 0 otherwise
* @param int $page        The number of the page to be displayed
* @param int $perpage     Number of questions to show per page
* @param boolean $showhidden   True if also hidden questions should be displayed
* @param boolean $showquestiontext whether the text of each question should be shown in the list
*/
function question_list($contexts, $pageurl, $categoryandcontext, $cm = null, $recurse = 1, $page = 0, $perpage = 100, $showhidden = false, $sortorder = 'typename', $sortorderdecoded = 'qtype, name ASC', $showquestiontext = false, $addcontexts = array())
{
    global $USER, $CFG, $THEME, $COURSE;
    $lastchangedid = optional_param('lastchanged', 0, PARAM_INT);
    list($categoryid, $contextid) = explode(',', $categoryandcontext);
    $qtypemenu = question_type_menu();
    $strcategory = get_string("category", "quiz");
    $strquestion = get_string("question", "quiz");
    $straddquestions = get_string("addquestions", "quiz");
    $strimportquestions = get_string("importquestions", "quiz");
    $strexportquestions = get_string("exportquestions", "quiz");
    $strnoquestions = get_string("noquestions", "quiz");
    $strselect = get_string("select", "quiz");
    $strselectall = get_string("selectall", "quiz");
    $strselectnone = get_string("selectnone", "quiz");
    $strcreatenewquestion = get_string("createnewquestion", "quiz");
    $strquestionname = get_string("questionname", "quiz");
    $strdelete = get_string("delete");
    $stredit = get_string("edit");
    $strmove = get_string('moveqtoanothercontext', 'question');
    $strview = get_string("view");
    $straction = get_string("action");
    $strrestore = get_string('restore');
    $strtype = get_string("type", "quiz");
    $strcreatemultiple = get_string("createmultiple", "quiz");
    $strpreview = get_string("preview", "quiz");
    if (!$categoryid) {
        echo "<p style=\"text-align:center;\"><b>";
        print_string("selectcategoryabove", "quiz");
        echo "</b></p>";
        return;
    }
    if (!($category = get_record('question_categories', 'id', $categoryid, 'contextid', $contextid))) {
        notify('Category not found!');
        return;
    }
    $catcontext = get_context_instance_by_id($contextid);
    $canadd = has_capability('moodle/question:add', $catcontext);
    //check for capabilities on all questions in category, will also apply to sub cats.
    $caneditall = has_capability('moodle/question:editall', $catcontext);
    $canuseall = has_capability('moodle/question:useall', $catcontext);
    $canmoveall = has_capability('moodle/question:moveall', $catcontext);
    if ($cm and $cm->modname == 'quiz') {
        $quizid = $cm->instance;
    } else {
        $quizid = 0;
    }
    $returnurl = $pageurl->out();
    $questionurl = new moodle_url("{$CFG->wwwroot}/question/question.php", array('returnurl' => $returnurl));
    if ($cm !== null) {
        $questionurl->param('cmid', $cm->id);
    } else {
        $questionurl->param('courseid', $COURSE->id);
    }
    $questionmoveurl = new moodle_url("{$CFG->wwwroot}/question/contextmoveq.php", array('returnurl' => $returnurl));
    if ($cm !== null) {
        $questionmoveurl->param('cmid', $cm->id);
    } else {
        $questionmoveurl->param('courseid', $COURSE->id);
    }
    echo '<div class="boxaligncenter">';
    $formatoptions = new stdClass();
    $formatoptions->noclean = true;
    echo format_text($category->info, FORMAT_MOODLE, $formatoptions, $COURSE->id);
    echo '<table><tr>';
    if ($canadd) {
        echo '<td valign="top" align="right">';
        popup_form($questionurl->out(false, array('category' => $category->id)) . '&amp;qtype=', $qtypemenu, "addquestion", "", "choose", "", "", false, "self", "<strong>{$strcreatenewquestion}</strong>");
        echo '</td><td valign="top" align="right">';
        helpbutton("questiontypes", $strcreatenewquestion, "quiz");
        echo '</td>';
    } else {
        echo '<td>';
        print_string('nopermissionadd', 'question');
        echo '</td>';
    }
    echo '</tr></table>';
    echo '</div>';
    $categorylist = $recurse ? question_categorylist($category->id) : $category->id;
    // hide-feature
    $showhidden = $showhidden ? '' : " AND hidden = '0'";
    if (!($totalnumber = count_records_select('question', "category IN ({$categorylist}) AND parent = '0' {$showhidden}"))) {
        echo "<p style=\"text-align:center;\">";
        print_string("noquestions", "quiz");
        echo "</p>";
        return;
    }
    if (!($questions = get_records_select('question', "category IN ({$categorylist}) AND parent = '0' {$showhidden}", $sortorderdecoded, '*', $page * $perpage, $perpage))) {
        // There are no questions on the requested page.
        $page = 0;
        if (!($questions = get_records_select('question', "category IN ({$categorylist}) AND parent = '0' {$showhidden}", $sortorderdecoded, '*', 0, $perpage))) {
            // There are no questions at all
            echo "<p style=\"text-align:center;\">";
            print_string("noquestions", "quiz");
            echo "</p>";
            return;
        }
    }
    print_paging_bar($totalnumber, $page, $perpage, $pageurl, 'qpage');
    echo question_sort_options($pageurl, $sortorder);
    echo '<form method="post" action="edit.php">';
    echo '<fieldset class="invisiblefieldset" style="display: block;">';
    echo '<input type="hidden" name="sesskey" value="' . $USER->sesskey . '" />';
    echo $pageurl->hidden_params_out();
    echo '<table id="categoryquestions" style="width: 100%"><tr>';
    echo "<th style=\"white-space:nowrap;\" class=\"header\" scope=\"col\">{$straction}</th>";
    echo "<th style=\"white-space:nowrap; text-align: left;\" class=\"header\" scope=\"col\">{$strquestionname}</th>\n    <th style=\"white-space:nowrap; text-align: right;\" class=\"header\" scope=\"col\">{$strtype}</th>";
    echo "</tr>\n";
    foreach ($questions as $question) {
        $nameclass = '';
        $textclass = '';
        if ($question->hidden) {
            $nameclass = 'dimmed_text';
            $textclass = 'dimmed_text';
        }
        if ($showquestiontext) {
            $nameclass .= ' header';
        }
        if ($question->id == $lastchangedid) {
            $nameclass = 'highlight';
        }
        if ($nameclass) {
            $nameclass = 'class="' . $nameclass . '"';
        }
        if ($textclass) {
            $textclass = 'class="' . $textclass . '"';
        }
        echo "<tr>\n<td style=\"white-space:nowrap;\" {$nameclass}>\n";
        $canuseq = question_has_capability_on($question, 'use', $question->category);
        if (function_exists('module_specific_actions')) {
            echo module_specific_actions($pageurl, $question->id, $cm->id, $canuseq);
        }
        // preview
        if ($canuseq) {
            $quizorcourseid = $quizid ? '&amp;quizid=' . $quizid : '&amp;courseid=' . $COURSE->id;
            link_to_popup_window('/question/preview.php?id=' . $question->id . $quizorcourseid, 'questionpreview', "<img src=\"{$CFG->pixpath}/t/preview.gif\" class=\"iconsmall\" alt=\"{$strpreview}\" />", 0, 0, $strpreview, QUESTION_PREVIEW_POPUP_OPTIONS);
        }
        // edit, hide, delete question, using question capabilities, not quiz capabilieies
        if (question_has_capability_on($question, 'edit', $question->category) || question_has_capability_on($question, 'move', $question->category)) {
            echo "<a title=\"{$stredit}\" href=\"" . $questionurl->out(false, array('id' => $question->id)) . "\"><img\n                    src=\"{$CFG->pixpath}/t/edit.gif\" alt=\"{$stredit}\" /></a>&nbsp;";
        } elseif (question_has_capability_on($question, 'view', $question->category)) {
            echo "<a title=\"{$strview}\" href=\"" . $questionurl->out(false, array('id' => $question->id)) . "\"><img\n                    src=\"{$CFG->pixpath}/i/info.gif\" alt=\"{$strview}\" /></a>&nbsp;";
        }
        if (question_has_capability_on($question, 'move', $question->category) && question_has_capability_on($question, 'view', $question->category)) {
            echo "<a title=\"{$strmove}\" href=\"" . $questionurl->out(false, array('id' => $question->id, 'movecontext' => 1)) . "\"><img\n                    src=\"{$CFG->pixpath}/t/move.gif\" alt=\"{$strmove}\" /></a>&nbsp;";
        }
        if (question_has_capability_on($question, 'edit', $question->category)) {
            // hide-feature
            if ($question->hidden) {
                echo "<a title=\"{$strrestore}\" href=\"edit.php?" . $pageurl->get_query_string() . "&amp;unhide={$question->id}&amp;sesskey={$USER->sesskey}\"><img\n                        src=\"{$CFG->pixpath}/t/restore.gif\" alt=\"{$strrestore}\" /></a>";
            } else {
                echo "<a title=\"{$strdelete}\" href=\"edit.php?" . $pageurl->get_query_string() . "&amp;deleteselected={$question->id}&amp;q{$question->id}=1\"><img\n                        src=\"{$CFG->pixpath}/t/delete.gif\" alt=\"{$strdelete}\" /></a>";
            }
        }
        if ($caneditall || $canmoveall || $canuseall) {
            echo "&nbsp;<input title=\"{$strselect}\" type=\"checkbox\" name=\"q{$question->id}\" value=\"1\" />";
        }
        echo "</td>\n";
        echo "<td {$nameclass}>" . format_string($question->name) . "</td>\n";
        echo "<td {$nameclass} style='text-align: right'>\n";
        print_question_icon($question);
        echo "</td>\n";
        echo "</tr>\n";
        if ($showquestiontext) {
            echo '<tr><td colspan="3" ' . $textclass . '>';
            $formatoptions = new stdClass();
            $formatoptions->noclean = true;
            $formatoptions->para = false;
            echo format_text($question->questiontext, $question->questiontextformat, $formatoptions, $COURSE->id);
            echo "</td></tr>\n";
        }
    }
    echo "</table>\n";
    $paging = print_paging_bar($totalnumber, $page, $perpage, $pageurl, 'qpage', false, true);
    if ($totalnumber > DEFAULT_QUESTIONS_PER_PAGE) {
        if ($perpage == DEFAULT_QUESTIONS_PER_PAGE) {
            $showall = '<a href="edit.php?' . $pageurl->get_query_string(array('qperpage' => 1000)) . '">' . get_string('showall', 'moodle', $totalnumber) . '</a>';
        } else {
            $showall = '<a href="edit.php?' . $pageurl->get_query_string(array('qperpage' => DEFAULT_QUESTIONS_PER_PAGE)) . '">' . get_string('showperpage', 'moodle', DEFAULT_QUESTIONS_PER_PAGE) . '</a>';
        }
        if ($paging) {
            $paging = substr($paging, 0, strrpos($paging, '</div>'));
            $paging .= "<br />{$showall}</div>";
        } else {
            $paging = "<div class='paging'>{$showall}</div>";
        }
    }
    echo $paging;
    if ($caneditall || $canmoveall || $canuseall) {
        echo '<a href="javascript:select_all_in(\'TABLE\',null,\'categoryquestions\');">' . $strselectall . '</a> /' . ' <a href="javascript:deselect_all_in(\'TABLE\',null,\'categoryquestions\');">' . $strselectnone . '</a>';
        echo '<br />';
        echo '<strong>&nbsp;' . get_string('withselected', 'quiz') . ':</strong><br />';
        if (function_exists('module_specific_buttons')) {
            echo module_specific_buttons($cm->id);
        }
        // print delete and move selected question
        if ($caneditall) {
            echo '<input type="submit" name="deleteselected" value="' . $strdelete . "\" />\n";
        }
        if ($canmoveall && count($addcontexts)) {
            echo '<input type="submit" name="move" value="' . get_string('moveto', 'quiz') . "\" />\n";
            question_category_select_menu($addcontexts, false, 0, "{$category->id},{$category->contextid}");
        }
        if (function_exists('module_specific_controls') && $canuseall) {
            echo module_specific_controls($totalnumber, $recurse, $category, $cm->id);
        }
    }
    echo '</fieldset>';
    echo "</form>\n";
}
Exemplo n.º 4
0
 public function generate_questions($courses, $modules)
 {
     global $DB, $CFG;
     if (!is_null($this->get('questions_per_course')) && count($courses) > 0 && is_array($courses)) {
         require_once $CFG->libdir . '/questionlib.php';
         require_once $CFG->dirroot . '/mod/quiz/editlib.php';
         $questions = array();
         $questionsmenu = question_type_menu();
         $questiontypes = array();
         foreach ($questionsmenu as $qtype => $qname) {
             $questiontypes[] = $qtype;
         }
         // Add the questions
         foreach ($courses as $courseid) {
             $questions[$courseid] = array();
             for ($i = 0; $i < $this->get('questions_per_course'); $i++) {
                 $qtype = $questiontypes[array_rand($questiontypes)];
                 // Only the following types are supported right now. Hang around for more!
                 $supported_types = array('match', 'essay', 'multianswer', 'multichoice', 'shortanswer', 'numerical', 'truefalse', 'calculated');
                 $qtype = $supported_types[array_rand($supported_types)];
                 if ($qtype == 'calculated') {
                     continue;
                 }
                 $classname = "question_{$qtype}_qtype";
                 if ($qtype == 'multianswer') {
                     $classname = "embedded_cloze_qtype";
                 }
                 $question = new $classname();
                 $question->qtype = $qtype;
                 $questions[$courseid][] = $question->generate_test("question{$qtype}-{$i}", $courseid);
                 $this->verbose("Generated a question of type {$qtype} for course id {$courseid}.");
             }
         }
         // Assign questions to quizzes, if such exist
         if (!empty($modules['quiz']) && !empty($questions) && !is_null($this->get('questions_per_quiz'))) {
             $quizzes = $modules['quiz'];
             // Cannot assign more questions per quiz than are available, so determine which is the largest
             $questions_per_quiz = max(count($questions), $this->get('questions_per_quiz'));
             foreach ($quizzes as $quiz) {
                 $questions_added = array();
                 for ($i = 0; $i < $questions_per_quiz; $i++) {
                     // Add a random question to the quiz
                     do {
                         if (empty($quiz->course)) {
                             print_object($quizzes);
                             die;
                         }
                         $random = rand(0, count($questions[$quiz->course]));
                     } while (in_array($random, $questions_added) || !array_key_exists($random, $questions[$quiz->course]));
                     if (!quiz_add_quiz_question($questions[$quiz->course][$random]->id, $quiz)) {
                         // Could not add question to quiz!! report error
                         if (!$this->get('quiet')) {
                             echo "WARNING: Could not add question id {$random} to quiz id {$quiz->id}{$this->eolchar}";
                         }
                     } else {
                         $this->verbose("Adding question id {$random} to quiz id {$quiz->id}.");
                         $questions_added[] = $random;
                     }
                 }
             }
         }
         return $questions;
     }
     return null;
 }
Exemplo n.º 5
0
 function definition_inner(&$mform)
 {
     $mform->addElement('hidden', 'reload', 1);
     //     $mform->addElement('hidden', 'generalfeedback','');
     $mform->setType('reload', PARAM_INT);
     $question_type_names = question_type_menu();
     // Remove meaningless defaultgrade field.
     $mform->removeElement('defaultgrade');
     $this->confirm = optional_param('confirm', '0', PARAM_RAW);
     // Make questiontext a required field for this question type.
     $mform->addRule('questiontext', null, 'required', null, 'client');
     // display the questions from questiontext;
     if ("" != optional_param('questiontext', '', PARAM_RAW)) {
         //   echo "<p> optional_param('questiontext' <pre>";print_r(optional_param('questiontext','', PARAM_RAW));echo "</pre></p>";
         $this->questiondisplay = fullclone(qtype_multianswer_extract_question(optional_param('questiontext', '', PARAM_RAW)));
     } else {
         if (!$this->reload && !empty($this->savedquestiondisplay->id)) {
             // use database data as this is first pass
             // question->id == 0 so no stored datasets
             $this->questiondisplay = fullclone($this->savedquestiondisplay);
             foreach ($this->questiondisplay->options->questions as $subquestion) {
                 if (!empty($subquestion)) {
                     $subquestion->answer = array('');
                     foreach ($subquestion->options->answers as $ans) {
                         $subquestion->answer[] = $ans->answer;
                     }
                     //  $subquestion->answer = fullclone($subquestion->options->answers);
                 }
             }
         } else {
             $this->questiondisplay = "";
         }
     }
     if (isset($this->savedquestiondisplay->options->questions) && is_array($this->savedquestiondisplay->options->questions)) {
         $countsavedsubquestions = 0;
         foreach ($this->savedquestiondisplay->options->questions as $subquestion) {
             if (!empty($subquestion)) {
                 $countsavedsubquestions++;
             }
         }
     } else {
         $countsavedsubquestions = 0;
     }
     if ($this->reload) {
         if (isset($this->questiondisplay->options->questions) && is_array($this->questiondisplay->options->questions)) {
             $countsubquestions = 0;
             foreach ($this->questiondisplay->options->questions as $subquestion) {
                 if (!empty($subquestion)) {
                     $countsubquestions++;
                 }
             }
         } else {
             $countsubquestions = 0;
         }
     } else {
         $countsubquestions = $countsavedsubquestions;
     }
     //  echo "<p> count subquestion $countsubquestions <pre>";print_r($this->savedquestiondisplay);echo "</pre></p>";
     //       //     echo "<p> saved question $countsubquestions <pre>";print_r($this->questiondisplay);echo "</pre></p>";
     $mform->addElement('submit', 'analyzequestion', get_string('decodeverifyquestiontext', 'qtype_multianswer'));
     $mform->registerNoSubmitButton('analyzequestion');
     if ($this->reload) {
         $mform->addElement('html', '<div class="ablock clearfix">');
         $mform->addElement('html', '<div class=" clearfix">');
         for ($sub = 1; $sub <= $countsubquestions; $sub++) {
             $this->editas[$sub] = 'unknown type';
             if (isset($this->questiondisplay->options->questions[$sub]->qtype)) {
                 $this->editas[$sub] = $this->questiondisplay->options->questions[$sub]->qtype;
             } else {
                 if (optional_param('sub_' . $sub . "_" . 'qtype', '', PARAM_RAW) != '') {
                     $this->editas[$sub] = optional_param('sub_' . $sub . "_" . 'qtype', '', PARAM_RAW);
                 }
             }
             $storemess = '';
             if (isset($this->savedquestiondisplay->options->questions[$sub]->qtype) && $this->savedquestiondisplay->options->questions[$sub]->qtype != $this->questiondisplay->options->questions[$sub]->qtype) {
                 $this->qtype_change = true;
                 $storemess = "<font class=\"error\"> STORED QTYPE " . $question_type_names[$this->savedquestiondisplay->options->questions[$sub]->qtype] . "</font >";
             }
             $mform->addElement('header', 'subhdr' . $sub, get_string('questionno', 'quiz', '{#' . $sub . '}') . '&nbsp;' . $question_type_names[$this->questiondisplay->options->questions[$sub]->qtype] . $storemess);
             $mform->addElement('static', 'sub_' . $sub . "_" . 'questiontext', get_string('questiondefinition', 'qtype_multianswer'), array('cols' => 60, 'rows' => 3));
             if (isset($this->questiondisplay->options->questions[$sub]->questiontext)) {
                 $mform->setDefault('sub_' . $sub . "_" . 'questiontext', $this->questiondisplay->options->questions[$sub]->questiontext['text']);
             }
             $mform->addElement('static', 'sub_' . $sub . "_" . 'defaultgrade', get_string('defaultgrade', 'quiz'));
             $mform->setDefault('sub_' . $sub . "_" . 'defaultgrade', $this->questiondisplay->options->questions[$sub]->defaultgrade);
             if ($this->questiondisplay->options->questions[$sub]->qtype == 'shortanswer') {
                 $mform->addElement('static', 'sub_' . $sub . "_" . 'usecase', get_string('casesensitive', 'quiz'));
             }
             if ($this->questiondisplay->options->questions[$sub]->qtype == 'multichoice') {
                 $mform->addElement('static', 'sub_' . $sub . "_" . 'layout', get_string('layout', 'qtype_multianswer'), array('cols' => 60, 'rows' => 1));
                 //, $gradeoptions);
             }
             foreach ($this->questiondisplay->options->questions[$sub]->answer as $key => $ans) {
                 $mform->addElement('static', 'sub_' . $sub . "_" . 'answer[' . $key . ']', get_string('answer', 'quiz'), array('cols' => 60, 'rows' => 1));
                 if ($this->questiondisplay->options->questions[$sub]->qtype == 'numerical' && $key == 0) {
                     $mform->addElement('static', 'sub_' . $sub . "_" . 'tolerance[' . $key . ']', get_string('acceptederror', 'quiz'));
                     //, $gradeoptions);
                 }
                 $mform->addElement('static', 'sub_' . $sub . "_" . 'fraction[' . $key . ']', get_string('grade'));
                 //, $gradeoptions);
                 $mform->addElement('static', 'sub_' . $sub . "_" . 'feedback[' . $key . ']', get_string('feedback', 'quiz'));
             }
         }
         $mform->addElement('html', '</div>');
         $this->negative_diff = $countsavedsubquestions - $countsubquestions;
         if ($this->negative_diff > 0 || $this->qtype_change || $this->used_in_quiz && $this->negative_diff != 0) {
             $mform->addElement('header', 'additemhdr', get_string('warningquestionmodified', 'qtype_multianswer'));
         }
         if ($this->negative_diff > 0) {
             //$this->used_in_quiz
             $mform->addElement('static', 'alert1', "<strong>" . get_string('questiondeleted', 'qtype_multianswer') . "</strong>", get_string('questionsless', 'qtype_multianswer', $this->negative_diff));
         }
         if ($this->qtype_change) {
             $mform->addElement('static', 'alert1', "<strong>" . get_string('questiontypechanged', 'qtype_multianswer') . "</strong>", get_string('questiontypechangedcomment', 'qtype_multianswer'));
         }
         $mform->addElement('html', '</div>');
     }
     if ($this->used_in_quiz) {
         if ($this->negative_diff < 0) {
             $diff = $countsubquestions - $countsavedsubquestions;
             $mform->addElement('static', 'alert1', "<strong>" . get_string('questionsadded', 'qtype_multianswer') . "</strong>", "<strong>" . get_string('questionsmore', 'qtype_multianswer', $diff) . "</strong>");
         }
         $a = new stdClass();
         $a->nb_of_quiz = $this->nb_of_quiz;
         $a->nb_of_attempts = $this->nb_of_attempts;
         $mform->addElement('header', 'additemhdr2', get_string('questionusedinquiz', 'qtype_multianswer', $a));
         $mform->addElement('static', 'alertas', get_string('youshouldnot', 'qtype_multianswer'));
     }
     if (($this->negative_diff > 0 || $this->used_in_quiz && ($this->negative_diff > 0 || $this->negative_diff < 0 || $this->qtype_change)) && $this->reload) {
         $mform->addElement('header', 'additemhdr', get_string('questionsaveasedited', 'qtype_multianswer'));
         $mform->addElement('checkbox', 'confirm', '', get_string('confirmquestionsaveasedited', 'qtype_multianswer'));
         $mform->setDefault('confirm', 0);
     } else {
         $mform->addElement('hidden', 'confirm', 0);
     }
 }
Exemplo n.º 6
0
    admin_externalpage_print_footer();
    exit;
}
// End of process actions ==================================================
/// Print the page heading.
admin_externalpage_print_header();
print_heading(get_string('manageqtypes', 'admin'));
/// Set up the table.
$table = new flexible_table('qtypeadmintable');
$table->define_columns(array('questiontype', 'numquestions', 'version', 'requires', 'availableto', 'delete', 'settings'));
$table->define_headers(array(get_string('questiontype', 'admin'), get_string('numquestions', 'admin'), get_string('version'), get_string('requires', 'admin'), get_string('availableq', 'question'), get_string('delete'), get_string('settings')));
$table->set_attribute('id', 'qtypes');
$table->set_attribute('class', 'generaltable generalbox boxaligncenter boxwidthwide');
$table->setup();
/// Add a row for each question type.
$createabletypes = question_type_menu();
foreach ($sortedqtypes as $qtypename => $localname) {
    $qtype = $QTYPES[$qtypename];
    $row = array();
    // Question icon and name.
    $fakequestion = new stdClass();
    $fakequestion->qtype = $qtypename;
    $icon = print_question_icon($fakequestion, true);
    $row[] = $icon . ' ' . $localname;
    // Number of questions of this type.
    if ($counts[$qtypename]->numquestions + $counts[$qtypename]->numhidden > 0) {
        if ($counts[$qtypename]->numhidden > 0) {
            $strcount = get_string('numquestionsandhidden', 'admin', $counts[$qtypename]);
        } else {
            $strcount = $counts[$qtypename]->numquestions;
        }
Exemplo n.º 7
0
if (optional_param('addcancel', false, PARAM_BOOL)) {
    redirect($returnurl);
}
if ($id) {
    if (!($question = $DB->get_record('question', array('id' => $id)))) {
        print_error('questiondoesnotexist', 'question', $returnurl);
    }
    get_question_options($question, true);
} else {
    if ($categoryid && $qtype) {
        // only for creating new questions
        $question = new stdClass();
        $question->category = $categoryid;
        $question->qtype = $qtype;
        // Check that users are allowed to create this question type at the moment.
        $allowedtypes = question_type_menu();
        if (!isset($allowedtypes[$qtype])) {
            print_error('cannotenable', 'question', $returnurl, $qtype);
        }
    } else {
        print_error('notenoughdatatoeditaquestion', 'question', $returnurl);
    }
}
// Validate the question category.
if (!($category = $DB->get_record('question_categories', array('id' => $question->category)))) {
    print_error('categorydoesnotexist', 'question', $returnurl);
}
// Check permissions
$question->formoptions = new stdClass();
$categorycontext = get_context_instance_by_id($category->contextid);
$addpermission = has_capability('moodle/question:add', $categorycontext);
 function definition_inner(&$mform)
 {
     $mform->addElement('hidden', 'reload', 1);
     $mform->setType('reload', PARAM_INT);
     $question_type_names = question_type_menu();
     // Remove meaningless defaultgrade field.
     $mform->removeElement('defaultgrade');
     $this->confirm = optional_param('confirm', '0', PARAM_RAW);
     // display the questions from questiontext;
     if ("" != optional_param('questiontext', '', PARAM_RAW)) {
         $this->questiondisplay = fullclone(qtype_multianswer_extract_question(optional_param('questiontext', '', PARAM_RAW)));
     } else {
         if (!$this->reload && !empty($this->savedquestiondisplay->id)) {
             // use database data as this is first pass
             // question->id == 0 so no stored datasets
             $this->questiondisplay = fullclone($this->savedquestiondisplay);
             foreach ($this->questiondisplay->options->questions as $subquestion) {
                 if (!empty($subquestion)) {
                     $subquestion->answer = array('');
                     foreach ($subquestion->options->answers as $ans) {
                         $subquestion->answer[] = $ans->answer;
                     }
                     //  $subquestion->answer = fullclone($subquestion->options->answers);
                 }
             }
         } else {
             $this->questiondisplay = "";
         }
     }
     if (isset($this->savedquestiondisplay->options->questions) && is_array($this->savedquestiondisplay->options->questions)) {
         $countsavedsubquestions = 0;
         foreach ($this->savedquestiondisplay->options->questions as $subquestion) {
             if (!empty($subquestion)) {
                 $countsavedsubquestions++;
             }
         }
     } else {
         $countsavedsubquestions = 0;
     }
     if ($this->reload) {
         if (isset($this->questiondisplay->options->questions) && is_array($this->questiondisplay->options->questions)) {
             $countsubquestions = 0;
             foreach ($this->questiondisplay->options->questions as $subquestion) {
                 if (!empty($subquestion)) {
                     $countsubquestions++;
                 }
             }
         } else {
             $countsubquestions = 0;
         }
     } else {
         $countsubquestions = $countsavedsubquestions;
     }
     //           echo "<p> saved question $countsavedsubquestions <pre>";print_r($this->savedquestiondisplay);echo "</pre></p>";
     //            echo "<p> saved question $countsubquestions <pre>";print_r($this->questiondisplay);echo "</pre></p>";
     $mform->insertElementBefore($mform->createElement('static', 'generator', 'Code Generator', "<a href=\"type/multianswer/cloze_generator.html\" onclick=\"this.target='questionpreview'; return openpopup('/question/type/multianswer/cloze_generator.html', 'questionpreview', 'scrollbars=yes,resizable=yes,width=800,height=540', 0);\" >Cloze code question generator</a>"), "questiontextformat");
     $mform->addElement('submit', 'analyzequestion', get_string('decodeverifyquestiontext', 'qtype_multianswer'));
     $mform->registerNoSubmitButton('analyzequestion');
     echo '<div class="ablock clearfix">';
     echo '<div class=" clearfix">';
     if ($this->reload) {
         for ($sub = 1; $sub <= $countsubquestions; $sub++) {
             $this->editas[$sub] = 'unknown type';
             if (isset($this->questiondisplay->options->questions[$sub]->qtype)) {
                 $this->editas[$sub] = $this->questiondisplay->options->questions[$sub]->qtype;
             } else {
                 if (optional_param('sub_' . $sub . "_" . 'qtype', '', PARAM_RAW) != '') {
                     $this->editas[$sub] = optional_param('sub_' . $sub . "_" . 'qtype', '', PARAM_RAW);
                 }
             }
             $storemess = '';
             if (isset($this->savedquestiondisplay->options->questions[$sub]->qtype) && $this->savedquestiondisplay->options->questions[$sub]->qtype != $this->questiondisplay->options->questions[$sub]->qtype) {
                 $this->type_change = true;
                 $storemess = "<font class=\"error\"> STORED QTYPE " . $question_type_names[$this->savedquestiondisplay->options->questions[$sub]->qtype] . "</font >";
             }
             $mform->addElement('header', 'subhdr' . $sub, get_string('questionno', 'quiz', '{#' . $sub . '}') . '&nbsp;' . $question_type_names[$this->questiondisplay->options->questions[$sub]->qtype] . $storemess);
             $mform->addElement('static', 'sub_' . $sub . "_" . 'questiontext', get_string('questiondefinition', 'qtype_multianswer'), array('cols' => 60, 'rows' => 3));
             if (isset($this->questiondisplay->options->questions[$sub]->questiontext)) {
                 $mform->setDefault('sub_' . $sub . "_" . 'questiontext', $this->questiondisplay->options->questions[$sub]->questiontext);
             }
             $mform->addElement('static', 'sub_' . $sub . "_" . 'defaultgrade', get_string('defaultgrade', 'quiz'));
             $mform->setDefault('sub_' . $sub . "_" . 'defaultgrade', $this->questiondisplay->options->questions[$sub]->defaultgrade);
             if ($this->questiondisplay->options->questions[$sub]->qtype == 'shortanswer') {
                 $mform->addElement('static', 'sub_' . $sub . "_" . 'usecase', get_string('casesensitive', 'quiz'));
             }
             if ($this->questiondisplay->options->questions[$sub]->qtype == 'multichoice') {
                 $mform->addElement('static', 'sub_' . $sub . "_" . 'layout', get_string('layout', 'qtype_multianswer'), array('cols' => 60, 'rows' => 1));
                 //, $gradeoptions);
             }
             foreach ($this->questiondisplay->options->questions[$sub]->answer as $key => $ans) {
                 $mform->addElement('static', 'sub_' . $sub . "_" . 'answer[' . $key . ']', get_string('answer', 'quiz'), array('cols' => 60, 'rows' => 1));
                 if ($this->questiondisplay->options->questions[$sub]->qtype == 'numerical' && $key == 0) {
                     $mform->addElement('static', 'sub_' . $sub . "_" . 'tolerance[' . $key . ']', get_string('acceptederror', 'quiz'));
                     //, $gradeoptions);
                 }
                 $mform->addElement('static', 'sub_' . $sub . "_" . 'fraction[' . $key . ']', get_string('grade'));
                 //, $gradeoptions);
                 $mform->addElement('static', 'sub_' . $sub . "_" . 'feedback[' . $key . ']', get_string('feedback', 'quiz'));
             }
         }
         echo '</div>';
         $this->negative_diff = $countsavedsubquestions - $countsubquestions;
         if ($this->negative_diff > 0 || $this->type_change || $this->used_in_quiz && $this->negative_diff != 0) {
             $mform->addElement('header', 'additemhdr', "WARNING");
         }
         if ($this->negative_diff > 0) {
             //$this->used_in_quiz
             $mform->addElement('static', 'alert1', "<strong>" . "Question deleted" . "</strong>", "<strong>" . $this->negative_diff . get_string(' questions less than in the multtianswer question stored in the database', 'qtype_multianswer') . "</strong>");
             //$countsubquestions."-".$countsavedsubquestions
         }
         if ($this->type_change) {
             $mform->addElement('static', 'alert1', "<strong>" . "Question type change " . "</strong>", "<strong>" . get_string(' at least one question type has been changed. Did you add,delete or move a question ? Look ahead ', 'qtype_multianswer') . "</strong>");
             //$countsubquestions."-".$countsavedsubquestions
         }
         echo '</div>';
     }
     if ($this->used_in_quiz) {
         if ($this->negative_diff < 0) {
             $diff = $countsubquestions - $countsavedsubquestions;
             $mform->addElement('static', 'alert1', "<strong>" . "Question added " . "</strong>", "<strong>" . $diff . get_string(' questions more than in the multtianswer question stored in the database', 'qtype_multianswer') . "</strong>");
             //$countsubquestions."-".$countsavedsubquestions
         }
         $mform->addElement('header', 'additemhdr2', "This question is used in {$this->nb_of_quiz}  quiz(s), total attempt(s) : {$this->nb_of_attempts} ");
         $mform->addElement('static', 'alertas', "<strong>" . "YOU SHOULD NOT " . "</strong>");
         //$countsubquestions."-".$countsavedsubquestions
     }
     if (($this->negative_diff > 0 || $this->used_in_quiz && ($this->negative_diff > 0 || $this->negative_diff < 0 || $this->type_change)) && $this->reload) {
         $mform->addElement('header', 'additemhdr', get_string('The question will be saved as edited', 'qtype_calculatedsimple'));
         $mform->addElement('checkbox', 'confirm', '', get_string('I confirm that I want the question be saved as edited', 'qtype_calculatedsimple'));
         $mform->setDefault('confirm', 0);
     } else {
         $mform->addElement('hidden', 'confirm', 0);
     }
 }
Exemplo n.º 9
0
function include_help_for_each_qtype()
{
    global $CFG;
    require_once $CFG->libdir . '/questionlib.php';
    global $QTYPES;
    $types = question_type_menu();
    $fakeqtypes = array();
    foreach ($types as $qtype => $localizedname) {
        if ($QTYPES[$qtype]->is_real_question_type()) {
            include_help_for_qtype($qtype, $localizedname);
        } else {
            $fakeqtypes[$qtype] = $localizedname;
        }
    }
    foreach ($fakeqtypes as $qtype => $localizedname) {
        include_help_for_qtype($qtype, $localizedname);
    }
}
 function validation($data)
 {
     $errors = array();
     if (!isset($data['allowed'])) {
         $errors['allowed'] = get_string('needtoallowatleastoneqtype', 'qcreate');
     }
     $qtypemenu = question_type_menu();
     $totalrequired = 0;
     if (isset($data['qtype'])) {
         foreach ($data['qtype'] as $key => $qtype) {
             if ($qtype != '') {
                 $chkqtypes[$key] = $qtype;
                 $keysforthisqtype = array_keys($chkqtypes);
                 if (count(array_keys($data['qtype'], $qtype)) > 1) {
                     $errors["qtype[{$key}]"] = get_string('morethanonemin', 'qcreate', $qtypemenu[$qtype]);
                 } elseif (!isset($data['allowed'][$qtype]) && !isset($data['allowed']['ALL'])) {
                     $errors['allowed'] = get_string('needtoallowqtype', 'qcreate', $qtypemenu[$qtype]);
                     $errors["qtype[{$key}]"] = get_string('needtoallowqtype', 'qcreate', $qtypemenu[$qtype]);
                 }
                 $totalrequired += $data['minimumquestions'][$key];
             }
         }
     }
     if ($totalrequired > $data['totalrequired']) {
         $errors['totalrequired'] = get_string('totalrequiredislessthansumoftotalsforeachqtype', 'qcreate');
     }
     if (isset($data['allowed']['ALL']) && count($data['allowed']) > 1) {
         $errors['allowed'] = get_string('allandother', 'qcreate');
     }
     if ($data['timeclose'] != 0 && $data['timeopen'] != 0 && $data['timeclose'] <= $data['timeopen']) {
         $errors['timeopen'] = get_string('openmustbemorethanclose', 'qcreate');
     }
     return $errors;
 }
function qcreate_proper_grammar($arrayitems)
{
    $qtypemenu = question_type_menu();
    $grammarised = array();
    foreach ($arrayitems as $key => $arrayitem) {
        if ($arrayitem->no > 1) {
            $arrayitem->qtypestring = $qtypemenu[$arrayitem->qtype];
            $grammarised[$key] = get_string('requiredplural', 'qcreate', $arrayitem);
        } else {
            $arrayitem->qtypestring = $qtypemenu[$arrayitem->qtype];
            $grammarised[$key] = get_string('requiredsingular', 'qcreate', $arrayitem);
        }
    }
    return $grammarised;
}
    echo '<label for="id_showneedsregrade">' . get_string('showneedsregrade', 'qcreate') . '</label>';
    $checked = $showungraded ? ' checked="checked"' : '';
    echo '<input onchange="getElementById(\'showoptions\').submit(); return true;" type="checkbox" value="1" name="showungraded" id="id_showungraded"' . $checked . '/>';
    echo '<label for="id_showungraded">' . get_string('showungraded', 'qcreate') . '</label>';
    echo '<noscript>';
    echo '<input type="submit" name="go" value="' . get_string('go') . '" />';
    echo '</noscript>';
    echo '</div></form>';
}
$table->pagesize($perpage, $answercount);
if ($answercount && false !== ($answers = get_records_sql($select . $sql . $sort, $table->get_page_start(), $table->get_page_size()))) {
    $strupdate = get_string('update');
    $strgrade = get_string('grade');
    $grademenu = make_grades_menu($qcreate->grade);
    $grading_info = grade_get_grades($COURSE->id, 'mod', 'qcreate', $qcreate->id, $users);
    $qtypemenu = question_type_menu();
    foreach ($answers as $answer) {
        $final_grade = $grading_info->items[0]->grades[$answer->id];
        /// Calculate user status
        $answer->needsregrading = $answer->timemarked <= $answer->timemodified;
        $picture = print_user_picture($answer->id, $COURSE->id, $answer->picture, false, true);
        if (empty($answer->gradeid)) {
            $answer->grade = -1;
            //no grade yet
        }
        if ($grading_interface && !$answer->needsregrading && $answer->timemarked != 0) {
            $highlight = true;
        } else {
            $highlight = false;
        }
        $colquestion = $answer->qname;
Exemplo n.º 13
0
/**
 * Print a form to let the user choose which question type to add.
 * When the form is submitted, it goes to the question.php script.
 * @param $hiddenparams hidden parameters to add to the form, in addition to
 * the qtype radio buttons.
 */
function print_choose_qtype_to_add_form($hiddenparams)
{
    global $CFG, $QTYPES, $PAGE, $OUTPUT;
    $PAGE->requires->js('/question/qbank.js');
    echo '<div id="chooseqtypehead" class="hd">' . "\n";
    echo $OUTPUT->heading(get_string('chooseqtypetoadd', 'question'), 3);
    echo "</div>\n";
    echo '<div id="chooseqtype">' . "\n";
    echo '<form action="' . $CFG->wwwroot . '/question/question.php" method="get"><div id="qtypeformdiv">' . "\n";
    foreach ($hiddenparams as $name => $value) {
        echo '<input type="hidden" name="' . s($name) . '" value="' . s($value) . '" />' . "\n";
    }
    echo "</div>\n";
    echo '<div class="qtypes">' . "\n";
    echo '<div class="instruction">' . get_string('selectaqtypefordescription', 'question') . "</div>\n";
    echo '<div class="realqtypes">' . "\n";
    $types = question_type_menu();
    $fakeqtypes = array();
    foreach ($types as $qtype => $localizedname) {
        if ($QTYPES[$qtype]->is_real_question_type()) {
            print_qtype_to_add_option($qtype, $localizedname);
        } else {
            $fakeqtypes[$qtype] = $localizedname;
        }
    }
    echo "</div>\n";
    echo '<div class="fakeqtypes">' . "\n";
    foreach ($fakeqtypes as $qtype => $localizedname) {
        print_qtype_to_add_option($qtype, $localizedname);
    }
    echo "</div>\n";
    echo "</div>\n";
    echo '<div class="submitbuttons">' . "\n";
    echo '<input type="submit" value="' . get_string('next') . '" id="chooseqtype_submit" />' . "\n";
    echo '<input type="submit" id="chooseqtypecancel" name="addcancel" value="' . get_string('cancel') . '" />' . "\n";
    echo "</div></form>\n";
    echo "</div>\n";
    $PAGE->requires->js_function_call('qtype_chooser.init', array('chooseqtype'));
}
                 }
             }
         }
     }
     if (!$settings['quiet']) {
         echo "Successfully generated " . $settings['number-of-modules'] * $settings['number-of-sections'] . " modules in each course!{$settings['eolchar']}";
     }
 }
 /**
  * QUESTIONS GENERATION
  */
 if (!empty($settings['questions-per-course'])) {
     require_once $CFG->libdir . '/questionlib.php';
     require_once $CFG->dirroot . '/mod/quiz/editlib.php';
     $questions = array();
     $questionsmenu = question_type_menu();
     $questiontypes = array();
     foreach ($questionsmenu as $qtype => $qname) {
         $questiontypes[] = $qtype;
     }
     // Add the questions
     foreach ($courses as $courseid) {
         $questions[$courseid] = array();
         for ($i = 0; $i < $settings['questions-per-course']; $i++) {
             $qtype = $questiontypes[array_rand($questiontypes)];
             // Only the following types are supported right now. Hang around for more!
             $supported_types = array('match', 'essay', 'multianswer', 'multichoice', 'shortanswer', 'numerical', 'truefalse', 'calculated');
             $qtype = $supported_types[array_rand($supported_types)];
             if ($qtype == 'calculated') {
                 continue;
             }