* Finish task #41241.

This commit is contained in:
hufangzhou
2021-08-12 15:56:07 +08:00
parent bc368ec761
commit 4d0fd03c5e
16 changed files with 137 additions and 86 deletions
+1
View File
@@ -310,6 +310,7 @@ $lang->action->dynamicAction->story['opened'] = 'Create Story';
$lang->action->dynamicAction->story['edited'] = 'Edit Story';
$lang->action->dynamicAction->story['activated'] = 'Activate Story';
$lang->action->dynamicAction->story['reviewed'] = 'Review Story';
$lang->action->dynamicAction->story['recalled'] = 'Revoke';
$lang->action->dynamicAction->story['closed'] = 'Close Story';
$lang->action->dynamicAction->story['assigned'] = 'Assign Story';
$lang->action->dynamicAction->story['changed'] = 'Change Story';
+1
View File
@@ -316,6 +316,7 @@ $lang->action->dynamicAction->story['opened'] = 'Create Story';
$lang->action->dynamicAction->story['edited'] = 'Edit Story';
$lang->action->dynamicAction->story['activated'] = 'Activate Story';
$lang->action->dynamicAction->story['reviewed'] = 'Review Story';
$lang->action->dynamicAction->story['recalled'] = 'Revoke';
$lang->action->dynamicAction->story['closed'] = 'Close Story';
$lang->action->dynamicAction->story['assigned'] = 'Assign Story';
$lang->action->dynamicAction->story['changed'] = 'Change Story';
+1
View File
@@ -310,6 +310,7 @@ $lang->action->dynamicAction->story['opened'] = 'Créer Story';
$lang->action->dynamicAction->story['edited'] = 'Editer Story';
$lang->action->dynamicAction->story['activated'] = 'Activer Story';
$lang->action->dynamicAction->story['reviewed'] = 'Consulter Story';
$lang->action->dynamicAction->story['recalled'] = 'Revoke';
$lang->action->dynamicAction->story['closed'] = 'Fermer Story';
$lang->action->dynamicAction->story['assigned'] = 'Assigner Story';
$lang->action->dynamicAction->story['changed'] = 'Changer Story';
+1
View File
@@ -310,6 +310,7 @@ $lang->action->dynamicAction->story['opened'] = 'Tạo câu chuy
$lang->action->dynamicAction->story['edited'] = 'Sửa câu chuyện';
$lang->action->dynamicAction->story['activated'] = 'Kích hoạt câu chuyện';
$lang->action->dynamicAction->story['reviewed'] = 'Duyệt câu chuyện';
$lang->action->dynamicAction->story['recalled'] = 'Revoke';
$lang->action->dynamicAction->story['closed'] = 'Đóng câu chuyện';
$lang->action->dynamicAction->story['assigned'] = 'Bàn giao câu chuyện';
$lang->action->dynamicAction->story['changed'] = 'Thay đổi câu chuyện';
+1
View File
@@ -316,6 +316,7 @@ $lang->action->dynamicAction->story['opened'] = "创建{$lang->SR
$lang->action->dynamicAction->story['edited'] = "编辑{$lang->SRCommon}";
$lang->action->dynamicAction->story['activated'] = "激活{$lang->SRCommon}";
$lang->action->dynamicAction->story['reviewed'] = "评审{$lang->SRCommon}";
$lang->action->dynamicAction->story['recalled'] = "撤销评审";
$lang->action->dynamicAction->story['closed'] = "关闭{$lang->SRCommon}";
$lang->action->dynamicAction->story['assigned'] = "指派{$lang->SRCommon}";
$lang->action->dynamicAction->story['changed'] = "变更{$lang->SRCommon}";
+1
View File
@@ -316,6 +316,7 @@ $lang->action->dynamicAction->story['opened'] = "創建{$lang->SR
$lang->action->dynamicAction->story['edited'] = "編輯{$lang->SRCommon}";
$lang->action->dynamicAction->story['activated'] = "激活{$lang->SRCommon}";
$lang->action->dynamicAction->story['reviewed'] = "評審{$lang->SRCommon}";
$lang->action->dynamicAction->story['recalled'] = '撤銷評審';
$lang->action->dynamicAction->story['closed'] = "關閉{$lang->SRCommon}";
$lang->action->dynamicAction->story['assigned'] = "指派{$lang->SRCommon}";
$lang->action->dynamicAction->story['changed'] = "變更{$lang->SRCommon}";
+40 -38
View File
@@ -424,26 +424,27 @@ $lang->branch->methodOrder[10] = 'delete';
/* Story. */
$lang->resource->story = new stdclass();
$lang->resource->story->create = 'create';
$lang->resource->story->batchCreate = 'batchCreate';
$lang->resource->story->edit = 'editAction';
$lang->resource->story->linkStory = 'linkStory';
$lang->resource->story->batchEdit = 'batchEdit';
$lang->resource->story->export = 'exportAction';
$lang->resource->story->delete = 'deleteAction';
$lang->resource->story->view = 'view';
$lang->resource->story->change = 'changeAction';
$lang->resource->story->review = 'reviewAction';
$lang->resource->story->batchReview = 'batchReview';
$lang->resource->story->assignTo = 'assignAction';
$lang->resource->story->close = 'closeAction';
$lang->resource->story->batchClose = 'batchClose';
$lang->resource->story->activate = 'activateAction';
$lang->resource->story->tasks = 'tasks';
$lang->resource->story->bugs = 'bugs';
$lang->resource->story->cases = 'cases';
$lang->resource->story->zeroCase = 'zeroCase';
$lang->resource->story->report = 'reportAction';
$lang->resource->story->create = 'create';
$lang->resource->story->batchCreate = 'batchCreate';
$lang->resource->story->edit = 'editAction';
$lang->resource->story->linkStory = 'linkStory';
$lang->resource->story->batchEdit = 'batchEdit';
$lang->resource->story->export = 'exportAction';
$lang->resource->story->delete = 'deleteAction';
$lang->resource->story->view = 'view';
$lang->resource->story->change = 'changeAction';
$lang->resource->story->review = 'reviewAction';
$lang->resource->story->batchReview = 'batchReview';
$lang->resource->story->recall = 'recall';
$lang->resource->story->assignTo = 'assignAction';
$lang->resource->story->close = 'closeAction';
$lang->resource->story->batchClose = 'batchClose';
$lang->resource->story->activate = 'activateAction';
$lang->resource->story->tasks = 'tasks';
$lang->resource->story->bugs = 'bugs';
$lang->resource->story->cases = 'cases';
$lang->resource->story->zeroCase = 'zeroCase';
$lang->resource->story->report = 'reportAction';
$lang->resource->story->batchChangePlan = 'batchChangePlan';
$lang->resource->story->batchChangeBranch = 'batchChangeBranch';
$lang->resource->story->batchChangeStage = 'batchChangeStage';
@@ -462,24 +463,25 @@ $lang->story->methodOrder[30] = 'view';
$lang->story->methodOrder[35] = 'change';
$lang->story->methodOrder[40] = 'review';
$lang->story->methodOrder[45] = 'batchReview';
$lang->story->methodOrder[50] = 'close';
$lang->story->methodOrder[55] = 'batchClose';
$lang->story->methodOrder[60] = 'batchChangePlan';
$lang->story->methodOrder[65] = 'batchChangeStage';
$lang->story->methodOrder[70] = 'assignTo';
$lang->story->methodOrder[75] = 'batchAssignTo';
$lang->story->methodOrder[80] = 'activate';
$lang->story->methodOrder[85] = 'tasks';
$lang->story->methodOrder[90] = 'bugs';
$lang->story->methodOrder[95] = 'cases';
$lang->story->methodOrder[100] = 'zeroCase';
$lang->story->methodOrder[105] = 'report';
$lang->story->methodOrder[110] = 'linkStory';
$lang->story->methodOrder[115] = 'batchChangeBranch';
$lang->story->methodOrder[120] = 'batchChangeModule';
$lang->story->methodOrder[125] = 'batchToTask';
$lang->story->methodOrder[130] = 'track';
$lang->story->methodOrder[135] = 'processStoryChange';
$lang->story->methodOrder[50] = 'recall';
$lang->story->methodOrder[55] = 'close';
$lang->story->methodOrder[60] = 'batchClose';
$lang->story->methodOrder[65] = 'batchChangePlan';
$lang->story->methodOrder[70] = 'batchChangeStage';
$lang->story->methodOrder[75] = 'assignTo';
$lang->story->methodOrder[80] = 'batchAssignTo';
$lang->story->methodOrder[85] = 'activate';
$lang->story->methodOrder[90] = 'tasks';
$lang->story->methodOrder[95] = 'bugs';
$lang->story->methodOrder[100] = 'cases';
$lang->story->methodOrder[105] = 'zeroCase';
$lang->story->methodOrder[110] = 'report';
$lang->story->methodOrder[115] = 'linkStory';
$lang->story->methodOrder[120] = 'batchChangeBranch';
$lang->story->methodOrder[125] = 'batchChangeModule';
$lang->story->methodOrder[130] = 'batchToTask';
$lang->story->methodOrder[135] = 'track';
$lang->story->methodOrder[140] = 'processStoryChange';
/* Product plan. */
$lang->resource->productplan = new stdclass();
+1 -1
View File
@@ -199,5 +199,5 @@ $config->story->datatable->fieldList['caseCount']['name'] = $lang->story->ca
$config->story->datatable->fieldList['actions']['title'] = 'actions';
$config->story->datatable->fieldList['actions']['fixed'] = 'right';
$config->story->datatable->fieldList['actions']['width'] = $app->rawModule == 'projectstory' ? '200' : '180';
$config->story->datatable->fieldList['actions']['width'] = '200';
$config->story->datatable->fieldList['actions']['required'] = 'yes';
+15
View File
@@ -1103,6 +1103,21 @@ class story extends control
die(js::reload('parent'));
}
/**
* Recall the story review.
*
* @param int $storyID
* @access public
* @return void
*/
public function recall($storyID)
{
$this->story->recall($storyID);
$this->loadModel('action')->create('story', $storyID, 'Recalled');
die(js::reload('parent.parent'));
}
/**
* Close a story.
*
+2
View File
@@ -27,6 +27,7 @@ $lang->story->changed = 'Geändert';
$lang->story->assignTo = 'Assign';
$lang->story->assignAction = 'Assign Story';
$lang->story->review = 'Prüfen';
$lang->story->recall = 'Revoke';
$lang->story->reviewAction = 'Review Story';
$lang->story->needReview = 'Need Review';
$lang->story->batchReview = 'Mehere prüfen';
@@ -286,6 +287,7 @@ $lang->story->action->reviewed = array('main' => '$date, geprüft v
$lang->story->action->passreviewed = array('main' => '$date, determined by the <strong>System</strong>. The result is <strong>Pass</strong>.');
$lang->story->action->clarifyreviewed = array('main' => '$date, determined by the <strong>System</strong>. The result is <strong>Review Failed</strong>. Please re-initiate the review after changing.');
$lang->story->action->rejectreviewed = array('main' => '$date, geprüft von <strong>$actor</strong>. Das Ergebnis ist <strong>$extra</strong>, Der Grund ist <strong>$reason</strong>.', 'extra' => 'reviewResultList', 'reason' => 'reasonList');
$lang->story->action->recalled = array('main' => '$date, recalled by <strong>$actor</strong>.');
$lang->story->action->closed = array('main' => '$date, geschlossen von <strong>$actor</strong>. Der Grund ist <strong>$extra</strong> $appendLink.', 'extra' => 'reasonList');
$lang->story->action->reviewclosed = array('main' => '$date, closed by <strong>System</strong>. The reasion is <strong>Review Failed</strong>.');
$lang->story->action->linked2plan = array('main' => '$date, verknüpft von <strong>$actor</strong> mit Plan <strong>$extra</strong>');
+49 -47
View File
@@ -20,53 +20,54 @@ $lang->story->createStory = 'Create ' . $lang->story->story;
$lang->story->createRequirement = 'Create ' . $lang->story->requirement;
$lang->story->affectedStories = "Affected {$lang->story->story}";
$lang->story->batchCreate = "Batch Create";
$lang->story->change = "Change";
$lang->story->changed = 'Change';
$lang->story->assignTo = 'Assign';
$lang->story->review = 'Review';
$lang->story->needReview = 'Need Review';
$lang->story->batchReview = 'Batch Review';
$lang->story->edit = "Edit Story";
$lang->story->batchEdit = "Batch Edit";
$lang->story->subdivide = 'Decompose';
$lang->story->link = 'Link';
$lang->story->unlink = 'Unlink';
$lang->story->track = 'Track';
$lang->story->trackAB = 'Track';
$lang->story->processStoryChange= 'Process Story Change';
$lang->story->splitRequirent = 'Decompose';
$lang->story->close = 'Close';
$lang->story->batchClose = 'Batch Close';
$lang->story->activate = 'Activate';
$lang->story->delete = "Delete";
$lang->story->view = "Story Detail";
$lang->story->setting = "Settings";
$lang->story->tasks = "Linked Tasks";
$lang->story->bugs = "Linked Bugs";
$lang->story->cases = "Linked Cases";
$lang->story->taskCount = 'Tasks';
$lang->story->bugCount = 'Bugs';
$lang->story->caseCount = 'Cases';
$lang->story->taskCountAB = 'T';
$lang->story->bugCountAB = 'B';
$lang->story->caseCountAB = 'C';
$lang->story->linkStory = 'Link Story';
$lang->story->unlinkStory = 'UnLinked';
$lang->story->export = "Export Data";
$lang->story->zeroCase = "Stories without cases";
$lang->story->zeroTask = "Only list stories without tasks";
$lang->story->reportChart = "Report";
$lang->story->copyTitle = "Copy Title";
$lang->story->batchChangePlan = "Batch Change Plans";
$lang->story->batchChangeBranch = "Batch Change Branches";
$lang->story->batchChangeStage = "Batch Change Phases";
$lang->story->batchAssignTo = "Batch Assign";
$lang->story->batchChangeModule = "Batch Change Modules";
$lang->story->viewAll = "See All";
$lang->story->toTask = 'Convert to Task';
$lang->story->batchToTask = 'Batch Convert to Task';
$lang->story->convertRelations = 'Convert Relations';
$lang->story->batchCreate = "Batch Create";
$lang->story->change = "Change";
$lang->story->changed = 'Change';
$lang->story->assignTo = 'Assign';
$lang->story->review = 'Review';
$lang->story->recall = 'Revoke';
$lang->story->needReview = 'Need Review';
$lang->story->batchReview = 'Batch Review';
$lang->story->edit = "Edit Story";
$lang->story->batchEdit = "Batch Edit";
$lang->story->subdivide = 'Decompose';
$lang->story->link = 'Link';
$lang->story->unlink = 'Unlink';
$lang->story->track = 'Track';
$lang->story->trackAB = 'Track';
$lang->story->processStoryChange = 'Process Story Change';
$lang->story->splitRequirent = 'Decompose';
$lang->story->close = 'Close';
$lang->story->batchClose = 'Batch Close';
$lang->story->activate = 'Activate';
$lang->story->delete = "Delete";
$lang->story->view = "Story Detail";
$lang->story->setting = "Settings";
$lang->story->tasks = "Linked Tasks";
$lang->story->bugs = "Linked Bugs";
$lang->story->cases = "Linked Cases";
$lang->story->taskCount = 'Tasks';
$lang->story->bugCount = 'Bugs';
$lang->story->caseCount = 'Cases';
$lang->story->taskCountAB = 'T';
$lang->story->bugCountAB = 'B';
$lang->story->caseCountAB = 'C';
$lang->story->linkStory = 'Link Story';
$lang->story->unlinkStory = 'UnLinked';
$lang->story->export = "Export Data";
$lang->story->zeroCase = "Stories without cases";
$lang->story->zeroTask = "Only list stories without tasks";
$lang->story->reportChart = "Report";
$lang->story->copyTitle = "Copy Title";
$lang->story->batchChangePlan = "Batch Change Plans";
$lang->story->batchChangeBranch = "Batch Change Branches";
$lang->story->batchChangeStage = "Batch Change Phases";
$lang->story->batchAssignTo = "Batch Assign";
$lang->story->batchChangeModule = "Batch Change Modules";
$lang->story->viewAll = "See All";
$lang->story->toTask = 'Convert to Task';
$lang->story->batchToTask = 'Batch Convert to Task';
$lang->story->convertRelations = 'Convert Relations';
$lang->story->editAction = "Edit {$lang->SRCommon}";
$lang->story->changeAction = "Change {$lang->SRCommon}";
@@ -287,6 +288,7 @@ $lang->story->action->reviewed = array('main' => '$date, recorded b
$lang->story->action->passreviewed = array('main' => '$date, determined by the <strong>System</strong>. The result is <strong>Pass</strong>.');
$lang->story->action->clarifyreviewed = array('main' => '$date, determined by the <strong>System</strong>. The result is <strong>Review Failed</strong>. Please re-initiate the review after changing.');
$lang->story->action->rejectreviewed = array('main' => '$date, recorded by <strong>$actor</strong>. The result is <strong>$extra</strong>. The reasion is <strong>$reason</strong>.', 'extra' => 'reviewResultList', 'reason' => 'reasonList');
$lang->story->action->recalled = array('main' => '$date, recalled by <strong>$actor</strong>.');
$lang->story->action->closed = array('main' => '$date, closed by <strong>$actor</strong>. The reasion is <strong>$extra</strong> $appendLink.', 'extra' => 'reasonList');
$lang->story->action->reviewclosed = array('main' => '$date, closed by <strong>System</strong>. The reasion is <strong>Review Failed</strong>.');
$lang->story->action->linked2plan = array('main' => '$date, linked by <strong>$actor</strong> to Plan <strong>$extra</strong>');
+2
View File
@@ -27,6 +27,7 @@ $lang->story->changed = 'Changée';
$lang->story->assignTo = 'Affecter';
$lang->story->assignAction = 'Affecter Story';
$lang->story->review = 'Valider';
$lang->story->recall = 'Revoke';
$lang->story->reviewAction = 'Valider Story';
$lang->story->needReview = 'Validation requise';
$lang->story->batchReview = 'Validation par lot';
@@ -286,6 +287,7 @@ $lang->story->action->reviewed = array('main' => '$date, validée p
$lang->story->action->passreviewed = array('main' => '$date, determined by the <strong>System</strong>. The result is <strong>Pass</strong>.');
$lang->story->action->clarifyreviewed = array('main' => '$date, determined by the <strong>System</strong>. The result is <strong>Review Failed</strong>. Please re-initiate the review after changing.');
$lang->story->action->rejectreviewed = array('main' => '$date, validée par <strong>$actor</strong>. Le résultat est <strong>$extra</strong>. La raison est <strong>$reason</strong>.', 'extra' => 'reviewResultList', 'reason' => 'reasonList');
$lang->story->action->recalled = array('main' => '$date, recalled by <strong>$actor</strong>.');
$lang->story->action->closed = array('main' => '$date, Fermée par <strong>$actor</strong>. La raison est <strong>$extra</strong> $appendLink.', 'extra' => 'reasonList');
$lang->story->action->reviewclosed = array('main' => '$date, closed by <strong>System</strong>. The reasion is <strong>Review Failed</strong>.');
$lang->story->action->linked2plan = array('main' => '$date, planifiée par <strong>$actor</strong> au Plan <strong>$extra</strong>');
+2
View File
@@ -27,6 +27,7 @@ $lang->story->changed = "Đã đổi";
$lang->story->assignTo = 'Giao cho';
$lang->story->assignAction = 'Bàn giao câu chuyện';
$lang->story->review = 'Xét duyệt';
$lang->story->recall = 'Revoke';
$lang->story->reviewAction = 'Duyệt câu chuyện';
$lang->story->needReview = 'Duyệt nhu cầu';
$lang->story->batchReview = 'Duyệt hàng loạt';
@@ -286,6 +287,7 @@ $lang->story->action->reviewed = array('main' => '$date, ghi nhận
$lang->story->action->passreviewed = array('main' => '$date, determined by the <strong>System</strong>. The result is <strong>Pass</strong>.');
$lang->story->action->clarifyreviewed = array('main' => '$date, determined by the <strong>System</strong>. The result is <strong>Review Failed</strong>. Please re-initiate the review after changing.');
$lang->story->action->rejectreviewed = array('main' => '$date, ghi nhận bởi <strong>$actor</strong>. Kết quả là <strong>$extra</strong>. Lý do là <strong>$reason</strong>', 'extra' => 'reviewResultList', 'reason' => 'reasonList');
$lang->story->action->recalled = array('main' => '$date, recalled by <strong>$actor</strong>.');
$lang->story->action->closed = array('main' => '$date, được đóng bởi <strong>$actor</strong>. Lý do là <strong>$extra</strong> $appendLink.', 'extra' => 'reasonList');
$lang->story->action->reviewclosed = array('main' => '$date, closed by <strong>System</strong>. The reasion is <strong>Review Failed</strong>.');
$lang->story->action->linked2plan = array('main' => '$date, liên kết bởi <strong>$actor</strong> tới kế hoạch <strong>$extra</strong>');
+2
View File
@@ -25,6 +25,7 @@ $lang->story->change = "变更";
$lang->story->changed = "{$lang->SRCommon}变更";
$lang->story->assignTo = '指派';
$lang->story->review = '评审';
$lang->story->recall = '撤销评审';
$lang->story->needReview = '需要评审';
$lang->story->batchReview = '批量评审';
$lang->story->edit = "编辑";
@@ -287,6 +288,7 @@ $lang->story->action->reviewed = array('main' => '$date, 由 <stron
$lang->story->action->passreviewed = array('main' => '$date, 由 <strong>系统</strong> 判定,结果为 <strong>确认通过</strong>。');
$lang->story->action->clarifyreviewed = array('main' => '$date, 由 <strong>系统</strong> 判定,结果为 <strong>评审不通过</strong>,请变更后重新发起评审。');
$lang->story->action->rejectreviewed = array('main' => '$date, 由 <strong>$actor</strong> 记录评审结果,结果为 <strong>$extra</strong>,原因为 <strong>$reason</strong>。', 'extra' => 'reviewResultList', 'reason' => 'reasonList');
$lang->story->action->recalled = array('main' => '$date, 由 <strong>$actor</strong> 撤销评审。');
$lang->story->action->closed = array('main' => '$date, 由 <strong>$actor</strong> 关闭,原因为 <strong>$extra</strong> $appendLink。', 'extra' => 'reasonList');
$lang->story->action->reviewclosed = array('main' => '$date, 由 <strong>系统</strong> 关闭,原因为 <strong>评审失败</strong>。');
$lang->story->action->linked2plan = array('main' => '$date, 由 <strong>$actor</strong> 关联到计划 <strong>$extra</strong>。');
+2
View File
@@ -25,6 +25,7 @@ $lang->story->change = "變更";
$lang->story->changed = "{$lang->SRCommon}變更";
$lang->story->assignTo = '指派';
$lang->story->review = '評審';
$lang->story->recall = '撤銷評審';
$lang->story->needReview = '需要評審';
$lang->story->batchReview = '批量評審';
$lang->story->edit = "編輯";
@@ -287,6 +288,7 @@ $lang->story->action->reviewed = array('main' => '$date, 由 <stron
$lang->story->action->passreviewed = array('main' => '$date, 由 <strong>系統</strong> 判定,結果為 <strong>確認通過</strong>。');
$lang->story->action->clarifyreviewed = array('main' => '$date, 由 <strong>系統</strong> 判定,結果為 <strong>評審不通過</strong>,請變更後重新發起評審。');
$lang->story->action->rejectreviewed = array('main' => '$date, 由 <strong>$actor</strong> 記錄評審結果,結果為 <strong>$extra</strong>,原因為 <strong>$reason</strong>。', 'extra' => 'reviewResultList', 'reason' => 'reasonList');
$lang->story->action->recalled = array('main' => '$date, 由 <strong>$actor</strong> 撤銷評審。');
$lang->story->action->closed = array('main' => '$date, 由 <strong>$actor</strong> 關閉,原因為 <strong>$extra</strong> $appendLink。', 'extra' => 'reasonList');
$lang->story->action->reviewclosed = array('main' => '$date, 由 <strong>系統</strong> 關閉,原因為 <strong>評審失敗</strong>。');
$lang->story->action->linked2plan = array('main' => '$date, 由 <strong>$actor</strong> 關聯到計劃 <strong>$extra</strong>。');
+16
View File
@@ -1398,6 +1398,20 @@ class storyModel extends model
return $actions;
}
/**
* Recall the story review.
*
* @param int $storyID
* @access public
* @return void
*/
public function recall($storyID)
{
$story = $this->getById($storyID);
$this->dao->update(TABLE_STORY)->set('status')->eq('draft')->where('id')->eq($storyID)->exec();
$this->dao->delete()->from(TABLE_STORYREVIEW)->where('story')->eq($storyID)->andWhere('version')->eq($story->version)->exec();
}
/**
* Subdivide story
*
@@ -3377,6 +3391,7 @@ class storyModel extends model
if($action == 'change') return (count($story->reviewer) == 0 || count($story->notReview) == 0) and $story->status != 'closed';
if($action == 'review') return in_array($app->user->account, $story->notReview) and ($story->status == 'draft' or $story->status == 'changed');
if($action == 'recall') return empty($story->reviewedBy) and strpos('draft,changed', $story->status) !== false and !empty($story->reviewer);
if($action == 'close') return $story->status != 'closed';
if($action == 'activate') return $story->status == 'closed';
if($action == 'assignto') return $story->status != 'closed';
@@ -3782,6 +3797,7 @@ class storyModel extends model
common::printIcon('story', 'change', $vars . "&from=$story->from", $story, 'list', 'alter', '', '', false, "data-group=$story->from");
common::printIcon('story', 'review', $vars . "&from=$story->from", $story, 'list', 'search', '', '', false, "data-group=$story->from");
if($this->app->openApp != 'project') common::printIcon('story', 'recall', $vars . "&from=$story->from", $story, 'list', 'back', 'hiddenwin', '', '', '', $this->lang->story->recall);
common::printIcon('story', 'close', $vars, $story, 'list', '', '', 'iframe', true);
common::printIcon('story', 'edit', $vars . "&from=$story->from", $story, 'list', '', '', '', false, "data-group=$story->from");
if($story->type != 'requirement') common::printIcon('story', 'createCase', "productID=$story->product&branch=$story->branch&module=0&from=&param=0&$vars", $story, 'list', 'sitemap', '', '', false, "data-app='qa'");