From 9e5655b7c71de044fabbcc16c5c945c32653a56c Mon Sep 17 00:00:00 2001 From: Sara Arjona Date: Tue, 16 Feb 2021 12:39:35 +0100 Subject: [PATCH] MDL-70913 core_badges: Use and update properly sortorder Sortorder field in badge_external_backpack was updated with a wrong value. This patch fixes this behaviour and adds sortorder as sorting criteria for displaying the list of site backpacks. In the phpunit method reviewed for covering this, a couple of assertEquals() calls have been changed too to put the expected value first. --- badges/tests/badgeslib_test.php | 6 ++++-- lib/badgeslib.php | 9 +++++---- lib/db/upgrade.php | 13 +++++++++++++ version.php | 2 +- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/badges/tests/badgeslib_test.php b/badges/tests/badgeslib_test.php index f764c8ae05f..2c0968446b2 100644 --- a/badges/tests/badgeslib_test.php +++ b/badges/tests/badgeslib_test.php @@ -1145,6 +1145,7 @@ class core_badges_badgeslib_testcase extends advanced_testcase { $data['password'] = 'test'; if ($isadmin || $updatetest) { $this->setAdminUser(); + $lastmax = $DB->get_field_sql('SELECT MAX(sortorder) FROM {badge_external_backpack}'); $backpack = badges_create_site_backpack((object) $data); } @@ -1156,8 +1157,9 @@ class core_badges_badgeslib_testcase extends advanced_testcase { badges_update_site_backpack($backpack, (object)$data); } $record = $DB->get_record('badge_external_backpack', ['id' => $backpack]); - $this->assertEquals($record->backpackweburl, $data['backpackweburl']); - $this->assertEquals($record->backpackapiurl, $data['backpackapiurl']); + $this->assertEquals($data['backpackweburl'], $record->backpackweburl); + $this->assertEquals($data['backpackapiurl'], $record->backpackapiurl); + $this->assertEquals($lastmax + 1, $record->sortorder); $record = $DB->get_record('badge_backpack', ['userid' => 0]); $this->assertNotEmpty($record); } else { diff --git a/lib/badgeslib.php b/lib/badgeslib.php index 2c6e44b8baa..d67c1deeeb6 100644 --- a/lib/badgeslib.php +++ b/lib/badgeslib.php @@ -772,8 +772,9 @@ function badges_create_site_backpack($data) { $context = context_system::instance(); require_capability('moodle/badges:manageglobalsettings', $context); - $count = $DB->count_records('badge_external_backpack'); - $data->sortorder = $count; + $max = $DB->get_field_sql('SELECT MAX(sortorder) FROM {badge_external_backpack}'); + $data->sortorder = $max + 1; + return badges_save_external_backpack($data); } @@ -983,7 +984,7 @@ function badges_get_site_primary_backpack() { function badges_get_site_backpacks() { global $DB, $CFG; - $all = $DB->get_records('badge_external_backpack'); + $all = $DB->get_records('badge_external_backpack', null, 'sortorder ASC'); foreach ($all as $key => $bp) { if ($bp->id == $CFG->badges_site_backpack) { @@ -1379,4 +1380,4 @@ function badges_generate_badgr_open_url($backpack, $type, $externalid) { return "{$url->get_scheme()}://{$url->get_host()}/public/{$entity}s/$externalid"; } -} \ No newline at end of file +} diff --git a/lib/db/upgrade.php b/lib/db/upgrade.php index 85a4cadb3d8..532b238c23d 100644 --- a/lib/db/upgrade.php +++ b/lib/db/upgrade.php @@ -2458,5 +2458,18 @@ function xmldb_main_upgrade($oldversion) { upgrade_main_savepoint(true, 2021052500.60); } + if ($oldversion < 2021052500.64) { + // Get all the external backpacks and update the sortorder column, to avoid repeated/wrong values. As sortorder was not + // used since now, the id column will be the criteria to follow for re-ordering them with a valid value. + $i = 1; + $records = $DB->get_records('badge_external_backpack', null, 'id ASC'); + foreach ($records as $record) { + $record->sortorder = $i++; + $DB->update_record('badge_external_backpack', $record); + } + + upgrade_main_savepoint(true, 2021052500.64); + } + return true; } diff --git a/version.php b/version.php index 482be7be223..3f7de16ae8e 100644 --- a/version.php +++ b/version.php @@ -29,7 +29,7 @@ defined('MOODLE_INTERNAL') || die(); -$version = 2021052500.63; // YYYYMMDD = weekly release date of this DEV branch. +$version = 2021052500.64; // YYYYMMDD = weekly release date of this DEV branch. // RR = release increments - 00 in DEV branches. // .XX = incremental changes. $release = '4.0dev (Build: 20210226)'; // Human-friendly version name