diff --git a/module/doc/view/edit.html.php b/module/doc/view/edit.html.php index c08a6bedd9..bdb1d248ad 100644 --- a/module/doc/view/edit.html.php +++ b/module/doc/view/edit.html.php @@ -21,6 +21,7 @@ createLink('doc', 'view', "docID=$doc->id"), $doc->title, '', "title='$doc->title'");?> arrow . ' ' . $lang->doc->edit;?> +
save, '', 'id="top-submit" class="btn btn-primary"');?>
diff --git a/module/doc/view/showfiles.html.php b/module/doc/view/showfiles.html.php index e691cb3632..105e939abf 100644 --- a/module/doc/view/showfiles.html.php +++ b/module/doc/view/showfiles.html.php @@ -53,8 +53,8 @@ - - + + diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index e78d2eb0aa..754dfaa53a 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -198,6 +198,7 @@ $lang->resource->story->view = 'view'; $lang->resource->story->change = 'lblChange'; $lang->resource->story->review = 'lblReview'; $lang->resource->story->batchReview = 'batchReview'; +$lang->resource->story->assignTo = 'assignTo'; $lang->resource->story->close = 'lblClose'; $lang->resource->story->batchClose = 'batchClose'; $lang->resource->story->activate = 'lblActivate'; @@ -225,14 +226,15 @@ $lang->story->methodOrder[50] = 'close'; $lang->story->methodOrder[55] = 'batchClose'; $lang->story->methodOrder[60] = 'batchChangePlan'; $lang->story->methodOrder[65] = 'batchChangeStage'; -$lang->story->methodOrder[70] = 'batchAssignTo'; -$lang->story->methodOrder[75] = 'activate'; -$lang->story->methodOrder[80] = 'tasks'; -$lang->story->methodOrder[85] = 'bugs'; -$lang->story->methodOrder[90] = 'cases'; -$lang->story->methodOrder[95] = 'zeroCase'; -$lang->story->methodOrder[100] = 'report'; -$lang->story->methodOrder[105] = 'linkStory'; +$lang->story->methodOrder[70] = 'assignTo'; +$lang->story->methodOrder[75] = 'batchAssignTo'; +$lang->story->methodOrder[80] = 'activate'; +$lang->story->methodOrder[85] = 'tasks'; +$lang->story->methodOrder[90] = 'bugs'; +$lang->story->methodOrder[95] = 'cases'; +$lang->story->methodOrder[100] = 'zeroCase'; +$lang->story->methodOrder[105] = 'report'; +$lang->story->methodOrder[110] = 'linkStory'; $lang->story->methodOrder[115] = 'batchChangeBranch'; $lang->story->methodOrder[120] = 'batchChangeModule'; diff --git a/module/message/config.php b/module/message/config.php index 609b4f0d51..8af4f3cc17 100644 --- a/module/message/config.php +++ b/module/message/config.php @@ -1,7 +1,7 @@ message->objectTypes = array(); $config->message->objectTypes['product'] = array('opened', 'edited', 'closed', 'undeleted'); -$config->message->objectTypes['story'] = array('opened', 'edited', 'commented', 'frombug', 'changed', 'reviewed', 'closed', 'activated'); +$config->message->objectTypes['story'] = array('opened', 'edited', 'commented', 'frombug', 'changed', 'reviewed', 'closed', 'activated', 'assigned'); $config->message->objectTypes['productplan'] = array('opened', 'edited'); $config->message->objectTypes['project'] = array('opened', 'edited', 'started', 'delayed', 'suspended', 'closed', 'activated', 'undeleted'); $config->message->objectTypes['task'] = array('opened', 'edited', 'commented', 'assigned', 'confirmed', 'started', 'finished', 'paused', 'canceled', 'restarted', 'closed', 'activated'); diff --git a/module/misc/lang/en.php b/module/misc/lang/en.php index 1ba29db38d..ca9733fbca 100644 --- a/module/misc/lang/en.php +++ b/module/misc/lang/en.php @@ -139,7 +139,7 @@ $lang->misc->feature->all['9.5.1'][] = array('title'=>'added Restricted Operatio $lang->misc->feature->all['9.3.beta'][] = array('title'=>'upgraded framework,Enhanced security', 'desc' => ''); -$lang->misc->feature->all['9.1.stable'][] = array('title'=>'optimize Test View', 'desc' => '

added TestSuite,CaseLib and Test Statements

'); +$lang->misc->feature->all['9.1.stable'][] = array('title'=>'optimize Test View', 'desc' => '

added TestSuite,CaseLib and QA Report

'); $lang->misc->feature->all['9.1.stable'][] = array('title'=>'support Group steps of TestCase', 'desc' => ''); $lang->misc->feature->all['9.0.beta'][] = array('title'=>'ZenTao CloudMail has been added.', 'desc' => '

ZenTao CloudMail is a free Email service launched jointly with SendCloud. Once binded with ZenTao and passed verification, users can use this service.

'); diff --git a/module/my/view/changepassword.html.php b/module/my/view/changepassword.html.php index 826237c017..e1d63097a1 100755 --- a/module/my/view/changepassword.html.php +++ b/module/my/view/changepassword.html.php @@ -22,8 +22,9 @@
doc->id;?>doc->fileTitle;?>doc->filePath;?>doc->fileTitle;?>doc->filePath;?> doc->extension;?> doc->size;?> doc->addedBy;?>
+ isINT) and $config->isINT) ? 'w-130px' : 'w-90px';?> - + diff --git a/module/product/control.php b/module/product/control.php index 477099f1f1..3a51f13e6d 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -57,6 +57,8 @@ class product extends control $branch = (int)$this->cookie->preBranch; $this->product->setMenu($this->products, $productID, $branch); + if(common::hasPriv('product', 'create')) $this->lang->modulePageActions = html::a($this->createLink('product', 'create'), " " . $this->lang->product->create, '', "class='btn btn-primary'"); + $this->view->title = $this->lang->product->index; $this->view->position[] = $this->lang->product->index; $this->display(); diff --git a/module/product/css/view.css b/module/product/css/view.css index b318347e90..c4ae1ded18 100644 --- a/module/product/css/view.css +++ b/module/product/css/view.css @@ -1,6 +1,6 @@ .branch-list {padding-left: 0; margin: 0;} .branch-list > li {float: left; list-style: none; width: 50%; margin: 5px 0;} -.data-basic.table-data tbody > tr > th {width: 80px;} +.data-basic.table-data tbody > tr > th {width: 100px;} .block-release .panel-body, .block-dynamic .panel-body {height: 240px; overflow-x: hidden; overflow-y: auto; position: relative;} .block-release .panel-body {padding-bottom: 50px;} .block-release .panel-body > .btn.pull-right {position: absolute; right: 20px; bottom: 20px;} diff --git a/module/product/view/view.html.php b/module/product/view/view.html.php index 6cfa0493e1..30caa016f5 100644 --- a/module/product/view/view.html.php +++ b/module/product/view/view.html.php @@ -11,6 +11,9 @@ */ ?> +app->getClientLang() == 'en'):?> + +
@@ -134,7 +137,7 @@
user->account;?>user->account;?> account . html::hidden('account',$user->account);?>
- + @@ -191,8 +194,9 @@
productCommon;?> productCommon;?> PO);?> product->qa;?> QD);?>
+ app->getClientLang() == 'en' ? ' ' : '';?> - + @@ -200,7 +204,7 @@ - + @@ -208,7 +212,7 @@ - + @@ -216,7 +220,7 @@ - + @@ -232,7 +236,6 @@ -
diff --git a/module/productplan/js/view.js b/module/productplan/js/view.js index 27a3defb47..08c0e88858 100644 --- a/module/productplan/js/view.js +++ b/module/productplan/js/view.js @@ -9,6 +9,8 @@ function showLink(planID, type, orderBy, param) $linkBox.find('[data-ride="table"]').table(); $.toggleQueryBox(true, $linkBox.find('#queryBox')); }); + + $('.actions').find("a[href*='" + type + "']").addClass('hidden'); } $(function() diff --git a/module/productplan/view/linkbug.html.php b/module/productplan/view/linkbug.html.php index 23d7edb751..8a48f77bae 100644 --- a/module/productplan/view/linkbug.html.php +++ b/module/productplan/view/linkbug.html.php @@ -60,7 +60,7 @@
- productplan->linkBug, '', 'btn');?> + productplan->linkBug, '', 'btn btn-secondary');?>
diff --git a/module/productplan/view/linkstory.html.php b/module/productplan/view/linkstory.html.php index fdf527916f..3795ad1962 100644 --- a/module/productplan/view/linkstory.html.php +++ b/module/productplan/view/linkstory.html.php @@ -68,7 +68,7 @@
- productplan->linkStory, '', 'btn');?> + productplan->linkStory, '', 'btn btn-secondary');?>
diff --git a/module/productplan/view/view.html.php b/module/productplan/view/view.html.php index d91ddc669b..0428e7f782 100644 --- a/module/productplan/view/view.html.php +++ b/module/productplan/view/view.html.php @@ -37,22 +37,7 @@ deleted) { - echo "
"; - $batchMisc = common::hasPriv('story', 'batchCreate') ? 'btn btn-link' : "disabled"; - $batchLink = common::hasPriv('story', 'batchCreate') ? $this->createLink('story', 'batchCreate', "productID=$plan->product&branch=$plan->branch&moduleID=0&story=0&project=0&plan={$plan->id}") : '#'; - echo html::a($batchLink, "" . $lang->story->batchCreate . '', '', "class='$batchMisc'"); - common::printIcon('story', 'create', "productID=$plan->product&branch=$plan->branch&moduleID=0&storyID=0&projectID=0&bugID=0&planID=$plan->id", $plan, 'button', 'plus'); - echo "
"; - - if(common::hasPriv('productplan', 'linkStory')) - { - echo html::a(inlink('view', "planID=$plan->id&type=story&orderBy=id_desc&link=true"), ' ' . $lang->productplan->linkStory, '', "class='btn btn-link'"); - } - if(common::hasPriv('productplan', 'linkBug') and $config->global->flow != 'onlyStory') - { - echo html::a(inlink('view', "planID=$plan->id&type=bug&orderBy=id_desc&link=true"), ' ' . $lang->productplan->linkBug, '', "class='btn btn-link'"); - } - 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}"), "", '', "class='btn btn-link' title='{$this->lang->productplan->children}'"); + 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}'"); common::printIcon('productplan', 'edit', "planID=$plan->id", $plan); common::printIcon('productplan', 'delete', "planID=$plan->id", $plan, 'button', 'trash', 'hiddenwin'); } @@ -71,12 +56,22 @@
'> -
- id, \"story\")", ' ' . $lang->productplan->linkStory, '', "class='btn btn-primary'");?> + deleted) + { + $batchMisc = common::hasPriv('story', 'batchCreate') ? 'btn btn-link' : "disabled"; + $batchLink = common::hasPriv('story', 'batchCreate') ? $this->createLink('story', 'batchCreate', "productID=$plan->product&branch=$plan->branch&moduleID=0&story=0&project=0&plan={$plan->id}") : '#'; + echo html::a($batchLink, "" . $lang->story->batchCreate . '', '', "class='$batchMisc'"); + common::printIcon('story', 'create', "productID=$plan->product&branch=$plan->branch&moduleID=0&storyID=0&projectID=0&bugID=0&planID=$plan->id", $plan, 'button', 'plus'); + } + if(common::hasPriv('productplan', 'linkStory')) echo html::a("javascript:showLink($plan->id, \"story\")", ' ' . $lang->productplan->linkStory, '', "class='btn btn-primary'"); + ?>
+ + id&orderBy=$orderBy");?>">
story->statusList['active'] . $lang->story->common;?>story->statusList['active'] . $space . $lang->story->common;?> stories['active']?> product->plans?> plans?>bugs?>
story->statusList['changed'] . $lang->story->common;?>story->statusList['changed'] . $space . $lang->story->common;?> stories['changed']?> product->projects?> projects?>cases?>
story->statusList['draft'] . $lang->story->common;?>story->statusList['draft'] . $space . $lang->story->common;?> stories['draft']?> product->builds?> builds?>docs?>
story->statusList['closed'] . $lang->story->common;?>story->statusList['closed'] . $space . $lang->story->common;?> stories['closed']?> product->releases?> releases?>
app->viewType != 'mhtml') unset($this->lang->project->menu->index); $this->commonAction($projectID); //$this->project->setMenu($this->projects, key($this->projects)); + + if(common::hasPriv('project', 'create')) $this->lang->modulePageActions = html::a($this->createLink('project', 'create'), " " . $this->lang->project->create, '', "class='btn btn-primary'"); $this->view->title = $this->lang->project->index; $this->view->position[] = $this->lang->project->index; @@ -1051,7 +1053,7 @@ class project extends control $this->project->updateProducts($projectID); if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError())); - $this->loadModel('action')->create('project', $projectID, 'opened'); + $this->loadModel('action')->create('project', $projectID, 'opened', '', join(',', $_POST['products'])); $planID = reset($_POST['plans']); if(!empty($planID)) @@ -1709,7 +1711,7 @@ class project extends control * @access public * @return void */ - public function manageProducts($projectID, $from='') + public function manageProducts($projectID, $from = '') { /* use first project if projectID does not exist. */ if(!isset($this->projects[$projectID])) $projectID = key($this->projects); @@ -1721,6 +1723,8 @@ class project extends control $this->project->updateProducts($projectID); if(dao::isError()) die(js::error(dao::getError())); + + $this->loadModel('action')->create('project', $projectID, 'Managed', '', join(',', $_POST['products'])); die(js::locate($browseProjectLink)); } diff --git a/module/project/css/kanban.css b/module/project/css/kanban.css index c9ccad2451..a44b02dfe1 100644 --- a/module/project/css/kanban.css +++ b/module/project/css/kanban.css @@ -19,6 +19,9 @@ .board-item .btn {padding: 2px 10px 2px 23px; font-size: 12px; position: relative; left: -2px; height: 24px;} .board-item .btn-icon-left > .icon {width: 22px; height: 22px; line-height: 20px; font-size: 14px; opacity: 1; top: 1px} .board-item .btn-icon-left > span {max-width: 80px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; display: inline-block;} +.board-title {padding-right: 20px;} +.board-actions {position: absolute; right: 3px; top: 3px;} +.board-actions.nav > li > a {padding: 3px 3px;} #kanban {overflow-y: auto} #kanban > .table {min-width: 1100px;} #kanban.dragging .boards.dragging .board {background: #eee; opacity: .35; border-color: #f1f1f1} @@ -43,4 +46,4 @@ #kanban .group-title {word-break: break-all; line-height: 16px; padding: 3px 0; display: block;} .table-grouped > tbody > tr, -.table-grouped > tbody > tr:hover {background: #fff!important;} \ No newline at end of file +.table-grouped > tbody > tr:hover {background: #fff!important;} diff --git a/module/project/css/view.css b/module/project/css/view.css index 771b0e9847..d89617d1cc 100644 --- a/module/project/css/view.css +++ b/module/project/css/view.css @@ -8,3 +8,4 @@ #burnLegend > div.line-real:before {background: #006AF1;} .block-dynamic .panel-body {height: 230px; overflow: auto; position: relative;} +.block-team div.col-xs-6{white-space: nowrap; overflow: hidden;} diff --git a/module/project/js/kanban.js b/module/project/js/kanban.js index a23204f053..cbe413726a 100644 --- a/module/project/js/kanban.js +++ b/module/project/js/kanban.js @@ -196,18 +196,4 @@ $(function() }); return false; }); - - $.extend({'closeModal':function(callback, location) - { - var ref = $('#triggerModal.modal').attr('ref'); - if(ref.indexOf('export') > 0 && ref.indexOf('kanban') > 0) - { - $('#triggerModal').modal('hide'); - } - else - { - kanbanModalTrigger.close(); - } - if(callback && $.isFunction(callback)) callback(); - }}); }); diff --git a/module/project/lang/en.php b/module/project/lang/en.php index 020b6db385..4b08b69411 100644 --- a/module/project/lang/en.php +++ b/module/project/lang/en.php @@ -208,7 +208,7 @@ $lang->project->timeSummary = '
Tasks %s :Wait %s   Doing %s
Est. %s :Cost %s   Left %s
"; $lang->project->wbs = "Decompose Task"; $lang->project->batchWBS = "Batch Decompose"; -$lang->project->howToUpdateBurn = "Help "; +$lang->project->howToUpdateBurn = "Help "; $lang->project->whyNoStories = "No Story can be linked. Please check whether there is Story in {$lang->projectCommon} linked {$lang->productCommon} and make sure it has been reviewed."; $lang->project->productStories = "{$lang->projectCommon} linked story is the subeset of {$lang->productCommon}, which can only be linked after review. Please Link Story。"; $lang->project->haveDraft = "There are %s draft stories can't be linked."; @@ -246,6 +246,11 @@ $lang->project->withweekend = 'incl. Weekend'; $lang->project->interval = 'Intervals'; $lang->project->fixFirstWithLeft = 'Modify the left'; +$lang->project->action = new stdclass(); +$lang->project->action->opened = '$date, created by $actor .' . "\n"; +$lang->project->action->managed = '$date, managed by $actor .' . "\n"; +$lang->project->action->extra = 'The related products are %s.'; + /* 统计。*/ $lang->project->charts = new stdclass(); $lang->project->charts->burn = new stdclass(); diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php index d8d86cc5e0..0c0341daba 100644 --- a/module/project/lang/zh-cn.php +++ b/module/project/lang/zh-cn.php @@ -246,6 +246,11 @@ $lang->project->withweekend = '显示周末'; $lang->project->interval = '间隔'; $lang->project->fixFirstWithLeft = '修改剩余工时'; +$lang->project->action = new stdclass(); +$lang->project->action->opened = '$date, 由 $actor 创建。$extra' . "\n"; +$lang->project->action->managed = '$date, 由 $actor 维护。$extra' . "\n"; +$lang->project->action->extra = '相关产品为 %s。'; + /* 统计。*/ $lang->project->charts = new stdclass(); $lang->project->charts->burn = new stdclass(); diff --git a/module/project/model.php b/module/project/model.php index fba8ca1742..61ae7e1279 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -1698,6 +1698,7 @@ class projectModel extends model foreach($users as $account => $realName) { $firstLetter = ucfirst(substr($account, 0, 1)) . ':'; + if(isset($this->config->isINT) and $this->config->isINT) $firstLetter = ''; $users[$account] = $firstLetter . ($realName ? $realName : $account); } return array('' => '') + $users; diff --git a/module/project/view/kanban.html.php b/module/project/view/kanban.html.php index 2806e366be..b32a7f3ef3 100644 --- a/module/project/view/kanban.html.php +++ b/module/project/view/kanban.html.php @@ -113,7 +113,24 @@ $account = $this->app->user->account;
- createLink('story', 'view', "storyID=$story->id", '', true), $story->title, '', 'class="kanbaniframe group-title" title="' . $story->title . '"');?> +
+ createLink('story', 'view', "storyID=$story->id", '', true), $story->title, '', 'class="kanbaniframe group-title" title="' . $story->title . '"');?> + +
#id?> story->priList, $story->pri);?> diff --git a/module/release/js/view.js b/module/release/js/view.js index 7ceb844687..5b456aa4bf 100644 --- a/module/release/js/view.js +++ b/module/release/js/view.js @@ -11,6 +11,8 @@ function showLink(releaseID, type, param) $linkBox.find('[data-ride="table"]').table(); $.toggleQueryBox(true, $linkBox.find('#queryBox')); }); + + $('.actions').find("a[href*='" + type + "']").addClass('hidden'); } $(function() diff --git a/module/release/view/linkbug.html.php b/module/release/view/linkbug.html.php index 29210070e6..9140f62695 100644 --- a/module/release/view/linkbug.html.php +++ b/module/release/view/linkbug.html.php @@ -64,7 +64,7 @@ $formID = $type == 'leftBug' ? 'unlinkedLeftBugsForm' : 'unlinkedBugsForm';
- release->linkBug, '', 'btn');?> + release->linkBug, '', 'btn btn-secondary');?>
diff --git a/module/release/view/linkstory.html.php b/module/release/view/linkstory.html.php index d8898af714..09c9b1ec4e 100644 --- a/module/release/view/linkstory.html.php +++ b/module/release/view/linkstory.html.php @@ -65,7 +65,7 @@
- release->linkStory, '', 'btn');?> + release->linkStory, '', 'btn btn-secondary');?>
diff --git a/module/release/view/view.html.php b/module/release/view/view.html.php index 253060f0ac..4778d230ed 100644 --- a/module/release/view/view.html.php +++ b/module/release/view/view.html.php @@ -33,9 +33,6 @@ deleted) { - if(common::hasPriv('release', 'linkStory')) echo html::a(inlink('view', "releaseID=$release->id&type=story&link=true"), ' ' . $lang->release->linkStory, '', "class='btn btn-link'"); - if(common::hasPriv('release', 'linkBug') and $config->global->flow != 'onlyStory') echo html::a(inlink('view', "releaseID=$release->id&type=bug&link=true"), ' ' . $lang->release->linkBug, '', "class='btn btn-link'"); - if(common::hasPriv('release', 'changeStatus', $release)) { $changedStatus = $release->status == 'normal' ? 'terminate' : 'normal'; diff --git a/module/report/model.php b/module/report/model.php index d6750e1fb1..8361e68a2b 100644 --- a/module/report/model.php +++ b/module/report/model.php @@ -24,7 +24,7 @@ class reportModel extends model { $sum = 0; foreach($datas as $data) $sum += $data->value; - foreach($datas as $data) $data->percent = round($data->value / $sum, 2); + foreach($datas as $data) $data->percent = round($data->value / $sum, 4); return $datas; } diff --git a/module/search/view/buildform.html.php b/module/search/view/buildform.html.php index ca07c26eef..f3865d485f 100644 --- a/module/search/view/buildform.html.php +++ b/module/search/view/buildform.html.php @@ -15,15 +15,17 @@ $jsRoot = $this->app->getWebRoot() . "js/"; include '../../common/view/datepicker.html.php'; include '../../common/view/chosen.html.php'; $formId = 'searchForm-' . uniqid(''); +$fieldWidth = $app->getClientLang() == 'en' ? 'w-130px' : 'w-110px'; +$operatorWidth = $app->getClientLang() == 'en' ? 'w-110px' : 'w-100px'; ?>