You are here

function sort_categories_by_tree in Quiz 6.5

Same name and namespace in other branches
  1. 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;
}