diff --git a/e107_handlers/admin_ui.php b/e107_handlers/admin_ui.php index 04201ff2c..4cce0a4d0 100755 --- a/e107_handlers/admin_ui.php +++ b/e107_handlers/admin_ui.php @@ -4904,9 +4904,9 @@ class e_admin_controller_ui extends e_admin_controller * @param mixed $qryField Specific query field(s) to filter. * @param mixed $isfilter Determines if a specific filter is applied. * @param mixed $handleAction Custom action handler for the search process. - * @return void + * @return string */ - public function _modifyListQrySearch(string|null $listQry, string $searchTerm, string $filterOptions, string $tablePath, string $tableFrom, string $primaryName, $raw, $orderField, $qryAsc, $forceFrom, int $qryFrom, $forceTo, int $perPage, $qryField, $isfilter, $handleAction) + public function _modifyListQrySearch(string|null $listQry, string $searchTerm, string $filterOptions, string $tablePath, string $tableFrom, string|null $primaryName, $raw, $orderField, $qryAsc, $forceFrom, int $qryFrom, $forceTo, int $perPage, $qryField, $isfilter, $handleAction) { $generateTest = false; $tp = e107::getParser(); @@ -4962,9 +4962,6 @@ class e_admin_controller_ui extends e_admin_controller - - - if(E107_DEBUG_LEVEL == E107_DBG_SQLQUERIES) { e107::getMessage()->addDebug('searchQuery: ' . $searchQuery . ''); diff --git a/e107_tests/tests/_data/e_admin_ui/_modifyListQrySearch/603f353c7194e85260343c1fb838e5a0e6e0565f.json b/e107_tests/tests/_data/e_admin_ui/_modifyListQrySearch/603f353c7194e85260343c1fb838e5a0e6e0565f.json new file mode 100644 index 000000000..c3d1ae8b0 --- /dev/null +++ b/e107_tests/tests/_data/e_admin_ui/_modifyListQrySearch/603f353c7194e85260343c1fb838e5a0e6e0565f.json @@ -0,0 +1,203 @@ +{ + "uri": "\/e107v2\/e107_admin\/banlist.php?searchquery=125.125.125.125+&filter_options=&etrigger_filter=etrigger_filter", + "methodInvocation": { + "listQry": "SELECT * FROM `#banlist` WHERE banlist_bantype != 100 ", + "searchTerm": "125.125.125.125", + "filterOptions": "", + "tablePath": "`#banlist`.", + "tableFrom": "`#banlist`", + "primaryName": "banlist_id", + "raw": false, + "orderField": null, + "qryAsc": null, + "forceFrom": false, + "qryFrom": 0, + "forceTo": false, + "perPage": 10, + "qryField": null, + "isfilter": false, + "handleAction": "List" + }, + "preProcessedData": { + "fields": { + "checkboxes": { + "title": "", + "type": null, + "data": null, + "width": "5%", + "thclass": "center", + "forced": "1", + "class": "center", + "toggle": "e-multiselect", + "table": "banlist", + "alias": "", + "field": "checkboxes", + "__tableField": "`#banlist`.checkboxes", + "__tableFrom": "`#banlist`.checkboxes" + }, + "banlist_id": { + "title": "ID", + "data": "int", + "width": "5%", + "help": "", + "readParms": "", + "writeParms": "", + "class": "left", + "thclass": "left", + "table": "banlist", + "alias": "", + "field": "banlist_id", + "__tableField": "`#banlist`.banlist_id", + "__tableFrom": "`#banlist`.banlist_id" + }, + "banlist_ip": { + "title": "IP \/ Email", + "type": "method", + "data": "str", + "width": "auto", + "help": "", + "readParms": "", + "writeParms": [], + "class": "left", + "thclass": "left", + "table": "banlist", + "alias": "", + "field": "banlist_ip", + "__tableField": "`#banlist`.banlist_ip", + "__tableFrom": "`#banlist`.banlist_ip" + }, + "banlist_bantype": { + "title": "Type", + "type": "method", + "data": "str", + "width": "auto", + "filter": true, + "help": "", + "readParms": "", + "writeParms": "", + "class": "left", + "thclass": "left", + "table": "banlist", + "alias": "", + "field": "banlist_bantype", + "__tableField": "`#banlist`.banlist_bantype", + "__tableFrom": "`#banlist`.banlist_bantype" + }, + "banlist_datestamp": { + "title": "Date stamp", + "type": "datestamp", + "data": "int", + "width": "auto", + "filter": true, + "help": "", + "readParms": "", + "writeParms": "auto=1&hidden=1&readonly=1", + "class": "left", + "thclass": "left", + "table": "banlist", + "alias": "", + "field": "banlist_datestamp", + "__tableField": "`#banlist`.banlist_datestamp", + "__tableFrom": "`#banlist`.banlist_datestamp" + }, + "banlist_banexpires": { + "title": "Expires", + "type": "method", + "data": "int", + "inline": true, + "width": "auto", + "batch": true, + "filter": true, + "help": "", + "readParms": "", + "writeParms": "", + "class": "left", + "thclass": "left", + "table": "banlist", + "alias": "", + "field": "banlist_banexpires", + "__tableField": "`#banlist`.banlist_banexpires", + "__tableFrom": "`#banlist`.banlist_banexpires" + }, + "banlist_admin": { + "title": "Admin", + "type": "text", + "data": "int", + "noedit": true, + "width": "auto", + "help": "", + "readParms": "", + "writeParms": "", + "class": "center", + "thclass": "center", + "table": "banlist", + "alias": "", + "field": "banlist_admin", + "__tableField": "`#banlist`.banlist_admin", + "__tableFrom": "`#banlist`.banlist_admin" + }, + "banlist_reason": { + "title": "Reason", + "type": "text", + "data": "str", + "inline": true, + "width": "auto", + "help": "", + "readParms": "constant=1", + "writeParms": { + "size": "xxlarge" + }, + "class": "left", + "thclass": "left", + "table": "banlist", + "alias": "", + "field": "banlist_reason", + "__tableField": "`#banlist`.banlist_reason", + "__tableFrom": "`#banlist`.banlist_reason" + }, + "banlist_notes": { + "title": "Notes", + "type": "text", + "data": "str", + "inline": true, + "width": "auto", + "help": "", + "readParms": "", + "writeParms": { + "size": "xxlarge" + }, + "class": "left", + "thclass": "left", + "table": "banlist", + "alias": "", + "field": "banlist_notes", + "__tableField": "`#banlist`.banlist_notes", + "__tableFrom": "`#banlist`.banlist_notes" + }, + "options": { + "title": "Options", + "type": "", + "data": "", + "width": "10%", + "thclass": "center last", + "class": "center last", + "forced": "1", + "table": "banlist", + "alias": "", + "field": "options", + "__tableField": "`#banlist`.options", + "__tableFrom": "`#banlist`.options" + } + }, + "joinData": [], + "listOrder": "banlist_datestamp DESC" + }, + "intermediateStates": { + "searchTerm": "125.125.125.125", + "searchQuery": "125.125.125.125", + "searchFilter": [], + "listQry": "SELECT * FROM `#banlist` WHERE banlist_bantype != 100 ", + "listQryBeforeFinal": "SELECT * FROM `#banlist` WHERE banlist_bantype != 100 " + }, + "expected": "SELECT * FROM `#banlist` WHERE banlist_bantype != 100 AND ( banlist_ip = '125.125.125.125' OR banlist_ip LIKE '%0000:0000:0000:0000:0000:ffff:7d7d:7d7d%' OR `#banlist`.banlist_bantype LIKE '%125.125.125.125%' OR `#banlist`.banlist_reason LIKE '%125.125.125.125%' OR `#banlist`.banlist_notes LIKE '%125.125.125.125%' ) ORDER BY banlist_datestamp DESC LIMIT 0, 10" +} diff --git a/e107_tests/tests/unit/e_admin_controller_uiTest.php b/e107_tests/tests/unit/e_admin_controller_uiTest.php index e95900cb3..f733c4cd4 100644 --- a/e107_tests/tests/unit/e_admin_controller_uiTest.php +++ b/e107_tests/tests/unit/e_admin_controller_uiTest.php @@ -13,7 +13,7 @@ class e_admin_controller_uiTest extends \Codeception\Test\Unit { - /** @var e_admin_controller_ui */ + /** @var e_admin_ui */ protected $ui; protected $req; @@ -31,6 +31,8 @@ } } + + public function testJoinAlias() { // Simple Join -------------- @@ -155,7 +157,45 @@ $expected = "SELECT u.* FROM `#user` WHERE 1 AND ( u.user_name LIKE '%burt's%' OR u.user_login LIKE '%burt's%' OR u.user_phone LIKE '%burt's%' ) LIMIT 0, 10"; $this::assertSame($expected, $result); + // Raw mode. + $result = $this->ui->_modifyListQrySearch($listQry, "burt's", $filterOptions, $tablePath, $tableFrom, $primaryName, true, $orderField, $qryAsc, $forceFrom, $qryFrom, $forceTo, $perPage, $qryField, $isfilter, $handleAction); + $expected = array ( 'joinWhere' => + array ( + ), + 'filter' => + array ( + 0 => 'u.user_name LIKE \'%burt's%\'', + 1 => 'u.user_login LIKE \'%burt's%\'', + 2 => 'u.user_phone LIKE \'%burt's%\'', + ), + 'listQrySql' => + array ( + ), + 'filterFrom' => + array ( + ), + 'search' => + array ( + ), + 'tableFromName' => '`#user`', + 'tableFrom' => + array ( + 0 => '`#user`.*', + ), + 'joinsFrom' => + array ( + ), + 'joins' => + array ( + ), + 'groupField' => '', + 'orderField' => '', + 'orderType' => 'ASC', + 'limitFrom' => 0, + 'limitTo' => 10, + ); + $this::assertSame($expected, $result); } @@ -212,6 +252,26 @@ public function test_ModifyListQrySearch_FromJsonFiles() { + + // For Banlist test. + + $this->ui->handleListBanlistIpSearch = function($srch) + { + $ret = array( + "banlist_ip = '".$srch."'" + ); + + if($ip6 = e107::getIPHandler()->ipEncode($srch,true)) + { + $ip = str_replace('x', '', $ip6); + $ret[] = "banlist_ip LIKE '%".$ip."%'"; + } + + return implode(" OR ",$ret); + }; + + + // The directory where the JSON files are stored $directory = e_BASE . "e107_tests/tests/_data/e_admin_ui/_modifyListQrySearch/"; if (!is_dir($directory)) @@ -256,6 +316,8 @@ $preProcessedData = $data['preProcessedData']; $expected = $data['expected']; + + // Verify fields are present in the JSON if (empty($preProcessedData['fields'])) {