MDL-57316 media: Setup media plugins in media_manager::instance()
authorJohn Okely <john@moodle.com>
Tue, 24 Jan 2017 04:15:56 +0000 (12:15 +0800)
committerMarina Glancy <marina@moodle.com>
Tue, 7 Feb 2017 01:16:01 +0000 (09:16 +0800)
filter/mediaplugin/filter.php
lib/editor/tinymce/plugins/moodlemedia/preview.php
lib/tests/medialib_test.php
media/classes/manager.php
media/upgrade.txt [new file with mode: 0644]
mod/lesson/locallib.php
mod/resource/locallib.php
mod/url/locallib.php

index e98f6d9..726c1d1 100644 (file)
@@ -57,8 +57,8 @@ class filter_mediaplugin extends moodle_text_filter {
         }
         $jsinitialised = true;
 
-        $mediamanager = core_media_manager::instance();
-        $mediamanager->setup($page);
+        // Set up the media manager so that media plugins requiring JS are initialised.
+        $mediamanager = core_media_manager::instance($page);
     }
 
     public function filter($text, array $options = array()) {
index af946c0..cf4802f 100644 (file)
@@ -40,7 +40,7 @@ $PAGE->add_body_class('core_media_preview');
 
 echo $OUTPUT->header();
 
-$mediarenderer = core_media_manager::instance();
+$mediarenderer = core_media_manager::instance($PAGE);
 
 if (isloggedin() and !isguestuser() and $mediarenderer->can_embed_url($url)) {
     require_sesskey();
index d2ccdc2..1710863 100644 (file)
@@ -517,4 +517,11 @@ class core_media_manager_test extends core_media_manager {
         }
         return $out;
     }
+
+    /**
+     * Override the constructor to access it.
+     */
+    public function __construct() {
+        parent::__construct();
+    }
 }
index 84b4adb..a6effc0 100644 (file)
@@ -100,27 +100,55 @@ class core_media_manager {
     /**
      * Returns a singleton instance of a manager
      *
+     * Note as of Moodle 3.3, this will call setup for you.
+     *
      * @return core_media_manager
      */
-    public static function instance() {
+    public static function instance($page = null) {
         if (self::$instance === null) {
-            self::$instance = new self();
+            self::$instance = new self($page);
         }
         return self::$instance;
     }
 
+    /**
+     * Construct a new core_media_manager instance
+     *
+     * @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;
+            }
+        }
+        if ($page) {
+            $players = $this->get_players();
+            foreach ($players as $player) {
+                $player->setup($page);
+            }
+        } else {
+            debugging('Could not determine the $PAGE. Media plugins will not be set up', DEBUG_DEVELOPER);
+        }
+    }
+
     /**
      * Setup page requirements.
      *
      * This should must only be called once per page request.
      *
+     * @deprecated Moodle 3.3, The setup is now done in ::instance() so there is no need to call this
      * @param moodle_page $page The page we are going to add requirements to.
+     * @see core_media_manager::instance()
+     * @todo MDL-57632 final deprecation
      */
     public function setup($page) {
-        $players = $this->get_players();
-        foreach ($players as $player) {
-            $player->setup($page);
-        }
+        debugging('core_media_manager::setup() is deprecated.' .
+                  'You only need to call core_media_manager::instance() now', DEBUG_DEVELOPER);
+        // No need to call ::instance from here, because the instance has already be set up.
     }
 
     /**
diff --git a/media/upgrade.txt b/media/upgrade.txt
new file mode 100644 (file)
index 0000000..ef95d34
--- /dev/null
@@ -0,0 +1,5 @@
+This files describes API changes in /media/ plugins,
+information provided here is intended especially for developers.
+
+=== 3.3 ===
+* core_media_manager setup() is now deprecated as it is now called when initialising core_media_manager::instance().
index 4e02e44..9a973c7 100644 (file)
@@ -618,7 +618,7 @@ function lesson_get_media_html($lesson, $context) {
 
     $extension = resourcelib_get_extension($url->out(false));
 
-    $mediamanager = core_media_manager::instance();
+    $mediamanager = core_media_manager::instance($PAGE);
     $embedoptions = array(
         core_media_manager::OPTION_TRUSTED => true,
         core_media_manager::OPTION_BLOCK => true
index 062db7e..0dd1f1f 100644 (file)
@@ -75,7 +75,7 @@ function resource_display_embed($resource, $cm, $course, $file) {
 
     $extension = resourcelib_get_extension($file->get_filename());
 
-    $mediamanager = core_media_manager::instance();
+    $mediamanager = core_media_manager::instance($PAGE);
     $embedoptions = array(
         core_media_manager::OPTION_TRUSTED => true,
         core_media_manager::OPTION_BLOCK => true,
index a29686c..7d9bba2 100644 (file)
@@ -305,7 +305,7 @@ function url_display_embed($url, $cm, $course) {
 
     $extension = resourcelib_get_extension($url->externalurl);
 
-    $mediamanager = core_media_manager::instance();
+    $mediamanager = core_media_manager::instance($PAGE);
     $embedoptions = array(
         core_media_manager::OPTION_TRUSTED => true,
         core_media_manager::OPTION_BLOCK => true