From 064e1a7e3965e065d5ac8f9439c7334e24d04ab9 Mon Sep 17 00:00:00 2001 From: Sara Arjona Date: Fri, 4 Dec 2020 16:45:08 +0100 Subject: [PATCH] MDL-70408 mod_h5pactivity: Add link to content bank content If the activity uses a referenced H5P file from the content bank, a link for displaying this specific content will be shown into the H5P activity form instead of the generic one to the main content bank page. --- mod/h5pactivity/lang/en/h5pactivity.php | 1 + mod/h5pactivity/mod_form.php | 32 ++++++-- .../tests/behat/contentbank_link.feature | 73 ++++++++++++++++++- 3 files changed, 100 insertions(+), 6 deletions(-) diff --git a/mod/h5pactivity/lang/en/h5pactivity.php b/mod/h5pactivity/lang/en/h5pactivity.php index 97d4bf27929..822b338ee96 100644 --- a/mod/h5pactivity/lang/en/h5pactivity.php +++ b/mod/h5pactivity/lang/en/h5pactivity.php @@ -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'] = 'Access the H5P file in the content bank (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.'; diff --git a/mod/h5pactivity/mod_form.php b/mod/h5pactivity/mod_form.php index 2de940952d2..14675092b58 100644 --- a/mod/h5pactivity/mod_form.php +++ b/mod/h5pactivity/mod_form.php @@ -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); } diff --git a/mod/h5pactivity/tests/behat/contentbank_link.feature b/mod/h5pactivity/tests/behat/contentbank_link.feature index 9b8eb8f5f85..dfcf5f17f76 100644 --- a/mod/h5pactivity/tests/behat/contentbank_link.feature +++ b/mod/h5pactivity/tests/behat/contentbank_link.feature @@ -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"