* [bug#57432,start,4h] add renameFiles to rename default files and modify deleteFiles.

This commit is contained in:
liumengyi
2024-11-27 15:57:48 +08:00
committed by 田淑杰
parent c9a6127c8d
commit 804f1aaadb
10 changed files with 165 additions and 165 deletions
+2 -10
View File
@@ -22,6 +22,8 @@ class fileSelector extends wg
'gridHeight?: string|int', // 网格模式的高度。
'gridGap?: string|int', // 网格模式的间距。
'defaultFiles?: array[]', // 默认显示的文件列表。
'deleteName: string="deleteFiles"', // 默认显示文件中被删除的文件。
'renameName: string="renameFiles"', // 默认显示文件中被重命名的文件。
'multiple?: bool=true', // 是否允许在文件选择对话框中一次性选择多个文件(需要操作系统支持)。
'itemProps?: array|callback', // 文件项的属性。
'draggable?: bool=true', // 是否允许拖拽。
@@ -135,16 +137,6 @@ class fileSelector extends wg
}
$checkFiles = $checkFiles->do('return file');
$this->setProp('onAdd', $checkFiles);
$removeFile = jsCallback('file')
->do(<<<'JS'
if(file.url != undefined && file.file == undefined)
{
const $form = $(event.target).closest('form');
if($form.length > 0) $('<input />').attr('type', 'hidden').attr('name', 'deleteFiles[' + file.id + ']').attr('value', file.id).appendTo($form);
}
JS)->do('return file;');
$this->setProp('onRemove', $removeFile);
}
/**
+6 -36
View File
@@ -1842,41 +1842,6 @@ class bugZen extends bug
return !empty($file) ? $file : array();
}
/**
* 创建bug后存储上传的文件。
* Save files after create a bug.
*
* @param int $bugID
* @access private
* @return bool
*/
private function updateFileAfterCreate(int $bugID): bool
{
$this->loadModel('file');
if(!empty($_POST['fileList']))
{
$fileList = $this->post->fileList;
if($fileList) $fileList = json_decode($fileList, true);
if(!empty($_POST['deleteFiles']))
{
foreach($this->post->deleteFiles as $deletedCaseFileID) unset($fileList[$deletedCaseFileID]);
}
foreach($fileList as $file)
{
unset($file['id']);
$file['objectType'] = 'bug';
$file['objectID'] = $bugID;
$this->file->saveFile($file, 'url,deleted,realPath,webPath,name,url,extra');
}
}
$uid = $this->post->uid ? $this->post->uid : '';
$this->file->updateObjectID($uid, $bugID, 'bug');
$this->file->saveUpload('bug', $bugID);
return !dao::isError();
}
/**
* 创建bug后更新执行看板。
* Update execution kanban after create a bug.
@@ -1959,7 +1924,12 @@ class bugZen extends bug
/* Set module of bug to cookie. */
helper::setcookie('lastBugModule', (string)$bug->module);
$this->updateFileAfterCreate($bug->id);
if(!empty($_POST['fileList']))
{
$fileList = $this->post->fileList;
if($fileList) $fileList = json_decode($fileList, true);
$this->loadModel('file')->saveDefaultFiles($fileList, 'bug', $bug->id);
}
list($laneID, $columnID) = $this->getKanbanVariable($params);
$this->updateKanbanAfterCreate($bug, $laneID, $columnID, $from);
+47
View File
@@ -1304,4 +1304,51 @@ class fileModel extends model
if($this->config->file->storageType == 'fs') return $file->realPath;
return '';
}
/**
* 保存默认文件。
* Save default files.
*
* @param array $fileList
* @param string $objectType
* @param int|array $objectID
* @param string|int $extra
* @access public
*/
public function saveDefaultFiles(array $fileList, string $objectType, int|array $objectIdList, string|int $extra = '')
{
if(is_int($objectIdList)) $objectIdList = array($objectIdList);
if(!empty($fileList))
{
if(!empty($_POST['deleteFiles']))
{
foreach($this->post->deleteFiles as $deletedFileID) unset($fileList[$deletedFileID]);
}
if(!empty($_POST['renameFiles']))
{
foreach($this->post->renameFiles as $renamedFileID => $newName) $fileList[$renamedFileID]['title'] = $newName;
}
foreach($objectIdList as $objectID)
{
$fileIdList = '';
foreach($fileList as $file)
{
unset($file['id']);
$file['objectType'] = $objectType;
$file['objectID'] = $objectID;
$file['extra'] = $extra;
$fileIdList .= ',' . $this->fileTao->saveFile($file, 'url,deleted,realPath,webPath,name,url');
}
if($objectType == 'story') $this->dao->update(TABLE_STORYSPEC)->set("files = CONCAT(files, '{$fileIdList}')")->where('story')->eq($objectID)->exec();
}
}
foreach($objectIdList as $objectID)
{
$uid = $this->post->uid ? $this->post->uid : '';
$this->updateObjectID($uid, $objectID, $objectType);
$this->saveUpload($objectType, $objectID, $extra);
}
}
}
@@ -383,4 +383,30 @@ class fileTest
return array('old' => $oldObject, 'new' => $newObject, 'count' => $count);
}
/**
* 测试保存默认文件。
* Test save default files.
*
* @param array $fileIdList
* @param string $objectType
* @param int|array $objectID
* @param string|int $extra
* @access public
* @return array
*/
public function saveDefaultFilesTest(array $fileIdList, string $objectType, int|array $objectID, string|int $extra): array|string
{
$fileList = $this->objectModel->getByIdList($fileIdList);
$fileList = json_decode(json_encode($fileList), true);
$this->objectModel->saveDefaultFiles($fileList, $objectType, $objectID, $extra);
global $tester;
$objects = $tester->dao->select('id')->from(TABLE_FILE)->where('objectID')->in($objectID)->andWhere('objectType')->eq($objectType)->andWhere('extra')->eq($extra)->fetchPairs('id');
if(dao::isError()) return dao::getError();
if(!$objects) return '0';
return implode(',', $objects);
}
}
+67
View File
@@ -0,0 +1,67 @@
#!/usr/bin/env php
<?php
/**
title=测试 fileModel->updateObjectID();
cid=0
- 测试保存默认文件 1 到 需求 1001 extra 空 中 @6
- 测试保存默认文件 1 到 需求 1001 extra 1 中 @7
- 测试保存默认文件 1 到 需求 1001 1002 extra 空 中 @6,8,9
- 测试保存默认文件 1 到 需求 1001 1002 extra 1 中 @7,10,11
- 测试保存默认文件 1 到 任务 1001 extra 空 中 @12
- 测试保存默认文件 1 到 任务 1001 extra 1 中 @13
- 测试保存默认文件 1 到 任务 1001 1002 extra 空 中 @12,14,15
- 测试保存默认文件 1 到 任务 1001 1002 extra 1 中 @13,16,17
- 测试保存默认文件 1 2 到 需求 1001 extra 空 中 @6,8,18,19
- 测试保存默认文件 1 2 到 需求 1001 extra 1 中 @7,10,20,21
- 测试保存默认文件 1 2 到 需求 1001 1002 extra 空 中 @6,8,9,18,19,22,23,24,25
- 测试保存默认文件 1 2 到 需求 1001 1002 extra 1 中 @7,10,11,20,21,26,27,28,29-
- 测试保存默认文件 1 2 到 任务 1001 extra 空 中 @12,14,30,31
- 测试保存默认文件 1 2 到 任务 1001 extra 1 中 @13,16,32,33
- 测试保存默认文件 1 2 到 任务 1001 1002 extra 空 中 @12,14,15,30,31,34,35,36,37
- 测试保存默认文件 1 2 到 任务 1001 1002 extra 1 中 @13,16,17,32,33,38,39,40,41
*/
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/file.unittest.class.php';
su('admin');
zenData('file')->gen(5);
$uid = '98390890341';
$objectID = array(1001, array(1001, 1002));
$objectType = array('story', 'task');
$extra = array('', 1);
$fileIdList = array(array(1), array(1,2));
$file = new fileTest();
r($file->saveDefaultFilesTest($fileIdList[0], $objectType[0], $objectID[0], $extra[0])) && p() && e('6'); // 测试保存默认文件 1 到 需求 1001 extra 空 中
r($file->saveDefaultFilesTest($fileIdList[0], $objectType[0], $objectID[0], $extra[1])) && p() && e('7'); // 测试保存默认文件 1 到 需求 1001 extra 1 中
r($file->saveDefaultFilesTest($fileIdList[0], $objectType[0], $objectID[1], $extra[0])) && p() && e('6,8,9'); // 测试保存默认文件 1 到 需求 1001 1002 extra 空 中
r($file->saveDefaultFilesTest($fileIdList[0], $objectType[0], $objectID[1], $extra[1])) && p() && e('7,10,11'); // 测试保存默认文件 1 到 需求 1001 1002 extra 1 中
r($file->saveDefaultFilesTest($fileIdList[0], $objectType[1], $objectID[0], $extra[0])) && p() && e('12'); // 测试保存默认文件 1 到 任务 1001 extra 空 中
r($file->saveDefaultFilesTest($fileIdList[0], $objectType[1], $objectID[0], $extra[1])) && p() && e('13'); // 测试保存默认文件 1 到 任务 1001 extra 1 中
r($file->saveDefaultFilesTest($fileIdList[0], $objectType[1], $objectID[1], $extra[0])) && p() && e('12,14,15'); // 测试保存默认文件 1 到 任务 1001 1002 extra 空 中
r($file->saveDefaultFilesTest($fileIdList[0], $objectType[1], $objectID[1], $extra[1])) && p() && e('13,16,17'); // 测试保存默认文件 1 到 任务 1001 1002 extra 1 中
r($file->saveDefaultFilesTest($fileIdList[1], $objectType[0], $objectID[0], $extra[0])) && p() && e('6,8,18,19'); // 测试保存默认文件 1 2 到 需求 1001 extra 空 中
r($file->saveDefaultFilesTest($fileIdList[1], $objectType[0], $objectID[0], $extra[1])) && p() && e('7,10,20,21'); // 测试保存默认文件 1 2 到 需求 1001 extra 1 中
r($file->saveDefaultFilesTest($fileIdList[1], $objectType[0], $objectID[1], $extra[0])) && p() && e('6,8,9,18,19,22,23,24,25'); // 测试保存默认文件 1 2 到 需求 1001 1002 extra 空 中
r($file->saveDefaultFilesTest($fileIdList[1], $objectType[0], $objectID[1], $extra[1])) && p() && e('7,10,11,20,21,26,27,28,29 '); // 测试保存默认文件 1 2 到 需求 1001 1002 extra 1 中
r($file->saveDefaultFilesTest($fileIdList[1], $objectType[1], $objectID[0], $extra[0])) && p() && e('12,14,30,31'); // 测试保存默认文件 1 2 到 任务 1001 extra 空 中
r($file->saveDefaultFilesTest($fileIdList[1], $objectType[1], $objectID[0], $extra[1])) && p() && e('13,16,32,33'); // 测试保存默认文件 1 2 到 任务 1001 extra 1 中
r($file->saveDefaultFilesTest($fileIdList[1], $objectType[1], $objectID[1], $extra[0])) && p() && e('12,14,15,30,31,34,35,36,37'); // 测试保存默认文件 1 2 到 任务 1001 1002 extra 空 中
r($file->saveDefaultFilesTest($fileIdList[1], $objectType[1], $objectID[1], $extra[1])) && p() && e('13,16,17,32,33,38,39,40,41'); // 测试保存默认文件 1 2 到 任务 1001 1002 extra 1 中
+6 -1
View File
@@ -78,7 +78,12 @@ class story extends control
$storyID = $this->story->{$createFunction}($storyData, $objectID, $bugID, $extra, $todoID);
if(empty($storyID) || dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
$this->storyZen->updateFileAfterCreate($storyID, $storyType);
if(!empty($_POST['fileList']))
{
$fileList = $this->post->fileList;
if($fileList) $fileList = json_decode($fileList, true);
$this->loadModel('file')->saveDefaultFiles($fileList, 'story', $storyID, 1);
}
$productID = $this->post->product ? $this->post->product : $productID;
$message = $this->executeHooks($storyID);
-40
View File
@@ -2045,44 +2045,4 @@ class storyZen extends story
}
return $storyIdList;
}
/**
* 创建需求后存储上传的文件。
* Save files after create a story.
*
* @param int $storyID
* @param string $storyType
* @access public
* @return bool
*/
public function updateFileAfterCreate(int $storyID, string $storyType): bool
{
$this->loadModel('file');
if(!empty($_POST['fileList']))
{
$fileList = $this->post->fileList;
if($fileList) $fileList = json_decode($fileList, true);
if(!empty($_POST['deleteFiles']))
{
foreach($this->post->deleteFiles as $deletedCaseFileID) unset($fileList[$deletedCaseFileID]);
}
$fileIdList = '';
foreach($fileList as $file)
{
unset($file['id']);
$file['objectType'] = $storyType;
$file['objectID'] = $storyID;
$file['extra'] = 1;
$fileIdList .= ',' . $this->file->saveFile($file, 'url,deleted,realPath,webPath,name,url');
}
$this->dao->update(TABLE_STORYSPEC)->set("files = CONCAT(files, '{$fileIdList}')")->where('story')->eq($storyID)->exec();
}
$uid = $this->post->uid ? $this->post->uid : '';
$this->file->updateObjectID($uid, $storyID, $storyType);
$this->file->saveUpload($storyType, $storyID, 1);
return !dao::isError();
}
}
+7 -1
View File
@@ -106,7 +106,13 @@ class task extends control
$this->task->afterCreate($taskData, $taskIdList, $bugID, $todoID);
$this->task->updateKanbanData($taskData->execution, $taskIdList, (int)$this->post->lane, $columnID);
setCookie("lastTaskModule", (string)$this->post->module, $this->config->cookieLife, $this->config->webRoot, '', $this->config->cookieSecure, true);
$this->taskZen->updateFileAfterCreate($taskIdList);
if(!empty($_POST['fileList']))
{
$fileList = $this->post->fileList;
if($fileList) $fileList = json_decode($fileList, true);
$this->loadModel('file')->saveDefaultFiles($fileList, 'task', $taskIdList);
}
/* Get the information returned after a task is created. */
$response = $this->taskZen->responseAfterCreate($taskData, $execution, $this->post->after ? $this->post->after : '');
-42
View File
@@ -2048,46 +2048,4 @@ class taskZen extends task
return false;
}
/**
* 创建任务后存储上传的文件。
* Save files after create a task.
*
* @param int $taskID
* @access private
* @return bool
*/
public function updateFileAfterCreate(array $taskIdList): bool
{
$this->loadModel('file');
if(!empty($_POST['fileList']))
{
$fileList = $this->post->fileList;
if($fileList) $fileList = json_decode($fileList, true);
if(!empty($_POST['deleteFiles']))
{
foreach($this->post->deleteFiles as $deletedCaseFileID) unset($fileList[$deletedCaseFileID]);
}
foreach($taskIdList as $taskID)
{
foreach($fileList as $file)
{
unset($file['id']);
$file['objectType'] = 'task';
$file['objectID'] = $taskID;
$this->file->saveFile($file, 'url,deleted,realPath,webPath,name,url,extra');
}
}
}
foreach($taskIdList as $taskID)
{
$uid = $this->post->uid ? $this->post->uid : '';
$this->file->updateObjectID($uid, $taskID, 'task');
$this->file->saveUpload('task', $taskID);
}
return !dao::isError();
}
}
+4 -35
View File
@@ -2393,47 +2393,16 @@ class testcaseZen extends testcase
helper::setcookie('lastCaseScene', (string)$case->scene);
helper::setcookie('caseModule', '0');
/* 创建用例后存储上传的文件。*/
$this->updateFileAfterCreate($caseID);
/* 如果需求关联到项目,把用例也关联到项目。 */
/* If the story is linked project, make the case link the project. */
$this->testcase->syncCase2Project($case, $caseID);
}
/**
* 创建testcase后存储上传的文件。
* Save files after create a testcase.
*
* @param int $testcaseID
* @access private
* @return bool
*/
private function updateFileAfterCreate(int $testcaseID): bool
{
$this->loadModel('file');
if(!empty($_POST['fileList']))
{
$fileList = $this->post->fileList;
if($fileList) $fileList = json_decode($fileList, true);
if(!empty($_POST['deleteFiles']))
{
foreach($this->post->deleteFiles as $deletedCaseFileID) unset($fileList[$deletedCaseFileID]);
}
foreach($fileList as $file)
{
unset($file['id']);
$file['objectType'] = 'testcase';
$file['objectID'] = $testcaseID;
$this->file->saveFile($file, 'url,deleted,realPath,webPath,name,url,extra');
}
$this->loadModel('file')->saveDefaultFiles($fileList, 'testcase', $caseID);
}
$uid = $this->post->uid ? $this->post->uid : '';
$this->file->updateObjectID($uid, $testcaseID, 'testcase');
$this->file->saveUpload('testcase', $testcaseID);
return !dao::isError();
/* 如果需求关联到项目,把用例也关联到项目。 */
/* If the story is linked project, make the case link the project. */
$this->testcase->syncCase2Project($case, $caseID);
}
/**