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');?>