From 0d800981ef587451b69066063abb78e300e70947 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 13 Aug 2025 08:53:33 +0800 Subject: [PATCH 1/6] * [perf story #77161] Adjust projectModel getWorkHour unit test. --- module/doc/tao.php | 2 +- module/personnel/model.php | 4 ++-- module/project/test/model/getworkhour.php | 22 +++++++++++++++++++--- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/module/doc/tao.php b/module/doc/tao.php index aa997f92ca..5b55ea093a 100644 --- a/module/doc/tao.php +++ b/module/doc/tao.php @@ -272,7 +272,7 @@ class docTao extends docModel * @access protected * @return void */ - public function doUpdateDoc(int $docID, object $doc, $basicInfoChanged = false) + public function doUpdateDoc(int $docID, object $doc, bool $basicInfoChanged = false) { $this->dao->update(TABLE_DOC)->data($doc)->autoCheck()->where('id')->eq($docID)->exec(); diff --git a/module/personnel/model.php b/module/personnel/model.php index d3057d32bb..f7ae7e95b9 100644 --- a/module/personnel/model.php +++ b/module/personnel/model.php @@ -684,7 +684,7 @@ class personnelModel extends model $this->dao->update(TABLE_PRODUCT)->set('whitelist')->eq($newWhitelist)->where('id')->eq($productID)->exec(); $viewProducts = $this->dao->select('products')->from(TABLE_USERVIEW)->where('account')->eq($account)->fetch('products'); - $newViewProducts = trim(str_replace(",{$productID},", '', ",{$viewProducts},"), ','); + $newViewProducts = trim(str_replace(",{$productID},", ',', ",{$viewProducts},"), ','); $this->dao->update(TABLE_USERVIEW)->set('products')->eq($newViewProducts)->where('account')->eq($account)->exec(); } @@ -771,7 +771,7 @@ class personnelModel extends model $this->dao->update(TABLE_PROJECT)->set('whitelist')->eq($newWhitelist)->where('id')->eq($projectID)->exec(); $viewProjects = $this->dao->select('projects')->from(TABLE_USERVIEW)->where('account')->eq($account)->fetch('projects'); - $newViewProjects = trim(str_replace(",{$projectID},", '', ",{$viewProjects},"), ','); + $newViewProjects = trim(str_replace(",{$projectID},", ',', ",{$viewProjects},"), ','); $this->dao->update(TABLE_USERVIEW)->set('projects')->eq($newViewProjects)->where('account')->eq($account)->exec(); } } diff --git a/module/project/test/model/getworkhour.php b/module/project/test/model/getworkhour.php index d026014ca1..e5d3d1cac4 100755 --- a/module/project/test/model/getworkhour.php +++ b/module/project/test/model/getworkhour.php @@ -13,6 +13,22 @@ title=测试 projectModel::getWorkhour; timeout=0 cid=1 +- 获取不存在项目工时信息 + - 属性totalHours @0 + - 属性totalEstimate @0 + - 属性totalConsumed @0 + - 属性totalLeft @0 +- 获取项目ID为11的总预计工时 + - 属性totalHours @112.5 + - 属性totalEstimate @61 + - 属性totalConsumed @18 + - 属性totalLeft @61 +- 获取项目ID为60的总消耗工时 + - 属性totalHours @225 + - 属性totalEstimate @35 + - 属性totalConsumed @11 + - 属性totalLeft @35 + */ $projectIdList = array(1, 11, 60); @@ -20,6 +36,6 @@ $projectIdList = array(1, 11, 60); global $tester; $tester->loadModel('project'); -r($tester->project->getWorkHour($projectIdList[0])) && p('totalHours') && e('0'); // 获取不存在项目工时信息 -r($tester->project->getWorkHour($projectIdList[1])) && p('totalEstimate') && e('61'); // 获取项目ID为11的总预计工时 -r($tester->project->getWorkHour($projectIdList[2])) && p('totalConsumed') && e('11'); // 获取项目ID为60的总消耗工时 +r($tester->project->getWorkHour($projectIdList[0])) && p('totalHours,totalEstimate,totalConsumed,totalLeft') && e('0,0,0,0'); // 获取不存在项目工时信息 +r($tester->project->getWorkHour($projectIdList[1])) && p('totalHours,totalEstimate,totalConsumed,totalLeft') && e('112.5,61,18,61'); // 获取项目ID为11的总预计工时 +r($tester->project->getWorkHour($projectIdList[2])) && p('totalHours,totalEstimate,totalConsumed,totalLeft') && e('225,35,11,35'); // 获取项目ID为60的总消耗工时 From f84406f9ec2d785565091625ee621e9cbffb1a31 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 13 Aug 2025 08:56:48 +0800 Subject: [PATCH 2/6] * [perf story #77161] Adjust personnelModel deleteProductWhitelist unit test. --- .../test/model/deleteproductwhitelist.php | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/module/personnel/test/model/deleteproductwhitelist.php b/module/personnel/test/model/deleteproductwhitelist.php index 7d7594715a..083f0ff1cf 100755 --- a/module/personnel/test/model/deleteproductwhitelist.php +++ b/module/personnel/test/model/deleteproductwhitelist.php @@ -13,7 +13,19 @@ zenData('user')->gen(20); title=测试 personnelModel->deleteProductWhitelist(); cid=1 -pid=1 + +- 把 test6 从 产品 8 的白名单内删除 test6不在产品8的白名单内,所以不会删 @,6 +- 把 test6 从 产品 6 的白名单内删除 @,6 +- 把 test6 从 产品 2 的白名单内删除 产品2不是同步过来的,所以不会删 @,6 +- 把 test6 从 产品 111 的白名单内删除 产品111不存在,所以不会删 @,6 +- 把 test33 从 产品 6 的白名单内删除 test33不在产品6的白名单内,所以不会删 @,33 +- 把 test33 从 产品 8 的白名单内删除 @,33 +- 把 test33 从 产品 2 的白名单内删除 产品2不是同步过来的,所以不会删 @,33 +- 把 test33 从 产品 111 的白名单内删除 产品111不存在,所以不会删 @,33 +- 把 user6 从 产品 6 的白名单内删除 user6在 userview 中不存在,所以不会删 @0 +- 把 user6 从 产品 8 的白名单内删除 user6在 userview 中不存在,所以不会删 @0 +- 把 user6 从 产品 2 的白名单内删除 user6在 userview 中不存在,所以不会删 @0 +- 把 user6 从 产品 111 的白名单内删除 user6在 userview 中不存在,所以不会删 @0 */ From 2171251241507316450d5851d39a9bb8e2cbf159 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 13 Aug 2025 09:33:05 +0800 Subject: [PATCH 3/6] * [perf story #77162] Add project suspend unit test step. --- module/project/test/model/suspend.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/module/project/test/model/suspend.php b/module/project/test/model/suspend.php index b8e5a73572..b828071688 100755 --- a/module/project/test/model/suspend.php +++ b/module/project/test/model/suspend.php @@ -21,6 +21,15 @@ title=测试 projectModel::suspend(); timeout=0 cid=1 +- 暂停 projectID=2 后,检查$changes[0] + - 属性field @status + - 属性new @suspended +- 暂停 projectID=2 后,检查$changes[1] + - 属性field @suspendedDate + - 属性new @2023-05-03 +- 暂停 projectID=4第0条的new属性 @suspended +- 执行已经暂停的项目 @0 + */ global $tester; @@ -35,5 +44,8 @@ $project->lastEditedBy = 'admin'; $project->lastEditedDate = '2023-04-27'; $project->suspendedDate = '2023-05-03'; -r($tester->project->suspend(2, $project)) && p('0:new') && e('suspended'); -r($tester->project->suspend(4, $project)) && p('0:new') && e('suspended'); +$changes = $tester->project->suspend(2, $project); +r($changes[0]) && p('field,new') && e('status,suspended'); // 暂停 projectID=2 后,检查$changes[0] +r($changes[1]) && p('field,new') && e('suspendedDate,2023-05-03'); // 暂停 projectID=2 后,检查$changes[1] +r($tester->project->suspend(4, $project)) && p('0:new') && e('suspended'); // 暂停 projectID=4 +r($tester->project->suspend(4, $project)) && p() && e('0'); // 执行已经暂停的项目 From 2f3151f1659f56ceed66bbd30185dfe5844d671e Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 13 Aug 2025 10:59:09 +0800 Subject: [PATCH 4/6] * [refac bug #64675] Fix for preview office file. --- lib/zin/wg/docapp/js/v1.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/zin/wg/docapp/js/v1.js b/lib/zin/wg/docapp/js/v1.js index 46c039861c..f4dedb10ec 100644 --- a/lib/zin/wg/docapp/js/v1.js +++ b/lib/zin/wg/docapp/js/v1.js @@ -1220,8 +1220,7 @@ const actionsMap = const lang = getLang(); const canEdit = !isReadonly && privs.edit && (!doc.privs || doc.privs.edit !== false) && privs.editFile; const canDelete = !isReadonly && privs.edit && (!doc.privs || doc.privs.edit !== false) && privs.deleteFile; - const hasExtension = file.title.lastIndexOf('.' + file.extension) == (file.title.length - file.extension.length - 1); - const canPreview = hasExtension && canPreviewExtensions.split('|').includes(file.extension); + const canPreview = canPreviewExtensions.split('|').includes(file.extension); return [ canPreview ? {'data-toggle': 'modal', 'data-size': 'lg', url: $.createLink('file', 'download', `fileID=${file.id}&mouse=left`), hint: lang.filePreview, icon: 'eye'} : null, {target: '_blank', url: zui.formatString(docApp.props.fileUrl, file), hint: lang.fileDownload, icon: 'download'}, From 9ca876d026d81d4ef87806bd1e71814c329c0fdb Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 13 Aug 2025 11:11:37 +0800 Subject: [PATCH 5/6] * [refac bug #64675] Adjust code for preview office file. --- lib/zin/wg/docapp/js/v1.js | 19 +++++++++++++++++-- lib/zin/wg/docapp/v1.php | 4 ---- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/lib/zin/wg/docapp/js/v1.js b/lib/zin/wg/docapp/js/v1.js index f4dedb10ec..4b7f8d86e5 100644 --- a/lib/zin/wg/docapp/js/v1.js +++ b/lib/zin/wg/docapp/js/v1.js @@ -1220,9 +1220,24 @@ const actionsMap = const lang = getLang(); const canEdit = !isReadonly && privs.edit && (!doc.privs || doc.privs.edit !== false) && privs.editFile; const canDelete = !isReadonly && privs.edit && (!doc.privs || doc.privs.edit !== false) && privs.deleteFile; - const canPreview = canPreviewExtensions.split('|').includes(file.extension); + + let previewAction = null; + let isOfficeFile = 'doc|docx|xls|xlsx|ppt|pptx|pdf'.includes(file.extension); + let canPreview = ('txt|jpg|jpeg|gif|png|bmp|mp4'.includes(file.extension)); + if(libreOfficeTurnon && isOfficeFile) canPreview = true; + if(canPreview) + { + previewAction = {url: $.createLink('file', 'download', `fileID=${file.id}&mouse=left`), hint: lang.filePreview, icon: 'eye', target: '_blank'}; + if(!isOfficeFile) + { + previewAction['data-toggle'] = 'modal'; + previewAction['data-size'] = 'lg'; + delete previewAction.target; + } + } + return [ - canPreview ? {'data-toggle': 'modal', 'data-size': 'lg', url: $.createLink('file', 'download', `fileID=${file.id}&mouse=left`), hint: lang.filePreview, icon: 'eye'} : null, + previewAction, {target: '_blank', url: zui.formatString(docApp.props.fileUrl, file), hint: lang.fileDownload, icon: 'download'}, canEdit ? {hint: lang.fileRename, icon: 'pencil-alt', onClick: renameDocFile.bind(this, file, doc)} : null, canDelete ? {hint: lang.fileDelete, icon: 'trash', onClick: deleteDocFile.bind(this, file, doc)} : null, diff --git a/lib/zin/wg/docapp/v1.php b/lib/zin/wg/docapp/v1.php index 62193fc982..a5a6a5fb3b 100644 --- a/lib/zin/wg/docapp/v1.php +++ b/lib/zin/wg/docapp/v1.php @@ -320,10 +320,6 @@ class docApp extends wg $historyPanelProps = array('fileListProps' => $fileListProps); $canPreviewOffice = $canDownload && isset($config->file->libreOfficeTurnon) and $config->file->libreOfficeTurnon == 1; - $canPreviewExtensions = 'txt|jpg|jpeg|gif|png|bmp|mp4'; - if($canPreviewOffice) $canPreviewExtensions .= '|doc|docx|xls|xlsx|ppt|pptx|pdf'; - jsVar('canPreviewExtensions', $canPreviewExtensions); - // 不可用场景:文档模板、API 文档、开源版 $diffEnabled = ($config->edition != 'open') && !($rawModule == 'doc' && $rawMethod == 'view') From afa4736d4da507b3c7506477378bac05eba8ff9e Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 13 Aug 2025 11:12:17 +0800 Subject: [PATCH 6/6] * [refac bug #64675] Adjust code for preview office file. --- lib/zin/wg/docapp/js/v1.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/zin/wg/docapp/js/v1.js b/lib/zin/wg/docapp/js/v1.js index 4b7f8d86e5..963234a6b1 100644 --- a/lib/zin/wg/docapp/js/v1.js +++ b/lib/zin/wg/docapp/js/v1.js @@ -1223,7 +1223,7 @@ const actionsMap = let previewAction = null; let isOfficeFile = 'doc|docx|xls|xlsx|ppt|pptx|pdf'.includes(file.extension); - let canPreview = ('txt|jpg|jpeg|gif|png|bmp|mp4'.includes(file.extension)); + let canPreview = 'txt|jpg|jpeg|gif|png|bmp|mp4'.includes(file.extension); if(libreOfficeTurnon && isOfficeFile) canPreview = true; if(canPreview) {