From 09d6f83f8598307ae321b38403c143301cb3be0d Mon Sep 17 00:00:00 2001 From: holan20180123 <56391770@qq.com> Date: Fri, 6 Nov 2020 14:01:01 +0800 Subject: [PATCH] * Finish task #8194. --- module/bug/model.php | 21 ++++++---- module/common/model.php | 48 +++++++++++++++++++++ module/custom/control.php | 40 ++++++++++++++++++ module/custom/lang/de.php | 56 +++++++++++++++---------- module/custom/lang/en.php | 56 +++++++++++++++---------- module/custom/lang/fr.php | 56 +++++++++++++++---------- module/custom/lang/vi.php | 56 +++++++++++++++---------- module/custom/lang/zh-cn.php | 56 +++++++++++++++---------- module/custom/lang/zh-tw.php | 56 +++++++++++++++---------- module/my/view/bug.html.php | 18 ++++---- module/my/view/story.html.php | 39 ++++++++++------- module/my/view/task.html.php | 32 +++++++------- module/my/view/testcase.html.php | 20 +++++---- module/productplan/view/browse.html.php | 13 +++--- module/project/view/bug.html.php | 21 ++++++---- module/project/view/build.html.php | 2 +- module/project/view/story.html.php | 52 +++++++++++++---------- module/project/view/testtask.html.php | 23 ++++++---- module/release/view/browse.html.php | 26 +++++++----- module/story/model.php | 23 ++++++---- module/testcase/model.php | 29 ++++++++----- module/testreport/view/browse.html.php | 7 +++- module/testreport/view/view.html.php | 9 ++-- module/testtask/model.php | 2 +- 24 files changed, 504 insertions(+), 257 deletions(-) diff --git a/module/bug/model.php b/module/bug/model.php index 9cb4a4083c..57fee78580 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -2500,6 +2500,9 @@ class bugModel extends model */ public function printCell($col, $bug, $users, $builds, $branches, $modulePairs, $projects = array(), $plans = array(), $stories = array(), $tasks = array(), $mode = 'datatable') { + /* Check the product is closed. */ + $isClosedProject = common::checkParentObjectClosed('bug', $bug); + $canBatchEdit = common::hasPriv('bug', 'batchEdit'); $canBatchConfirm = common::hasPriv('bug', 'batchConfirm'); $canBatchClose = common::hasPriv('bug', 'batchClose'); @@ -2569,7 +2572,8 @@ class bugModel extends model case 'id': if($canBatchAction) { - echo html::checkbox('bugIDList', array($bug->id => '')) . html::a(helper::createLink('bug', 'view', "bugID=$bug->id"), sprintf('%03d', $bug->id)); + $disabled = $isClosedProject ? 'disabled' : ''; + echo html::checkbox('bugIDList', array($bug->id => ''), '', $disabled) . html::a(helper::createLink('bug', 'view', "bugID=$bug->id"), sprintf('%03d', $bug->id)); } else { @@ -2720,12 +2724,15 @@ class bugModel extends model echo substr($bug->lastEditedDate, 5, 11); break; case 'actions': - $params = "bugID=$bug->id"; - common::printIcon('bug', 'confirmBug', $params, $bug, 'list', 'confirm', '', 'iframe', true); - common::printIcon('bug', 'resolve', $params, $bug, 'list', 'checked', '', 'iframe', true); - common::printIcon('bug', 'close', $params, $bug, 'list', '', '', 'iframe', true); - common::printIcon('bug', 'edit', $params, $bug, 'list'); - common::printIcon('bug', 'create', "product=$bug->product&branch=$bug->branch&extra=$params", $bug, 'list', 'copy'); + if(!$isClosedProject) + { + $params = "bugID=$bug->id"; + common::printIcon('bug', 'confirmBug', $params, $bug, 'list', 'confirm', '', 'iframe', true); + common::printIcon('bug', 'resolve', $params, $bug, 'list', 'checked', '', 'iframe', true); + common::printIcon('bug', 'close', $params, $bug, 'list', '', '', 'iframe', true); + common::printIcon('bug', 'edit', $params, $bug, 'list'); + common::printIcon('bug', 'create', "product=$bug->product&branch=$bug->branch&extra=$params", $bug, 'list', 'copy'); + } break; } echo ''; diff --git a/module/common/model.php b/module/common/model.php index 34223b1825..4bf899e77e 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -952,6 +952,7 @@ EOD; } if(strpos(',edit,copy,report,export,delete,', ",$method,") !== false) $module = 'common'; $class = "icon-$module-$method"; + if(!$clickable) $class .= ' disabled'; if($icon) $class .= ' icon-' . $icon; @@ -1488,6 +1489,9 @@ EOD; { global $app, $lang; + /* Check the parent object is closed. */ + if(commonModel::checkParentObjectClosed($module, $object)) return false; + /* Check is the super admin or not. */ if(!empty($app->user->admin) || strpos($app->company->admins, ",{$app->user->account},") !== false) return true; /* If not super admin, check the rights. */ @@ -1837,6 +1841,50 @@ EOD; return strpos('|zh-cn|zh-tw|', '|' . $app->getClientLang() . '|') === false; } + /** + * Check the parent object is closed. + * + * @param string $module + * @param object $object + * @static + * @access public + * @return bool + */ + public static function checkParentObjectClosed($module, $object = null) + { + global $app, $config; + + /* Check the product is closed. */ + if(!empty($object->product) and !empty($config->global->closedProductStatus)) + { + $product = $app->control->loadModel('product')->getByID($object->product); + if($product->status == 'closed') return true; + + /* Get the projects associated with the story. */ + if($module == 'story' and empty($object->project)) + { + $projects = $app->dbh->query('SELECT project FROM ' . TABLE_PROJECTSTORY . " WHERE `story` = '$object->id'")->fetchAll(); + $projectIDList = array(); + foreach($projects as $project) $projectIDList[] = $project->project; + + $object->project = implode(',', $projectIDList); + } + } + + /* Check the project is closed. */ + if(!empty($object->project) and !empty($config->global->closedProjectStatus)) + { + $projectIDList = explode(',', $object->project); + $projects = $app->control->loadModel('project')->getByIDList($projectIDList); + foreach($projects as $project) + { + if($project->status == 'closed') return true; + } + } + + return false; + } + /** * Response. * diff --git a/module/custom/control.php b/module/custom/control.php index 92aa676834..903b0edf79 100644 --- a/module/custom/control.php +++ b/module/custom/control.php @@ -347,6 +347,46 @@ class custom extends control $this->display(); } + /** + * Set whether the project is on read-only. + * + * @access public + * @return void + */ + public function project() + { + if($_POST) + { + $this->loadModel('setting')->setItem('system.common.global.closedProjectStatus', $this->post->project); + $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'reload')); + } + + $this->view->title = $this->lang->custom->project; + $this->view->position[] = $this->lang->custom->common; + $this->view->position[] = $this->view->title; + $this->display(); + } + + /** + * Set whether the product is on read-only. + * + * @access public + * @return void + */ + public function product() + { + if($_POST) + { + $this->loadModel('setting')->setItem('system.common.global.closedProductStatus', $this->post->product); + $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'reload')); + } + + $this->view->title = $this->lang->custom->product; + $this->view->position[] = $this->lang->custom->common; + $this->view->position[] = $this->view->title; + $this->display(); + } + /** * Ajax save custom fields. * diff --git a/module/custom/lang/de.php b/module/custom/lang/de.php index 42190ef5b9..6cf9a0d17f 100644 --- a/module/custom/lang/de.php +++ b/module/custom/lang/de.php @@ -1,24 +1,30 @@ custom->common = 'Custom'; -$lang->custom->index = 'Home'; -$lang->custom->set = 'Customize'; -$lang->custom->restore = 'Reset to Default'; -$lang->custom->key = 'Key'; -$lang->custom->value = 'Value'; -$lang->custom->flow = 'Concept'; -$lang->custom->working = 'WorkStyle'; -$lang->custom->select = 'Select Concept'; -$lang->custom->branch = 'Multi Branch'; -$lang->custom->owner = 'Owner'; -$lang->custom->module = 'Module'; -$lang->custom->section = 'Section'; -$lang->custom->lang = 'Language'; -$lang->custom->setPublic = 'Set Public'; -$lang->custom->required = 'Required'; -$lang->custom->score = 'Score'; -$lang->custom->timezone = 'Timezone'; -$lang->custom->scoreReset = 'Reset Score'; -$lang->custom->scoreTitle = 'Point Feature'; +$lang->custom->common = 'Custom'; +$lang->custom->index = 'Home'; +$lang->custom->set = 'Customize'; +$lang->custom->restore = 'Reset to Default'; +$lang->custom->key = 'Key'; +$lang->custom->value = 'Value'; +$lang->custom->flow = 'Concept'; +$lang->custom->working = 'WorkStyle'; +$lang->custom->select = 'Select Concept'; +$lang->custom->branch = 'Multi Branch'; +$lang->custom->owner = 'Owner'; +$lang->custom->module = 'Module'; +$lang->custom->section = 'Section'; +$lang->custom->lang = 'Language'; +$lang->custom->setPublic = 'Set Public'; +$lang->custom->required = 'Required'; +$lang->custom->score = 'Score'; +$lang->custom->timezone = 'Timezone'; +$lang->custom->scoreReset = 'Reset Score'; +$lang->custom->scoreTitle = 'Point Feature'; +$lang->custom->projectTitle = $lang->projectCommon . ' Feature'; +$lang->custom->productTitle = $lang->productCommon . ' Feature'; +$lang->custom->project = $lang->projectCommon; +$lang->custom->product = $lang->productCommon; +$lang->custom->closedProject = 'Closed ' . $lang->projectCommon; +$lang->custom->closedProduct = 'Closed ' . $lang->productCommon; $lang->custom->object['story'] = 'Story'; $lang->custom->object['task'] = 'Task'; @@ -78,7 +84,7 @@ $lang->custom->user->fields['statusList'] = 'Status'; $lang->custom->user->fields['contactField'] = 'Available Contact'; $lang->custom->user->fields['deleted'] = 'Show deleted user'; -$lang->custom->system = array('flow', 'working', 'required', 'score'); +$lang->custom->system = array('flow', 'working', 'required', 'score', 'product', 'project'); $lang->custom->block->fields['closed'] = 'Closed Block'; @@ -100,6 +106,8 @@ $lang->custom->notice->noClosedBlock = 'You have no blocks that are closed p $lang->custom->notice->required = 'The selected field is required.'; $lang->custom->notice->conceptResult = 'According to your preference, %s-%s is set for you. Use %s + %s。'; $lang->custom->notice->conceptPath = 'Go to Admin -> Custom -> Concept to set it.'; +$lang->custom->notice->readOnlyOfProject = 'If Change Forbidden, any change on tasks, builds, efforts and stories of the closed project is also forbidden.'; +$lang->custom->notice->readOnlyOfProduct = 'If Change Forbidden, any change on stories, bugs, cases, efforts, releases and plans of the closed product is also forbidden.'; $lang->custom->notice->indexPage['product'] = "ZenTao 8.2+ has Product Homepage. Do you want to go to Product Homepage?"; $lang->custom->notice->indexPage['project'] = "ZenTao 8.2+ has Project Homepage. Do you want to go to Project Homepage?"; @@ -145,6 +153,12 @@ $lang->custom->page = ' Page'; $lang->custom->scoreStatus[1] = 'On'; $lang->custom->scoreStatus[0] = 'Off'; +$lang->custom->closedProjectStatus[1] = 'Change Forbidden'; +$lang->custom->closedProjectStatus[0] = 'Change Allowed'; + +$lang->custom->closedProductStatus[1] = 'Change Forbidden'; +$lang->custom->closedProductStatus[0] = 'Change Allowed'; + $lang->custom->moduleName['product'] = $lang->productCommon; $lang->custom->moduleName['productplan'] = 'Plan'; $lang->custom->moduleName['project'] = $lang->projectCommon; diff --git a/module/custom/lang/en.php b/module/custom/lang/en.php index 1696ac25ed..d46abe9390 100644 --- a/module/custom/lang/en.php +++ b/module/custom/lang/en.php @@ -1,24 +1,30 @@ custom->common = 'Custom'; -$lang->custom->index = 'Home'; -$lang->custom->set = 'Customize'; -$lang->custom->restore = 'Reset'; -$lang->custom->key = 'Key'; -$lang->custom->value = 'Value'; -$lang->custom->flow = 'Concept'; -$lang->custom->working = 'Mode'; -$lang->custom->select = 'Select Concept'; -$lang->custom->branch = 'Multi-Branch'; -$lang->custom->owner = 'Owner'; -$lang->custom->module = 'Module'; -$lang->custom->section = 'Section'; -$lang->custom->lang = 'Language'; -$lang->custom->setPublic = 'Set Public'; -$lang->custom->required = 'Required Field'; -$lang->custom->score = 'Point'; -$lang->custom->timezone = 'Timezone'; -$lang->custom->scoreReset = 'Reset Points'; -$lang->custom->scoreTitle = 'Point Feature'; +$lang->custom->common = 'Custom'; +$lang->custom->index = 'Home'; +$lang->custom->set = 'Customize'; +$lang->custom->restore = 'Reset'; +$lang->custom->key = 'Key'; +$lang->custom->value = 'Value'; +$lang->custom->flow = 'Concept'; +$lang->custom->working = 'Mode'; +$lang->custom->select = 'Select Concept'; +$lang->custom->branch = 'Multi-Branch'; +$lang->custom->owner = 'Owner'; +$lang->custom->module = 'Module'; +$lang->custom->section = 'Section'; +$lang->custom->lang = 'Language'; +$lang->custom->setPublic = 'Set Public'; +$lang->custom->required = 'Required Field'; +$lang->custom->score = 'Point'; +$lang->custom->timezone = 'Timezone'; +$lang->custom->scoreReset = 'Reset Points'; +$lang->custom->scoreTitle = 'Point Feature'; +$lang->custom->projectTitle = $lang->projectCommon . ' Feature'; +$lang->custom->productTitle = $lang->productCommon . ' Feature'; +$lang->custom->project = $lang->projectCommon; +$lang->custom->product = $lang->productCommon; +$lang->custom->closedProject = 'Closed ' . $lang->projectCommon; +$lang->custom->closedProduct = 'Closed ' . $lang->productCommon; $lang->custom->object['story'] = 'Story'; $lang->custom->object['task'] = 'Task'; @@ -78,7 +84,7 @@ $lang->custom->user->fields['statusList'] = 'Status'; $lang->custom->user->fields['contactField'] = 'Available Contact'; $lang->custom->user->fields['deleted'] = 'Deleted User'; -$lang->custom->system = array('flow', 'working', 'required', 'score'); +$lang->custom->system = array('flow', 'working', 'required', 'score', 'product', 'project'); $lang->custom->block->fields['closed'] = 'Closed Block'; @@ -100,6 +106,8 @@ $lang->custom->notice->noClosedBlock = 'You have no blocks that are closed p $lang->custom->notice->required = 'The selected field is required.'; $lang->custom->notice->conceptResult = 'According to your preference, %s-%s is set for you. Use %s + %s.'; $lang->custom->notice->conceptPath = 'Go to Admin -> Custom -> Concept to set it.'; +$lang->custom->notice->readOnlyOfProject = 'If Change Forbidden, any change on tasks, builds, efforts and stories of the closed project is also forbidden.'; +$lang->custom->notice->readOnlyOfProduct = 'If Change Forbidden, any change on stories, bugs, cases, efforts, releases and plans of the closed product is also forbidden.'; $lang->custom->notice->indexPage['product'] = "ZenTao 8.2+ has Product Home. Do you want to go to Product Home?"; $lang->custom->notice->indexPage['project'] = "ZenTao 8.2+ has Project Home. Do you want to go to Project Home?"; @@ -145,6 +153,12 @@ $lang->custom->page = ' Page'; $lang->custom->scoreStatus[1] = 'On'; $lang->custom->scoreStatus[0] = 'Off'; +$lang->custom->closedProjectStatus[1] = 'Change Forbidden'; +$lang->custom->closedProjectStatus[0] = 'Change Allowed'; + +$lang->custom->closedProductStatus[1] = 'Change Forbidden'; +$lang->custom->closedProductStatus[0] = 'Change Allowed'; + $lang->custom->moduleName['product'] = $lang->productCommon; $lang->custom->moduleName['productplan'] = 'Plan'; $lang->custom->moduleName['project'] = $lang->projectCommon; diff --git a/module/custom/lang/fr.php b/module/custom/lang/fr.php index 20969e4190..1a3dc44bd5 100644 --- a/module/custom/lang/fr.php +++ b/module/custom/lang/fr.php @@ -1,24 +1,30 @@ custom->common = 'Personnalisation'; -$lang->custom->index = 'Accueil'; -$lang->custom->set = 'Personnaliser'; -$lang->custom->restore = 'Réinitialiser'; -$lang->custom->key = 'Clé'; -$lang->custom->value = 'Valeur'; -$lang->custom->flow = 'Concept'; -$lang->custom->working = 'Mode'; -$lang->custom->select = 'Choix du Concept'; -$lang->custom->branch = 'Multi-Branches'; -$lang->custom->owner = 'Propriétaire'; -$lang->custom->module = 'Module'; -$lang->custom->section = 'Section'; -$lang->custom->lang = 'Langue'; -$lang->custom->setPublic = 'Set Public'; -$lang->custom->required = 'Champ Obligatoire'; -$lang->custom->score = 'Point'; -$lang->custom->timezone = 'Timezone'; -$lang->custom->scoreReset = 'Réinit Points'; -$lang->custom->scoreTitle = 'Fonctionnalité des Points'; +$lang->custom->common = 'Personnalisation'; +$lang->custom->index = 'Accueil'; +$lang->custom->set = 'Personnaliser'; +$lang->custom->restore = 'Réinitialiser'; +$lang->custom->key = 'Clé'; +$lang->custom->value = 'Valeur'; +$lang->custom->flow = 'Concept'; +$lang->custom->working = 'Mode'; +$lang->custom->select = 'Choix du Concept'; +$lang->custom->branch = 'Multi-Branches'; +$lang->custom->owner = 'Propriétaire'; +$lang->custom->module = 'Module'; +$lang->custom->section = 'Section'; +$lang->custom->lang = 'Langue'; +$lang->custom->setPublic = 'Set Public'; +$lang->custom->required = 'Champ Obligatoire'; +$lang->custom->score = 'Point'; +$lang->custom->timezone = 'Timezone'; +$lang->custom->scoreReset = 'Réinit Points'; +$lang->custom->scoreTitle = 'Fonctionnalité des Points'; +$lang->custom->projectTitle = 'Fonctionnalité des ' . $lang->projectCommon; +$lang->custom->productTitle = 'Fonctionnalité des ' . $lang->productCommon; +$lang->custom->project = $lang->projectCommon; +$lang->custom->product = $lang->productCommon; +$lang->custom->closedProject = 'Closed ' . $lang->projectCommon; +$lang->custom->closedProduct = 'Closed ' . $lang->productCommon; $lang->custom->object['story'] = 'Story'; $lang->custom->object['task'] = 'Tâche'; @@ -78,7 +84,7 @@ $lang->custom->user->fields['statusList'] = 'Statut'; $lang->custom->user->fields['contactField'] = 'Contact'; $lang->custom->user->fields['deleted'] = 'Parti'; -$lang->custom->system = array('flow', 'working', 'required', 'score'); +$lang->custom->system = array('flow', 'working', 'required', 'score', 'product', 'project'); $lang->custom->block->fields['closed'] = 'Bloc Fermé'; @@ -100,6 +106,8 @@ $lang->custom->notice->noClosedBlock = "Vous n'avez aucun bloc fermé défin $lang->custom->notice->required = 'Le champ sélectionné est obligatoire.'; $lang->custom->notice->conceptResult = 'Selon votre préférence, %s-%s peut être fixé pour vous. Utilisez %s + %s。'; $lang->custom->notice->conceptPath = 'Allez à Admin -> Custom -> Concept pour le paramétrer.'; +$lang->custom->notice->readOnlyOfProject = 'If Change Forbidden, any change on tasks, builds, efforts and stories of the closed project is also forbidden.'; +$lang->custom->notice->readOnlyOfProduct = 'If Change Forbidden, any change on stories, bugs, cases, efforts, releases and plans of the closed product is also forbidden.'; $lang->custom->notice->indexPage['product'] = "ZenTao 8.2+ possède une page d'accueil. Voulez-vous consulter la page d'accueil du produit ?"; $lang->custom->notice->indexPage['project'] = "ZenTao 8.2+ possède une page d'accueil. Voulez-vous consulter la page d'accueil du produit ?"; @@ -145,6 +153,12 @@ $lang->custom->page = ' Page'; $lang->custom->scoreStatus[1] = 'On'; $lang->custom->scoreStatus[0] = 'Off'; +$lang->custom->closedProjectStatus[1] = 'Change Forbidden'; +$lang->custom->closedProjectStatus[0] = 'Change Allowed'; + +$lang->custom->closedProductStatus[1] = 'Change Forbidden'; +$lang->custom->closedProductStatus[0] = 'Change Allowed'; + $lang->custom->moduleName['product'] = $lang->productCommon; $lang->custom->moduleName['productplan'] = 'Plan'; $lang->custom->moduleName['project'] = $lang->projectCommon; diff --git a/module/custom/lang/vi.php b/module/custom/lang/vi.php index 07b2a984c1..701bf485e0 100644 --- a/module/custom/lang/vi.php +++ b/module/custom/lang/vi.php @@ -1,24 +1,30 @@ custom->common = 'Tùy biến'; -$lang->custom->index = 'Trang chủ'; -$lang->custom->set = 'Tùy biến'; -$lang->custom->restore = 'Thiết lập lại'; -$lang->custom->key = 'Khóa'; -$lang->custom->value = 'Giá trị'; -$lang->custom->flow = 'Mô hình'; -$lang->custom->working = 'Chế độ'; -$lang->custom->select = 'Chọn mô hình'; -$lang->custom->branch = 'Multi-Branch'; -$lang->custom->owner = 'Sở hữu'; -$lang->custom->module = 'Module'; -$lang->custom->section = 'Section'; -$lang->custom->lang = 'Ngôn ngữ'; -$lang->custom->setPublic = 'Thiết lập Public'; -$lang->custom->required = 'Trường bắt buộc'; -$lang->custom->score = 'Điểm'; -$lang->custom->timezone = 'Timezone'; -$lang->custom->scoreReset = 'Thiết lập lại điểm'; -$lang->custom->scoreTitle = 'Tính năng điểm'; +$lang->custom->common = 'Tùy biến'; +$lang->custom->index = 'Trang chủ'; +$lang->custom->set = 'Tùy biến'; +$lang->custom->restore = 'Thiết lập lại'; +$lang->custom->key = 'Khóa'; +$lang->custom->value = 'Giá trị'; +$lang->custom->flow = 'Mô hình'; +$lang->custom->working = 'Chế độ'; +$lang->custom->select = 'Chọn mô hình'; +$lang->custom->branch = 'Multi-Branch'; +$lang->custom->owner = 'Sở hữu'; +$lang->custom->module = 'Module'; +$lang->custom->section = 'Section'; +$lang->custom->lang = 'Ngôn ngữ'; +$lang->custom->setPublic = 'Thiết lập Public'; +$lang->custom->required = 'Trường bắt buộc'; +$lang->custom->score = 'Điểm'; +$lang->custom->timezone = 'Timezone'; +$lang->custom->scoreReset = 'Thiết lập lại điểm'; +$lang->custom->scoreTitle = 'Tính năng điểm'; +$lang->custom->projectTitle = $lang->projectCommon . ' Feature'; +$lang->custom->productTitle = $lang->productCommon . ' Feature'; +$lang->custom->project = $lang->projectCommon; +$lang->custom->product = $lang->productCommon; +$lang->custom->closedProject = 'Closed ' . $lang->projectCommon; +$lang->custom->closedProduct = 'Closed ' . $lang->productCommon; $lang->custom->object['story'] = 'Câu chuyện'; $lang->custom->object['task'] = 'Nhiệm vụ'; @@ -78,7 +84,7 @@ $lang->custom->user->fields['statusList'] = 'Tình trạng'; $lang->custom->user->fields['contactField'] = 'Liên hệ có sẵn'; $lang->custom->user->fields['deleted'] = 'Người dùng đã xóa'; -$lang->custom->system = array('flow', 'working', 'required', 'score'); +$lang->custom->system = array('flow', 'working', 'required', 'score', 'product', 'project'); $lang->custom->block->fields['closed'] = 'Đã đóng Block'; @@ -100,6 +106,8 @@ $lang->custom->notice->noClosedBlock = 'Bạn không có blocks mà đã đ $lang->custom->notice->required = 'Trường được chọn là bắt buộc.'; $lang->custom->notice->conceptResult = 'According to your preference, %s-%s is set for you. Sử dụng %s + %s.'; $lang->custom->notice->conceptPath = 'Vào Quản trị -> Tùy biến -> Mô hình để thiết lập nó.'; +$lang->custom->notice->readOnlyOfProject = 'If Change Forbidden, any change on tasks, builds, efforts and stories of the closed project is also forbidden.'; +$lang->custom->notice->readOnlyOfProduct = 'If Change Forbidden, any change on stories, bugs, cases, efforts, releases and plans of the closed product is also forbidden.'; $lang->custom->notice->indexPage['product'] = "ZenTao 8.2+ đã có trang Sản phẩm. Bạn có muốn tới trang Sản phẩm?"; $lang->custom->notice->indexPage['project'] = "ZenTao 8.2+ has Project Home. Bạn có muốn go to Project Home?"; @@ -145,6 +153,12 @@ $lang->custom->page = ''; $lang->custom->scoreStatus[1] = 'On'; $lang->custom->scoreStatus[0] = 'Off'; +$lang->custom->closedProjectStatus[1] = 'Change Forbidden'; +$lang->custom->closedProjectStatus[0] = 'Change Allowed'; + +$lang->custom->closedProductStatus[1] = 'Change Forbidden'; +$lang->custom->closedProductStatus[0] = 'Change Allowed'; + $lang->custom->moduleName['product'] = $lang->productCommon; $lang->custom->moduleName['productplan'] = 'Kế hoạch'; $lang->custom->moduleName['project'] = $lang->projectCommon; diff --git a/module/custom/lang/zh-cn.php b/module/custom/lang/zh-cn.php index 5dea113bf1..86bbbe20d4 100644 --- a/module/custom/lang/zh-cn.php +++ b/module/custom/lang/zh-cn.php @@ -1,24 +1,30 @@ custom->common = '自定义'; -$lang->custom->index = '首页'; -$lang->custom->set = '自定义配置'; -$lang->custom->restore = '恢复默认'; -$lang->custom->key = '键'; -$lang->custom->value = '值'; -$lang->custom->flow = '流程'; -$lang->custom->working = '工作方式'; -$lang->custom->select = '请选择流程:'; -$lang->custom->branch = '多分支'; -$lang->custom->owner = '所有者'; -$lang->custom->module = '模块'; -$lang->custom->section = '附加部分'; -$lang->custom->lang = '所属语言'; -$lang->custom->setPublic = '设为公共'; -$lang->custom->required = '必填项'; -$lang->custom->score = '积分'; -$lang->custom->timezone = '时区'; -$lang->custom->scoreReset = '重置积分'; -$lang->custom->scoreTitle = '积分功能'; +$lang->custom->common = '自定义'; +$lang->custom->index = '首页'; +$lang->custom->set = '自定义配置'; +$lang->custom->restore = '恢复默认'; +$lang->custom->key = '键'; +$lang->custom->value = '值'; +$lang->custom->flow = '流程'; +$lang->custom->working = '工作方式'; +$lang->custom->select = '请选择流程:'; +$lang->custom->branch = '多分支'; +$lang->custom->owner = '所有者'; +$lang->custom->module = '模块'; +$lang->custom->section = '附加部分'; +$lang->custom->lang = '所属语言'; +$lang->custom->setPublic = '设为公共'; +$lang->custom->required = '必填项'; +$lang->custom->score = '积分'; +$lang->custom->timezone = '时区'; +$lang->custom->scoreReset = '重置积分'; +$lang->custom->scoreTitle = '积分功能'; +$lang->custom->projectTitle = $lang->projectCommon . '功能'; +$lang->custom->productTitle = $lang->productCommon . '功能'; +$lang->custom->project = $lang->projectCommon; +$lang->custom->product = $lang->productCommon; +$lang->custom->closedProject = '已关闭' . $lang->projectCommon; +$lang->custom->closedProduct = '已关闭' . $lang->productCommon; $lang->custom->object['story'] = $lang->storyCommon; $lang->custom->object['task'] = '任务'; @@ -78,7 +84,7 @@ $lang->custom->user->fields['statusList'] = '状态'; $lang->custom->user->fields['contactField'] = '可用联系方式'; $lang->custom->user->fields['deleted'] = '列出已删除用户'; -$lang->custom->system = array('flow', 'working', 'required', 'score'); +$lang->custom->system = array('flow', 'working', 'required', 'score', 'product', 'project'); $lang->custom->block->fields['closed'] = '关闭的区块'; @@ -100,6 +106,8 @@ $lang->custom->notice->noClosedBlock = '没有永久关闭的区 $lang->custom->notice->required = '页面提交时,选中的字段必填'; $lang->custom->notice->conceptResult = '我们已经根据您的选择为您设置了 %s-%s 模式,使用%s + %s。'; $lang->custom->notice->conceptPath = '您可以在:后台 -> 自定义 -> 流程页面修改。'; +$lang->custom->notice->readOnlyOfProject = '禁止修改后,已关闭' . $lang->projectCommon . '下的任务、版本、日志以及关联需求都禁止修改。'; +$lang->custom->notice->readOnlyOfProduct = '禁止修改后,已关闭' . $lang->productCommon . '下的' . $lang->storyCommon . '、Bug、用例、日志、发布、计划都禁止修改。'; $lang->custom->notice->indexPage['product'] = "从8.2版本起增加了产品主页视图,是否默认进入产品主页?"; $lang->custom->notice->indexPage['project'] = "从8.2版本起增加了项目主页视图,是否默认进入项目主页?"; @@ -145,6 +153,12 @@ $lang->custom->page = '页面'; $lang->custom->scoreStatus[1] = '开启'; $lang->custom->scoreStatus[0] = '关闭'; +$lang->custom->closedProjectStatus[1] = '禁止修改'; +$lang->custom->closedProjectStatus[0] = '允许修改'; + +$lang->custom->closedProductStatus[1] = '禁止修改'; +$lang->custom->closedProductStatus[0] = '允许修改'; + $lang->custom->moduleName['product'] = $lang->productCommon; $lang->custom->moduleName['productplan'] = '计划'; $lang->custom->moduleName['project'] = $lang->projectCommon; diff --git a/module/custom/lang/zh-tw.php b/module/custom/lang/zh-tw.php index c279e1c9f0..f08b4a3b39 100644 --- a/module/custom/lang/zh-tw.php +++ b/module/custom/lang/zh-tw.php @@ -1,24 +1,30 @@ custom->common = '自定義'; -$lang->custom->index = '首頁'; -$lang->custom->set = '自定義配置'; -$lang->custom->restore = '恢復預設'; -$lang->custom->key = '鍵'; -$lang->custom->value = '值'; -$lang->custom->flow = '流程'; -$lang->custom->working = '工作方式'; -$lang->custom->select = '請選擇流程:'; -$lang->custom->branch = '多分支'; -$lang->custom->owner = '所有者'; -$lang->custom->module = '模組'; -$lang->custom->section = '附加部分'; -$lang->custom->lang = '所屬語言'; -$lang->custom->setPublic = '設為公共'; -$lang->custom->required = '必填項'; -$lang->custom->score = '積分'; -$lang->custom->timezone = '時區'; -$lang->custom->scoreReset = '重置積分'; -$lang->custom->scoreTitle = '積分功能'; +$lang->custom->common = '自定義'; +$lang->custom->index = '首頁'; +$lang->custom->set = '自定義配置'; +$lang->custom->restore = '恢復預設'; +$lang->custom->key = '鍵'; +$lang->custom->value = '值'; +$lang->custom->flow = '流程'; +$lang->custom->working = '工作方式'; +$lang->custom->select = '請選擇流程:'; +$lang->custom->branch = '多分支'; +$lang->custom->owner = '所有者'; +$lang->custom->module = '模組'; +$lang->custom->section = '附加部分'; +$lang->custom->lang = '所屬語言'; +$lang->custom->setPublic = '設為公共'; +$lang->custom->required = '必填項'; +$lang->custom->score = '積分'; +$lang->custom->timezone = '時區'; +$lang->custom->scoreReset = '重置積分'; +$lang->custom->scoreTitle = '積分功能'; +$lang->custom->projectTitle = $lang->projectCommon . '功能'; +$lang->custom->productTitle = $lang->productCommon . '功能'; +$lang->custom->project = $lang->projectCommon; +$lang->custom->product = $lang->productCommon; +$lang->custom->closedProject = '已關閉' . $lang->projectCommon; +$lang->custom->closedProduct = '已關閉' . $lang->productCommon; $lang->custom->object['story'] = $lang->storyCommon; $lang->custom->object['task'] = '任務'; @@ -78,7 +84,7 @@ $lang->custom->user->fields['statusList'] = '狀態'; $lang->custom->user->fields['contactField'] = '可用聯繫方式'; $lang->custom->user->fields['deleted'] = '列出已刪除用戶'; -$lang->custom->system = array('flow', 'working', 'required', 'score'); +$lang->custom->system = array('flow', 'working', 'required', 'score', 'product', 'project'); $lang->custom->block->fields['closed'] = '關閉的區塊'; @@ -100,6 +106,8 @@ $lang->custom->notice->noClosedBlock = '沒有永久關閉的區 $lang->custom->notice->required = '頁面提交時,選中的欄位必填'; $lang->custom->notice->conceptResult = '我們已經根據您的選擇為您設置了 %s-%s 模式,使用%s + %s。'; $lang->custom->notice->conceptPath = '您可以在:後台 -> 自定義 -> 流程頁面修改。'; +$lang->custom->notice->readOnlyOfProject = '禁止修改後,已關閉' . $lang->projectCommon . '下的任務、版本、日誌以及關聯需求都禁止修改。'; +$lang->custom->notice->readOnlyOfProduct = '禁止修改後,已關閉' . $lang->productCommon . '下的' . $lang->storyCommon . '、Bug、用例、日誌、發布、計劃都禁止修改。'; $lang->custom->notice->indexPage['product'] = "從8.2版本起增加了產品主頁視圖,是否預設進入產品主頁?"; $lang->custom->notice->indexPage['project'] = "從8.2版本起增加了項目主頁視圖,是否預設進入項目主頁?"; @@ -145,6 +153,12 @@ $lang->custom->page = '頁面'; $lang->custom->scoreStatus[1] = '開啟'; $lang->custom->scoreStatus[0] = '關閉'; +$lang->custom->closedProjectStatus[1] = '禁止修改'; +$lang->custom->closedProjectStatus[0] = '允許修改'; + +$lang->custom->closedProductStatus[1] = '禁止修改'; +$lang->custom->closedProductStatus[0] = '允許修改'; + $lang->custom->moduleName['product'] = $lang->productCommon; $lang->custom->moduleName['productplan'] = '計劃'; $lang->custom->moduleName['project'] = $lang->projectCommon; diff --git a/module/my/view/bug.html.php b/module/my/view/bug.html.php index 6817643438..f6943b3b9a 100644 --- a/module/my/view/bug.html.php +++ b/module/my/view/bug.html.php @@ -73,11 +73,12 @@ ?>
+