MDL-68341 core_table: add component parameter to fetch WS

This commit is contained in:
Simey Lameze 2020-04-07 13:58:50 +08:00
parent bc6f5f23ea
commit 4cf97b7f42
9 changed files with 63 additions and 20 deletions

View File

@ -1,2 +1,2 @@
define ("core_table/dynamic",["exports","core_table/local/dynamic/repository","core_table/local/dynamic/selectors"],function(a,b,c){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.init=a.setLastInitial=a.setFirstInitial=a.setPageSize=a.setPageNumber=a.setSortOrder=a.setFilters=a.updateTable=a.refreshTableContent=void 0;c=function(a){if(a&&a.__esModule){return a}else{var b={};if(null!=a){for(var c in a){if(Object.prototype.hasOwnProperty.call(a,c)){var d=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(a,c):{};if(d.get||d.set){Object.defineProperty(b,c,d)}else{b[c]=a[c]}}}}b.default=a;return b}}(c);function d(a){return g(a)||f(a)||e()}function e(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function f(a){if(Symbol.iterator in Object(a)||"[object Arguments]"===Object.prototype.toString.call(a))return Array.from(a)}function g(a){if(Array.isArray(a)){for(var b=0,c=Array(a.length);b<a.length;b++){c[b]=a[b]}return c}}var h=!1,i=function(a){if(!a){throw new Error("The table specified is not a dynamic table and cannot be updated")}if(!a.matches(c.main.region)){throw new Error("The table specified is not a dynamic table and cannot be updated")}return!0},j=function(a){return JSON.parse(a.dataset.tableFilters)},k=function(a){var c=j(a);return(0,b.fetch)(a.dataset.tableHandler,a.dataset.tableUniqueid,{sortBy:a.dataset.tableSortBy,sortOrder:a.dataset.tableSortOrder,joinType:c.jointype,filters:c.filters,firstinitial:a.dataset.tableFirstInitial,lastinitial:a.dataset.tableLastInitial,pageNumber:a.dataset.tablePageNumber,pageSize:a.dataset.tablePageSize}).then(function(b){var c=document.createElement("div");c.innerHTML=b.html;a.replaceWith.apply(a,d(c.childNodes));return b})};a.refreshTableContent=k;var l=function(a){var b=1<arguments.length&&arguments[1]!==void 0?arguments[1]:{},c=b.sortBy,d=void 0===c?null:c,e=b.sortOrder,f=void 0===e?null:e,g=b.filters,h=void 0===g?null:g,j=b.firstInitial,l=void 0===j?null:j,m=b.lastInitial,n=void 0===m?null:m,o=b.pageNumber,p=void 0===o?null:o,q=b.pageSize,r=void 0===q?null:q,s=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;i(a);if(d&&f){a.dataset.tableSortBy=d;a.dataset.tableSortOrder=f}if(null!==l){a.dataset.tableFirstInitial=l}if(null!==n){a.dataset.tableLastInitial=n}if(null!==p){a.dataset.tablePageNumber=p}if(null!==r){a.dataset.tablePageSize=r}if(h){a.dataset.tableFilters=JSON.stringify(h)}if(s){return k(a)}else{return Promise.resolve()}};a.updateTable=l;a.setFilters=function setFilters(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;return l(a,{filters:b},c)};var m=function(a,b,c){var d=3<arguments.length&&arguments[3]!==void 0?arguments[3]:!0;return l(a,{sortBy:b,sortOrder:c},d)};a.setSortOrder=m;var n=function(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;return l(a,{pageNumber:b},c)};a.setPageNumber=n;a.setPageSize=function setPageSize(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;return l(a,{pageSize:b,pageNumber:0},c)};var o=function(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;return l(a,{firstInitial:b},c)};a.setFirstInitial=o;var p=function(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;return l(a,{lastInitial:b},c)};a.setLastInitial=p;var q=function(){if(h){return}h=!0;document.addEventListener("click",function(a){var b=a.target.closest(c.main.region);if(!b){return}var d=a.target.closest(c.table.links.sortableColumn);if(d){a.preventDefault();m(b,d.dataset.sortby,d.dataset.sortorder)}var e=a.target.closest(c.initialsBar.links.firstInitial);if(null!==e){a.preventDefault();o(b,e.dataset.initial)}var f=a.target.closest(c.initialsBar.links.lastInitial);if(null!==f){a.preventDefault();p(b,f.dataset.initial)}var g=a.target.closest(c.paginationBar.links.pageItem);if(g){a.preventDefault();n(b,g.dataset.pageNumber)}})};a.init=q});
define ("core_table/dynamic",["exports","core_table/local/dynamic/repository","core_table/local/dynamic/selectors"],function(a,b,c){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.init=a.setLastInitial=a.setFirstInitial=a.setPageSize=a.setPageNumber=a.setSortOrder=a.setFilters=a.updateTable=a.refreshTableContent=void 0;c=function(a){if(a&&a.__esModule){return a}else{var b={};if(null!=a){for(var c in a){if(Object.prototype.hasOwnProperty.call(a,c)){var d=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(a,c):{};if(d.get||d.set){Object.defineProperty(b,c,d)}else{b[c]=a[c]}}}}b.default=a;return b}}(c);function d(a){return g(a)||f(a)||e()}function e(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function f(a){if(Symbol.iterator in Object(a)||"[object Arguments]"===Object.prototype.toString.call(a))return Array.from(a)}function g(a){if(Array.isArray(a)){for(var b=0,c=Array(a.length);b<a.length;b++){c[b]=a[b]}return c}}var h=!1,i=function(a){if(!a){throw new Error("The table specified is not a dynamic table and cannot be updated")}if(!a.matches(c.main.region)){throw new Error("The table specified is not a dynamic table and cannot be updated")}return!0},j=function(a){return JSON.parse(a.dataset.tableFilters)},k=function(a){var c=j(a);return(0,b.fetch)(a.dataset.tableComponent,a.dataset.tableHandler,a.dataset.tableUniqueid,{sortBy:a.dataset.tableSortBy,sortOrder:a.dataset.tableSortOrder,joinType:c.jointype,filters:c.filters,firstinitial:a.dataset.tableFirstInitial,lastinitial:a.dataset.tableLastInitial,pageNumber:a.dataset.tablePageNumber,pageSize:a.dataset.tablePageSize}).then(function(b){var c=document.createElement("div");c.innerHTML=b.html;a.replaceWith.apply(a,d(c.childNodes));return b})};a.refreshTableContent=k;var l=function(a){var b=1<arguments.length&&arguments[1]!==void 0?arguments[1]:{},c=b.sortBy,d=void 0===c?null:c,e=b.sortOrder,f=void 0===e?null:e,g=b.filters,h=void 0===g?null:g,j=b.firstInitial,l=void 0===j?null:j,m=b.lastInitial,n=void 0===m?null:m,o=b.pageNumber,p=void 0===o?null:o,q=b.pageSize,r=void 0===q?null:q,s=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;i(a);if(d&&f){a.dataset.tableSortBy=d;a.dataset.tableSortOrder=f}if(null!==l){a.dataset.tableFirstInitial=l}if(null!==n){a.dataset.tableLastInitial=n}if(null!==p){a.dataset.tablePageNumber=p}if(null!==r){a.dataset.tablePageSize=r}if(h){a.dataset.tableFilters=JSON.stringify(h)}if(s){return k(a)}else{return Promise.resolve()}};a.updateTable=l;a.setFilters=function setFilters(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;return l(a,{filters:b},c)};var m=function(a,b,c){var d=3<arguments.length&&arguments[3]!==void 0?arguments[3]:!0;return l(a,{sortBy:b,sortOrder:c},d)};a.setSortOrder=m;var n=function(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;return l(a,{pageNumber:b},c)};a.setPageNumber=n;a.setPageSize=function setPageSize(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;return l(a,{pageSize:b,pageNumber:0},c)};var o=function(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;return l(a,{firstInitial:b},c)};a.setFirstInitial=o;var p=function(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:!0;return l(a,{lastInitial:b},c)};a.setLastInitial=p;var q=function(){if(h){return}h=!0;document.addEventListener("click",function(a){var b=a.target.closest(c.main.region);if(!b){return}var d=a.target.closest(c.table.links.sortableColumn);if(d){a.preventDefault();m(b,d.dataset.sortby,d.dataset.sortorder)}var e=a.target.closest(c.initialsBar.links.firstInitial);if(null!==e){a.preventDefault();o(b,e.dataset.initial)}var f=a.target.closest(c.initialsBar.links.lastInitial);if(null!==f){a.preventDefault();p(b,f.dataset.initial)}var g=a.target.closest(c.paginationBar.links.pageItem);if(g){a.preventDefault();n(b,g.dataset.pageNumber)}})};a.init=q});
//# sourceMappingURL=dynamic.min.js.map

File diff suppressed because one or more lines are too long

View File

@ -1,2 +1,2 @@
define ("core_table/local/dynamic/repository",["exports","core/ajax"],function(a,b){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.fetch=void 0;a.fetch=function fetch(a,c){var d=2<arguments.length&&arguments[2]!==void 0?arguments[2]:{},e=d.sortBy,f=void 0===e?null:e,g=d.sortOrder,h=void 0===g?null:g,i=d.joinType,j=void 0===i?null:i,k=d.filters,l=void 0===k?{}:k,m=d.firstinitial,n=void 0===m?null:m,o=d.lastinitial,p=void 0===o?null:o,q=d.pageNumber,r=void 0===q?null:q,s=d.pageSize,t=void 0===s?null:s;return(0,b.call)([{methodname:"core_table_dynamic_fetch",args:{handler:a,uniqueid:c,sortby:f,sortorder:h,jointype:j,filters:l,firstinitial:n,lastinitial:p,pagenumber:r,pagesize:t}}])[0]}});
define ("core_table/local/dynamic/repository",["exports","core/ajax"],function(a,b){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.fetch=void 0;a.fetch=function fetch(a,c,d){var e=3<arguments.length&&arguments[3]!==void 0?arguments[3]:{},f=e.sortBy,g=void 0===f?null:f,h=e.sortOrder,i=void 0===h?null:h,j=e.joinType,k=void 0===j?null:j,l=e.filters,m=void 0===l?{}:l,n=e.firstinitial,o=void 0===n?null:n,p=e.lastinitial,q=void 0===p?null:p,r=e.pageNumber,s=void 0===r?null:r,t=e.pageSize,u=void 0===t?null:t;return(0,b.call)([{methodname:"core_table_dynamic_fetch",args:{component:a,handler:c,uniqueid:d,sortby:g,sortorder:i,jointype:k,filters:m,firstinitial:o,lastinitial:q,pagenumber:s,pagesize:u}}])[0]}});
//# sourceMappingURL=repository.min.js.map

View File

@ -1 +1 @@
{"version":3,"sources":["../../../src/local/dynamic/repository.js"],"names":["fetch","handler","uniqueid","sortBy","sortOrder","joinType","filters","firstinitial","lastinitial","pageNumber","pageSize","methodname","args","sortby","sortorder","jointype","pagenumber","pagesize"],"mappings":"yKAwCqB,QAARA,CAAAA,KAAQ,CAACC,CAAD,CAAUC,CAAV,CAUhB,8DADG,EACH,KATGC,MASH,CATGA,CASH,YATY,IASZ,OARGC,SAQH,CARGA,CAQH,YARe,IAQf,OAPGC,QAOH,CAPGA,CAOH,YAPc,IAOd,OANGC,OAMH,CANGA,CAMH,YANa,EAMb,OALGC,YAKH,CALGA,CAKH,YALkB,IAKlB,OAJGC,WAIH,CAJGA,CAIH,YAJiB,IAIjB,OAHGC,UAGH,CAHGA,CAGH,YAHgB,IAGhB,OAFGC,QAEH,CAFGA,CAEH,YAFc,IAEd,GACD,MAAO,WAAU,CAAC,CACdC,UAAU,2BADI,CAEdC,IAAI,CAAE,CACFX,OAAO,CAAPA,CADE,CAEFC,QAAQ,CAARA,CAFE,CAGFW,MAAM,CAAEV,CAHN,CAIFW,SAAS,CAAEV,CAJT,CAKFW,QAAQ,CAAEV,CALR,CAMFC,OAAO,CAAPA,CANE,CAOFC,YAAY,CAAZA,CAPE,CAQFC,WAAW,CAAXA,CARE,CASFQ,UAAU,CAAEP,CATV,CAUFQ,QAAQ,CAAEP,CAVR,CAFQ,CAAD,CAAV,EAcH,CAdG,CAeV,C","sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * A javascript module to handle calendar ajax actions.\n *\n * @module core_calendar/repository\n * @class repository\n * @package core_calendar\n * @copyright 2017 Simey Lameze <lameze@moodle.com>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport {call as fetchMany} from 'core/ajax';\n\n/**\n * Fetch table view.\n *\n * @method fetch\n * @param {String} handler The name of the handler\n * @param {String} uniqueid The unique id of the table\n * @param {Object} filters The filters to apply when searching\n * @param {String} firstinitial The first name initial to filter on\n * @param {String} lastinitial The last name initial to filter on\n * @param {String} pageNumber The page number\n * @param {Number} pageSize The page size\n * @param {Number} params parameters to request table\n * @return {Promise} Resolved with requested table view\n */\nexport const fetch = (handler, uniqueid, {\n sortBy = null,\n sortOrder = null,\n joinType = null,\n filters = {},\n firstinitial = null,\n lastinitial = null,\n pageNumber = null,\n pageSize = null,\n } = {}\n) => {\n return fetchMany([{\n methodname: `core_table_dynamic_fetch`,\n args: {\n handler,\n uniqueid,\n sortby: sortBy,\n sortorder: sortOrder,\n jointype: joinType,\n filters,\n firstinitial,\n lastinitial,\n pagenumber: pageNumber,\n pagesize: pageSize,\n },\n }])[0];\n};\n"],"file":"repository.min.js"}
{"version":3,"sources":["../../../src/local/dynamic/repository.js"],"names":["fetch","component","handler","uniqueid","sortBy","sortOrder","joinType","filters","firstinitial","lastinitial","pageNumber","pageSize","methodname","args","sortby","sortorder","jointype","pagenumber","pagesize"],"mappings":"yKAyCqB,QAARA,CAAAA,KAAQ,CAACC,CAAD,CAAYC,CAAZ,CAAqBC,CAArB,CAUhB,8DADG,EACH,KATGC,MASH,CATGA,CASH,YATY,IASZ,OARGC,SAQH,CARGA,CAQH,YARe,IAQf,OAPGC,QAOH,CAPGA,CAOH,YAPc,IAOd,OANGC,OAMH,CANGA,CAMH,YANa,EAMb,OALGC,YAKH,CALGA,CAKH,YALkB,IAKlB,OAJGC,WAIH,CAJGA,CAIH,YAJiB,IAIjB,OAHGC,UAGH,CAHGA,CAGH,YAHgB,IAGhB,OAFGC,QAEH,CAFGA,CAEH,YAFc,IAEd,GACD,MAAO,WAAU,CAAC,CACdC,UAAU,2BADI,CAEdC,IAAI,CAAE,CACFZ,SAAS,CAATA,CADE,CAEFC,OAAO,CAAPA,CAFE,CAGFC,QAAQ,CAARA,CAHE,CAIFW,MAAM,CAAEV,CAJN,CAKFW,SAAS,CAAEV,CALT,CAMFW,QAAQ,CAAEV,CANR,CAOFC,OAAO,CAAPA,CAPE,CAQFC,YAAY,CAAZA,CARE,CASFC,WAAW,CAAXA,CATE,CAUFQ,UAAU,CAAEP,CAVV,CAWFQ,QAAQ,CAAEP,CAXR,CAFQ,CAAD,CAAV,EAeH,CAfG,CAgBV,C","sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * A javascript module to handle calendar ajax actions.\n *\n * @module core_calendar/repository\n * @class repository\n * @package core_calendar\n * @copyright 2017 Simey Lameze <lameze@moodle.com>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport {call as fetchMany} from 'core/ajax';\n\n/**\n * Fetch table view.\n *\n * @method fetch\n * @param {String} component The component\n * @param {String} handler The name of the handler\n * @param {String} uniqueid The unique id of the table\n * @param {Object} filters The filters to apply when searching\n * @param {String} firstinitial The first name initial to filter on\n * @param {String} lastinitial The last name initial to filter on\n * @param {String} pageNumber The page number\n * @param {Number} pageSize The page size\n * @param {Number} params parameters to request table\n * @return {Promise} Resolved with requested table view\n */\nexport const fetch = (component, handler, uniqueid, {\n sortBy = null,\n sortOrder = null,\n joinType = null,\n filters = {},\n firstinitial = null,\n lastinitial = null,\n pageNumber = null,\n pageSize = null,\n } = {}\n) => {\n return fetchMany([{\n methodname: `core_table_dynamic_fetch`,\n args: {\n component,\n handler,\n uniqueid,\n sortby: sortBy,\n sortorder: sortOrder,\n jointype: joinType,\n filters,\n firstinitial,\n lastinitial,\n pagenumber: pageNumber,\n pagesize: pageSize,\n },\n }])[0];\n};\n"],"file":"repository.min.js"}

View File

@ -66,6 +66,7 @@ export const refreshTableContent = tableRoot => {
const filterset = getFiltersetFromTable(tableRoot);
return fetchTableData(
tableRoot.dataset.tableComponent,
tableRoot.dataset.tableHandler,
tableRoot.dataset.tableUniqueid,
{

View File

@ -28,6 +28,7 @@ import {call as fetchMany} from 'core/ajax';
* Fetch table view.
*
* @method fetch
* @param {String} component The component
* @param {String} handler The name of the handler
* @param {String} uniqueid The unique id of the table
* @param {Object} filters The filters to apply when searching
@ -38,7 +39,7 @@ import {call as fetchMany} from 'core/ajax';
* @param {Number} params parameters to request table
* @return {Promise} Resolved with requested table view
*/
export const fetch = (handler, uniqueid, {
export const fetch = (component, handler, uniqueid, {
sortBy = null,
sortOrder = null,
joinType = null,
@ -52,6 +53,7 @@ export const fetch = (handler, uniqueid, {
return fetchMany([{
methodname: `core_table_dynamic_fetch`,
args: {
component,
handler,
uniqueid,
sortby: sortBy,

View File

@ -51,9 +51,14 @@ class fetch extends external_api {
*/
public static function execute_parameters(): external_function_parameters {
return new external_function_parameters ([
'component' => new external_value(
PARAM_COMPONENT,
'Component',
VALUE_REQUIRED
),
'handler' => new external_value(
// Note: We do not have a PARAM_CLASSNAME which would have been ideal.
PARAM_RAW,
PARAM_ALPHANUMEXT,
'Handler',
VALUE_REQUIRED
),
@ -116,6 +121,7 @@ class fetch extends external_api {
/**
* External function to fetch a table view.
*
* @param string $component The component.
* @param string $handler Dynamic table class name.
* @param string $uniqueid Unique ID for the container.
* @param string $sortby The name of a sortable column.
@ -126,11 +132,11 @@ class fetch extends external_api {
* @param string $lastinitial The last name initial to filter on
* @param int $pagenumber The page number.
* @param int $pagesize The number of records.
* @param string $jointype The join type.
*
* @return array
*/
public static function execute(
string $component,
string $handler,
string $uniqueid,
string $sortby,
@ -145,11 +151,8 @@ class fetch extends external_api {
global $PAGE;
if (!class_exists($handler) || !is_subclass_of($handler, \core_table\dynamic::class)) {
throw new \UnexpectedValueException('Unknown table handler, or table handler does not support dynamic updating.');
}
[
'component' => $component,
'handler' => $handler,
'uniqueid' => $uniqueid,
'sortby' => $sortby,
@ -161,6 +164,7 @@ class fetch extends external_api {
'pagenumber' => $pagenumber,
'pagesize' => $pagesize,
] = self::validate_parameters(self::execute_parameters(), [
'component' => $component,
'handler' => $handler,
'uniqueid' => $uniqueid,
'sortby' => $sortby,
@ -173,7 +177,22 @@ class fetch extends external_api {
'pagesize' => $pagesize,
]);
$filterset = new \core_user\table\participants_filterset();
$tableclass = "\\{$component}\\table\\{$handler}";
if (!class_exists($tableclass)) {
throw new \UnexpectedValueException("Table handler class {$tableclass} not found. " .
"Please make sure that your table handler class is under the \\{$component}\\table namespace.");
}
if (!is_subclass_of($tableclass, \core_table\dynamic::class)) {
throw new \UnexpectedValueException("Table handler class {$tableclass} does not support dynamic updating.");
}
$filtersetclass = "{$tableclass}_filterset";
if (!class_exists($filtersetclass)) {
throw new \UnexpectedValueException("The filter specified ({$filtersetclass}) is invalid.");
}
$filterset = new $filtersetclass();
foreach ($filters as $rawfilter) {
$filterset->add_filter_from_params(
$rawfilter['name'],
@ -182,7 +201,7 @@ class fetch extends external_api {
);
}
$instance = new $handler($uniqueid);
$instance = new $tableclass($uniqueid);
$instance->set_filterset($filterset);
$instance->set_sorting($sortby, $sortorder);

View File

@ -55,10 +55,11 @@ class fetch_test extends advanced_testcase {
$this->resetAfterTest();
$this->expectException('UnexpectedValueException');
$this->expectExceptionMessage("Unknown table handler, or table handler does not support dynamic updating.");
$handler = "\\core_user\\table\\users_participants_table";
$this->expectExceptionMessage("Table handler class {$handler} not found. Please make sure that your table handler class is under the \\core_user\\table namespace.");
// Tests that invalid users_participants_table class gets an exception.
fetch::execute("core_user\users_participants_table", "", "email", "4", [], "1");
fetch::execute("core_user", "users_participants_table", "", "email", "4", [], "1");
}
/**
@ -81,9 +82,8 @@ class fetch_test extends advanced_testcase {
$this->expectExceptionMessage("Invalid parameter value detected (filters => Invalid parameter value detected " .
"(Missing required key in single structure: name): Missing required key in single structure: name");
fetch::execute("\\core_user\\table\\participants",
"user-index-participants-{$course->id}", "firstname", "4", $filter, (string)filter::JOINTYPE_ANY);
fetch::execute("core_user", "participants", "user-index-participants-{$course->id}",
"firstname", "4", $filter, (string)filter::JOINTYPE_ANY);
}
/**
@ -108,7 +108,7 @@ class fetch_test extends advanced_testcase {
]
];
$participantstable = fetch::execute("\\core_user\\table\\participants",
$participantstable = fetch::execute("core_user", "participants",
"user-index-participants-{$course->id}", "firstname", "4", $filter, (string)filter::JOINTYPE_ANY);
$html = $participantstable['html'];

View File

@ -1499,6 +1499,26 @@ class flexible_table {
];
}
/**
* Get dynamic class component.
*
* @return string
*/
protected function get_component() {
$tableclass = explode("\\", get_class($this));
return reset($tableclass);
}
/**
* Get dynamic class handler.
*
* @return string
*/
protected function get_handler() {
$tableclass = explode("\\", get_class($this));
return end($tableclass);
}
/**
* Get the dynamic table start wrapper.
* If this is not a dynamic table, then an empty string is returned making this safe to blindly call.
@ -1510,7 +1530,8 @@ class flexible_table {
$sortdata = $this->get_sort_order();
return html_writer::start_tag('div', [
'data-region' => 'core_table/dynamic',
'data-table-handler' => get_class($this),
'data-table-handler' => $this->get_handler(),
'data-table-component' => $this->get_component(),
'data-table-uniqueid' => $this->uniqueid,
'data-table-filters' => json_encode($this->get_filterset()),
'data-table-sort-by' => $sortdata['sortby'],