Merge branch 'master' of https://github.com/easysoft/zentaopms
This commit is contained in:
+1
-1
@@ -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
@@ -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');
|
||||
|
||||
|
||||
@@ -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;}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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'"));
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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'");?>
|
||||
|
||||
@@ -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'));
|
||||
|
||||
@@ -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);?>
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;}
|
||||
|
||||
@@ -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>";
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;}
|
||||
|
||||
@@ -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;}
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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 = '总消耗';
|
||||
|
||||
@@ -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 = '總消耗';
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
@@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -33,5 +33,3 @@ $(function()
|
||||
ajustFilebox();
|
||||
$(window).resize(ajustFilebox);
|
||||
});
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
@@ -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
@@ -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'");
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;?>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -16,4 +16,3 @@
|
||||
|
||||
tbody > tr > td > .btn-icon {margin-right: 3px;}
|
||||
tbody > tr > td .icon-bug {margin-left: -8px;}
|
||||
#batchForm{overflow-y:auto;}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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
@@ -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
@@ -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;
|
||||
|
||||
|
||||
@@ -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;}
|
||||
|
||||
Reference in New Issue
Block a user