diff --git a/module/story/lang/de.php b/module/story/lang/de.php index ed85cf97b9..c558e80078 100644 --- a/module/story/lang/de.php +++ b/module/story/lang/de.php @@ -419,3 +419,24 @@ $lang->story->categoryList['safe'] = 'Safe'; $lang->story->categoryList['experience'] = 'Experience'; $lang->story->categoryList['improve'] = 'Improve'; $lang->story->categoryList['other'] = 'Other'; + +$lang->story->changeTip = 'This Story is under review and cannot be changed.'; + +$lang->story->reviewTip = array(); +$lang->story->reviewTip['active'] = 'The Story is already active,no review requirements.'; +$lang->story->reviewTip['notReviewer'] = 'You are not the reviewer of this Story and cannot perform review operations.'; +$lang->story->reviewTip['reviewed'] = 'Reviewed'; +$lang->story->reviewTip['recalled'] = 'This Story has been withdrawn from review and cannot be reviewed.'; + +$lang->story->recallTip = array(); +$lang->story->recallTip['actived'] = 'The Story has not initiated a review process and no undo action is required.'; +$lang->story->recallTip['recalled'] = 'This Story has been withdrawn from review and cannot be cancelled.'; +$lang->story->recallTip['reviewed'] = 'The review process has been started and cannot be cancelled.'; +$lang->story->recallTip['notOpenedBy'] = 'You are not the review initiator and cannot cancel the operation.'; + +$lang->story->subDivideTip = array(); +$lang->story->subDivideTip['subStory'] = 'The Sub-stories cannot be subdivided.'; +$lang->story->subDivideTip['planned'] = 'The Story has been planned and cannot be subdivided.'; +$lang->story->subDivideTip['projected'] = 'The Story has been initiated and cannot be subdivided.'; +$lang->story->subDivideTip['reviewed'] = 'The review process has been started and cannot be subdivided.'; +$lang->story->subDivideTip['notActive'] = 'The Story is not active and cannot be subdivided.'; diff --git a/module/story/lang/en.php b/module/story/lang/en.php index 22f8d10c30..803c8b835f 100644 --- a/module/story/lang/en.php +++ b/module/story/lang/en.php @@ -419,3 +419,24 @@ $lang->story->categoryList['safe'] = 'Safe'; $lang->story->categoryList['experience'] = 'Experience'; $lang->story->categoryList['improve'] = 'Improve'; $lang->story->categoryList['other'] = 'Other'; + +$lang->story->changeTip = 'This Story is under review and cannot be changed.'; + +$lang->story->reviewTip = array(); +$lang->story->reviewTip['active'] = 'The Story is already active,no review requirements.'; +$lang->story->reviewTip['notReviewer'] = 'You are not the reviewer of this Story and cannot perform review operations.'; +$lang->story->reviewTip['reviewed'] = 'Reviewed'; +$lang->story->reviewTip['recalled'] = 'This Story has been withdrawn from review and cannot be reviewed.'; + +$lang->story->recallTip = array(); +$lang->story->recallTip['actived'] = 'The Story has not initiated a review process and no undo action is required.'; +$lang->story->recallTip['recalled'] = 'This Story has been withdrawn from review and cannot be cancelled.'; +$lang->story->recallTip['reviewed'] = 'The review process has been started and cannot be cancelled.'; +$lang->story->recallTip['notOpenedBy'] = 'You are not the review initiator and cannot cancel the operation.'; + +$lang->story->subDivideTip = array(); +$lang->story->subDivideTip['subStory'] = 'The Sub-stories cannot be subdivided.'; +$lang->story->subDivideTip['planned'] = 'The Story has been planned and cannot be subdivided.'; +$lang->story->subDivideTip['projected'] = 'The Story has been initiated and cannot be subdivided.'; +$lang->story->subDivideTip['reviewed'] = 'The review process has been started and cannot be subdivided.'; +$lang->story->subDivideTip['notActive'] = 'The Story is not active and cannot be subdivided.'; diff --git a/module/story/lang/fr.php b/module/story/lang/fr.php index 90bef13fc7..a360ae3682 100644 --- a/module/story/lang/fr.php +++ b/module/story/lang/fr.php @@ -419,3 +419,24 @@ $lang->story->categoryList['safe'] = 'Safe'; $lang->story->categoryList['experience'] = 'Experience'; $lang->story->categoryList['improve'] = 'Improve'; $lang->story->categoryList['other'] = 'Other'; + +$lang->story->changeTip = 'Cette Story est en cours de vérification et ne peut pas être modifiée.'; + +$lang->story->reviewTip = array(); +$lang->story->reviewTip['active'] = "Cette Story est déjà active, il n'y a pas de demande de révision."; +$lang->story->reviewTip['notReviewer'] = "Vous n'êtes pas l'évaluateur de cette Story et ne pouvez pas effectuer d'opérations d'évaluation."; +$lang->story->reviewTip['reviewed'] = "Révisé"; +$lang->story->reviewTip['recalled'] = "Cette Story a été retirée pour vérification, et l'opération de révision ne peut pas être effectuée."; + +$lang->story->recallTip = array(); +$lang->story->recallTip['actived'] = "Aucun processus de révision n'a été lancé pour cette Story, et il n'est pas nécessaire de révoquer l'opération."; +$lang->story->recallTip['recalled'] = "Cette Story a été retirée pour vérification, et l'opération ne peut pas être annulée."; +$lang->story->recallTip['reviewed'] = "Il est entré dans le processus de révision, et l'opération ne peut pas être annulée."; +$lang->story->recallTip['notOpenedBy'] = "Vous n'êtes pas l'initiateur de la révision et vous ne pouvez pas annuler l'opération."; + +$lang->story->subDivideTip = array(); +$lang->story->subDivideTip['subStory'] = 'Les sous-stories ne peuvent pas être décomposées.'; +$lang->story->subDivideTip['planned'] = 'Cette Story est planifiée et ne peut être subdivisée.'; +$lang->story->subDivideTip['projected'] = 'Cette Story a été créée et ne peut être subdivisée.'; +$lang->story->subDivideTip['reviewed'] = 'Il est entré dans le processus de révision et ne peut être subdivisé.'; +$lang->story->subDivideTip['notActive'] = "Cette Story n'est pas active et ne peut être subdivisée."; diff --git a/module/story/lang/vi.php b/module/story/lang/vi.php index 332699442b..360f5d83ca 100644 --- a/module/story/lang/vi.php +++ b/module/story/lang/vi.php @@ -20,17 +20,13 @@ $lang->story->affectedStories = "Affected {$lang->story->story}"; $lang->story->batchCreate = "Tạo hàng loạt"; $lang->story->change = "Thay đổi"; -$lang->story->changeAction = "Thay đổi câu chuyện"; $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'; $lang->story->edit = "Sửa câu chuyện"; -$lang->story->editAB = "Sửa câu chuyện"; $lang->story->batchEdit = "Sửa hàng loạt"; $lang->story->subdivide = 'Phân rã'; $lang->story->link = 'Link'; @@ -38,15 +34,11 @@ $lang->story->unlink = 'Unlink'; $lang->story->track = 'Track'; $lang->story->trackAB = 'Track'; $lang->story->processStoryChange= 'Process Story Change'; -$lang->story->subdivideAction = 'Phân rã câu chuyện'; $lang->story->splitRequirent = 'Phân rã'; $lang->story->close = 'Đóng'; -$lang->story->closeAction = 'Đóng câu chuyện'; $lang->story->batchClose = 'Đóng hàng loạt'; $lang->story->activate = 'Kích hoạt'; -$lang->story->activateAction = 'Kích hoạt câu chuyện'; $lang->story->delete = "Xóa"; -$lang->story->deleteAction = "Xóa câu chuyện"; $lang->story->view = "Chi tiết câu chuyện"; $lang->story->setting = "Thiết lập"; $lang->story->tasks = "Nhiệm vụ liên kết"; @@ -61,11 +53,9 @@ $lang->story->caseCountAB = 'C'; $lang->story->linkStory = 'Liên kết câu chuyện'; $lang->story->unlinkStory = 'Hủy liên kết'; $lang->story->export = "Xuất dữ liệu"; -$lang->story->exportAction = "Xuất câu chuyện"; $lang->story->zeroCase = "Câu chuyện không tình huống"; $lang->story->zeroTask = "Chỉ liệt kê câu chuyện không nhiệm vụ"; $lang->story->reportChart = "Báo cáo"; -$lang->story->reportAction = "Báo cáo câu chuyện"; $lang->story->copyTitle = "Sao chép tiêu đề"; $lang->story->batchChangePlan = "Thay đổi kế hoạch hàng loạt"; $lang->story->batchChangeBranch = "Thay đổi chi nhánh hàng loạt"; @@ -76,6 +66,19 @@ $lang->story->viewAll = "Xem tất cả"; $lang->story->toTask = 'Convert to Task'; $lang->story->batchToTask = 'Batch Convert to Task'; $lang->story->convertRelations = 'Convert Relations'; +$lang->story->undetermined = 'undetermined'; +$lang->story->order = 'Order'; + +$lang->story->editAction = "Edit {$lang->SRCommon}"; +$lang->story->changeAction = "Change {$lang->SRCommon}"; +$lang->story->assignAction = "Assign {$lang->SRCommon}"; +$lang->story->reviewAction = "Review {$lang->SRCommon}"; +$lang->story->subdivideAction = "Subdivide {$lang->SRCommon}"; +$lang->story->closeAction = "Close {$lang->SRCommon}"; +$lang->story->activateAction = "Activate {$lang->SRCommon}"; +$lang->story->deleteAction = "Delete {$lang->SRCommon}"; +$lang->story->exportAction = "Export {$lang->SRCommon}"; +$lang->story->reportAction = "Report"; $lang->story->skipStory = '%s is a parent story. It cannot be closed.'; $lang->story->closedStory = 'Story %s is closed and will not be closed.'; @@ -83,7 +86,6 @@ $lang->story->batchToTaskTips = "This action will create a task with the same na $lang->story->successToTask = "Converted to task."; $lang->story->storyRound = '%s time estimation'; -$lang->story->common = 'Câu chuyện'; $lang->story->id = 'ID'; $lang->story->parent = 'Mẹ'; $lang->story->product = $lang->productCommon; @@ -95,6 +97,7 @@ $lang->story->source = 'Từ'; $lang->story->sourceNote = 'Ghi chú'; $lang->story->fromBug = 'Từ Bug'; $lang->story->title = 'Tiêu đề'; +$lang->story->type = "Story/Requirement"; $lang->story->category = 'Category'; $lang->story->color = 'Màu'; $lang->story->toBug = 'Tới Bug'; @@ -122,9 +125,13 @@ $lang->story->closedDate = 'Ngày đóng'; $lang->story->closedReason = 'Lý do'; $lang->story->rejectedReason = 'Lý do từ chối'; $lang->story->reviewedBy = 'Người duyệt'; +$lang->story->reviewer = $lang->story->reviewedBy; $lang->story->reviewers = 'Reviewers'; $lang->story->reviewedDate = 'Ngày duyệt'; +$lang->story->activatedDate = 'Activated Date'; $lang->story->version = 'Phiên bản'; +$lang->story->feedbackBy = 'From Name'; +$lang->story->notifyEmail = 'From Email'; $lang->story->plan = 'Kế hoạch liên kết'; $lang->story->planAB = 'Kế hoạch'; $lang->story->comment = 'Nhận xét'; @@ -141,7 +148,6 @@ $lang->story->colorTag = 'Màu'; $lang->story->files = 'Files'; $lang->story->copy = "Copy"; $lang->story->total = "Tổng câu chuyện"; -$lang->story->allStories = 'Tất cả câu chuyện'; $lang->story->draft = 'Nháp'; $lang->story->unclosed = 'Chưa đóng'; $lang->story->deleted = 'Đã xóa'; @@ -157,6 +163,7 @@ $lang->story->field = 'Synchronized fields'; $lang->story->completeRate = 'Completion Rate'; $lang->story->reviewed = 'Reviewed'; $lang->story->toBeReviewed = 'To Be Reviewed'; +$lang->story->linkMR = 'Related MRs'; $lang->story->ditto = 'Như trên'; $lang->story->dittoNotice = 'Câu chuyện này chưa liên kết tới cùng sản phẩm bởi bởi vì nó là cuối cùng!'; @@ -244,6 +251,7 @@ $lang->story->legendChildStories = 'Câu chuyện con'; $lang->story->legendSpec = 'Mô tả'; $lang->story->legendVerify = 'Chấp thuận'; $lang->story->legendMisc = 'Khác'; +$lang->story->legendInformation = 'Story Information'; $lang->story->lblChange = "Đã đổi"; $lang->story->lblReview = 'Xét duyệt'; @@ -260,6 +268,7 @@ $lang->story->specTemplate = "Theo , Tôi mu $lang->story->needNotReview = 'Không có xét duyệt được yêu cầu'; $lang->story->successSaved = "Câu chuyện đã lưu lại!"; $lang->story->confirmDelete = "Bạn có muốn xóa câu chuyện này?"; +$lang->story->confirmRecall = "Do you want to recall this story?"; $lang->story->errorEmptyChildStory = '『Câu chuyện đã phân rã』 không thể để trống.'; $lang->story->errorNotSubdivide = "Nếu tình trạng này là chưa kích hoạt, hoặc giai đoạn này chưa đợi, hoặc một câu chuyện con, nó không thể bị chia nhỏ."; $lang->story->errorEmptyReviewedBy = "『ReviewedBy』 không thể để trống."; @@ -273,6 +282,9 @@ $lang->story->moveChildrenTips = "Its Child {$lang->SRCommon} will be moved $lang->story->changeTips = 'The story associated with the requirements to change, click "Cancel" ignore this change, click "Confirm" to change the story.'; $lang->story->estimateMustBeNumber = 'Estimate value must be number.'; $lang->story->estimateMustBePlus = 'Estimated value cannot be negative'; +$lang->story->confirmChangeBranch = $lang->SRCommon . ' %s is linked to the plan of its linked branch. If the branch is edited, ' . $lang->SRCommon . ' will be removed from the plan of its linked branch. Do you want to continue edit ' . $lang->SRCommon . '?'; +$lang->story->confirmChangePlan = $lang->SRCommon . ' %s is linked to the branch of its plan. If the branch is edited, ' . $lang->SRCommon . ' will be removed from the plan. Do you want to continue edit branch ?'; +$lang->story->errorDuplicateStory = $lang->SRCommon . '%s not exist'; $lang->story->form = new stdclass(); $lang->story->form->area = 'Phạm vi'; @@ -292,6 +304,7 @@ $lang->story->action->linked2plan = array('main' => '$date, liên kế $lang->story->action->unlinkedfromplan = array('main' => '$date, bị hủy bởi $actor từ kế hoạch $extra.'); $lang->story->action->linked2execution = array('main' => '$date, liên kết bởi $actor tới ' . $lang->executionCommon . ' $extra.'); $lang->story->action->unlinkedfromexecution = array('main' => '$date, bị hủy bởi $actor từ ' . $lang->executionCommon . ' $extra.'); +$lang->story->action->linked2kanban = array('main' => '$date, linked by $actor to Kanban $extra.'); $lang->story->action->linked2project = array('main' => '$date, liên kết bởi $actor tớ project $extra.'); $lang->story->action->unlinkedfromproject = array('main' => '$date, bị hủy bởi $actor từ project $extra.'); $lang->story->action->linked2build = array('main' => '$date, liên kết bởi $actor tới Bản dựng $extra'); @@ -406,3 +419,24 @@ $lang->story->categoryList['safe'] = 'Safe'; $lang->story->categoryList['experience'] = 'Experience'; $lang->story->categoryList['improve'] = 'Improve'; $lang->story->categoryList['other'] = 'Other'; + +$lang->story->changeTip = 'This Story is under review and cannot be changed.'; + +$lang->story->reviewTip = array(); +$lang->story->reviewTip['active'] = 'The Story is already active,no review requirements.'; +$lang->story->reviewTip['notReviewer'] = 'You are not the reviewer of this Story and cannot perform review operations.'; +$lang->story->reviewTip['reviewed'] = 'Reviewed'; +$lang->story->reviewTip['recalled'] = 'This Story has been withdrawn from review and cannot be reviewed.'; + +$lang->story->recallTip = array(); +$lang->story->recallTip['actived'] = 'The Story has not initiated a review process and no undo action is required.'; +$lang->story->recallTip['recalled'] = 'This Story has been withdrawn from review and cannot be cancelled.'; +$lang->story->recallTip['reviewed'] = 'The review process has been started and cannot be cancelled.'; +$lang->story->recallTip['notOpenedBy'] = 'You are not the review initiator and cannot cancel the operation.'; + +$lang->story->subDivideTip = array(); +$lang->story->subDivideTip['subStory'] = 'The Sub-stories cannot be subdivided.'; +$lang->story->subDivideTip['planned'] = 'The Story has been planned and cannot be subdivided.'; +$lang->story->subDivideTip['projected'] = 'The Story has been initiated and cannot be subdivided.'; +$lang->story->subDivideTip['reviewed'] = 'The review process has been started and cannot be subdivided.'; +$lang->story->subDivideTip['notActive'] = 'The Story is not active and cannot be subdivided.'; diff --git a/module/story/lang/zh-cn.php b/module/story/lang/zh-cn.php index 6f45c1f251..fc929d2d1e 100644 --- a/module/story/lang/zh-cn.php +++ b/module/story/lang/zh-cn.php @@ -419,3 +419,24 @@ $lang->story->categoryList['safe'] = '安全'; $lang->story->categoryList['experience'] = '体验'; $lang->story->categoryList['improve'] = '改进'; $lang->story->categoryList['other'] = '其他'; + +$lang->story->changeTip = '该需求正在评审中,无法进行变更'; + +$lang->story->reviewTip = array(); +$lang->story->reviewTip['active'] = '该需求已是激活状态,无需求评审'; +$lang->story->reviewTip['notReviewer'] = '您不是该需求的评审人员,无法进行评审操作'; +$lang->story->reviewTip['reviewed'] = '您已评审'; +$lang->story->reviewTip['recalled'] = '该需求已撤销评审,无法进行评审操作'; + +$lang->story->recallTip = array(); +$lang->story->recallTip['actived'] = '该需求未发起评审流程,无需撤销操作'; +$lang->story->recallTip['recalled'] = '该需求已经撤销评审,无法进行撤销操作'; +$lang->story->recallTip['reviewed'] = '已进入评审流程,无法进行撤销操作'; +$lang->story->recallTip['notOpenedBy'] = '您不是评审发起人,无法进行撤销操作'; + +$lang->story->subDivideTip = array(); +$lang->story->subDivideTip['subStory'] = '子需求无法细分'; +$lang->story->subDivideTip['planned'] = '该需求已计划,无法进行细分操作'; +$lang->story->subDivideTip['projected'] = '该需求已立项,无法进行细分操作'; +$lang->story->subDivideTip['reviewed'] = '已进入评审流程,无法进行细分操作'; +$lang->story->subDivideTip['notActive'] = '需求不是激活状态,无法进行细分操作'; diff --git a/module/story/model.php b/module/story/model.php index 94db59176f..9a2831a06d 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -3843,16 +3843,71 @@ class storyModel extends model { if(common::canBeChanged('story', $story)) { + $storyReviewer = isset($story->revierer) ? $story->reviewer : array(); + if($story->URChanged) return $this->buildMenu('story', 'processStoryChange', $params, $story, $type, 'search', '', 'iframe', true, '', $this->lang->confirm); - $menu .= $this->buildMenu('story', 'change', $params . "&from=$story->from", $story, $type, 'alter'); - $menu .= $this->buildMenu('story', 'review', $params . "&from=$story->from", $story, $type, 'search'); - $menu .= $this->buildMenu('story', 'recall', $params, $story, $type, 'undo', 'hiddenwin', '', '', '', $this->lang->story->recall); + $isClick = $this->isClickable($story, 'change'); + $title = $isClick ? '' : $this->lang->story->changeTip; + $menu .= $this->buildMenu('story', 'change', $params . "&from=$story->from", $story, $type, 'alter', '', '', false, '', $title); + + $isClick = $this->isClickable($story, 'review'); + $title = $this->lang->story->review; + if(!$isClick) + { + if($story->status == 'active') + { + $title = $this->lang->story->reviewTip['active']; + } + elseif($storyReviewer and in_array($this->app->user->account, $storyReviewer)) + { + $title = $this->lang->story->reviewTip['reviewed']; + } + elseif($storyReviewer and !in_array($this->app->user->account, $storyReviewer)) + { + $title = $this->lang->story->reviewTip['notReviewer']; + } + elseif(empty($storyReviewer)) + { + $title = $this->lang->story->reviewTip['recalled']; + } + } + $menu .= $this->buildMenu('story', 'review', $params . "&from=$story->from", $story, $type, 'search', '', '', false, '', $title); + + $title = $this->lang->story->recall; + $isClick = $this->isClickable($story, 'recall'); + if(!$isClick) + { + if($story->status == 'draft' and empty($storyReviewer)) $title = $this->lang->story->recallTip['recalled']; + if($story->status == 'draft' and !empty($storyReviewer)) $title = $this->lang->story->recallTip['reviewed']; + if(empty($story->reviewedBy) and strpos('draft,changed', $story->status) !== false and !empty($story->reviewer) and $this->app->user->account != $story->openedBy) $title = $this->lang->story->recallTip['notOpenedBy']; + if($story->status == 'active' and empty($story->reviewer)) $title = $this->lang->story->recallTip['actived']; + } + $menu .= $this->buildMenu('story', 'recall', $params, $story, $type, 'undo', 'hiddenwin', '', '', '', $title); $menu .= $this->buildMenu('story', 'close', $params, $story, $type, '', '', 'iframe', true); $menu .= $this->buildMenu('story', 'edit', $params . "&from=$story->from", $story, $type); - if($story->type != 'requirement' and $this->config->vision != 'lite') $menu .= $this->buildMenu('story', 'createCase', "productID=$story->product&branch=$story->branch&module=0&from=¶m=0&$params", $story, $type, 'sitemap', '', '', false, "data-app='qa'"); - if($this->app->rawModule != 'projectstory' OR $this->config->vision == 'lite') $menu .= $this->buildMenu('story', 'batchCreate', "productID=$story->product&branch=$story->branch&module=$story->module&$params&executionID={$this->session->project}", $story, $type, 'split', '', '', '', '', $this->lang->story->subdivide); + + if($this->app->rawModule != 'projectstory' OR $this->config->vision == 'lite') + { + $isClick = $this->isClickable($story, 'batchcreate'); + $title = $this->lang->story->subdivide; + if(!$isClick) + { + if($story->parent > 0) + { + $title = $this->lang->story->subDivideTip['subStory']; + } + else + { + if(!empty($story->plan)) $title = $this->lang->story->subDivideTip['planned']; + if($story->stage == 'projected') $title = $this->lang->story->subDivideTip['projected']; + if($story->status == 'draft' and !empty($story->reviewer)) $title = $this->lang->story->subDivideTip['reviewed']; + if($story->status != 'active') $title = $this->lang->story->subDivideTip['notActive']; + } + } + $menu .= $this->buildMenu('story', 'batchCreate', "productID=$story->product&branch=$story->branch&module=$story->module&$params&executionID={$this->session->project}", $story, $type, 'split', '', '', '', '', $title); + } if($this->app->rawModule == 'projectstory' and $this->config->vision != 'lite') $menu .= $this->buildMenu('projectstory', 'unlinkStory', "projectID={$this->session->project}&$params", $story, $type, 'unlink', 'hiddenwin'); } else