* Modify story review and other about story.

This commit is contained in:
xieqiyu
2022-08-22 14:34:37 +08:00
parent 42a5ae7f3c
commit f47daae589
18 changed files with 84 additions and 51 deletions
+1 -1
View File
@@ -411,7 +411,7 @@ $lang->execution->unresolvedBug = "[%s] unresolved bugs. ";
$lang->execution->projectNotEmpty = 'Project cannot be empty.';
$lang->execution->confirmStoryToTask = $lang->SRCommon . '%s are converted to tasks in the current. Do you want to convert them anyways?';
$lang->execution->ge = "『%s』should be >= actual begin『%s』.";
$lang->execution->storyDragError = "The {$lang->SRCommon} is still a draft or has been changed, please drag it after the review";
$lang->execution->storyDragError = "The {$lang->SRCommon} is not active. Please activate and drag again.";
$lang->execution->countTip = ' (%s member)';
$lang->execution->pleaseInput = "Enter";
$lang->execution->week = 'week';
+1 -1
View File
@@ -411,7 +411,7 @@ $lang->execution->unresolvedBug = "[%s] unresolved bugs. ";
$lang->execution->projectNotEmpty = 'Project cannot be empty.';
$lang->execution->confirmStoryToTask = $lang->SRCommon . '%s are converted to tasks in the current. Do you want to convert them anyways?';
$lang->execution->ge = "『%s』should be >= actual begin『%s』.";
$lang->execution->storyDragError = "The {$lang->SRCommon} is still a draft or has been changed, please drag it after the review";
$lang->execution->storyDragError = "The {$lang->SRCommon} is not active. Please activate and drag again.";
$lang->execution->countTip = ' (%s member)';
$lang->execution->pleaseInput = "Enter";
$lang->execution->week = 'week';
+1 -1
View File
@@ -411,7 +411,7 @@ $lang->execution->unresolvedBug = "[%s] unresolved bugs. ";
$lang->execution->projectNotEmpty = 'Project cannot be empty.';
$lang->execution->confirmStoryToTask = $lang->SRCommon . '%s are converted to tasks in the current. Do you want to convert them anyways?';
$lang->execution->ge = "『%s』should be >= actual begin『%s』.";
$lang->execution->storyDragError = "The {$lang->SRCommon} is still a draft or has been changed, please drag it after the review";
$lang->execution->storyDragError = "The {$lang->SRCommon} is not active. Please activate and drag again.";
$lang->execution->countTip = ' (%s member)';
$lang->execution->pleaseInput = "Enter";
$lang->execution->week = 'week';
+1 -1
View File
@@ -411,7 +411,7 @@ $lang->execution->unresolvedBug = "[%s]个未解决的bug,";
$lang->execution->projectNotEmpty = '所属项目不能为空。';
$lang->execution->confirmStoryToTask = '%s' . $lang->SRCommon . '已经在当前' . $lang->execution->common . '中转了任务,请确认是否重复转任务。';
$lang->execution->ge = "『%s』应当不小于实际开始时间『%s』。";
$lang->execution->storyDragError = "该{$lang->SRCommon}还是草稿或已变更状态,请评审通过后再拖动";
$lang->execution->storyDragError = "该{$lang->SRCommon}不是激活状态,请激活后再拖动";
$lang->execution->countTip = '(%s人)';
$lang->execution->pleaseInput = "请输入";
$lang->execution->week = '周';
+10 -10
View File
@@ -141,14 +141,6 @@
<th class='c-bugs'><?php echo $lang->product->bugs?></th>
<td><strong><?php echo $product->bugs?></strong></td>
</tr>
<tr>
<th><?php echo $lang->story->statusList['changing'] . $space . $lang->story->common;?></th>
<td><strong><?php echo $product->stories['changing']?></strong></td>
<th><?php echo $lang->product->releases?></th>
<td><strong><?php echo $product->releases?></strong></td>
<th><?php echo $lang->product->cases?></th>
<td><strong><?php echo $product->cases?></strong></td>
</tr>
<tr>
<th><?php echo $lang->story->statusList['draft'] . $space . $lang->story->common;?></th>
<td><strong><?php echo $product->stories['draft']?></strong></td>
@@ -158,8 +150,16 @@
<td><strong><?php echo $product->docs?></strong></td>
</tr>
<tr>
<th><?php echo $lang->story->statusList['closed'] . $space . $lang->story->common;?></th>
<td><strong><?php echo $product->stories['closed']?></strong></td>
<th><?php echo $lang->story->statusList['changing'] . $space . $lang->story->common;?></th>
<td><strong><?php echo $product->stories['changing']?></strong></td>
<th><?php echo $lang->product->releases?></th>
<td><strong><?php echo $product->releases?></strong></td>
<th><?php echo $lang->product->cases?></th>
<td><strong><?php echo $product->cases?></strong></td>
</tr>
<tr>
<th><?php echo $lang->story->statusList['reviewing'] . $space . $lang->story->common;?></th>
<td><strong><?php echo $product->stories['reviewing']?></strong></td>
<?php if($config->systemMode == 'new'):?>
<th><?php echo $lang->product->projects?></th>
<td><strong><?php echo $product->projects?></strong></td>
+2
View File
@@ -26,6 +26,8 @@ global $app;
$app->loadLang('product');
$lang->projectstory->featureBar['story']['allstory'] = $lang->product->allStory;
$lang->projectstory->featureBar['story']['unclosed'] = $lang->product->unclosed;
$lang->projectstory->featureBar['story']['draft'] = $lang->product->draftStory;
$lang->projectstory->featureBar['story']['reviewing'] = $lang->product->reviewingStory;
$lang->projectstory->featureBar['story']['changing'] = $lang->product->changingStory;
$lang->projectstory->featureBar['story']['closed'] = $lang->product->closedStory;
$lang->projectstory->featureBar['story']['linkedExecution'] = 'Linked ' . $lang->execution->common;
+2
View File
@@ -26,6 +26,8 @@ global $app;
$app->loadLang('product');
$lang->projectstory->featureBar['story']['allstory'] = $lang->product->allStory;
$lang->projectstory->featureBar['story']['unclosed'] = $lang->product->unclosed;
$lang->projectstory->featureBar['story']['draft'] = $lang->product->draftStory;
$lang->projectstory->featureBar['story']['reviewing'] = $lang->product->reviewingStory;
$lang->projectstory->featureBar['story']['changing'] = $lang->product->changingStory;
$lang->projectstory->featureBar['story']['closed'] = $lang->product->closedStory;
$lang->projectstory->featureBar['story']['linkedExecution'] = 'Linked ' . $lang->execution->common;
+2
View File
@@ -26,6 +26,8 @@ global $app;
$app->loadLang('product');
$lang->projectstory->featureBar['story']['allstory'] = $lang->product->allStory;
$lang->projectstory->featureBar['story']['unclosed'] = $lang->product->unclosed;
$lang->projectstory->featureBar['story']['draft'] = $lang->product->draftStory;
$lang->projectstory->featureBar['story']['reviewing'] = $lang->product->reviewingStory;
$lang->projectstory->featureBar['story']['changing'] = $lang->product->changingStory;
$lang->projectstory->featureBar['story']['closed'] = $lang->product->closedStory;
$lang->projectstory->featureBar['story']['linkedExecution'] = 'Linked ' . $lang->execution->common;
+8 -4
View File
@@ -18,7 +18,11 @@ $lang->projectstory->batchUnlinkTip = 'Other requirements are removed. The follo
global $app;
$app->loadLang('product');
$lang->projectstory->featureBar['story']['allstory'] = $lang->product->allStory;
$lang->projectstory->featureBar['story']['unclosed'] = $lang->product->unclosed;
$lang->projectstory->featureBar['story']['changing'] = $lang->product->changingStory;
$lang->projectstory->featureBar['story']['closed'] = $lang->product->closedStory;
$lang->projectstory->featureBar['story']['allstory'] = $lang->product->allStory;
$lang->projectstory->featureBar['story']['unclosed'] = $lang->product->unclosed;
$lang->projectstory->featureBar['story']['draft'] = $lang->product->draftStory;
$lang->projectstory->featureBar['story']['reviewing'] = $lang->product->reviewingStory;
$lang->projectstory->featureBar['story']['changing'] = $lang->product->changingStory;
$lang->projectstory->featureBar['story']['closed'] = $lang->product->closedStory;
$lang->projectstory->featureBar['story']['linkedExecution'] = 'Linked ' . $lang->execution->common;
$lang->projectstory->featureBar['story']['unlinkedExecution'] = 'Unlinked ' . $lang->execution->common;
+2
View File
@@ -26,6 +26,8 @@ global $app;
$app->loadLang('product');
$lang->projectstory->featureBar['story']['allstory'] = $lang->product->allStory;
$lang->projectstory->featureBar['story']['unclosed'] = $lang->product->unclosed;
$lang->projectstory->featureBar['story']['draft'] = $lang->product->draftStory;
$lang->projectstory->featureBar['story']['reviewing'] = $lang->product->reviewingStory;
$lang->projectstory->featureBar['story']['changing'] = $lang->product->changingStory;
$lang->projectstory->featureBar['story']['closed'] = $lang->product->closedStory;
$lang->projectstory->featureBar['story']['linkedExecution'] = '已关联' . $lang->execution->common;
+9 -5
View File
@@ -48,6 +48,7 @@
<th class="c-date"><?php echo $lang->productplan->begin;?></th>
<th class="c-date"><?php echo $lang->productplan->end;?></th>
<th class="c-count"><?php echo $lang->story->statusList['draft'];?></th>
<th class="c-count"><?php echo $lang->story->statusList['reviewing'];?></th>
<th class="c-count"><?php echo $lang->story->statusList['active'];?></th>
<th class="c-count"><?php echo $lang->story->statusList['changing'];?></th>
<th class="c-count"><?php echo $lang->story->statusList['closed'];?></th>
@@ -71,16 +72,18 @@
<td class="<?php echo $class;?>"><?php echo $plan->begin == '2030-01-01' ? $lang->productplan->future : $plan->begin;?></td>
<td class="<?php echo $class;?>"><?php echo $plan->end == '2030-01-01' ? $lang->productplan->future : $plan->end;?></td>
<?php
$draftCount = isset($plan->status['draft']) ? $plan->status['draft'] : 0;
$activeCount = isset($plan->status['active']) ? $plan->status['active'] : 0;
$changedCount = isset($plan->status['changing']) ? $plan->status['changing'] : 0;
$closedCount = isset($plan->status['closed']) ? $plan->status['closed'] : 0;
$draftCount = isset($plan->status['draft']) ? $plan->status['draft'] : 0;
$reviewingCount = isset($plan->status['reviewing']) ? $plan->status['reviewing'] : 0;
$activeCount = isset($plan->status['active']) ? $plan->status['active'] : 0;
$changedCount = isset($plan->status['changing']) ? $plan->status['changing'] : 0;
$closedCount = isset($plan->status['closed']) ? $plan->status['closed'] : 0;
?>
<td class="<?php echo $class;?>"><?php echo $draftCount;?></td>
<td class="<?php echo $class;?>"><?php echo $reviewingCount;?></td>
<td class="<?php echo $class;?>"><?php echo $activeCount;?></td>
<td class="<?php echo $class;?>"><?php echo $changedCount;?></td>
<td class="<?php echo $class;?>"><?php echo $closedCount;?></td>
<td class="<?php echo $class;?>"><?php echo $draftCount + $activeCount + $changedCount + $closedCount;?></td>
<td class="<?php echo $class;?>"><?php echo $draftCount + $reviewingCount + $activeCount + $changedCount + $closedCount;?></td>
<?php if($id != 1) echo "</tr>"?>
<?php $id ++;?>
<?php $color = !$color;?>
@@ -95,6 +98,7 @@
<td class="<?php echo $class;?>">0</td>
<td class="<?php echo $class;?>">0</td>
<td class="<?php echo $class;?>">0</td>
<td class="<?php echo $class;?>">0</td>
<?php $color = !$color;?>
<?php endif;?>
</tr>
+4 -4
View File
@@ -1202,7 +1202,7 @@ class story extends control
/* Assign. */
$this->view->title = $this->lang->story->activate . "STORY" . $this->lang->colon . $this->view->story->title;
$this->view->users = $this->user->getPairs('pofirst|nodeleted', $this->view->story->closedBy);
$this->view->users = $this->user->getPairs('pofirst|nodeleted|noclosed', $this->view->story->closedBy);
$this->view->position[] = $this->lang->story->activate;
$this->display();
}
@@ -1510,7 +1510,7 @@ class story extends control
if($confirm == 'no')
{
$confirmTips = $story->status == 'changing' ? $this->lang->story->confirmRecallChange : $this->lang->story->confirmRecallReview;
return print(js::confirm($confirmTips, $this->createLink('story', 'recall', "storyID=$storyID&from=lite&confirm=yes")));
return print(js::confirm($confirmTips, $this->createLink('story', 'recall', "storyID=$storyID&from=$from&confirm=yes")));
}
else
{
@@ -1520,10 +1520,10 @@ class story extends control
$action = $story->status == 'changing' ? 'recalledChange' : 'Recalled';
$this->loadModel('action')->create('story', $storyID, $action);
if($from == 'view') return print(js::locate($this->createLink('story', 'view', "storyID={$storyID}&from=view")));
if($from == 'view') return print(js::locate($this->createLink('story', 'view', "storyID=$storyID"), 'parent'));
$locateLink = $this->session->storyList ? $this->session->storyList : $this->createLink('product', 'browse', "productID={$story->product}");
echo js::locate($locateLink, 'parent');
return print(js::locate($locateLink, 'parent'));
}
}
+4 -2
View File
@@ -462,8 +462,10 @@ $lang->story->subDivideTip['planned'] = 'The Story has been planned and cannot
$lang->story->subDivideTip['projected'] = 'The Story has been initiated and cannot be subdivided.';
$lang->story->subDivideTip['notActive'] = 'The Story is not active and cannot be subdivided.';
$lang->story->featureBar['browse']['all'] = $lang->all;
$lang->story->featureBar['browse']['unclosed'] = $lang->story->unclosed;
$lang->story->featureBar['browse']['all'] = $lang->all;
$lang->story->featureBar['browse']['unclosed'] = $lang->story->unclosed;
$lang->story->featureBar['browse']['draft'] = $lang->story->statusList['draft'];
$lang->story->featureBar['browse']['reviewing'] = $lang->story->statusList['reviewing'];
$lang->story->recallList = array();
$lang->story->recallList['recallReview'] = $lang->story->recall;
+4 -2
View File
@@ -462,8 +462,10 @@ $lang->story->subDivideTip['planned'] = 'The Story has been planned and cannot
$lang->story->subDivideTip['projected'] = 'The Story has been initiated and cannot be subdivided.';
$lang->story->subDivideTip['notActive'] = 'The Story is not active and cannot be subdivided.';
$lang->story->featureBar['browse']['all'] = $lang->all;
$lang->story->featureBar['browse']['unclosed'] = $lang->story->unclosed;
$lang->story->featureBar['browse']['all'] = $lang->all;
$lang->story->featureBar['browse']['unclosed'] = $lang->story->unclosed;
$lang->story->featureBar['browse']['draft'] = $lang->story->statusList['draft'];
$lang->story->featureBar['browse']['reviewing'] = $lang->story->statusList['reviewing'];
$lang->story->recallList = array();
$lang->story->recallList['recallReview'] = $lang->story->recall;
+4 -2
View File
@@ -462,8 +462,10 @@ $lang->story->subDivideTip['planned'] = 'Cette Story est planifiée et ne peut
$lang->story->subDivideTip['projected'] = 'Cette Story a été créée et ne peut être subdivisée.';
$lang->story->subDivideTip['notActive'] = "Cette Story n'est pas active et ne peut être subdivisée.";
$lang->story->featureBar['browse']['all'] = $lang->all;
$lang->story->featureBar['browse']['unclosed'] = $lang->story->unclosed;
$lang->story->featureBar['browse']['all'] = $lang->all;
$lang->story->featureBar['browse']['unclosed'] = $lang->story->unclosed;
$lang->story->featureBar['browse']['draft'] = $lang->story->statusList['draft'];
$lang->story->featureBar['browse']['reviewing'] = $lang->story->statusList['reviewing'];
$lang->story->recallList = array();
$lang->story->recallList['recallReview'] = $lang->story->recall;
+4 -2
View File
@@ -454,8 +454,10 @@ $lang->story->subDivideTip['planned'] = 'The Story has been planned and cannot
$lang->story->subDivideTip['projected'] = 'The Story has been initiated and cannot be subdivided.';
$lang->story->subDivideTip['notActive'] = 'The Story is not active and cannot be subdivided.';
$lang->story->featureBar['browse']['all'] = $lang->all;
$lang->story->featureBar['browse']['unclosed'] = $lang->story->unclosed;
$lang->story->featureBar['browse']['all'] = $lang->all;
$lang->story->featureBar['browse']['unclosed'] = $lang->story->unclosed;
$lang->story->featureBar['browse']['draft'] = $lang->story->statusList['draft'];
$lang->story->featureBar['browse']['reviewing'] = $lang->story->statusList['reviewing'];
$lang->story->recallList = array();
$lang->story->recallList['recallReview'] = $lang->story->recall;
+4 -2
View File
@@ -462,8 +462,10 @@ $lang->story->subDivideTip['planned'] = '该需求已计划,无法进行细
$lang->story->subDivideTip['projected'] = '该需求已立项,无法进行细分操作';
$lang->story->subDivideTip['notActive'] = '需求不是激活状态,无法进行细分操作';
$lang->story->featureBar['browse']['all'] = $lang->all;
$lang->story->featureBar['browse']['unclosed'] = $lang->story->unclosed;
$lang->story->featureBar['browse']['all'] = $lang->all;
$lang->story->featureBar['browse']['unclosed'] = $lang->story->unclosed;
$lang->story->featureBar['browse']['draft'] = $lang->story->statusList['draft'];
$lang->story->featureBar['browse']['reviewing'] = $lang->story->statusList['reviewing'];
$lang->story->recallList = array();
$lang->story->recallList['recallReview'] = $lang->story->recall;
+21 -14
View File
@@ -709,6 +709,7 @@ class storyModel extends model
->remove('files,labels,reviewer,comment,needNotReview,uid')
->get();
$story = $this->loadModel('file')->processImgURL($story, $this->config->story->editor->change['id'], $this->post->uid);
$this->dao->update(TABLE_STORY)->data($story, 'spec,verify')
->autoCheck()
@@ -757,12 +758,15 @@ class storyModel extends model
$reviewData->reviewer = $reviewer;
$this->dao->insert(TABLE_STORYREVIEW)->data($reviewData)->exec();
}
if($reviewerHasChanged)
{
$oldStory->reviewers = implode(',', array_keys($oldStoryReviewers));
$story->reviewers = implode(',', $_POST['reviewer']);
}
}
$this->file->updateObjectID($this->post->uid, $storyID, 'story');
$oldStory->reviewers = implode(',', array_keys($oldStoryReviewers));
$story->reviewers = implode(',', $_POST['reviewer']);
return common::createChanges($oldStory, $story);
}
}
@@ -1438,6 +1442,8 @@ class storyModel extends model
->add('id', $storyID)
->remove('result,comment')
->get();
$story->reviewedBy = implode(',', array_unique(explode(',', $story->reviewedBy)));
$story = $this->loadModel('file')->processImgURL($story, $this->config->story->editor->review['id'], $this->post->uid);
/* Fix bug #671. */
@@ -3051,15 +3057,6 @@ class storyModel extends model
if(empty($normalProducts) and empty($branchProducts)) $storyQuery .= '1 = 1';
$storyQuery .= ') ';
if($this->app->moduleName == 'release' or $this->app->moduleName == 'build')
{
$storyQuery .= " AND `status` NOT IN ('draft', 'reviewing')"; // Fix bug #990.
}
else
{
$storyQuery .= " AND `status` NOT IN ('draft', 'reviewing', 'closed')";
}
if($this->app->rawModule == 'build' and $this->app->rawMethod == 'linkstory') $storyQuery .= " AND `parent` != '-1'";
}
elseif(strpos($storyQuery, $allBranch) !== false)
@@ -3072,6 +3069,15 @@ class storyModel extends model
}
$storyQuery = preg_replace("/`plan` +LIKE +'%([0-9]+)%'/i", "CONCAT(',', `plan`, ',') LIKE '%,$1,%'", $storyQuery);
if($this->app->moduleName == 'release' or $this->app->moduleName == 'build')
{
$storyQuery .= " AND `status` NOT IN ('draft', 'reviewing')"; // Fix bug #990.
}
else
{
$storyQuery .= " AND `status` NOT IN ('draft', 'reviewing', 'closed')";
}
return $this->getBySQL($queryProductID, $storyQuery, $orderBy, $pager, $type);
}
@@ -3225,7 +3231,7 @@ class storyModel extends model
->beginIF($execution->type == 'project')
->beginIF(!empty($productID))->andWhere('t1.product')->eq($productID)
->beginIF($type == 'bybranch' and $branchParam !== '')->andWhere('t2.branch')->in("0,$branchParam")->fi()
->beginIF(strpos('changing|closed', $type) !== false)->andWhere('t2.status')->eq($type)->fi()
->beginIF(strpos('draft|reviewing|changing|closed', $type) !== false)->andWhere('t2.status')->eq($type)->fi()
->beginIF($type == 'unclosed')->andWhere('t2.status')->in(array_keys($unclosedStatus))->fi()
->beginIF($type == 'linkedexecution')->andWhere('t2.id')->in($storyIdList)->fi()
->beginIF($type == 'unlinkedexecution')->andWhere('t2.id')->notIn($storyIdList)->fi()
@@ -4129,7 +4135,7 @@ class storyModel extends model
if($action == 'assignto') return $story->status != 'closed';
if($action == 'createcase') return $story->type != 'requirement';
if($action == 'batchcreate' and $story->parent > 0) return false;
if($action == 'batchcreate' and $story->type == 'requirement' and $story->status != 'closed') return $story->status != 'draft';
if($action == 'batchcreate' and $story->type == 'requirement' and $story->status != 'closed') return strpos('draft,reviewing,changing', $story->status) === false;
if($action == 'batchcreate' and $config->vision == 'lite' and ($story->status == 'active' and ($story->stage == 'wait' or $story->stage == 'projected'))) return true;
if($action == 'batchcreate' and ($story->status != 'active' or $story->stage != 'wait' or !empty($story->plan))) return false;
@@ -4237,6 +4243,7 @@ class storyModel extends model
if($type == 'view')
{
$menu .= $this->buildMenu('story', 'change', $params, $story, $type, 'alter', '', 'showinonlybody');
if($story->status == 'draft') $menu .= $this->buildMenu('story', 'submitReview', $params, $story, $type, 'sub-review', '', 'showinonlybody iframe', true, "data-width='50%'");
$title = $story->status == 'changing' ? $this->lang->story->recallChange : $this->lang->story->recall;
$menu .= $this->buildMenu('story', 'recall', $params . '&from=view', $story, $type, 'undo', 'hiddenwin', 'showinonlybody', false, '', $title);