Merge branch 'MDL-60433-master' of git://github.com/jleyva/moodle

This commit is contained in:
David Monllao 2017-10-30 13:23:35 +01:00
commit 6065875eac
2 changed files with 90 additions and 95 deletions

View File

@ -264,7 +264,6 @@ class mod_data_external extends external_api {
'warnings' => $warnings 'warnings' => $warnings
); );
$groupmode = groups_get_activity_groupmode($cm);
if (!empty($params['groupid'])) { if (!empty($params['groupid'])) {
$groupid = $params['groupid']; $groupid = $params['groupid'];
// Determine is the group is visible to user. // Determine is the group is visible to user.
@ -273,12 +272,9 @@ class mod_data_external extends external_api {
} }
} else { } else {
// Check to see if groups are being used here. // Check to see if groups are being used here.
$groupmode = groups_get_activity_groupmode($cm);
if ($groupmode) { if ($groupmode) {
$groupid = groups_get_activity_group($cm); $groupid = groups_get_activity_group($cm);
// Determine is the group is visible to user (this is particullary for the group 0 -> all groups).
if (!groups_group_visible($groupid, $course, $cm)) {
throw new moodle_exception('notingroup');
}
} else { } else {
$groupid = 0; $groupid = 0;
} }
@ -399,11 +395,8 @@ class mod_data_external extends external_api {
} else { } else {
// Check to see if groups are being used here. // Check to see if groups are being used here.
if ($groupmode = groups_get_activity_groupmode($cm)) { if ($groupmode = groups_get_activity_groupmode($cm)) {
// We don't need to validate a possible groupid = 0 since it would be handled by data_search_entries.
$groupid = groups_get_activity_group($cm); $groupid = groups_get_activity_group($cm);
// Determine is the group is visible to user (this is particullary for the group 0 -> all groups).
if (!groups_group_visible($groupid, $course, $cm)) {
throw new moodle_exception('notingroup');
}
} else { } else {
$groupid = 0; $groupid = 0;
} }
@ -728,11 +721,8 @@ class mod_data_external extends external_api {
} else { } else {
// Check to see if groups are being used here. // Check to see if groups are being used here.
if ($groupmode = groups_get_activity_groupmode($cm)) { if ($groupmode = groups_get_activity_groupmode($cm)) {
// We don't need to validate a possible groupid = 0 since it would be handled by data_search_entries.
$groupid = groups_get_activity_group($cm); $groupid = groups_get_activity_group($cm);
// Determine is the group is visible to user (this is particullary for the group 0 -> all groups).
if (!groups_group_visible($groupid, $course, $cm)) {
throw new moodle_exception('notingroup');
}
} else { } else {
$groupid = 0; $groupid = 0;
} }
@ -989,26 +979,18 @@ class mod_data_external extends external_api {
// Check database is open in time. // Check database is open in time.
data_require_time_available($database, null, $context); data_require_time_available($database, null, $context);
$groupmode = groups_get_activity_groupmode($cm); // Determine default group.
if (!empty($params['groupid'])) { if (empty($params['groupid'])) {
$groupid = $params['groupid'];
// Determine is the group is visible to user.
if (!groups_group_visible($groupid, $course, $cm)) {
throw new moodle_exception('notingroup');
}
} else {
// Check to see if groups are being used here. // Check to see if groups are being used here.
$groupmode = groups_get_activity_groupmode($cm);
if ($groupmode) { if ($groupmode) {
$groupid = groups_get_activity_group($cm); $groupid = groups_get_activity_group($cm);
// Determine is the group is visible to user (this is particullary for the group 0 -> all groups).
if (!groups_group_visible($groupid, $course, $cm)) {
throw new moodle_exception('notingroup');
}
} else { } else {
$groupid = 0; $groupid = 0;
} }
} }
// Group is validated inside the function.
if (!data_user_can_add_entry($database, $groupid, $groupmode, $context)) { if (!data_user_can_add_entry($database, $groupid, $groupmode, $context)) {
throw new moodle_exception('noaccess', 'data'); throw new moodle_exception('noaccess', 'data');
} }

View File

@ -416,6 +416,8 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
$this->setUser($this->student2); $this->setUser($this->student2);
$entry12 = $generator->create_entry($this->database, $fieldcontents, $this->group1->id); $entry12 = $generator->create_entry($this->database, $fieldcontents, $this->group1->id);
$entry13 = $generator->create_entry($this->database, $fieldcontents, $this->group1->id); $entry13 = $generator->create_entry($this->database, $fieldcontents, $this->group1->id);
// Entry not in group.
$entry14 = $generator->create_entry($this->database, $fieldcontents, 0);
$this->setUser($this->student3); $this->setUser($this->student3);
$entry21 = $generator->create_entry($this->database, $fieldcontents, $this->group2->id); $entry21 = $generator->create_entry($this->database, $fieldcontents, $this->group2->id);
@ -423,9 +425,10 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
// Approve all except $entry13. // Approve all except $entry13.
$DB->set_field('data_records', 'approved', 1, ['id' => $entry11]); $DB->set_field('data_records', 'approved', 1, ['id' => $entry11]);
$DB->set_field('data_records', 'approved', 1, ['id' => $entry12]); $DB->set_field('data_records', 'approved', 1, ['id' => $entry12]);
$DB->set_field('data_records', 'approved', 1, ['id' => $entry14]);
$DB->set_field('data_records', 'approved', 1, ['id' => $entry21]); $DB->set_field('data_records', 'approved', 1, ['id' => $entry21]);
return [$entry11, $entry12, $entry13, $entry21]; return [$entry11, $entry12, $entry13, $entry14, $entry21];
} }
/** /**
@ -433,15 +436,16 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
*/ */
public function test_get_entries() { public function test_get_entries() {
global $DB; global $DB;
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries(); list($entry11, $entry12, $entry13, $entry14, $entry21) = self::populate_database_with_entries();
// First of all, expect to see only my group entries (not other users in other groups ones). // First of all, expect to see only my group entries (not other users in other groups ones).
// We may expect entries without group also.
$this->setUser($this->student1); $this->setUser($this->student1);
$result = mod_data_external::get_entries($this->database->id); $result = mod_data_external::get_entries($this->database->id);
$result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result); $result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result);
$this->assertCount(0, $result['warnings']); $this->assertCount(0, $result['warnings']);
$this->assertCount(2, $result['entries']); $this->assertCount(3, $result['entries']);
$this->assertEquals(2, $result['totalcount']); $this->assertEquals(3, $result['totalcount']);
$this->assertEquals($entry11, $result['entries'][0]['id']); $this->assertEquals($entry11, $result['entries'][0]['id']);
$this->assertEquals($this->student1->id, $result['entries'][0]['userid']); $this->assertEquals($this->student1->id, $result['entries'][0]['userid']);
$this->assertEquals($this->group1->id, $result['entries'][0]['groupid']); $this->assertEquals($this->group1->id, $result['entries'][0]['groupid']);
@ -450,36 +454,44 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
$this->assertEquals($this->student2->id, $result['entries'][1]['userid']); $this->assertEquals($this->student2->id, $result['entries'][1]['userid']);
$this->assertEquals($this->group1->id, $result['entries'][1]['groupid']); $this->assertEquals($this->group1->id, $result['entries'][1]['groupid']);
$this->assertEquals($this->database->id, $result['entries'][1]['dataid']); $this->assertEquals($this->database->id, $result['entries'][1]['dataid']);
$this->assertEquals($entry14, $result['entries'][2]['id']);
$this->assertEquals($this->student2->id, $result['entries'][2]['userid']);
$this->assertEquals(0, $result['entries'][2]['groupid']);
$this->assertEquals($this->database->id, $result['entries'][2]['dataid']);
// Other user in same group. // Other user in same group.
$this->setUser($this->student2); $this->setUser($this->student2);
$result = mod_data_external::get_entries($this->database->id); $result = mod_data_external::get_entries($this->database->id);
$result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result); $result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result);
$this->assertCount(0, $result['warnings']); $this->assertCount(0, $result['warnings']);
$this->assertCount(3, $result['entries']); // I can see my entry not approved yet. $this->assertCount(4, $result['entries']); // I can see my entry not approved yet.
$this->assertEquals(3, $result['totalcount']); $this->assertEquals(4, $result['totalcount']);
// Now try with the user in the second group that must see only one entry. // Now try with the user in the second group that must see only two entries (his group entry and the one without group).
$this->setUser($this->student3); $this->setUser($this->student3);
$result = mod_data_external::get_entries($this->database->id); $result = mod_data_external::get_entries($this->database->id);
$result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result); $result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result);
$this->assertCount(0, $result['warnings']); $this->assertCount(0, $result['warnings']);
$this->assertCount(1, $result['entries']); $this->assertCount(2, $result['entries']);
$this->assertEquals(1, $result['totalcount']); $this->assertEquals(2, $result['totalcount']);
$this->assertEquals($entry21, $result['entries'][0]['id']); $this->assertEquals($entry14, $result['entries'][0]['id']);
$this->assertEquals($this->student3->id, $result['entries'][0]['userid']); $this->assertEquals($this->student2->id, $result['entries'][0]['userid']);
$this->assertEquals($this->group2->id, $result['entries'][0]['groupid']); $this->assertEquals(0, $result['entries'][0]['groupid']);
$this->assertEquals($this->database->id, $result['entries'][0]['dataid']); $this->assertEquals($this->database->id, $result['entries'][0]['dataid']);
$this->assertEquals($entry21, $result['entries'][1]['id']);
$this->assertEquals($this->student3->id, $result['entries'][1]['userid']);
$this->assertEquals($this->group2->id, $result['entries'][1]['groupid']);
$this->assertEquals($this->database->id, $result['entries'][1]['dataid']);
// Now, as teacher we should see all (we have permissions to view all groups). // Now, as teacher we should see all (we have permissions to view all groups).
$this->setUser($this->teacher); $this->setUser($this->teacher);
$result = mod_data_external::get_entries($this->database->id); $result = mod_data_external::get_entries($this->database->id);
$result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result); $result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result);
$this->assertCount(0, $result['warnings']); $this->assertCount(0, $result['warnings']);
$this->assertCount(4, $result['entries']); // I can see the not approved one. $this->assertCount(5, $result['entries']); // I can see the not approved one.
$this->assertEquals(4, $result['totalcount']); $this->assertEquals(5, $result['totalcount']);
$entries = $DB->get_records('data_records', array('dataid' => $this->database->id), 'id'); $entries = $DB->get_records('data_records', array('dataid' => $this->database->id), 'id');
$this->assertCount(4, $entries); $this->assertCount(5, $entries);
$count = 0; $count = 0;
foreach ($entries as $entry) { foreach ($entries as $entry) {
$this->assertEquals($entry->id, $result['entries'][$count]['id']); $this->assertEquals($entry->id, $result['entries'][$count]['id']);
@ -491,17 +503,17 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
$result = mod_data_external::get_entries($this->database->id, $this->group1->id); $result = mod_data_external::get_entries($this->database->id, $this->group1->id);
$result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result); $result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result);
$this->assertCount(0, $result['warnings']); $this->assertCount(0, $result['warnings']);
$this->assertCount(2, $result['entries']); $this->assertCount(3, $result['entries']);
$this->assertEquals(2, $result['totalcount']); $this->assertEquals(3, $result['totalcount']);
// Test ordering (reverse). // Test ordering (reverse).
$this->setUser($this->student1); $this->setUser($this->student1);
$result = mod_data_external::get_entries($this->database->id, $this->group1->id, false, null, 'DESC'); $result = mod_data_external::get_entries($this->database->id, $this->group1->id, false, null, 'DESC');
$result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result); $result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result);
$this->assertCount(0, $result['warnings']); $this->assertCount(0, $result['warnings']);
$this->assertCount(2, $result['entries']); $this->assertCount(3, $result['entries']);
$this->assertEquals(2, $result['totalcount']); $this->assertEquals(3, $result['totalcount']);
$this->assertEquals($entry12, $result['entries'][0]['id']); $this->assertEquals($entry14, $result['entries'][0]['id']);
// Test pagination. // Test pagination.
$this->setUser($this->student1); $this->setUser($this->student1);
@ -509,14 +521,14 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
$result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result); $result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result);
$this->assertCount(0, $result['warnings']); $this->assertCount(0, $result['warnings']);
$this->assertCount(1, $result['entries']); $this->assertCount(1, $result['entries']);
$this->assertEquals(2, $result['totalcount']); $this->assertEquals(3, $result['totalcount']);
$this->assertEquals($entry11, $result['entries'][0]['id']); $this->assertEquals($entry11, $result['entries'][0]['id']);
$result = mod_data_external::get_entries($this->database->id, $this->group1->id, false, null, null, 1, 1); $result = mod_data_external::get_entries($this->database->id, $this->group1->id, false, null, null, 1, 1);
$result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result); $result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result);
$this->assertCount(0, $result['warnings']); $this->assertCount(0, $result['warnings']);
$this->assertCount(1, $result['entries']); $this->assertCount(1, $result['entries']);
$this->assertEquals(2, $result['totalcount']); $this->assertEquals(3, $result['totalcount']);
$this->assertEquals($entry12, $result['entries'][0]['id']); $this->assertEquals($entry12, $result['entries'][0]['id']);
// Now test the return contents. // Now test the return contents.
@ -525,7 +537,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
$result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result); $result = external_api::clean_returnvalue(mod_data_external::get_entries_returns(), $result);
$this->assertCount(0, $result['warnings']); $this->assertCount(0, $result['warnings']);
$this->assertCount(2, $result['entries']); $this->assertCount(2, $result['entries']);
$this->assertEquals(2, $result['totalcount']); $this->assertEquals(3, $result['totalcount']);
$this->assertCount(9, $result['entries'][0]['contents']); $this->assertCount(9, $result['entries'][0]['contents']);
$this->assertCount(9, $result['entries'][1]['contents']); $this->assertCount(9, $result['entries'][1]['contents']);
// Search for some content. // Search for some content.
@ -543,7 +555,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
global $DB; global $DB;
$DB->set_field('course', 'groupmode', VISIBLEGROUPS, ['id' => $this->course->id]); $DB->set_field('course', 'groupmode', VISIBLEGROUPS, ['id' => $this->course->id]);
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries(); list($entry11, $entry12, $entry13, $entry14, $entry21) = self::populate_database_with_entries();
// Check I can see my approved group entries. // Check I can see my approved group entries.
$this->setUser($this->student1); $this->setUser($this->student1);
@ -566,7 +578,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
*/ */
public function test_get_entry_separated_groups() { public function test_get_entry_separated_groups() {
global $DB; global $DB;
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries(); list($entry11, $entry12, $entry13, $entry14, $entry21) = self::populate_database_with_entries();
// Check I can see my approved group entries. // Check I can see my approved group entries.
$this->setUser($this->student1); $this->setUser($this->student1);
@ -633,7 +645,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
* Test get_entry from other group in separated groups. * Test get_entry from other group in separated groups.
*/ */
public function test_get_entry_other_group_separated_groups() { public function test_get_entry_other_group_separated_groups() {
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries(); list($entry11, $entry12, $entry13, $entry14, $entry21) = self::populate_database_with_entries();
// We should not be able to view other gropu entries (in separated groups). // We should not be able to view other gropu entries (in separated groups).
$this->setUser($this->student1); $this->setUser($this->student1);
@ -646,7 +658,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
*/ */
public function test_get_fields() { public function test_get_fields() {
global $DB; global $DB;
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries(); list($entry11, $entry12, $entry13, $entry14, $entry21) = self::populate_database_with_entries();
$this->setUser($this->student1); $this->setUser($this->student1);
$result = mod_data_external::get_fields($this->database->id); $result = mod_data_external::get_fields($this->database->id);
@ -676,14 +688,14 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
*/ */
public function test_search_entries() { public function test_search_entries() {
global $DB; global $DB;
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries(); list($entry11, $entry12, $entry13, $entry14, $entry21) = self::populate_database_with_entries();
$this->setUser($this->student1); $this->setUser($this->student1);
// Empty search, it should return all the visible entries. // Empty search, it should return all the visible entries.
$result = mod_data_external::search_entries($this->database->id, 0, false); $result = mod_data_external::search_entries($this->database->id, 0, false);
$result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result); $result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result);
$this->assertCount(2, $result['entries']); $this->assertCount(3, $result['entries']);
$this->assertEquals(2, $result['totalcount']); $this->assertEquals(3, $result['totalcount']);
// Search for something that does not exists. // Search for something that does not exists.
$result = mod_data_external::search_entries($this->database->id, 0, false, 'abc'); $result = mod_data_external::search_entries($this->database->id, 0, false, 'abc');
@ -694,17 +706,17 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
// Search by text matching all the entries. // Search by text matching all the entries.
$result = mod_data_external::search_entries($this->database->id, 0, false, 'text'); $result = mod_data_external::search_entries($this->database->id, 0, false, 'text');
$result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result); $result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result);
$this->assertCount(2, $result['entries']); $this->assertCount(3, $result['entries']);
$this->assertEquals(2, $result['totalcount']); $this->assertEquals(3, $result['totalcount']);
$this->assertEquals(2, $result['maxcount']); $this->assertEquals(3, $result['maxcount']);
// Now as the other student I should receive my not approved entry. Apply ordering here. // Now as the other student I should receive my not approved entry. Apply ordering here.
$this->setUser($this->student2); $this->setUser($this->student2);
$result = mod_data_external::search_entries($this->database->id, 0, false, 'text', [], DATA_APPROVED, 'ASC'); $result = mod_data_external::search_entries($this->database->id, 0, false, 'text', [], DATA_APPROVED, 'ASC');
$result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result); $result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result);
$this->assertCount(3, $result['entries']); $this->assertCount(4, $result['entries']);
$this->assertEquals(3, $result['totalcount']); $this->assertEquals(4, $result['totalcount']);
$this->assertEquals(3, $result['maxcount']); $this->assertEquals(4, $result['maxcount']);
// The not approved one should be the first. // The not approved one should be the first.
$this->assertEquals($entry13, $result['entries'][0]['id']); $this->assertEquals($entry13, $result['entries'][0]['id']);
@ -712,26 +724,27 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
$this->setUser($this->student3); $this->setUser($this->student3);
$result = mod_data_external::search_entries($this->database->id, 0, false, 'text'); $result = mod_data_external::search_entries($this->database->id, 0, false, 'text');
$result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result); $result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result);
$this->assertCount(1, $result['entries']); $this->assertCount(2, $result['entries']);
$this->assertEquals(1, $result['totalcount']); $this->assertEquals(2, $result['totalcount']);
$this->assertEquals(1, $result['maxcount']); $this->assertEquals(2, $result['maxcount']);
$this->assertEquals($this->student3->id, $result['entries'][0]['userid']); $this->assertEquals($this->student2->id, $result['entries'][0]['userid']);
$this->assertEquals($this->student3->id, $result['entries'][1]['userid']);
// Same normal text search as teacher. // Same normal text search as teacher.
$this->setUser($this->teacher); $this->setUser($this->teacher);
$result = mod_data_external::search_entries($this->database->id, 0, false, 'text'); $result = mod_data_external::search_entries($this->database->id, 0, false, 'text');
$result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result); $result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result);
$this->assertCount(4, $result['entries']); // I can see all groups and non approved. $this->assertCount(5, $result['entries']); // I can see all groups and non approved.
$this->assertEquals(4, $result['totalcount']); $this->assertEquals(5, $result['totalcount']);
$this->assertEquals(4, $result['maxcount']); $this->assertEquals(5, $result['maxcount']);
// Pagination. // Pagination.
$this->setUser($this->teacher); $this->setUser($this->teacher);
$result = mod_data_external::search_entries($this->database->id, 0, false, 'text', [], DATA_TIMEADDED, 'ASC', 0, 2); $result = mod_data_external::search_entries($this->database->id, 0, false, 'text', [], DATA_TIMEADDED, 'ASC', 0, 2);
$result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result); $result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result);
$this->assertCount(2, $result['entries']); // Only 2 per page. $this->assertCount(2, $result['entries']); // Only 2 per page.
$this->assertEquals(4, $result['totalcount']); $this->assertEquals(5, $result['totalcount']);
$this->assertEquals(4, $result['maxcount']); $this->assertEquals(5, $result['maxcount']);
// Now advanced search or not dinamic fields (user firstname for example). // Now advanced search or not dinamic fields (user firstname for example).
$this->setUser($this->student1); $this->setUser($this->student1);
@ -740,9 +753,9 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
]; ];
$result = mod_data_external::search_entries($this->database->id, 0, false, '', $advsearch); $result = mod_data_external::search_entries($this->database->id, 0, false, '', $advsearch);
$result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result); $result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result);
$this->assertCount(1, $result['entries']); $this->assertCount(2, $result['entries']);
$this->assertEquals(1, $result['totalcount']); $this->assertEquals(2, $result['totalcount']);
$this->assertEquals(2, $result['maxcount']); $this->assertEquals(3, $result['maxcount']);
$this->assertEquals($this->student2->id, $result['entries'][0]['userid']); // I only found mine! $this->assertEquals($this->student2->id, $result['entries'][0]['userid']); // I only found mine!
// Advanced search for fields. // Advanced search for fields.
@ -752,9 +765,9 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
]; ];
$result = mod_data_external::search_entries($this->database->id, 0, false, '', $advsearch); $result = mod_data_external::search_entries($this->database->id, 0, false, '', $advsearch);
$result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result); $result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result);
$this->assertCount(2, $result['entries']); // Found two entries matching this. $this->assertCount(3, $result['entries']); // Found two entries matching this.
$this->assertEquals(2, $result['totalcount']); $this->assertEquals(3, $result['totalcount']);
$this->assertEquals(2, $result['maxcount']); $this->assertEquals(3, $result['maxcount']);
// Combined search. // Combined search.
$field2 = $DB->get_record('data_fields', array('type' => 'number')); $field2 = $DB->get_record('data_fields', array('type' => 'number'));
@ -765,9 +778,9 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
]; ];
$result = mod_data_external::search_entries($this->database->id, 0, false, '', $advsearch); $result = mod_data_external::search_entries($this->database->id, 0, false, '', $advsearch);
$result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result); $result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result);
$this->assertCount(1, $result['entries']); // Only one matching everything. $this->assertCount(2, $result['entries']); // Only one matching everything.
$this->assertEquals(1, $result['totalcount']); $this->assertEquals(2, $result['totalcount']);
$this->assertEquals(2, $result['maxcount']); $this->assertEquals(3, $result['maxcount']);
// Combined search (no results). // Combined search (no results).
$field2 = $DB->get_record('data_fields', array('type' => 'number')); $field2 = $DB->get_record('data_fields', array('type' => 'number'));
@ -779,7 +792,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
$result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result); $result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result);
$this->assertCount(0, $result['entries']); // Only one matching everything. $this->assertCount(0, $result['entries']); // Only one matching everything.
$this->assertEquals(0, $result['totalcount']); $this->assertEquals(0, $result['totalcount']);
$this->assertEquals(2, $result['maxcount']); $this->assertEquals(3, $result['maxcount']);
} }
/** /**
@ -787,7 +800,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
*/ */
public function test_approve_entry() { public function test_approve_entry() {
global $DB; global $DB;
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries(); list($entry11, $entry12, $entry13, $entry14, $entry21) = self::populate_database_with_entries();
$this->setUser($this->teacher); $this->setUser($this->teacher);
$this->assertEquals(0, $DB->get_field('data_records', 'approved', array('id' => $entry13))); $this->assertEquals(0, $DB->get_field('data_records', 'approved', array('id' => $entry13)));
@ -801,7 +814,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
*/ */
public function test_unapprove_entry() { public function test_unapprove_entry() {
global $DB; global $DB;
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries(); list($entry11, $entry12, $entry13, $entry14, $entry21) = self::populate_database_with_entries();
$this->setUser($this->teacher); $this->setUser($this->teacher);
$this->assertEquals(1, $DB->get_field('data_records', 'approved', array('id' => $entry11))); $this->assertEquals(1, $DB->get_field('data_records', 'approved', array('id' => $entry11)));
@ -815,7 +828,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
*/ */
public function test_approve_entry_missing_permissions() { public function test_approve_entry_missing_permissions() {
global $DB; global $DB;
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries(); list($entry11, $entry12, $entry13, $entry14, $entry21) = self::populate_database_with_entries();
$this->setUser($this->student1); $this->setUser($this->student1);
$this->expectException('moodle_exception'); $this->expectException('moodle_exception');
@ -827,7 +840,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
*/ */
public function test_delete_entry_as_teacher() { public function test_delete_entry_as_teacher() {
global $DB; global $DB;
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries(); list($entry11, $entry12, $entry13, $entry14, $entry21) = self::populate_database_with_entries();
$this->setUser($this->teacher); $this->setUser($this->teacher);
$result = mod_data_external::delete_entry($entry11); $result = mod_data_external::delete_entry($entry11);
@ -845,7 +858,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
*/ */
public function test_delete_entry_as_student() { public function test_delete_entry_as_student() {
global $DB; global $DB;
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries(); list($entry11, $entry12, $entry13, $entry14, $entry21) = self::populate_database_with_entries();
$this->setUser($this->student1); $this->setUser($this->student1);
$result = mod_data_external::delete_entry($entry11); $result = mod_data_external::delete_entry($entry11);
@ -858,7 +871,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
*/ */
public function test_delete_entry_as_student_in_read_only_period() { public function test_delete_entry_as_student_in_read_only_period() {
global $DB; global $DB;
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries(); list($entry11, $entry12, $entry13, $entry14, $entry21) = self::populate_database_with_entries();
// Set a time period. // Set a time period.
$this->database->timeviewfrom = time() - HOURSECS; $this->database->timeviewfrom = time() - HOURSECS;
$this->database->timeviewto = time() + HOURSECS; $this->database->timeviewto = time() + HOURSECS;
@ -874,7 +887,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
*/ */
public function test_delete_entry_missing_permissions() { public function test_delete_entry_missing_permissions() {
global $DB; global $DB;
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries(); list($entry11, $entry12, $entry13, $entry14, $entry21) = self::populate_database_with_entries();
$this->setUser($this->student1); $this->setUser($this->student1);
$this->expectException('moodle_exception'); $this->expectException('moodle_exception');
@ -887,7 +900,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
public function test_add_entry() { public function test_add_entry() {
global $DB; global $DB;
// First create the record structure and add some entries. // First create the record structure and add some entries.
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries(); list($entry11, $entry12, $entry13, $entry14, $entry21) = self::populate_database_with_entries();
$this->setUser($this->student1); $this->setUser($this->student1);
$newentrydata = []; $newentrydata = [];
@ -1038,7 +1051,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
*/ */
public function test_add_entry_read_only_period() { public function test_add_entry_read_only_period() {
global $DB; global $DB;
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries(); list($entry11, $entry12, $entry13, $entry14, $entry21) = self::populate_database_with_entries();
// Set a time period. // Set a time period.
$this->database->timeviewfrom = time() - HOURSECS; $this->database->timeviewfrom = time() - HOURSECS;
$this->database->timeviewto = time() + HOURSECS; $this->database->timeviewto = time() + HOURSECS;
@ -1055,7 +1068,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
*/ */
public function test_add_entry_max_num_entries() { public function test_add_entry_max_num_entries() {
global $DB; global $DB;
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries(); list($entry11, $entry12, $entry13, $entry14, $entry21) = self::populate_database_with_entries();
// Set a time period. // Set a time period.
$this->database->maxentries = 1; $this->database->maxentries = 1;
$DB->update_record('data', $this->database); $DB->update_record('data', $this->database);
@ -1072,7 +1085,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
public function test_update_entry() { public function test_update_entry() {
global $DB; global $DB;
// First create the record structure and add some entries. // First create the record structure and add some entries.
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries(); list($entry11, $entry12, $entry13, $entry14, $entry21) = self::populate_database_with_entries();
$this->setUser($this->student1); $this->setUser($this->student1);
$newentrydata = []; $newentrydata = [];
@ -1212,7 +1225,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
* Test update_entry sending empty data. * Test update_entry sending empty data.
*/ */
public function test_update_entry_empty_data() { public function test_update_entry_empty_data() {
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries(); list($entry11, $entry12, $entry13, $entry14, $entry21) = self::populate_database_with_entries();
$this->setUser($this->student1); $this->setUser($this->student1);
$result = mod_data_external::update_entry($entry11, []); $result = mod_data_external::update_entry($entry11, []);
@ -1228,7 +1241,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
*/ */
public function test_update_entry_read_only_period() { public function test_update_entry_read_only_period() {
global $DB; global $DB;
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries(); list($entry11, $entry12, $entry13, $entry14, $entry21) = self::populate_database_with_entries();
// Set a time period. // Set a time period.
$this->database->timeviewfrom = time() - HOURSECS; $this->database->timeviewfrom = time() - HOURSECS;
$this->database->timeviewto = time() + HOURSECS; $this->database->timeviewto = time() + HOURSECS;
@ -1245,7 +1258,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
*/ */
public function test_update_entry_other_user() { public function test_update_entry_other_user() {
// Try to update other user entry. // Try to update other user entry.
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries(); list($entry11, $entry12, $entry13, $entry14, $entry21) = self::populate_database_with_entries();
$this->setUser($this->student2); $this->setUser($this->student2);
$this->expectExceptionMessage(get_string('noaccess', 'data')); $this->expectExceptionMessage(get_string('noaccess', 'data'));
$this->expectException('moodle_exception'); $this->expectException('moodle_exception');
@ -1261,7 +1274,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase {
$DB->set_field('data', 'assessed', RATING_AGGREGATE_SUM, array('id' => $this->database->id)); $DB->set_field('data', 'assessed', RATING_AGGREGATE_SUM, array('id' => $this->database->id));
$DB->set_field('data', 'scale', 100, array('id' => $this->database->id)); $DB->set_field('data', 'scale', 100, array('id' => $this->database->id));
list($entry11, $entry12, $entry13, $entry21) = self::populate_database_with_entries(); list($entry11, $entry12, $entry13, $entry14, $entry21) = self::populate_database_with_entries();
$user1 = self::getDataGenerator()->create_user(); $user1 = self::getDataGenerator()->create_user();
$user2 = self::getDataGenerator()->create_user(); $user2 = self::getDataGenerator()->create_user();