diff --git a/module/build/control.php b/module/build/control.php index 745306a61f..36f4ea9d61 100644 --- a/module/build/control.php +++ b/module/build/control.php @@ -212,6 +212,9 @@ class build extends control $build = $this->build->getById((int)$buildID, true); if(!$build) die(js::error($this->lang->notFound) . js::locate('back')); + /* Determines whether an object is editable. */ + $changeAllowed = !common::checkParentObjectClosed('build', $build); + $product = $this->loadModel('product')->getById($build->product); if($product->type != 'normal') $this->lang->product->branch = sprintf($this->lang->product->branch, $this->lang->product->branchName[$product->type]); @@ -269,6 +272,7 @@ class build extends control $this->view->type = $type; $this->view->bugPager = $bugPager; $this->view->branchName = $build->productType == 'normal' ? '' : $this->loadModel('branch')->getById($build->branch); + $this->view->changeAllowed = $changeAllowed; $this->display(); } diff --git a/module/build/view/view.html.php b/module/build/view/view.html.php index da89fa4ad9..bd53d2f43f 100644 --- a/module/build/view/view.html.php +++ b/module/build/view/view.html.php @@ -48,7 +48,7 @@ tbody tr td:first-child input{display:none;}
deleted) + if(!$build->deleted and $changeAllowed) { echo $this->buildOperateMenu($build, 'view'); @@ -91,13 +91,13 @@ tbody tr td:first-child input{display:none;}
' id='stories'> - +
id, \"story\")", ' ' . $lang->build->linkStory, '', "class='btn btn-primary'");?>
id}")?>' id='linkedStoriesForm'> - + id}&type=story&link=$link¶m=$param&orderBy=%s";?> @@ -146,7 +146,7 @@ tbody tr td:first-child input{display:none;}
story->stageList[$story->stage];?> id&story=$story->id"); echo html::a("javascript:ajaxDelete(\"$unlinkURL\", \"storyList\", confirmUnlinkStory)", '', '', "class='btn btn-icon' title='{$lang->build->unlinkStory}'"); @@ -176,13 +176,13 @@ tbody tr td:first-child input{display:none;}
' id='bugs'> - +
id, \"bug\")", ' ' . $lang->build->linkBug, '', "class='btn btn-primary'");?>
id");?>" id='linkedBugsForm'> - + id}&type=bug&link=$link¶m=$param&orderBy=%s";?> @@ -227,7 +227,7 @@ tbody tr td:first-child input{display:none;} diff --git a/module/project/view/manageproducts.html.php b/module/project/view/manageproducts.html.php index 20d06bb628..0275b6c339 100644 --- a/module/project/view/manageproducts.html.php +++ b/module/project/view/manageproducts.html.php @@ -57,7 +57,7 @@
- + config->global->closedProjectStatus) or $project->status != 'closed') echo html::submitButton();?>
diff --git a/module/project/view/story.html.php b/module/project/view/story.html.php index 7c6ed0ad31..ddba443011 100644 --- a/module/project/view/story.html.php +++ b/module/project/view/story.html.php @@ -46,37 +46,40 @@ id", " " . $lang->story->export, '', "class='btn btn-link export'"); - $this->lang->story->create = $this->lang->project->createStory; - if($productID and !$this->loadModel('story')->checkForceReview()) + if(empty($this->config->global->closedProjectStatus) or $project->status != 'closed') { - echo "'; - } + $this->lang->story->create = $this->lang->project->createStory; + if($productID and !$this->loadModel('story')->checkForceReview()) + { + echo "'; + } - if(commonModel::isTutorialMode()) - { - $wizardParams = helper::safe64Encode("project=$project->id"); - echo html::a($this->createLink('tutorial', 'wizard', "module=project&method=linkStory¶ms=$wizardParams"), " {$lang->project->linkStory}",'', "class='btn btn-link link-story-btn'"); - } - else - { - echo "'; + if(commonModel::isTutorialMode()) + { + $wizardParams = helper::safe64Encode("project=$project->id"); + echo html::a($this->createLink('tutorial', 'wizard', "module=project&method=linkStory¶ms=$wizardParams"), " {$lang->project->linkStory}",'', "class='btn btn-link link-story-btn'"); + } + else + { + echo "'; + } } ?> diff --git a/module/project/view/task.html.php b/module/project/view/task.html.php index 080a0963e8..1d3a45b21c 100644 --- a/module/project/view/task.html.php +++ b/module/project/view/task.html.php @@ -118,6 +118,7 @@ js::set('foldAll', $lang->project->treeLevel['root']); + config->global->closedProjectStatus) or $project->status != 'closed'):?> + project = $projectID; diff --git a/module/project/view/team.html.php b/module/project/view/team.html.php index 2335c0bab7..4d9c6a7a57 100644 --- a/module/project/view/team.html.php +++ b/module/project/view/team.html.php @@ -18,14 +18,17 @@
id"); - echo html::a($this->createLink('tutorial', 'wizard', "module=project&method=manageMembers¶ms=$wizardParams"), " " . $lang->project->manageMembers, '', "class='btn btn-primary manage-team-btn'"); - } - else - { - if(!empty($app->user->admin) or empty($app->user->rights['rights']['my']['limited'])) common::printLink('project', 'manageMembers', "projectID=$project->id", " " . $lang->project->manageMembers, '', "class='btn btn-primary manage-team-btn'"); + if(commonModel::isTutorialMode()) + { + $wizardParams = helper::safe64Encode("projectID=$project->id"); + echo html::a($this->createLink('tutorial', 'wizard', "module=project&method=manageMembers¶ms=$wizardParams"), " " . $lang->project->manageMembers, '', "class='btn btn-primary manage-team-btn'"); + } + else + { + if(!empty($app->user->admin) or empty($app->user->rights['rights']['my']['limited'])) common::printLink('project', 'manageMembers', "projectID=$project->id", " " . $lang->project->manageMembers, '', "class='btn btn-primary manage-team-btn'"); + } } ?>
@@ -52,7 +55,9 @@ + + @@ -72,6 +77,7 @@ + + diff --git a/module/project/view/testtask.html.php b/module/project/view/testtask.html.php index e377e56e56..79e46fe464 100644 --- a/module/project/view/testtask.html.php +++ b/module/project/view/testtask.html.php @@ -29,7 +29,9 @@
+ config->global->closedProjectStatus) or $project->status != 'closed'):?> " . $lang->testtask->create, '', "class='btn btn-primary'");?> +
diff --git a/module/project/view/tree.html.php b/module/project/view/tree.html.php index ab4d137c2d..28ca9dfbaa 100644 --- a/module/project/view/tree.html.php +++ b/module/project/view/tree.html.php @@ -32,6 +32,7 @@ $link = common::hasPriv('task', 'report', $project) ? $this->createLink('task', 'report', "project=$projectID&browseType=$browseType") : '#'; echo html::a($link, " {$lang->task->reportChart}", '', 'class="btn btn-link"'); ?> + config->global->closedProjectStatus) or $project->status != 'closed'):?>
+ createLink('task', 'export', "project=$projectID&orderBy=$orderBy&type=tree") : '#'; diff --git a/module/release/view/browse.html.php b/module/release/view/browse.html.php index 2e94f9fa9c..08534fa6f5 100644 --- a/module/release/view/browse.html.php +++ b/module/release/view/browse.html.php @@ -22,7 +22,9 @@ ?>
+ config->global->closedProductStatus) or $product->status != 'closed'):?> id&branch=$branch", " {$lang->release->create}", '', "class='btn btn-primary'");?> +
diff --git a/module/release/view/view.html.php b/module/release/view/view.html.php index adc95ec578..eb37f65004 100644 --- a/module/release/view/view.html.php +++ b/module/release/view/view.html.php @@ -31,7 +31,9 @@
deleted) + $isClosedProduct = common::checkParentObjectClosed('release', $release); + + if(!$release->deleted and !$isClosedProduct) { echo $this->buildOperateMenu($release, 'view'); @@ -64,7 +66,7 @@
' id='stories'> - +
id}, \"story\")", ' ' . $lang->release->linkStory, '', "class='btn btn-primary'");?>
@@ -78,7 +80,7 @@
resolvedDate, 5, 11)?> id&bug=$bug->id"); echo html::a("javascript:ajaxDelete(\"$unlinkURL\", \"bugList\", confirmUnlinkBug)", '', '', "class='btn btn-icon' title='{$lang->build->unlinkBug}'"); diff --git a/module/doc/control.php b/module/doc/control.php index 6e71529464..17242bec45 100644 --- a/module/doc/control.php +++ b/module/doc/control.php @@ -754,7 +754,12 @@ class doc extends control setcookie('docFilesViewType', $viewType, $this->config->cookieLife, $this->config->webRoot, '', false, true); $table = $type == 'product' ? TABLE_PRODUCT : TABLE_PROJECT; - $object = $this->dao->select('id,name')->from($table)->where('id')->eq($objectID)->fetch(); + $object = $this->dao->select('id,name,status')->from($table)->where('id')->eq($objectID)->fetch(); + + /* Determines whether an object is editable. */ + $changeAllowed = true; + if($type == 'product' and !empty($this->config->global->closedProductStatus) and $object->status == 'closed') $changeAllowed = false; + if($type == 'project' and !empty($this->config->global->closedProjectStatus) and $object->status == 'closed') $changeAllowed = false; /* According the from, set menus. */ if($this->from == 'product') @@ -799,17 +804,18 @@ class doc extends control $this->app->loadClass('pager', $static = true); $pager = new pager($recTotal, $recPerPage, $pageID); - $this->view->title = $object->name; - $this->view->position[] = $object->name; + $this->view->title = $object->name; + $this->view->position[] = $object->name; - $this->view->type = $type; - $this->view->object = $object; - $this->view->files = $this->doc->getLibFiles($type, $objectID, $orderBy, $pager); - $this->view->users = $this->loadModel('user')->getPairs('noletter'); - $this->view->pager = $pager; - $this->view->viewType = $viewType; - $this->view->orderBy = $orderBy; - $this->view->objectID = $objectID; + $this->view->type = $type; + $this->view->object = $object; + $this->view->files = $this->doc->getLibFiles($type, $objectID, $orderBy, $pager); + $this->view->users = $this->loadModel('user')->getPairs('noletter'); + $this->view->pager = $pager; + $this->view->viewType = $viewType; + $this->view->orderBy = $orderBy; + $this->view->objectID = $objectID; + $this->view->changeAllowed = $changeAllowed; $this->display(); } diff --git a/module/doc/view/browse.html.php b/module/doc/view/browse.html.php index 5d97f8c762..15c838008d 100644 --- a/module/doc/view/browse.html.php +++ b/module/doc/view/browse.html.php @@ -42,7 +42,7 @@ var browseType = ''; ", '', "title='{$lang->doc->browseTypeList['grid']}' class='btn btn-icon'");?> ", '', "title='{$lang->doc->browseTypeList['list']}' class='btn btn-icon text-primary'");?> - + diff --git a/module/doc/view/showfiles.html.php b/module/doc/view/showfiles.html.php index 479aff0ee0..70c7d48be7 100644 --- a/module/doc/view/showfiles.html.php +++ b/module/doc/view/showfiles.html.php @@ -135,7 +135,7 @@ diff --git a/module/product/view/browse.html.php b/module/product/view/browse.html.php index f27fa76027..34ca22249b 100644 --- a/module/product/view/browse.html.php +++ b/module/product/view/browse.html.php @@ -94,6 +94,7 @@ js::set('foldAll', $lang->project->treeLevel['root']); ?> + config->global->closedProductStatus) or $product->status != 'closed'):?> createLink('story', 'batchCreate', "productID=$productID&branch=$branch&moduleID=$moduleID"), " {$lang->story->batchCreate}", '', "class='btn btn btn-secondary'");?> project->treeLevel['root']); +
diff --git a/module/productplan/view/browse.html.php b/module/productplan/view/browse.html.php index b2b3345ef7..5e17ac3634 100644 --- a/module/productplan/view/browse.html.php +++ b/module/productplan/view/browse.html.php @@ -24,7 +24,9 @@
+ config->global->closedProductStatus) or $product->status != 'closed'):?> id&branch=$branch", " {$lang->productplan->create}", '', "class='btn btn-primary'");?> +
@@ -32,7 +34,7 @@

productplan->noPlan;?> - + config->global->closedProductStatus) or $product->status != 'closed') and common::hasPriv('productplan', 'create')):?> createLink('productplan', 'create', "productID=$product->id&branch=$branch"), " " . $lang->productplan->create, '', "class='btn btn-info'");?>

diff --git a/module/productplan/view/view.html.php b/module/productplan/view/view.html.php index 094cdb4773..80d6da9e63 100644 --- a/module/productplan/view/view.html.php +++ b/module/productplan/view/view.html.php @@ -42,9 +42,9 @@ { echo $this->buildOperateMenu($plan, 'view'); - if(common::hasPriv('productplan', 'create') and $plan->parent <= '0') echo html::a($this->createLink('productplan', 'create', "product={$plan->product}&branch={$plan->branch}&parent={$plan->id}"), " " . $this->lang->productplan->children , '', "class='btn btn-link' title='{$this->lang->productplan->children}'"); - if(common::hasPriv('productplan', 'edit')) echo html::a($this->createLink('productplan', 'edit', "planID=$plan->id"), " " . $this->lang->edit, '', "class='btn btn-link' title='{$this->lang->edit}'"); - if(common::hasPriv('productplan', 'delete') and $plan->parent >= 0) echo html::a($this->createLink('productplan', 'delete', "planID=$plan->id"), " " . $this->lang->delete, '', "class='btn btn-link' title='{$this->lang->delete}' target='hiddenwin'"); + if(common::hasPriv('productplan', 'create', $plan) and $plan->parent <= '0') echo html::a($this->createLink('productplan', 'create', "product={$plan->product}&branch={$plan->branch}&parent={$plan->id}"), " " . $this->lang->productplan->children , '', "class='btn btn-link' title='{$this->lang->productplan->children}'"); + if(common::hasPriv('productplan', 'edit', $plan)) echo html::a($this->createLink('productplan', 'edit', "planID=$plan->id"), " " . $this->lang->edit, '', "class='btn btn-link' title='{$this->lang->edit}'"); + if(common::hasPriv('productplan', 'delete', $plan) and $plan->parent >= 0) echo html::a($this->createLink('productplan', 'delete', "planID=$plan->id"), " " . $this->lang->delete, '', "class='btn btn-link' title='{$this->lang->delete}' target='hiddenwin'"); } ?>
@@ -62,7 +62,7 @@
'>
- deleted and $plan->parent >= 0):?> + deleted and $plan->parent >= 0 and !common::checkParentObjectClosed('plan', $plan)):?>
- parent >= 0) echo html::a("javascript:showLink($plan->id, \"story\")", ' ' . $lang->productplan->linkStory, '', "class='btn btn-primary'");?> + parent >= 0) echo html::a("javascript:showLink($plan->id, \"story\")", ' ' . $lang->productplan->linkStory, '', "class='btn btn-primary'");?>
@@ -355,7 +355,7 @@
'> - +
id, \"bug\")", ' ' . $lang->productplan->linkBug, '', "class='btn btn-primary'");?>
diff --git a/module/project/control.php b/module/project/control.php index 3449b2619c..db36a93b18 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -945,6 +945,7 @@ class project extends control $this->view->title = $this->projects[$projectID] . $this->lang->colon . $this->lang->testtask->common; $this->view->position[] = html::a($this->createLink('project', 'testtask', "projectID=$projectID"), $this->projects[$projectID]); $this->view->position[] = $this->lang->testtask->common; + $this->view->project = $project; $this->view->projectID = $projectID; $this->view->projectName = $this->projects[$projectID]; $this->view->pager = $pager; @@ -1047,12 +1048,17 @@ class project extends control $project = $this->commonAction($projectID); $projectID = $project->id; + /* Determines whether an object is editable. */ + $changeAllowed = true; + if(!empty($this->config->global->closedProjectStatus) and $project->status == 'closed') $changeAllowed = false; + $title = $project->name . $this->lang->colon . $this->lang->project->team; $position[] = html::a($this->createLink('project', 'browse', "projectID=$projectID"), $project->name); $position[] = $this->lang->project->team; - $this->view->title = $title; - $this->view->position = $position; + $this->view->title = $title; + $this->view->position = $position; + $this->view->changeAllowed = $changeAllowed; $this->display(); } @@ -1923,6 +1929,7 @@ class project extends control $this->view->title = $title; $this->view->position = $position; $this->view->allProducts = $allProducts; + $this->view->project = $project; $this->view->linkedProducts = $linkedProducts; $this->view->branchGroups = $this->loadModel('branch')->getByProducts(array_keys($allProducts), '', $linkedBranches); diff --git a/module/project/view/bug.html.php b/module/project/view/bug.html.php index 0c1f2be39e..8e5f21e524 100644 --- a/module/project/view/bug.html.php +++ b/module/project/view/bug.html.php @@ -22,7 +22,9 @@
id", " " . $lang->bug->export, '', "class='btn btn-link export'");?> + config->global->closedProjectStatus) or $project->status != 'closed'):?> id", " " . $lang->bug->create, '', "class='btn btn-primary'");?> +
diff --git a/module/project/view/build.html.php b/module/project/view/build.html.php index 1d16608c6f..3f87eb6e43 100644 --- a/module/project/view/build.html.php +++ b/module/project/view/build.html.php @@ -29,7 +29,9 @@
project->byQuery;?>
+ config->global->closedProjectStatus) or $project->status != 'closed'):?> id", " " . $lang->build->create, '', "class='btn btn-primary'");?> +
diff --git a/module/project/view/burn.html.php b/module/project/view/burn.html.php index 630791edba..c93eb2c1d2 100644 --- a/module/project/view/burn.html.php +++ b/module/project/view/burn.html.php @@ -25,7 +25,7 @@ common::printLink('project', 'computeBurn', 'reload=yes', ' ' . $lang->project->computeBurn, 'hiddenwin', "title='{$lang->project->computeBurn}{$lang->project->burn}' class='btn btn-primary' id='computeBurn'"); echo '
'; echo html::a($this->createLink('project', 'burn', "projectID=$projectID&type=$weekend&interval=$interval"), $lang->project->$weekend, '', "class='btn btn-link'"); - common::printLink('project', 'fixFirst', "project=$project->id", $lang->project->fixFirst, '', "class='btn btn-link iframe' data-width='700'"); + if(empty($this->config->global->closedProjectStatus) or $project->status != 'closed') common::printLink('project', 'fixFirst', "project=$project->id", $lang->project->fixFirst, '', "class='btn btn-link iframe' data-width='700'"); echo $lang->project->howToUpdateBurn; ?> diff --git a/module/project/view/grouptask.html.php b/module/project/view/grouptask.html.php index 9d1c7dd549..9ec86748fd 100644 --- a/module/project/view/grouptask.html.php +++ b/module/project/view/grouptask.html.php @@ -53,6 +53,7 @@ ?>
+ config->global->closedProjectStatus) or $project->status != 'closed'):?>
+ project = $projectID; @@ -207,9 +209,11 @@
task->typeList, $task->type);?> '>deadline, 0, 4) > 0) echo $task->deadline;?> + config->global->closedProjectStatus) or $project->status != 'closed'):?> project&taskID=$task->id", $task, 'list', '', '', 'iframe', true);?> id", '', 'list');?> project&taskid=$task->id", '', 'list', 'trash', 'hiddenwin');?> +
team->hours;?> team->totalHours;?> team->limited;?> actions;?>
hours . $lang->project->workHour;?> project->workHour;?> team->limitedList[$member->limited];?>
- +
@@ -99,7 +101,7 @@ createLink('story', 'view', "storyID=$story->id", '', true);?>
- +
@@ -122,7 +124,7 @@
story->stageList[$story->stage];?> createLink('release', 'unlinkStory', "releaseID=$release->id&story=$story->id"); echo html::a("javascript:ajaxDelete(\"$unlinkURL\", \"storyList\", confirmUnlinkStory)", '', '', "class='btn' title='{$lang->release->unlinkStory}'"); @@ -134,7 +136,7 @@
- +
@@ -194,7 +196,7 @@ createLink('bug', 'view', "bugID=$bug->id", '', true);?>
- +
@@ -212,7 +214,7 @@
resolvedDate, 5, 11)?> createLink('release', 'unlinkBug', "releaseID=$release->id&bug=$bug->id"); echo html::a("javascript:ajaxDelete(\"$unlinkURL\", \"bugList\", confirmUnlinkBug)", '', '', "class='btn' title='{$lang->release->unlinkBug}'"); @@ -224,7 +226,7 @@