*/
function get_parent_contexts($context) {
+ static $pcontexts; // cache
+ if (isset($pcontexts[$context->id])) {
+ return ($pcontexts[$context->id]);
+ }
+
switch ($context->contextlevel) {
case CONTEXT_SYSTEM: // no parent
if (!$parent = get_context_instance(CONTEXT_SYSTEM)) {
return array();
} else {
- return array($parent->id);
+ $res = array($parent->id);
+ $pcontexts[$context->id] = $res;
+ return $res;
}
break;
if (!$parent = get_context_instance(CONTEXT_SYSTEM)) {
return array();
} else {
- return array($parent->id);
+ $res = array($parent->id);
+ $pcontexts[$context->id] = $res;
+ return $res;
}
break;
}
if (!empty($coursecat->parent)) { // return parent value if exist
$parent = get_context_instance(CONTEXT_COURSECAT, $coursecat->parent);
- return array_merge(array($parent->id), get_parent_contexts($parent));
+ $res = array_merge(array($parent->id), get_parent_contexts($parent));
+ $pcontexts[$context->id] = $res;
+ return $res;
} else { // else return site value
$parent = get_context_instance(CONTEXT_SYSTEM);
- return array($parent->id);
+ $res = array($parent->id);
+ $pcontexts[$context->id] = $res;
+ return $res;
}
break;
}
if ($course->id != SITEID) {
$parent = get_context_instance(CONTEXT_COURSECAT, $course->category);
- return array_merge(array($parent->id), get_parent_contexts($parent));
+ $res = array_merge(array($parent->id), get_parent_contexts($parent));
+ return $res;
} else {
// Yu: Separating site and site course context
$parent = get_context_instance(CONTEXT_SYSTEM);
- return array($parent->id);
+ $res = array($parent->id);
+ $pcontexts[$context->id] = $res;
+ return $res;
}
break;
return array();
}
if ($parent = get_context_instance(CONTEXT_COURSE, $group->courseid)) {
- return array_merge(array($parent->id), get_parent_contexts($parent));
+ $res = array_merge(array($parent->id), get_parent_contexts($parent));
+ $pcontexts[$context->id] = $res;
+ return $res;
} else {
return array();
}
return array();
}
if ($parent = get_context_instance(CONTEXT_COURSE, $cm->course)) {
- return array_merge(array($parent->id), get_parent_contexts($parent));
+ $res = array_merge(array($parent->id), get_parent_contexts($parent));
+ $pcontexts[$context->id] = $res;
+ return $res;
} else {
return array();
}
return array();
}
if ($parent = get_context_instance(CONTEXT_COURSE, $block->pageid)) {
- return array_merge(array($parent->id), get_parent_contexts($parent));
+ $res = array_merge(array($parent->id), get_parent_contexts($parent));
+ $pcontexts[$context->id] = $res;
+ return $res;
} else {
return array();
}