From c6af0e03cb6ded307fb2d096a1bf462113a975d6 Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Wed, 7 Aug 2013 13:46:08 +1000 Subject: [PATCH] MDL-36690 Do not cache objects inside course.modinfo as they may fail to serialize convert moodle_url (all other fields are numbers or strings) to string before caching and then back to moodle_url when restoring. Otherwise serialized modinfo can contain \0 byte which cause problems in Postgres DB --- course/lib.php | 4 +++- lib/modinfolib.php | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/course/lib.php b/course/lib.php index f9c50d3280f..6ed5bb5f0b2 100644 --- a/course/lib.php +++ b/course/lib.php @@ -959,7 +959,9 @@ function get_array_of_activities($courseid) { $mod[$seq]->extraclasses = $info->extraclasses; } if (!empty($info->iconurl)) { - $mod[$seq]->iconurl = $info->iconurl; + // Convert URL to string as it's easier to store. Also serialized object contains \0 byte and can not be written to Postgres DB. + $url = new moodle_url($info->iconurl); + $mod[$seq]->iconurl = $url->out(false); } if (!empty($info->onclick)) { $mod[$seq]->onclick = $info->onclick; diff --git a/lib/modinfolib.php b/lib/modinfolib.php index d48504ec640..8772b9ad59d 100644 --- a/lib/modinfolib.php +++ b/lib/modinfolib.php @@ -1079,7 +1079,8 @@ class cm_info extends stdClass { $this->indent = isset($mod->indent) ? $mod->indent : 0; $this->extra = isset($mod->extra) ? $mod->extra : ''; $this->extraclasses = isset($mod->extraclasses) ? $mod->extraclasses : ''; - $this->iconurl = isset($mod->iconurl) ? $mod->iconurl : ''; + // iconurl may be stored as either string or instance of moodle_url. + $this->iconurl = isset($mod->iconurl) ? new moodle_url($mod->iconurl) : ''; $this->onclick = isset($mod->onclick) ? $mod->onclick : ''; $this->content = isset($mod->content) ? $mod->content : ''; $this->icon = isset($mod->icon) ? $mod->icon : '';