mirror of
https://github.com/moodle/moodle.git
synced 2025-08-04 16:36:37 +02:00
MDL-63809 question: handling bad questions in question_has_capability_on
This commit is contained in:
parent
b195523758
commit
8e93e515ed
3 changed files with 59 additions and 11 deletions
|
@ -921,8 +921,6 @@ function question_load_questions($questionids, $extrafields = '', $join = '') {
|
|||
* @param stdClass[]|null $filtercourses The courses to filter the course tags by.
|
||||
*/
|
||||
function _tidy_question($question, $category, array $tagobjects = null, array $filtercourses = null) {
|
||||
global $CFG;
|
||||
|
||||
// Load question-type specific fields.
|
||||
if (!question_bank::is_qtype_installed($question->qtype)) {
|
||||
$question->questiontext = html_writer::tag('p', get_string('warningmissingtype',
|
||||
|
@ -1651,25 +1649,44 @@ class context_to_string_translator{
|
|||
/**
|
||||
* Check capability on category
|
||||
*
|
||||
* @param mixed $questionorid object or id. If an object is passed, it should include ->contextid and ->createdby.
|
||||
* @param int|stdClass $questionorid object or id. If an object is passed, it should include ->contextid and ->createdby.
|
||||
* @param string $cap 'add', 'edit', 'view', 'use', 'move' or 'tag'.
|
||||
* @param integer $notused no longer used.
|
||||
* @return boolean this user has the capability $cap for this question $question?
|
||||
* @param int $notused no longer used.
|
||||
* @return bool this user has the capability $cap for this question $question?
|
||||
* @throws coding_exception
|
||||
*/
|
||||
function question_has_capability_on($questionorid, $cap, $notused = -1) {
|
||||
global $USER;
|
||||
global $USER, $DB;
|
||||
|
||||
if (is_numeric($questionorid)) {
|
||||
$question = question_bank::load_question_data((int)$questionorid);
|
||||
$questionid = (int)$questionorid;
|
||||
} else if (is_object($questionorid)) {
|
||||
// All we really need in this function is the contextid and author of the question.
|
||||
// We won't bother fetching other details of the question if these 2 fields are provided.
|
||||
if (isset($questionorid->contextid) && isset($questionorid->createdby)) {
|
||||
$question = $questionorid;
|
||||
} else if (!empty($questionorid->id)) {
|
||||
$questionid = $questionorid->id;
|
||||
}
|
||||
}
|
||||
|
||||
if (!isset($question) && isset($questionorid->id) && $questionorid->id != 0) {
|
||||
$question = question_bank::load_question_data($questionorid->id);
|
||||
// At this point, either $question or $questionid is expected to be set.
|
||||
if (isset($questionid)) {
|
||||
try {
|
||||
$question = question_bank::load_question_data($questionid);
|
||||
} catch (Exception $e) {
|
||||
// Let's log the exception for future debugging.
|
||||
debugging($e->getMessage(), DEBUG_NORMAL, $e->getTrace());
|
||||
|
||||
// Well, at least we tried. Seems that we really have to read from DB.
|
||||
$question = $DB->get_record_sql('SELECT q.id, q.createdby, qc.contextid
|
||||
FROM {question} q
|
||||
JOIN {question_categories} qc ON q.category = qc.id
|
||||
WHERE q.id = :id', ['id' => $questionid]);
|
||||
}
|
||||
} else {
|
||||
}
|
||||
|
||||
if (!isset($question)) {
|
||||
throw new coding_exception('$questionorid parameter needs to be an integer or an object.');
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue