From b98b9e5046f65ebd496e7c92b2d76e22dc5d184c Mon Sep 17 00:00:00 2001 From: tianshujie Date: Mon, 19 Jun 2023 18:46:04 +0800 Subject: [PATCH] * Refactor create test subtasks. --- module/task/config/form.php | 1 + module/task/css/create.ui.css | 2 + module/task/js/create.ui.js | 27 +++++++ module/task/model.php | 2 +- module/task/ui/create.html.php | 143 +++++++++++++++++++++++++++++++++ 5 files changed, 174 insertions(+), 1 deletion(-) diff --git a/module/task/config/form.php b/module/task/config/form.php index 7187853ea9..1db040b0a8 100644 --- a/module/task/config/form.php +++ b/module/task/config/form.php @@ -174,6 +174,7 @@ $config->task->form->close['lastEditedBy'] = array('type' => 'string', 'requ $config->task->form->close['lastEditedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->task->form->testTask->create = array(); +$config->task->form->testTask->create['selectTestStory'] = array('type' => 'int', 'required' => false, 'default' => 0); $config->task->form->testTask->create['testStory'] = array('type' => 'array', 'required' => false, 'default' => array()); $config->task->form->testTask->create['testEstStarted'] = array('type' => 'array', 'required' => false, 'default' => array()); $config->task->form->testTask->create['testDeadline'] = array('type' => 'array', 'required' => false, 'default' => array()); diff --git a/module/task/css/create.ui.css b/module/task/css/create.ui.css index ab848ed438..4ccc595031 100644 --- a/module/task/css/create.ui.css +++ b/module/task/css/create.ui.css @@ -3,3 +3,5 @@ #taskCreateForm .empty-story-tip input {padding: 0;} #taskCreateForm .empty-story-tip .input-control-suffix {padding-right: 0;} #taskCreateForm .empty-story-tip .input-control-suffix .btn:hover:before {background: none;} +#taskCreateForm .selectStoryLabel {top: 50%;} +#testStoryBox th.required:before {content: '*'; color: rgba(var(--color-danger-500-rgb),var(--tw-text-opacity)); margin-right: 0.25rem; position: relative; top: 0.125rem;} diff --git a/module/task/js/create.ui.js b/module/task/js/create.ui.js index 16c2c6a362..1d3007759e 100644 --- a/module/task/js/create.ui.js +++ b/module/task/js/create.ui.js @@ -345,3 +345,30 @@ function setAfter() $('input[value="toStoryList"]').removeAttr('disabled'); } } + +/** + * Add a row. + * + * @param object $obj + * @access public + * @return void + */ +window.addItem = function(obj) +{ + let $tr = $(obj).closest('tr'); + $tr.after($tr.clone()); +} + + +/** + * Remove a row. + * + * @param object $obj + * @access public + * @return void + */ +window.removeItem = function(obj) +{ + if($('#testStoryBox').find('tbody tr').length == 1) return false; + $(obj).closest('tr').remove(); +} diff --git a/module/task/model.php b/module/task/model.php index 8ab6d2f2fa..079b244e7e 100755 --- a/module/task/model.php +++ b/module/task/model.php @@ -1331,7 +1331,7 @@ class taskModel extends model $task = $this->loadModel('file')->replaceImgURL($task, 'desc'); $task->files = $this->file->getByObject('task', $taskID); - if($setImgSize) $task->desc = $this->file->setImgSize($task->desc); + if($setImgSize && $task->desc) $task->desc = $this->file->setImgSize($task->desc); if($task->assignedTo == 'closed') $task->assignedToRealName = 'Closed'; diff --git a/module/task/ui/create.html.php b/module/task/ui/create.html.php index da969a1131..e5e5a0b5b9 100644 --- a/module/task/ui/create.html.php +++ b/module/task/ui/create.html.php @@ -122,6 +122,147 @@ $storyPreviewBtn = span ), ); +$taskTR = array(); +$i = 0; +foreach($testStories as $storyID => $storyTitle) +{ + $taskTR[] = h::tr + ( + h::td + ( + select + ( + set::id("testStory{$i}"), + set::name("testStory[$i]"), + set::value($storyID), + set::items(array($storyID => $storyTitle)), + ), + ), + h::td + ( + select + ( + set::id("testPri{$i}"), + set::name("testPri[$i]"), + set::value($task->pri), + set::items($lang->task->priList), + ), + ), + h::td + ( + input + ( + set::id("testEstStarted{$i}"), + set::name("testEstStarted[$i]"), + set::type('date'), + set::value($task->estStarted), + ), + ), + h::td + ( + input + ( + set::id("testDeadline{$i}"), + set::name("testDeadline[$i]"), + set::type('date'), + set::value($task->deadline), + ), + ), + h::td + ( + select + ( + set::id("testAssignedTo{$i}"), + set::name("testAssignedTo[$i]"), + set::value($task->assignedTo), + set::items($members), + ), + ), + h::td + ( + input + ( + set::id("testEstimate{$i}"), + set::name("testEstimate[$i]"), + ), + ), + h::td + ( + set::class('center'), + btnGroup + ( + set::items(array( + array('icon' => 'plus', 'onclick' => 'addItem(this)'), + array('icon' => 'close', 'onclick' => 'removeItem(this)'), + )) + ) + ) + ); +} + +$selectStoryRow = ''; +if($execution->lifetime != 'ops' and !in_array($execution->attribute, array('request', 'review'))) +{ + $selectStoryRow = formRow( + set::id('testStoryBox'), + setClass('hidden'), + formGroup + ( + set::label($lang->task->selectTestStory), + set::labelClass('selectStoryLabel'), + h::table + ( + set::class('w-full'), + h::thead + ( + h::tr + ( + h::th($lang->task->storyAB), + h::th + ( + $lang->task->pri, + set::width('70px'), + setClass(isset($requiredFields['pri']) ? 'required' : '') + ), + h::th + ( + $lang->task->estStarted, + set::width('140px'), + setClass(isset($requiredFields['estStarted']) ? 'required' : '') + ), + h::th + ( + $lang->task->deadline, + set::width('140px'), + setClass(isset($requiredFields['deadline']) ? 'required' : '') + ), + h::th + ( + $lang->task->assignedTo, + set::width('100px') + ), + h::th + ( + $lang->task->estimate, + set::width('70px'), + setClass(isset($requiredFields['estimate']) ? 'required' : '') + ), + h::th + ( + $lang->actions, + set::width('70px') + ), + ) + ), + h::tbody + ( + $taskTR + ) + ), + ) + ); +} + $afterCreateRow = ''; /* Ct redirect within pop-ups. */ if(!isonlybody()) @@ -179,6 +320,7 @@ formPanel checkbox( set::id('selectTestStory'), set::name('selectTestStory'), + set::value(1), set::text($lang->task->selectTestStory), set::rootClass('ml-4'), on::change('toggleSelectTestStory'), @@ -270,6 +412,7 @@ formPanel ), ), ), + $selectStoryRow, formRow ( formGroup