| Línea 18... |
Línea 18... |
| 18 |
|
18 |
|
| Línea 19... |
Línea 19... |
| 19 |
namespace core_reportbuilder\local\helpers;
|
19 |
namespace core_reportbuilder\local\helpers;
|
| 20 |
|
20 |
|
| 21 |
use core_customfield_generator;
|
- |
|
| 22 |
use core_reportbuilder_generator;
|
21 |
use core_customfield_generator;
|
| 23 |
use core_reportbuilder_testcase;
|
22 |
use core_reportbuilder_generator;
|
| 24 |
use core_reportbuilder\local\entities\course;
|
- |
|
| 25 |
use core_reportbuilder\local\filters\boolean_select;
|
- |
|
| 26 |
use core_reportbuilder\local\filters\date;
|
- |
|
| 27 |
use core_reportbuilder\local\filters\select;
|
23 |
use core_reportbuilder\local\entities\course;
|
| 28 |
use core_reportbuilder\local\filters\text;
|
24 |
use core_reportbuilder\local\filters\{boolean_select, date, number, select, text};
|
| 29 |
use core_reportbuilder\local\report\column;
|
25 |
use core_reportbuilder\local\report\{column, filter};
|
| Línea 30... |
Línea -... |
| 30 |
use core_reportbuilder\local\report\filter;
|
- |
|
| 31 |
use core_course\reportbuilder\datasource\{categories, courses};
|
- |
|
| 32 |
|
- |
|
| 33 |
defined('MOODLE_INTERNAL') || die();
|
- |
|
| 34 |
|
- |
|
| 35 |
global $CFG;
|
26 |
use core_reportbuilder\tests\core_reportbuilder_testcase;
|
| 36 |
require_once("{$CFG->dirroot}/reportbuilder/tests/helpers.php");
|
27 |
use core_course\reportbuilder\datasource\{categories, courses};
|
| 37 |
|
28 |
|
| 38 |
/**
|
29 |
/**
|
| 39 |
* Unit tests for custom fields helper
|
30 |
* Unit tests for custom fields helper
|
| 40 |
*
|
31 |
*
|
| 41 |
* @package core_reportbuilder
|
32 |
* @package core_reportbuilder
|
| 42 |
* @covers \core_reportbuilder\local\helpers\custom_fields
|
33 |
* @covers \core_reportbuilder\local\helpers\custom_fields
|
| 43 |
* @copyright 2021 David Matamoros <davidmc@moodle.com>
|
34 |
* @copyright 2021 David Matamoros <davidmc@moodle.com>
|
| Línea 44... |
Línea 35... |
| 44 |
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
35 |
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
| 45 |
*/
|
36 |
*/
|
| 46 |
class custom_fields_test extends core_reportbuilder_testcase {
|
37 |
final class custom_fields_test extends core_reportbuilder_testcase {
|
| 47 |
|
38 |
|
| Línea 60... |
Línea 51... |
| 60 |
'itemid' => 0,
|
51 |
'itemid' => 0,
|
| 61 |
'contextid' => \context_system::instance()->id
|
52 |
'contextid' => \context_system::instance()->id
|
| 62 |
]);
|
53 |
]);
|
| Línea 63... |
Línea 54... |
| 63 |
|
54 |
|
| 64 |
$generator->create_field(
|
55 |
$generator->create_field(
|
| - |
|
56 |
['categoryid' => $category->get('id'), 'type' => 'text', 'name' => 'Text', 'shortname' => 'text',
|
| Línea 65... |
Línea 57... |
| 65 |
['categoryid' => $category->get('id'), 'type' => 'text', 'name' => 'Text', 'shortname' => 'text']);
|
57 |
'configdata' => ['defaultvalue' => 'default']]);
|
| 66 |
|
58 |
|
| - |
|
59 |
$generator->create_field(
|
| Línea -... |
Línea 60... |
| - |
|
60 |
['categoryid' => $category->get('id'), 'type' => 'textarea', 'name' => 'Textarea', 'shortname' => 'textarea',
|
| 67 |
$generator->create_field(
|
61 |
'configdata' => ['defaultvalue' => 'Default']]);
|
| 68 |
['categoryid' => $category->get('id'), 'type' => 'textarea', 'name' => 'Textarea', 'shortname' => 'textarea']);
|
62 |
|
| - |
|
63 |
// This field is available only to course teachers.
|
| Línea 69... |
Línea 64... |
| 69 |
|
64 |
$generator->create_field(
|
| 70 |
$generator->create_field(
|
65 |
['categoryid' => $category->get('id'), 'type' => 'checkbox', 'name' => 'Checkbox', 'shortname' => 'checkbox',
|
| Línea 71... |
Línea 66... |
| 71 |
['categoryid' => $category->get('id'), 'type' => 'checkbox', 'name' => 'Checkbox', 'shortname' => 'checkbox']);
|
66 |
'configdata' => ['checkbydefault' => 1, 'visibility' => 1]]);
|
| 72 |
|
67 |
|
| 73 |
$generator->create_field(
|
68 |
$generator->create_field(
|
| - |
|
69 |
['categoryid' => $category->get('id'), 'type' => 'date', 'name' => 'Date', 'shortname' => 'date']);
|
| - |
|
70 |
|
| - |
|
71 |
$generator->create_field(
|
| - |
|
72 |
['categoryid' => $category->get('id'), 'type' => 'select', 'name' => 'Select', 'shortname' => 'select',
|
| Línea 74... |
Línea 73... |
| 74 |
['categoryid' => $category->get('id'), 'type' => 'date', 'name' => 'Date', 'shortname' => 'date']);
|
73 |
'configdata' => ['options' => "Cat\nDog\nFish", 'defaultvalue' => 'Cat']]);
|
| 75 |
|
74 |
|
| Línea 76... |
Línea 75... |
| 76 |
$generator->create_field(
|
75 |
$generator->create_field(
|
| 77 |
['categoryid' => $category->get('id'), 'type' => 'select', 'name' => 'Select', 'shortname' => 'select',
|
76 |
['categoryid' => $category->get('id'), 'type' => 'number', 'name' => 'Number', 'shortname' => 'number',
|
| 78 |
'configdata' => ['options' => "Cat\nDog", 'defaultvalue' => 'Cat']]);
|
- |
|
| 79 |
|
77 |
'configdata' => ['defaultvalue' => 1]]);
|
| Línea 80... |
Línea 78... |
| 80 |
$courseentity = new course();
|
78 |
|
| 81 |
$coursealias = $courseentity->get_table_alias('course');
|
79 |
$courseentity = new course();
|
| 82 |
|
80 |
$coursealias = $courseentity->get_table_alias('course');
|
| 83 |
// Create an instance of the customfields helper.
|
81 |
|
| 84 |
return new custom_fields($coursealias . '.id', $courseentity->get_entity_name(),
|
82 |
// Create an instance of the customfields helper.
|
| - |
|
83 |
return new custom_fields("{$coursealias}.id", $courseentity->get_entity_name(), 'core_course', 'course');
|
| Línea 85... |
Línea 84... |
| 85 |
'core_course', 'course');
|
84 |
}
|
| 86 |
}
|
- |
|
| Línea -... |
Línea 85... |
| - |
|
85 |
|
| 87 |
|
86 |
/**
|
| 88 |
/**
|
87 |
* Test for get_columns
|
| Línea 89... |
Línea 88... |
| 89 |
* Test for get_columns
|
88 |
*/
|
| 90 |
*/
|
89 |
public function test_get_columns(): void {
|
| - |
|
90 |
$this->resetAfterTest();
|
| - |
|
91 |
$this->setAdminUser();
|
| 91 |
public function test_get_columns(): void {
|
92 |
|
| - |
|
93 |
$customfields = $this->generate_customfields();
|
| - |
|
94 |
|
| - |
|
95 |
$columns = $customfields->get_columns();
|
| - |
|
96 |
$this->assertCount(6, $columns);
|
| 92 |
$this->resetAfterTest();
|
97 |
$this->assertContainsOnlyInstancesOf(column::class, $columns);
|
| - |
|
98 |
|
| 93 |
|
99 |
// Column titles.
|
| Línea 94... |
Línea 100... |
| 94 |
$customfields = $this->generate_customfields();
|
100 |
$this->assertEquals([
|
| 95 |
$columns = $customfields->get_columns();
|
101 |
'Text',
|
| - |
|
102 |
'Textarea',
|
| - |
|
103 |
'Checkbox',
|
| - |
|
104 |
'Date',
|
| 96 |
|
105 |
'Select',
|
| - |
|
106 |
'Number',
|
| - |
|
107 |
], array_map(
|
| - |
|
108 |
fn(column $column) => $column->get_title(),
|
| 97 |
$this->assertCount(5, $columns);
|
109 |
$columns,
|
| - |
|
110 |
));
|
| 98 |
$this->assertContainsOnlyInstancesOf(column::class, $columns);
|
111 |
|
| Línea 99... |
Línea 112... |
| 99 |
|
112 |
// Column types.
|
| 100 |
// Column titles.
|
113 |
$this->assertEquals([
|
| - |
|
114 |
column::TYPE_TEXT,
|
| - |
|
115 |
column::TYPE_LONGTEXT,
|
| - |
|
116 |
column::TYPE_BOOLEAN,
|
| - |
|
117 |
column::TYPE_TIMESTAMP,
|
| - |
|
118 |
column::TYPE_TEXT,
|
| - |
|
119 |
column::TYPE_FLOAT,
|
| - |
|
120 |
], array_map(
|
| - |
|
121 |
fn(column $column) => $column->get_type(),
|
| - |
|
122 |
$columns,
|
| - |
|
123 |
));
|
| - |
|
124 |
|
| - |
|
125 |
// Column sortable.
|
| - |
|
126 |
$this->assertEquals([
|
| - |
|
127 |
true,
|
| - |
|
128 |
true,
|
| - |
|
129 |
true,
|
| - |
|
130 |
true,
|
| - |
|
131 |
true,
|
| - |
|
132 |
true,
|
| - |
|
133 |
], array_map(
|
| - |
|
134 |
fn(column $column) => $column->get_is_sortable(),
|
| - |
|
135 |
$columns,
|
| - |
|
136 |
));
|
| - |
|
137 |
|
| 101 |
$this->assertEquals(
|
138 |
// Column available.
|
| - |
|
139 |
$this->assertEquals([
|
| - |
|
140 |
true,
|
| - |
|
141 |
true,
|
| - |
|
142 |
true,
|
| - |
|
143 |
true,
|
| - |
|
144 |
true,
|
| - |
|
145 |
true,
|
| - |
|
146 |
], array_map(
|
| - |
|
147 |
fn(column $column) => $column->get_is_available(),
|
| 102 |
['Text', 'Textarea', 'Checkbox', 'Date', 'Select'],
|
148 |
$columns,
|
| - |
|
149 |
));
|
| 103 |
array_map(fn(column $column) => $column->get_title(), $columns)
|
150 |
|
| 104 |
);
|
151 |
// Column available, for non-privileged user.
|
| Línea 105... |
Línea 152... |
| 105 |
|
152 |
$this->setUser(null);
|
| 106 |
// Column types.
|
153 |
$this->assertEquals([
|
| 107 |
$this->assertEquals(
|
154 |
true,
|
| 108 |
[column::TYPE_TEXT, column::TYPE_LONGTEXT, column::TYPE_BOOLEAN, column::TYPE_TIMESTAMP, column::TYPE_TEXT],
|
155 |
true,
|
| 109 |
array_map(fn(column $column) => $column->get_type(), $columns)
|
156 |
false,
|
| Línea 110... |
Línea 157... |
| 110 |
);
|
157 |
true,
|
| Línea 111... |
Línea 158... |
| 111 |
|
158 |
true,
|
| 112 |
// Column sortable.
|
159 |
true,
|
| 113 |
$this->assertEquals(
|
160 |
], array_map(
|
| - |
|
161 |
fn(column $column) => $column->get_is_available(),
|
| 114 |
[true, false, true, true, true],
|
162 |
$customfields->get_columns(),
|
| - |
|
163 |
));
|
| 115 |
array_map(fn(column $column) => $column->get_is_sortable(), $columns)
|
164 |
}
|
| 116 |
);
|
165 |
|
| Línea 117... |
Línea 166... |
| 117 |
}
|
166 |
/**
|
| 118 |
|
167 |
* Test that joins added to the custom fields helper are present in its columns/filters
|
| Línea 119... |
Línea 168... |
| 119 |
/**
|
168 |
*/
|
| 120 |
* Test for add_join
|
- |
|
| 121 |
*/
|
- |
|
| 122 |
public function test_add_join(): void {
|
169 |
public function test_add_join(): void {
|
| 123 |
$this->resetAfterTest();
|
170 |
$this->resetAfterTest();
|
| 124 |
|
171 |
|
| 125 |
$customfields = $this->generate_customfields();
|
- |
|
| 126 |
|
- |
|
| 127 |
// By default, we always join on the customfield data table.
|
- |
|
| 128 |
$columns = $customfields->get_columns();
|
- |
|
| 129 |
$joins = $columns[0]->get_joins();
|
- |
|
| 130 |
|
- |
|
| 131 |
$this->assertCount(1, $joins);
|
- |
|
| 132 |
$this->assertStringStartsWith('LEFT JOIN {customfield_data}', $joins[0]);
|
- |
|
| 133 |
|
- |
|
| 134 |
// Add additional join.
|
- |
|
| 135 |
$customfields->add_join('JOIN {test} t ON t.id = id');
|
- |
|
| 136 |
|
- |
|
| 137 |
$columns = $customfields->get_columns();
|
172 |
$customfields = $this->generate_customfields();
|
| 138 |
$joins = $columns[0]->get_joins();
|
173 |
|
| 139 |
|
- |
|
| 140 |
$this->assertCount(2, $joins);
|
- |
|
| 141 |
$this->assertEquals('JOIN {test} t ON t.id = id', $joins[0]);
|
174 |
// We always join on the customfield data table.
|
| 142 |
$this->assertStringStartsWith('LEFT JOIN {customfield_data}', $joins[1]);
|
175 |
$columnjoins = $customfields->get_columns()[0]->get_joins();
|
| 143 |
}
|
- |
|
| 144 |
|
176 |
$this->assertCount(1, $columnjoins);
|
| 145 |
/**
|
177 |
$this->assertStringStartsWith('LEFT JOIN {customfield_data}', $columnjoins[0]);
|
| Línea 146... |
Línea 178... |
| 146 |
* Test for add_joins
|
178 |
|
| 147 |
*/
|
179 |
$filterjoins = $customfields->get_filters()[0]->get_joins();
|
| 148 |
public function test_add_joins(): void {
|
180 |
$this->assertCount(1, $filterjoins);
|
| 149 |
$this->resetAfterTest();
|
181 |
$this->assertStringStartsWith('LEFT JOIN {customfield_data}', $filterjoins[0]);
|
| 150 |
|
182 |
|
| - |
|
183 |
// Add additional join.
|
| Línea 151... |
Línea 184... |
| 151 |
$customfields = $this->generate_customfields();
|
184 |
$customfields->add_join('JOIN {test} t ON t.id = id');
|
| 152 |
|
- |
|
| Línea -... |
Línea 185... |
| - |
|
185 |
|
| 153 |
// Add additional joins.
|
186 |
$columnjoins = $customfields->get_columns()[0]->get_joins();
|
| 154 |
$customfields->add_joins(['JOIN {test} t ON t.id = id', 'JOIN {test2} t2 ON t2.id = id']);
|
187 |
$this->assertCount(2, $columnjoins);
|
| Línea -... |
Línea 188... |
| - |
|
188 |
$this->assertEquals('JOIN {test} t ON t.id = id', $columnjoins[0]);
|
| - |
|
189 |
$this->assertStringStartsWith('LEFT JOIN {customfield_data}', $columnjoins[1]);
|
| - |
|
190 |
|
| - |
|
191 |
$filterjoins = $customfields->get_filters()[0]->get_joins();
|
| - |
|
192 |
$this->assertCount(2, $filterjoins);
|
| - |
|
193 |
$this->assertEquals('JOIN {test} t ON t.id = id', $filterjoins[0]);
|
| - |
|
194 |
$this->assertStringStartsWith('LEFT JOIN {customfield_data}', $filterjoins[1]);
|
| - |
|
195 |
}
|
| - |
|
196 |
|
| - |
|
197 |
/**
|
| - |
|
198 |
* Test for get_filters
|
| - |
|
199 |
*/
|
| - |
|
200 |
public function test_get_filters(): void {
|
| 155 |
|
201 |
$this->resetAfterTest();
|
| - |
|
202 |
$this->setAdminUser();
|
| - |
|
203 |
|
| - |
|
204 |
$customfields = $this->generate_customfields();
|
| - |
|
205 |
|
| - |
|
206 |
$filters = $customfields->get_filters();
|
| - |
|
207 |
$this->assertCount(6, $filters);
|
| - |
|
208 |
$this->assertContainsOnlyInstancesOf(filter::class, $filters);
|
| - |
|
209 |
|
| - |
|
210 |
// Filter headers.
|
| - |
|
211 |
$this->assertEquals([
|
| - |
|
212 |
'Text',
|
| - |
|
213 |
'Textarea',
|
| - |
|
214 |
'Checkbox',
|
| 156 |
$columns = $customfields->get_columns();
|
215 |
'Date',
|
| - |
|
216 |
'Select',
|
| - |
|
217 |
'Number',
|
| - |
|
218 |
], array_map(
|
| - |
|
219 |
fn(filter $filter) => $filter->get_header(),
|
| - |
|
220 |
$filters,
|
| - |
|
221 |
));
|
| - |
|
222 |
|
| 157 |
$joins = $columns[0]->get_joins();
|
223 |
// Filter types.
|
| - |
|
224 |
$this->assertEquals([
|
| - |
|
225 |
text::class,
|
| - |
|
226 |
text::class,
|
| - |
|
227 |
boolean_select::class,
|
| - |
|
228 |
date::class,
|
| - |
|
229 |
select::class,
|
| - |
|
230 |
number::class,
|
| - |
|
231 |
], array_map(
|
| - |
|
232 |
fn(filter $filter) => $filter->get_filter_class(),
|
| - |
|
233 |
$filters,
|
| - |
|
234 |
));
|
| - |
|
235 |
|
| - |
|
236 |
// Filter available.
|
| 158 |
|
237 |
$this->assertEquals([
|
| - |
|
238 |
true,
|
| 159 |
$this->assertCount(3, $joins);
|
239 |
true,
|
| 160 |
$this->assertEquals('JOIN {test} t ON t.id = id', $joins[0]);
|
240 |
true,
|
| Línea 161... |
Línea 241... |
| 161 |
$this->assertEquals('JOIN {test2} t2 ON t2.id = id', $joins[1]);
|
241 |
true,
|
| 162 |
$this->assertStringStartsWith('LEFT JOIN {customfield_data}', $joins[2]);
|
242 |
true,
|
| 163 |
}
|
243 |
true,
|
| 164 |
|
244 |
], array_map(
|
| 165 |
/**
|
245 |
fn(filter $filter) => $filter->get_is_available(),
|
| - |
|
246 |
$filters,
|
| Línea 166... |
Línea 247... |
| 166 |
* Test for get_filters
|
247 |
));
|
| - |
|
248 |
|
| Línea -... |
Línea 249... |
| - |
|
249 |
// Filter available, for non-privileged user.
|
| - |
|
250 |
$this->setUser(null);
|
| 167 |
*/
|
251 |
$this->assertEquals([
|
| 168 |
public function test_get_filters(): void {
|
252 |
true,
|
| 169 |
$this->resetAfterTest();
|
253 |
true,
|
| 170 |
|
254 |
false,
|
| 171 |
$customfields = $this->generate_customfields();
|
255 |
true,
|
| 172 |
$filters = $customfields->get_filters();
|
256 |
true,
|
| - |
|
257 |
true,
|
| 173 |
|
258 |
], array_map(
|
| Línea 174... |
Línea 259... |
| 174 |
$this->assertCount(5, $filters);
|
259 |
fn(filter $filter) => $filter->get_is_available(),
|
| 175 |
$this->assertContainsOnlyInstancesOf(filter::class, $filters);
|
260 |
$customfields->get_filters(),
|
| 176 |
|
261 |
));
|
| Línea 177... |
Línea 262... |
| 177 |
// Filter titles.
|
262 |
}
|
| - |
|
263 |
|
| - |
|
264 |
/**
|
| 178 |
$this->assertEquals(
|
265 |
* Test that adding custom field columns to a report returns expected values
|
| - |
|
266 |
*/
|
| 179 |
['Text', 'Textarea', 'Checkbox', 'Date', 'Select'],
|
267 |
public function test_custom_report_content(): void {
|
| 180 |
array_map(fn(filter $filter) => $filter->get_header(), $filters)
|
268 |
$this->resetAfterTest();
|
| 181 |
);
|
269 |
$this->setAdminUser();
|
| 182 |
}
|
270 |
|
| 183 |
|
271 |
$category = $this->getDataGenerator()->create_category(['name' => 'Zebras']);
|
| - |
|
272 |
$courseone = $this->getDataGenerator()->create_course(['category' => $category->id, 'fullname' => 'C1']);
|
| Línea 184... |
Línea 273... |
| 184 |
/**
|
273 |
|
| 185 |
* Test that adding custom field columns to a report returns expected values
|
- |
|
| 186 |
*/
|
274 |
// Second course will populate each custom field.
|
| - |
|
275 |
$this->generate_customfields();
|
| 187 |
public function test_custom_report_content(): void {
|
276 |
$coursetwo = $this->getDataGenerator()->create_course(['category' => $category->id, 'fullname' => 'C2', 'customfields' => [
|
| 188 |
$this->resetAfterTest();
|
277 |
['shortname' => 'text', 'value' => 'Hello'],
|
| 189 |
|
278 |
['shortname' => 'textarea_editor', 'value' => ['text' => 'Goodbye', 'format' => FORMAT_MOODLE]],
|
| 190 |
$this->generate_customfields();
|
279 |
['shortname' => 'checkbox', 'value' => 0],
|
| 191 |
|
280 |
['shortname' => 'date', 'value' => 1669852800],
|
| 192 |
$course = $this->getDataGenerator()->create_course(['customfields' => [
|
281 |
['shortname' => 'select', 'value' => 2],
|
| 193 |
['shortname' => 'text', 'value' => 'Hello'],
|
282 |
['shortname' => 'number', 'value' => 42],
|
| 194 |
['shortname' => 'textarea_editor', 'value' => ['text' => 'Goodbye', 'format' => FORMAT_MOODLE]],
|
283 |
]]);
|
| 195 |
['shortname' => 'checkbox', 'value' => true],
|
- |
|
| 196 |
['shortname' => 'date', 'value' => 1669852800],
|
284 |
|
| 197 |
['shortname' => 'select', 'value' => 2],
|
- |
|
| 198 |
]]);
|
285 |
/** @var core_reportbuilder_generator $generator */
|
| 199 |
|
286 |
$generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
|
| 200 |
/** @var core_reportbuilder_generator $generator */
|
287 |
$report = $generator->create_report(['name' => 'Categories', 'source' => categories::class, 'default' => 0]);
|
| 201 |
$generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
|
- |
|
| 202 |
$report = $generator->create_report(['name' => 'Courses', 'source' => courses::class, 'default' => 0]);
|
288 |
|
| 203 |
|
- |
|
| 204 |
// Add custom field columns to the report.
|
289 |
// Add custom field columns to the report.
|
| 205 |
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:fullname']);
|
290 |
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course_category:name',
|
| 206 |
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_text']);
|
- |
|
| 207 |
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_textarea']);
|
291 |
'sortenabled' => 1]);
|
| 208 |
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_checkbox']);
|
292 |
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:fullname',
|
| 209 |
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_date']);
|
293 |
'sortenabled' => 1]);
|
| - |
|
294 |
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_text']);
|
| 210 |
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_select']);
|
295 |
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_textarea']);
|
| 211 |
|
296 |
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_checkbox']);
|
| 212 |
$content = $this->get_custom_report_content($report->get('id'));
|
297 |
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_date']);
|
| 213 |
|
298 |
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_select']);
|
| 214 |
$this->assertEquals([
|
299 |
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_number']);
|
| 215 |
$course->fullname,
|
300 |
|
| 216 |
'Hello',
|
- |
|
| 217 |
'<div class="text_to_html">Goodbye</div>',
|
301 |
$content = $this->get_custom_report_content($report->get('id'));
|
| 218 |
'Yes',
|
302 |
$this->assertEquals([
|
| 219 |
userdate(1669852800),
|
303 |
[
|
| 220 |
'Dog'
|
304 |
'Category 1',
|
| 221 |
], array_values($content[0]));
|
305 |
'',
|
| 222 |
}
|
306 |
'',
|
| Línea 223... |
Línea 307... |
| 223 |
|
307 |
'',
|
| 224 |
/**
|
308 |
'',
|
| 225 |
* Test that adding custom field columns to report returns expected default values for fields
|
309 |
'',
|
| 226 |
*/
|
310 |
'',
|
| 227 |
public function test_custom_report_content_column_defaults(): void {
|
311 |
'',
|
| 228 |
$this->resetAfterTest();
|
312 |
],
|
| 229 |
|
313 |
[
|
| 230 |
$this->generate_customfields();
|
314 |
$category->name,
|
| 231 |
|
315 |
$courseone->fullname,
|
| 232 |
$category = $this->getDataGenerator()->create_category(['name' => 'Zebras']);
|
316 |
'default',
|
| 233 |
$course = $this->getDataGenerator()->create_course(['category' => $category->id]);
|
317 |
format_text('Default'),
|
| - |
|
318 |
'Yes',
|
| - |
|
319 |
'',
|
| - |
|
320 |
'Cat',
|
| - |
|
321 |
1,
|
| 234 |
|
322 |
],
|
| 235 |
/** @var core_reportbuilder_generator $generator */
|
323 |
[
|
| 236 |
$generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
|
324 |
$category->name,
|
| 237 |
$report = $generator->create_report(['name' => 'Categories', 'source' => categories::class, 'default' => 0]);
|
325 |
$coursetwo->fullname,
|
| 238 |
|
326 |
'Hello',
|
| 239 |
// Add custom field columns to the report.
|
327 |
format_text('Goodbye'),
|
| 240 |
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course_category:name',
|
328 |
'No',
|
| 241 |
'sortenabled' => 1]);
|
329 |
userdate(1669852800),
|
| - |
|
330 |
'Dog',
|
| - |
|
331 |
42,
|
| - |
|
332 |
],
|
| - |
|
333 |
], array_map('array_values', $content));
|
| 242 |
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:fullname']);
|
334 |
}
|
| 243 |
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_select']);
|
335 |
|
| 244 |
|
336 |
/**
|
| 245 |
$content = $this->get_custom_report_content($report->get('id'));
|
337 |
* Data provider for {@see test_custom_report_filter}
|
| 246 |
$this->assertEquals([
|
338 |
*
|
| 247 |
['Category 1', '', ''],
|
- |
|
| 248 |
[$category->name, $course->fullname, 'Cat'],
|
- |
|
| 249 |
], array_map('array_values', $content));
|
- |
|
| 250 |
}
|
339 |
* @return array[]
|
| - |
|
340 |
*/
|
| - |
|
341 |
public static function custom_report_filter_provider(): array {
|
| - |
|
342 |
return [
|
| 251 |
|
343 |
'Filter by text custom field' => ['course:customfield_text', [
|
| 252 |
/**
|
344 |
'course:customfield_text_operator' => text::IS_EQUAL_TO,
|
| 253 |
* Data provider for {@see test_custom_report_filter}
|
345 |
'course:customfield_text_value' => 'Hello',
|
| 254 |
*
|
346 |
], 'C2'],
|
| 255 |
* @return array[]
|
347 |
'Filter by text custom field (default)' => ['course:customfield_text', [
|
| 256 |
*/
|
348 |
'course:customfield_text_operator' => text::IS_EQUAL_TO,
|
| 257 |
public function custom_report_filter_provider(): array {
|
349 |
'course:customfield_text_value' => 'default',
|
| 258 |
return [
|
350 |
], 'C1'],
|
| 259 |
'Filter by text custom field' => ['course:customfield_text', [
|
351 |
'Filter by text custom field (no match)' => ['course:customfield_text', [
|
| 260 |
'course:customfield_text_operator' => text::IS_EQUAL_TO,
|
352 |
'course:customfield_text_operator' => text::IS_EQUAL_TO,
|
| 261 |
'course:customfield_text_value' => 'Hello',
|
353 |
'course:customfield_text_value' => 'Goodbye',
|
| 262 |
], true],
|
354 |
]],
|
| 263 |
'Filter by text custom field (no match)' => ['course:customfield_text', [
|
355 |
'Filter by textarea custom field' => ['course:customfield_textarea', [
|
| 264 |
'course:customfield_text_operator' => text::IS_EQUAL_TO,
|
356 |
'course:customfield_textarea_operator' => text::IS_EQUAL_TO,
|
| 265 |
'course:customfield_text_value' => 'Goodbye',
|
357 |
'course:customfield_textarea_value' => 'Goodbye',
|
| 266 |
], false],
|
358 |
], 'C2'],
|
| 267 |
'Filter by textarea custom field' => ['course:customfield_textarea', [
|
359 |
'Filter by textarea custom field (default)' => ['course:customfield_textarea', [
|
| - |
|
360 |
'course:customfield_textarea_operator' => text::IS_EQUAL_TO,
|
| - |
|
361 |
'course:customfield_textarea_value' => 'Default',
|
| - |
|
362 |
], 'C1'],
|
| - |
|
363 |
'Filter by textarea custom field (no match)' => ['course:customfield_textarea', [
|
| - |
|
364 |
'course:customfield_textarea_operator' => text::IS_EQUAL_TO,
|
| - |
|
365 |
'course:customfield_textarea_value' => 'Hello',
|
| - |
|
366 |
]],
|
| - |
|
367 |
'Filter by checkbox custom field' => ['course:customfield_checkbox', [
|
| - |
|
368 |
'course:customfield_checkbox_operator' => boolean_select::NOT_CHECKED,
|
| - |
|
369 |
], 'C2'],
|
| - |
|
370 |
'Filter by checkbox custom field (default)' => ['course:customfield_checkbox', [
|
| - |
|
371 |
'course:customfield_checkbox_operator' => boolean_select::CHECKED,
|
| - |
|
372 |
], 'C1'],
|
| - |
|
373 |
'Filter by date custom field' => ['course:customfield_date', [
|
| - |
|
374 |
'course:customfield_date_operator' => date::DATE_RANGE,
|
| - |
|
375 |
'course:customfield_date_from' => 1622502000,
|
| 268 |
'course:customfield_textarea_operator' => text::IS_EQUAL_TO,
|
376 |
], 'C2'],
|
| 269 |
'course:customfield_textarea_value' => 'Goodbye',
|
377 |
'Filter by date custom field (no match)' => ['course:customfield_date', [
|
| Línea 270... |
Línea 378... |
| 270 |
], true],
|
378 |
'course:customfield_date_operator' => date::DATE_RANGE,
|
| 271 |
'Filter by textarea custom field (no match)' => ['course:customfield_textarea', [
|
379 |
'course:customfield_date_from' => 1672531200,
|
| 272 |
'course:customfield_textarea_operator' => text::IS_EQUAL_TO,
|
380 |
]],
|
| 273 |
'course:customfield_textarea_value' => 'Hello',
|
381 |
'Filter by select custom field' => ['course:customfield_select', [
|
| 274 |
], false],
|
382 |
'course:customfield_select_operator' => select::EQUAL_TO,
|
| 275 |
'Filter by checkbox custom field' => ['course:customfield_checkbox', [
|
383 |
'course:customfield_select_value' => 2,
|
| 276 |
'course:customfield_checkbox_operator' => boolean_select::CHECKED,
|
384 |
], 'C2'],
|
| 277 |
], true],
|
385 |
'Filter by select custom field (default)' => ['course:customfield_select', [
|
| 278 |
'Filter by checkbox custom field (no match)' => ['course:customfield_checkbox', [
|
386 |
'course:customfield_select_operator' => select::EQUAL_TO,
|
| 279 |
'course:customfield_checkbox_operator' => boolean_select::NOT_CHECKED,
|
387 |
'course:customfield_select_value' => 1,
|
| 280 |
], false],
|
388 |
], 'C1'],
|
| - |
|
389 |
'Filter by select custom field (no match)' => ['course:customfield_select', [
|
| Línea 281... |
Línea 390... |
| 281 |
'Filter by date custom field' => ['course:customfield_date', [
|
390 |
'course:customfield_select_operator' => select::EQUAL_TO,
|
| Línea -... |
Línea 391... |
| - |
|
391 |
'course:customfield_select_value' => 3,
|
| - |
|
392 |
]],
|
| 282 |
'course:customfield_date_operator' => date::DATE_RANGE,
|
393 |
'Filter by number custom field' => ['course:customfield_number', [
|
| 283 |
'course:customfield_date_from' => 1622502000,
|
394 |
'course:customfield_number_operator' => number::EQUAL_TO,
|
| 284 |
], true],
|
395 |
'course:customfield_number_value1' => 42,
|
| 285 |
'Filter by date custom field (no match)' => ['course:customfield_date', [
|
396 |
], 'C2'],
|
| 286 |
'course:customfield_date_operator' => date::DATE_RANGE,
|
397 |
'Filter by number custom field (default)' => ['course:customfield_number', [
|
| 287 |
'course:customfield_date_to' => 1622502000,
|
398 |
'course:customfield_number_operator' => number::EQUAL_TO,
|
| - |
|
399 |
'course:customfield_number_value1' => 1,
|
| 288 |
], false],
|
400 |
], 'C1'],
|
| Línea 289... |
Línea 401... |
| 289 |
'Filter by select custom field' => ['course:customfield_select', [
|
401 |
'Filter by number custom field (no match)' => ['course:customfield_number', [
|
| 290 |
'course:customfield_select_operator' => select::EQUAL_TO,
|
402 |
'course:customfield_number_operator' => number::EQUAL_TO,
|
| Línea 328... |
Línea 440... |
| 328 |
|
440 |
|
| 329 |
// Add filter, set it's values.
|
441 |
// Add filter, set it's values.
|
| 330 |
$generator->create_filter(['reportid' => $report->get('id'), 'uniqueidentifier' => $filtername]);
|
442 |
$generator->create_filter(['reportid' => $report->get('id'), 'uniqueidentifier' => $filtername]);
|
| Línea 331... |
Línea 443... |
| 331 |
$content = $this->get_custom_report_content($report->get('id'), 0, $filtervalues);
|
443 |
$content = $this->get_custom_report_content($report->get('id'), 0, $filtervalues);
|
| 332 |
|
444 |
|
| 333 |
if ($expectmatch) {
|
445 |
if ($expectmatch !== null) {
|
| 334 |
$this->assertCount(1, $content);
|
446 |
$this->assertCount(1, $content);
|
| 335 |
$this->assertEquals($course->fullname, reset($content[0]));
|
447 |
$this->assertEquals($expectmatch, reset($content[0]));
|
| 336 |
} else {
|
448 |
} else {
|
| 337 |
$this->assertEmpty($content);
|
449 |
$this->assertEmpty($content);
|
| Línea 349... |
Línea 461... |
| 349 |
}
|
461 |
}
|
| Línea 350... |
Línea 462... |
| 350 |
|
462 |
|
| Línea 351... |
Línea 463... |
| 351 |
$this->resetAfterTest();
|
463 |
$this->resetAfterTest();
|
| 352 |
|
464 |
|
| 353 |
$this->generate_customfields();
|
465 |
$this->generate_customfields();
|
| 354 |
$course = $this->getDataGenerator()->create_course(['customfields' => [
|
466 |
$this->getDataGenerator()->create_course(['customfields' => [
|
| 355 |
['shortname' => 'text', 'value' => 'Hello'],
|
467 |
['shortname' => 'text', 'value' => 'Hello'],
|
| 356 |
['shortname' => 'textarea_editor', 'value' => ['text' => 'Goodbye', 'format' => FORMAT_MOODLE]],
|
468 |
['shortname' => 'textarea_editor', 'value' => ['text' => 'Goodbye', 'format' => FORMAT_MOODLE]],
|
| 357 |
['shortname' => 'checkbox', 'value' => true],
|
469 |
['shortname' => 'checkbox', 'value' => true],
|