mirror of
https://github.com/moodle/moodle.git
synced 2025-08-08 10:26:40 +02:00
111 lines
4.4 KiB
PHP
111 lines
4.4 KiB
PHP
<?php
|
|
/**
|
|
* Functions question_cwqpfs_to_update, question_cwqpfs_check_children are needed by question_random_check.
|
|
*/
|
|
|
|
/**
|
|
* @param $result the result object that can be modified.
|
|
* @return null if the test is irrelevant, or true or false depending on whether the test passes.
|
|
*/
|
|
function question_random_check($result){
|
|
global $CFG;
|
|
if (!empty($CFG->running_installer) //no test on first installation, no questions to test yet
|
|
|| $CFG->version >= 2007081000){//no test after upgrade seperates question cats into contexts.
|
|
return null;
|
|
}
|
|
if (!$toupdate = question_cwqpfs_to_update()){
|
|
$result->setStatus(true);//pass test
|
|
} else {
|
|
//set the feedback string here and not in xml file since we need something
|
|
//more complex than just a string picked from admin.php lang file
|
|
$a = new object();
|
|
$a->reporturl = "{$CFG->wwwroot}/{$CFG->admin}/report/question/";
|
|
$lang = str_replace('_utf8', '', current_language());
|
|
$a->docsurl = "{$CFG->docroot}/$lang/admin/report/question/index";
|
|
$result->setFeedbackStr(array('questioncwqpfscheck', 'admin', $a));
|
|
$result->setStatus(false);//fail test
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
function question_cwqpfs_to_update($categories = null){
|
|
global $CFG;
|
|
|
|
$tofix = array();
|
|
$result = true;
|
|
|
|
//any cats with questions picking from subcats?
|
|
if (!$cwqpfs = get_records_sql_menu("SELECT DISTINCT qc.id, 1 ".
|
|
"FROM {$CFG->prefix}question q, {$CFG->prefix}question_categories qc ".
|
|
"WHERE q.qtype='random' AND qc.id = q.category AND ".
|
|
sql_compare_text('q.questiontext'). " = '1'")){
|
|
return array();
|
|
} else {
|
|
if ($categories === null){
|
|
$categories = get_records('question_categories');
|
|
}
|
|
$categorychildparents = array();
|
|
foreach ($categories as $id => $category){
|
|
$categorychildparents[$category->course][$id] = $category->parent;
|
|
}
|
|
foreach ($categories as $id => $category){
|
|
if (FALSE !== array_key_exists($category->parent, $categorychildparents[$category->course])){
|
|
//this is not a top level cat
|
|
continue;//go to next category
|
|
} else{
|
|
$tofix += question_cwqpfs_check_children($id, $categories, $categorychildparents[$category->course], $cwqpfs);
|
|
}
|
|
}
|
|
}
|
|
|
|
return $tofix;
|
|
}
|
|
|
|
function question_cwqpfs_check_children($checkid, $categories, $categorychildparents, $cwqpfs){
|
|
$tofix = array();
|
|
if (array_key_exists($checkid, $cwqpfs)){//cwqpfs in this cat
|
|
$getchildren = array();
|
|
$getchildren[] = $checkid;
|
|
//search down tree and find all children
|
|
while ($nextid = array_shift($getchildren)){//repeat until $getchildren
|
|
//empty;
|
|
$childids = array_keys($categorychildparents, $nextid);
|
|
foreach ($childids as $childid){
|
|
if ($categories[$childid]->publish != $categories[$checkid]->publish){
|
|
$tofix[$childid] = $categories[$checkid]->publish;
|
|
}
|
|
}
|
|
$getchildren = array_merge($getchildren, $childids);
|
|
}
|
|
} else { // check children for cwqpfs
|
|
$childrentocheck = array_keys($categorychildparents, $checkid);
|
|
foreach ($childrentocheck as $childtocheck){
|
|
$tofix += question_cwqpfs_check_children($childtocheck, $categories, $categorychildparents, $cwqpfs);
|
|
}
|
|
}
|
|
return $tofix;
|
|
}
|
|
/**
|
|
* This test is becuase the RQP question type was included in core
|
|
* up to and including Moodle 1.8, and was removed before Moodle 1.9.
|
|
*
|
|
* Therefore, we want to check whether any rqp questions exist in the database
|
|
* before doing the upgrade. However, the check is not relevant if that
|
|
* question type was never installed, or if the person has chosen to
|
|
* manually reinstall the rqp question type from contrib.
|
|
*
|
|
* @param $result the result object that can be modified.
|
|
* @return null if the test is irrelevant, or true or false depending on whether the test passes.
|
|
*/
|
|
function question_check_no_rqp_questions($result) {
|
|
global $CFG;
|
|
|
|
if (empty($CFG->qtype_rqp_version) || is_dir($CFG->dirroot . '/question/type/rqp')) {
|
|
return null;
|
|
} else {
|
|
$result->setStatus(count_records('question', 'qtype', 'rqp') == 0);
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
?>
|