From a8f7f314c4e79f0b62875b1e4c69910664d76718 Mon Sep 17 00:00:00 2001 From: sunguangming Date: Mon, 13 May 2024 13:14:17 +0800 Subject: [PATCH] * Change story view action url. --- module/common/model.php | 4 ++-- module/story/model.php | 9 ++++----- module/story/ui/view.html.php | 23 +++++++++++++++++++++++ module/story/zen.php | 2 +- 4 files changed, 30 insertions(+), 8 deletions(-) diff --git a/module/common/model.php b/module/common/model.php index 98db4152d9..bb6d36da9d 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -2406,7 +2406,7 @@ class commonModel extends model { if(!empty($actionData['url']) && is_array($actionData['url'])) { - $module = $actionData['url']['module']; + $module = $actionData['url']['module'] == 'story' ? $data->type : $actionData['url']['module']; $method = $actionData['url']['method']; $params = $actionData['url']['params']; if(!common::hasPriv($module, $method)) return false; @@ -2414,7 +2414,7 @@ class commonModel extends model } else if(!empty($actionData['data-url']) && is_array($actionData['data-url'])) { - $module = $actionData['data-url']['module']; + $module = $actionData['data-url']['module'] == 'story' ? $data->type : $actionData['data-url']['module']; $method = $actionData['data-url']['method']; $params = $actionData['data-url']['params']; if(!common::hasPriv($module, $method)) return false; diff --git a/module/story/model.php b/module/story/model.php index 04edcf9ae0..a967285d3d 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -75,13 +75,12 @@ class storyModel extends model } } - $extraStories = array(); - if($story->duplicateStory) $extraStories = array($story->duplicateStory); - if($story->linkStories) $extraStories = array_merge($extraStories, explode(',', $story->linkStories)); - - $extraStories = array_unique($extraStories); + $extraStories = $story->duplicateStory ? array($story->duplicateStory) : array(); if(!empty($extraStories)) $story->extraStories = $this->dao->select('id,title')->from(TABLE_STORY)->where('id')->in($extraStories)->fetchPairs(); + $story->hasOtherTypeChild = $this->dao->select('id')->from(TABLE_STORY)->where('parent')->eq($story->id)->andWhere('type')->ne($story->type)->andWhere('deleted')->eq('0')->fetch('id'); + $story->hasSameTypeChild = $this->dao->select('id')->from(TABLE_STORY)->where('parent')->eq($story->id)->andWhere('type')->eq($story->type)->andWhere('deleted')->eq('0')->fetch('id'); + $story->openedDate = helper::isZeroDate($story->openedDate) ? '' : substr($story->openedDate, 0, 19); $story->assignedDate = helper::isZeroDate($story->assignedDate) ? '' : substr($story->assignedDate, 0, 19); $story->reviewedDate = helper::isZeroDate($story->reviewedDate) ? '' : substr($story->reviewedDate, 0, 19); diff --git a/module/story/ui/view.html.php b/module/story/ui/view.html.php index 3324ab58c2..1a9aa38687 100644 --- a/module/story/ui/view.html.php +++ b/module/story/ui/view.html.php @@ -195,6 +195,29 @@ foreach($actions as $key => $action) continue; } + if(isset($action['icon']) && $action['icon'] == 'split') + { + $canBatchCreateStory = $story->grade < $maxGradeGroup[$story->type] && empty($story->hasOtherTypeChild); + $objectID = $app->tab == 'project' ? $projectID : $executionID; + if($canBatchCreateStory) + { + $action['url'] = createLink($story->type, 'batchCreate', "productID=$story->product&branch=$story->branch&moduleID=$story->module&storyID=$story->id&executionID=$objectID"); + } + elseif($story->type == 'epic' && common::hasPriv('requirement', 'batchCreate') && empty($story->hasSameTypeChild) && !($this->config->epic->gradeRule == 'stepwise' && $story->grade < $maxGradeGroup['epic'])) + { + $action['url'] = createLink('requirement', 'batchCreate', "productID=$story->product&branch=$story->branch&moduleID=$story->module&storyID=$story->id&executionID=$objectID"); + } + elseif($story->type == 'requirement' && common::hasPriv('story', 'batchCreate') && empty($story->hasSameTypeChild) && !($this->config->requirement->gradeRule == 'stepwise' && $story->grade < $maxGradeGroup['requirement'])) + { + $action['url'] = createLink('story', 'batchCreate', "productID=$story->product&branch=$story->branch&moduleID=$story->module&storyID=$story->id&executionID=$objectID"); + } + else + { + unset($actions[$key]); + continue; + } + } + if(isset($action['url'])) $actions[$key]['url'] = str_replace(array('{id}', '{type}', '{product}', '{branch}', '{module}', '{execution}'), array($story->id, $story->type, $story->product, $story->branch, $story->module, isset($projectID) ? $projectID : 0), $action['url']); if(isset($action['items'])) { diff --git a/module/story/zen.php b/module/story/zen.php index 9a76c9d85f..cc8977c9e5 100644 --- a/module/story/zen.php +++ b/module/story/zen.php @@ -1656,7 +1656,7 @@ class storyZen extends story */ protected function getAfterEditLocation(int $storyID, string $storyType) { - $module = 'story'; + $module = $storyType; $params = "storyID=$storyID&version=0¶m=0&storyType=$storyType"; $method = 'view'; if($this->app->tab == 'project')