MDL-85470 reportbuilder: New column containing badge image, name, link
This commit is contained in:
@@ -130,6 +130,38 @@ class badge extends base {
|
||||
return html_writer::link($url, $row->name);
|
||||
});
|
||||
|
||||
// Name with image and link.
|
||||
$columns[] = (new column(
|
||||
'namewithimagelink',
|
||||
new lang_string('namewithimagelink', 'core_badges'),
|
||||
$this->get_entity_name()
|
||||
))
|
||||
->add_joins($this->get_joins())
|
||||
->add_join("LEFT JOIN {context} {$contextalias}
|
||||
ON {$contextalias}.contextlevel = " . CONTEXT_COURSE . "
|
||||
AND {$contextalias}.instanceid = {$badgealias}.courseid")
|
||||
->add_fields(
|
||||
"{$badgealias}.name, {$badgealias}.id, {$badgealias}.type, {$badgealias}.courseid"
|
||||
)
|
||||
->add_field($DB->sql_cast_to_char("{$badgealias}.imagecaption"), 'imagecaption')
|
||||
->add_fields(context_helper::get_preload_record_columns_sql($contextalias))
|
||||
->set_is_sortable(true)
|
||||
->add_callback(static function ($value, stdClass $badge): string {
|
||||
if ($badge->id === null) {
|
||||
return '';
|
||||
}
|
||||
if ($badge->type == BADGE_TYPE_SITE) {
|
||||
$context = context_system::instance();
|
||||
} else {
|
||||
context_helper::preload_from_record($badge);
|
||||
$context = context_course::instance($badge->courseid);
|
||||
}
|
||||
|
||||
$badgeimage = moodle_url::make_pluginfile_url($context->id, 'badges', 'badgeimage', $badge->id, '/', 'f2');
|
||||
$url = new moodle_url('/badges/overview.php', ['id' => $badge->id]);
|
||||
return html_writer::img($badgeimage, $badge->imagecaption) . ' ' . html_writer::link($url, $badge->name);
|
||||
});
|
||||
|
||||
// Description (note, this column contains plaintext so requires no post-processing).
|
||||
$descriptionfieldsql = "{$badgealias}.description";
|
||||
if ($DB->get_dbfamily() === 'oracle') {
|
||||
|
||||
@@ -125,6 +125,7 @@ final class badges_test extends core_reportbuilder_testcase {
|
||||
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'user:fullname', 'sortenabled' => 1]);
|
||||
|
||||
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'badge:namewithlink']);
|
||||
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'badge:namewithimagelink']);
|
||||
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'badge:criteria']);
|
||||
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'badge:image']);
|
||||
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'badge:language']);
|
||||
@@ -146,11 +147,12 @@ final class badges_test extends core_reportbuilder_testcase {
|
||||
['id' => $badgeone->id]), ($badgeone->name));
|
||||
|
||||
// First badge, issued to user one.
|
||||
[$badgename, $fullname, $namewithlink, $criteria, $image, $language, $version, $status, $expiry, $tag, $expires,
|
||||
$visible, $coursename] = array_values($content[0]);
|
||||
[$badgename, $fullname, $namewithlink, $namewithimagelink, $criteria, $image, $language, $version, $status, $expiry, $tag,
|
||||
$expires, $visible, $coursename] = array_values($content[0]);
|
||||
$this->assertEquals($badgeone->name, $badgename);
|
||||
$this->assertEquals(fullname($user1), $fullname);
|
||||
$this->assertEquals($expectedbadgeonelink, $namewithlink);
|
||||
$this->assertEquals($image . ' ' . $expectedbadgeonelink, $namewithimagelink);
|
||||
$this->assertStringContainsString('Awarded by: Manager', $criteria);
|
||||
$this->assertStringContainsString('Image caption', $image);
|
||||
$this->assertEquals('German', $language);
|
||||
@@ -163,11 +165,12 @@ final class badges_test extends core_reportbuilder_testcase {
|
||||
$this->assertEquals('PHPUnit test site', $coursename);
|
||||
|
||||
// First badge, issued to user two.
|
||||
[$badgename, $fullname, $namewithlink, $criteria, $image, $language, $version, $status, $expiry, $tag, $expires,
|
||||
$visible, $coursename] = array_values($content[1]);
|
||||
[$badgename, $fullname, $namewithlink, $namewithimagelink, $criteria, $image, $language, $version, $status, $expiry, $tag,
|
||||
$expires, $visible, $coursename] = array_values($content[1]);
|
||||
$this->assertEquals($badgeone->name, $badgename);
|
||||
$this->assertEquals(fullname($user2), $fullname);
|
||||
$this->assertEquals($expectedbadgeonelink, $namewithlink);
|
||||
$this->assertEquals($image . ' ' . $expectedbadgeonelink, $namewithimagelink);
|
||||
$this->assertStringContainsString('Awarded by: Manager', $criteria);
|
||||
$this->assertStringContainsString('Image caption', $image);
|
||||
$this->assertEquals('German', $language);
|
||||
@@ -183,11 +186,12 @@ final class badges_test extends core_reportbuilder_testcase {
|
||||
['id' => $badgetwo->id]), ($badgetwo->name));
|
||||
|
||||
// Course badge, not issues to any users.
|
||||
[$badgename, $fullname, $namewithlink, $criteria, $image, $language, $version, $status, $expiry, $tag, $expires,
|
||||
$visible, $coursename] = array_values($content[2]);
|
||||
[$badgename, $fullname, $namewithlink, $namewithimagelink, $criteria, $image, $language, $version, $status, $expiry, $tag,
|
||||
$expires, $visible, $coursename] = array_values($content[2]);
|
||||
$this->assertEquals($badgetwo->name, $badgename);
|
||||
$this->assertEmpty($fullname);
|
||||
$this->assertEquals($expectedbadgetwolink, $namewithlink);
|
||||
$this->assertEquals($image . ' ' . $expectedbadgetwolink, $namewithimagelink);
|
||||
$this->assertEquals('Criteria for this badge have not been set up yet.', $criteria);
|
||||
$this->assertStringContainsString('Image caption', $image);
|
||||
$this->assertEquals('English', $language);
|
||||
|
||||
@@ -415,6 +415,7 @@ $string['month'] = 'Month(s)';
|
||||
$string['moredetails'] = 'More details';
|
||||
$string['mybadges'] = 'My badges';
|
||||
$string['mybackpack'] = 'My backpack settings';
|
||||
$string['namewithimagelink'] = 'Name with image and link';
|
||||
$string['namewithlink'] = 'Name with link';
|
||||
$string['never'] = 'Never';
|
||||
$string['newbackpack'] = 'Add a new backpack';
|
||||
|
||||
Reference in New Issue
Block a user