Merge branch 'MDL-70408-master' of git://github.com/sarjona/moodle
authorEloy Lafuente (stronk7) <stronk7@moodle.org>
Wed, 13 Jan 2021 22:59:36 +0000 (23:59 +0100)
committerEloy Lafuente (stronk7) <stronk7@moodle.org>
Wed, 13 Jan 2021 22:59:36 +0000 (23:59 +0100)
mod/h5pactivity/lang/en/h5pactivity.php
mod/h5pactivity/mod_form.php
mod/h5pactivity/tests/behat/contentbank_link.feature

index 97d4bf2..822b338 100644 (file)
@@ -97,6 +97,7 @@ $string['myattempts'] = 'My attempts';
 $string['no_compatible_track'] = 'This interaction ({$a}) does not provide tracking information or the tracking
         provided is not compatible with the current activity version.';
 $string['noparticipants'] = 'No participants to display';
+$string['opencontentbank'] = '<a href="{$a}" target="_blank">Access the H5P file in the content bank</a> (opens in a new window).';
 $string['outcome'] = 'Outcome';
 $string['package'] = 'Package file';
 $string['package_help'] = 'The package file is a h5p file containing H5P interactive content.';
index 2de9409..1467509 100644 (file)
@@ -76,11 +76,33 @@ class mod_h5pactivity_mod_form extends moodleform_mod {
 
         // Add a link to the Content Bank if the user can access.
         $course = $this->get_course();
-        $context = context_course::instance($course->id);
-        if (has_capability('moodle/contentbank:access', $context)) {
-            $url = new moodle_url('/contentbank/index.php', ['contextid' => $context->id]);
-            $msg = get_string('usecontentbank', 'mod_h5pactivity', $url->out());
-            $msg .= ' '.$OUTPUT->help_icon('contentbank', 'mod_h5pactivity');
+        $coursecontext = context_course::instance($course->id);
+        if (has_capability('moodle/contentbank:access', $coursecontext)) {
+            $msg = null;
+            $context = $this->get_context();
+            if ($context instanceof \context_module) {
+                // This is an existing activity. If the H5P file it's a referenced file from the content bank, a link for
+                // displaying this specific content will be used instead of the generic link to the main page of the content bank.
+                $fs = get_file_storage();
+                $files = $fs->get_area_files($context->id, 'mod_h5pactivity', 'package', 0, 'sortorder, itemid, filepath,
+                    filename', false);
+                $file = reset($files);
+                if ($file && $file->get_reference() != null) {
+                    $referencedfile = \repository::get_moodle_file($file->get_reference());
+                    if ($referencedfile->get_component() == 'contentbank') {
+                        // If the attached file is a referencedfile in the content bank, display a link to open this content.
+                        $url = new moodle_url('/contentbank/view.php', ['id' => $referencedfile->get_itemid()]);
+                        $msg = get_string('opencontentbank', 'mod_h5pactivity', $url->out());
+                        $msg .= ' '.$OUTPUT->help_icon('contentbank', 'mod_h5pactivity');
+                    }
+                }
+            }
+            if (!isset($msg)) {
+                $url = new moodle_url('/contentbank/index.php', ['contextid' => $coursecontext->id]);
+                $msg = get_string('usecontentbank', 'mod_h5pactivity', $url->out());
+                $msg .= ' '.$OUTPUT->help_icon('contentbank', 'mod_h5pactivity');
+            }
+
             $mform->addElement('static', 'contentbank', '', $msg);
         }
 
index 9b8eb8f..dfcf5f1 100644 (file)
@@ -1,4 +1,4 @@
-@mod @mod_h5pactivity @core_h5p @_file_upload @_switch_iframe @current
+@mod @mod_h5pactivity @core_h5p @_file_upload @_switch_iframe
 Feature: Content bank link in the activity settings form
   In order to have direct access to the Content bank
   As a teacher
@@ -14,6 +14,9 @@ Feature: Content bank link in the activity settings form
     And the following "course enrolments" exist:
       | user | course | role |
       | teacher1 | C1 | editingteacher |
+    And the following "contentbank content" exist:
+      | contextlevel | reference | contenttype     | user     | contentname         | filepath                                  |
+      | Course       | C1        | contenttype_h5p | admin    | filltheblanks.h5p   | /h5p/tests/fixtures/filltheblanks.h5p     |
 
   @javascript
   Scenario: The content bank link should go to the course Content bank
@@ -33,3 +36,71 @@ Feature: Content bank link in the activity settings form
     And I am on "Course 1" course homepage with editing mode on
     And I add a "H5P" to section "1"
     Then I should not see "Use the content Bank (opens in new window) to manage your H5P files"
+
+  @javascript
+  Scenario: A different message should be displayed if the package file is a link to the content bank file
+    Given I log in as "admin"
+    And I am on "Course 1" course homepage with editing mode on
+    And I add a "H5P" to section "1"
+    And I set the following fields to these values:
+      | Name                       | H5P package added with link to content bank |
+      | Description                | Description                                 |
+    And I click on "Add..." "button" in the "Package file" "form_row"
+    And I select "Content bank" repository in file picker
+    And I click on "filltheblanks.h5p" "file" in repository content area
+    And I click on "Link to the file" "radio"
+    And I click on "Select this file" "button"
+    And I click on "Save and display" "button"
+    And I switch to "h5p-player" class iframe
+    And I switch to "h5p-iframe" class iframe
+    And I should see "Of which countries are Berlin, Washington, Beijing, Canberra and Brasilia the capitals?"
+    And I switch to the main frame
+    When I navigate to "Edit settings" in current page administration
+    Then I should not see "Use the content Bank (opens in new window) to manage your H5P files"
+    And I should see "Access the H5P file in the content bank (opens in a new window)."
+    And I follow "Access the H5P file in the content bank"
+
+  @javascript
+  Scenario: The content bank link should go to the course Content bank if the file is a copy to a content bank file
+    Given I log in as "admin"
+    And I am on "Course 1" course homepage with editing mode on
+    And I add a "H5P" to section "1"
+    And I set the following fields to these values:
+      | Name                       | H5P package added with link to content bank |
+      | Description                | Description                                 |
+    And I click on "Add..." "button" in the "Package file" "form_row"
+    And I select "Content bank" repository in file picker
+    And I click on "filltheblanks.h5p" "file" in repository content area
+    And I click on "Make a copy of the file" "radio"
+    And I click on "Select this file" "button"
+    And I click on "Save and display" "button"
+    And I switch to "h5p-player" class iframe
+    And I switch to "h5p-iframe" class iframe
+    And I should see "Of which countries are Berlin,"
+    And I switch to the main frame
+    When I navigate to "Edit settings" in current page administration
+    Then I should see "Use the content bank (opens in new window) to manage your H5P files"
+
+  @javascript
+  Scenario: The content bank link should go to the course Content bank if the file is referenced but to another repository
+    Given I log in as "admin"
+    And I follow "Manage private files..."
+    And I upload "h5p/tests/fixtures/guess-the-answer.h5p" file to "Files" filemanager
+    And I click on "Save changes" "button"
+    And I am on "Course 1" course homepage with editing mode on
+    And I add a "H5P" to section "1"
+    And I set the following fields to these values:
+      | Name                       | H5P package added with link to content bank |
+      | Description                | Description                                 |
+    And I click on "Add..." "button" in the "Package file" "form_row"
+    And I select "Private files" repository in file picker
+    And I click on "guess-the-answer.h5p" "file" in repository content area
+    And I click on "Link to the file" "radio"
+    And I click on "Select this file" "button"
+    And I click on "Save and display" "button"
+    And I switch to "h5p-player" class iframe
+    And I switch to "h5p-iframe" class iframe
+    And I should see "Which fruit is this?"
+    And I switch to the main frame
+    When I navigate to "Edit settings" in current page administration
+    Then I should see "Use the content bank (opens in new window) to manage your H5P files"