From 83311dba54c9b66344a0de8d3923cbafdc794846 Mon Sep 17 00:00:00 2001 From: liumengyi Date: Fri, 6 Jun 2025 14:36:55 +0800 Subject: [PATCH 1/7] * [bug#63216,done,0.1h] bind onChange event and set empty date value. --- lib/zin/wg/queryfiltermodal/v1.php | 2 +- module/bi/model.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/zin/wg/queryfiltermodal/v1.php b/lib/zin/wg/queryfiltermodal/v1.php index 233e518ff3..df6a2b196c 100644 --- a/lib/zin/wg/queryfiltermodal/v1.php +++ b/lib/zin/wg/queryfiltermodal/v1.php @@ -115,7 +115,7 @@ class queryFilterModal extends wg ) ) ), - on::change('.query-filter-row .form-control')->do($onChange) + on::change('.query-filter-row .form-control, .query-filter-row .input-control')->do($onChange) ); } diff --git a/module/bi/model.php b/module/bi/model.php index 0d8234e722..e65beb94a0 100644 --- a/module/bi/model.php +++ b/module/bi/model.php @@ -1380,7 +1380,7 @@ class biModel extends model if($filter['type'] == 'datetime') $filters[$index]['default'] .= ':00.000000000'; if($filter['type'] == 'multipleselect' && is_array($filter['default'])) $filters[$index]['default'] = implode("','", $filter['default']); - if($emptyValue) $filters[$index]['default'] = ''; + if($emptyValue) $filters[$index]['default'] = $filter['type'] == 'date' || $filter['type'] == 'datetime' ? '1970-01-01' : ''; } $sql = $this->parseSqlVars($sql, $filters); $sql = trim($sql, ';'); From f6e42b0ffec9327ddea40144fb42e96e21b9c1ac Mon Sep 17 00:00:00 2001 From: liumengyi Date: Tue, 10 Jun 2025 10:06:32 +0800 Subject: [PATCH 2/7] + [unittest] add unittest for biModel::processVars. --- module/bi/test/lib/bi.unittest.class.php | 14 ++++++++++++++ module/bi/test/model/processvars.php | 12 ++++++++++++ 2 files changed, 26 insertions(+) create mode 100755 module/bi/test/model/processvars.php diff --git a/module/bi/test/lib/bi.unittest.class.php b/module/bi/test/lib/bi.unittest.class.php index e20e5751a3..49cc7eb745 100644 --- a/module/bi/test/lib/bi.unittest.class.php +++ b/module/bi/test/lib/bi.unittest.class.php @@ -118,4 +118,18 @@ class biTest $tableAndFields = $this->objectModel->getTableAndFields($sql); return $tableAndFields; } + + /** + * Test process vars. + * + * @param string $sql + * @param array $filters + * @param bool $emptyValue + * @access public + * @return string + */ + public function processVarsTest($sql, $filters, $emptyValue) + { + return $this->objectModel->processVars($sql, $filters, $emptyValue); + } } diff --git a/module/bi/test/model/processvars.php b/module/bi/test/model/processvars.php new file mode 100755 index 0000000000..b8ce2e55e9 --- /dev/null +++ b/module/bi/test/model/processvars.php @@ -0,0 +1,12 @@ +#!/usr/bin/env php +processVars(); +timeout=0 +cid=1 + +*/ From 6b7168ff91046bd6621fe805e23b432490657665 Mon Sep 17 00:00:00 2001 From: liumengyi Date: Tue, 10 Jun 2025 10:07:31 +0800 Subject: [PATCH 3/7] + [unittest] add unittest for biModel::processVars. --- module/bi/test/model/processvars.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/module/bi/test/model/processvars.php b/module/bi/test/model/processvars.php index b8ce2e55e9..d01171c01d 100755 --- a/module/bi/test/model/processvars.php +++ b/module/bi/test/model/processvars.php @@ -10,3 +10,19 @@ timeout=0 cid=1 */ + +$bi = new biTest(); + +$sqls = array(); + +$sqls[] = << t1.estimate) +EOT; + +$sqls[] = << t1.estimate) +EOT; + +$sqls[] = << '2022-01-01' order by t1.id +EOT; From b463eec358b07a2591819cb1e9b550bfc7692f98 Mon Sep 17 00:00:00 2001 From: liumengyi Date: Tue, 10 Jun 2025 10:09:20 +0800 Subject: [PATCH 4/7] + [unittest] add unittest for biModel::processVars. --- module/bi/test/model/processvars.php | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/module/bi/test/model/processvars.php b/module/bi/test/model/processvars.php index d01171c01d..c08f4bc813 100755 --- a/module/bi/test/model/processvars.php +++ b/module/bi/test/model/processvars.php @@ -26,3 +26,25 @@ EOT; $sqls[] = << '2022-01-01' order by t1.id EOT; + +$filters = $filter = array(); +$filter[] = array('field' => '', 'default' => '', 'type' => 'date'); +$filter[] = array('field' => '', 'default' => '', 'type' => 'datetime'); +$filter[] = array('field' => '', 'default' => '', 'type' => 'multipleselect'); +$filter[] = array('field' => '', 'default' => array(1,2), 'type' => 'multipleselect'); +$filters[] = $filter; + +$filter[] = array('field' => '', 'from' => '', 'default' => '', 'type' => 'date'); +$filter[] = array('field' => '', 'from' => '', 'default' => '', 'type' => 'datetime'); +$filter[] = array('field' => '', 'from' => '', 'default' => '', 'type' => 'multipleselect'); +$filter[] = array('field' => '', 'from' => '', 'default' => array(1,2), 'type' => 'multipleselect'); +$filters[] = $filter; + +$filter = array(); +$filter[] = array('field' => '', 'from' => 'query', 'default' => '', 'type' => 'date'); +$filter[] = array('field' => '', 'from' => 'query', 'default' => '', 'type' => 'datetime'); +$filter[] = array('field' => '', 'from' => 'query', 'default' => '', 'type' => 'multipleselect'); +$filter[] = array('field' => '', 'from' => 'query', 'default' => array(1,2), 'type' => 'multipleselect'); +$filters[] = $filter; + +$emptyValue = array(true, false); From eeb2f57b631ada9566e1dc9a1543b153843b71ac Mon Sep 17 00:00:00 2001 From: liumengyi Date: Tue, 10 Jun 2025 10:09:33 +0800 Subject: [PATCH 5/7] + [unittest] add unittest for biModel::processVars. --- module/bi/test/model/processvars.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/module/bi/test/model/processvars.php b/module/bi/test/model/processvars.php index c08f4bc813..3c582f1a6a 100755 --- a/module/bi/test/model/processvars.php +++ b/module/bi/test/model/processvars.php @@ -48,3 +48,22 @@ $filter[] = array('field' => '', 'from' => 'query', 'default' => array(1,2), 'ty $filters[] = $filter; $emptyValue = array(true, false); + +r($bi->processVarsTest($sqls[0], $filters[0], $emptyValue[0])) && p() && e('SELECT DISTINCT id,estimate FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate)'); // 测试第1条sql filter 0 emptyValue true +r($bi->processVarsTest($sqls[0], $filters[0], $emptyValue[1])) && p() && e('SELECT DISTINCT id,estimate FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate)'); // 测试第1条sql filter 0 emptyValue false +r($bi->processVarsTest($sqls[0], $filters[1], $emptyValue[0])) && p() && e('SELECT DISTINCT id,estimate FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate)'); // 测试第1条sql filter 1 emptyValue true +r($bi->processVarsTest($sqls[0], $filters[1], $emptyValue[1])) && p() && e('SELECT DISTINCT id,estimate FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate)'); // 测试第1条sql filter 1 emptyValue false +r($bi->processVarsTest($sqls[0], $filters[2], $emptyValue[0])) && p() && e('SELECT DISTINCT id,estimate FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate)'); // 测试第1条sql filter 2 emptyValue true +r($bi->processVarsTest($sqls[0], $filters[2], $emptyValue[1])) && p() && e('SELECT DISTINCT id,estimate FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate)'); // 测试第1条sql filter 2 emptyValue false +r($bi->processVarsTest($sqls[1], $filters[0], $emptyValue[0])) && p() && e('SELECT DISTINCT id,estimate hour FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate)'); // 测试第2条sql filter 0 emptyValue true +r($bi->processVarsTest($sqls[1], $filters[0], $emptyValue[1])) && p() && e('SELECT DISTINCT id,estimate hour FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate)'); // 测试第2条sql filter 0 emptyValue false +r($bi->processVarsTest($sqls[1], $filters[1], $emptyValue[0])) && p() && e('SELECT DISTINCT id,estimate hour FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate)'); // 测试第2条sql filter 1 emptyValue true +r($bi->processVarsTest($sqls[1], $filters[1], $emptyValue[1])) && p() && e('SELECT DISTINCT id,estimate hour FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate)'); // 测试第2条sql filter 1 emptyValue false +r($bi->processVarsTest($sqls[1], $filters[2], $emptyValue[0])) && p() && e('SELECT DISTINCT id,estimate hour FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate)'); // 测试第2条sql filter 2 emptyValue true +r($bi->processVarsTest($sqls[1], $filters[2], $emptyValue[1])) && p() && e('SELECT DISTINCT id,estimate hour FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate)'); // 测试第2条sql filter 2 emptyValue false +r($bi->processVarsTest($sqls[2], $filters[0], $emptyValue[0])) && p() && e("SELECT t1.name, t1.PM, t1.begin, t1.realBegan, t3.realname FROM zt_project AS t1 LEFT JOIN zt_team AS t2 ON t1.id = t2.root AND t2.type = 'execution' LEFT JOIN zt_user AS t3 ON t2.account = t3.account WHERE t1.name LIKE '%zentaopms%' AND t1.realBegan > '2022-01-01' order by t1.id"); // 测试第3条sql filter 0 emptyValue true +r($bi->processVarsTest($sqls[2], $filters[0], $emptyValue[1])) && p() && e("SELECT t1.name, t1.PM, t1.begin, t1.realBegan, t3.realname FROM zt_project AS t1 LEFT JOIN zt_team AS t2 ON t1.id = t2.root AND t2.type = 'execution' LEFT JOIN zt_user AS t3 ON t2.account = t3.account WHERE t1.name LIKE '%zentaopms%' AND t1.realBegan > '2022-01-01' order by t1.id"); // 测试第3条sql filter 0 emptyValue false +r($bi->processVarsTest($sqls[2], $filters[1], $emptyValue[0])) && p() && e("SELECT t1.name, t1.PM, t1.begin, t1.realBegan, t3.realname FROM zt_project AS t1 LEFT JOIN zt_team AS t2 ON t1.id = t2.root AND t2.type = 'execution' LEFT JOIN zt_user AS t3 ON t2.account = t3.account WHERE t1.name LIKE '%zentaopms%' AND t1.realBegan > '2022-01-01' order by t1.id"); // 测试第3条sql filter 1 emptyValue true +r($bi->processVarsTest($sqls[2], $filters[1], $emptyValue[1])) && p() && e("SELECT t1.name, t1.PM, t1.begin, t1.realBegan, t3.realname FROM zt_project AS t1 LEFT JOIN zt_team AS t2 ON t1.id = t2.root AND t2.type = 'execution' LEFT JOIN zt_user AS t3 ON t2.account = t3.account WHERE t1.name LIKE '%zentaopms%' AND t1.realBegan > '2022-01-01' order by t1.id"); // 测试第3条sql filter 1 emptyValue false +r($bi->processVarsTest($sqls[2], $filters[2], $emptyValue[0])) && p() && e("SELECT t1.name, t1.PM, t1.begin, t1.realBegan, t3.realname FROM zt_project AS t1 LEFT JOIN zt_team AS t2 ON t1.id = t2.root AND t2.type = 'execution' LEFT JOIN zt_user AS t3 ON t2.account = t3.account WHERE t1.name LIKE '%zentaopms%' AND t1.realBegan > '2022-01-01' order by t1.id"); // 测试第3条sql filter 2 emptyValue true +r($bi->processVarsTest($sqls[2], $filters[2], $emptyValue[1])) && p() && e("SELECT t1.name, t1.PM, t1.begin, t1.realBegan, t3.realname FROM zt_project AS t1 LEFT JOIN zt_team AS t2 ON t1.id = t2.root AND t2.type = 'execution' LEFT JOIN zt_user AS t3 ON t2.account = t3.account WHERE t1.name LIKE '%zentaopms%' AND t1.realBegan > '2022-01-01' order by t1.id"); // 测试第3条sql filter 2 emptyValue false From f9a652217732e3798ef4f4ae09219a11edac4920 Mon Sep 17 00:00:00 2001 From: liumengyi Date: Tue, 10 Jun 2025 10:09:44 +0800 Subject: [PATCH 6/7] + [unittest] add unittest for biModel::processVars. --- module/bi/test/model/processvars.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/module/bi/test/model/processvars.php b/module/bi/test/model/processvars.php index 3c582f1a6a..d43eb07c72 100755 --- a/module/bi/test/model/processvars.php +++ b/module/bi/test/model/processvars.php @@ -9,6 +9,22 @@ title=biModel->processVars(); timeout=0 cid=1 +- 测试第1条sql filter 0 emptyValue true @SELECT DISTINCT id,estimate FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate) + +- 测试第1条sql filter 0 emptyValue false @SELECT DISTINCT id,estimate FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate) + +- 测试第1条sql filter 1 emptyValue true @SELECT DISTINCT id,estimate FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate) + +- 测试第1条sql filter 1 emptyValue false @SELECT DISTINCT id,estimate FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate) + +- 测试第1条sql filter 2 emptyValue true @SELECT DISTINCT id,estimate FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate) + +- 测试第1条sql filter 2 emptyValue false @SELECT DISTINCT id,estimate FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate) + +- 测试第2条sql filter 0 emptyValue true @SELECT DISTINCT id,estimate hour FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate) + +- 测试第2条sql filter 0 emptyValue false @SELECT DISTINCT id,estimate hour FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate) + */ $bi = new biTest(); From b39c83fbac872d0d01b664e8cdca1800a7e75f53 Mon Sep 17 00:00:00 2001 From: liumengyi Date: Tue, 10 Jun 2025 10:09:49 +0800 Subject: [PATCH 7/7] + [unittest] add unittest for biModel::processVars. --- module/bi/test/model/processvars.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/module/bi/test/model/processvars.php b/module/bi/test/model/processvars.php index d43eb07c72..afe00b8637 100755 --- a/module/bi/test/model/processvars.php +++ b/module/bi/test/model/processvars.php @@ -25,6 +25,26 @@ cid=1 - 测试第2条sql filter 0 emptyValue false @SELECT DISTINCT id,estimate hour FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate) +- 测试第2条sql filter 1 emptyValue true @SELECT DISTINCT id,estimate hour FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate) + +- 测试第2条sql filter 1 emptyValue false @SELECT DISTINCT id,estimate hour FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate) + +- 测试第2条sql filter 2 emptyValue true @SELECT DISTINCT id,estimate hour FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate) + +- 测试第2条sql filter 2 emptyValue false @SELECT DISTINCT id,estimate hour FROM zt_story t1 WHERE 1 = ( SELECT COUNT(DISTINCT id,estimate) FROM zt_story t2 WHERE t2.estimate> t1.estimate) + +- 测试第3条sql filter 0 emptyValue true @SELECT t1.name, t1.PM, t1.begin, t1.realBegan, t3.realname FROM zt_project AS t1 LEFT JOIN zt_team AS t2 ON t1.id = t2.root AND t2.type = 'execution' LEFT JOIN zt_user AS t3 ON t2.account = t3.account WHERE t1.name LIKE '%zentaopms%' AND t1.realBegan > '2022-01-01' order by t1.id + +- 测试第3条sql filter 0 emptyValue false @SELECT t1.name, t1.PM, t1.begin, t1.realBegan, t3.realname FROM zt_project AS t1 LEFT JOIN zt_team AS t2 ON t1.id = t2.root AND t2.type = 'execution' LEFT JOIN zt_user AS t3 ON t2.account = t3.account WHERE t1.name LIKE '%zentaopms%' AND t1.realBegan > '2022-01-01' order by t1.id + +- 测试第3条sql filter 1 emptyValue true @SELECT t1.name, t1.PM, t1.begin, t1.realBegan, t3.realname FROM zt_project AS t1 LEFT JOIN zt_team AS t2 ON t1.id = t2.root AND t2.type = 'execution' LEFT JOIN zt_user AS t3 ON t2.account = t3.account WHERE t1.name LIKE '%zentaopms%' AND t1.realBegan > '2022-01-01' order by t1.id + +- 测试第3条sql filter 1 emptyValue false @SELECT t1.name, t1.PM, t1.begin, t1.realBegan, t3.realname FROM zt_project AS t1 LEFT JOIN zt_team AS t2 ON t1.id = t2.root AND t2.type = 'execution' LEFT JOIN zt_user AS t3 ON t2.account = t3.account WHERE t1.name LIKE '%zentaopms%' AND t1.realBegan > '2022-01-01' order by t1.id + +- 测试第3条sql filter 2 emptyValue true @SELECT t1.name, t1.PM, t1.begin, t1.realBegan, t3.realname FROM zt_project AS t1 LEFT JOIN zt_team AS t2 ON t1.id = t2.root AND t2.type = 'execution' LEFT JOIN zt_user AS t3 ON t2.account = t3.account WHERE t1.name LIKE '%zentaopms%' AND t1.realBegan > '2022-01-01' order by t1.id + +- 测试第3条sql filter 2 emptyValue false @SELECT t1.name, t1.PM, t1.begin, t1.realBegan, t3.realname FROM zt_project AS t1 LEFT JOIN zt_team AS t2 ON t1.id = t2.root AND t2.type = 'execution' LEFT JOIN zt_user AS t3 ON t2.account = t3.account WHERE t1.name LIKE '%zentaopms%' AND t1.realBegan > '2022-01-01' order by t1.id + */ $bi = new biTest();