diff --git a/module/build/model.php b/module/build/model.php index 06a61c1dc0..e82eb202e7 100644 --- a/module/build/model.php +++ b/module/build/model.php @@ -523,20 +523,54 @@ class buildModel extends model * * @param object $build * @param string $type + * @param string $extra * @access public * @return string */ - public function buildOperateMenu($build, $type = 'view') + public function buildOperateMenu($build, $type = 'view', $extra = '') { - $canBeChanged = common::canBeChanged('build', $build); - if($build->deleted || !$canBeChanged) return ''; + $extraParams = array(); + if($extra) parse_str($extra, $extraParams); $menu = ''; $params = "buildID=$build->id"; - $menu .= $this->buildFlowMenu('build', $build, 'view', 'direct'); - $menu .= $this->buildMenu('build', 'edit', $params, $build, $type); - $menu .= $this->buildMenu('build', 'delete', $params, $build, $type, 'trash', 'hiddenwin'); + global $app; + $tab = $app->tab; + + if($type == 'browse') + { + if(common::hasPriv('build', 'linkstory') and common::hasPriv('build', 'view') and common::canBeChanged('build', $build)) + { + echo html::a(helper::createLink('build', 'view', "{$params}&type=story&link=true"), "", '', "class='btn' title='{$this->lang->build->linkStory}' data-app='{$tab}'"); + } + $executionID = $tab == 'execution' ? $extraParams['executionID'] : $build->execution; + $menu .= $this->buildMenu('testtask', 'create', "product=$build->product&execution={$executionID}&build=$build->id", $build, $type, 'bullhorn', '', '', '', "data-app='{$tab}'"); + if($tab == 'execution') + { + $this->lang->execution->bug = $this->lang->execution->viewBug; + $menu .= $this->buildMenu('execution', 'bug', "execution={$extraParams['executionID']}&productID={$extraParams['productID']}&orderBy=status&build=$build->id", $build, $type); + } + if($tab == 'project') + { + $this->lang->build->view = $this->lang->project->bug; + $menu .= $this->buildMenu('build', 'view', "buildID=$build->id&type=generatedBug", $build, $type, 'bug', '', '', '', "data-app='project'"); + } + $menu .= $this->buildMenu('build', 'edit', $params, $build, $type); + $menu .= $this->buildMenu('build', 'delete', $params, $build, $type, 'trash', 'hiddenwin'); + } + else + { + $canBeChanged = common::canBeChanged('build', $build); + if($build->deleted || !$canBeChanged) return ''; + + $menu .= $this->buildFlowMenu('build', $build, 'view', 'direct'); + + $editClickable = $this->buildMenu('build', 'edit', $params, $build, $type, '', '', '', '', '', '', false); + $deleteClickable = $this->buildMenu('build', 'delete', $params, $build, $type, '', '', '', '', '', '', false); + if(common::hasPriv('build', 'edit') and $editClickable) echo html::a(helper::createLink('build', 'edit', $params), " " . $this->lang->edit, '', "class='btn btn-link' title='{$this->lang->build->edit}' data-app='{$app->tab}'"); + if(common::hasPriv('build', 'delete') and $deleteClickable) echo html::a(helper::createLink('build', 'delete', $params), " " . $this->lang->delete, '', "class='btn btn-link' title='{$this->lang->build->delete}' target='hiddenwin' data-app='{$app->tab}'"); + } return $menu; } diff --git a/module/execution/view/build.html.php b/module/execution/view/build.html.php index 8f39edef65..b74accd8c1 100644 --- a/module/execution/view/build.html.php +++ b/module/execution/view/build.html.php @@ -72,19 +72,7 @@ filePath, 'http') === 0 ? html::a($build->filePath) : $build->filePath;?> date?> builder);?> - - createLink('build', 'view', "buildID=$build->id&type=story&link=true"), "", '', "class='btn' title='{$lang->build->linkStory}'"); - } - common::printIcon('testtask', 'create', "product=$build->product&execution=$execution->id&build=$build->id", $build, 'list', 'bullhorn'); - $lang->execution->bug = $lang->execution->viewBug; - common::printIcon('execution', 'bug', "execution=$execution->id&productID=$productID&orderBy=status&build=$build->id", $build, 'list'); - common::printIcon('build', 'edit', "buildID=$build->id", $build, 'list'); - common::printIcon('build', 'delete', "buildID=$build->id", $build, 'list', 'trash', 'hiddenwin'); - ?> - + build->buildOperateMenu($build, 'browse', "executionID={$execution->id}&productID={$productID}");?> diff --git a/module/project/view/build.html.php b/module/project/view/build.html.php index 78c38c3cd6..1efdd1c355 100644 --- a/module/project/view/build.html.php +++ b/module/project/view/build.html.php @@ -71,23 +71,7 @@ filePath, 'http') === 0 ? html::a($build->filePath) : $build->filePath;?> date?> builder);?> - - createLink('build', 'view', "buildID=$build->id&type=story&link=true"), "", '', "class='btn' title='{$lang->build->linkStory}' data-app='project'"); - } - common::printIcon('testtask', 'create', "product=$build->product&executionID={$build->execution}&build=$build->id&projectID=$projectID", $build, 'list', 'bullhorn', '', '', '', "data-app='project'"); - $lang->build->view = $lang->project->bug; - common::printIcon('build', 'view', "buildID=$build->id&type=generatedBug", $build, 'list', 'bug', '', '', '', "data-app='project'"); - common::printIcon('build', 'edit', "buildID=$build->id", $build, 'list'); - if(common::hasPriv('build', 'delete', $build)) - { - $deleteURL = $this->createLink('build', 'delete', "buildID=$build->id&confirm=yes"); - echo html::a("###", '', '', "onclick='ajaxDelete(\"$deleteURL\", \"buildList\", confirmDelete)' class='btn' title='{$lang->build->delete}'"); - } - ?> - + build->buildOperateMenu($build, 'browse');?> diff --git a/module/projectrelease/model.php b/module/projectrelease/model.php index c775fe6994..50287537bd 100644 --- a/module/projectrelease/model.php +++ b/module/projectrelease/model.php @@ -226,4 +226,82 @@ class projectreleaseModel extends model if($action == 'notify') return $release->bugs or $release->stories; return true; } + + /** + * Build project release action menu. + * + * @param object $release + * @param string $type + * @access public + * @return string + */ + public function buildOperateMenu($release, $type = 'view') + { + $function = 'buildOperate' . ucfirst($type) . 'Menu'; + return $this->$function($release); + } + + /** + * Build project release view action menu. + * + * @param object $release + * @access public + * @return string + */ + public function buildOperateViewMenu($release) + { + $canBeChanged = common::canBeChanged('projectrelease', $release); + if($release->deleted || !$canBeChanged || isonlybody()) return ''; + + $menu = ''; + $params = "releaseID=$release->id"; + + if(common::hasPriv('projectrelease', 'changeStatus', $release)) + { + $changedStatus = $release->status == 'normal' ? 'terminate' : 'normal'; + $menu .= html::a(inlink('changeStatus', "$params&status=$changedStatus"), ' ' . $this->lang->release->changeStatusList[$changedStatus], 'hiddenwin', "class='btn btn-link' title='{$this->lang->release->changeStatusList[$changedStatus]}'"); + } + + $menu .= "
"; + $menu .= $this->buildFlowMenu('release', $release, 'view', 'direct'); + $menu .= "
"; + + $menu .= $this->buildMenu('projectrelease', 'edit', $params, $release, 'view'); + $menu .= $this->buildMenu('projectrelease', 'delete', $params, $release, 'view', 'trash', 'hiddenwin'); + + return $menu; + } + + /** + * Build project release browse action menu. + * + * @param object $release + * @access public + * @return string + */ + public function buildOperateBrowseMenu($release) + { + $canBeChanged = common::canBeChanged('projectrelease', $release); + if(!$canBeChanged) return ''; + + $menu = ''; + $params = "releaseID=$release->id"; + $changedStatus = $release->status == 'normal' ? 'terminate' : 'normal'; + + if(common::hasPriv('projectrelease', 'linkStory')) $menu .= html::a(inlink('view', "$params&type=story&link=true"), ' ', '', "class='btn' title='{$this->lang->release->linkStory}'"); + if(common::hasPriv('projectrelease', 'linkBug')) $menu .= html::a(inlink('view', "$params&type=bug&link=true"), ' ', '', "class='btn' title='{$this->lang->release->linkBug}'"); + $menu .= $this->buildMenu('projectrelease', 'changeStatus', "$params&status=$changedStatus", $release, 'browse', $release->status == 'normal' ? 'pause' : 'play', 'hiddenwin', '', '', '',$this->lang->release->changeStatusList[$changedStatus]); + $menu .= $this->buildMenu('projectrelease', 'edit', $params, $release, 'browse'); + $menu .= $this->buildMenu('projectrelease', 'notify', $params, $release, 'browse', 'bullhorn', '', 'iframe', true); + $clickable = $this->buildMenu('projectrelease', 'delete', $params, $release, 'browse', '', '', '', '', '', '', false); + if(common::hasPriv('projectrelease', 'delete', $release)) + { + $deleteURL = helper::createLink('projectrelease', 'delete', "$params&confirm=yes"); + $class = 'btn'; + if(!$clickable) $class .= ' disabled'; + $menu .= html::a("javascript:ajaxDelete(\"$deleteURL\", \"releaseList\", confirmDelete)", '', '', "class='{$class}' title='{$this->lang->release->delete}'"); + } + + return $menu; + } } diff --git a/module/projectrelease/view/browse.html.php b/module/projectrelease/view/browse.html.php index c6c01a9eb3..d1cdf912d6 100644 --- a/module/projectrelease/view/browse.html.php +++ b/module/projectrelease/view/browse.html.php @@ -55,7 +55,6 @@ - id"), sprintf('%03d', $release->id));?> @@ -73,27 +72,7 @@ " . $this->loadModel('flow')->getFieldValue($extendField, $release) . "";?> - - id&type=story&link=true"), ' ', '', "class='btn' title='{$lang->release->linkStory}'"); - if(common::hasPriv('projectrelease', 'linkBug')) echo html::a(inlink('view', "releaseID=$release->id&type=bug&link=true"), ' ', '', "class='btn' title='{$lang->release->linkBug}'"); - if(common::hasPriv('projectrelease', 'changeStatus', $release)) - { - $changedStatus = $release->status == 'normal' ? 'terminate' : 'normal'; - echo html::a($this->createLink('projectrelease', 'changeStatus', "releaseID=$release->id&status=$changedStatus"), ' ', 'hiddenwin', "class='btn' title='{$lang->release->changeStatusList[$changedStatus]}'"); - } - common::printIcon('projectrelease', 'edit', "release=$release->id", $release, 'list'); - common::printIcon('projectrelease', 'notify', "release=$release->id", $release, 'list', 'bullhorn', '', 'iframe', true); - if(common::hasPriv('projectrelease', 'delete', $release)) - { - $deleteURL = $this->createLink('projectrelease', 'delete', "releaseID=$release->id&confirm=yes"); - echo html::a("javascript:ajaxDelete(\"$deleteURL\", \"releaseList\", confirmDelete)", '', '', "class='btn' title='{$lang->release->delete}'"); - } - } - ?> - + projectrelease->buildOperateMenu($release, 'browse');?> diff --git a/module/projectrelease/view/view.html.php b/module/projectrelease/view/view.html.php index d131315007..4f6d1ce6e1 100644 --- a/module/projectrelease/view/view.html.php +++ b/module/projectrelease/view/view.html.php @@ -29,24 +29,8 @@ -
- deleted and $canBeChanged) - { - echo $this->buildOperateMenu($release, 'view'); - - if(common::hasPriv('projectrelease', 'changeStatus', $release)) - { - $changedStatus = $release->status == 'normal' ? 'terminate' : 'normal'; - echo html::a(inlink('changeStatus', "releaseID=$release->id&status=$changedStatus"), ' ' . $lang->release->changeStatusList[$changedStatus], 'hiddenwin', "class='btn btn-link' title='{$lang->release->changeStatusList[$changedStatus]}'"); - } - if(common::hasPriv('projectrelease', 'edit')) echo html::a(inlink('edit', "releaseID=$release->id"), " " . $this->lang->edit, '', "class='btn btn-link' title='{$this->lang->edit}'"); - if(common::hasPriv('projectrelease', 'delete')) echo html::a(inlink('delete', "releaseID=$release->id"), " " . $this->lang->delete, '', "class='btn btn-link' title='{$this->lang->delete}' target='hiddenwin'"); - } - ?> -
+ +
projectrelease->buildOperateMenu($release, 'view');?>