diff --git a/contentbank/classes/contenttype.php b/contentbank/classes/contenttype.php index 7f7fbf59694..79d658b3612 100644 --- a/contentbank/classes/contenttype.php +++ b/contentbank/classes/contenttype.php @@ -159,37 +159,34 @@ abstract class contenttype { /** * Returns the URL where the content will be visualized. * - * @param stdClass $record The content to be displayed. + * @param content $content The content to be displayed. * @return string URL where to visualize the given content. */ - public function get_view_url(\stdClass $record): string { - return new moodle_url('/contentbank/view.php', ['id' => $record->id]); + public function get_view_url(content $content): string { + return new moodle_url('/contentbank/view.php', ['id' => $content->get_id()]); } /** * Returns the HTML content to add to view.php visualizer. * - * @param stdClass $record The content to be displayed. + * @param content $content The content to be displayed. * @return string HTML code to include in view.php. */ - public function get_view_content(\stdClass $record): string { + public function get_view_content(content $content): string { // Trigger an event for viewing this content. $event = contentbank_content_viewed::create_from_record($record); $event->trigger(); - - // Main contenttype class can visualize the content, but plugins could overwrite visualization. - return ''; } /** * Returns the HTML code to render the icon for content bank contents. * - * @param string $contentname The contentname to add as alt value to the icon. + * @param content $content The content to be displayed. * @return string HTML code to render the icon */ - public function get_icon(string $contentname): string { + public function get_icon(content $content): string { global $OUTPUT; - return $OUTPUT->pix_icon('f/unknown-64', $contentname, 'moodle', ['class' => 'iconsize-big']); + return $OUTPUT->image_url('f/unknown-64', 'moodle')->out(false); } /** diff --git a/contentbank/classes/output/bankcontent.php b/contentbank/classes/output/bankcontent.php index 471266e5ae8..2ea5c4d8391 100644 --- a/contentbank/classes/output/bankcontent.php +++ b/contentbank/classes/output/bankcontent.php @@ -85,8 +85,8 @@ class bankcontent implements renderable, templatable { $name = $content->get_name(); $contentdata[] = array( 'name' => $name, - 'link' => $contenttype->get_view_url($record), - 'icon' => $contenttype->get_icon($name) + 'link' => $contenttype->get_view_url($content), + 'icon' => $contenttype->get_icon($content) ); } $data->contents = $contentdata; diff --git a/contentbank/contenttype/h5p/classes/contenttype.php b/contentbank/contenttype/h5p/classes/contenttype.php index 806205d4f63..d48941dfc70 100644 --- a/contentbank/contenttype/h5p/classes/contenttype.php +++ b/contentbank/contenttype/h5p/classes/contenttype.php @@ -25,7 +25,6 @@ namespace contenttype_h5p; use core\event\contentbank_content_viewed; -use stdClass; use html_writer; /** @@ -57,15 +56,14 @@ class contenttype extends \core_contentbank\contenttype { /** * Returns the HTML content to add to view.php visualizer. * - * @param stdClass $record Th content to be displayed. + * @param content $content The content to be displayed. * @return string HTML code to include in view.php. */ - public function get_view_content(\stdClass $record): string { + public function get_view_content(\core_contentbank\content $content): string { // Trigger an event for viewing this content. - $event = contentbank_content_viewed::create_from_record($record); + $event = contentbank_content_viewed::create_from_record($content->get_content()); $event->trigger(); - $content = new content($record); $fileurl = $content->get_file_url(); $html = html_writer::tag('h2', $content->get_name()); $html .= \core_h5p\player::display($fileurl, new \stdClass(), true); @@ -75,12 +73,32 @@ class contenttype extends \core_contentbank\contenttype { /** * Returns the HTML code to render the icon for H5P content types. * - * @param string $contentname The contentname to add as alt value to the icon. + * @param content $content The content to be displayed. * @return string HTML code to render the icon */ - public function get_icon(string $contentname): string { - global $OUTPUT; - return $OUTPUT->pix_icon('f/h5p-64', $contentname, 'moodle', ['class' => 'iconsize-big']); + public function get_icon(\core_contentbank\content $content): string { + global $OUTPUT, $DB; + + $iconurl = $OUTPUT->image_url('f/h5p-64', 'moodle')->out(false); + $file = $content->get_file(); + if (!empty($file)) { + $h5p = \core_h5p\api::get_content_from_pathnamehash($file->get_pathnamehash()); + if (!empty($h5p)) { + \core_h5p\local\library\autoloader::register(); + if ($h5plib = $DB->get_record('h5p_libraries', ['id' => $h5p->mainlibraryid])) { + $h5pfilestorage = new \core_h5p\file_storage(); + $h5picon = $h5pfilestorage->get_icon_url( + $h5plib->id, + $h5plib->machinename, + $h5plib->majorversion, + $h5plib->minorversion); + if (!empty($h5picon)) { + $iconurl = $h5picon; + } + } + } + } + return $iconurl; } /** diff --git a/contentbank/contenttype/h5p/tests/behat/admin_upload_content.feature b/contentbank/contenttype/h5p/tests/behat/admin_upload_content.feature index ad9c5c56a9e..8639d35e937 100644 --- a/contentbank/contenttype/h5p/tests/behat/admin_upload_content.feature +++ b/contentbank/contenttype/h5p/tests/behat/admin_upload_content.feature @@ -34,7 +34,6 @@ Feature: H5P file upload to content bank for admins And I click on "Select this file" "button" And I click on "Save changes" "button" And I wait until the page is ready - And I click on "filltheblanks.h5p" "link" And I switch to "h5p-player" class iframe And I switch to "h5p-iframe" class iframe Then I should see "Of which countries" diff --git a/contentbank/contenttype/h5p/tests/contenttype_h5p_test.php b/contentbank/contenttype/h5p/tests/contenttype_h5p_test.php index 3b9e3e3941c..c708516718a 100644 --- a/contentbank/contenttype/h5p/tests/contenttype_h5p_test.php +++ b/contentbank/contenttype/h5p/tests/contenttype_h5p_test.php @@ -105,4 +105,46 @@ class contenttype_h5p_contenttype_plugin_testcase extends advanced_testcase { $this->assertFalse($coursetype->can_upload()); $this->assertFalse($systemtype->can_upload()); } + + /** + * Tests get_icon result. + * + * @covers ::get_icon + */ + public function test_get_icon() { + global $CFG; + + $this->resetAfterTest(); + $systemcontext = context_system::instance(); + $this->setAdminUser(); + $contenttype = new contenttype_h5p\contenttype($systemcontext); + + // Add an H5P fill the blanks file to the content bank. + $filepath = $CFG->dirroot . '/h5p/tests/fixtures/filltheblanks.h5p'; + $generator = $this->getDataGenerator()->get_plugin_generator('core_contentbank'); + $contents = $generator->generate_contentbank_data('contenttype_h5p', 1, 0, $systemcontext, true, $filepath); + $filltheblanks = array_shift($contents); + + // Add an H5P find the words file to the content bank. + $filepath = $CFG->dirroot . '/h5p/tests/fixtures/find-the-words.h5p'; + $generator = $this->getDataGenerator()->get_plugin_generator('core_contentbank'); + $contents = $generator->generate_contentbank_data('contenttype_h5p', 1, 0, $systemcontext, true, $filepath); + $findethewords = array_shift($contents); + + // Check before deploying the icon for both contents is the same: default one. + // Because we don't know specific H5P content type yet. + $defaulticon = $contenttype->get_icon($filltheblanks); + $this->assertEquals($defaulticon, $contenttype->get_icon($findethewords)); + $this->assertContains('h5p', $defaulticon); + + // Deploy one of the contents though the player to create the H5P DB entries and know specific content type. + $h5pplayer = new \core_h5p\player($findethewords->get_file_url(), new \stdClass(), true); + $h5pplayer->add_assets_to_page(); + $h5pplayer->output(); + + // Once the H5P has been deployed, we know the specific H5P content type, so the icon returned is not default one. + $findicon = $contenttype->get_icon($findethewords); + $this->assertNotEquals($defaulticon, $findicon); + $this->assertContains('find', $findicon, '', true); + } } diff --git a/contentbank/templates/bankcontent.mustache b/contentbank/templates/bankcontent.mustache index 396c2978526..8c4362683bc 100644 --- a/contentbank/templates/bankcontent.mustache +++ b/contentbank/templates/bankcontent.mustache @@ -23,11 +23,11 @@ { "name": "accordion.h5p", "link": "http://something/contentbank/contenttype/h5p/view.php?url=http://something/pluginfile.php/1/contentbank/public/accordion.h5p", - "icon" : "
" + "icon" : "http://something/theme/image.php/boost/core/1581597850/f/h5p-64" }, { "name": "resume.pdf", - "icon": " " + "icon": "http://something/theme/image.php/boost/core/1584597850/f/pdf-64" } ], "tools": [ @@ -65,7 +65,7 @@