diff --git a/module/bug/ui/view.html.php b/module/bug/ui/view.html.php index 29a2b12e91..b0eb902ed4 100644 --- a/module/bug/ui/view.html.php +++ b/module/bug/ui/view.html.php @@ -119,44 +119,6 @@ $steps = str_replace('

', '', $steps); $files = ''; foreach($bug->files as $file) $files .= "{$file->title},"; -/* build operate menu. */ -$moduleName = $app->moduleName; -$methodName = $app->methodName; -foreach($config->{$moduleName}->actions->{$methodName} as $menu => $actionList) -{ - $$menu = array(); - foreach($actionList as $action) - { - $actionData = $config->{$moduleName}->actionList[$action]; - - if(!empty($actionData['url']) && is_array($actionData['url'])) - { - $module = $actionData['url']['module']; - $method = $actionData['url']['method']; - $params = $actionData['url']['params']; - if(!common::hasPriv($module, $method)) continue; - $actionData['url'] = helper::createLink($module, $method, $params); - } - else if(!empty($actionData['data-url']) && is_array($actionData['data-url'])) - { - $module = $actionData['data-url']['module']; - $method = $actionData['data-url']['method']; - $params = $actionData['data-url']['params']; - if(!common::hasPriv($module, $method)) continue; - $actionData['data-url'] = helper::createLink($module, $method, $params); - } - else - { - if(!common::hasPriv($moduleName, $action)) continue; - } - if(!$this->{$moduleName}->isClickable($$moduleName, $action)) continue; - - if($menu == 'suffixActions' && !empty($actionData['text'])) $actionData['text'] = ''; - - $$menu[] = $actionData; - } -} - detailHeader ( to::title @@ -208,6 +170,7 @@ $buildItems = function($items): array return $itemList; }; +$actions = $this->loadModel('common')->buildOperateMenu($bug); detailBody ( sectionList @@ -230,8 +193,8 @@ detailBody ( set::object($bug), isAjaxRequest('modal') ? null : to::prefix(backBtn(set::icon('back'), set::class('ghost text-white'), $lang->goback)), - set::main($mainActions), - set::suffix($suffixActions) + set::main($actions['mainActions']), + set::suffix($actions['suffixActions']) ), detailSide ( diff --git a/module/common/model.php b/module/common/model.php index ca694e3e9f..15ec73b6d0 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -3948,6 +3948,62 @@ EOT; foreach($attrs as $attr => $value) $item[$attr] = $value; return $item; } + + /** + * 按照模块生成详情页的操作按钮。 + * Build operate actions menu. + * + * @param object $data + * @access public + * @return array + */ + public function buildOperateMenu(object $data): array + { + global $app, $config; + + /* build operate menu. */ + $moduleName = $app->moduleName; + $methodName = $app->methodName; + $actions = array(); + + $this->loadModel($moduleName); + foreach($config->{$moduleName}->actions->{$methodName} as $menu => $actionList) + { + $$menu = array(); + foreach($actionList as $action) + { + $actionData = $config->{$moduleName}->actionList[$action]; + + if(!empty($actionData['url']) && is_array($actionData['url'])) + { + $module = $actionData['url']['module']; + $method = $actionData['url']['method']; + $params = $actionData['url']['params']; + if(!common::hasPriv($module, $method)) continue; + $actionData['url'] = helper::createLink($module, $method, $params); + } + else if(!empty($actionData['data-url']) && is_array($actionData['data-url'])) + { + $module = $actionData['data-url']['module']; + $method = $actionData['data-url']['method']; + $params = $actionData['data-url']['params']; + if(!common::hasPriv($module, $method)) continue; + $actionData['data-url'] = helper::createLink($module, $method, $params); + } + else + { + if(!common::hasPriv($moduleName, $action)) continue; + } + if(!$this->{$moduleName}->isClickable($data, $action)) continue; + + if($menu == 'suffixActions' && !empty($actionData['text'])) $actionData['text'] = ''; + + $$menu[] = $actionData; + } + $actions[$menu] = $$menu; + } + return $actions; + } } class common extends commonModel diff --git a/module/testcase/config.php b/module/testcase/config.php index 6f114629de..20ec2bff0a 100644 --- a/module/testcase/config.php +++ b/module/testcase/config.php @@ -19,8 +19,9 @@ $config->testcase->export = new stdclass(); $config->testcase->export->listFields = array('type', 'stage', 'pri', 'status'); $config->testcase->actions = new stdclass(); -$config->testcase->actions->browse = 'results,runcase,edit,review,createBug,create,showscript'; -$config->testcase->actions->view = 'results,runcase'; +$config->testcase->actions->view = array(); +$config->testcase->actions->view['mainActions'] = array('runResult', 'runCase', 'review', 'importToLib', 'createBug', 'showScript'); +$config->testcase->actions->view['suffixActions'] = array('edit', 'create', 'delete'); $config->testcase->exportFields = ' id, product, branch, module, story, diff --git a/module/testcase/config/action.php b/module/testcase/config/action.php index 2c562aee70..7a8bf2056b 100644 --- a/module/testcase/config/action.php +++ b/module/testcase/config/action.php @@ -34,6 +34,12 @@ $config->testcase->actionList['review']['hint'] = $lang->testcase->review $config->testcase->actionList['review']['url'] = array('module' => 'testcase', 'method' => 'review', 'params' => 'caseID={id}'); $config->testcase->actionList['review']['data-toggle'] = 'modal'; +$config->testcase->actionList['importToLib']['icon'] = 'assets'; +$config->testcase->actionList['importToLib']['text'] = $lang->testcase->importToLib; +$config->testcase->actionList['importToLib']['hint'] = $lang->testcase->importToLib; +$config->testcase->actionList['importToLib']['url'] = array('module' => 'testcase', 'method' => 'importToLib', 'params' => 'caseID={id}'); +$config->testcase->actionList['importToLib']['data-toggle'] = 'modal'; + $config->testcase->actionList['createBug']['icon'] = 'bug'; $config->testcase->actionList['createBug']['text'] = $lang->testcase->createBug; $config->testcase->actionList['createBug']['hint'] = $lang->testcase->createBug; diff --git a/module/testcase/model.php b/module/testcase/model.php index 05866660bf..f26fdb0159 100644 --- a/module/testcase/model.php +++ b/module/testcase/model.php @@ -2574,57 +2574,6 @@ class testcaseModel extends model return ''; } - /** - * 构造详情页或列表页需要的操作菜单。 - * Build action menu. - * - * @param object $case - * @param string $type - * @access public - * @return array - */ - public function buildOperateMenu(object $case = null, string $type = 'view'): array - { - $caseID = $case ? $case->id : '{id}'; - $runID = $case ? $case->runID : '0'; - $version = $case ? $case->version : ''; - $currentVersion = $case ? $case->currentVersion : '{version}'; - $product = $case ? $case->product : '{product}'; - $branch = $case ? $case->branch : '{branch}'; - $module = $case ? $case->module : '{module}'; - - $params = "caseID={$caseID}"; - $editParams = $params; - if($this->app->tab == 'project') $editParams = "{$params}&comment=false&projectID={$this->session->project}"; - if($this->app->tab == 'execution') $editParams = "{$params}&comment=false&executionID={$this->session->execution}"; - $createBugParams = "product={$product}&branch={$branch}&extra=caseID={$caseID},version={$version},runID="; - $copyParams = "productID={$product}&branch={$branch}&moduleID={$module}&from=testcase¶m={$caseID}"; - - $actions = array(); - $actions['results'] = array('icon' => 'list-alt', 'text' => '结果', 'url' => helper::createLink('testcase', 'results', "{$params}&version={$version}"), 'data-toggle' => 'modal'); - $actions['runcase'] = array('icon' => 'play', 'text' => '执行', 'url' => helper::createLink('testcase', 'runCase', "{$params}&version={$currentVersion}"), 'data-toggle' => 'modal'); - $actions['edit'] = array('icon' => 'edit', 'text' => '编辑', 'url' => helper::createLink('testcase', 'edit', $editParams)); - $actions['review'] = array('icon' => 'review', 'text' => '审批', 'url' => helper::createLink('testcase', 'review', $params), 'data-toggle' => 'modal'); - $actions['createBug'] = array('icon' => 'bug', 'text' => '转Bug', 'url' => helper::createLink('testcase', 'createBug', $createBugParams), 'data-toggle' => 'modal'); - $actions['create'] = array('icon' => 'copy', 'text' => '复制', 'url' => helper::createLink('testcase', 'create', $copyParams)); - $actions['showscript'] = array('icon' => 'file-code', 'text' => '查看自动化脚本', 'url' => helper::createLink('testcase', 'showScript', $params), 'data-toggle' => 'modal'); - - foreach($actions as $action => $actionData) - { - $actionsConfig = $this->config->testcase->actions->{$type}; - if(strpos(",{$actionsConfig},", ",{$action},") === false) - { - unset($actions[$action]); - continue; - } - $actions[$action]['hint'] = $actions[$action]['text']; - if($type == 'browse') unset($actions[$action]['text']); - } - - if($type == 'browse') $this->config->testcase->dtable->fieldList['actions']['actionsMap'] = $actions; - return $actions; - } - /** * processDatas * diff --git a/module/testcase/ui/view.html.php b/module/testcase/ui/view.html.php index b19cedd53c..fe57f5f936 100644 --- a/module/testcase/ui/view.html.php +++ b/module/testcase/ui/view.html.php @@ -318,6 +318,7 @@ detailHeader ) : null ); +$actions = $this->loadModel('common')->buildOperateMenu($case); detailBody ( sectionList @@ -373,17 +374,10 @@ detailBody ( floatToolbar ( + set::object($case), $isInModal ? null : to::prefix(backBtn(set::icon('back'), set::class('ghost text-white'), $lang->goback)), - set::main($this->testcase->buildOperateMenu($case, 'view')), - set::suffix - ( - array - ( - array('icon' => 'edit', 'url' => $this->createLink('testcase', 'edit', "caseID={$case->id}")), - array('icon' => 'copy', 'url' => $this->createLink('testcase', 'create', "productID={$case->product}&branch={$case->branch}&moduleID={$case->module}&from=testcase¶m={$case->id}")), - array('icon' => 'trash', 'url' => $this->createLink('testcase', 'delete', "caseID={$case->id}")), - ), - ), + set::main($actions['mainActions']), + set::suffix($actions['suffixActions']) ), ), ),