function question_edit_form($submiturl, $question, $category, $contexts, $formeditable = true)
 {
     $this->question = $question;
     $this->contexts = $contexts;
     $this->category = $category;
     $this->categorycontext = get_context_instance_by_id($category->contextid);
     //course id or site id depending on question cat context
     $this->coursefilesid = get_filesdir_from_context(get_context_instance_by_id($category->contextid));
     parent::moodleform($submiturl, null, 'post', '', null, $formeditable);
 }
Exemplo n.º 2
0
 /// If we are moving a question, check we have permission to move it from
 /// whence it came. (Where we are moving to is validated by the form.)
 list($newcatid) = explode(',', $fromform->category);
 if (!empty($question->id) && $newcatid != $question->category) {
     question_require_capability_on($question, 'move');
 }
 /// Ensure we redirect back to the category the question is being saved into.
 $returnurl = new moodle_url($returnurl);
 $returnurl->param('category', $fromform->category);
 $returnurl = $returnurl->out();
 /// Call the appropriate method.
 if ($movecontext) {
     list($tocatid, $tocontextid) = explode(',', $fromform->categorymoveto);
     $tocontext = get_context_instance_by_id($tocontextid);
     require_capability('moodle/question:add', $tocontext);
     if (get_filesdir_from_context($categorycontext) != get_filesdir_from_context($tocontext)) {
         $movecontexturl = new moodle_url($CFG->wwwroot . '/question/contextmoveq.php', array('returnurl' => $returnurl, 'ids' => $question->id, 'tocatid' => $tocatid));
         if ($cmid) {
             $movecontexturl->param('cmid', $cmid);
         } else {
             $movecontexturl->param('courseid', $COURSE->id);
         }
         redirect($movecontexturl->out());
     }
 }
 $question = $QTYPES[$question->qtype]->save_question($question, $fromform, $COURSE, $wizardnow);
 if ($QTYPES[$question->qtype]->finished_edit_wizard($fromform) || $movecontext) {
     if ($inpopup) {
         notify(get_string('changessaved'), '');
         close_window(3);
     } else {
Exemplo n.º 3
0
function question_showbank_actions($pageurl, $cm)
{
    global $CFG, $COURSE;
    /// Now, check for commands on this page and modify variables as necessary
    if (optional_param('move', false, PARAM_BOOL) and confirm_sesskey()) {
        /// Move selected questions to new category
        $category = required_param('category', PARAM_SEQUENCE);
        list($tocategoryid, $contextid) = explode(',', $category);
        if (!($tocategory = get_record('question_categories', 'id', $tocategoryid, 'contextid', $contextid))) {
            error('Could not find category record');
        }
        $tocontext = get_context_instance_by_id($contextid);
        require_capability('moodle/question:add', $tocontext);
        $rawdata = (array) data_submitted();
        $questionids = array();
        foreach ($rawdata as $key => $value) {
            // Parse input for question ids
            if (preg_match('!^q([0-9]+)$!', $key, $matches)) {
                $key = $matches[1];
                $questionids[] = $key;
            }
        }
        if ($questionids) {
            $questionidlist = join($questionids, ',');
            $sql = "SELECT q.*, c.contextid FROM {$CFG->prefix}question q, {$CFG->prefix}question_categories c WHERE q.id IN ({$questionidlist}) AND c.id = q.category";
            if (!($questions = get_records_sql($sql))) {
                print_error('questiondoesnotexist', 'question', $pageurl->out());
            }
            $checkforfiles = false;
            foreach ($questions as $question) {
                //check capabilities
                question_require_capability_on($question, 'move');
                $fromcontext = get_context_instance_by_id($question->contextid);
                if (get_filesdir_from_context($fromcontext) != get_filesdir_from_context($tocontext)) {
                    $checkforfiles = true;
                }
            }
            $returnurl = $pageurl->out(false, array('category' => "{$tocategoryid},{$contextid}"));
            if (!$checkforfiles) {
                if (!question_move_questions_to_category(implode(',', $questionids), $tocategory->id)) {
                    print_error('errormovingquestions', 'question', $returnurl, $questionids);
                }
                redirect($returnurl);
            } else {
                $movecontexturl = new moodle_url($CFG->wwwroot . '/question/contextmoveq.php', array('returnurl' => $returnurl, 'ids' => $questionidlist, 'tocatid' => $tocategoryid));
                if ($cm) {
                    $movecontexturl->param('cmid', $cm->id);
                } else {
                    $movecontexturl->param('courseid', $COURSE->id);
                }
                redirect($movecontexturl->out());
            }
        }
    }
    if (optional_param('deleteselected', false, PARAM_BOOL)) {
        // delete selected questions from the category
        if ($confirm = optional_param('confirm', '', PARAM_ALPHANUM) and confirm_sesskey()) {
            // teacher has already confirmed the action
            $deleteselected = required_param('deleteselected');
            if ($confirm == md5($deleteselected)) {
                if ($questionlist = explode(',', $deleteselected)) {
                    // for each question either hide it if it is in use or delete it
                    foreach ($questionlist as $questionid) {
                        question_require_capability_on($questionid, 'edit');
                        if (record_exists('quiz_question_instances', 'question', $questionid)) {
                            if (!set_field('question', 'hidden', 1, 'id', $questionid)) {
                                question_require_capability_on($questionid, 'edit');
                                error('Was not able to hide question');
                            }
                        } else {
                            delete_question($questionid);
                        }
                    }
                }
                redirect($pageurl->out());
            } else {
                error("Confirmation string was incorrect");
            }
        }
    }
    // Unhide a question
    if ($unhide = optional_param('unhide', '', PARAM_INT) and confirm_sesskey()) {
        question_require_capability_on($unhide, 'edit');
        if (!set_field('question', 'hidden', 0, 'id', $unhide)) {
            error("Failed to unhide the question.");
        }
        redirect($pageurl->out());
    }
}
Exemplo n.º 4
0
/**
* Returns a html link to the question image if there is one
*
* @return string The html image tag or the empy string if there is no image.
* @param object $question The question object
*/
function get_question_image($question)
{
    global $CFG;
    $img = '';
    if (!($category = get_record('question_categories', 'id', $question->category))) {
        error('invalid category id ' . $question->category);
    }
    $coursefilesdir = get_filesdir_from_context(get_context_instance_by_id($category->contextid));
    if ($question->image) {
        if (substr(strtolower($question->image), 0, 7) == 'http://') {
            $img .= $question->image;
        } else {
            require_once $CFG->libdir . '/filelib.php';
            $img = get_file_url("{$coursefilesdir}/{$question->image}");
        }
    }
    return $img;
}
Exemplo n.º 5
0
}
$tocat->context = get_context_instance_by_id($tocat->contextid);
require_capability('moodle/question:add', $tocat->context);
$tocoursefilesid = get_filesdir_from_context($tocat->context);
$urls = array();
if ($tocoursefilesid == SITEID) {
    $toareaname = get_string('filesareasite', 'question');
} else {
    $toareaname = get_string('filesareacourse', 'question');
}
$fromcoursefilesid = 0;
foreach (array_keys($questions) as $id) {
    question_require_capability_on($questions[$id], 'move');
    get_question_options($questions[$id]);
    $questions[$id]->context = get_context_instance_by_id($questions[$id]->contextid);
    $thisfilesid = get_filesdir_from_context($questions[$id]->context);
    if ($fromcoursefilesid && $thisfilesid != $fromcoursefilesid) {
        error('You can\'t use this script to move questions that have files associated with them from different areas.');
    } else {
        $fromcoursefilesid = $thisfilesid;
    }
    if ($tocoursefilesid != $fromcoursefilesid) {
        $urls = array_merge_recursive($urls, $QTYPES[$questions[$id]->qtype]->find_file_links($questions[$id], $fromcoursefilesid));
    }
}
$brokenurls = array();
foreach (array_keys($urls) as $url) {
    if (!file_exists($CFG->dataroot . "/{$fromcoursefilesid}/" . $url)) {
        $brokenurls[] = $url;
    }
}
Exemplo n.º 6
0
if (!($cattomove = $DB->get_record('question_categories', array('id' => $cattomove)))) {
    print_error('invalidcategoryidtomove', 'question', $onerrorurl);
}
if ($cattomove->contextid == $contextto) {
    print_error('contexterror', '', $onerrorurl);
}
$cattomove->categorylist = question_categorylist($cattomove->id);
$thispageurl->params(array('cattomove' => $cattomove->id, 'toparent' => "{$toparent->id},{$toparent->contextid}", 'totop' => $totop));
$contextfrom = get_context_instance_by_id($cattomove->contextid);
$contextto = get_context_instance_by_id($contextto);
$contexttostring = print_context_name($contextto);
require_capability('moodle/question:managecategory', $contextfrom);
require_capability('moodle/question:managecategory', $contextto);
$fromcoursefilesid = get_filesdir_from_context($contextfrom);
//siteid or courseid
$tocoursefilesid = get_filesdir_from_context($contextto);
//siteid or courseid
if ($fromcoursefilesid != $tocoursefilesid) {
    list($usql, $params) = $DB->get_in_or_equal(explode(',', $cattomove->categorylist));
    $questions = $DB->get_records_select('question', "category {$usql}", $params);
    $urls = array();
    if ($questions) {
        foreach ($questions as $id => $question) {
            $QTYPES[$questions[$id]->qtype]->get_question_options($questions[$id]);
            $urls = array_merge_recursive($urls, $QTYPES[$questions[$id]->qtype]->find_file_links($questions[$id], $fromcoursefilesid));
        }
    }
    ksort($urls);
} else {
    $urls = array();
}
Exemplo n.º 7
0
/**
* Returns a html link to the question image if there is one
*
* @return string The html image tag or the empy string if there is no image.
* @param object $question The question object
*/
function get_question_image($question)
{
    global $CFG;
    $img = '';
    if (!($category = get_record('question_categories', 'id', $question->category))) {
        error('invalid category id ' . $question->category);
    }
    $coursefilesdir = get_filesdir_from_context(get_context_instance_by_id($category->contextid));
    if ($question->image) {
        if (substr(strtolower($question->image), 0, 7) == 'http://') {
            $img .= $question->image;
        } else {
            if ($CFG->slasharguments) {
                // Use this method if possible for better caching
                $img .= "{$CFG->wwwroot}/file.php/{$coursefilesdir}/{$question->image}";
            } else {
                $img .= "{$CFG->wwwroot}/file.php?file=/{$coursefilesdir}/{$question->image}";
            }
        }
    }
    return $img;
}