From 19dc3b0b0d360dc31de11a88f13170329ac632cf 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 f035ae7b1e7..8e92faf325d 100644 --- a/lib/accesslib.php +++ b/lib/accesslib.php @@ -5462,6 +5462,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); @@ -5557,6 +5561,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 ?"; @@ -6557,6 +6566,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 = ?)";