MDL-67076 core_h5p: Add preventredirect parameter to embed
authorSara Arjona <sara@moodle.com>
Wed, 30 Oct 2019 09:04:26 +0000 (10:04 +0100)
committerSara Arjona <sara@moodle.com>
Wed, 30 Oct 2019 09:04:26 +0000 (10:04 +0100)
h5p/classes/player.php
h5p/embed.php

index 5605a97..61252ac 100644 (file)
@@ -80,17 +80,24 @@ class player {
      */
     private $factory;
 
+    /**
+     * @var bool Set to true in scripts that can not redirect (CLI, RSS feeds, etc.), throws exceptions.
+     */
+    private $preventredirect;
+
     /**
      * Inits the H5P player for rendering the content.
      *
      * @param string $url Local URL of the H5P file to display.
      * @param stdClass $config Configuration for H5P buttons.
+     * @param bool $preventredirect Set to true in scripts that can not redirect (CLI, RSS feeds, etc.), throws exceptions
      */
-    public function __construct(string $url, \stdClass $config) {
+    public function __construct(string $url, \stdClass $config, bool $preventredirect = true) {
         if (empty($url)) {
             throw new \moodle_exception('h5pinvalidurl', 'core_h5p');
         }
         $this->url = new \moodle_url($url);
+        $this->preventredirect = $preventredirect;
 
         $this->factory = new \core_h5p\factory();
 
@@ -313,14 +320,14 @@ class player {
         // For CONTEXT_MODULE, check if the user is enrolled in the course and has permissions view this .h5p file.
         if ($this->context->contextlevel == CONTEXT_MODULE) {
             // Require login to the course first (without login to the module).
-            require_course_login($course, true, null, false, true);
+            require_course_login($course, true, null, !$this->preventredirect, $this->preventredirect);
 
             // Now check if module is available OR it is restricted but the intro is shown on the course page.
             $cminfo = \cm_info::create($cm);
             if (!$cminfo->uservisible) {
                 if (!$cm->showdescription || !$cminfo->is_visible_on_course_page()) {
                     // Module intro is not visible on the course page and module is not available, show access error.
-                    require_course_login($course, true, $cminfo, false, true);
+                    require_course_login($course, true, $cminfo, !$this->preventredirect, $this->preventredirect);
                 }
             }
         }
index af23629..51599e9 100644 (file)
@@ -34,9 +34,11 @@ $config->export = optional_param('export', 0, PARAM_INT);
 $config->embed = optional_param('embed', 0, PARAM_INT);
 $config->copyright = optional_param('copyright', 0, PARAM_INT);
 
+$preventredirect = optional_param('preventredirect', true, PARAM_BOOL);
+
 $PAGE->set_url(new \moodle_url('/h5p/embed.php', array('url' => $url)));
 try {
-    $h5pplayer = new \core_h5p\player($url, $config);
+    $h5pplayer = new \core_h5p\player($url, $config, $preventredirect);
     $messages = $h5pplayer->get_messages();
 
 } catch (\Exception $e) {