From ce174f973c089027a9d2be734bf47c3709bdb4c6 Mon Sep 17 00:00:00 2001 From: daitingting Date: Fri, 5 May 2017 12:09:19 +0800 Subject: [PATCH] * Set as working as only test. --- framework/router.class.php | 6 +- module/block/control.php | 16 +-- module/bug/config.php | 11 +- module/bug/view/browse.html.php | 1 + module/bug/view/create.html.php | 4 +- module/bug/view/edit.html.php | 4 + module/bug/view/view.html.php | 4 +- module/build/control.php | 173 ++++++++++++++-------- module/build/view/create.html.php | 4 +- module/build/view/edit.html.php | 2 +- module/build/view/view.html.php | 37 ++++- module/common/lang/zh-cn.php | 174 +++++++++++++++++++++++ module/common/model.php | 22 --- module/company/view/dynamic.html.php | 2 +- module/custom/model.php | 59 -------- module/doc/lang/zh-cn.php | 4 +- module/doc/model.php | 10 +- module/product/control.php | 30 +++- module/product/js/common.js | 2 +- module/product/lang/zh-cn.php | 1 + module/product/view/create.html.php | 2 +- module/product/view/edit.html.php | 2 +- module/product/view/view.html.php | 2 + module/testcase/view/caseheader.html.php | 1 + module/testcase/view/create.html.php | 2 +- module/testcase/view/edit.html.php | 2 +- module/testcase/view/view.html.php | 2 +- module/testtask/view/create.html.php | 7 +- module/testtask/view/edit.html.php | 11 +- module/tree/control.php | 7 +- module/user/view/featurebar.html.php | 2 +- 31 files changed, 420 insertions(+), 186 deletions(-) diff --git a/framework/router.class.php b/framework/router.class.php index a4e284cac3..6af59bd17b 100755 --- a/framework/router.class.php +++ b/framework/router.class.php @@ -40,6 +40,11 @@ class router extends baseRouter $productProject = false; if($this->dbh and !empty($this->config->db->name)) { + global $config; + if(!isset($config->global)) $config->global = new stdclass(); + $flow = $this->dbh->query('SELECT value FROM' . TABLE_CONFIG . "WHERE `owner`='system' AND `module`='common' AND `key`='flow'")->fetch(); + $config->global->flow = $flow->value; + try { $productProject = $this->dbh->query('SELECT value FROM' . TABLE_CONFIG . "WHERE `owner`='system' AND `module`='custom' AND `key`='productProject'")->fetch(); @@ -53,7 +58,6 @@ class router extends baseRouter $message = $exception->getMessage(); if(strpos($repairCode, "|$errorCode|") !== false or ($errorCode == '1016' and strpos($errorMsg, 'errno: 145') !== false) or strpos($message, 'repair') !== false) { - global $config; if(isset($config->framework->autoRepairTable) and $config->framework->autoRepairTable) { header("location: " . $config->webRoot . 'checktable.php'); diff --git a/module/block/control.php b/module/block/control.php index 29e22af8e0..632ab4e1ee 100644 --- a/module/block/control.php +++ b/module/block/control.php @@ -49,13 +49,10 @@ class block extends control if(!common::hasPriv($moduleKey, 'index')) unset($modules[$moduleKey]); } - if($this->config->global->flow != 'full') - { - unset($modules['todo']); - unset($modules['qa']); - } - if($this->config->global->flow == 'onlyStory') unset($modules['project']); - if($this->config->global->flow == 'onlyTask') unset($modules['product']); + if($this->config->global->flow != 'full') unset($modules['todo']); + if($this->config->global->flow == 'onlyTask' or $this->config->global->flow == 'onlyStory') unset($modules['qa']); + if($this->config->global->flow == 'onlyTask' or $this->config->global->flow == 'onlyTest') unset($modules['product']); + if($this->config->global->flow == 'onlyStory' or $this->config->global->flow == 'onlyTest') unset($modules['project']); $closedBlock = isset($this->config->block->closed) ? $this->config->block->closed : ''; if(strpos(",$closedBlock,", ",|dynamic,") === false) $modules['dynamic'] = $this->lang->block->dynamic; @@ -213,8 +210,9 @@ class block extends control foreach($blocks as $key => $block) { - if($this->config->global->flow == 'onlyStory' and strpos(',product,story,', ',' . $block->source . ',') === false and $block->block != 'dynamic') unset($blocks[$key]); - if($this->config->global->flow == 'onlyTask' and strpos(',project,task,', ',' . $block->source . ',') === false and $block->block != 'dynamic') unset($blocks[$key]); + if($this->config->global->flow == 'onlyStory' and $block->source != 'product' and $block->block != 'dynamic') unset($blocks[$key]); + if($this->config->global->flow == 'onlyTask' and $block->source != 'project' and $block->block != 'dynamic') unset($blocks[$key]); + if($this->config->global->flow == 'onlyTest' and $block->source != 'qa' and $block->block != 'dynamic') unset($blocks[$key]); $block->params = json_decode($block->params); $blockID = $block->block; diff --git a/module/bug/config.php b/module/bug/config.php index c450bb1715..b436a5ec76 100644 --- a/module/bug/config.php +++ b/module/bug/config.php @@ -22,6 +22,8 @@ $config->bug->list->allFields = 'id, module, project, story, task, case, lastEditedBy, lastEditedDate'; + +if($config->global->flow == 'onlyTest') $config->bug->list->allFields = str_replace(array('project, ', 'task,'), '', $config->bug->list->allFields); $config->bug->list->defaultFields = 'id,severity,pri,title,openedBy,assignedTo,resolvedBy,resolution'; $config->bug->list->exportFields = 'id, product, branch, module, project, story, task, @@ -71,7 +73,7 @@ $config->bug->search['fields']['product'] = $lang->bug->product; $config->bug->search['fields']['branch'] = ''; $config->bug->search['fields']['plan'] = $lang->bug->productplan; $config->bug->search['fields']['module'] = $lang->bug->module; -$config->bug->search['fields']['project'] = $lang->bug->project; +if($config->global->flow != 'onlyTest') $config->bug->search['fields']['project'] = $lang->bug->project; $config->bug->search['fields']['severity'] = $lang->bug->severity; $config->bug->search['fields']['pri'] = $lang->bug->pri; @@ -82,8 +84,11 @@ $config->bug->search['fields']['resolution'] = $lang->bug->resolution; $config->bug->search['fields']['activatedCount'] = $lang->bug->activatedCount; -$config->bug->search['fields']['toTask'] = $lang->bug->toTask; -$config->bug->search['fields']['toStory'] = $lang->bug->toStory; +if($config->global->flow != 'onlyTest') +{ + $config->bug->search['fields']['toTask'] = $lang->bug->toTask; + $config->bug->search['fields']['toStory'] = $lang->bug->toStory; +} $config->bug->search['fields']['openedBy'] = $lang->bug->openedBy; $config->bug->search['fields']['closedBy'] = $lang->bug->closedBy; diff --git a/module/bug/view/browse.html.php b/module/bug/view/browse.html.php index e95089896a..7476d492ff 100644 --- a/module/bug/view/browse.html.php +++ b/module/bug/view/browse.html.php @@ -33,6 +33,7 @@ js::set('bugBrowseType', ($browseType == 'bymodule' and $this->session->bugBrows moduleName, $this->methodName) as $menuItem):?> hidden)) continue;?> + config->global->flow == 'onlyTest' and $menuItem->name == 'needconfirm') continue;?> name, 'QUERY') === 0):?> name, 5);?>
  • createLink('bug', 'browse', "productid=$productID&branch=$branch&browseType=bySearch¶m=$queryID"), $menuItem->text)?>
  • diff --git a/module/bug/view/create.html.php b/module/bug/view/create.html.php index fea28c8830..57054821b8 100644 --- a/module/bug/view/create.html.php +++ b/module/bug/view/create.html.php @@ -60,6 +60,7 @@ js::set('confirmDeleteTemplate', $lang->bug->confirmDeleteTemplate); + config->global->flow != 'onlyTest'):?> bug->project : $lang->bug->openedBuild;?> @@ -77,6 +78,7 @@ js::set('confirmDeleteTemplate', $lang->bug->confirmDeleteTemplate); + bug->lblAssignedTo;?> @@ -212,7 +214,7 @@ js::set('confirmDeleteTemplate', $lang->bug->confirmDeleteTemplate); $showStory = strpos(",$showFields,", ',story,') !== false; $showTask = strpos(",$showFields,", ',task,') !== false; ?> - + config->global->flow != 'onlyTest'):?> bug->story : $lang->bug->task;?> diff --git a/module/bug/view/edit.html.php b/module/bug/view/edit.html.php index 95441cef29..67d02fe166 100644 --- a/module/bug/view/edit.html.php +++ b/module/bug/view/edit.html.php @@ -102,12 +102,14 @@ js::set('oldResolvedBuild' , $bug->resolvedBuild); + config->global->flow != 'onlyTest'):?> bug->productplan;?> plan, "class='form-control chosen'");?> + bug->type;?> @@ -166,6 +168,7 @@ js::set('oldResolvedBuild' , $bug->resolvedBuild); + config->global->flow != 'onlyTest'):?>
    bug->legendPrjStoryTask;?> @@ -184,6 +187,7 @@ js::set('oldResolvedBuild' , $bug->resolvedBuild);
    +
    bug->legendLife;?> diff --git a/module/bug/view/view.html.php b/module/bug/view/view.html.php index 4b07cbf5a1..ff4b27ba10 100644 --- a/module/bug/view/view.html.php +++ b/module/bug/view/view.html.php @@ -36,7 +36,7 @@ common::printIcon('bug', 'close', $params, $bug, 'button', '', '', 'text-danger iframe showinonlybody', true); common::printIcon('bug', 'activate', $params, $bug, 'button', '', '', 'text-success iframe showinonlybody', true); - common::printIcon('bug', 'toStory', "product=$bug->product&branch=$bug->branch&module=0&story=0&project=0&bugID=$bug->id", $bug, 'button', $lang->icons['story']); + if($this->config->global->flow != 'onlyTest') common::printIcon('bug', 'toStory', "product=$bug->product&branch=$bug->branch&module=0&story=0&project=0&bugID=$bug->id", $bug, 'button', $lang->icons['story']); common::printIcon('bug', 'createCase', $convertParams, '', 'button', 'sitemap'); echo ''; @@ -316,6 +316,7 @@ + config->global->flow != 'onlyTest'):?> toStory != 0):?> bug->toStory;?> @@ -328,6 +329,7 @@ createLink('task', 'view', "taskID=$bug->toTask"), "#$bug->toTask $bug->toTaskTitle", '_blank');?> + diff --git a/module/build/control.php b/module/build/control.php index b1a3b9be6e..cb0ded9016 100644 --- a/module/build/control.php +++ b/module/build/control.php @@ -31,32 +31,50 @@ class build extends control /* Load these models. */ $this->loadModel('project'); $this->loadModel('user'); + + if($this->config->global->flow == 'onlyTest') + { + $product = $this->loadModel('product')->getByID($projectID); + $products = $this->product->getPairs(); + $this->product->setMenu($products, $projectID); - /* Set menu. */ - $this->project->setMenu($this->project->getPairs(), $projectID); + $productGroups = array(); + $product->branch = 0; + foreach($products as $productID => $name) $productGroups[$productID]['branch'] = 0; - /* Get stories and bugs. */ - $orderBy = 'status_asc, stage_asc, id_desc'; + $this->view->title = $this->lang->build->create; + $this->view->product = $product; + $this->view->branches = ($product and $product->type == 'normal') ? array() : $this->loadModel('branch')->getPairs($projectID); + } + else + { + /* Set menu. */ + $this->project->setMenu($this->project->getPairs(), $projectID); - /* Assign. */ - $project = $this->loadModel('project')->getById($projectID); + /* Get stories and bugs. */ + $orderBy = 'status_asc, stage_asc, id_desc'; - $productGroups = $this->project->getProducts($projectID); - $productID = key($productGroups); - $products = array(); - foreach($productGroups as $product) $products[$product->id] = $product->name; + /* Assign. */ + $project = $this->loadModel('project')->getById($projectID); + + $productGroups = $this->project->getProducts($projectID); + $productID = key($productGroups); + $products = array(); + foreach($productGroups as $product) $products[$product->id] = $product->name; + + $this->view->title = $project->name . $this->lang->colon . $this->lang->build->create; + $this->view->position[] = html::a($this->createLink('project', 'task', "projectID=$projectID"), $project->name); + $this->view->position[] = $this->lang->build->create; + $this->view->product = isset($productGroups[$productID]) ? $productGroups[$productID] : ''; + $this->view->branches = (isset($productGroups[$productID]) and $productGroups[$productID]->type == 'normal') ? array() : $this->loadModel('branch')->getPairs($productID); + $this->view->projectID = $projectID; + $this->view->orderBy = $orderBy; + } - $this->view->title = $project->name . $this->lang->colon . $this->lang->build->create; - $this->view->position[] = html::a($this->createLink('project', 'task', "projectID=$projectID"), $project->name); - $this->view->position[] = $this->lang->build->create; - $this->view->productGroups = $productGroups; $this->view->products = $products; - $this->view->product = isset($productGroups[$productID]) ? $productGroups[$productID] : ''; - $this->view->branches = (isset($productGroups[$productID]) and $productGroups[$productID]->type == 'normal') ? array() : $this->loadModel('branch')->getPairs($productID); - $this->view->projectID = $projectID; $this->view->lastBuild = $this->build->getLast($projectID); + $this->view->productGroups = $productGroups; $this->view->users = $this->user->getPairs('nodeleted'); - $this->view->orderBy = $orderBy; $this->display(); } @@ -85,43 +103,64 @@ class build extends control die(js::locate(inlink('view', "buildID=$buildID"), 'parent')); } - $this->loadModel('project'); - - /* Set menu. */ $build = $this->build->getById((int)$buildID); - $this->project->setMenu($this->project->getPairs(), $build->project); - /* Get stories and bugs. */ - $orderBy = 'status_asc, stage_asc, id_desc'; - - /* Assign. */ - $project = $this->loadModel('project')->getById($build->project); - if(empty($project)) + if($this->config->global->flow == 'onlyTest') { - $project = new stdclass(); - $project->name = ''; + $product = $this->loadModel('product')->getById($build->product); + $products = $this->product->getPairs(); + $this->product->setMenu($products, $build->product); + + $productGroups = array(); + $product->branch = 0; + foreach($products as $productID => $name) $productGroups[$productID]['branch'] = 0; + + $this->view->title = $this->lang->build->edit; + $this->view->position[] = $this->lang->build->edit; + $this->view->product = $product; + $this->view->branches = ($product and $product->type == 'normal') ? array() : $this->loadModel('branch')->getPairs($build->product); + } + else + { + $this->loadModel('project'); + + /* Set menu. */ + $this->project->setMenu($this->project->getPairs(), $build->project); + + /* Get stories and bugs. */ + $orderBy = 'status_asc, stage_asc, id_desc'; + + /* Assign. */ + $project = $this->loadModel('project')->getById($build->project); + if(empty($project)) + { + $project = new stdclass(); + $project->name = ''; + } + + $productGroups = $this->project->getProducts($build->project); + + $products = array(); + foreach($productGroups as $product) $products[$product->id] = $product->name; + if(empty($productGroups) and $build->product) + { + $product = $this->loadModel('product')->getById($build->product); + $products[$product->id] = $product->name; + } + + $this->view->title = $project->name . $this->lang->colon . $this->lang->build->edit; + $this->view->position[] = html::a($this->createLink('project', 'task', "projectID=$build->project"), $project->name); + $this->view->position[] = $this->lang->build->edit; + $this->view->product = isset($productGroups[$build->product]) ? $productGroups[$build->product] : ''; + $this->view->branches = (isset($productGroups[$build->product]) and $productGroups[$build->product]->type == 'normal') ? array() : $this->loadModel('branch')->getPairs($build->product); + $this->view->orderBy = $orderBy; + $this->display(); } - $productGroups = $this->project->getProducts($build->project); - - $products = array(); - foreach($productGroups as $product) $products[$product->id] = $product->name; - if(empty($productGroups) and $build->product) - { - $product = $this->loadModel('product')->getById($build->product); - $products[$product->id] = $product->name; - } - - $this->view->title = $project->name . $this->lang->colon . $this->lang->build->edit; - $this->view->position[] = html::a($this->createLink('project', 'task', "projectID=$build->project"), $project->name); - $this->view->position[] = $this->lang->build->edit; $this->view->productGroups = $productGroups; $this->view->products = $products; - $this->view->product = isset($productGroups[$build->product]) ? $productGroups[$build->product] : ''; - $this->view->branches = (isset($productGroups[$build->product]) and $productGroups[$build->product]->type == 'normal') ? array() : $this->loadModel('branch')->getPairs($build->product); + $this->view->users = $this->loadModel('user')->getPairs(); $this->view->build = $build; - $this->view->users = $this->loadModel('user')->getPairs('nodeleted', $build->builder); - $this->view->orderBy = $orderBy; $this->display(); } @@ -147,25 +186,39 @@ class build extends control $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]); - $stories = $this->dao->select('*')->from(TABLE_STORY)->where('id')->in($build->stories)->andWhere('deleted')->eq(0)->fetchAll('id'); - $stages = $this->dao->select('*')->from(TABLE_STORYSTAGE)->where('story')->in($build->stories)->andWhere('branch')->eq($build->branch)->fetchPairs('story', 'stage'); - foreach($stages as $storyID => $stage)$stories[$storyID]->stage = $stage; $bugs = $this->dao->select('*')->from(TABLE_BUG)->where('id')->in($build->bugs)->andWhere('deleted')->eq(0)->fetchAll(); - $this->loadModel('project')->setMenu($this->project->getPairs(), $build->project); + if($this->config->global->flow == 'onlyTest') + { + $products = $this->loadModel('product')->getPairs(); + $this->product->setMenu($products, $build->product); + + $this->view->title = "BUILD #$build->id $build->name - " . $build->productName; + $this->view->position[] = html::a($this->createLink('product', 'build', "productID=$build->product"), $build->productName); + $this->view->position[] = $this->lang->build->view; + } + else + { + $stories = $this->dao->select('*')->from(TABLE_STORY)->where('id')->in($build->stories)->andWhere('deleted')->eq(0)->fetchAll('id'); + $stages = $this->dao->select('*')->from(TABLE_STORYSTAGE)->where('story')->in($build->stories)->andWhere('branch')->eq($build->branch)->fetchPairs('story', 'stage'); + foreach($stages as $storyID => $stage)$stories[$storyID]->stage = $stage; + + $this->loadModel('project')->setMenu($this->project->getPairs(), $build->project); + $projects = $this->project->getPairs('empty'); + + $this->view->title = "BUILD #$build->id $build->name - " . $projects[$build->project]; + $this->view->position[] = html::a($this->createLink('project', 'task', "projectID=$build->project"), $projects[$build->project]); + $this->view->position[] = $this->lang->build->view; + $this->view->stories = $stories; + $this->view->generatedBugs = $this->bug->getProjectBugs($build->project, $build->id, '', 0, 'status_desc,id_desc', null); + $this->view->bugs = $bugs; + $this->view->type = $type; + } /* Assign. */ - $projects = $this->project->getPairs('empty'); - $this->view->title = "BUILD #$build->id $build->name - " . $projects[$build->project]; - $this->view->position[] = html::a($this->createLink('project', 'task', "projectID=$build->project"), $projects[$build->project]); - $this->view->position[] = $this->lang->build->view; - $this->view->generatedBugs = $this->bug->getProjectBugs($build->project, $build->id, '', 0, 'status_desc,id_desc', null); $this->view->users = $this->loadModel('user')->getPairs('noletter'); $this->view->build = $build; - $this->view->stories = $stories; - $this->view->bugs = $bugs; $this->view->actions = $this->loadModel('action')->getList('build', $buildID); - $this->view->type = $type; $this->view->link = $link; $this->view->param = $param; $this->view->branchName = $build->productType == 'normal' ? '' : $this->loadModel('branch')->getById($build->branch); @@ -206,6 +259,8 @@ class build extends control } $this->send($response); } + + if($this->config->global->flow == 'onlyTest') die(js::locate($this->createLink('project', 'build', "productID=$build->product"), 'parent')); die(js::locate($this->createLink('project', 'build', "projectID=$build->project"), 'parent')); } } diff --git a/module/build/view/create.html.php b/module/build/view/create.html.php index 29f05774c8..fc78b928e9 100644 --- a/module/build/view/create.html.php +++ b/module/build/view/create.html.php @@ -24,7 +24,7 @@ - + config->global->flow == 'onlyTest'):?> - +
    build->product;?>
    id, "onchange='loadBranches(this.value);' class='form-control chosen'");?> @@ -32,7 +32,7 @@ if($product->type != 'normal') { if($product->branch) $branches = array($product->branch => $branches[$product->branch]); - echo html::select('branch', $branches, $product->branch, "class='form-control' style='width:100px'"); + echo html::select('branch', $branches, $product->branch, "class='form-control' style='width:100px; display:inline-block;'"); } ?>
    diff --git a/module/build/view/edit.html.php b/module/build/view/edit.html.php index 08fdecae59..1f490d730c 100644 --- a/module/build/view/edit.html.php +++ b/module/build/view/edit.html.php @@ -66,7 +66,7 @@
    build->desc;?> desc), "rows='10' class='form-control'");?>
    project);?>
    config->global->flow != 'onlyTest' ? html::hidden('project', $build->project) : '';?>
    diff --git a/module/build/view/view.html.php b/module/build/view/view.html.php index 43c3824976..e3c18e2d2b 100644 --- a/module/build/view/view.html.php +++ b/module/build/view/view.html.php @@ -37,10 +37,13 @@ tfoot tr td .table-actions .btn{display:none;} $browseLink = $this->session->buildList ? $this->session->buildList : $this->createLink('project', 'build', "projectID=$build->project"); if(!$build->deleted) { - echo "
    "; - if(common::hasPriv('build', 'linkStory')) echo html::a(inlink('view', "buildID=$build->id&type=story&link=true"), ' ' . $lang->build->linkStory, '', "class='btn'"); - if(common::hasPriv('build', 'linkBug')) echo html::a(inlink('view', "buildID=$build->id&type=bug&link=true"), ' ' . $lang->build->linkBug, '', "class='btn'"); - echo '
    '; + if($this->config->global->flow != 'onlyTest') + { + echo "
    "; + if(common::hasPriv('build', 'linkStory')) echo html::a(inlink('view', "buildID=$build->id&type=story&link=true"), ' ' . $lang->build->linkStory, '', "class='btn'"); + if(common::hasPriv('build', 'linkBug')) echo html::a(inlink('view', "buildID=$build->id&type=bug&link=true"), ' ' . $lang->build->linkBug, '', "class='btn'"); + echo '
    '; + } echo "
    "; common::printIcon('build', 'edit', "buildID=$build->id"); common::printIcon('build', 'delete', "buildID=$build->id", '', 'button', '', 'hiddenwin'); @@ -53,6 +56,25 @@ tfoot tr td .table-actions .btn{display:none;}
    + config->global->flow == 'onlyTest'):?> +
    + build->desc;?> +
    desc;?>
    +
    + fetch('file', 'printFiles', array('files' => $build->files, 'fieldset' => 'true'));?> + +
    + session->buildList ? $this->session->buildList : $this->createLink('product', 'build', "productID=$build->product"); + if(!$build->deleted) + { + common::printIcon('build', 'edit', "buildID=$build->id"); + common::printIcon('build', 'delete', "buildID=$build->id", '', 'button', '', 'hiddenwin'); + } + echo common::printRPN($browseLink); + ?> +
    +
    +
    + config->global->flow != 'onlyTest'):?>
    build->desc;?>
    desc;?>
    +
    build->basicInfo?> @@ -261,13 +286,17 @@ tfoot tr td .table-actions .btn{display:none;}
    + config->global->flow != 'onlyTest'):?> fetch('file', 'printFiles', array('files' => $build->files, 'fieldset' => 'true'));?> +
    +config->global->flow != 'onlyTest'):?> id)?> + diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index af7110fa2a..663207401b 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -553,3 +553,177 @@ $lang->icons['unlock'] = 'unlock-alt'; $lang->icons['confirmStoryChange'] = 'search'; include (dirname(__FILE__) . '/menuOrder.php'); + +global $config; +if($config->global->flow == 'onlyStory') +{ + /* Remove project, report and qa module. */ + unset($lang->menu->project); + unset($lang->menu->report); + unset($lang->menu->qa); + + unset($lang->menuOrder[15]); + unset($lang->menuOrder[20]); + unset($lang->menuOrder[30]); + + /* Adjust sub menu of my dashboard. */ + unset($lang->my->menu->bug); + unset($lang->my->menu->todo); + unset($lang->my->menu->testtask); + unset($lang->my->menu->task); + unset($lang->my->menu->myProject); + + /* Adjust sub menu of product module. */ + unset($lang->product->menu->project); + + /* Rename product module. */ + $lang->menu->product = '产品|product|index'; + + /* Adjust search items. */ + unset($lang->searchObjects['bug']); + unset($lang->searchObjects['task']); + unset($lang->searchObjects['testcase']); + unset($lang->searchObjects['project']); + unset($lang->searchObjects['build']); + unset($lang->searchObjects['testtask']); +} + +if($config->global->flow == 'onlyTask') +{ + /* Remove product, report and qa module. */ + unset($lang->menu->product); + unset($lang->menu->report); + unset($lang->menu->qa); + + unset($lang->menuOrder[10]); + unset($lang->menuOrder[20]); + unset($lang->menuOrder[30]); + + /* Adjust sub menu of my dashboard. */ + unset($lang->my->menu->bug); + unset($lang->my->menu->todo); + unset($lang->my->menu->testtask); + unset($lang->my->menu->story); + + /* Adjust sub menu of project module. */ + unset($lang->project->menu->story); + unset($lang->project->menu->build); + unset($lang->project->menu->bug); + unset($lang->project->menu->testtask); + unset($lang->project->menu->product); + + /* Remove sub menu of product module. */ + unset($lang->product->menu); + unset($lang->product->menuOrder); + + $lang->project->menu->task['subModule'] = 'task'; + $lang->project->menu->task['alias'] = 'grouptask,importtask'; + + unset($lang->searchObjects['bug']); + unset($lang->searchObjects['story']); + unset($lang->searchObjects['product']); + unset($lang->searchObjects['testcase']); + unset($lang->searchObjects['build']); + unset($lang->searchObjects['release']); + unset($lang->searchObjects['productplan']); + unset($lang->searchObjects['testtask']); +} + +if($config->global->flow == 'onlyTest') +{ + /* Remove project and test module. */ + unset($lang->menu->project); + unset($lang->menu->qa); + unset($lang->menu->report); + + unset($lang->menuOrder[15]); + unset($lang->menuOrder[20]); + unset($lang->menuOrder[30]); + + /* Rename product module. */ + $lang->menu->product = '产品|product|index'; + + /* Adjust sub menu of my dashboard. */ + unset($lang->my->menu->task); + unset($lang->my->menu->myProject); + unset($lang->my->menu->story); + unset($lang->my->menu->todo); + + /* Remove sub menu of project module. */ + unset($lang->project->menu); + unset($lang->project->menuOrder); + + /* 增加缺陷管理、用例管理和测试任务视图 */ + $lang->menu->bug = 'Bug|bug|index'; + $lang->menu->testcase = '用例|testcase|index'; + $lang->menu->testtask = '测试|testtask|index'; + + $lang->menuOrder[6] = 'bug'; + $lang->menuOrder[7] = 'testcase'; + $lang->menuOrder[8] = 'testtask'; + + /* 调整缺陷管理的二级菜单 */ + $lang->bug->menu = new stdclass(); + + $lang->bug->menu->product = '%s'; + $lang->bug->menu->browse = array('link' => '浏览Bug|bug|browse|productID=%s', 'alias' => 'viewedit,resolve,close,activate,report', 'subModule' => 'tree'); + $lang->bug->menu->create = array('link' => '提Bug|bug|create|productID=%s'); + + $lang->bug->menuOrder[5] = 'product'; + $lang->bug->menuOrder[10] = 'browse'; + $lang->bug->menuOrder[15] = 'create'; + + /* 调整用例管理的二级菜单 */ + $lang->testcase->menu = new stdclass(); + + $lang->testcase->menu->product = '%s'; + $lang->testcase->menu->browse = array('link' => '浏览用例|testcase|browse|productID=%s', 'alias' => 'viewedit,resolve,close,activate,report', 'subModule' => 'tree'); + $lang->testcase->menu->create = array('link' => '创建用例|testcase|create|productID=%s'); + + $lang->testcase->menuOrder[5] = 'product'; + $lang->testcase->menuOrder[10] = 'browse'; + $lang->testcase->menuOrder[15] = 'create'; + + /* 调整测试任务的二级菜单 */ + $lang->testtask->menu = new stdclass(); + + $lang->testtask->menu->product = '%s'; + $lang->testtask->menu->browse = array('link' => '浏览版本|testtask|browse|productID=%s', 'alias' => 'viewedit,resolve,close,activate,report', 'subModule' => 'tree'); + $lang->testtask->menu->create = array('link' => '提交测试|testtask|create|productID=%s'); + + $lang->testtask->menuOrder[5] = 'product'; + $lang->testtask->menuOrder[10] = 'browse'; + $lang->testtask->menuOrder[15] = 'create'; + + /* 调整产品视图的二级菜单 */ + unset($lang->product->menu->story); + unset($lang->product->menu->project); + unset($lang->product->menu->release); + unset($lang->product->menu->dynamic); + unset($lang->product->menu->plan); + unset($lang->product->menu->roadmap); + unset($lang->product->menu->doc); + unset($lang->product->menu->module); + + $lang->product->menu->build = array('link' => '版本|product|build', 'subModule' => 'build'); + + $lang->product->menuOrder[5] = 'build'; + $lang->product->menuOrder[10] = 'view'; + $lang->product->menuOrder[15] = 'order'; + + $lang->build->menu = $lang->product->menu; + $lang->build->menuOrder = $lang->product->menuOrder; + + /* 调整菜单分组 */ + $lang->menugroup->bug = 'bug'; + $lang->menugroup->testcase = 'testcase'; + $lang->menugroup->testtask = 'testtask'; + + /* 调整搜索项 */ + unset($lang->searchObjects['story']); + unset($lang->searchObjects['task']); + unset($lang->searchObjects['release']); + unset($lang->searchObjects['productplan']); + + $lang->zentaoPMS = '禅道测试管理'; +} diff --git a/module/common/model.php b/module/common/model.php index 4eec958ef7..92d4c89e3d 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -393,28 +393,6 @@ class commonModel extends model $methodName = $app->getMethodName(); $searchObject = $moduleName; - if($config->global->flow == 'onlyStory') - { - /* Adjust search items. */ - unset($lang->searchObjects['bug']); - unset($lang->searchObjects['task']); - unset($lang->searchObjects['testcase']); - unset($lang->searchObjects['project']); - unset($lang->searchObjects['build']); - unset($lang->searchObjects['testtask']); - } - elseif($config->global->flow == 'onlyTask') - { - unset($lang->searchObjects['bug']); - unset($lang->searchObjects['story']); - unset($lang->searchObjects['product']); - unset($lang->searchObjects['testcase']); - unset($lang->searchObjects['build']); - unset($lang->searchObjects['release']); - unset($lang->searchObjects['productplan']); - unset($lang->searchObjects['testtask']); - } - if($moduleName == 'product') { if($methodName == 'browse') $searchObject = 'story'; diff --git a/module/company/view/dynamic.html.php b/module/company/view/dynamic.html.php index 3eed42c77d..524b5739dc 100644 --- a/module/company/view/dynamic.html.php +++ b/module/company/view/dynamic.html.php @@ -27,7 +27,7 @@ var browseType = ''; echo '
  • ' . html::a(inlink('dynamic', "browseType=all"), $lang->action->dynamic->all) . '
  • '; echo "
  • " . html::select('account', $users, $account, 'onchange=changeUser(this.value) class="form-control chosen"') . '
  • '; echo "
  • " . html::select('product', $products, $product, 'onchange=changeProduct(this.value) class="form-control chosen"') . '
  • '; - echo "
  • " . html::select('project', $projects, $project, 'onchange=changeProject(this.value) class="form-control chosen"') . '
  • '; + if($this->config->global->flow != 'onlyTest') echo "
  • " . html::select('project', $projects, $project, 'onchange=changeProject(this.value) class="form-control chosen"') . '
  • '; echo "
  • " . html::a('#', ' ' . $lang->action->dynamic->search) . "
  • "; ?> diff --git a/module/custom/model.php b/module/custom/model.php index d07cdcc0ab..dae69c8b3f 100644 --- a/module/custom/model.php +++ b/module/custom/model.php @@ -279,65 +279,6 @@ class customModel extends model if(empty($module)) $module = 'main'; global $app, $lang, $config; - - if($config->global->flow == 'onlyStory') - { - /* Remove project, report and qa module. */ - unset($lang->menu->project); - unset($lang->menu->report); - unset($lang->menu->qa); - - unset($lang->menuOrder[15]); - unset($lang->menuOrder[20]); - unset($lang->menuOrder[30]); - - /* Adjust sub menu of my dashboard. */ - unset($lang->my->menu->bug); - unset($lang->my->menu->todo); - unset($lang->my->menu->testtask); - unset($lang->my->menu->task); - unset($lang->my->menu->myProject); - - /* Adjust sub menu of product module. */ - unset($lang->product->menu->project); - - /* Rename product module. */ - $clientLang = $app->getClientLang(); - $lang->menu->product = $config->productCommonList[$clientLang][0] . '|product|index'; - } - elseif($config->global->flow == 'onlyTask') - { - /* Remove product, report and qa module. */ - unset($lang->menu->product); - unset($lang->menu->report); - unset($lang->menu->qa); - - unset($lang->menuOrder[10]); - unset($lang->menuOrder[20]); - unset($lang->menuOrder[30]); - - /* Adjust sub menu of my dashboard. */ - unset($lang->my->menu->bug); - unset($lang->my->menu->todo); - unset($lang->my->menu->testtask); - unset($lang->my->menu->story); - - /* Adjust sub menu of project module. */ - unset($lang->project->menu->story); - unset($lang->project->menu->build); - unset($lang->project->menu->bug); - unset($lang->project->menu->testtask); - unset($lang->project->menu->product); - - /* Remove sub menu of product module. */ - unset($lang->product->menu); - unset($lang->product->menuOrder); - - $lang->project->menu->task['subModule'] = 'task'; - $lang->project->menu->task['alias'] = 'grouptask,importtask'; - } - - $allMenu = $module == 'main' ? $lang->menu : (isset($lang->$module->menu) ? $lang->$module->menu : $lang->my->menu); if($module == 'product' and isset($allMenu->branch)) $allMenu->branch = str_replace('@branch@', $lang->custom->branch, $allMenu->branch); diff --git a/module/doc/lang/zh-cn.php b/module/doc/lang/zh-cn.php index 6eec456cab..17d8cd12e3 100644 --- a/module/doc/lang/zh-cn.php +++ b/module/doc/lang/zh-cn.php @@ -83,8 +83,8 @@ $lang->doc->systemLibs['product'] = $lang->productCommon; $lang->doc->systemLibs['project'] = $lang->projectCommon; global $config; -if($config->global->flow == 'onlyStory') unset($lang->doc->systemLibs['project']); -if($config->global->flow == 'onlyStory') unset($lang->doc->libTypeList['project']); +if($config->global->flow == 'onlyStory' or $config->global->flow == 'onlyTest') unset($lang->doc->systemLibs['project']); +if($config->global->flow == 'onlyStory' or $config->global->flow == 'onlyTest') unset($lang->doc->libTypeList['project']); if($config->global->flow == 'onlyTask') unset($lang->doc->systemLibs['product']); if($config->global->flow == 'onlyTask') unset($lang->doc->libTypeList['product']); diff --git a/module/doc/model.php b/module/doc/model.php index 99e799fc4e..4035cfd148 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -70,7 +70,7 @@ class docModel extends model $selectHtml .= "
    "; $selectHtml .= "
    "; if($this->config->global->flow != 'onlyTask') $selectHtml .= "
    {$this->lang->doc->libTypeList['product']}
    "; - if($this->config->global->flow != 'onlyStory') $selectHtml .= "
    {$this->lang->doc->libTypeList['project']}
    {$this->lang->project->statusList['done']}
    "; + if($this->config->global->flow != 'onlyStory' and $this->config->global->flow != 'onlyTest') $selectHtml .= "
    {$this->lang->doc->libTypeList['project']}
    {$this->lang->project->statusList['done']}
    "; $selectHtml .= "
    {$this->lang->doc->libTypeList['custom']}
    "; $selectHtml .= "
    "; common::setMenuVars($this->lang->doc->menu, 'list', $selectHtml); @@ -705,7 +705,7 @@ class docModel extends model } $productIdList = array_keys($productLibs); $products = $this->dao->select('id,name,status')->from(TABLE_PRODUCT)->where('id')->in($productIdList)->andWhere('deleted')->eq('0')->orderBy('`order`_desc')->fetchAll(); - if($this->config->global->flow == 'onlyStory') + if($this->config->global->flow == 'onlyStory' or $this->config->global->flow == 'onlyTest') { $hasProject = array(); } @@ -764,7 +764,7 @@ class docModel extends model */ public function getLimitLibs($type, $limit = 4) { - if($type == 'project' and $this->config->global->flow == 'onlyStory') return array(); + if($type == 'project' and ($this->config->global->flow == 'onlyStory' or $this->config->global->flow == 'onlyTest')) return array(); if($type == 'product' and $this->config->global->flow == 'onlyTask') return array(); if($type == 'product' or $type == 'project') @@ -814,7 +814,7 @@ class docModel extends model $libGroups = $this->dao->select('*')->from(TABLE_DOCLIB)->where('deleted')->eq(0)->andWhere($type)->in($idList)->orderBy('`order`, id')->fetchGroup($type, 'id'); if($type == 'product') { - if($this->config->global->flow == 'onlyStory') + if($this->config->global->flow == 'onlyStory' or $this->config->global->flow == 'onlyTest') { $hasProject = array(); } @@ -856,7 +856,7 @@ class docModel extends model $objectLibs = $this->dao->select('*')->from(TABLE_DOCLIB)->where('deleted')->eq(0)->andWhere($type)->eq($objectID)->orderBy('`order`, id')->fetchAll('id'); if($type == 'product') { - if($this->config->global->flow == 'onlyStory') + if($this->config->global->flow == 'onlyStory' or $this->config->global->flow == 'onlyTest') { $hasProject = array(); } diff --git a/module/product/control.php b/module/product/control.php index 871de563fe..b800235bc5 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -61,7 +61,8 @@ class product extends control $homepage = $this->config->product->homepage; if($homepage == 'browse' and $locate == 'auto') $locate = 'yes'; - if($locate == 'yes') $this->locate($this->createLink($this->moduleName, 'browse')); + if($locate == 'yes' and $this->config->global->flow == 'onlyTest') $this->locate($this->createLink($this->moduleName, 'build')); + if($locate == 'yes' and $this->config->global->flow != 'onlyTest') $this->locate($this->createLink($this->moduleName, 'browse')); if($this->app->getViewType() != 'mhtml') unset($this->lang->product->menu->index); $productID = $this->product->saveState($productID, $this->products); @@ -660,4 +661,31 @@ class product extends control { $this->locate($this->createLink('doc', 'objectLibs', "type=product&objectID=$productID&from=product")); } + + public function build($productID = 0) + { + $this->app->loadLang('build'); + $this->session->set('productList', $this->app->getURI(true)); + + /* Get all product list. Locate to the create product page if there is no product. */ + $this->products = $this->product->getPairs(); + if(empty($this->products) and strpos('create|view', $this->methodName) === false) $this->locate($this->createLink('product', 'create')); + + /* Get current product. */ + $productID = $this->product->saveState($productID, $this->products); + $product = $this->product->getById($productID); + $this->product->setMenu($this->products, $productID); + + /* Set menu.*/ + $this->session->set('buildList', $this->app->getURI(true)); + + $this->view->title = $product->name . $this->lang->colon . $this->lang->product->build; + $this->view->position[] = $this->lang->product->build; + $this->view->products = $this->products; + $this->view->product = $product; + $this->view->builds = $this->dao->select('*')->from(TABLE_BUILD)->where('product')->eq($productID)->andWhere('deleted')->eq(0)->fetchAll(); + $this->view->users = $this->loadModel('user')->getPairs('noletter'); + + $this->display(); + } } diff --git a/module/product/js/common.js b/module/product/js/common.js index 8062324425..aba210233e 100644 --- a/module/product/js/common.js +++ b/module/product/js/common.js @@ -5,5 +5,5 @@ function setWhite(acl) $(document).ready(function() { - if(onlyStory) $('#aclprivate').parents('.radio').remove(); + if(noProject) $('#aclprivate').parents('.radio').remove(); }) diff --git a/module/product/lang/zh-cn.php b/module/product/lang/zh-cn.php index 8cc711d82b..c2192ea832 100644 --- a/module/product/lang/zh-cn.php +++ b/module/product/lang/zh-cn.php @@ -40,6 +40,7 @@ $lang->product->builds = 'BUILD数'; $lang->product->roadmap = '路线图'; $lang->product->doc = '文档列表'; $lang->product->project = $lang->projectCommon . '列表'; +$lang->product->build = '版本列表'; $lang->product->confirmDelete = " 您确定删除该{$lang->productCommon}吗?"; diff --git a/module/product/view/create.html.php b/module/product/view/create.html.php index 56abc78615..a16703b84f 100644 --- a/module/product/view/create.html.php +++ b/module/product/view/create.html.php @@ -12,7 +12,7 @@ ?> -global->flow == 'onlyStory' ? true : false);?> +global->flow == 'onlyStory' or $config->global->flow == 'onlyTest') ? true : false);?>
    diff --git a/module/product/view/edit.html.php b/module/product/view/edit.html.php index 600ff96dc6..86bc7a6e05 100644 --- a/module/product/view/edit.html.php +++ b/module/product/view/edit.html.php @@ -12,7 +12,7 @@ ?> -global->flow == 'onlyStory' ? true : false);?> +global->flow == 'onlyStory' or $config->global->flow == 'onlyTest') ? true : false);?>
    diff --git a/module/product/view/view.html.php b/module/product/view/view.html.php index 3dac2acfb6..be79466c5c 100644 --- a/module/product/view/view.html.php +++ b/module/product/view/view.html.php @@ -114,6 +114,7 @@
    + config->global->flow != 'onlyTest'):?>
    product->otherInfo?> @@ -163,6 +164,7 @@
    + diff --git a/module/testcase/view/caseheader.html.php b/module/testcase/view/caseheader.html.php index 47e888e2a5..6bc9a4a886 100644 --- a/module/testcase/view/caseheader.html.php +++ b/module/testcase/view/caseheader.html.php @@ -23,6 +23,7 @@ if(isset($menuItem->hidden)) continue; $menuType = $menuItem->name; if(!$config->testcase->needReview and $menuType == 'wait') continue; + if($this->config->global->flow == 'onlyTest' and $menuType == 'needconfirm') continue; if($hasBrowsePriv and strpos($menuType, 'QUERY') === 0) { $queryID = (int)substr($menuType, 5); diff --git a/module/testcase/view/create.html.php b/module/testcase/view/create.html.php index a5f07f7178..9e0a03ef60 100644 --- a/module/testcase/view/create.html.php +++ b/module/testcase/view/create.html.php @@ -63,7 +63,7 @@ - + config->global->flow != 'onlyTest'):?> testcase->lblStory;?> diff --git a/module/testcase/view/edit.html.php b/module/testcase/view/edit.html.php index fcc930ee1c..b6b4217092 100644 --- a/module/testcase/view/edit.html.php +++ b/module/testcase/view/edit.html.php @@ -178,7 +178,7 @@ - + config->global->flow != 'onlyTest'):?> testcase->story;?>
    story, 'class=form-control chosen');?>
    diff --git a/module/testcase/view/view.html.php b/module/testcase/view/view.html.php index b8cf8e7300..1d48cb1ecc 100644 --- a/module/testcase/view/view.html.php +++ b/module/testcase/view/view.html.php @@ -168,7 +168,7 @@ ?> - + config->global->flow != 'onlyTest'):?> testcase->story;?> diff --git a/module/testtask/view/create.html.php b/module/testtask/view/create.html.php index 8a0f1c4a9c..61394b3b26 100644 --- a/module/testtask/view/create.html.php +++ b/module/testtask/view/create.html.php @@ -34,13 +34,16 @@ + config->global->flow != 'onlyTest'):?> testtask->project;?> + - testtask->build;?> - + testtask->build;?> + + testtask->owner;?> diff --git a/module/testtask/view/edit.html.php b/module/testtask/view/edit.html.php index 67486284ea..81508e6115 100644 --- a/module/testtask/view/edit.html.php +++ b/module/testtask/view/edit.html.php @@ -23,16 +23,19 @@
    + config->global->flow != 'onlyTest'):?> - + + - - + + + @@ -76,7 +79,7 @@ - +
    testtask->project;?> project, "class='form-control chosen' onchange='loadProjectRelated(this.value)'");?> product)?>
    testtask->build;?>build, "class='form-control chosen'");?>testtask->build;?>build, "class='form-control chosen'");?>
    testtask->owner;?>
    product);?>
    diff --git a/module/tree/control.php b/module/tree/control.php index 9c97136d80..026199bf5c 100644 --- a/module/tree/control.php +++ b/module/tree/control.php @@ -80,7 +80,8 @@ class tree extends control $this->loadModel('bug')->setMenu($this->product->getPairs(), $rootID); $this->lang->tree->menu = $this->lang->bug->menu; $this->lang->tree->menuOrder = $this->lang->bug->menuOrder; - $this->lang->set('menugroup.tree', 'qa'); + if($this->config->global->flow == 'onlyTest') $this->lang->set('menugroup.tree', 'bug'); + if($this->config->global->flow != 'onlyTest') $this->lang->set('menugroup.tree', 'qa'); $title = $product->name . $this->lang->colon . $this->lang->tree->manageBug; $position[] = html::a($this->createLink('bug', 'browse', "product=$rootID"), $product->name); @@ -91,7 +92,9 @@ class tree extends control $this->loadModel('testcase')->setMenu($this->product->getPairs(), $rootID); $this->lang->tree->menu = $this->lang->testcase->menu; $this->lang->tree->menuOrder = $this->lang->testcase->menuOrder; - $this->lang->set('menugroup.tree', 'qa'); + if($this->config->global->flow == 'onlyTest') $this->lang->set('menugroup.tree', 'testcase'); + if($this->config->global->flow != 'onlyTest') $this->lang->set('menugroup.tree', 'qa'); + $title = $product->name . $this->lang->colon . $this->lang->tree->manageCase; $position[] = html::a($this->createLink('testcase', 'browse', "product=$rootID"), $product->name); diff --git a/module/user/view/featurebar.html.php b/module/user/view/featurebar.html.php index 62cfa9b2c4..1d0ea158dd 100755 --- a/module/user/view/featurebar.html.php +++ b/module/user/view/featurebar.html.php @@ -12,7 +12,7 @@ echo "
  • "; common::printLink('user', 'todo', "account=$account", $lang->user->todo); echo '
  • '; } - if($config->global->flow != 'onlyTask') + if($config->global->flow != 'onlyTask' and $config->global->flow != 'onlyTest') { echo "
  • "; common::printLink('user', 'story', "account=$account", $lang->user->story); echo '
  • '; }