From 63c102e0959abfbc2c33550ff02755c01ef7d0de Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Tue, 7 Feb 2017 09:35:46 +0800 Subject: [PATCH] MDL-57316 media: create different instances for different pages --- lib/tests/medialib_test.php | 20 +++++++++++++++++++- media/classes/manager.php | 20 +++++++++++--------- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/lib/tests/medialib_test.php b/lib/tests/medialib_test.php index 1710863eaf7..643ed07f90d 100644 --- a/lib/tests/medialib_test.php +++ b/lib/tests/medialib_test.php @@ -457,6 +457,23 @@ class core_medialib_testcase extends advanced_testcase { $this->assertContains('assertNotContains('assertSame($mediamanager1, $mediamanager2); + + $moodlepage3 = new moodle_page(); + $mediamanager3 = core_media_manager::instance($moodlepage3); + + $this->assertNotSame($mediamanager1, $mediamanager3); + } } /** @@ -522,6 +539,7 @@ class core_media_manager_test extends core_media_manager { * Override the constructor to access it. */ public function __construct() { - parent::__construct(); + global $PAGE; + parent::__construct($PAGE); } } diff --git a/media/classes/manager.php b/media/classes/manager.php index a6effc00d8f..1d23ecb6ab8 100644 --- a/media/classes/manager.php +++ b/media/classes/manager.php @@ -97,6 +97,9 @@ class core_media_manager { /** @var core_media_manager caches a singleton instance */ static protected $instance; + /** @var moodle_page page this instance was initialised for */ + protected $page; + /** * Returns a singleton instance of a manager * @@ -105,7 +108,12 @@ class core_media_manager { * @return core_media_manager */ public static function instance($page = null) { - if (self::$instance === null) { + // Use the passed $page if given, otherwise the $PAGE global. + if (!$page) { + global $PAGE; + $page = $PAGE; + } + if (self::$instance === null || ($page && self::$instance->page !== $page)) { self::$instance = new self($page); } return self::$instance; @@ -117,15 +125,9 @@ class core_media_manager { * @param moodle_page $page The page we are going to add requirements to. * @see core_media_manager::instance() */ - protected function __construct($page = null) { - // Use the passed $page if given, otherwise the $PAGE global. - if ($page == null) { - global $PAGE; - if (isset($PAGE)) { - $page = $PAGE; - } - } + protected function __construct($page) { if ($page) { + $this->page = $page; $players = $this->get_players(); foreach ($players as $player) { $player->setup($page);