function sort_categories_by_tree in Quiz 6.5
Same name and namespace in other branches
- 6.6 includes/moodle/lib/questionlib.php \sort_categories_by_tree()
returns the categories with their names ordered following parent-child relationships finally it tries to return pending categories (those being orphaned, whose parent is incorrect) to avoid missing any category from original array.
2 calls to sort_categories_by_tree()
- question_delete_activity in includes/
moodle/ lib/ questionlib.php - All question categories and their questions are deleted for this activity.
- question_delete_course in includes/
moodle/ lib/ questionlib.php - All question categories and their questions are deleted for this course.
File
- includes/
moodle/ lib/ questionlib.php, line 1766
Code
function sort_categories_by_tree(&$categories, $id = 0, $level = 1) {
$children = array();
$keys = array_keys($categories);
foreach ($keys as $key) {
if (!isset($categories[$key]->processed) && $categories[$key]->parent == $id) {
$children[$key] = $categories[$key];
$categories[$key]->processed = true;
$children = $children + sort_categories_by_tree($categories, $children[$key]->id, $level + 1);
}
}
//If level = 1, we have finished, try to look for non processed categories (bad parent) and sort them too
if ($level == 1) {
foreach ($keys as $key) {
//If not processed and it's a good candidate to start (because its parent doesn't exist in the course)
if (!isset($categories[$key]->processed) && !record_exists('question_categories', 'course', $categories[$key]->course, 'id', $categories[$key]->parent)) {
$children[$key] = $categories[$key];
$categories[$key]->processed = true;
$children = $children + sort_categories_by_tree($categories, $children[$key]->id, $level + 1);
}
}
}
return $children;
}