From f06d89b2b53ab513677d55de1423c129a96f180b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20S=CC=8Ckoda?= Date: Mon, 16 Dec 2013 09:44:04 +0800 Subject: [PATCH] MDL-43367 stop returning of bogus context children when path unknown This also prevents deletion of system context. --- lib/accesslib.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/accesslib.php b/lib/accesslib.php index bf5653cf5b9..c1e0b566820 100644 --- a/lib/accesslib.php +++ b/lib/accesslib.php @@ -5270,6 +5270,10 @@ abstract class context extends stdClass implements IteratorAggregate { public function delete() { global $DB; + if ($this->_contextlevel <= CONTEXT_SYSTEM) { + throw new coding_exception('Cannot delete system context'); + } + // double check the context still exists if (!$DB->record_exists('context', array('id'=>$this->_id))) { context::cache_remove($this); @@ -5365,6 +5369,11 @@ abstract class context extends stdClass implements IteratorAggregate { public function get_child_contexts() { global $DB; + if (empty($this->_path) or empty($this->_depth)) { + debugging('Can not find child contexts of context '.$this->_id.' try rebuilding of context paths'); + return array(); + } + $sql = "SELECT ctx.* FROM {context} ctx WHERE ctx.path LIKE ?"; @@ -6337,6 +6346,11 @@ class context_coursecat extends context { public function get_child_contexts() { global $DB; + if (empty($this->_path) or empty($this->_depth)) { + debugging('Can not find child contexts of context '.$this->_id.' try rebuilding of context paths'); + return array(); + } + $sql = "SELECT ctx.* FROM {context} ctx WHERE ctx.path LIKE ? AND (ctx.depth = ? OR ctx.contextlevel = ?)";