diff --git a/mod/data/classes/external.php b/mod/data/classes/external.php index 65670ef0728..0cd94578410 100644 --- a/mod/data/classes/external.php +++ b/mod/data/classes/external.php @@ -807,7 +807,9 @@ class mod_data_external extends external_api { 'entries' => new external_multiple_structure( record_exporter::get_read_structure() ), - 'totalcount' => new external_value(PARAM_INT, 'Total count of records.'), + 'totalcount' => new external_value(PARAM_INT, 'Total count of records returned by the search.'), + 'maxcount' => new external_value(PARAM_INT, 'Total count of records that the user could see in the database + (if all the search criterias were removed).', VALUE_OPTIONAL), 'listviewcontents' => new external_value(PARAM_RAW, 'The list view contents as is rendered in the site.', VALUE_OPTIONAL), 'warnings' => new external_warnings() diff --git a/mod/data/tests/externallib_test.php b/mod/data/tests/externallib_test.php index 5a37334773e..82208174b92 100644 --- a/mod/data/tests/externallib_test.php +++ b/mod/data/tests/externallib_test.php @@ -696,6 +696,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase { $result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result); $this->assertCount(2, $result['entries']); $this->assertEquals(2, $result['totalcount']); + $this->assertEquals(2, $result['maxcount']); // Now as the other student I should receive my not approved entry. Apply ordering here. $this->setUser($this->student2); @@ -703,6 +704,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase { $result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result); $this->assertCount(3, $result['entries']); $this->assertEquals(3, $result['totalcount']); + $this->assertEquals(3, $result['maxcount']); // The not approved one should be the first. $this->assertEquals($entry13, $result['entries'][0]['id']); @@ -712,6 +714,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase { $result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result); $this->assertCount(1, $result['entries']); $this->assertEquals(1, $result['totalcount']); + $this->assertEquals(1, $result['maxcount']); $this->assertEquals($this->student3->id, $result['entries'][0]['userid']); // Same normal text search as teacher. @@ -720,6 +723,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase { $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->assertEquals(4, $result['totalcount']); + $this->assertEquals(4, $result['maxcount']); // Pagination. $this->setUser($this->teacher); @@ -727,6 +731,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase { $result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result); $this->assertCount(2, $result['entries']); // Only 2 per page. $this->assertEquals(4, $result['totalcount']); + $this->assertEquals(4, $result['maxcount']); // Now advanced search or not dinamic fields (user firstname for example). $this->setUser($this->student1); @@ -737,6 +742,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase { $result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result); $this->assertCount(1, $result['entries']); $this->assertEquals(1, $result['totalcount']); + $this->assertEquals(2, $result['maxcount']); $this->assertEquals($this->student2->id, $result['entries'][0]['userid']); // I only found mine! // Advanced search for fields. @@ -748,6 +754,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase { $result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result); $this->assertCount(2, $result['entries']); // Found two entries matching this. $this->assertEquals(2, $result['totalcount']); + $this->assertEquals(2, $result['maxcount']); // Combined search. $field2 = $DB->get_record('data_fields', array('type' => 'number')); @@ -760,6 +767,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase { $result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result); $this->assertCount(1, $result['entries']); // Only one matching everything. $this->assertEquals(1, $result['totalcount']); + $this->assertEquals(2, $result['maxcount']); // Combined search (no results). $field2 = $DB->get_record('data_fields', array('type' => 'number')); @@ -771,6 +779,7 @@ class mod_data_external_testcase extends externallib_advanced_testcase { $result = external_api::clean_returnvalue(mod_data_external::search_entries_returns(), $result); $this->assertCount(0, $result['entries']); // Only one matching everything. $this->assertEquals(0, $result['totalcount']); + $this->assertEquals(2, $result['maxcount']); } /** diff --git a/mod/data/upgrade.txt b/mod/data/upgrade.txt index 7ee17a884e8..92ede9dcf5f 100644 --- a/mod/data/upgrade.txt +++ b/mod/data/upgrade.txt @@ -1,6 +1,10 @@ This files describes API changes in /mod/data - plugins, information provided here is intended especially for developers. +=== 3.4 === +* External function mod_data_external::search_entries() now returns the maxcount field: Total count of records that the user could + see in the database (if all the search criterias were removed). + === 3.3.2 === * data_refresh_events() Now takes two additional parameters to refine the update to a specific instance. This function now optionally takes the module instance object or ID, and the course module object or ID. Please try to send the full