Merge branch 'MDL-80943-402' of https://github.com/paulholden/moodle into MOODLE_402_STABLE
This commit is contained in:
@@ -3330,5 +3330,26 @@ privatefiles,moodle|/user/files.php';
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -180,6 +180,10 @@ class custom_fields {
|
||||
return column::TYPE_TIMESTAMP;
|
||||
}
|
||||
|
||||
if ($field->get('type') === 'select') {
|
||||
return column::TYPE_TEXT;
|
||||
}
|
||||
|
||||
if ($datafield === 'intvalue') {
|
||||
return column::TYPE_INTEGER;
|
||||
}
|
||||
|
||||
@@ -97,16 +97,23 @@ class custom_fields_test extends core_reportbuilder_testcase {
|
||||
$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()
|
||||
]);
|
||||
// Column titles.
|
||||
$this->assertEquals(
|
||||
['Text', 'Textarea', 'Checkbox', 'Date', 'Select'],
|
||||
array_map(fn(column $column) => $column->get_title(), $columns)
|
||||
);
|
||||
|
||||
$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 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)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -116,12 +123,23 @@ class custom_fields_test extends core_reportbuilder_testcase {
|
||||
$this->resetAfterTest();
|
||||
|
||||
$customfields = $this->generate_customfields();
|
||||
$columns = $customfields->get_columns();
|
||||
$this->assertCount(1, ($columns[0])->get_joins());
|
||||
|
||||
$customfields->add_join('JOIN {test} t ON t.id = id');
|
||||
// By default, we always join on the customfield data table.
|
||||
$columns = $customfields->get_columns();
|
||||
$this->assertCount(2, ($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();
|
||||
$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]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -131,12 +149,17 @@ class custom_fields_test extends core_reportbuilder_testcase {
|
||||
$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]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -151,10 +174,11 @@ class custom_fields_test extends core_reportbuilder_testcase {
|
||||
$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)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user