From 968781ed0480691f23be025b2f30abd9da5f5faa Mon Sep 17 00:00:00 2001 From: wangyidong Date: Sat, 2 Dec 2023 13:44:05 +0800 Subject: [PATCH] * Rewrite setting model. --- module/setting/model.php | 19 +++-- module/setting/test/model/deleteitems.php | 57 +++++---------- module/setting/test/model/getitem.php | 87 +++++------------------ module/setting/test/model/getitems.php | 87 +++++------------------ module/setting/test/model/updateitem.php | 21 ++++++ module/setting/test/setting.class.php | 61 +++++++--------- 6 files changed, 104 insertions(+), 228 deletions(-) create mode 100644 module/setting/test/model/updateitem.php diff --git a/module/setting/model.php b/module/setting/model.php index 913f18b162..adcb7afd85 100644 --- a/module/setting/model.php +++ b/module/setting/model.php @@ -10,8 +10,6 @@ declare(strict_types=1); * @version $Id: model.php 4976 2013-07-02 08:15:31Z wyd621@gmail.com $ * @link http://www.zentao.net */ -?> -createDAO($this->parseItemParam($paramString), 'select')->fetch('value'); } @@ -36,7 +34,7 @@ class settingModel extends model * @access public * @return array */ - public function getItems(string $paramString) + public function getItems(string $paramString): array { return $this->createDAO($this->parseItemParam($paramString), 'select')->fetchAll('id'); } @@ -74,7 +72,7 @@ class settingModel extends model * @access public * @return bool */ - public function setItems(string $path, array|object $items) + public function setItems(string $path, array|object $items): bool { /* Determine vision of config item. */ $pathVision = explode('@', $path); @@ -108,9 +106,9 @@ class settingModel extends model * @param string $path * @param string|int $value * @access public - * @return void + * @return bool */ - public function updateItem(string $path, string|int $value = '') + public function updateItem(string $path, string|int $value = ''):bool { $item = $this->parseItemPath($path); if(empty($item)) return false; @@ -132,6 +130,7 @@ class settingModel extends model $item->value = $value; $this->dao->insert(TABLE_CONFIG)->data($item)->exec(); + return true; } /** @@ -142,7 +141,7 @@ class settingModel extends model * @access public * @return void */ - public function deleteItems(string $paramString) + public function deleteItems(string $paramString): void { $this->createDAO($this->parseItemParam($paramString), 'delete')->exec(); } @@ -219,7 +218,7 @@ class settingModel extends model * @access public * @return object */ - public function createDAO($params, $method = 'select'): object + public function createDAO(array $params, string $method = 'select'): object { $params['vision'] = isset($params['vision']) ? $params['vision'] : ''; $params['owner'] = isset($params['owner']) ? $params['owner'] : ''; diff --git a/module/setting/test/model/deleteitems.php b/module/setting/test/model/deleteitems.php index 10aa96b4bd..df750fba3b 100755 --- a/module/setting/test/model/deleteitems.php +++ b/module/setting/test/model/deleteitems.php @@ -4,57 +4,32 @@ include dirname(__FILE__, 5) . '/test/lib/init.php'; include dirname(__FILE__, 2) . '/setting.class.php'; su('admin'); -zdTable('config')->gen(7); +$config = zdTable('config'); +$config->vision->range('``,rnd,lite'); +$config->gen(20); /** title=测试 settingModel->deleteItems(); timeout=0 cid=1 - -- 删除键是version的common模块下的系统数据 @0 -- 删除键是hourPoint的common模块下的系统数据 @0 -- 删除键是mode的common模块下的系统数据 @0 -- 删除键是CRProduct的common模块下的系统数据 @0 -- 删除键是sn的common模块下的数据 @0 -- 删除键是CRExection的common模块下的数据 @0 -- 删除键是mode、附件条件是safe的数据 @0 -- 删除键是URSR的数据 @0 -- 删除模块是story的数据 @0 -- 删除附加条件是xuanxuan的数据 @0 -- 删除所有者是admin的数据 @0 -- 删除视图是rnd的数据 @0 -- 删除所有的数据 @0 +pid=1 */ $setting = new settingTest(); $params = array(); -$params[0] = "vision=rnd&owner=system&module=common§ion=global&key=version"; -$params[1] = "vision=rnd&owner=system&module=common&key=hourPoint"; -$params[2] = "owner=system&module=common§ion=global&key=mode"; -$params[3] = "owner=system&module=common&key=CRProduct"; -$params[4] = "module=common§ion=global&key=sn"; -$params[5] = "module=common&key=CRExection"; -$params[6] = "section=safe&key=mode"; -$params[7] = "key=URSR"; -$params[8] = "module=story"; -$params[9] = "section=xuanxuan"; -$params[10] = "owner=admin"; -$params[11] = "vision=rnd"; -$params[12] = ""; +$params[0] = "key=key2"; +$params[1] = "section=section3&key=key3"; +$params[2] = "module=story§ion=section4&key=key4"; +$params[3] = "owner=system&module=task§ion=section5&key=key5"; +$params[4] = "vision=lite&owner=user&module=bug§ion=section6&key=key6"; +$params[5] = "owner=system"; -r($setting->deleteItemsTest($params[0])) && p() && e('0'); // 删除键是version的common模块下的系统数据 -r($setting->deleteItemsTest($params[1])) && p() && e('0'); // 删除键是hourPoint的common模块下的系统数据 -r($setting->deleteItemsTest($params[2])) && p() && e('0'); // 删除键是mode的common模块下的系统数据 -r($setting->deleteItemsTest($params[3])) && p() && e('0'); // 删除键是CRProduct的common模块下的系统数据 -r($setting->deleteItemsTest($params[4])) && p() && e('0'); // 删除键是sn的common模块下的数据 -r($setting->deleteItemsTest($params[5])) && p() && e('0'); // 删除键是CRExection的common模块下的数据 -r($setting->deleteItemsTest($params[6])) && p() && e('0'); // 删除键是mode、附件条件是safe的数据 -r($setting->deleteItemsTest($params[7])) && p() && e('0'); // 删除键是URSR的数据 -r($setting->deleteItemsTest($params[8])) && p() && e('0'); // 删除模块是story的数据 -r($setting->deleteItemsTest($params[9])) && p() && e('0'); // 删除附加条件是xuanxuan的数据 -r($setting->deleteItemsTest($params[10])) && p() && e('0'); // 删除所有者是admin的数据 -r($setting->deleteItemsTest($params[11])) && p() && e('0'); // 删除视图是rnd的数据 -r($setting->deleteItemsTest($params[12])) && p() && e('0'); // 删除所有的数据 \ No newline at end of file +r($setting->deleteItemsTest($params[0])) && p() && e('19'); +r($setting->deleteItemsTest($params[1])) && p() && e('18'); +r($setting->deleteItemsTest($params[2])) && p() && e('17'); +r($setting->deleteItemsTest($params[3])) && p() && e('16'); +r($setting->deleteItemsTest($params[4])) && p() && e('15'); +r($setting->deleteItemsTest($params[5])) && p() && e('7'); diff --git a/module/setting/test/model/getitem.php b/module/setting/test/model/getitem.php index a21e1e273c..e5c8e0bc7c 100755 --- a/module/setting/test/model/getitem.php +++ b/module/setting/test/model/getitem.php @@ -4,7 +4,9 @@ include dirname(__FILE__, 5) . '/test/lib/init.php'; include dirname(__FILE__, 2) . '/setting.class.php'; su('admin'); -zdTable('config')->gen(7); +$config = zdTable('config'); +$config->vision->range('``,rnd,lite'); +$config->gen(20); /** @@ -12,79 +14,22 @@ title=测试 settingModel->getItem(); timeout=0 cid=1 -- 查询所有数据的第一条 @1 -- 查询所有者是系统的第一条数据 @1 -- 查询所有者是系统的第一条数据 @1 -- 查询所属模块是custom的第一条数据 @0 -- 查询附加条件是global的第一条数据 @1 -- 查询值是CRProduct的第一条数据 @1 -- 查询研发界面中所有者是系统的第一条数据 @1 -- 查询研发界面中所属模块是custom的第一条数据 @0 -- 查询研发界面中附加条件是global的第一条数据 @1 -- 查询研发界面中值是CRProduct的第一条数据 @1 -- 查询所有者是系统并且所属模块是custom的第一条数据 @0 -- 查询所有者是系统并且附加条件是global的第一条数据 @1 -- 查询所有者是系统并且值是CRProduct的第一条数据 @1 -- 查询所有者是系统并且所属模块是common、附加条件是global的第一条数据 @1 -- 查询所有者是系统并且所属模块是common、值是CRProduct的第一条数据 @1 -- 查询所有者是系统并且所属模块是common、附加条件是global、值是version的第一条数据 @1 -- 查询所有者是admin并且所属模块是common、值是URSR的第一条数据 @0 -- 查询所有者是admin并且所属模块是my、附加条件是block、值是initVersion的第一条数据 @0 -- 查询不存在的界面配置 @0 -- 查询不存在的所有者配置 @0 -- 查询不存在的模块配置 @0 -- 查询不存在的附加条件配置 @0 -- 查询不存在的值配置 @0 - */ -$setting = new settingTest(); +global $tester; +$settingModel = $tester->loadModel('setting'); $items = array(); $items[0] = ""; -$items[1] = "vision=rnd"; -$items[2] = "owner=system"; -$items[3] = "module=custom"; -$items[4] = "section=global"; -$items[5] = "key=CRProduct"; -$items[6] = "vision=rnd&owner=system"; -$items[7] = "vision=rnd&module=custom"; -$items[8] = "vision=rnd§ion=global"; -$items[9] = "vision=rnd&key=CRProduct"; -$items[10] = "owner=system&module=custom"; -$items[11] = "owner=system§ion=global"; -$items[12] = "owner=system&key=CRProduct"; -$items[13] = "owner=system&module=common§ion=global"; -$items[14] = "owner=system&module=common&key=CRExecution"; -$items[15] = "owner=system&module=common§ion=global&key=version"; -$items[16] = "owner=admin&module=common&key=URSR"; -$items[17] = "owner=admin&module=my§ion=block&key=initVersion"; -$items[18] = "vision=test"; -$items[19] = "owner=test"; -$items[20] = "module=test"; -$items[21] = "section=test"; -$items[22] = "key=test"; +$items[1] = "key=key2"; +$items[2] = "section=section3&key=key3"; +$items[3] = "module=story§ion=section4&key=key4"; +$items[4] = "owner=system&module=task§ion=section5&key=key5"; +$items[5] = "vision=lite&owner=user&module=bug§ion=section6&key=key6"; -r($setting->getItemTest($items[0])) && p() && e('1'); // 查询所有数据的第一条 -r($setting->getItemTest($items[1])) && p() && e('1'); // 查询所有者是系统的第一条数据 -r($setting->getItemTest($items[2])) && p() && e('1'); // 查询所有者是系统的第一条数据 -r($setting->getItemTest($items[3])) && p() && e('0'); // 查询所属模块是custom的第一条数据 -r($setting->getItemTest($items[4])) && p() && e('1'); // 查询附加条件是global的第一条数据 -r($setting->getItemTest($items[5])) && p() && e('1'); // 查询值是CRProduct的第一条数据 -r($setting->getItemTest($items[6])) && p() && e('1'); // 查询研发界面中所有者是系统的第一条数据 -r($setting->getItemTest($items[7])) && p() && e('0'); // 查询研发界面中所属模块是custom的第一条数据 -r($setting->getItemTest($items[8])) && p() && e('1'); // 查询研发界面中附加条件是global的第一条数据 -r($setting->getItemTest($items[9])) && p() && e('1'); // 查询研发界面中值是CRProduct的第一条数据 -r($setting->getItemTest($items[10])) && p() && e('0'); // 查询所有者是系统并且所属模块是custom的第一条数据 -r($setting->getItemTest($items[11])) && p() && e('1'); // 查询所有者是系统并且附加条件是global的第一条数据 -r($setting->getItemTest($items[12])) && p() && e('1'); // 查询所有者是系统并且值是CRProduct的第一条数据 -r($setting->getItemTest($items[13])) && p() && e('1'); // 查询所有者是系统并且所属模块是common、附加条件是global的第一条数据 -r($setting->getItemTest($items[14])) && p() && e('1'); // 查询所有者是系统并且所属模块是common、值是CRProduct的第一条数据 -r($setting->getItemTest($items[15])) && p() && e('1'); // 查询所有者是系统并且所属模块是common、附加条件是global、值是version的第一条数据 -r($setting->getItemTest($items[16])) && p() && e('0'); // 查询所有者是admin并且所属模块是common、值是URSR的第一条数据 -r($setting->getItemTest($items[17])) && p() && e('0'); // 查询所有者是admin并且所属模块是my、附加条件是block、值是initVersion的第一条数据 -r($setting->getItemTest($items[18])) && p() && e('0'); // 查询不存在的界面配置 -r($setting->getItemTest($items[19])) && p() && e('0'); // 查询不存在的所有者配置 -r($setting->getItemTest($items[20])) && p() && e('0'); // 查询不存在的模块配置 -r($setting->getItemTest($items[21])) && p() && e('0'); // 查询不存在的附加条件配置 -r($setting->getItemTest($items[22])) && p() && e('0'); // 查询不存在的值配置 \ No newline at end of file +r($settingModel->getItem($items[0])) && p() && e('value1'); // 查询所有数据的第一条 +r($settingModel->getItem($items[1])) && p() && e('value2'); // 查询只有key条件 +r($settingModel->getItem($items[2])) && p() && e('value3'); // 查询有key和section条件 +r($settingModel->getItem($items[3])) && p() && e('value4'); // 查询有key、section和module条件 +r($settingModel->getItem($items[4])) && p() && e('value5'); // 查询有key、section、module和owner条件 +r($settingModel->getItem($items[5])) && p() && e('value6'); // 查询有key、section、module、owner和vision条件 diff --git a/module/setting/test/model/getitems.php b/module/setting/test/model/getitems.php index 2b5425965d..fabb410467 100755 --- a/module/setting/test/model/getitems.php +++ b/module/setting/test/model/getitems.php @@ -4,7 +4,9 @@ include dirname(__FILE__, 5) . '/test/lib/init.php'; include dirname(__FILE__, 2) . '/setting.class.php'; su('admin'); -zdTable('config')->gen(7); +$config = zdTable('config'); +$config->vision->range('``,rnd,lite'); +$config->gen(20); /** @@ -12,79 +14,22 @@ title=测试 settingModel->getItems(); timeout=0 cid=1 -- 查询所有数据中的第一条数据第1条的value属性 @0 -- 查询所有者是系统的第一条数据第1条的value属性 @0 -- 查询所有者是系统的第一条数据第1条的value属性 @0 -- 查询所属模块是custom的第一条数据第1条的value属性 @0 -- 查询附加条件是global的第一条数据第7条的value属性 @f205720305272543052e3d689afdb5b8 -- 查询值是CRProduct的第一条数据第2条的value属性 @1 -- 查询研发界面中所有者是系统的第一条数据第3条的value属性 @1 -- 查询研发界面中所属模块是custom的第一条数据第1条的value属性 @0 -- 查询研发界面中附加条件是global的第一条数据第7条的value属性 @f205720305272543052e3d689afdb5b8 -- 查询研发界面中值是CRProduct的第一条数据第2条的value属性 @1 -- 查询所有者是系统并且所属模块是custom的第一条数据第1条的value属性 @0 -- 查询所有者是系统并且附加条件是global的第一条数据第3条的value属性 @1 -- 查询所有者是系统并且值是CRProduct的第一条数据第2条的value属性 @1 -- 查询所有者是系统并且所属模块是common、附加条件是global的第一条数据第6条的value属性 @10.0 -- 查询所有者是系统并且所属模块是common、值是CRProduct的第一条数据第3条的value属性 @1 -- 查询所有者是系统并且所属模块是common、附加条件是global、值是version的第一条数据第6条的value属性 @10.0 -- 查询所有者是admin并且所属模块是common、值是URSR的第一条数据第5条的value属性 @0 -- 查询所有者是admin并且所属模块是my、附加条件是block、值是initVersion的第一条数据第4条的value属性 @0 -- 查询不存在的界面配置 @0 -- 查询不存在的所有者配置 @0 -- 查询不存在的模块配置 @0 -- 查询不存在的附加条件配置 @0 -- 查询不存在的值配置 @0 - */ -$setting = new settingTest(); +global $tester; +$settingModel = $tester->loadModel('setting'); $items = array(); $items[0] = ""; -$items[1] = "vision=rnd"; -$items[2] = "owner=system"; -$items[3] = "module=custom"; -$items[4] = "section=global"; -$items[5] = "key=CRProduct"; -$items[6] = "vision=rnd&owner=system"; -$items[7] = "vision=rnd&module=custom"; -$items[8] = "vision=rnd§ion=global"; -$items[9] = "vision=rnd&key=CRProduct"; -$items[10] = "owner=system&module=custom"; -$items[11] = "owner=system§ion=global"; -$items[12] = "owner=system&key=CRProduct"; -$items[13] = "owner=system&module=common§ion=global"; -$items[14] = "owner=system&module=common&key=CRExecution"; -$items[15] = "owner=system&module=common§ion=global&key=version"; -$items[16] = "owner=admin&module=common&key=URSR"; -$items[17] = "owner=admin&module=my§ion=block&key=initVersion"; -$items[18] = "vision=test"; -$items[19] = "owner=test"; -$items[20] = "module=test"; -$items[21] = "section=test"; -$items[22] = "key=test"; +$items[1] = "key=key2"; +$items[2] = "section=section3"; +$items[3] = "module=story"; +$items[4] = "owner=system"; +$items[5] = "vision=lite"; -r($setting->getItemsTest($items[0])) && p('1:value') && e('0'); // 查询所有数据中的第一条数据 -r($setting->getItemsTest($items[1])) && p('1:value') && e('0'); // 查询所有者是系统的第一条数据 -r($setting->getItemsTest($items[2])) && p('1:value') && e('0'); // 查询所有者是系统的第一条数据 -r($setting->getItemsTest($items[3])) && p('1:value') && e('0'); // 查询所属模块是custom的第一条数据 -r($setting->getItemsTest($items[4])) && p('7:value') && e('f205720305272543052e3d689afdb5b8'); // 查询附加条件是global的第一条数据 -r($setting->getItemsTest($items[5])) && p('2:value') && e('1'); // 查询值是CRProduct的第一条数据 -r($setting->getItemsTest($items[6])) && p('3:value') && e('1'); // 查询研发界面中所有者是系统的第一条数据 -r($setting->getItemsTest($items[7])) && p('1:value') && e('0'); // 查询研发界面中所属模块是custom的第一条数据 -r($setting->getItemsTest($items[8])) && p('7:value') && e('f205720305272543052e3d689afdb5b8'); // 查询研发界面中附加条件是global的第一条数据 -r($setting->getItemsTest($items[9])) && p('2:value') && e('1'); // 查询研发界面中值是CRProduct的第一条数据 -r($setting->getItemsTest($items[10])) && p('1:value') && e('0'); // 查询所有者是系统并且所属模块是custom的第一条数据 -r($setting->getItemsTest($items[11])) && p('3:value') && e('1'); // 查询所有者是系统并且附加条件是global的第一条数据 -r($setting->getItemsTest($items[12])) && p('2:value') && e('1'); // 查询所有者是系统并且值是CRProduct的第一条数据 -r($setting->getItemsTest($items[13])) && p('6:value') && e('10.0'); // 查询所有者是系统并且所属模块是common、附加条件是global的第一条数据 -r($setting->getItemsTest($items[14])) && p('3:value') && e('1'); // 查询所有者是系统并且所属模块是common、值是CRProduct的第一条数据 -r($setting->getItemsTest($items[15])) && p('6:value') && e('10.0'); // 查询所有者是系统并且所属模块是common、附加条件是global、值是version的第一条数据 -r($setting->getItemsTest($items[16])) && p('5:value') && e('0'); // 查询所有者是admin并且所属模块是common、值是URSR的第一条数据 -r($setting->getItemsTest($items[17])) && p('4:value') && e('0'); // 查询所有者是admin并且所属模块是my、附加条件是block、值是initVersion的第一条数据 -r($setting->getItemsTest($items[18])) && p() && e('0'); // 查询不存在的界面配置 -r($setting->getItemsTest($items[19])) && p() && e('0'); // 查询不存在的所有者配置 -r($setting->getItemsTest($items[20])) && p() && e('0'); // 查询不存在的模块配置 -r($setting->getItemsTest($items[21])) && p() && e('0'); // 查询不存在的附加条件配置 -r($setting->getItemsTest($items[22])) && p() && e('0'); // 查询不存在的值配置 \ No newline at end of file +r(count($settingModel->getItems($items[0]))) && p() && e('20'); // 查询所有数据的记录数 +r($settingModel->getItems($items[1])) && p('2:value') && e('value2'); // 查询key条件的所有数据 +r($settingModel->getItems($items[2])) && p('3:value') && e('value3'); // 查询section条件的所有数据 +r(count($settingModel->getItems($items[3]))) && p() && e('7'); // 查询module条件的记录数 +r(count($settingModel->getItems($items[4]))) && p() && e('10'); // 查询owner条件的记录数 +r(count($settingModel->getItems($items[5]))) && p() && e('6'); // 查询vision条件的记录数 diff --git a/module/setting/test/model/updateitem.php b/module/setting/test/model/updateitem.php new file mode 100644 index 0000000000..e0aba9c753 --- /dev/null +++ b/module/setting/test/model/updateitem.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +gen(20); + +/** + +title=测试 settingModel->updateItem.php(); +cid=1 +pid=1 + +*/ + +$setting = new settingTest(); + +r($setting->updateItemTest('key2', 'value20')) && p() && e('0'); //测试更新错误数据 +r($setting->updateItemTest('system.story.section1.key1', 'value10')) && p('value') && e('value10'); //测试更新已存在数据 +r($setting->updateItemTest('system.story.section1.key100@rnd', 'value100')) && p('vision,key,value') && e('rnd,key100,value100'); //测试更新不存在数据 diff --git a/module/setting/test/setting.class.php b/module/setting/test/setting.class.php index bd3fb39806..88718ca30d 100644 --- a/module/setting/test/setting.class.php +++ b/module/setting/test/setting.class.php @@ -7,39 +7,6 @@ class settingTest $this->objectModel = $tester->loadModel('setting'); } - /** - * Get value of an item. - * - * @param string $paramString see parseItemParam(); - * @access public - * @return bool - */ - public function getItemTest($paramString) - { - $objects = $this->objectModel->getItem($paramString); - - if(dao::isError()) return dao::getError(); - - if($objects or $objects === 0 or $objects === '0') return true; - return false; - } - - /** - * Get some items. - * - * @param string $paramString see parseItemParam(); - * @access public - * @return array|string - */ - public function getItemsTest($paramString) - { - $objects = $this->objectModel->getItems($paramString); - - if(dao::isError()) return dao::getError(); - - return $objects; - } - /** * Set value of an item. * @@ -91,6 +58,31 @@ class settingTest return $result; } + /** + * Test updateItem method. + * + * @param string $path + * @param string $value + * @access public + * @return object + */ + public function updateItemTest($path, $value = '') + { + $this->objectModel->updateItem($path, $value); + + if(dao::isError()) return dao::getError(); + + /* Determine vision of config item. */ + $item = $this->objectModel->parseItemPath($path); + if(empty($item)) return false; + + $paramString = array(); + foreach($item as $key => $value) $paramString[] = "{$key}={$value}"; + + $objects = $this->objectModel->getItems(implode('&', $paramString)); + return array_pop($objects); + } + /** * Delete items. * @@ -104,8 +96,7 @@ class settingTest if(dao::isError()) return dao::getError(); - $object = $this->getItemTest($paramString); - return $object; + return $this->objectModel->dao->select('count(*) as count')->from(TABLE_CONFIG)->fetch('count'); } /**