Skip to content

Commit

Permalink
Merge branch 'MDL-80943-402' of https://github.com/paulholden/moodle
Browse files Browse the repository at this point in the history
…into MOODLE_402_STABLE
  • Loading branch information
ilyatregubov committed Mar 8, 2024
2 parents fc6ad45 + b014a4b commit 8f7b882
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 20 deletions.
21 changes: 21 additions & 0 deletions lib/db/upgrade.php
Expand Up @@ -3330,5 +3330,26 @@ function xmldb_main_upgrade($oldversion) {
upgrade_main_savepoint(true, 2023042405.06);
}

if ($oldversion < 2023042406.05) {

// Get all "select" custom field shortnames.
$fieldshortnames = $DB->get_fieldset_select('customfield_field', 'shortname', 'type = :type', ['type' => 'select']);

// Ensure any used in custom reports columns are not using integer type aggregation.
foreach ($fieldshortnames as $fieldshortname) {
$DB->execute("
UPDATE {reportbuilder_column}
SET aggregation = NULL
WHERE " . $DB->sql_like('uniqueidentifier', ':uniqueidentifier', false) . "
AND aggregation IN ('avg', 'max', 'min', 'sum')
", [
'uniqueidentifier' => '%' . $DB->sql_like_escape(":customfield_{$fieldshortname}"),
]);
}

// Main savepoint reached.
upgrade_main_savepoint(true, 2023042406.05);
}

return true;
}
4 changes: 4 additions & 0 deletions reportbuilder/classes/local/helpers/custom_fields.php
Expand Up @@ -180,6 +180,10 @@ private function get_column_type(field_controller $field, string $datafield): in
return column::TYPE_TIMESTAMP;
}

if ($field->get('type') === 'select') {
return column::TYPE_TEXT;
}

if ($datafield === 'intvalue') {
return column::TYPE_INTEGER;
}
Expand Down
62 changes: 43 additions & 19 deletions reportbuilder/tests/local/helpers/custom_fields_test.php
Expand Up @@ -97,16 +97,23 @@ public function test_get_columns(): void {
$this->assertCount(5, $columns);
$this->assertContainsOnlyInstancesOf(column::class, $columns);

[$column0, $column1, $column2, $column3, $column4] = $columns;
$this->assertEqualsCanonicalizing(['Text', 'Textarea', 'Checkbox', 'Date', 'Select'], [
$column0->get_title(), $column1->get_title(), $column2->get_title(), $column3->get_title(), $column4->get_title()
]);

$this->assertEquals(column::TYPE_TEXT, $column0->get_type());
$this->assertEquals('course', $column0->get_entity_name());
$this->assertStringStartsWith('LEFT JOIN {customfield_data}', $column0->get_joins()[0]);
// Column of type TEXT is sortable.
$this->assertTrue($column0->get_is_sortable());
// Column titles.
$this->assertEquals(
['Text', 'Textarea', 'Checkbox', 'Date', 'Select'],
array_map(fn(column $column) => $column->get_title(), $columns)
);

// Column types.
$this->assertEquals(
[column::TYPE_TEXT, column::TYPE_LONGTEXT, column::TYPE_BOOLEAN, column::TYPE_TIMESTAMP, column::TYPE_TEXT],
array_map(fn(column $column) => $column->get_type(), $columns)
);

// Column sortable.
$this->assertEquals(
[true, false, true, true, true],
array_map(fn(column $column) => $column->get_is_sortable(), $columns)
);
}

/**
Expand All @@ -116,12 +123,23 @@ public function test_add_join(): void {
$this->resetAfterTest();

$customfields = $this->generate_customfields();

// By default, we always join on the customfield data table.
$columns = $customfields->get_columns();
$this->assertCount(1, ($columns[0])->get_joins());
$joins = $columns[0]->get_joins();

$this->assertCount(1, $joins);
$this->assertStringStartsWith('LEFT JOIN {customfield_data}', $joins[0]);

// Add additional join.
$customfields->add_join('JOIN {test} t ON t.id = id');

$columns = $customfields->get_columns();
$this->assertCount(2, ($columns[0])->get_joins());
$joins = $columns[0]->get_joins();

$this->assertCount(2, $joins);
$this->assertEquals('JOIN {test} t ON t.id = id', $joins[0]);
$this->assertStringStartsWith('LEFT JOIN {customfield_data}', $joins[1]);
}

/**
Expand All @@ -131,12 +149,17 @@ public function test_add_joins(): void {
$this->resetAfterTest();

$customfields = $this->generate_customfields();
$columns = $customfields->get_columns();
$this->assertCount(1, ($columns[0])->get_joins());

// Add additional joins.
$customfields->add_joins(['JOIN {test} t ON t.id = id', 'JOIN {test2} t2 ON t2.id = id']);

$columns = $customfields->get_columns();
$this->assertCount(3, ($columns[0])->get_joins());
$joins = $columns[0]->get_joins();

$this->assertCount(3, $joins);
$this->assertEquals('JOIN {test} t ON t.id = id', $joins[0]);
$this->assertEquals('JOIN {test2} t2 ON t2.id = id', $joins[1]);
$this->assertStringStartsWith('LEFT JOIN {customfield_data}', $joins[2]);
}

/**
Expand All @@ -151,10 +174,11 @@ public function test_get_filters(): void {
$this->assertCount(5, $filters);
$this->assertContainsOnlyInstancesOf(filter::class, $filters);

[$filter0, $filter1, $filter2, $filter3, $filter4] = $filters;
$this->assertEqualsCanonicalizing(['Text', 'Textarea', 'Checkbox', 'Date', 'Select'], [
$filter0->get_header(), $filter1->get_header(), $filter2->get_header(), $filter3->get_header(), $filter4->get_header()
]);
// Filter titles.
$this->assertEquals(
['Text', 'Textarea', 'Checkbox', 'Date', 'Select'],
array_map(fn(filter $filter) => $filter->get_header(), $filters)
);
}

/**
Expand Down
2 changes: 1 addition & 1 deletion version.php
Expand Up @@ -29,7 +29,7 @@

defined('MOODLE_INTERNAL') || die();

$version = 2023042406.04; // 20230424 = branching date YYYYMMDD - do not modify!
$version = 2023042406.05; // 20230424 = branching date YYYYMMDD - do not modify!
// RR = release increments - 00 in DEV branches.
// .XX = incremental changes.
$release = '4.2.6+ (Build: 20240305)'; // Human-friendly version name
Expand Down

0 comments on commit 8f7b882

Please sign in to comment.