This commit is contained in:
tengfei
2017-12-05 11:26:51 +08:00
55 changed files with 184 additions and 163 deletions
+1 -1
View File
@@ -1 +1 @@
9.6.2
9.6.3
+1 -1
View File
@@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}}
if(!function_exists('getWebRoot')){function getWebRoot(){}}
/* 基本设置。Basic settings. */
$config->version = '9.6.2'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it.
$config->version = '9.6.3'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it.
$config->charset = 'UTF-8'; // ZenTaoPHP的编码。 The encoding of ZenTaoPHP.
$config->cookieLife = time() + 2592000; // Cookie的生存时间。The cookie life time.
$config->timezone = 'Asia/Shanghai'; // 时区设置。 The time zone setting, for more see http://www.php.net/manual/en/timezones.php.
+1 -1
View File
@@ -914,7 +914,7 @@ INSERT INTO `zt_group` (`id`, `name`, `role`, `desc`) VALUES
(7, 'PD', 'pd', 'for product director.'),
(8, 'QD', 'qd', 'for quality director.'),
(9, 'TOP', 'top', 'for top manager.'),
(10, 'OTHERS', '', 'for others.'),
(10, 'OTHERS', 'others', 'for others.'),
(11, 'guest', 'guest', 'For guest'),
(12, 'limited', 'limited', 'For limited user');
-2
View File
@@ -15,5 +15,3 @@
.dropdown-list > li > a {display: block; padding: 3px 20px; clear: both; font-weight: normal; line-height: 1.53846154; color: #141414; white-space: nowrap;}
.dropdown-list > li > a:hover,
.dropdown-list > li > a:focus {color: #1a4f85;text-decoration: none;background-color: #ddd;}
#bugForm{overflow-y:auto;}
+2 -2
View File
@@ -728,7 +728,7 @@ class bugModel extends model
->setDefault('lastEditedBy', $this->app->user->account)
->setDefault('lastEditedDate', $now)
->setDefault('assignedDate', $now)
->remove('comment')
->remove('comment,showModule')
->join('mailto', ',')
->get();
@@ -1760,7 +1760,7 @@ class bugModel extends model
{
$datas = $this->dao->select('pri AS name, COUNT(*) AS value')->from(TABLE_BUG)->where($this->reportCondition())->groupBy('name')->orderBy('value DESC')->fetchAll('name');
if(!$datas) return array();
foreach($datas as $status => $data) $data->name = $this->lang->bug->report->bugsPerPri->graph->xAxisName . ':' . $data->name;
foreach($datas as $status => $data) $data->name = $this->lang->bug->report->bugsPerPri->graph->xAxisName . ':' . zget($this->lang->bug->priList, $data->name);
return $datas;
}
+1 -1
View File
@@ -175,7 +175,7 @@ js::set('branch', $branch);
$widths = $this->datatable->setFixedFieldWidth($setting);
$columns = 0;
?>
<table class='table table-condensed table-hover table-striped tablesorter table-fixed <?php echo $useDatatable ? 'datatable' : ''?>' id='bugList' data-checkable='true' data-fixed-left-width='<?php echo $widths['leftWidth']?>' data-fixed-right-width='<?php echo $widths['rightWidth']?>' data-custom-menu='true' data-checkbox-name='bugIDList[]'>
<table class='table table-condensed table-hover table-striped tablesorter table-fixed <?php echo ($useDatatable ? 'datatable' : 'table-selectable');?>' id='bugList' data-checkable='true' data-fixed-left-width='<?php echo $widths['leftWidth']?>' data-fixed-right-width='<?php echo $widths['rightWidth']?>' data-custom-menu='true' data-checkbox-name='bugIDList[]'>
<thead>
<tr>
<?php
+1 -1
View File
@@ -346,7 +346,7 @@ class build extends control
}
if($varName == 'testTaskBuild')
{
$builds = $this->build->getProjectBuildPairs($projectID, $productID, $branch, 'noempty');
$builds = $this->build->getProjectBuildPairs($projectID, $productID, $branch, 'noempty,notrunk');
if($isJsonView) die(json_encode($builds));
else die(html::select('build', $builds, $build, "class='form-control'"));
}
+1 -9
View File
@@ -59,15 +59,7 @@ $(document).ready(function()
var $target = $(e.target);
if ($target.closest('.task-toggle').length) return false;
var $checkRow = $target.closest('.check-row, .check-btn');
if($checkRow.length)
{
if($checkRow.is('.check-row'))
{
toggleRowClass($checkRow);
syncChecks();
}
return false;
}
if($checkRow.length) return true;
},
startDrag: function(e)
{
+1 -1
View File
@@ -65,7 +65,7 @@ js::set('confirmDelete', $lang->user->confirmDelete);
printf('%03d', $user->id);
?>
</td>
<td><?php if(!common::printLink('user', 'view', "account=$user->account", $user->realname)) echo $user->realname;?></td>
<td><?php if(!common::printLink('user', 'view', "account=$user->account", $user->realname, '', "title='$user->realname'")) echo $user->realname;?></td>
<td><?php echo $user->account;?></td>
<td><?php echo $lang->user->roleList[$user->role];?></td>
<td><?php echo html::mailto($user->email);?></td>
+8 -1
View File
@@ -21,11 +21,18 @@ class customModel extends model
{
$allCustomLang = $this->dao->select('*')->from(TABLE_LANG)->orderBy('lang,id')->fetchAll('id');
$currentLang = $this->app->getClientLang();
$currentLang = $this->app->getClientLang();
$sectionLang = array();
foreach($allCustomLang as $customLang)
{
$sectionLang[$customLang->module][$customLang->section][$customLang->lang] = $customLang->lang;
}
$processedLang = array();
foreach($allCustomLang as $id => $customLang)
{
if($customLang->lang != $currentLang and $customLang->lang != 'all') continue;
if(isset($sectionLang[$customLang->module][$customLang->section]['all']) && isset($sectionLang[$customLang->module][$customLang->section][$currentLang]) && $customLang->lang == 'all') continue;
$processedLang[$customLang->module][$customLang->section][$customLang->key] = $customLang->value;
}
+1 -1
View File
@@ -108,7 +108,7 @@
<?php $uploadDate = $lang->file->uploadDate . substr($file->addedDate, 0, 10);?>
<li class='list-group-item' title='<?php echo $uploadDate?>' style='position:relative;'>
<a href="<?php echo $file->webPath?>" target="_blank">
<img onload="setImageSize(this,0)" src="<?php echo $file->webPath?>" alt="<?php echo $file->title?>">
<img onload="setImageSize(this,0)" src="<?php echo $this->createLink('file', 'read', "fileID={$file->id}");?>" alt="<?php echo $file->title?>">
</a>
<span class='right-icon' style='position:absolute;right:-18px;top:0px;'>
<?php if(common::hasPriv('file', 'delete')) echo html::a('###', "<i class='icon-remove'></i>", '', "class='btn-icon' onclick='deleteFile($file->id)' title='$lang->delete'");?>
+4 -3
View File
@@ -339,11 +339,12 @@ class file extends control
{
$this->app->loadLang('action');
$file = $this->file->getByID($fileID);
$this->dao->update(TABLE_FILE)->set('title')->eq($this->post->fileName)->where('id')->eq($fileID)->exec();
$data = fixer::input('post')->get();
$this->dao->update(TABLE_FILE)->set('title')->eq($data->fileName)->where('id')->eq($fileID)->exec();
$extension = "." . $file->extension;
$actionID = $this->loadModel('action')->create($file->objectType, $file->objectID, 'editfile', '', $this->post->fileName . $extension);
$changes[] = array('field' => 'fileName', 'old' => $file->title . $extension, 'new' => $this->post->fileName . $extension);
$actionID = $this->loadModel('action')->create($file->objectType, $file->objectID, 'editfile', '', $data->fileName . $extension);
$changes[] = array('field' => 'fileName', 'old' => $file->title . $extension, 'new' => $data->fileName . $extension);
$this->action->logHistory($actionID, $changes);
die(js::reload('parent.parent'));
+1
View File
@@ -26,6 +26,7 @@
</th>
<td class='w-p60'>
<?php foreach($lang->menu as $menu):?>
<?php if(!is_string($menu)) continue;?>
<?php list($moduleName, $module) = explode('|', $menu);?>
<?php if($module == 'my') continue;?>
<?php $moduleName = strip_tags($moduleName);?>
+13 -4
View File
@@ -158,7 +158,7 @@ class product extends control
$stories = $this->product->getStories($productID, $branch, $browseType, $queryID, $moduleID, $sort, $pager);
/* Process the sql, get the conditon partion, save it to session. */
$this->loadModel('common')->saveQueryCondition($this->dao->get(), 'story');
$this->loadModel('common')->saveQueryCondition($this->dao->get(), 'story', $browseType != 'bysearch');
/* Get related tasks, bugs, cases count of each story. */
$storyIdList = array();
@@ -220,6 +220,12 @@ class product extends control
$productID = $this->product->create();
if(dao::isError()) die(js::error(dao::getError()));
$this->loadModel('action')->create('product', $productID, 'opened');
if(isset($this->config->global->flow) and $this->config->global->flow == 'onlyTest')
{
die(js::locate($this->createLink($this->moduleName, 'build', "productID=$productID"), 'parent'));
}
die(js::locate($this->createLink($this->moduleName, 'browse', "productID=$productID"), 'parent'));
}
@@ -753,7 +759,7 @@ class product extends control
* @access public
* @return void
*/
public function build($productID = 0)
public function build($productID = 0, $branch = 0)
{
$this->app->loadLang('build');
$this->session->set('productList', $this->app->getURI(true));
@@ -765,7 +771,7 @@ class product extends control
/* Get current product. */
$productID = $this->product->saveState($productID, $this->products);
$product = $this->product->getById($productID);
$this->product->setMenu($this->products, $productID);
$this->product->setMenu($this->products, $productID, $branch);
/* Set menu.*/
$this->session->set('buildList', $this->app->getURI(true));
@@ -774,7 +780,10 @@ class product extends control
$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->builds = $this->dao->select('*')->from(TABLE_BUILD)->where('product')->eq($productID)
->beginIF($branch)->andWhere('branch')->eq($branch)->fi()
->andWhere('deleted')->eq(0)
->fetchAll();
$this->view->users = $this->loadModel('user')->getPairs('noletter');
$this->display();
-1
View File
@@ -16,4 +16,3 @@ a.removeModule{color:#ddd}
a.removeModule:hover{color:red}
tbody > tr > td > .btn-icon {margin-right: 3px;}
#productStoryForm{overflow-y:auto;}
+3 -3
View File
@@ -112,7 +112,7 @@
$widths = $this->datatable->setFixedFieldWidth($setting);
$columns = 0;
?>
<table class='table table-condensed table-hover table-striped tablesorter table-fixed <?php echo $useDatatable ? 'datatable' : ''?>' id='storyList' data-checkable='true' data-fixed-left-width='<?php echo $widths['leftWidth']?>' data-fixed-right-width='<?php echo $widths['rightWidth']?>' data-custom-menu='true' data-checkbox-name='storyIDList[]'>
<table class='table table-condensed table-hover table-striped tablesorter table-fixed <?php echo ($useDatatable ? 'datatable' : 'table-selectable');?>' id='storyList' data-checkable='true' data-fixed-left-width='<?php echo $widths['leftWidth']?>' data-fixed-right-width='<?php echo $widths['rightWidth']?>' data-custom-menu='true' data-checkbox-name='storyIDList[]'>
<thead>
<tr>
<?php
@@ -281,14 +281,14 @@
$withSearch = count($users) > 10;
$actionLink = $this->createLink('story', 'batchAssignTo', "productID=$productID");
echo "<li class='dropdown-submenu'>";
echo html::select('assignedTo', $users, '', 'class="hidden"');
echo html::select('assignedTo', $users, 'admin', 'class="hidden"');
echo html::a('javascript::', $lang->story->assignedTo, '', 'id="assignItem"');
echo "<div class='dropdown-menu" . ($withSearch ? ' with-search':'') . "'>";
echo '<ul class="dropdown-list">';
foreach ($users as $key => $value)
{
if(empty($key) or $key == 'closed') continue;
echo "<li class='option' data-key='$key'>" . html::a("javascript:$(\".table-actions #assignedTo\").val(\"$key\");setFormAction(\"$actionLink\")", $value, '', '') . '</li>';
echo "<li class='option' data-key='$key'>" . html::a("javascript:$(\"#assignedTo\").val(\"$key\");setFormAction(\"$actionLink\",\"hiddenwin\")", $value, '', '') . '</li>';
}
echo "</ul>";
if($withSearch) echo "<div class='menu-search'><div class='input-group input-group-sm'><input type='text' class='form-control'><span class='input-group-addon'><i class='icon-search'></i></span></div></div>";
-1
View File
@@ -137,7 +137,6 @@ class project extends control
$products = $this->config->global->flow == 'onlyTask' ? array() : $this->loadModel('product')->getProductsByProject($projectID);
setcookie('preProjectID', $projectID, $this->config->cookieLife, $this->config->webRoot);
if($this->cookie->preProjectID != $projectID)
{
$_COOKIE['moduleBrowseParam'] = $_COOKIE['productBrowseParam'] = 0;
+3 -3
View File
@@ -1,11 +1,11 @@
.mgr-5px{margin-right:5px;}
#productsBox .col-sm-3{margin-bottom:5px;}
.table-children > td:first-child{border-left:2px solid #ccc}
.table-children > td:last-child{;border-right:2px solid #ccc;}
.table-children > td:first-child{border-left:2px solid #ccc;}
.table-children > td:last-child{border-right:2px solid #ccc;}
.fixed-left .table-children > td{border-right:none;}
.flexarea .table-children > td{border-left:none;border-right:none;}
.fixed-right .table-children > td{border-left:none;}
.table-children.table-child-top{border-top:2px solid #ccc;}
.table-children.table-child-bottom{border-bottom:2px solid #ccc;}
.table-children td{background-color:#fff!important;}
.table-striped>tbody>tr.table-children:nth-child(odd)>td, .table-striped>tbody>tr.table-children:nth-child(odd)>th{background-color:#fff;}
+1 -1
View File
@@ -24,4 +24,4 @@
.pl-5px{padding-left:5px;}
tbody > tr > td > .btn-icon {margin-right: 2px}
#projectTaskForm{overflow-x:auto; padding:0px 1px;}
#projectTaskForm{padding:0px 1px;}
+2 -1
View File
@@ -342,7 +342,7 @@ class projectModel extends model
$member->role = $this->lang->project->$fieldName;
$member->days = $project->days;
$member->hours = $this->config->project->defaultWorkhours;
$this->dao->insert(TABLE_TEAM)->data($member)->exec();
$this->dao->replace(TABLE_TEAM)->data($member)->exec();
}
}
}
@@ -976,6 +976,7 @@ class projectModel extends model
->where('project')->eq((int)$projectID)
->andWhere('status')->ne('cancel')
->andWhere('deleted')->eq(0)
->andWhere('parent')->eq(0)
->fetch();
$project->days = $project->days ? $project->days : '';
$project->totalHours = $this->dao->select('sum(days * hours) AS totalHours')->from(TABLE_TEAM)->where('project')->eq($project->id)->fetch('totalHours');
+1 -1
View File
@@ -52,7 +52,7 @@ js::set('browseType', $browseType);
$widths = $this->datatable->setFixedFieldWidth($customFields);
$columns = 0;
?>
<table class='table table-condensed table-hover table-striped tablesorter table-fixed <?php if($useDatatable) echo 'datatable';?>' id='taskList' data-checkable='true' data-fixed-left-width='<?php echo $widths['leftWidth']?>' data-fixed-right-width='<?php echo $widths['rightWidth']?>' data-custom-menu='true' data-checkbox-name='taskIDList[]'>
<table class='table table-condensed table-hover table-striped tablesorter table-fixed <?php echo ($useDatatable ? 'datatable' : 'table-selectable');?> table-selectable' id='taskList' data-checkable='true' data-fixed-left-width='<?php echo $widths['leftWidth']?>' data-fixed-right-width='<?php echo $widths['rightWidth']?>' data-custom-menu='true' data-checkbox-name='taskIDList[]'>
<thead>
<tr>
<?php
+2 -1
View File
@@ -16,6 +16,7 @@ $lang->report->item = 'Item';
$lang->report->value = 'Value';
$lang->report->percent = '%';
$lang->report->undefined = 'Undefined';
$lang->report->query = 'Query';
$lang->report->colors[] = 'AFD8F8';
$lang->report->colors[] = 'F6BD0F';
@@ -54,7 +55,7 @@ $lang->report->id = 'ID';
$lang->report->project = $lang->projectCommon;
$lang->report->product = $lang->productCommon;
$lang->report->user = 'Username';
$lang->report->bug = 'Bugs';
$lang->report->bugTotal = 'Bugs';
$lang->report->task = 'Tasks';
$lang->report->estimate = 'Est.';
$lang->report->consumed = 'Consumed';
+2 -1
View File
@@ -16,6 +16,7 @@ $lang->report->item = '条目';
$lang->report->value = '值';
$lang->report->percent = '百分比';
$lang->report->undefined = '未设定';
$lang->report->query = '查询';
$lang->report->colors[] = 'AFD8F8';
$lang->report->colors[] = 'F6BD0F';
@@ -54,7 +55,7 @@ $lang->report->id = '编号';
$lang->report->project = $lang->projectCommon;
$lang->report->product = $lang->productCommon;
$lang->report->user = '姓名';
$lang->report->bug = 'Bug';
$lang->report->bugTotal = 'Bug';
$lang->report->task = '任务数';
$lang->report->estimate = '总预计';
$lang->report->consumed = '总消耗';
+3 -1
View File
@@ -16,6 +16,7 @@ $lang->report->item = '條目';
$lang->report->value = '值';
$lang->report->percent = '百分比';
$lang->report->undefined = '未設定';
$lang->report->query = '查詢';
$lang->report->colors[] = 'AFD8F8';
$lang->report->colors[] = 'F6BD0F';
@@ -42,6 +43,7 @@ $lang->report->bugOpenedDate = 'Bug創建時間';
$lang->report->taskAssignedDate = '起止時間';
$lang->report->beginAndEnd = '起止時間';
$lang->report->dept = '部門';
$lang->report->deviationChart = $lang->projectCommon . '偏差曲綫';
$lang->reportList->project->lists[10] = $lang->projectCommon . '偏差報表|report|projectdeviation';
$lang->reportList->product->lists[10] = $lang->productCommon . '彙總表|report|productsummary';
@@ -53,7 +55,7 @@ $lang->report->id = '編號';
$lang->report->project = $lang->projectCommon;
$lang->report->product = $lang->productCommon;
$lang->report->user = '姓名';
$lang->report->bug = 'Bug';
$lang->report->bugTotal = 'Bug';
$lang->report->task = '任務數';
$lang->report->estimate = '總預計';
$lang->report->consumed = '總消耗';
+2 -4
View File
@@ -282,10 +282,8 @@ class reportModel extends model
*/
public function getBugAssign()
{
$bugs = $this->dao->select('t1.*, t2.name as productName')
->from(TABLE_BUG)->alias('t1')
->leftJoin(TABLE_PRODUCT)->alias('t2')
->on('t1.product = t2.id')
$bugs = $this->dao->select('t1.*, t2.name as productName')->from(TABLE_BUG)->alias('t1')
->leftJoin(TABLE_PRODUCT)->alias('t2')->on('t1.product = t2.id')
->where('t1.deleted')->eq(0)
->andWhere('t1.status')->eq('active')
->andWhere('t2.deleted')->eq(0)
+1 -1
View File
@@ -19,7 +19,7 @@
<tr class='colhead'>
<th><?php echo $lang->report->user;?></th>
<th><?php echo $lang->report->product;?></th>
<th><?php echo $lang->report->bug;?></th>
<th><?php echo $lang->report->bugTotal;?></th>
<th><?php echo $lang->report->total;?></th>
</tr>
</thead>
+1 -1
View File
@@ -44,7 +44,7 @@
</div>
</div>
<div class='col-sm-1'>
<div class='input-group'><?php echo html::submitButton();?></div>
<div class='input-group'><?php echo html::submitButton($lang->report->query);?></div>
</div>
</div>
</form>
+17 -15
View File
@@ -43,7 +43,7 @@ class scoreModel extends model
$desc = $this->lang->score->modules[$module];
$user = empty($account) ? $this->app->user->account : $account;
$time = empty($time) ? helper::now() : $time;
$extended = "ruleExtended[$module][$method]";
$extended = isset($this->config->score->ruleExtended[$module][$method]) ? $this->config->score->ruleExtended[$module][$method] : array();
if(is_numeric($param)) $desc .= 'ID:' . $param;
@@ -54,9 +54,9 @@ class scoreModel extends model
if($method == 'changePassword')
{
if(!empty($this->config->score->{$extended}['strength'][$param]))
if(!empty($extended['strength'][$param]))
{
$rule['score'] = $rule['score'] + $this->config->score->{$extended}['strength'][$param];
$rule['score'] = $rule['score'] + $extended['strength'][$param];
}
$desc = $this->lang->score->methods[$module][$method];
}
@@ -69,7 +69,7 @@ class scoreModel extends model
if(!empty($openedBy))
{
$newRule = $rule;
$newRule['score'] = $this->config->score->{$extended}['createID'];
$newRule['score'] = $extended['createID'];
$this->saveScore($openedBy, $newRule, $module, $method, $desc, $time);
unset($newRule);
}
@@ -86,9 +86,9 @@ class scoreModel extends model
$task = $this->loadModel('task')->getById($param);
if(!empty($this->config->score->{$extended}['pri'][$task->pri]))
if(!empty($extended['pri'][$task->pri]))
{
$rule['score'] = $rule['score'] + $this->config->score->{$extended}['pri'][$task->pri];
$rule['score'] = $rule['score'] + $extended['pri'][$task->pri];
}
if(!empty($task->estimate))
@@ -111,15 +111,15 @@ class scoreModel extends model
{
$user = $param->openedBy;
$desc .= 'ID:' . $param->id;
if(!empty($this->config->score->{$extended}['severity'][$param->severity]))
if(!empty($extended['severity'][$param->severity]))
{
$rule['score'] = $rule['score'] + $this->config->score->{$extended}['severity'][$param->severity];
$rule['score'] = $rule['score'] + $extended['severity'][$param->severity];
}
}
if($method == 'resolve' && !empty($this->config->score->{$extended}['severity'][$param->severity]))
if($method == 'resolve' && !empty($extended['severity'][$param->severity]))
{
$rule['score'] = $rule['score'] + $this->config->score->{$extended}['severity'][$param->severity];
$rule['score'] = $rule['score'] + $extended['severity'][$param->severity];
}
break;
case 'testTask':
@@ -134,10 +134,10 @@ class scoreModel extends model
/* Project PM. */
if(!empty($param->PM))
{
$rule['score'] = $this->config->score->{$extended}['manager']['close'];
$rule['score'] = $extended['manager']['close'];
if($param->end > date('Y-m-d', $timestamp))
{
$rule['score'] += $this->config->score->{$extended}['manager']['onTime'];
$rule['score'] += $extended['manager']['onTime'];
}
$this->saveScore($param->PM, $rule, $module, $method, $desc, $time);
}
@@ -146,10 +146,10 @@ class scoreModel extends model
$teams = $this->dao->select('account')->from(TABLE_TEAM)->where('project')->eq($param->id)->fetchPairs();
if(!empty($teams))
{
$rule['score'] = $this->config->score->{$extended}['member']['close'];
$rule['score'] = $extended['member']['close'];
if($param->end > date('Y-m-d', $timestamp))
{
$rule['score'] += $this->config->score->{$extended}['member']['onTime'];
$rule['score'] += $extended['member']['onTime'];
}
foreach($teams as $user)
@@ -187,6 +187,7 @@ class scoreModel extends model
*/
private function saveScore($account = '', $rule = array(), $module = '', $method = '', $desc = '', $time = '')
{
if($rule['score'] == 0) return true;
if(!empty($rule['times']) || !empty($rule['hour']))
{
if(empty($rule['hour']))
@@ -207,6 +208,7 @@ class scoreModel extends model
}
$user = $this->loadModel('user')->getById($account);
if(empty($user)) return false;
$data = new stdClass();
$data->account = $account;
@@ -219,7 +221,7 @@ class scoreModel extends model
$data->time = empty($time) ? helper::now() : $time;
$this->dao->insert(TABLE_SCORE)->data($data)->exec();
$this->dao->query("UPDATE " . TABLE_USER . " SET `score`=`score` + " . $rule['score'] . ",`scoreLevel`=`scoreLevel` + " . $rule['score'] . " WHERE `account`='" . $account . "'");
$this->dao->update(TABLE_USER)->set("`score`=`score` + " . $rule['score'])->set("`scoreLevel`=`scoreLevel` + " . $rule['score'])->where('account')->eq($account)->exec();
}
/**
+1 -1
View File
@@ -970,7 +970,7 @@ class story extends control
}
}
if(!dao::isError()) $this->loadModel('score')->create('ajax', 'batchOther');
die(js::locate($this->session->storyList));
die(js::locate($this->session->storyList, 'parent'));
}
/**
-2
View File
@@ -33,5 +33,3 @@ $(function()
ajustFilebox();
$(window).resize(ajustFilebox);
});
+6 -3
View File
@@ -466,7 +466,6 @@ class storyModel extends model
->add('lastEditedDate', $now)
->setDefault('status', $oldStory->status)
->setDefault('product', $oldStory->product)
->setDefault('plan', $oldStory->plan)
->setDefault('branch', $oldStory->branch)
->setIF($this->post->assignedTo != $oldStory->assignedTo, 'assignedDate', $now)
->setIF($this->post->closedBy != false and $oldStory->closedDate == '', 'closedDate', $now)
@@ -1170,6 +1169,7 @@ class storyModel extends model
*/
foreach($branchStatusList as $branch => $statusList)
{
$stage = 'projected';
$testTasks = isset($branchTestTasks[$branch]) ? $branchTestTasks[$branch] : 0;
$develTasks = isset($branchDevelTasks[$branch]) ? $branchDevelTasks[$branch] : 0;
if($statusList['devel']['doing'] > 0 and $statusList['test']['wait'] == $testTasks) $stage = 'developing';
@@ -1570,8 +1570,11 @@ class storyModel extends model
->beginIF($productID != 'all' and $productID != '')->andWhere('product')->eq((int)$productID)->fi()
->fetchPairs();
$tmpStories = $this->dao->select('*')->from(TABLE_STORY)->where($sql)
->beginIF($productID != 'all' and $productID != '')->andWhere('product')->eq((int)$productID)->fi()
$sql = str_replace(array('`product`', '`version`'), array('t1.`product`', 't1.`version`'), $sql);
$tmpStories = $this->dao->select('*')->from(TABLE_STORY)->alias('t1')
->leftJoin(TABLE_PROJECTSTORY)->alias('t2')->on('t1.id=t2.story')
->where($sql)
->beginIF($productID != 'all' and $productID != '')->andWhere('t1.`product`')->eq((int)$productID)->fi()
->andWhere('deleted')->eq(0)
->orderBy($orderBy)
->page($pager)
+2
View File
@@ -19,12 +19,14 @@ function loadBranch()
function loadProductBranches(productID)
{
$('#branch').remove();
$('#branch_chosen').remove();
$.get(createLink('branch', 'ajaxGetBranches', "productID=" + productID), function(data)
{
if(data)
{
$('#product').closest('.input-group').append(data);
$('#branch').css('width', config.currentMethod == 'create' ? '120px' : '65px');
$('#branch').chosen(defaultChosenOptions);
}
})
}
+12 -17
View File
@@ -446,7 +446,8 @@ class task extends control
$this->view->title = $this->view->project->name . $this->lang->colon . $this->lang->task->assign;
$this->view->position[] = $this->lang->task->assign;
$this->view->task = $task;
$this->view->users = $members;
$this->view->members = $members;
$this->view->users = $this->loadModel('user')->getPairs();
$this->display();
}
@@ -778,17 +779,22 @@ class task extends control
$task = $this->view->task;
$members = $this->loadModel('user')->getPairs('noletter');
$this->view->users = $members;
if(!empty($task->team))
{
$task->openedBy = $this->task->getNextUser(array_keys($task->team), $task->assignedTo);
$members = $this->task->getMemberPairs($task);
$teams = array_keys($task->team);
$task->openedBy = $this->task->getNextUser($teams, $task->assignedTo);
$task->myConsumed = $this->dao->select('consumed')->from(TABLE_TEAM)->where('task')->eq($taskID)->andWhere('account')->eq($task->assignedTo)->fetch('consumed');
$lastAccount = end($teams);
if($lastAccount != $task->assignedTo) $members = $this->task->getMemberPairs($task);
}
$this->view->title = $this->view->project->name . $this->lang->colon .$this->lang->task->finish;
$this->view->position[] = $this->lang->task->finish;
$this->view->members = $members;
$this->display();
}
@@ -821,6 +827,7 @@ class task extends control
$this->view->title = $this->view->project->name . $this->lang->colon .$this->lang->task->pause;
$this->view->position[] = $this->lang->task->pause;
$this->view->users = $this->loadModel('user')->getPairs('noletter');
$this->display();
}
@@ -1188,9 +1195,6 @@ class task extends control
->beginIF($this->post->exportType == 'selected')->andWhere('t1.id')->in($this->cookie->checkedItem)->fi()
->orderBy($orderBy)->fetchAll('id');
$taskList = array_keys($tasks);
if(!empty($taskList)) $children = $this->dao->select('*')->from(TABLE_TASK)->where('parent')->in($taskList)->fetchGroup('parent');
foreach($tasks as $key => $task)
{
/* Compute task progress. */
@@ -1209,16 +1213,7 @@ class task extends control
$task->progress .= '%';
$tasks[$key] = $task;
if(isset($children[$task->id]))
{
foreach($children[$task->id] as $child)
{
$child->name = '[' . $taskLang->childrenAB . '] ' . $child->name;
$tasks[$child->id] = $child;
}
}
if($task->parent) $task->name = '[' . $taskLang->childrenAB . '] ' . $task->name;
}
}
else
+19 -44
View File
@@ -349,11 +349,10 @@ class taskModel extends model
$teams = array();
if($this->post->multiple)
{
$estimate = 0;
$left = 0;
foreach($this->post->team as $row => $account)
{
if(empty($account) or isset($team[$account])) continue;
$member = new stdClass();
$member->project = 0;
$member->account = $account;
@@ -365,37 +364,16 @@ class taskModel extends model
$member->left = $member->estimate - $member->consumed;
$member->order = $row;
$teams[$account] = $member;
$estimate += (float)$member->eatimate;
$left += (float)$member->left;
}
if(!empty($teams))
if(!empty($teams) and !isset($task->assignedTo))
{
$task->estimate = $estimate;
$task->left = $left;
if(!isset($task->assignedTo))
{
$firstMember = reset($teams);
$task->assignedTo = $firstMember->account;
}
$firstMember = reset($teams);
$task->assignedTo = $firstMember->account;
}
}
if($task->consumed < $oldTask->consumed)
{
die(js::error($this->lang->task->error->consumedSmall));
}
elseif($task->consumed != $oldTask->consumed or $task->left != $oldTask->left)
{
$estimate = new stdClass();
$estimate->consumed = $task->consumed - $oldTask->consumed;
$estimate->left = $task->left;
$estimate->task = $taskID;
$estimate->account = $this->app->user->account;
$estimate->date = helper::now();
$this->addTaskEstimate($estimate);
}
if($task->consumed < $oldTask->consumed) die(js::error($this->lang->task->error->consumedSmall));
$task = $this->loadModel('file')->processImgURL($task, $this->config->task->editor->edit['id'], $this->post->uid);
$this->dao->update(TABLE_TASK)->data($task)
@@ -648,8 +626,8 @@ class taskModel extends model
->cleanFloat('left')
->setDefault('lastEditedBy', $this->app->user->account)
->setDefault('lastEditedDate', $now)
->remove('comment,showModule')
->setDefault('assignedDate', $now)
->remove('comment,showModule')
->get();
$this->dao->update(TABLE_TASK)
@@ -1142,7 +1120,7 @@ class taskModel extends model
if(!empty($task->parent)) $task->parentName = $this->dao->findById($task->parent)->from(TABLE_TASK)->fetch('name');
$teams = $this->dao->select('*')->from(TABLE_TEAM)->where('task')->eq($taskID)->orderBy('order_desc')->fetchGroup('task', 'account');
foreach($teams as $key => $team) $teams[$key] = array_reverse($team);
foreach($teams as $key => $team) $teams[$key] = array_reverse($team, true);
$task->team = isset($teams[$taskID]) ? $teams[$taskID] : array();
foreach($children as $child) $child->team = isset($teams[$child->id]) ? $teams[$child->id] : array();
@@ -1229,7 +1207,6 @@ class taskModel extends model
->leftJoin(TABLE_USER)->alias('t3')->on('t1.assignedTo = t3.account')
->where('t1.project')->eq((int)$projectID)
->andWhere('t1.deleted')->eq(0)
->andWhere('t1.parent')->eq(0)
->beginIF($productID)->andWhere('t2.product')->eq((int)$productID)->fi()
->beginIF($type == 'undone')->andWhere("(t1.status = 'wait' or t1.status ='doing')")->fi()
->beginIF($type == 'needconfirm')->andWhere('t2.version > t1.storyVersion')->andWhere("t2.status = 'active'")->fi()
@@ -1238,26 +1215,24 @@ class taskModel extends model
->beginIF($type == 'delayed')->andWhere('t1.deadline')->gt('1970-1-1')->andWhere('t1.deadline')->lt(date(DT_DATE1))->andWhere('t1.status')->in('wait,doing')->fi()
->beginIF(is_array($type) or strpos(',all,undone,needconfirm,assignedtome,delayed,finishedbyme,', ",$type,") === false)->andWhere('t1.status')->in($type)->fi()
->beginIF($modules)->andWhere('t1.module')->in($modules)->fi()
->orderBy($orderBy)
->orderBy('t1.`parent`,' . $orderBy)
->page($pager)
->fetchAll('id');
$this->loadModel('common')->saveQueryCondition($this->dao->get(), 'task', ($productID or $type == 'needconfirm') ? false : true);
if(empty($tasks)) return array();
$taskList = array_keys($tasks);
if(!empty($taskList))
$taskTeam = $this->dao->select('*')->from(TABLE_TEAM)->where('task')->in($taskList)->fetchGroup('task');
foreach($taskTeam as $taskID => $team) $tasks[$taskID]->team = $team;
foreach($tasks as $taskID => $task)
{
$children = $this->dao->select('t1.*, t2.id AS storyID, t2.title AS storyTitle, t2.product, t2.branch, t2.version AS latestStoryVersion, t2.status AS storyStatus, t3.realname AS assignedToRealName')
->from(TABLE_TASK)->alias('t1')
->leftJoin(TABLE_STORY)->alias('t2')->on('t1.story = t2.id')
->leftJoin(TABLE_USER)->alias('t3')->on('t1.assignedTo = t3.account')
->where('t1.parent')->in($taskList)
->andWhere('t1.deleted')->eq(0)
->orderBy('id_desc')
->fetchGroup('parent');
foreach($children as $key => $child) $tasks[$key]->children = $child;
$taskTeam = $this->dao->select('*')->from(TABLE_TEAM)->where('task')->in($taskList)->fetchGroup('task');
foreach($taskTeam as $taskID => $team) $tasks[$taskID]->team = $team;
if($task->parent and isset($tasks[$task->parent]))
{
$tasks[$task->parent]->children[] = $task;
unset($tasks[$taskID]);
}
}
if($tasks) return $this->processTasks($tasks);
@@ -2045,7 +2020,7 @@ class taskModel extends model
case 'name':
if(!empty($task->product) && isset($branchGroups[$task->product][$task->branch])) echo "<span class='label label-info label-badge'>" . $branchGroups[$task->product][$task->branch] . '</span> ';
if($task->module and isset($modulePairs[$task->module])) echo "<span class='label label-info label-badge'>" . $modulePairs[$task->module] . '</span> ';
if($child) echo '<span class="label">' . $this->lang->task->childrenAB . '</span> ';
if($child or !empty($task->parent)) echo '<span class="label">' . $this->lang->task->childrenAB . '</span> ';
if(!empty($task->team)) echo '<span class="label">' . $this->lang->task->multipleAB . '</span> ';
echo $canView ? html::a($taskLink, $task->name, null, "style='color: $task->color'") : "<span style='color: $task->color'>$task->name</span>";
if($task->fromBug) echo html::a(helper::createLink('bug', 'view', "id=$task->fromBug"), "[BUG#$task->fromBug]", '_blank', "class='bug'");
+1 -1
View File
@@ -23,7 +23,7 @@
<table class='table table-form'>
<tr>
<th class='w-80px'><?php echo empty($task->team) ? $lang->task->assign : $lang->task->transferTo;?></th>
<td class='w-p25-f'><?php echo html::select('assignedTo', $users, $task->assignedTo, "class='form-control chosen'");?></td><td></td>
<td class='w-p25-f'><?php echo html::select('assignedTo', $members, $task->assignedTo, "class='form-control chosen'");?></td><td></td>
</tr>
<tr>
<th><?php echo $lang->task->left;?></th>
+2 -2
View File
@@ -22,7 +22,7 @@
</div>
</div>
<div class='main'>
<form class='form-condensed' id="recordForm" method='post' target='hiddenwin'>
<form class='form-condensed' id="recordForm" method='post' target='hiddenwin' style='margin-top:25px'>
<table class='table table-form table-fixed'>
<?php if(count($estimates)):?>
<thead>
@@ -72,7 +72,7 @@
<td><?php echo html::input("dates[$i]", '', "class='form-control text-center form-date'");?></td>
<td><?php echo html::input("consumed[$i]", '', "class='form-control text-center' autocomplete='off'");?></td>
<td><?php echo html::input("left[$i]", '', "class='form-control text-center left' autocomplete='off'");?></td>
<td class="text-left"><?php echo html::textarea("work[$i]", '', "class='form-control' rows='2'");?></td>
<td class="text-left"><?php echo html::textarea("work[$i]", '', "class='form-control' style='height:50px;'");?></td>
<td></td>
</tr>
<?php endfor;?>
+4 -2
View File
@@ -76,6 +76,7 @@
<legend><?php echo $lang->task->legendDesc;?></legend>
<div class='article-content'><?php echo $task->desc;?></div>
</fieldset>
<?php if($project->type != 'ops'):?>
<?php if($task->fromBug != 0):?>
<fieldset>
<legend><?php echo $lang->bug->steps;?></legend>
@@ -102,7 +103,8 @@
</div>
</fieldset>
<?php endif;?>
<?php if(!empty($task->children)):?>
<?php endif;?>
<?php if(!empty($task->children)):?>
<fieldset>
<legend><?php echo $this->lang->task->children;?></legend>
<table class='table table-hover table-data table-fixed'>
@@ -147,7 +149,7 @@
<?php endforeach;?>
</table>
</fieldset>
<?php endif;?>
<?php endif;?>
<?php echo $this->fetch('file', 'printFiles', array('files' => $task->files, 'fieldset' => 'true'));?>
<?php include '../../common/view/action.html.php';?>
<div class='actions'> <?php if(!$task->deleted) echo $actionLinks;?></div>
+4 -4
View File
@@ -1147,10 +1147,10 @@ class testcase extends control
}
/* fill some field with useful value. */
if(isset($products[$case->product])) $case->product = $products[$case->product] . "(#$case->product)";
if(isset($branches[$case->branch])) $case->branch = $branches[$case->branch] . "(#$case->branch)";
if(isset($relatedModules[$case->module])) $case->module = $relatedModules[$case->module] . "(#$case->module)";
if(isset($relatedStories[$case->story])) $case->story = $relatedStories[$case->story] . "(#$case->story)";
$case->product = !isset($products[$case->product]) ? '' : $products[$case->product] . "(#$case->product)";
$case->branch = !isset($branches[$case->branch]) ? '' : $branches[$case->branch] . "(#$case->branch)";
$case->module = !isset($relatedModules[$case->module])? '' : $relatedModules[$case->module] . "(#$case->module)";
$case->story = !isset($relatedStories[$case->story]) ? '' : $relatedStories[$case->story] . "(#$case->story)";
if(isset($caseLang->priList[$case->pri])) $case->pri = $caseLang->priList[$case->pri];
if(isset($caseLang->typeList[$case->type])) $case->type = $caseLang->typeList[$case->type];
-1
View File
@@ -16,4 +16,3 @@
tbody > tr > td > .btn-icon {margin-right: 3px;}
tbody > tr > td .icon-bug {margin-left: -8px;}
#batchForm{overflow-y:auto;}
+8 -5
View File
@@ -6,7 +6,7 @@
<div class='alert alert-info'><?php echo $suhosinInfo?></div>
<?php else:?>
<form target='hiddenwin' method='post' class='form-condensed'>
<table class='table table-fixed active-disabled table-custom'>
<table class='table table-fixed active-disabled table-custom' id='showData'>
<thead>
<tr>
<th class='w-70px'><?php echo $lang->testcase->id?></th>
@@ -32,7 +32,10 @@
</tr>
</thead>
<tbody>
<?php $insert = true;?>
<?php
$insert = true;
$addID = 1;
?>
<?php foreach($caseData as $key => $case):?>
<?php if(empty($case->title)) continue;?>
<tr valign='top' align='center'>
@@ -45,7 +48,7 @@
}
else
{
echo $key . " <sub class='gray' style='vertical-align:sub;'>{$lang->testcase->new}</sub>";
echo $addID++ . " <sub class='gray' style='vertical-align:sub;'>{$lang->testcase->new}</sub>";
}
echo html::hidden("product[$key]", $productID);
?>
@@ -80,7 +83,7 @@
</tbody>
<tfoot>
<tr>
<td colspan='10' class='text-center'>
<td colspan='<?php echo !empty($branches) ? 11 : 10;?>' class='text-center'>
<?php
if(!$insert)
{
@@ -100,7 +103,7 @@
</form>
<?php endif;?>
<script>
$(function(){affix('thead')})
$(function(){affix('#showData thead')})
function affix(obj)
{
var fixH = $(obj).offset().top;
+2 -1
View File
@@ -1,3 +1,4 @@
<?php $sysURL = $this->session->notHead ? common::getSysURL() : '';?>
<table class='table' id='bugs'>
<thead>
<tr>
@@ -16,7 +17,7 @@
<tr>
<td><?php echo $bug->id . html::hidden('bugs[]', $bug->id)?></td>
<td><span class='pri<?php echo $bug->pri?>'><?php echo zget($lang->bug->priList, $bug->pri);?></span></td>
<td class='text-left' title='<?php echo $bug->title?>'><?php echo html::a($this->createLink('bug', 'view', "bugID=$bug->id", '', true), $bug->title, '', "data-toggle='modal' data-type='iframe' data-width='90%'");?></td>
<td class='text-left' title='<?php echo $bug->title?>'><?php echo html::a($sysURL . $this->createLink('bug', 'view', "bugID=$bug->id", '', true), $bug->title, '', "data-toggle='modal' data-type='iframe' data-width='90%'");?></td>
<td><?php echo zget($users, $bug->openedBy);?></td>
<td><?php echo zget($users, $bug->resolvedBy);?></td>
<td><?php if($bug->resolvedDate != '0000-00-00 00:00:00') echo substr($bug->resolvedDate, 2);?></td>
+2 -1
View File
@@ -1,3 +1,4 @@
<?php $sysURL = $this->session->notHead ? common::getSysURL() : '';?>
<table class='table' id='builds'>
<thead>
<tr>
@@ -12,7 +13,7 @@
<?php foreach($builds as $build):?>
<tr>
<td><?php echo $build->id . html::hidden('builds[]', $build->id)?></td>
<td class='text-left' title='<?php echo $build->name?>'><?php echo html::a($this->createLink('build', 'view', "buildID=$build->id", '', true), $build->name, '', "data-toggle='modal' data-type='iframe' data-width='90%'");?></td>
<td class='text-left' title='<?php echo $build->name?>'><?php echo html::a($sysURL . $this->createLink('build', 'view', "buildID=$build->id", '', true), $build->name, '', "data-toggle='modal' data-type='iframe' data-width='90%'");?></td>
<td><?php echo zget($users, $build->builder);?></td>
<td><?php echo $build->date;?></td>
</tr>
+2 -1
View File
@@ -1,3 +1,4 @@
<?php $sysURL = $this->session->notHead ? common::getSysURL() : '';?>
<table class='table' id='cases'>
<thead>
<tr>
@@ -18,7 +19,7 @@
<tr>
<td><?php echo $case->id . html::hidden('cases[]', $case->id)?></td>
<td><span class='pri<?php echo $case->pri?>'><?php echo zget($lang->testcase->priList, $case->pri);?></span></td>
<td class='text-left' title='<?php echo $case->title?>'><?php echo html::a($this->createLink('testcase', 'view', "caseID=$case->id", '', true), $case->title, '', "data-toggle='modal' data-type='iframe' data-width='90%'");?></td>
<td class='text-left' title='<?php echo $case->title?>'><?php echo html::a($sysURL . $this->createLink('testcase', 'view', "caseID=$case->id", '', true), $case->title, '', "data-toggle='modal' data-type='iframe' data-width='90%'");?></td>
<td><?php echo zget($lang->testcase->typeList, $case->type);?></td>
<td><?php echo zget($users, $case->assignedTo);?></td>
<td><?php echo zget($users, $case->lastRunner);?></td>
@@ -1,3 +1,4 @@
<?php $sysURL = $this->session->notHead ? common::getSysURL() : '';?>
<table class='table' id='legacyBugs'>
<thead>
<tr>
@@ -16,7 +17,7 @@
<tr>
<td><?php echo $bug->id?></td>
<td><span class='pri<?php echo zget($lang->bug->priList, $bug->pri, $bug->pri)?>'><?php echo zget($lang->bug->priList, $bug->pri, $bug->pri);?></span></td>
<td class='text-left' title='<?php echo $bug->title?>'><?php echo html::a($this->createLink('bug', 'view', "bugID=$bug->id", '', true), $bug->title, '', "data-toggle='modal' data-type='iframe' data-width='90%'");?></td>
<td class='text-left' title='<?php echo $bug->title?>'><?php echo html::a($sysURL . $this->createLink('bug', 'view', "bugID=$bug->id", '', true), $bug->title, '', "data-toggle='modal' data-type='iframe' data-width='90%'");?></td>
<td><?php echo zget($users, $bug->openedBy);?></td>
<td><?php echo zget($users, $bug->resolvedBy);?></td>
<td><?php if($bug->resolvedDate != '0000-00-00 00:00:00') echo substr($bug->resolvedDate, 2);?></td>
+2 -1
View File
@@ -1,3 +1,4 @@
<?php $sysURL = $this->session->notHead ? common::getSysURL() : '';?>
<table class='table' id='stories'>
<thead>
<tr>
@@ -17,7 +18,7 @@
<tr>
<td><?php echo $story->id . html::hidden('stories[]', $story->id)?></td>
<td><span class='pri<?php echo $story->pri?>'><?php echo zget($lang->story->priList, $story->pri);?></span></td>
<td class='text-left' title='<?php echo $story->title?>'><?php echo html::a($this->createLink('story', 'view', "storyID=$story->id", '', true), $story->title, '', "data-toggle='modal' data-type='iframe' data-width='90%'");?></td>
<td class='text-left' title='<?php echo $story->title?>'><?php echo html::a($sysURL . $this->createLink('story', 'view', "storyID=$story->id", '', true), $story->title, '', "data-toggle='modal' data-type='iframe' data-width='90%'");?></td>
<td><?php echo zget($users, $story->openedBy);?></td>
<td><?php echo zget($users, $story->assignedTo);?></td>
<td><?php echo $story->estimate?></td>
+1 -1
View File
@@ -814,7 +814,7 @@ class testsuite extends control
$libraries = $this->testsuite->getLibraries();
if(empty($libraries)) $this->locate(inlink('createLib'));
$this->testsuite->setMenu($libraries, $libID);
$this->testsuite->setLibMenu($libraries, $libID);
$file = $this->session->importFile;
$caseLang = $this->lang->testcase;
-2
View File
@@ -8,5 +8,3 @@ tfoot.fixedTfootAction .chosen-results li.active-result {color: black;}
tfoot .table-actions .input-group #assignedTo_chosen .chosen-single{height:24px;padding:3px 6px}
tfoot .table-actions .input-group #assignedTo_chosen .chosen-single span{font-size:12px;}
tfoot .table-actions .input-group #assignedTo_chosen .chosen-single div{line-height:10px;}
#caseForm{overflow-y:auto}
+7 -5
View File
@@ -44,9 +44,9 @@ $lang->todo->confirmBug = '該Todo關聯的是Bug #%s,需要修改它嗎?'
$lang->todo->confirmTask = '該Todo關聯的是Task #%s,需要修改它嗎?';
$lang->todo->confirmStory = '該Todo關聯的是Story #%s,需要修改它嗎?';
$lang->todo->statusList['wait'] = '未開始';
$lang->todo->statusList['doing'] = '進行中';
$lang->todo->statusList['done'] = '已完成';
$lang->todo->statusList['wait'] = '未開始';
$lang->todo->statusList['doing'] = '進行中';
$lang->todo->statusList['done'] = '已完成';
//$lang->todo->statusList['cancel'] = '已取消';
//$lang->todo->statusList['postpone'] = '已延期';
@@ -54,10 +54,12 @@ $lang->todo->priList[3] = '一般';
$lang->todo->priList[1] = '最高';
$lang->todo->priList[2] = '較高';
$lang->todo->priList[4] = '最低';
$lang->todo->priList[0] = '';
$lang->todo->typeList['custom'] = '自定義';
$lang->todo->typeList['bug'] = 'Bug';
$lang->todo->typeList['task'] = $lang->projectCommon . '任務';
$lang->todo->typeList['story'] = $lang->projectCommon . '需求';
global $config;
if($config->global->flow == 'onlyTest' or $config->global->flow == 'onlyStory') unset($lang->todo->typeList['task']);
@@ -81,5 +83,5 @@ $lang->todo->periods['before'] = '未完';
$lang->todo->periods['all'] = '所有';
$lang->todo->action = new stdclass();
$lang->todo->action->finished = array('main' => '$date, 由 <strong>$actor</strong>完成');
$lang->todo->action->marked = array('main' => '$date, 由 <strong>$actor</strong> 標記為<strong>$extra</strong>。', 'extra' => 'statusList');
$lang->todo->action->finished = array('main' => '$date, 由 <strong>$actor</strong>完成');
$lang->todo->action->marked = array('main' => '$date, 由 <strong>$actor</strong> 標記為<strong>$extra</strong>。', 'extra' => 'statusList');
+1
View File
@@ -128,3 +128,4 @@ $lang->upgrade->fromVersions['9_5'] = '9.5';
$lang->upgrade->fromVersions['9_5_1'] = '9.5.1';
$lang->upgrade->fromVersions['9_6'] = '9.6';
$lang->upgrade->fromVersions['9_6_1'] = '9.6.1';
$lang->upgrade->fromVersions['9_6_2'] = '9.6.2';
+1
View File
@@ -128,3 +128,4 @@ $lang->upgrade->fromVersions['9_5'] = '9.5';
$lang->upgrade->fromVersions['9_5_1'] = '9.5.1';
$lang->upgrade->fromVersions['9_6'] = '9.6';
$lang->upgrade->fromVersions['9_6_1'] = '9.6.1';
$lang->upgrade->fromVersions['9_6_2'] = '9.6.2';
+1
View File
@@ -128,3 +128,4 @@ $lang->upgrade->fromVersions['9_5'] = '9.5';
$lang->upgrade->fromVersions['9_5_1'] = '9.5.1';
$lang->upgrade->fromVersions['9_6'] = '9.6';
$lang->upgrade->fromVersions['9_6_1'] = '9.6.1';
$lang->upgrade->fromVersions['9_6_2'] = '9.6.2';
+5 -3
View File
@@ -39,9 +39,11 @@ include '../../common/view/header.lite.html.php';
</div>
<div class='modal-footer'>
<?php
echo html::a($this->createLink($config->default->module), $lang->my->common, '', "class='btn'");
if($refererBeforeDeny) echo html::a(helper::safe64Decode($refererBeforeDeny), $lang->user->goback, '', "class='btn'");
echo html::a($this->createLink('user', 'logout', "referer=" . helper::safe64Encode($denyPage)), $lang->user->relogin, '', "class='btn btn-primary'");
$isOnlybody = helper::inOnlyBodyMode();
unset($_GET['onlybody']);
echo html::a($this->createLink($config->default->module), $lang->my->common, ($isOnlybody ? '_parent' : ''), "class='btn'");
if($refererBeforeDeny) echo html::a(helper::safe64Decode($refererBeforeDeny), $lang->user->goback, ($isOnlybody ? '_parent' : ''), "class='btn'");
echo html::a($this->createLink('user', 'logout', "referer=" . helper::safe64Encode($denyPage)), $lang->user->relogin, ($isOnlybody ? '_parent' : ''), "class='btn btn-primary'");
?></div>
</div>
</div>
+22 -1
View File
@@ -91,7 +91,28 @@ $whiteList[] = 'testsuite-library';
$whiteList[] = 'testsuite-createlib';
$whiteList[] = 'testsuite-createcase';
$whiteList[] = 'testsuite-libview';
$whiteList[] = 'admin-log';
$whiteList[] = 'admin-deletelog';
$whiteList[] = 'custom-required';
$whiteList[] = 'custom-score';
$whiteList[] = 'custom-resetrequired';
$whiteList[] = 'entry-browse';
$whiteList[] = 'entry-create';
$whiteList[] = 'entry-edit';
$whiteList[] = 'entry-delete';
$whiteList[] = 'entry-log';
$whiteList[] = 'score-rule';
$whiteList[] = 'score-reset';
$whiteList[] = 'testsuite-batchcreatecase';
$whiteList[] = 'testsuite-exporttemplet';
$whiteList[] = 'testsuite-import';
$whiteList[] = 'testsuite-showimport';
$whiteList[] = 'webhook-browse';
$whiteList[] = 'webhook-create';
$whiteList[] = 'webhook-edit';
$whiteList[] = 'webhook-delete';
$whiteList[] = 'webhook-log';
$whiteList[] = 'webhook-asyncsend';
/* checking actions of every module. */
echo '-------------action checking-----------------' . "\n";
+1 -1
View File
@@ -681,7 +681,7 @@ function checkTable($table)
$target.find('tbody > tr').toggleClass('active', isChecked).find('td :checkbox').prop('checked', isChecked);
});
$table = $table || $('.table-selectable');
$table = $table || $('.table-selectable,table[checkable="true"]');
if(!$table.length) return;
+2
View File
@@ -806,3 +806,5 @@ body {color:#141414; padding-bottom: 40px;}
.icon-review:before{content: '\e9b8'}
.icon-checked:before{content: '\e642'}
.icon-file-text:before{content:'\e6d4'}
body.body-modal .ke-container .ke-toolbar .ke-outline[data-name=fullscreen]{display:none;}