Merge branch 'master' of github.com:easysoft/zentaopms
This commit is contained in:
@@ -189,6 +189,7 @@ $config->objectTables['doclib'] = TABLE_DOCLIB;
|
||||
$config->objectTables['todo'] = TABLE_TODO;
|
||||
$config->objectTables['custom'] = TABLE_LANG;
|
||||
$config->objectTables['branch'] = TABLE_BRANCH;
|
||||
$config->objectTables['module'] = TABLE_MODULE;
|
||||
|
||||
/* Include extension config files. */
|
||||
$extConfigFiles = glob($configRoot . 'ext/*.php');
|
||||
|
||||
@@ -15,5 +15,6 @@ $config->action->objectNameFields['doc'] = 'title';
|
||||
$config->action->objectNameFields['doclib'] = 'name';
|
||||
$config->action->objectNameFields['todo'] = 'name';
|
||||
$config->action->objectNameFields['branch'] = 'name';
|
||||
$config->action->objectNameFields['module'] = 'name';
|
||||
|
||||
$config->action->commonImgSize = 870;
|
||||
|
||||
@@ -60,6 +60,7 @@ $lang->action->objectTypes['doc'] = 'Document';
|
||||
$lang->action->objectTypes['doclib'] = 'Doc Lib';
|
||||
$lang->action->objectTypes['todo'] = 'To-Dos';
|
||||
$lang->action->objectTypes['branch'] = 'Branch';
|
||||
$lang->action->objectTypes['module'] = 'Module';
|
||||
|
||||
/* 用来描述操作历史记录。*/
|
||||
$lang->action->desc = new stdclass();
|
||||
|
||||
@@ -60,6 +60,7 @@ $lang->action->objectTypes['doc'] = '文档';
|
||||
$lang->action->objectTypes['doclib'] = '文档库';
|
||||
$lang->action->objectTypes['todo'] = '待办';
|
||||
$lang->action->objectTypes['branch'] = '分支';
|
||||
$lang->action->objectTypes['module'] = '模块';
|
||||
|
||||
/* 用来描述操作历史记录。*/
|
||||
$lang->action->desc = new stdclass();
|
||||
|
||||
@@ -147,7 +147,7 @@ class branchModel extends model
|
||||
*/
|
||||
public function checkBranchData($branchID)
|
||||
{
|
||||
$module = $this->dao->select('id')->from(TABLE_MODULE)->where('branch')->eq($branchID)->limit(1)->fetch();
|
||||
$module = $this->dao->select('id')->from(TABLE_MODULE)->where('branch')->eq($branchID)->andWhere('deleted')->eq(0)->limit(1)->fetch();
|
||||
$story = $this->dao->select('id')->from(TABLE_STORY)->where('branch')->eq($branchID)->andWhere('deleted')->eq(0)->limit(1)->fetch();
|
||||
$plan = $this->dao->select('id')->from(TABLE_PRODUCTPLAN)->where('branch')->eq($branchID)->andWhere('deleted')->eq(0)->limit(1)->fetch();
|
||||
$bug = $this->dao->select('id')->from(TABLE_BUG)->where('branch')->eq($branchID)->andWhere('deleted')->eq(0)->limit(1)->fetch();
|
||||
|
||||
@@ -37,3 +37,7 @@
|
||||
.colorpicker.input-group-btn > .btn {border-right: none}
|
||||
|
||||
#branch {border-left-width: 0px;}
|
||||
|
||||
#bugTypeInputGroup {max-height: 30px; overflow: hidden}
|
||||
#bugTypeInputGroup .form-control, #bugTypeInputGroup .input-group-addon {float: left; width: auto;}
|
||||
#bugTypeInputGroup .input-group-addon {padding: 5px 10px; line-height: 18px;}
|
||||
|
||||
@@ -103,11 +103,29 @@ $(function()
|
||||
|
||||
$('[data-toggle=tooltip]').tooltip();
|
||||
|
||||
// ajust style for file box
|
||||
// adjust size of bug type input group
|
||||
var adjustBugTypeGroup = function()
|
||||
{
|
||||
var $group = $('#bugTypeInputGroup');
|
||||
var width = $group.width(), addonWidth = 0;
|
||||
var $controls = $group.children('.form-control');
|
||||
$group.children('.input-group-addon').each(function()
|
||||
{
|
||||
addonWidth += $(this).outerWidth();
|
||||
});
|
||||
$controls.css('width', Math.floor((width - addonWidth)/$controls.length));
|
||||
};
|
||||
adjustBugTypeGroup();
|
||||
|
||||
// adjust style for file box
|
||||
var ajustFilebox = function()
|
||||
{
|
||||
applyCssStyle('.fileBox > tbody > tr > td:first-child {transition: none; width: ' + ($('#contactListGroup').width() - 2) + 'px}', 'filebox')
|
||||
};
|
||||
ajustFilebox();
|
||||
$(window).resize(ajustFilebox);
|
||||
$(window).resize(function()
|
||||
{
|
||||
ajustFilebox();
|
||||
adjustBugTypeGroup();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -415,7 +415,7 @@ class bugModel extends model
|
||||
krsort($moduleIDList);
|
||||
if($moduleIDList)
|
||||
{
|
||||
$modules = $this->dao->select('*')->from(TABLE_MODULE)->where('id')->in($moduleIDList)->fetchAll('id');
|
||||
$modules = $this->dao->select('*')->from(TABLE_MODULE)->where('id')->in($moduleIDList)->andWhere('deleted')->eq(0)->fetchAll('id');
|
||||
foreach($moduleIDList as $moduleID)
|
||||
{
|
||||
if(isset($modules[$moduleID]))
|
||||
|
||||
@@ -107,6 +107,7 @@ js::set('bugBrowseType', ($browseType == 'bymodule' and $this->session->bugBrows
|
||||
</div>
|
||||
</div>
|
||||
<div class='main'>
|
||||
<script>setTreeBox();</script>
|
||||
<form method='post' id='bugForm'>
|
||||
<?php
|
||||
$datatableId = $this->moduleName . ucfirst($this->methodName);
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed' id='bugList'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed table-selectable' id='bugList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='w-id'> <?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?></th>
|
||||
@@ -46,7 +46,7 @@
|
||||
<?php foreach($bugs as $bug):?>
|
||||
<?php $bugLink = inlink('view', "bugID=$bug->id");?>
|
||||
<tr class='text-center'>
|
||||
<td class='bug-<?php echo $bug->status;?> strong text-left'>
|
||||
<td class='cell-id bug-<?php echo $bug->status;?> strong text-left'>
|
||||
<input type='checkbox' name='bugIDList[]' value='<?php echo $bug->id;?>'/>
|
||||
<?php echo html::a($bugLink, sprintf('%03d', $bug->id));?>
|
||||
</td>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?php
|
||||
<?php
|
||||
/**
|
||||
* The create view of bug module of ZenTaoPMS.
|
||||
*
|
||||
@@ -71,7 +71,7 @@ js::set('refresh', $lang->refresh);
|
||||
<?php endif;?>
|
||||
<span id='buildBox'><?php echo html::select('openedBuild[]', $builds, $buildID, "size=4 multiple=multiple class='chosen form-control'");?></span>
|
||||
<span class='input-group-addon' id='buildBoxActions'></span>
|
||||
<span class='input-group-btn'><?php echo html::commonButton('<i class="icon icon-filter"></i>', "class='btn btn-default' data-toggle='tooltip' onclick='loadAllBuilds()' title='{$lang->bug->allBuilds}'")?></span>
|
||||
<span class='input-group-btn'><?php echo html::commonButton($lang->bug->allBuilds, "class='btn btn-default' data-toggle='tooltip' onclick='loadAllBuilds()'")?></span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -80,7 +80,7 @@ js::set('refresh', $lang->refresh);
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<span id='assignedToBox'><?php echo html::select('assignedTo', $projectMembers, $assignedTo, "class='form-control chosen'");?></span>
|
||||
<span class='input-group-btn'><?php echo html::commonButton('<i class="icon icon-filter"></i>', "class='btn btn-default' onclick='loadAllUsers()' data-toggle='tooltip' title='{$lang->bug->allUsers}'");?></span>
|
||||
<span class='input-group-btn'><?php echo html::commonButton($lang->bug->allUsers, "class='btn btn-default' onclick='loadAllUsers()' data-toggle='tooltip'");?></span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -89,7 +89,7 @@ js::set('refresh', $lang->refresh);
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->type;?></th>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<div class='clearfix' id='bugTypeInputGroup'>
|
||||
<?php
|
||||
/* Remove the unused types. */
|
||||
unset($lang->bug->typeList['designchange']);
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
<div id='querybox' class='show'></div>
|
||||
</div>
|
||||
<form method='post' class='form-condensed' target='hiddenwin' id='linkBugsForm'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter' id='bugList'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-selectable' id='bugList'>
|
||||
<?php if($bugs2Link):?>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -39,7 +39,7 @@
|
||||
<?php foreach($bugs2Link as $bug2Link):?>
|
||||
<?php $bugLink = $this->createLink('bug', 'view', "bugID=$bug2Link->id");?>
|
||||
<tr class='text-center'>
|
||||
<td class='text-left'>
|
||||
<td class='cell-id'>
|
||||
<input type='checkbox' name='bugs[]' value='<?php echo $bug2Link->id;?>'/>
|
||||
<?php echo html::a($bugLink, sprintf('%03d', $bug2Link->id));?>
|
||||
</td>
|
||||
|
||||
@@ -8,4 +8,4 @@
|
||||
.tabs .tab-content .tab-pane #querybox{margin:0px; border-left:1px solid #ddd; border-right:1px solid #ddd;}
|
||||
.tabs .tab-content .tab-pane #querybox form {padding-left:0px;}
|
||||
|
||||
.table-actions {padding-left: 8px;}
|
||||
.table-actions {padding-left: 5px;}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<div id='querybox' class='show'></div>
|
||||
<div id='unlinkBugList'>
|
||||
<form method='post' id='unlinkedBugsForm' target='hiddenwin' action='<?php echo $this->createLink('build', 'linkBug', "buildID={$build->id}&browseType=$browseType¶m=$param");?>'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed table-selectable'>
|
||||
<caption class='text-left text-special'><?php echo html::icon('unlink');?> <strong><?php echo $lang->productplan->unlinkedBugs;?></strong></caption>
|
||||
<thead>
|
||||
<tr class='colhead'>
|
||||
@@ -29,8 +29,8 @@
|
||||
<?php foreach($allBugs as $bug):?>
|
||||
<?php if(strpos(",{$build->bugs},", ",$bug->id,") !== false) continue;?>
|
||||
<tr>
|
||||
<td class='text-left'>
|
||||
<input class='ml-10px' type='checkbox' name='bugs[<?php echo $bug->id?>]' value='<?php echo $bug->id;?>' <?php if($bug->status == 'resolved' or $bug->status == 'closed') echo "checked";?> />
|
||||
<td class='cell-id'>
|
||||
<input type='checkbox' name='bugs[<?php echo $bug->id?>]' value='<?php echo $bug->id;?>' <?php if($bug->status == 'resolved' or $bug->status == 'closed') echo "checked";?> />
|
||||
<?php echo html::a($this->createLink('bug', 'view', "bugID=$bug->id"), $bug->id);?>
|
||||
</td>
|
||||
<td><span class='<?php echo 'pri' . zget($lang->bug->priList, $bug->pri, $bug->pri);?>'><?php echo zget($lang->bug->priList, $bug->pri, $bug->pri)?></span></td>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<div id='querybox' class='show'></div>
|
||||
<div id='unlinkStoryList'>
|
||||
<form method='post' id='unlinkedStoriesForm' target='hiddenwin' action='<?php echo $this->createLink('build', 'linkStory', "buildID={$build->id}&browseType=$browseType¶m=$param");?>'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed table-selectable'>
|
||||
<caption class='text-left text-special'><?php echo html::icon('unlink');?> <strong><?php echo $lang->productplan->unlinkedStories;?></strong></caption>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -31,8 +31,8 @@
|
||||
<?php foreach($allStories as $story):?>
|
||||
<?php if(strpos(",{$build->stories},", ",{$story->id},") !== false) continue; ?>
|
||||
<tr>
|
||||
<td class='text-left'>
|
||||
<input class='ml-10px' type='checkbox' name='stories[]' value='<?php echo $story->id;?>' <?php if($story->stage == 'developed' or $story->status == 'closed') echo 'checked';?> />
|
||||
<td class='cell-id'>
|
||||
<input type='checkbox' name='stories[]' value='<?php echo $story->id;?>' <?php if($story->stage == 'developed' or $story->status == 'closed') echo 'checked';?> />
|
||||
<?php echo html::a($this->createLink('story', 'view', "storyID=$story->id"), $story->id);?>
|
||||
</td>
|
||||
<td><span class='<?php echo 'pri' . zget($lang->story->priList, $story->pri, $story->pri);?>'><?php echo zget($lang->story->priList, $story->pri, $story->pri)?></span></td>
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
<div class='linkBox'></div>
|
||||
<?php endif;?>
|
||||
<form method='post' target='hiddenwin' action='<?php echo inlink('batchUnlinkStory', "buildID={$build->id}")?>' id='linkedStoriesForm'>
|
||||
<table class='table table-hover table-condensed table-striped tablesorter table-fixed' id='storyList'>
|
||||
<table class='table table-hover table-condensed table-striped tablesorter table-fixed table-selectable' id='storyList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='w-id'><?php echo $lang->idAB;?></th>
|
||||
@@ -73,9 +73,9 @@
|
||||
<?php foreach($stories as $storyID => $story):?>
|
||||
<?php $storyLink = $this->createLink('story', 'view', "storyID=$story->id", '', true);?>
|
||||
<tr class='text-center'>
|
||||
<td>
|
||||
<td class='cell-id'>
|
||||
<?php if($canBatchUnlink):?>
|
||||
<input class='ml-10px' type='checkbox' name='unlinkStories[]' value='<?php echo $story->id;?>'/>
|
||||
<input type='checkbox' name='unlinkStories[]' value='<?php echo $story->id;?>'/>
|
||||
<?php endif;?>
|
||||
<?php echo sprintf('%03d', $story->id);?>
|
||||
</td>
|
||||
@@ -115,7 +115,7 @@
|
||||
<div class='linkBox'></div>
|
||||
<?php endif;?>
|
||||
<form method='post' target='hiddenwin' action="<?php echo inLink('batchUnlinkBug', "build=$build->id");?>" id='linkedBugsForm'>
|
||||
<table class='table table-hover table-condensed table-striped tablesorter table-fixed' id='bugList'>
|
||||
<table class='table table-hover table-condensed table-striped tablesorter table-fixed table-selectable' id='bugList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='w-id'><?php echo $lang->idAB;?></th>
|
||||
@@ -132,9 +132,9 @@
|
||||
<?php foreach($bugs as $bug):?>
|
||||
<?php $bugLink = $this->createLink('bug', 'view', "bugID=$bug->id", '', true);?>
|
||||
<tr class='text-center'>
|
||||
<td>
|
||||
<td class='cell-id'>
|
||||
<?php if($canBatchUnlink):?>
|
||||
<input class='ml-10px' type='checkbox' name='unlinkBugs[]' value='<?php echo $bug->id;?>'/>
|
||||
<input type='checkbox' name='unlinkBugs[]' value='<?php echo $bug->id;?>'/>
|
||||
<?php endif;?>
|
||||
<?php echo sprintf('%03d', $bug->id);?>
|
||||
<td class='text-left nobr' title='<?php echo $bug->title?>'><?php echo html::a($bugLink, $bug->title, '', "class='preview'");?></td>
|
||||
|
||||
@@ -50,7 +50,14 @@ $(document).ready(function()
|
||||
scrollPos : 'out',
|
||||
tableClass : 'tablesorter',
|
||||
storage : false,
|
||||
selectable : {clickBehavior: 'multi'},
|
||||
selectable :
|
||||
{
|
||||
clickBehavior: 'multi',
|
||||
startDrag: function(e)
|
||||
{
|
||||
if(!this.multiKey && !$(e.target).closest('td[data-index="0"]').length) return false;
|
||||
}
|
||||
},
|
||||
ready: function()
|
||||
{
|
||||
if(!this.$table) return;
|
||||
|
||||
@@ -32,80 +32,81 @@ js::set('confirmDelete', $lang->user->confirmDelete);
|
||||
</div>
|
||||
</div>
|
||||
<div class='main'>
|
||||
<form action='<?php echo $this->createLink('user', 'batchEdit', "deptID=$deptID")?>' method='post' id='userListForm'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed' id='userList'>
|
||||
<thead>
|
||||
<tr class='colhead'>
|
||||
<?php $vars = "param=$param&type=$type&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}";?>
|
||||
<th class='w-id'><?php common::printorderlink('id', $orderBy, $vars, $lang->idAB);?></th>
|
||||
<th><?php common::printorderlink('realname', $orderBy, $vars, $lang->user->realname);?></th>
|
||||
<th><?php common::printOrderLink('account', $orderBy, $vars, $lang->user->account);?></th>
|
||||
<th><?php common::printOrderLink('role', $orderBy, $vars, $lang->user->role);?></th>
|
||||
<th><?php common::printOrderLink('email', $orderBy, $vars, $lang->user->email);?></th>
|
||||
<th><?php common::printOrderLink('gender', $orderBy, $vars, $lang->user->gender);?></th>
|
||||
<th><?php common::printOrderLink('phone', $orderBy, $vars, $lang->user->phone);?></th>
|
||||
<th><?php common::printOrderLink('qq', $orderBy, $vars, $lang->user->qq);?></th>
|
||||
<th><?php common::printOrderLink('join', $orderBy, $vars, $lang->user->join);?></th>
|
||||
<th><?php common::printOrderLink('last', $orderBy, $vars, $lang->user->last);?></th>
|
||||
<th><?php common::printOrderLink('visits', $orderBy, $vars, $lang->user->visits);?></th>
|
||||
<th class='w-90px'><?php echo $lang->actions;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
<?php
|
||||
$canBatchEdit = common::hasPriv('user', 'batchEdit');
|
||||
?>
|
||||
<?php foreach($users as $user):?>
|
||||
<tr class='text-center'>
|
||||
<td>
|
||||
<?php
|
||||
if($canBatchEdit) echo "<input type='checkbox' name='users[]' value='$user->account'> ";
|
||||
printf('%03d', $user->id);
|
||||
?>
|
||||
</td>
|
||||
<td><?php if(!common::printLink('user', 'view', "account=$user->account", $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>
|
||||
<td><?php if(isset($lang->user->genderList[$user->gender])) echo $lang->user->genderList[$user->gender];?></td>
|
||||
<td><?php echo $user->phone;?></td>
|
||||
<td><?php if($user->qq) echo html::a("tencent://message/?uin=$user->qq", $user->qq);?></td>
|
||||
<td><?php echo $user->join;?></td>
|
||||
<td><?php if($user->last) echo date('Y-m-d', $user->last);?></td>
|
||||
<td><?php echo $user->visits;?></td>
|
||||
<td class='text-left'>
|
||||
<?php
|
||||
common::printIcon('user', 'edit', "userID=$user->id&from=company", '', 'list');
|
||||
if(strpos($this->app->company->admins, ",{$user->account},") === false and common::hasPriv('user', 'delete'))
|
||||
{
|
||||
echo html::a($this->createLink('user', 'delete', "userID=$user->id"), '<i class="icon-remove"></i>', '', "title='{$lang->user->delete}' class='btn-icon iframe'");
|
||||
}
|
||||
if((strtotime(date('Y-m-d H:i:s')) - strtotime($user->locked)) < $this->config->user->lockMinutes * 60)
|
||||
{
|
||||
common::printIcon('user', 'unlock', "userID=$user->account", '', 'list', '', "hiddenwin");
|
||||
}
|
||||
if($user->ranzhi) common::printIcon('user', 'unbind', "userID=$user->account", '', 'list', 'unlink', "hiddenwin");
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan='12'>
|
||||
<div class='table-actions clearfix'>
|
||||
<?php
|
||||
if($canBatchEdit) echo html::selectButton();
|
||||
if($canBatchEdit) echo html::submitButton($lang->edit, 'onclick=batchEdit()', 'btn btn-default');
|
||||
<script>setTreeBox();</script>
|
||||
<form action='<?php echo $this->createLink('user', 'batchEdit', "deptID=$deptID")?>' method='post' id='userListForm'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed table-selectable' id='userList'>
|
||||
<thead>
|
||||
<tr class='colhead'>
|
||||
<?php $vars = "param=$param&type=$type&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}";?>
|
||||
<th class='w-id'><?php common::printorderlink('id', $orderBy, $vars, $lang->idAB);?></th>
|
||||
<th><?php common::printorderlink('realname', $orderBy, $vars, $lang->user->realname);?></th>
|
||||
<th><?php common::printOrderLink('account', $orderBy, $vars, $lang->user->account);?></th>
|
||||
<th><?php common::printOrderLink('role', $orderBy, $vars, $lang->user->role);?></th>
|
||||
<th><?php common::printOrderLink('email', $orderBy, $vars, $lang->user->email);?></th>
|
||||
<th><?php common::printOrderLink('gender', $orderBy, $vars, $lang->user->gender);?></th>
|
||||
<th><?php common::printOrderLink('phone', $orderBy, $vars, $lang->user->phone);?></th>
|
||||
<th><?php common::printOrderLink('qq', $orderBy, $vars, $lang->user->qq);?></th>
|
||||
<th><?php common::printOrderLink('join', $orderBy, $vars, $lang->user->join);?></th>
|
||||
<th><?php common::printOrderLink('last', $orderBy, $vars, $lang->user->last);?></th>
|
||||
<th><?php common::printOrderLink('visits', $orderBy, $vars, $lang->user->visits);?></th>
|
||||
<th class='w-90px'><?php echo $lang->actions;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
<?php
|
||||
$canBatchEdit = common::hasPriv('user', 'batchEdit');
|
||||
?>
|
||||
</div>
|
||||
<?php echo $pager->show();?>
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</form>
|
||||
<?php foreach($users as $user):?>
|
||||
<tr class='text-center'>
|
||||
<td class='cell-id'>
|
||||
<?php
|
||||
if($canBatchEdit) echo "<input type='checkbox' name='users[]' value='$user->account'> ";
|
||||
printf('%03d', $user->id);
|
||||
?>
|
||||
</td>
|
||||
<td><?php if(!common::printLink('user', 'view', "account=$user->account", $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>
|
||||
<td><?php if(isset($lang->user->genderList[$user->gender])) echo $lang->user->genderList[$user->gender];?></td>
|
||||
<td><?php echo $user->phone;?></td>
|
||||
<td><?php if($user->qq) echo html::a("tencent://message/?uin=$user->qq", $user->qq);?></td>
|
||||
<td><?php echo $user->join;?></td>
|
||||
<td><?php if($user->last) echo date('Y-m-d', $user->last);?></td>
|
||||
<td><?php echo $user->visits;?></td>
|
||||
<td class='text-left'>
|
||||
<?php
|
||||
common::printIcon('user', 'edit', "userID=$user->id&from=company", '', 'list');
|
||||
if(strpos($this->app->company->admins, ",{$user->account},") === false and common::hasPriv('user', 'delete'))
|
||||
{
|
||||
echo html::a($this->createLink('user', 'delete', "userID=$user->id"), '<i class="icon-remove"></i>', '', "title='{$lang->user->delete}' class='btn-icon iframe'");
|
||||
}
|
||||
if((strtotime(date('Y-m-d H:i:s')) - strtotime($user->locked)) < $this->config->user->lockMinutes * 60)
|
||||
{
|
||||
common::printIcon('user', 'unlock', "userID=$user->account", '', 'list', '', "hiddenwin");
|
||||
}
|
||||
if($user->ranzhi) common::printIcon('user', 'unbind', "userID=$user->account", '', 'list', 'unlink', "hiddenwin");
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan='12'>
|
||||
<div class='table-actions clearfix'>
|
||||
<?php
|
||||
if($canBatchEdit) echo html::selectButton();
|
||||
if($canBatchEdit) echo html::submitButton($lang->edit, 'onclick=batchEdit()', 'btn btn-default');
|
||||
?>
|
||||
</div>
|
||||
<?php echo $pager->show();?>
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
<script lanugage='javascript'>$('#dept<?php echo $deptID;?>').addClass('active');</script>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -545,6 +545,7 @@ class docModel extends model
|
||||
return $this->dao->select('*')->from(TABLE_MODULE)->where('root')->eq($libID)
|
||||
->andWhere('type')->eq('doc')
|
||||
->andWhere('parent')->eq($parent)
|
||||
->andWhere('deleted')->eq(0)
|
||||
->orderBy($orderBy)
|
||||
->fetchAll('id');
|
||||
}
|
||||
|
||||
@@ -66,6 +66,7 @@ var browseType = '<?php echo $browseType;?>';
|
||||
</div>
|
||||
</div>
|
||||
<div class='main'>
|
||||
<script>setTreeBox();</script>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed' id='docList'>
|
||||
<thead>
|
||||
<tr>
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
</div>
|
||||
<form method='post' action='<?php echo inlink('batchDelete')?>' target='hiddenwin' id='mailForm'>
|
||||
<div class='panel'>
|
||||
<table class='table table-condensed table-bordered active-disabled table-fixed tablesorter'>
|
||||
<table class='table table-condensed table-bordered active-disabled table-fixed tablesorter table-selectable'>
|
||||
<?php $vars = "orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}"; ?>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -34,7 +34,7 @@
|
||||
<tbody class='text-center'>
|
||||
<?php foreach($queueList as $queue):?>
|
||||
<tr>
|
||||
<td>
|
||||
<td class='cell-id'>
|
||||
<input type='checkbox' name='mailIDList[]' value='<?php echo $queue->id;?>'/>
|
||||
<?php echo $queue->id?>
|
||||
</td>
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<form method='post' target='hiddenwin'>
|
||||
<div class='panel'>
|
||||
<div class='panel-heading'><strong><?php echo $lang->mail->unsyncUser?></strong></div>
|
||||
<table class='table table-condensed table-bordered active-disabled table-fixed tablesorter'>
|
||||
<table class='table table-condensed table-bordered active-disabled table-fixed tablesorter table-selectable'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='w-80px'> <?php echo $lang->user->account;?></th>
|
||||
@@ -31,7 +31,7 @@
|
||||
<?php foreach($users as $key => $user):?>
|
||||
<?php if($user->email and isset($members[$user->email])) continue;?>
|
||||
<tr>
|
||||
<td>
|
||||
<td class='cell-id'>
|
||||
<input type='checkbox' name='unsyncList[]' value='<?php echo $user->account;?>'/>
|
||||
<?php echo $user->account?>
|
||||
</td>
|
||||
@@ -62,7 +62,7 @@
|
||||
<form method='post' target='hiddenwin'>
|
||||
<div class='panel'>
|
||||
<div class='panel-heading'><strong><?php echo $lang->mail->syncedUser?></strong></div>
|
||||
<table class='table table-condensed table-bordered active-disabled table-fixed tablesorter'>
|
||||
<table class='table table-condensed table-bordered active-disabled table-fixed tablesorter table-selectable'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='w-80px'> <?php echo $lang->user->account;?></th>
|
||||
@@ -74,7 +74,7 @@
|
||||
<?php foreach($users as $key => $user):?>
|
||||
<?php if(empty($user->email) or !isset($members[$user->email])) continue;?>
|
||||
<tr>
|
||||
<td>
|
||||
<td class='cell-id'>
|
||||
<input type='checkbox' name='syncedList[]' value='<?php echo $user->account;?>'/>
|
||||
<?php echo $user->account?>
|
||||
</td>
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
</ul>
|
||||
</div>
|
||||
<form method='post' action='<?php echo $this->createLink('bug', 'batchEdit', "productID=0");?>'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed' id='bugList'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed table-selectable' id='bugList'>
|
||||
<?php $vars = "type=$type&orderBy=%s&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID"; ?>
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
@@ -42,7 +42,7 @@
|
||||
<?php $canBatchEdit = common::hasPriv('bug', 'batchEdit');?>
|
||||
<?php foreach($bugs as $bug):?>
|
||||
<tr class='text-center'>
|
||||
<td class='text-left'>
|
||||
<td class='cell-id'>
|
||||
<?php if($canBatchEdit):?><input type='checkbox' name='bugIDList[]' value='<?php echo $bug->id;?>' /><?php endif;?>
|
||||
<?php echo html::a($this->createLink('bug', 'view', "bugID=$bug->id"), sprintf('%03d', $bug->id), '_blank');?>
|
||||
</td>
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
</nav>
|
||||
</div>
|
||||
<form method='post' id='myStoryForm'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed table-selectable'>
|
||||
<?php $vars = "type=$type&orderBy=%s&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID"; ?>
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
@@ -46,7 +46,7 @@
|
||||
<?php foreach($stories as $key => $story):?>
|
||||
<?php $storyLink = $this->createLink('story', 'view', "id=$story->id");?>
|
||||
<tr class='text-center'>
|
||||
<td>
|
||||
<td class='cell-id'>
|
||||
<?php if($canBatchEdit or $canBatchClose):?>
|
||||
<input type='checkbox' name='storyIDList[<?php echo $story->id;?>]' value='<?php echo $story->id;?>' />
|
||||
<?php endif;?>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
</ul>
|
||||
</div>
|
||||
<form method='post' id='myTaskForm'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed' id='tasktable'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed table-selectable' id='tasktable'>
|
||||
<?php $vars = "type=$type&orderBy=%s&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID"; ?>
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
@@ -48,7 +48,7 @@
|
||||
<?php $canBatchClose = (common::hasPriv('task', 'batchClose') and $type != 'closedBy');?>
|
||||
<?php foreach($tasks as $task):?>
|
||||
<tr class='text-center'>
|
||||
<td class='text-left'>
|
||||
<td class='cell-id'>
|
||||
<?php if($canBatchEdit or $canBatchClose):?><input type='checkbox' name='taskIDList[]' value='<?php echo $task->id;?>' /><?php endif;?>
|
||||
<?php echo html::a($this->createLink('task', 'view', "taskID=$task->id"), sprintf('%03d', $task->id));?>
|
||||
</td>
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
</nav>
|
||||
</div>
|
||||
<form method='post' id='myCaseForm'>
|
||||
<table class='table table-condensed table-fixed table-hover table-striped tablesorter' id='caseList'>
|
||||
<table class='table table-condensed table-fixed table-hover table-striped tablesorter table-selectable' id='caseList'>
|
||||
<?php
|
||||
$vars = "type=$type&orderBy=%s&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID";
|
||||
$this->app->loadLang('testtask');
|
||||
@@ -49,7 +49,7 @@
|
||||
?>
|
||||
<?php foreach($cases as $case):?>
|
||||
<tr class='text-center'>
|
||||
<td>
|
||||
<td class='cell-id'>
|
||||
<?php if($canBatchEdit or $canBatchRun):?><input type='checkbox' name='caseIDList[]' value='<?php echo $case->id;?>'/><?php endif;?>
|
||||
<?php echo html::a($this->createLink('testcase', 'view', "testcaseID=$case->id"), sprintf('%03d', $case->id));?>
|
||||
</td>
|
||||
@@ -90,7 +90,7 @@
|
||||
if($canBatchEdit)
|
||||
{
|
||||
$actionLink = $this->createLink('testcase', 'batchEdit');
|
||||
echo html::submitButton("<i class='icon-edit'></i> " . $lang->edit, "onclick=setFormAction('$actionLink')");
|
||||
echo html::submitButton("<i class='icon-pencil'></i> " . $lang->edit, "onclick=setFormAction('$actionLink')");
|
||||
}
|
||||
if($canBatchRun)
|
||||
{
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<form method='post' id='todoform'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed' id='todoList'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed table-selectable' id='todoList'>
|
||||
<?php $vars = "type=$type&account=$account&status=$status&orderBy=%s&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID"; ?>
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
@@ -63,7 +63,7 @@
|
||||
<tbody>
|
||||
<?php foreach($todos as $todo):?>
|
||||
<tr class='text-center'>
|
||||
<td class='text-left'>
|
||||
<td class='cell-id'>
|
||||
<?php if(common::hasPriv('todo', 'batchEdit') or (common::hasPriv('todo', 'import2Today') and $importFuture)):?>
|
||||
<input type='checkbox' name='todoIDList[<?php echo $todo->id;?>]' value='<?php echo $todo->id;?>' />
|
||||
<?php endif;?>
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
<?php else:?>
|
||||
<?php $canOrder = (common::hasPriv('product', 'updateOrder') and strpos($orderBy, 'order') !== false)?>
|
||||
<form method='post' action='<?php echo inLink('batchEdit', "productID=$productID");?>' id='productsForm'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-datatable' id='productList'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-datatable table-selectable' id='productList'>
|
||||
<?php $vars = "productID=$productID&status=$status&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}";?>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -60,7 +60,7 @@
|
||||
<tbody class='sortable' id='productTableList'>
|
||||
<?php foreach($productStats as $product):?>
|
||||
<tr class='text-center' data-id='<?php echo $product->id ?>' data-order='<?php echo $product->code ?>'>
|
||||
<td>
|
||||
<td class='cell-id'>
|
||||
<?php if($canBatchEdit):?>
|
||||
<input type='checkbox' name='productIDList[<?php echo $product->id;?>]' value='<?php echo $product->id;?>' />
|
||||
<?php endif;?>
|
||||
@@ -92,7 +92,7 @@
|
||||
<?php endif;?>
|
||||
<?php if(!$canOrder and common::hasPriv('product', 'updateOrder')) echo html::a(inlink('all', "productID=$productID&status=$status&order=order_desc&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}"), $lang->product->updateOrder, '' , "class='btn'");?>
|
||||
</div>
|
||||
<div class='text-right'><?php $pager->show();?></div>
|
||||
<?php $pager->show();?>
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
|
||||
@@ -99,6 +99,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class='main'>
|
||||
<script>setTreeBox();</script>
|
||||
<form method='post' id='productStoryForm'>
|
||||
<?php
|
||||
$datatableId = $this->moduleName . ucfirst($this->methodName);
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/tablesorter.html.php';?>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed' id='storyList'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed table-selectable' id='storyList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='w-id {sorter:false}'> <?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?></th>
|
||||
@@ -38,7 +38,7 @@
|
||||
$canView = common::hasPriv('story', 'view');
|
||||
?>
|
||||
<tr class='text-center'>
|
||||
<td class='text-left'>
|
||||
<td class='cell-id'>
|
||||
<input type='checkbox' name='storyIDList[<?php echo $story->id;?>]' value='<?php echo $story->id;?>' />
|
||||
<?php echo $canView ? html::a($viewLink, sprintf('%03d', $story->id)): sprintf('%03d', $story->id);?>
|
||||
</td>
|
||||
|
||||
@@ -20,3 +20,5 @@ input[type=checkbox].ml-10px{margin-left:10px;}
|
||||
.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;}
|
||||
|
||||
.table-actions {padding-left: 5px;}
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<form method='post' id='productplanForm' action='<?php echo inlink('batchEdit', "productID=$product->id&branch=$branch")?>'>
|
||||
<table class='table' id="productplan">
|
||||
<table class='table table-bordered table-selectable' id="productplan">
|
||||
<thead>
|
||||
<?php $vars = "productID=$productID&branch=$branch&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}"; ?>
|
||||
<tr class='colhead'>
|
||||
@@ -57,7 +57,7 @@
|
||||
<tbody>
|
||||
<?php foreach($plans as $plan):?>
|
||||
<tr class='text-center'>
|
||||
<td class='text-left'>
|
||||
<td class='cell-id'>
|
||||
<input type='checkbox' name='planIDList[<?php echo $plan->id;?>]' value='<?php echo $plan->id;?>' />
|
||||
<?php echo $plan->id;?>
|
||||
</td>
|
||||
|
||||
@@ -17,7 +17,7 @@ include '../../common/view/tablesorter.html.php';
|
||||
<div id='querybox' class='show'></div>
|
||||
<div id='unlinkBugList'>
|
||||
<form method='post' id='unlinkedBugsForm' target='hiddenwin' action='<?php echo $this->createLink('productplan', 'linkBug', "planID=$plan->id&browseType=$browseType¶m=$param&orderBy=$orderBy")?>'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed table-selectable'>
|
||||
<caption class='text-left text-special'><?php echo html::icon('unlink');?> <strong><?php echo $lang->productplan->unlinkedBugs;?></strong></caption>
|
||||
<thead>
|
||||
<tr class='colhead'>
|
||||
@@ -36,8 +36,8 @@ include '../../common/view/tablesorter.html.php';
|
||||
if($bug->plan and helper::diffDate($plans[$bug->plan], helper::today()) > 0) continue;
|
||||
?>
|
||||
<tr>
|
||||
<td class='text-left'>
|
||||
<input class='ml-10px' type='checkbox' name='bugs[]' value='<?php echo $bug->id;?>'/>
|
||||
<td class='cell-id'>
|
||||
<input type='checkbox' name='bugs[]' value='<?php echo $bug->id;?>'/>
|
||||
<?php echo html::a($this->createLink('bug', 'view', "bugID=$bug->id"), $bug->id);?>
|
||||
</td>
|
||||
<td><span class='<?php echo 'pri' . zget($lang->bug->priList, $bug->pri, $bug->pri);?>'><?php echo zget($lang->bug->priList, $bug->pri, $bug->pri)?></span></td>
|
||||
@@ -53,7 +53,7 @@ include '../../common/view/tablesorter.html.php';
|
||||
<td colspan='6' class='text-left'>
|
||||
<?php if(count($allBugs))
|
||||
{
|
||||
echo "<div class='table-actions clearfix' style='padding-left:8px;'>";
|
||||
echo "<div class='table-actions clearfix'>";
|
||||
echo html::selectButton() . html::submitButton($lang->productplan->linkBug);
|
||||
echo html::a(inlink('view', "planID=$plan->id&type=bug&orderBy=$orderBy"), $lang->goback, '', "class='btn'");
|
||||
echo '</div>';
|
||||
|
||||
@@ -17,7 +17,7 @@ include '../../common/view/tablesorter.html.php';
|
||||
<div id='querybox' class='show'></div>
|
||||
<div id='unlinkStoryList'>
|
||||
<form method='post' id='unlinkedStoriesForm' target='hiddenwin' action='<?php echo $this->createLink('productplan', 'linkStory', "planID=$plan->id&browseType=$browseType¶m=$param&orderBy=$orderBy")?>'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed table-selectable'>
|
||||
<caption class='text-left text-special'><?php echo html::icon('unlink');?> <strong><?php echo $lang->productplan->unlinkedStories;?></strong></caption>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -37,8 +37,8 @@ include '../../common/view/tablesorter.html.php';
|
||||
<?php foreach($allStories as $story):?>
|
||||
<?php if(isset($planStories[$story->id])) continue; ?>
|
||||
<tr>
|
||||
<td class='text-left'>
|
||||
<input class='ml-10px' type='checkbox' name='stories[]' value='<?php echo $story->id;?>'/>
|
||||
<td class='cell-id'>
|
||||
<input type='checkbox' name='stories[]' value='<?php echo $story->id;?>'/>
|
||||
<?php echo html::a($this->createLink('story', 'view', "storyID=$story->id"), $story->id);?>
|
||||
</td>
|
||||
<td><span class='<?php echo 'pri' . zget($lang->story->priList, $story->pri, $story->pri);?>'><?php echo zget($lang->story->priList, $story->pri, $story->pri)?></span></td>
|
||||
@@ -58,7 +58,7 @@ include '../../common/view/tablesorter.html.php';
|
||||
<td colspan='9' class='text-left'>
|
||||
<?php if(count($allStories))
|
||||
{
|
||||
echo "<div class='table-actions clearfix' style='padding-left:8px;'>";
|
||||
echo "<div class='table-actions clearfix'>";
|
||||
echo html::selectButton() . html::submitButton($lang->story->linkStory);
|
||||
echo html::a(inlink('view', "planID=$plan->id&type=story&orderBy=$orderBy"), $lang->goback, '', "class='btn'");
|
||||
echo '</div>';
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
<div class='linkBox'></div>
|
||||
<?php endif;?>
|
||||
<form class='form-condensed' method='post' target='hiddenwin' action="<?php echo inlink('batchUnlinkStory', "planID=$plan->id&orderBy=$orderBy");?>">
|
||||
<table class='table tablesorter table-condensed table-hover table-striped table-fixed' id='storyList'>
|
||||
<table class='table tablesorter table-condensed table-hover table-striped table-fixed table-selectable' id='storyList'>
|
||||
<?php $vars = "planID={$plan->id}&type=story&orderBy=%s&link=$link¶m=$param"; ?>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -93,9 +93,9 @@
|
||||
$totalEstimate += $story->estimate;
|
||||
?>
|
||||
<tr class='text-center'>
|
||||
<td>
|
||||
<td class='cell-id'>
|
||||
<?php if($canBatchUnlink or $canBatchChangePlan):?>
|
||||
<input class='ml-10px' type='checkbox' name='storyIDList[]' value='<?php echo $story->id;?>'/>
|
||||
<input type='checkbox' name='storyIDList[]' value='<?php echo $story->id;?>'/>
|
||||
<?php endif;?>
|
||||
<?php echo html::a($viewLink, sprintf("%03d", $story->id));?>
|
||||
</td>
|
||||
@@ -307,7 +307,7 @@
|
||||
<div class='linkBox'></div>
|
||||
<?php endif;?>
|
||||
<form method='post' target='hiddenwin' action="<?php echo inLink('batchUnlinkBug', "planID=$plan->id&orderBy=$orderBy");?>">
|
||||
<table class='table tablesorter table-condensed table-hover table-striped table-fixed' id='bugList'>
|
||||
<table class='table tablesorter table-condensed table-hover table-striped table-fixed table-selectable' id='bugList'>
|
||||
<?php $vars = "planID={$plan->id}&type=bug&orderBy=%s&link=$link¶m=$param"; ?>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -324,9 +324,9 @@
|
||||
<?php $canBatchUnlink = common::hasPriv('productPlan', 'batchUnlinkBug');?>
|
||||
<?php foreach($planBugs as $bug):?>
|
||||
<tr class='text-center'>
|
||||
<td>
|
||||
<td class='cell-id'>
|
||||
<?php if($canBatchUnlink):?>
|
||||
<input class='ml-10px' type='checkbox' name='unlinkBugs[]' value='<?php echo $bug->id;?>'/>
|
||||
<input type='checkbox' name='unlinkBugs[]' value='<?php echo $bug->id;?>'/>
|
||||
<?php endif;?>
|
||||
<?php echo html::a($this->createLink('bug', 'view', "bugID=$bug->id"), sprintf("%03d", $bug->id));?>
|
||||
</td>
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
.assign-menu {min-width: 150px; overflow: hidden; max-height: 305px}
|
||||
.assign-menu.with-search {padding-bottom: 34px;}
|
||||
.assign-menu > .assign-search {padding: 0; position: absolute; z-index: 0; bottom: 0; left: 0; right: 0}
|
||||
.assign-menu > .assign-search .input-group-addon {position: absolute; right: 10px; top: 0; z-index: 10; background: none; border: none; color: #666}
|
||||
.assign-menu.dropdown-menu.with-search {padding: 0; min-width: 150px; overflow: hidden; max-height: 302px;}
|
||||
.assign-menu.dropdown-menu > .assign-search .input-group {width:100%;}
|
||||
.assign-menu.dropdown-menu > .assign-search .input-group-addon {position: absolute; right: 10px; top: 0; z-index: 10; background: none; border: none; color: #666}
|
||||
.assign-menu.dropdown-menu > .assign-search .form-control {border: none!important; box-shadow: none!important; border-top: 1px solid #ddd!important;}
|
||||
.dropdown-list {display: block; padding: 0; max-height: 270px; overflow-y: auto; margin: 0;}
|
||||
.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;}
|
||||
|
||||
@@ -7,8 +7,8 @@ $(document).ready(function()
|
||||
}).on('keyup change paste', 'input', function()
|
||||
{
|
||||
var val = $(this).val().toLowerCase();
|
||||
if(val == '') return $('.assign-menu > .option').removeClass('hide');
|
||||
$('.assign-menu > .option').each(function()
|
||||
if(val == '') return $('.assign-menu .option').removeClass('hide');
|
||||
$('.assign-menu .option').each(function()
|
||||
{
|
||||
var $option = $(this);
|
||||
$option.toggleClass('hide', $option.text().toString().toLowerCase().indexOf(val) < 0 && $option.data('key').toString().toLowerCase().indexOf(val) < 0);
|
||||
|
||||
@@ -21,6 +21,7 @@ $lang->project->dateRange = 'Time Frame';
|
||||
$lang->project->to = 'To';
|
||||
$lang->project->days = 'Work Days';
|
||||
$lang->project->day = 'day';
|
||||
$lang->project->workHour = 'Hour';
|
||||
$lang->project->status = 'Status';
|
||||
$lang->project->desc = 'Desc';
|
||||
$lang->project->owner = 'Owner';
|
||||
@@ -45,7 +46,7 @@ $lang->project->createStory = "Add Story";
|
||||
$lang->project->all = 'All';
|
||||
$lang->project->undone = 'Undone';
|
||||
$lang->project->unclosed = 'Unclosed';
|
||||
$lang->project->typeDesc = 'No burndown and story in OPS';
|
||||
$lang->project->typeDesc = 'No story, bug, build, testtask and burndown in OPS';
|
||||
$lang->project->mine = 'My Responsibility: ';
|
||||
$lang->project->other = 'Other:';
|
||||
$lang->project->deleted = 'Deleted';
|
||||
@@ -254,5 +255,6 @@ $lang->project->featureBar['task']['needconfirm'] = 'Story Changed';
|
||||
$lang->project->featureBar['task']['status'] = $lang->project->statusSelects[''];
|
||||
|
||||
$lang->project->treeLevel = array();
|
||||
$lang->project->treeLevel['root'] = 'Show Root';
|
||||
$lang->project->treeLevel['story'] = 'Show Story';
|
||||
$lang->project->treeLevel['task'] = 'Show Task';
|
||||
|
||||
@@ -21,6 +21,7 @@ $lang->project->dateRange = '起始日期';
|
||||
$lang->project->to = '至';
|
||||
$lang->project->days = '可用工作日';
|
||||
$lang->project->day = '天';
|
||||
$lang->project->workHour = '工时';
|
||||
$lang->project->status = $lang->projectCommon . '状态';
|
||||
$lang->project->desc = $lang->projectCommon . '描述';
|
||||
$lang->project->owner = '负责人';
|
||||
@@ -45,7 +46,7 @@ $lang->project->createStory = "新增需求";
|
||||
$lang->project->all = '所有';
|
||||
$lang->project->undone = '未完成';
|
||||
$lang->project->unclosed = '未关闭';
|
||||
$lang->project->typeDesc = "运维{$lang->projectCommon}禁用燃尽图和需求。";
|
||||
$lang->project->typeDesc = "运维{$lang->projectCommon}没有需求、bug、版本、测试功能,同时禁用燃尽图。";
|
||||
$lang->project->mine = '我负责:';
|
||||
$lang->project->other = '其他:';
|
||||
$lang->project->deleted = '已删除';
|
||||
@@ -254,5 +255,7 @@ $lang->project->featureBar['task']['needconfirm'] = '需求变动';
|
||||
$lang->project->featureBar['task']['status'] = $lang->project->statusSelects[''];
|
||||
|
||||
$lang->project->treeLevel = array();
|
||||
$lang->project->treeLevel['root'] = '全部折叠';
|
||||
$lang->project->treeLevel['story'] = '显示需求';
|
||||
$lang->project->treeLevel['task'] = '显示任务';
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
</div>
|
||||
<?php $canOrder = (common::hasPriv('project', 'updateOrder') and strpos($orderBy, 'order') !== false)?>
|
||||
<form id='projectsForm' class='form-condensed' method='post' action='<?php echo inLink('batchEdit', "projectID=$projectID");?>'>
|
||||
<table class='table table-fixed tablesorter table-datatable' id='projectList'>
|
||||
<table class='table table-fixed tablesorter table-datatable table-selectable' id='projectList'>
|
||||
<?php $vars = "status=$status&projectID=$projectID&orderBy=%s&productID=$productID&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}";?>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -52,7 +52,7 @@
|
||||
<tbody class='sortable' id='projectTableList'>
|
||||
<?php foreach($projectStats as $project):?>
|
||||
<tr class='text-center' data-id='<?php echo $project->id ?>' data-order='<?php echo $project->order ?>'>
|
||||
<td>
|
||||
<td class='cell-id'>
|
||||
<?php if($canBatchEdit):?>
|
||||
<input type='checkbox' name='projectIDList[<?php echo $project->id;?>]' value='<?php echo $project->id;?>' />
|
||||
<?php endif;?>
|
||||
@@ -91,7 +91,7 @@
|
||||
<?php endif;?>
|
||||
<?php if(!$canOrder and common::hasPriv('project', 'updateOrder')) echo html::a(inlink('all', "status=$status&projectID=$projectID&order=order_desc&productID=$productID&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}"), $lang->project->updateOrder, '', "class='btn'");?>
|
||||
</div>
|
||||
<div class='text-right'><?php $pager->show();?></div>
|
||||
<?php $pager->show();?>
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<form method='post' id='projectBugForm'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed' id='bugList'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed table-selectable' id='bugList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<?php $vars = "projectID={$project->id}&orderBy=%s&build=$buildID&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}"; ?>
|
||||
@@ -40,7 +40,7 @@
|
||||
<tbody>
|
||||
<?php foreach($bugs as $bug):?>
|
||||
<tr class='text-center'>
|
||||
<td>
|
||||
<td class='cell-id'>
|
||||
<input type='checkbox' name='bugIDList[]' value='<?php echo $bug->id;?>'/>
|
||||
<?php echo html::a($this->createLink('bug', 'view', "bugID=$bug->id"), sprintf('%03d', $bug->id), '_blank');?>
|
||||
</td>
|
||||
@@ -82,16 +82,17 @@
|
||||
echo '<div class="dropup btn-group">';
|
||||
echo '<button class="btn dropdown-toggle" type="button" data-toggle="dropdown">';
|
||||
echo $lang->bug->assignedTo;
|
||||
echo '<span class="caret"></span></button>';
|
||||
echo '<ul class="dropdown-menu assign-menu' . ($withSearch ? ' with-search':'') . '" role="menu">';
|
||||
echo ' <span class="caret"></span></button>';
|
||||
echo '<div class="dropdown-menu assign-menu' . ($withSearch ? ' with-search':'') . '" role="menu">';
|
||||
echo '<ul class="dropdown-list">';
|
||||
foreach ($memberPairs as $key => $value)
|
||||
{
|
||||
if(empty($key)) continue;
|
||||
echo "<li class='option' data-key='$key'>" . html::a("javascript:$(\"#assignedTo\").val(\"$key\");setFormAction(\"$actionLink\")", $value, '', '') . '</li>';
|
||||
}
|
||||
if($withSearch) echo "<li class='assign-search'><div class='input-group input-group-sm'><input type='text' class='form-control' placeholder=''><span class='input-group-addon'><i class='icon-search'></i></span></div></li>";
|
||||
echo '</ul>';
|
||||
echo '</div>';
|
||||
if($withSearch) echo "<div class='assign-search'><div class='input-group input-group-sm'><input type='text' class='form-control' placeholder=''><span class='input-group-addon'><i class='icon-search'></i></span></div></div>";
|
||||
echo '</div></div>';
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -12,10 +12,8 @@
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/tablesorter.html.php';?>
|
||||
<script language='Javascript'>
|
||||
$(function(){
|
||||
$(".preview").modalTrigger({width:1000, type:'iframe'});
|
||||
})
|
||||
<script>
|
||||
$(function(){$(".preview").modalTrigger({width:1000, type:'iframe'});});
|
||||
var browseType = '<?php echo $browseType;?>';
|
||||
</script>
|
||||
<div id='titlebar'>
|
||||
@@ -26,7 +24,7 @@ var browseType = '<?php echo $browseType;?>';
|
||||
<div id='querybox' class='show'></div>
|
||||
</div>
|
||||
<form class='form-condensed' method='post' enctype='multipart/form-data' target='hiddenwin' id='importBugForm'>
|
||||
<table class='table tablesorter table-fixed'>
|
||||
<table class='table tablesorter table-fixed table-selectable'>
|
||||
<thead>
|
||||
<tr class='colhead'>
|
||||
<th class='w-id'> <?php echo $lang->idAB;?></th>
|
||||
@@ -42,7 +40,7 @@ var browseType = '<?php echo $browseType;?>';
|
||||
<tbody>
|
||||
<?php foreach($bugs as $bug):?>
|
||||
<tr class='text-center'>
|
||||
<td>
|
||||
<td class='cell-id'>
|
||||
<?php echo html::checkbox("import[$bug->id]", '');?>
|
||||
<?php echo sprintf('%03d', $bug->id) . html::hidden("id[$bug->id]", $bug->id);?>
|
||||
</td>
|
||||
@@ -50,9 +48,9 @@ var browseType = '<?php echo $browseType;?>';
|
||||
<td><span class='<?php echo 'pri' . zget($lang->bug->priList, $bug->pri, $bug->pri)?>'><?php echo zget($lang->bug->priList, $bug->pri, $bug->pri)?></span></td>
|
||||
<td class='text-left nobr'><?php common::printLink('bug', 'view', "bugID=$bug->id", $bug->title, '', "class='preview'", true, true);?></td>
|
||||
<td class='bug-<?php echo $bug->status?>'><?php echo $lang->bug->statusList[$bug->status];?></td>
|
||||
<td><?php echo html::select("pri[$bug->id]", $lang->task->priList, 3, "class='input-sm form-control'");?></td>
|
||||
<td class='text-left' style='overflow:visible'><?php echo html::select("assignedTo[$bug->id]", $users, zget($users, $bug->assignedTo, '', $bug->assignedTo), "class='input-sm form-control chosen'");?></td>
|
||||
<td><?php echo html::input("estimate[$bug->id]", '', 'size=4 class="input-sm form-control"');?></td>
|
||||
<td class='td-has-control'><?php echo html::select("pri[$bug->id]", $lang->task->priList, 3, "class='input-sm form-control'");?></td>
|
||||
<td class='td-has-control' class='text-left' style='overflow:visible'><?php echo html::select("assignedTo[$bug->id]", $users, zget($users, $bug->assignedTo, '', $bug->assignedTo), "class='input-sm form-control chosen'");?></td>
|
||||
<td class='td-has-control'><?php echo html::input("estimate[$bug->id]", '', 'size=4 class="input-sm form-control"');?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
|
||||
@@ -23,16 +23,16 @@
|
||||
<?php echo html::select('fromproject', $projects, $fromProject, "onchange='reload($projectID, this.value)' class='form-control chosen'");?>
|
||||
<span class='input-group-btn'>
|
||||
<?php
|
||||
$toggleClass = $containDoing ? 'icon-toggle-on' : 'icon-toggle-off';
|
||||
$toggleClass = $containDoing ? 'icon-checked' : 'icon-check-empty';
|
||||
$params = $containDoing ? "toProject=$projectID&fromProject=$fromProject" : "toProject=$projectID&fromProject=$fromProject&containDoing=true";
|
||||
echo html::a($this->createLink('project', 'importTask', $params), "<i class={$toggleClass}></i>" . $lang->project->containDoing, '', "class='btn'");
|
||||
echo html::a($this->createLink('project', 'importTask', $params), "<i class={$toggleClass}></i> " . $lang->project->containDoing, '', "class='btn'");
|
||||
?>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<form class='form-condensed' method='post' target='hiddenwin' id='importTaskForm'>
|
||||
<table class='table tablesorter table-fixed'>
|
||||
<table class='table tablesorter table-fixed table-selectable'>
|
||||
<thead>
|
||||
<tr class='colhead'>
|
||||
<th class='w-id'><?php echo $lang->idAB;?></th>
|
||||
@@ -50,12 +50,10 @@
|
||||
<?php foreach($tasks2Imported as $task):?>
|
||||
<?php $class = $task->assignedTo == $app->user->account ? 'style=color:red' : '';?>
|
||||
<tr class='text-center'>
|
||||
|
||||
<td>
|
||||
<input type='checkbox' name='tasks[]' value='<?php echo $task->id;?>' />
|
||||
<?php if(!common::printLink('task', 'view', "task=$task->id", sprintf('%03d', $task->id))) printf('%03d', $task->id);?>
|
||||
<td class='cell-id'>
|
||||
<input type='checkbox' name='tasks[]' value='<?php echo $task->id;?>' />
|
||||
<?php if(!common::printLink('task', 'view', "task=$task->id", sprintf('%03d', $task->id))) printf('%03d', $task->id);?>
|
||||
</td>
|
||||
|
||||
<td><?php echo substr($projects[$task->project], 2);?></td>
|
||||
<td><span class='<?php echo 'pri' . zget($lang->task->priList, $task->pri, $task->pri)?>'><?php echo $task->pri == '0' ? '' : zget($lang->task->priList, $task->pri, $task->pri);?></span></td>
|
||||
<td class='text-left nobr'><?php if(!common::printLink('task', 'view', "task=$task->id", $task->name)) echo $task->name;?></td>
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
<div id='querybox' class='show'></div>
|
||||
</div>
|
||||
<form method='post' class='form-condensed' id='linkStoryForm'>
|
||||
<table class='table tablesorter table-fixed' id='linkStoryList'>
|
||||
<table class='table tablesorter table-fixed table-selectable' id='linkStoryList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='w-id'><?php echo $lang->idAB;?></th>
|
||||
@@ -43,7 +43,7 @@
|
||||
<?php if(isset($prjStories[$story->id])) continue;?>
|
||||
<?php $storyLink = $this->createLink('story', 'view', "storyID=$story->id");?>
|
||||
<tr class='text-center'>
|
||||
<td class='text-left'>
|
||||
<td class='cell-id'>
|
||||
<input type='checkbox' name='stories[]' value='<?php echo $story->id;?>'/>
|
||||
<?php echo html::hidden("products[$story->id]", $story->product);?>
|
||||
<?php echo html::a($storyLink, sprintf('%03d', $story->id));?>
|
||||
@@ -66,7 +66,6 @@
|
||||
<tr>
|
||||
<td colspan='<?php echo $productType == 'normal' ? '7' :'8';?>' class='text-left'>
|
||||
<div class='table-actions clearfix'>
|
||||
|
||||
<?php
|
||||
if($storyCount) echo html::selectButton() . html::submitButton();
|
||||
else echo "<div class='text'>" . $lang->project->whyNoStories . '</div>';
|
||||
|
||||
@@ -50,8 +50,9 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class='main'>
|
||||
<script>setTreeBox();</script>
|
||||
<form method='post' id='projectStoryForm'>
|
||||
<table class='table tablesorter table-condensed table-fixed' id='storyList'>
|
||||
<table class='table tablesorter table-condensed table-fixed table-selectable' id='storyList'>
|
||||
<thead>
|
||||
<tr class='colhead'>
|
||||
<?php $vars = "projectID={$project->id}&orderBy=%s&type=$type¶m=$param&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}"; ?>
|
||||
@@ -79,7 +80,7 @@
|
||||
$totalEstimate += $story->estimate;
|
||||
?>
|
||||
<tr class='text-center' id="story<?php echo $story->id?>">
|
||||
<td class='text-left'>
|
||||
<td class='cell-id'>
|
||||
<?php if($canBatchEdit or $canBatchClose):?>
|
||||
<input type='checkbox' name='storyIDList[<?php echo $story->id;?>]' value='<?php echo $story->id;?>' />
|
||||
<?php endif;?>
|
||||
|
||||
@@ -38,6 +38,7 @@ js::set('browseType', $browseType);
|
||||
</div>
|
||||
</div>
|
||||
<div class='main'>
|
||||
<script>setTreeBox();</script>
|
||||
<form method='post' id='projectTaskForm'>
|
||||
<?php
|
||||
$datatableId = $this->moduleName . ucfirst($this->methodName);
|
||||
@@ -48,7 +49,7 @@ js::set('browseType', $browseType);
|
||||
?>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<?php $columns = ($this->cookie->windowWidth > $this->config->wideSize ? 14 : 12) - ($project->type == 'sprint' ? 0 : 1);?>
|
||||
<?php $columns = ($this->cookie->windowWidth > $this->config->wideSize ? 16 : 13) - ($project->type == 'sprint' ? 0 : 1);?>
|
||||
<td colspan='<?php echo $columns;?>'>
|
||||
<div class='table-actions clearfix'>
|
||||
<?php
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/tablesorter.html.php';?>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed' id='taskList'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed table-selectable' id='taskList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='w-id {sorter:false}'> <?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?></th>
|
||||
@@ -44,7 +44,7 @@
|
||||
<?php foreach($tasks as $task):?>
|
||||
<?php $class = $task->assignedTo == $app->user->account ? 'style=color:red' : ''; ?>
|
||||
<tr class='text-center'>
|
||||
<td>
|
||||
<td class='cell-id'>
|
||||
<input type='checkbox' name='taskIDList[]' value='<?php echo $task->id;?>'/>
|
||||
<?php if(!common::printLink('task', 'view', "task=$task->id", sprintf('%03d', $task->id))) printf('%03d', $task->id);?>
|
||||
</td>
|
||||
|
||||
@@ -57,9 +57,9 @@
|
||||
</td>
|
||||
<td><?php echo $member->role;?></td>
|
||||
<td><?php echo substr($member->join, 2);?></td>
|
||||
<td><?php echo $member->days;?></td>
|
||||
<td><?php echo $member->hours;?></td>
|
||||
<td><?php echo $memberHours;?></td>
|
||||
<td><?php echo $member->days . $lang->project->day;?></td>
|
||||
<td><?php echo $member->hours . $lang->project->workHour;?></td>
|
||||
<td><?php echo $memberHours . $lang->project->workHour;?></td>
|
||||
<td>
|
||||
<?php
|
||||
if (common::hasPriv('project', 'unlinkMember'))
|
||||
@@ -75,7 +75,7 @@
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan='7'>
|
||||
<div class='table-actions clearfix'><div class='text'><?php echo $lang->team->totalHours . ':' . "<strong>$totalHours</strong>";?></div></div>
|
||||
<div class='table-actions clearfix'><div class='text'><?php echo $lang->team->totalHours . ':' . "<strong>$totalHours{$lang->project->workHour}</strong>";?></div></div>
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
|
||||
@@ -4,3 +4,5 @@
|
||||
.tabs .tab-content{padding:0px; border:0px;}
|
||||
.tabs .tab-content .tab-pane #querybox{margin:0px; border-left:1px solid #ddd; border-right:1px solid #ddd;}
|
||||
.tabs .tab-content .tab-pane #querybox form{padding-left:0px;}
|
||||
|
||||
.table-actions {padding-left: 5px;}
|
||||
|
||||
@@ -48,7 +48,7 @@ class releaseModel extends model
|
||||
*/
|
||||
public function getList($productID, $branch = 0)
|
||||
{
|
||||
return $this->dao->select('t1.*, t2.name as productName, t3.name as buildName')
|
||||
return $this->dao->select('t1.*, t2.name as productName, t3.id as buildID, t3.name as buildName')
|
||||
->from(TABLE_RELEASE)->alias('t1')
|
||||
->leftJoin(TABLE_PRODUCT)->alias('t2')->on('t1.product = t2.id')
|
||||
->leftJoin(TABLE_BUILD)->alias('t3')->on('t1.build = t3.id')
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
<tr>
|
||||
<td class='text-center'><?php echo $release->id;?></td>
|
||||
<td><?php echo html::a(inlink('view', "release=$release->id"), $release->name);?></td>
|
||||
<td><?php echo $release->buildName;?></td>
|
||||
<td title='<?php echo $release->buildName?>'><?php echo html::a($this->createLink('build', 'view', "buildID=$release->buildID"), $release->buildName, '_blank');?></td>
|
||||
<?php if($product->type != 'normal'):?>
|
||||
<td class='text-center'><?php echo $branches[$release->branch];?></td>
|
||||
<?php endif;?>
|
||||
|
||||
@@ -17,7 +17,7 @@ $formID = $type == 'leftBug' ? 'unlinkedLeftBugsForm' : 'unlinkedBugsForm';
|
||||
?>
|
||||
<div id='<?php echo $type == 'bug' ? 'unlinkBugList' : 'unlinkLeftBugList';?>'>
|
||||
<form method='post' target='hiddenwin' id='<?php echo $formID?>' action='<?php echo $this->createLink('release', 'linkBug', "releaseID=$release->id&browseType=$browseType¶m=$param&type=$type")?>'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed table-selectable'>
|
||||
<caption class='text-left text-special'><?php echo html::icon('unlink');?> <strong><?php echo $lang->productplan->unlinkedBugs;?></strong></caption>
|
||||
<thead>
|
||||
<tr class='colhead'>
|
||||
@@ -33,8 +33,8 @@ $formID = $type == 'leftBug' ? 'unlinkedLeftBugsForm' : 'unlinkedBugsForm';
|
||||
<?php foreach($allBugs as $bug):?>
|
||||
<?php if(strpos(",{$releaseBugs},", ",$bug->id,") !== false) continue;?>
|
||||
<tr>
|
||||
<td class='text-left'>
|
||||
<input class='ml-10px' type='checkbox' name='bugs[<?php echo $bug->id?>]' value='<?php echo $bug->id;?>' <?php if($type == 'leftBug' or $bug->status == 'resolved' or $bug->status == 'closed') echo "checked";?> />
|
||||
<td class='cell-id'>
|
||||
<input type='checkbox' name='bugs[<?php echo $bug->id?>]' value='<?php echo $bug->id;?>' <?php if($type == 'leftBug' or $bug->status == 'resolved' or $bug->status == 'closed') echo "checked";?> />
|
||||
<?php echo html::a($this->createLink('bug', 'view', "bugID=$bug->id"), $bug->id);?>
|
||||
</td>
|
||||
<td><span class='<?php echo 'pri' . zget($lang->bug->priList, $bug->pri, $bug->pri);?>'><?php echo zget($lang->bug->priList, $bug->pri, $bug->pri)?></span></td>
|
||||
@@ -50,7 +50,7 @@ $formID = $type == 'leftBug' ? 'unlinkedLeftBugsForm' : 'unlinkedBugsForm';
|
||||
<td colspan='6' class='text-left'>
|
||||
<?php if(count($allBugs))
|
||||
{
|
||||
echo "<div class='table-actions clearfix pdl-8px'>";
|
||||
echo "<div class='table-actions clearfix'>";
|
||||
echo html::selectButton() . html::submitButton($lang->release->linkBug);
|
||||
echo html::a(inlink('view', "releaseID=$release->id&type=$type"), $lang->goback, '', "class='btn'");
|
||||
echo '</div>';
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<div id='querybox' class='show'></div>
|
||||
<div id='unlinkStoryList'>
|
||||
<form method='post' target='hiddenwin' id='unlinkedStoriesForm' action='<?php echo $this->createLink('release', 'linkStory', "releaseID=$release->id&browseType=$browseType¶m=$param")?>'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed table-selectable'>
|
||||
<caption class='text-left text-special'><?php echo html::icon('unlink');?> <strong><?php echo $lang->productplan->unlinkedStories;?></strong></caption>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -31,7 +31,7 @@
|
||||
<?php foreach($allStories as $story):?>
|
||||
<?php if(strpos(",{$release->stories},", ",{$story->id},") !== false) continue; ?>
|
||||
<tr>
|
||||
<td class='text-left'>
|
||||
<td class='cell-id'>
|
||||
<input class='ml-10px' type='checkbox' name='stories[]' value='<?php echo $story->id;?>' <?php if($story->stage == 'developed' or $story->status == 'closed') echo 'checked';?> />
|
||||
<?php echo html::a($this->createLink('story', 'view', "storyID=$story->id"), $story->id);?>
|
||||
</td>
|
||||
@@ -50,7 +50,7 @@
|
||||
<td colspan='8' class='text-left'>
|
||||
<?php if(count($allStories))
|
||||
{
|
||||
echo "<div class='table-actions clearfix pdl-8px'>";
|
||||
echo "<div class='table-actions clearfix'>";
|
||||
echo html::selectButton() . html::submitButton($lang->story->linkStory);
|
||||
echo html::a(inlink('view', "releaseID=$release->id&type=story"), $lang->goback, '', "class='btn'");
|
||||
echo '</div>';
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
<div class='linkBox'></div>
|
||||
<?php endif;?>
|
||||
<form method='post' target='hiddenwin' action="<?php echo inLink('batchUnlinkStory', "release=$release->id");?>" id='linkedStoriesForm'>
|
||||
<table class='table table-hover table-condensed table-striped tablesorter table-fixed' id='storyList'>
|
||||
<table class='table table-hover table-condensed table-striped tablesorter table-fixed table-selectable' id='storyList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='w-id'><?php echo $lang->idAB;?></th>
|
||||
@@ -95,9 +95,9 @@
|
||||
<?php foreach($stories as $storyID => $story):?>
|
||||
<?php $storyLink = $this->createLink('story', 'view', "storyID=$story->id", '', true);?>
|
||||
<tr class='text-center'>
|
||||
<td>
|
||||
<td class='cell-id'>
|
||||
<?php if($canBatchUnlink):?>
|
||||
<input class='ml-10px' type='checkbox' name='unlinkStories[]' value='<?php echo $story->id;?>'/>
|
||||
<input type='checkbox' name='unlinkStories[]' value='<?php echo $story->id;?>'/>
|
||||
<?php endif;?>
|
||||
<?php echo sprintf('%03d', $story->id);?>
|
||||
</td>
|
||||
@@ -121,7 +121,7 @@
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan='8'>
|
||||
<div class='table-actions clearfix pdl-8px'>
|
||||
<div class='table-actions clearfix'>
|
||||
<?php if($countStories and $canBatchUnlink) echo html::selectButton() . html::submitButton($lang->release->batchUnlink);?>
|
||||
<div class='text'><?php echo sprintf($lang->release->finishStories, $countStories);?></div>
|
||||
</div>
|
||||
@@ -137,7 +137,7 @@
|
||||
<div class='linkBox'></div>
|
||||
<?php endif;?>
|
||||
<form method='post' target='hiddenwin' action="<?php echo inLink('batchUnlinkBug', "releaseID=$release->id");?>" id='linkedBugsForm'>
|
||||
<table class='table table-hover table-condensed table-striped tablesorter table-fixed' id='bugList'>
|
||||
<table class='table table-hover table-condensed table-striped tablesorter table-fixed table-selectable' id='bugList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='w-id'><?php echo $lang->idAB;?></th>
|
||||
@@ -154,9 +154,9 @@
|
||||
<?php foreach($bugs as $bug):?>
|
||||
<?php $bugLink = $this->createLink('bug', 'view', "bugID=$bug->id", '', true);?>
|
||||
<tr class='text-center'>
|
||||
<td>
|
||||
<td class='cell-id'>
|
||||
<?php if($canBatchUnlink):?>
|
||||
<input class='ml-10px' type='checkbox' name='unlinkBugs[]' value='<?php echo $bug->id;?>'/>
|
||||
<input type='checkbox' name='unlinkBugs[]' value='<?php echo $bug->id;?>'/>
|
||||
<?php endif;?>
|
||||
<?php echo sprintf('%03d', $bug->id);?>
|
||||
</td>
|
||||
@@ -180,7 +180,7 @@
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan='8'>
|
||||
<div class='table-actions clearfix pdl-8px'>
|
||||
<div class='table-actions clearfix'>
|
||||
<?php if($countBugs and $canBatchUnlink) echo html::selectButton() . html::submitButton($lang->release->batchUnlink);?>
|
||||
<div class='text'><?php echo sprintf($lang->release->resolvedBugs, $countBugs);?></div>
|
||||
</div>
|
||||
@@ -196,7 +196,7 @@
|
||||
<div class='linkBox'></div>
|
||||
<?php endif;?>
|
||||
<form method='post' target='hiddenwin' action="<?php echo inLink('batchUnlinkBug', "releaseID=$release->id&type=leftBug");?>" id='linkedBugsForm'>
|
||||
<table class='table table-hover table-condensed table-striped tablesorter table-fixed' id='leftBugList'>
|
||||
<table class='table table-hover table-condensed table-striped tablesorter table-fixed table-selectable' id='leftBugList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='w-id'><?php echo $lang->idAB;?></th>
|
||||
@@ -212,9 +212,9 @@
|
||||
<?php foreach($leftBugs as $bug):?>
|
||||
<?php $bugLink = $this->createLink('bug', 'view', "bugID=$bug->id", '', true);?>
|
||||
<tr class='text-center'>
|
||||
<td>
|
||||
<td class='cell-id'>
|
||||
<?php if($canBatchUnlink):?>
|
||||
<input class='ml-10px' type='checkbox' name='unlinkBugs[]' value='<?php echo $bug->id;?>'/>
|
||||
<input type='checkbox' name='unlinkBugs[]' value='<?php echo $bug->id;?>'/>
|
||||
<?php endif;?>
|
||||
<?php echo sprintf('%03d', $bug->id);?>
|
||||
</td>
|
||||
@@ -237,7 +237,7 @@
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan='7'>
|
||||
<div class='table-actions clearfix pdl-8px'>
|
||||
<div class='table-actions clearfix'>
|
||||
<div class='text'>
|
||||
<?php if($countLeftBugs and $canBatchUnlink) echo html::selectButton() . html::submitButton($lang->release->batchUnlink);?>
|
||||
<?php echo sprintf($lang->release->createdBugs, $countLeftBugs);?>
|
||||
@@ -278,7 +278,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->release->build;?></th>
|
||||
<td><?php echo $release->buildName;?></td>
|
||||
<td title='<?php echo $release->buildName?>'><?php echo html::a($this->createLink('build', 'view', "buildID=$release->buildID"), $release->buildName, '_blank');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->release->status;?></th>
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<div class='input-group input-group-sm'>
|
||||
<span class='input-group-addon'><?php echo $lang->report->bugOpenedDate;?></span>
|
||||
<div class='datepicker-wrapper datepicker-date'><?php echo html::input('begin', $begin, "class='w-100px form-control form-date' onchange='changeParams(this)'");?></div>
|
||||
<span class='input-group-addon'><?php echo $lang->report->to;?></span>
|
||||
<span class='input-group-addon fix-border'><?php echo $lang->report->to;?></span>
|
||||
<div class='datepicker-wrapper datepicker-date'><?php echo html::input('end', $end, "class='form-control form-date' onchange='changeParams(this)'");?></div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -28,7 +28,7 @@
|
||||
<div class='input-group w-200px input-group-sm'>
|
||||
<span class='input-group-addon'><?php echo $lang->report->product;?></span>
|
||||
<?php echo html::select('product', $products, $product, "class='form-control chosen' onchange='changeParams(this)'");?>
|
||||
<span class='input-group-addon'><?php echo $lang->report->project;?></span>
|
||||
<span class='input-group-addon fix-border'><?php echo $lang->report->project;?></span>
|
||||
<?php echo html::select('project', $projects, $project, "class='form-control chosen' onchange='changeParams(this)'");?>
|
||||
</div>
|
||||
</div>
|
||||
@@ -64,7 +64,7 @@
|
||||
<td><?php echo isset($bug['postponed']) ? $bug['postponed'] : 0;?></td>
|
||||
<td><?php echo isset($bug['willnotfix']) ? $bug['willnotfix'] : 0;?></td>
|
||||
<td><?php echo isset($bug['tostory']) ? $bug['tostory'] : 0;?></td>
|
||||
<td><?php echo round($bug['validRate'] * 100, 2) . '%';?></td>
|
||||
<td title='<?php echo $lang->report->validRateTips;?>'><?php echo round($bug['validRate'] * 100, 2) . '%';?></td>
|
||||
<td><?php echo $bug['all'];?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
<div class='input-group input-group-sm'>
|
||||
<span class='input-group-addon'><?php echo $lang->report->taskAssignedDate;?></span>
|
||||
<div class='datepicker-wrapper datepicker-date'><?php echo html::input('begin', $begin, "class='w-100px form-control' onchange='changeParams(this)'");?></div>
|
||||
<span class='input-group-addon'><?php echo $lang->report->to;?></span>
|
||||
<span class='input-group-addon fix-border'><?php echo $lang->report->to;?></span>
|
||||
<div class='datepicker-wrapper datepicker-date'><?php echo html::input('end', $end, "class='form-control' onchange='changeParams(this)'");?></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -202,10 +202,11 @@ class story extends control
|
||||
*
|
||||
* @param int $productID
|
||||
* @param int $moduleID
|
||||
* @param int $storyID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function batchCreate($productID = 0, $branch = 0, $moduleID = 0)
|
||||
public function batchCreate($productID = 0, $branch = 0, $moduleID = 0, $storyID = 0)
|
||||
{
|
||||
if(!empty($_POST))
|
||||
{
|
||||
@@ -213,6 +214,17 @@ class story extends control
|
||||
if(dao::isError()) die(js::error(dao::getError()));
|
||||
|
||||
foreach($mails as $mail) $this->story->sendmail($mail->storyID, $mail->actionID);
|
||||
|
||||
/* If storyID not equal zero, subdivide this story to child stories and close it. */
|
||||
if($storyID)
|
||||
{
|
||||
$actionID = $this->story->subdivide($storyID, $mails);
|
||||
if(dao::isError()) die(js::error(dao::getError()));
|
||||
$this->story->sendmail($storyID, $actionID);
|
||||
if(isonlybody()) die(js::closeModal('parent.parent', 'this'));
|
||||
die(js::locate(inlink('view', "storyID=$storyID"), 'parent'));
|
||||
}
|
||||
|
||||
die(js::locate($this->createLink('product', 'browse', "productID=$productID&branch=$branch"), 'parent'));
|
||||
}
|
||||
|
||||
@@ -268,11 +280,12 @@ class story extends control
|
||||
$this->view->customFields = $customFields;
|
||||
$this->view->showFields = $showFields;
|
||||
|
||||
$this->view->title = $product->name . $this->lang->colon . $this->lang->story->batchCreate;
|
||||
$this->view->title = $product->name . $this->lang->colon . ($storyID ? $this->lang->story->subdivide : $this->lang->story->batchCreate);
|
||||
$this->view->productName = $product->name;
|
||||
$this->view->position[] = html::a($this->createLink('product', 'browse', "product=$productID&branch=$branch"), $product->name);
|
||||
$this->view->position[] = $this->lang->story->common;
|
||||
$this->view->position[] = $this->lang->story->batchCreate;
|
||||
$this->view->position[] = $storyID ? $this->lang->story->subdivide : $this->lang->story->batchCreate;
|
||||
$this->view->storyID = $storyID;
|
||||
$this->view->products = $products;
|
||||
$this->view->product = $product;
|
||||
$this->view->moduleID = $moduleID;
|
||||
|
||||
@@ -17,6 +17,7 @@ $lang->story->review = 'Review';
|
||||
$lang->story->batchReview = 'Batch Review';
|
||||
$lang->story->edit = "Edit";
|
||||
$lang->story->batchEdit = "Batch Edit";
|
||||
$lang->story->subdivide = 'Subdivide';
|
||||
$lang->story->close = 'Close';
|
||||
$lang->story->batchClose = 'Batch Close';
|
||||
$lang->story->activate = 'Activate';
|
||||
|
||||
@@ -17,6 +17,7 @@ $lang->story->review = '评审';
|
||||
$lang->story->batchReview = '批量评审';
|
||||
$lang->story->edit = "编辑";
|
||||
$lang->story->batchEdit = "批量编辑";
|
||||
$lang->story->subdivide = '细分';
|
||||
$lang->story->close = '关闭';
|
||||
$lang->story->batchClose = '批量关闭';
|
||||
$lang->story->activate = '激活';
|
||||
|
||||
@@ -457,11 +457,6 @@ class storyModel extends model
|
||||
->remove('linkStories,childStories,files,labels,comment')
|
||||
->get();
|
||||
if(is_array($story->plan)) $story->plan = trim(join(',', $story->plan), ',');
|
||||
if($story->closedReason == 'subdivided' and $oldStory->childStories == '')
|
||||
{
|
||||
dao::$errors[] = $this->lang->story->errorEmptyChildStory;
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->dao->update(TABLE_STORY)
|
||||
->data($story)
|
||||
@@ -469,7 +464,6 @@ class storyModel extends model
|
||||
->checkIF(isset($story->closedBy), 'closedReason', 'notempty')
|
||||
->checkIF(isset($story->closedReason) and $story->closedReason == 'done', 'stage', 'notempty')
|
||||
->checkIF(isset($story->closedReason) and $story->closedReason == 'duplicate', 'duplicateStory', 'notempty')
|
||||
//->checkIF(isset($story->closedReason) and $story->closedReason == 'subdivided', 'childStories', 'notempty')
|
||||
->where('id')->eq((int)$storyID)->exec();
|
||||
|
||||
if(!dao::isError()) return common::createChanges($oldStory, $story);
|
||||
@@ -563,7 +557,6 @@ class storyModel extends model
|
||||
->checkIF($story->closedBy, 'closedReason', 'notempty')
|
||||
->checkIF($story->closedReason == 'done', 'stage', 'notempty')
|
||||
->checkIF($story->closedReason == 'duplicate', 'duplicateStory', 'notempty')
|
||||
->checkIF($story->closedReason == 'subdivided', 'childStories', 'notempty')
|
||||
->where('id')->eq((int)$storyID)
|
||||
->exec();
|
||||
if($story->title != $oldStory->title)
|
||||
@@ -634,7 +627,6 @@ class storyModel extends model
|
||||
->batchCheck($this->config->story->review->requiredFields, 'notempty')
|
||||
->checkIF($this->post->result == 'reject', 'closedReason', 'notempty')
|
||||
->checkIF($this->post->result == 'reject' and $this->post->closedReason == 'duplicate', 'duplicateStory', 'notempty')
|
||||
->checkIF($this->post->result == 'reject' and $this->post->closedReason == 'subdivided', 'childStories', 'notempty')
|
||||
->where('id')->eq($storyID)->exec();
|
||||
if($this->post->result == 'revert')
|
||||
{
|
||||
@@ -693,6 +685,40 @@ class storyModel extends model
|
||||
return $actions;
|
||||
}
|
||||
|
||||
public function subdivide($storyID, $stories)
|
||||
{
|
||||
$now = helper::now();
|
||||
$oldStory = $this->dao->findById($storyID)->from(TABLE_STORY)->fetch();
|
||||
|
||||
/* Set childStories. */
|
||||
$childStories = '';
|
||||
foreach($stories as $story) $childStories .= $story->storyID . ',';
|
||||
$childStories = trim($childStories, ',');
|
||||
|
||||
$newStory = new stdClass();
|
||||
$newStory->plan = 0;
|
||||
$newStory->lastEditedBy = $this->app->user->account;
|
||||
$newStory->lastEditedDate = $now;
|
||||
$newStory->closedDate = $now;
|
||||
$newStory->closedBy = $this->app->user->account;
|
||||
$newStory->assignedTo = 'closed';
|
||||
$newStory->assignedDate = $now;
|
||||
$newStory->status = 'closed';
|
||||
$newStory->closedReason = 'subdivided';
|
||||
$newStory->childStories = $childStories;
|
||||
|
||||
/* Subdivide story and close it. */
|
||||
$this->dao->update(TABLE_STORY)->data($newStory)
|
||||
->autoCheck()
|
||||
->batchCheck($this->config->story->close->requiredFields, 'notempty')
|
||||
->where('id')->eq($storyID)->exec();
|
||||
$changes = common::createChanges($oldStory, $newStory);
|
||||
$actionID = $this->action->create('story', $storyID, 'Closed', '', 'Subdivided');
|
||||
$this->action->logHistory($actionID, $changes);
|
||||
|
||||
return $actionID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Close a story.
|
||||
*
|
||||
@@ -722,7 +748,6 @@ class storyModel extends model
|
||||
->autoCheck()
|
||||
->batchCheck($this->config->story->close->requiredFields, 'notempty')
|
||||
->checkIF($story->closedReason == 'duplicate', 'duplicateStory', 'notempty')
|
||||
->checkIF($story->closedReason == 'subdivided', 'childStories', 'notempty')
|
||||
->where('id')->eq($storyID)->exec();
|
||||
return common::createChanges($oldStory, $story);
|
||||
}
|
||||
@@ -779,7 +804,6 @@ class storyModel extends model
|
||||
$this->dao->update(TABLE_STORY)->data($story)
|
||||
->autoCheck()
|
||||
->checkIF($story->closedReason == 'duplicate', 'duplicateStory', 'notempty')
|
||||
->checkIF($story->closedReason == 'subdivided', 'childStories', 'notempty')
|
||||
->where('id')->eq($storyID)->exec();
|
||||
|
||||
if(!dao::isError())
|
||||
@@ -1543,7 +1567,7 @@ class storyModel extends model
|
||||
}
|
||||
else
|
||||
{
|
||||
$modules = ($type == 'byModule' and $param) ? $this->dao->select('*')->from(TABLE_MODULE)->where('path')->like("%,$param,%")->andWhere('type')->eq('story')->fetchPairs('id', 'id') : array();
|
||||
$modules = ($type == 'byModule' and $param) ? $this->dao->select('*')->from(TABLE_MODULE)->where('path')->like("%,$param,%")->andWhere('type')->eq('story')->andWhere('deleted')->eq(0)->fetchPairs('id', 'id') : array();
|
||||
$stories = $this->dao->select('distinct t1.*, t2.*,t3.branch as productBranch,t4.type as productType,t2.version as version')->from(TABLE_PROJECTSTORY)->alias('t1')
|
||||
->leftJoin(TABLE_STORY)->alias('t2')->on('t1.story = t2.id')
|
||||
->leftJoin(TABLE_PROJECTPRODUCT)->alias('t3')->on('t1.project = t3.project')
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
<span class='prefix'><?php echo html::icon($lang->icons['story']);?></span>
|
||||
<strong>
|
||||
<small class='text-muted'><?php echo html::icon($lang->icons['batchCreate']);?></small>
|
||||
<?php echo $lang->story->batchCreate;?>
|
||||
<?php echo $storyID ? $lang->story->subdivide : $lang->story->batchCreate;?>
|
||||
<?php if($product->type !== 'normal') echo '<span class="label label-info">' . $branches[$branch] . '</span>';?>
|
||||
</strong>
|
||||
<div class='actions'>
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
<div id='querybox' class='show'></div>
|
||||
</div>
|
||||
<form method='post' class='form-condensed' target='hiddenwin' id='linkStoryForm'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed' id='storyList'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed table-selectable' id='storyList'>
|
||||
<?php if($stories2Link):?>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -39,7 +39,7 @@
|
||||
<?php foreach($stories2Link as $story2Link):?>
|
||||
<?php $storyLink = $this->createLink('story', 'view', "storyID=$story2Link->id");?>
|
||||
<tr class='text-center'>
|
||||
<td class='text-left'>
|
||||
<td class='cell-id'>
|
||||
<input type='checkbox' name='stories[]' value='<?php echo $story2Link->id;?>'/>
|
||||
<?php echo html::a($storyLink, sprintf('%03d', $story2Link->id));?>
|
||||
</td>
|
||||
|
||||
@@ -43,6 +43,14 @@
|
||||
echo "<div class='btn-group'>";
|
||||
common::printIcon('story', 'change', "storyID=$story->id", $story);
|
||||
common::printIcon('story', 'review', "storyID=$story->id", $story);
|
||||
|
||||
if($story->status != 'closed')
|
||||
{
|
||||
$misc = common::hasPriv('story', 'batchCreate') ? "class='btn' data-toggle='modal' data-type='iframe' data-width='95%'" : "class='disabled'";
|
||||
$link = common::hasPriv('story', 'batchCreate') ? $this->createLink('story', 'batchCreate', "productID=$story->product&branch=$story->branch&moduleID=$story->module&storyID=$story->id", '', true) : '#';
|
||||
echo html::a($link, "<i class='icon icon-node'></i> " . $lang->story->subdivide, '', $misc);
|
||||
}
|
||||
|
||||
common::printIcon('story', 'close', "storyID=$story->id", $story, 'button', '', '', 'iframe text-danger', true);
|
||||
common::printIcon('story', 'activate', "storyID=$story->id", $story, 'button', '', '', 'iframe text-success', true);
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<?php include '../../testcase/view/caseheader.html.php';?>
|
||||
<div class='main'>
|
||||
<form method='post' id='productStoryForm'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed' id='storyList'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed table-selectable' id='storyList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<?php $vars = "productID=$productID&orderBy=%s";?>
|
||||
@@ -38,7 +38,7 @@
|
||||
$canView = common::hasPriv('story', 'view');
|
||||
?>
|
||||
<tr class='text-center'>
|
||||
<td class='text-left'>
|
||||
<td class='cell-id'>
|
||||
<input type='checkbox' name='storyIDList[<?php echo $story->id;?>]' value='<?php echo $story->id;?>' />
|
||||
<?php if($canView) echo html::a($viewLink, sprintf('%03d', $story->id)); else printf('%03d', $story->id);?>
|
||||
</td>
|
||||
@@ -67,7 +67,7 @@
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan='11'>
|
||||
<div class='table-actions clearfix'>
|
||||
<div class='table-actions clearfix' style='padding-left: 5px'>
|
||||
<?php if(count($stories)):?>
|
||||
<?php echo html::selectButton();?>
|
||||
<?php
|
||||
|
||||
@@ -886,11 +886,41 @@ class task extends control
|
||||
$this->task->sendmail($taskID, $actionID);
|
||||
}
|
||||
}
|
||||
if(isset($skipTasks)) echo js::alert(sprintf($this->lang->task->error->skipClose, join(',', $skipTasks)));
|
||||
if(isset($skipTasks))
|
||||
{
|
||||
$skipTasks = join(',', $skipTasks);
|
||||
$confirmURL = $this->createLink('task', 'closeSkipTasks', "skipTasks=$skipTasks");
|
||||
$cancelURL = $this->server->HTTP_REFERER;
|
||||
die(js::confirm(sprintf($this->lang->task->error->skipClose, $skipTasks), $confirmURL, $cancelURL, 'parent', 'parent'));
|
||||
}
|
||||
}
|
||||
die(js::reload('parent'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Close skip tasks.
|
||||
*
|
||||
* @param string $skipTasks
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function closeSkipTasks($skipTasks = '')
|
||||
{
|
||||
$this->loadModel('action');
|
||||
$skipTasks = explode(',', $skipTasks);
|
||||
foreach($skipTasks as $taskID)
|
||||
{
|
||||
$changes = $this->task->close($taskID);
|
||||
if($changes)
|
||||
{
|
||||
$actionID = $this->action->create('task', $taskID, 'Closed', '');
|
||||
$this->action->logHistory($actionID, $changes);
|
||||
$this->sendmail($taskID, $actionID);
|
||||
}
|
||||
}
|
||||
die(js::locate($this->session->taskList, 'parent'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Cancel a task.
|
||||
*
|
||||
|
||||
@@ -159,7 +159,7 @@ $lang->task->error->consumedSmall = '"Consumed" must larger than before.';
|
||||
$lang->task->error->consumedThisTime = 'Please enter "Man-Hour"';
|
||||
$lang->task->error->left = 'Please enter "Left"';
|
||||
$lang->task->error->work = '"Remark" must be less than 255 characteres.';
|
||||
$lang->task->error->skipClose = 'Task: %s is not“Done”或“Cancelled”. You cannot close it!';
|
||||
$lang->task->error->skipClose = 'Task: %s is not“Done”or “Cancelled”. Confirm to close them?';
|
||||
$lang->task->error->consumed = 'Task: %s man-hour must be more than 0. Ignore changes to this Task.';
|
||||
|
||||
/* 统计报表。*/
|
||||
|
||||
@@ -159,7 +159,7 @@ $lang->task->error->consumedSmall = '"已经消耗"必须大于之前消耗';
|
||||
$lang->task->error->consumedThisTime = '请填写"工时"';
|
||||
$lang->task->error->left = '请填写"剩余"';
|
||||
$lang->task->error->work = '"备注"必须小于255个字符';
|
||||
$lang->task->error->skipClose = '任务:%s 不是“已完成”或“已取消”状态,不能关闭!';
|
||||
$lang->task->error->skipClose = '任务:%s 不是“已完成”或“已取消”状态,确定要关闭吗?';
|
||||
$lang->task->error->consumed = '任务:%s工时不能小于0,忽略该任务工时的改动';
|
||||
|
||||
/* 统计报表。*/
|
||||
|
||||
10
module/testcase/css/createbug.css
Normal file
10
module/testcase/css/createbug.css
Normal file
@@ -0,0 +1,10 @@
|
||||
body {padding: 15px;}
|
||||
.table {margin-bottom: 5px;}
|
||||
.table > thead > tr > th {border-top: 1px solid #ddd;}
|
||||
.table > thead > tr > th:first-child,
|
||||
.table > tbody > tr > td:first-child {border-left: 1px solid #ddd}
|
||||
.table > thead > tr > th:last-child,
|
||||
.table > tbody > tr > td:last-child {border-right: 1px solid #ddd}
|
||||
.table tfoot td {border-bottom: none}
|
||||
.table-actions {float: none; padding: 10px 0 0 0;}
|
||||
.table-actions .checkbox.btn {padding: 6px 11px;}
|
||||
@@ -1 +1,2 @@
|
||||
#linkCasesForm {min-height: 300px}
|
||||
.table-actions {padding-left: 0}
|
||||
|
||||
@@ -36,6 +36,7 @@ js::set('batchDelete', $lang->testcase->confirmBatchDelete);
|
||||
</div>
|
||||
</div>
|
||||
<div class='main'>
|
||||
<script>setTreeBox();</script>
|
||||
<form id='batchForm' method='post'>
|
||||
<?php
|
||||
$datatableId = $this->moduleName . ucfirst($this->methodName);
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed' id='caseList'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed table-selectable' id='caseList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='w-id'> <?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?></th>
|
||||
@@ -35,7 +35,7 @@
|
||||
<?php foreach($cases as $case):?>
|
||||
<tr class='text-center'>
|
||||
<?php $viewLink = inlink('view', "caseID=$case->id");?>
|
||||
<td>
|
||||
<td class='cell-id'>
|
||||
<input type='checkbox' name='caseIDList[]' value='<?php echo $case->id;?>'/>
|
||||
<?php echo html::a($viewLink, sprintf('%03d', $case->id));?>
|
||||
</td>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
?>
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<form action='<?php echo $this->createLink('bug', 'create', "product=$productID&branch=$branch&extras=$extras")?>' target='_parent' method='post'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter' style='word-break:break-all'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-selectable' style='word-break:break-all'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='w-60px'><?php echo $lang->testcase->stepID;?></th>
|
||||
@@ -26,7 +26,7 @@
|
||||
<?php $i = 1;?>
|
||||
<?php foreach($result->stepResults as $stepID => $stepResult):?>
|
||||
<tr>
|
||||
<td>
|
||||
<td class='cell-id'>
|
||||
<input type='checkbox' name='stepIDList[]' value='<?php echo $stepID;?>'/>
|
||||
<?php echo $i?>
|
||||
</td>
|
||||
@@ -40,9 +40,7 @@
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan='5'>
|
||||
<div class='table-actions clearfix'><?php echo html::selectButton() . html::submitButton();?></div>
|
||||
</td>
|
||||
<td colspan='5' class='pd-0'><div class='table-actions clearfix'><?php echo html::selectButton() . html::submitButton();?></div></td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
<div id='querybox' class='show'></div>
|
||||
</div>
|
||||
<form method='post' class='form-condensed' target='hiddenwin' id='linkCasesForm'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter' id='caseList'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-selectable' id='caseList'>
|
||||
<?php if($cases2Link):?>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -38,7 +38,7 @@
|
||||
<?php $caseCount = 0;?>
|
||||
<?php foreach($cases2Link as $case2Link):?>
|
||||
<tr class='text-center'>
|
||||
<td class='text-left'>
|
||||
<td class='cell-id'>
|
||||
<input type='checkbox' name='cases[]' value='<?php echo $case2Link->id;?>' />
|
||||
<?php echo html::a($this->createLink('testcase', 'view', "testcaseID=$case2Link->id"), sprintf('%03d', $case2Link->id));?>
|
||||
</td>
|
||||
@@ -53,7 +53,7 @@
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan='7'>
|
||||
<td colspan='6'>
|
||||
<div class='table-actions clearfix'>
|
||||
<?php if($caseCount) echo html::selectButton() . html::submitButton();?>
|
||||
</div>
|
||||
|
||||
@@ -31,6 +31,7 @@ var moduleID = '<?php echo $moduleID;?>';
|
||||
</div>
|
||||
</div>
|
||||
<div class='main'>
|
||||
<script>setTreeBox();</script>
|
||||
<form method='post' name='casesform' id='casesForm'>
|
||||
<?php
|
||||
$vars = "taskID=$task->id&browseType=$browseType¶m=$param&orderBy=%s&recToal={$pager->recTotal}&recPerPage={$pager->recPerPage}";
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
*/
|
||||
?>
|
||||
<?php $vars = "taskID=$task->id&browseType=$browseType¶m=$param&orderBy=%s&recToal={$pager->recTotal}&recPerPage={$pager->recPerPage}"; ?>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed' id='caseList'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed table-selectable' id='caseList'>
|
||||
<thead>
|
||||
<tr class='colhead'>
|
||||
<th class='w-id'><nobr><?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?></nobr></th>
|
||||
@@ -35,7 +35,7 @@
|
||||
<tbody>
|
||||
<?php foreach($runs as $run):?>
|
||||
<tr class='text-center'>
|
||||
<td class='text-left'>
|
||||
<td class='cell-id'>
|
||||
<?php if($canBatchEdit or $canBatchAssign or $canBatchRun):?>
|
||||
<input type='checkbox' name='caseIDList[]' value='<?php echo $run->case;?>'/>
|
||||
<?php endif;?>
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
<div id='querybox' class='show'></div>
|
||||
</div>
|
||||
<form method='post'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter table-fixed table-selectable'>
|
||||
<caption class='text-left text-special'>
|
||||
<?php echo html::icon('unlink');?> <strong><?php echo $lang->testtask->unlinkedCases;?></strong> (<?php echo $pager->recTotal;?>)
|
||||
</caption>
|
||||
@@ -52,7 +52,7 @@
|
||||
<tbody>
|
||||
<?php foreach($cases as $case):?>
|
||||
<tr class='text-center'>
|
||||
<td class='text-left'>
|
||||
<td class='cell-id'>
|
||||
<input type='checkbox' name='cases[]' value='<?php echo $case->id;?>' />
|
||||
<?php echo html::a($this->createLink('testcase', 'view', "testcaseID=$case->id"), sprintf('%03d', $case->id));?>
|
||||
</td>
|
||||
@@ -78,7 +78,7 @@
|
||||
<tr>
|
||||
<td colspan='7'>
|
||||
<?php if($cases):?>
|
||||
<div class='table-actions clearfix'><?php echo html::selectButton() . html::submitButton();?></div>
|
||||
<div class='table-actions pd-0 clearfix'><?php echo html::selectButton() . html::submitButton();?></div>
|
||||
<?php endif;?>
|
||||
<div class='text-right'><?php $pager->show();?></div>
|
||||
</td>
|
||||
|
||||
@@ -338,6 +338,7 @@ class tree extends control
|
||||
->where('root')->eq($rootID)
|
||||
->andWhere('parent')->eq((int)$moduleID)
|
||||
->andWhere('type')->eq($type)
|
||||
->andWhere('deleted')->eq(0)
|
||||
->fetchAll('id');
|
||||
die(json_encode($modules));
|
||||
}
|
||||
|
||||
@@ -53,6 +53,7 @@ class treeModel extends model
|
||||
->beginIF($startModulePath)->andWhere('path')->like($startModulePath)->fi()
|
||||
->beginIF($branch === 'null')->andWhere('branch')->eq(0)->fi()
|
||||
->beginIF((!empty($branch) and $branch != 'null'))->andWhere("branch")->eq($branch)->fi()
|
||||
->andWhere('deleted')->eq(0)
|
||||
->orderBy('grade desc, type desc, `order`')
|
||||
->get();
|
||||
}
|
||||
@@ -64,6 +65,7 @@ class treeModel extends model
|
||||
->beginIF($startModulePath)->andWhere('path')->like($startModulePath)->fi()
|
||||
->beginIF($branch === 'null')->andWhere('branch')->eq(0)->fi()
|
||||
->beginIF((!empty($branch) and $branch != 'null'))->andWhere("branch")->eq($branch)->fi()
|
||||
->andWhere('deleted')->eq(0)
|
||||
->orderBy('grade desc, `order`')
|
||||
->get();
|
||||
}
|
||||
@@ -135,7 +137,7 @@ class treeModel extends model
|
||||
$products = array_keys($this->loadModel('product')->getProductsByProject($rootID));
|
||||
if(!$this->isMergeModule($rootID, $viewType) or !$products)
|
||||
{
|
||||
$modules = $this->dao->select('id,name,path,short')->from(TABLE_MODULE)->where('root')->eq($rootID)->andWhere('type')->in($viewType)->fetchAll('id');
|
||||
$modules = $this->dao->select('id,name,path,short')->from(TABLE_MODULE)->where('root')->eq($rootID)->andWhere('type')->in($viewType)->andWhere('deleted')->eq(0)->fetchAll('id');
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -143,13 +145,14 @@ class treeModel extends model
|
||||
->where("((root = $rootID and type = 'task')")
|
||||
->orWhere('(root')->in($products)->andWhere('type')->eq('story')
|
||||
->markRight(2)
|
||||
->andWhere('deleted')->eq(0)
|
||||
->fetchAll('id');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if($this->isMergeModule($rootID, $viewType)) $viewType .= ',story';
|
||||
$modules = $this->dao->select('id,name,path,short')->from(TABLE_MODULE)->where('root')->eq($rootID)->andWhere('type')->in($viewType)->fetchAll('id');
|
||||
$modules = $this->dao->select('id,name,path,short')->from(TABLE_MODULE)->where('root')->eq($rootID)->andWhere('type')->in($viewType)->andWhere('deleted')->eq(0)->fetchAll('id');
|
||||
}
|
||||
|
||||
$modulePairs = array();
|
||||
@@ -195,7 +198,7 @@ class treeModel extends model
|
||||
$treeMenu = array();
|
||||
$lastMenu[] = '/';
|
||||
$projectModules = $this->getTaskTreeModules($rootID, false, false);
|
||||
$noProductModules = $this->dao->select('*')->from(TABLE_MODULE)->where("root = $rootID and type = 'task' and parent = 0")->fetchPairs('id', 'name');
|
||||
$noProductModules = $this->dao->select('*')->from(TABLE_MODULE)->where("root = $rootID and type = 'task' and parent = 0")->andWhere('deleted')->eq(0)->fetchPairs('id', 'name');
|
||||
|
||||
/* Fix for not in product modules. */
|
||||
$productNum = count($products);
|
||||
@@ -207,6 +210,7 @@ class treeModel extends model
|
||||
{
|
||||
$modules = $this->dao->select('*')->from(TABLE_MODULE)->where("((root = $rootID and type = 'task') OR (root = $id and type = 'story'))")
|
||||
->beginIF($startModulePath)->andWhere('path')->like($startModulePath)->fi()
|
||||
->andWhere('deleted')->eq(0)
|
||||
->orderBy('grade desc, branch, type, `order`')
|
||||
->fetchAll('id');
|
||||
}
|
||||
@@ -214,6 +218,7 @@ class treeModel extends model
|
||||
{
|
||||
$modules = $this->dao->select('*')->from(TABLE_MODULE)->where("root = $rootID and type = 'task' and path like '%,$id,%'")
|
||||
->beginIF($startModulePath)->andWhere('path')->like($startModulePath)->fi()
|
||||
->andWhere('deleted')->eq(0)
|
||||
->orderBy('grade desc, type, `order`')
|
||||
->fetchAll('id');
|
||||
}
|
||||
@@ -410,6 +415,7 @@ class treeModel extends model
|
||||
$treeMenu = array();
|
||||
$query = $this->dao->select('*')->from(TABLE_MODULE)->where("((root = $rootID and type = 'task' and parent != 0) OR (root = $id and type = 'story' and branch ='$branch'))")
|
||||
->beginIF($startModulePath)->andWhere('path')->like($startModulePath)->fi()
|
||||
->andWhere('deleted')->eq(0)
|
||||
->orderBy('grade desc, type, `order`')
|
||||
->get();
|
||||
$stmt = $this->dbh->query($query);
|
||||
@@ -432,7 +438,7 @@ class treeModel extends model
|
||||
{
|
||||
/* tree menu. */
|
||||
$treeMenu = array();
|
||||
$query = $this->dao->select('*')->from(TABLE_MODULE)->where("root = $rootID and type = 'task'")->orderBy('grade desc, type, `order`')->get();
|
||||
$query = $this->dao->select('*')->from(TABLE_MODULE)->where("root = $rootID and type = 'task'")->andWhere('deleted')->eq(0)->orderBy('grade desc, type, `order`')->get();
|
||||
$stmt = $this->dbh->query($query);
|
||||
while($module = $stmt->fetch())
|
||||
{
|
||||
@@ -486,6 +492,7 @@ class treeModel extends model
|
||||
foreach($branchGroups[$id] as $branch => $branchName)
|
||||
{
|
||||
$query = $this->dao->select('*')->from(TABLE_MODULE)->where("((root = $rootID and type = 'task' and parent != 0) OR (root = $id and type = 'story' and branch ='$branch'))")
|
||||
->andWhere('deleted')->eq(0)
|
||||
->orderBy('grade desc, type, `order`')
|
||||
->get();
|
||||
$stmt = $this->dbh->query($query);
|
||||
@@ -501,7 +508,7 @@ class treeModel extends model
|
||||
}
|
||||
|
||||
/* Get project module. */
|
||||
$query = $this->dao->select('*')->from(TABLE_MODULE)->where("root = $rootID and type = 'task'")->orderBy('grade desc, type, `order`')->get();
|
||||
$query = $this->dao->select('*')->from(TABLE_MODULE)->where("root = $rootID and type = 'task'")->andWhere('deleted')->eq(0)->orderBy('grade desc, type, `order`')->get();
|
||||
$stmt = $this->dbh->query($query);
|
||||
$taskTrees = $this->getDataStructure($stmt, 'task', $projectModules);
|
||||
foreach($taskTrees as $taskModule) $fullTrees[] = $taskModule;
|
||||
@@ -563,6 +570,7 @@ class treeModel extends model
|
||||
$query = $this->dao->select('*')->from(TABLE_MODULE)->where("(root = $id and type = 'story')")
|
||||
->beginIF(count($branchGroups[$id]) > 1)->andWhere('branch')->eq($branch)->fi()
|
||||
->beginIF($startModulePath)->andWhere('path')->like($startModulePath)->fi()
|
||||
->andWhere('deleted')->eq(0)
|
||||
->orderBy('grade desc, branch, type, `order`')
|
||||
->get();
|
||||
$stmt = $this->dbh->query($query);
|
||||
@@ -657,6 +665,7 @@ class treeModel extends model
|
||||
->leftJoin(TABLE_STORY)->alias('t2')->on('t1.story = t2.id')
|
||||
->leftJoin(TABLE_MODULE)->alias('t3')->on('t2.module = t3.id')
|
||||
->where('t1.project')->eq($projectID)
|
||||
->andWhere('t3.deleted')->eq(0)
|
||||
->fetchPairs();
|
||||
}
|
||||
else
|
||||
@@ -665,6 +674,7 @@ class treeModel extends model
|
||||
$modules = $this->dao->select('id,root,branch')->from(TABLE_MODULE)
|
||||
->where('root')->in(array_keys($productGroups))
|
||||
->andWhere('type')->eq('story')
|
||||
->andWhere('deleted')->eq(0)
|
||||
->fetchAll();
|
||||
|
||||
$paths = array();
|
||||
@@ -679,6 +689,7 @@ class treeModel extends model
|
||||
$paths += $this->dao->select($field)->from(TABLE_MODULE)
|
||||
->where('root')->eq($projectID)
|
||||
->andWhere('type')->eq('task')
|
||||
->andWhere('deleted')->eq(0)
|
||||
->fetchPairs();
|
||||
|
||||
/* Add task paths of this project for has existed. */
|
||||
@@ -688,6 +699,7 @@ class treeModel extends model
|
||||
->andWhere('t2.project')->eq($projectID)
|
||||
->andWhere('t2.deleted')->eq(0)
|
||||
->andWhere('t1.type')->eq('story')
|
||||
->andWhere('t1.deleted')->eq(0)
|
||||
->fetchPairs();
|
||||
|
||||
/* Get all modules from paths. */
|
||||
@@ -883,6 +895,7 @@ class treeModel extends model
|
||||
->andWhere('parent')->eq((int)$moduleID)
|
||||
->andWhere('type')->eq($type)
|
||||
->andWhere("branch")->eq((int)$branch)
|
||||
->andWhere('deleted')->eq(0)
|
||||
->orderBy('`order`')
|
||||
->fetchAll();
|
||||
}
|
||||
@@ -894,6 +907,7 @@ class treeModel extends model
|
||||
->andWhere('parent')->eq((int)$moduleID)
|
||||
->andWhere('type')->in($type)
|
||||
->andWhere("branch")->eq((int)$branch)
|
||||
->andWhere('deleted')->eq(0)
|
||||
->orderBy('type desc,`order`')
|
||||
->fetchAll();
|
||||
}
|
||||
@@ -915,6 +929,7 @@ class treeModel extends model
|
||||
->where('root')->eq((int)$rootID)
|
||||
->andWhere('parent')->eq((int)$moduleID)
|
||||
->andWhere('type')->in("task,story")
|
||||
->andWhere('deleted')->eq(0)
|
||||
->orderBy('type,`order`')
|
||||
->fetchAll();
|
||||
}
|
||||
@@ -922,8 +937,9 @@ class treeModel extends model
|
||||
{
|
||||
return $this->dao->select('*')->from(TABLE_MODULE)
|
||||
->where('parent')->eq(0)
|
||||
->andWhere("root = $rootID and type = 'task'")
|
||||
->orWhere("root = $productID and type = 'story'")
|
||||
->andWhere('deleted')->eq(0)
|
||||
->andWhere("(root = $rootID and type = 'task'")
|
||||
->orWhere("root = $productID and type = 'story')")
|
||||
->orderBy('type,`order`')
|
||||
->fetchAll();
|
||||
}
|
||||
@@ -943,7 +959,7 @@ class treeModel extends model
|
||||
$module = $this->getById((int)$moduleID);
|
||||
if(empty($module)) return array();
|
||||
|
||||
return $this->dao->select('id')->from(TABLE_MODULE)->where('path')->like($module->path . '%')->fetchPairs();
|
||||
return $this->dao->select('id')->from(TABLE_MODULE)->where('path')->like($module->path . '%')->andWhere('deleted')->eq(0)->fetchPairs();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -961,11 +977,13 @@ class treeModel extends model
|
||||
->where('root')->eq($productID)
|
||||
->andWhere('type')->eq('story')
|
||||
->andWhere('parent')->eq(0)
|
||||
->andWhere('deleted')->eq(0)
|
||||
->fetchAll();
|
||||
foreach($rootModules as $module)
|
||||
{
|
||||
$modules += $this->dao->select('id')->from(TABLE_MODULE)
|
||||
->where('path')->like($module->path . '%')
|
||||
->andWhere('deleted')->eq(0)
|
||||
->fetchPairs();
|
||||
}
|
||||
return $modules;
|
||||
@@ -984,7 +1002,7 @@ class treeModel extends model
|
||||
$path = $this->dao->select('path')->from(TABLE_MODULE)->where('id')->eq((int)$moduleID)->fetch('path');
|
||||
$path = trim($path, ',');
|
||||
if(!$path) return array();
|
||||
return $this->dao->select('*')->from(TABLE_MODULE)->where('id')->in($path)->orderBy('grade')->fetchAll();
|
||||
return $this->dao->select('*')->from(TABLE_MODULE)->where('id')->in($path)->andWhere('deleted')->eq(0)->orderBy('grade')->fetchAll();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1036,10 +1054,10 @@ class treeModel extends model
|
||||
*/
|
||||
public function getModulesName($moduleIdList, $allPath = true)
|
||||
{
|
||||
if(!$allPath) return $this->dao->select('id, name')->from(TABLE_MODULE)->where('id')->in($moduleIdList)->fetchPairs('id', 'name');
|
||||
if(!$allPath) return $this->dao->select('id, name')->from(TABLE_MODULE)->where('id')->in($moduleIdList)->andWhere('deleted')->eq(0)->fetchPairs('id', 'name');
|
||||
|
||||
$modules = $this->dao->select('id, name, path')->from(TABLE_MODULE)->where('id')->in($moduleIdList)->fetchAll('path');
|
||||
$allModules = $this->dao->select('id, name')->from(TABLE_MODULE)->where('id')->in(join(array_keys($modules)))->fetchPairs('id', 'name');
|
||||
$modules = $this->dao->select('id, name, path')->from(TABLE_MODULE)->where('id')->in($moduleIdList)->andWhere('deleted')->eq(0)->fetchAll('path');
|
||||
$allModules = $this->dao->select('id, name')->from(TABLE_MODULE)->where('id')->in(join(array_keys($modules)))->andWhere('deleted')->eq(0)->fetchPairs('id', 'name');
|
||||
$modulePairs = array();
|
||||
foreach($modules as $module)
|
||||
{
|
||||
@@ -1061,7 +1079,7 @@ class treeModel extends model
|
||||
public function updateOrder($orders)
|
||||
{
|
||||
asort($orders);
|
||||
$orderInfo = $this->dao->select('id,grade, parent, branch')->from(TABLE_MODULE)->where('id')->in(array_keys($orders))->fetchAll('id');
|
||||
$orderInfo = $this->dao->select('id,grade, parent, branch')->from(TABLE_MODULE)->where('id')->in(array_keys($orders))->andWhere('deleted')->eq(0)->fetchAll('id');
|
||||
$newOrders = array();
|
||||
foreach($orders as $moduleID => $order)
|
||||
{
|
||||
@@ -1182,7 +1200,7 @@ class treeModel extends model
|
||||
public function changeRoot($moduleID, $oldRoot, $newRoot, $type)
|
||||
{
|
||||
/* Get all children id list. */
|
||||
$childIdList = $this->dao->select('id')->from(TABLE_MODULE)->where('path')->like("%,$moduleID,%")->fetchPairs('id', 'id');
|
||||
$childIdList = $this->dao->select('id')->from(TABLE_MODULE)->where('path')->like("%,$moduleID,%")->andWhere('deleted')->eq(0)->fetchPairs('id', 'id');
|
||||
|
||||
/* Update product field for stories, bugs, cases under this module. */
|
||||
$this->dao->update(TABLE_STORY)->set('product')->eq($newRoot)->where('module')->in($childIdList)->exec();
|
||||
@@ -1242,7 +1260,13 @@ class treeModel extends model
|
||||
$childs = $this->getAllChildId($moduleID);
|
||||
$childs[$moduleID] = $moduleID;
|
||||
|
||||
$this->dao->delete()->from(TABLE_MODULE)->where('id')->in($childs)->exec();
|
||||
/* Mark deletion when delete a module. */
|
||||
$this->dao->update(TABLE_MODULE)->set('deleted')->eq(1)->where('id')->in($childs)->exec();
|
||||
foreach($childs as $childID)
|
||||
{
|
||||
$this->loadModel('action')->create('module', $childID, 'deleted', '', $extra = ACTIONMODEL::CAN_UNDELETED);
|
||||
}
|
||||
|
||||
$this->fixModulePath($module->root, $module->type);
|
||||
|
||||
if($module->type == 'task') $this->dao->update(TABLE_TASK)->set('module')->eq($module->parent)->where('module')->in($childs)->exec();
|
||||
@@ -1271,7 +1295,7 @@ class treeModel extends model
|
||||
{
|
||||
/* Get all modules grouped by parent. */
|
||||
if($type == 'bug' or $type == 'case') $type = 'story,' . $type;
|
||||
$groupModules = $this->dao->select('id, parent, branch')->from(TABLE_MODULE)->where('root')->eq($root)->andWhere('type')->in($type)->fetchGroup('parent', 'id');
|
||||
$groupModules = $this->dao->select('id, parent, branch')->from(TABLE_MODULE)->where('root')->eq($root)->andWhere('type')->in($type)->andWhere('deleted')->eq(0)->fetchGroup('parent', 'id');
|
||||
$modules = array();
|
||||
|
||||
/* Cycle the groupModules until it has no item any more. */
|
||||
@@ -1328,7 +1352,7 @@ class treeModel extends model
|
||||
|
||||
if($this->isMergeModule($rootID, $viewType)) $viewType .= ',story';
|
||||
|
||||
$existsModules = $this->dao->select('id,branch,name')->from(TABLE_MODULE)->where('root')->eq($rootID)->andWhere('type')->in($viewType)->andWhere('parent')->eq($parentModuleID)->andWhere('branch')->in($branches)->fetchAll();
|
||||
$existsModules = $this->dao->select('id,branch,name')->from(TABLE_MODULE)->where('root')->eq($rootID)->andWhere('type')->in($viewType)->andWhere('parent')->eq($parentModuleID)->andWhere('branch')->in($branches)->andWhere('deleted')->eq(0)->fetchAll();
|
||||
$repeatName = '';
|
||||
foreach($modules as $id => $name)
|
||||
{
|
||||
@@ -1436,7 +1460,7 @@ class treeModel extends model
|
||||
$parent[$module->parent]->children[] = $module;
|
||||
}
|
||||
|
||||
if($viewType == 'task') $parentTypePairs = $this->dao->select('*')->from(TABLE_MODULE)->where('id')->in(array_keys($parent))->fetchPairs('id', 'type');
|
||||
if($viewType == 'task') $parentTypePairs = $this->dao->select('*')->from(TABLE_MODULE)->where('id')->in(array_keys($parent))->andWhere('deleted')->eq(0)->fetchPairs('id', 'type');
|
||||
$tree = array();
|
||||
foreach($parent as $module)
|
||||
{
|
||||
|
||||
@@ -24,11 +24,11 @@ src=$1/
|
||||
dest=$2/
|
||||
|
||||
# Rsync when the shell load first.
|
||||
rsync -aqP --exclude='*.svn' --exclude="db/" --exclude="doc/" $src $dest
|
||||
rsync -aqP --exclude="db/" --exclude="doc/" $src $dest
|
||||
echo `date "+%H:%M:%S"` sync $src to $dest succssfully.
|
||||
|
||||
# Watch the $src directory, and sync files to destination.
|
||||
inotifywait -mrq --event create,modify,delete,move --format '%w %e %f' --exclude=".svn" $src |\
|
||||
inotifywait -mrq --event create,modify,delete,move --format '%w %e %f' $src |\
|
||||
while read watcher event file ; do
|
||||
|
||||
# compute the $path2process.
|
||||
@@ -56,7 +56,7 @@ while read watcher event file ; do
|
||||
else
|
||||
|
||||
echo `date "+%H:%M:%S"` $path2process copied.
|
||||
rsync -aqP --exclude='*.svn' --exclude='db/' --exclude='doc/' $src/ $dest
|
||||
rsync -aqP --exclude='db/' --exclude='doc/' $src/ $dest
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The install router file of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2013 QingDao Nature Easy Soft Network Technology Co,LTD (www.cnezsoft.com)
|
||||
* @license ZPL (http://zpl.pub/page/zplv12.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package ZenTaoPMS
|
||||
* @version $Id: install.php 4677 2013-04-26 06:23:58Z chencongzhi520@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
error_reporting(0);
|
||||
session_start();
|
||||
define('IN_INSTALL', true);
|
||||
|
||||
/* Load the framework. */
|
||||
include '../framework/router.class.php';
|
||||
include '../framework/control.class.php';
|
||||
include '../framework/model.class.php';
|
||||
include '../framework/helper.class.php';
|
||||
|
||||
/* Instance the app. */
|
||||
$app = router::createApp('pms', dirname(dirname(__FILE__)), 'router');
|
||||
|
||||
/* Check installed or not. */
|
||||
if(!isset($_SESSION['installing']) and isset($config->installed) and $config->installed) die(header('location: index.php'));
|
||||
|
||||
/* Reset the config params to make sure the install program will be lauched. */
|
||||
$config->set('requestType', 'GET');
|
||||
$config->set('default.module', 'install');
|
||||
$app->setDebug();
|
||||
|
||||
/* During the installation, if the database params is setted, auto connect the db. */
|
||||
if(isset($config->installed) and $config->installed) $app->connectDB();
|
||||
|
||||
$app->parseRequest();
|
||||
$app->loadModule();
|
||||
@@ -385,35 +385,6 @@ function showTreeBox(treeType)
|
||||
$('.side-handle .icon-caret-right').removeClass('icon-caret-right').addClass('icon-caret-left');
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggle tree menu.
|
||||
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function toggleTreeBox()
|
||||
{
|
||||
var treeType = $('.side-handle').data('id');
|
||||
if(typeof treeType == 'undefined' || treeType == null) return;
|
||||
if($.cookie(treeType) == 'hide') hideTreeBox(treeType);
|
||||
|
||||
$('.side-handle').toggle
|
||||
(
|
||||
function()
|
||||
{
|
||||
if($.cookie(treeType) == 'hide') return showTreeBox(treeType);
|
||||
hideTreeBox(treeType);
|
||||
},
|
||||
function()
|
||||
{
|
||||
if($.cookie(treeType) == 'show') return hideTreeBox(treeType);
|
||||
showTreeBox(treeType);
|
||||
}
|
||||
);
|
||||
|
||||
setTimeout(function(){$('.outer.with-side').addClass('with-transition')}, 1000);
|
||||
}
|
||||
|
||||
/**
|
||||
* set tree menu.
|
||||
|
||||
@@ -422,8 +393,32 @@ function toggleTreeBox()
|
||||
*/
|
||||
function setTreeBox()
|
||||
{
|
||||
var $handle = $('.side-handle');
|
||||
if($handle.data('setted')) return;
|
||||
|
||||
var treeType = $handle.data('id');
|
||||
if(treeType)
|
||||
{
|
||||
if($.cookie(treeType) == 'hide') hideTreeBox(treeType);
|
||||
|
||||
$handle.toggle
|
||||
(
|
||||
function()
|
||||
{
|
||||
if($.cookie(treeType) == 'hide') return showTreeBox(treeType);
|
||||
hideTreeBox(treeType);
|
||||
},
|
||||
function()
|
||||
{
|
||||
if($.cookie(treeType) == 'show') return hideTreeBox(treeType);
|
||||
showTreeBox(treeType);
|
||||
}
|
||||
).data('setted', true);
|
||||
}
|
||||
|
||||
if($('.outer > .side').length) $('.outer').addClass('with-side');
|
||||
toggleTreeBox();
|
||||
setTimeout(function(){$('.outer.with-side').addClass('with-transition')}, 1000);
|
||||
adjustOuterSize();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -478,6 +473,21 @@ function saveWindowSize()
|
||||
$.cookie('windowHeight', height)
|
||||
}
|
||||
|
||||
/**
|
||||
* Adjust Outer box's width and height.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function adjustOuterSize()
|
||||
{
|
||||
var side = $('#wrap .outer > .side');
|
||||
var sideH = side.length ? (side.outerHeight() + $('#featurebar').outerHeight() + 20) : 0;
|
||||
var height = Math.max(sideH, $(window).height() - $('#header').outerHeight() - ($('#footer').outerHeight() || 0) - 20);
|
||||
if(navigator.userAgent.indexOf("MSIE 8.0") >= 0) height -= 40;
|
||||
$('#wrap .outer').css('min-height', height);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Outer box's width and height.
|
||||
*
|
||||
@@ -486,20 +496,10 @@ function saveWindowSize()
|
||||
*/
|
||||
function setOuterBox()
|
||||
{
|
||||
// if($('.sub-featurebar').length) $('#featurebar').addClass('with-sub');
|
||||
|
||||
var side = $('#wrap .outer > .side');
|
||||
var resetOuterHeight = function()
|
||||
{
|
||||
var sideH = side.length ? (side.outerHeight() + $('#featurebar').outerHeight() + 20) : 0;
|
||||
var height = Math.max(sideH, $(window).height() - $('#header').outerHeight() - ($('#footer').outerHeight() || 0) - 20);
|
||||
if(navigator.userAgent.indexOf("MSIE 8.0") >= 0) height -= 40;
|
||||
$('#wrap .outer').css('min-height', height);
|
||||
}
|
||||
|
||||
side.resize(resetOuterHeight);
|
||||
$(window).resize(resetOuterHeight);
|
||||
resetOuterHeight();
|
||||
side.resize(adjustOuterSize);
|
||||
$(window).resize(adjustOuterSize);
|
||||
adjustOuterSize();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -655,7 +655,24 @@ function setComment()
|
||||
*/
|
||||
function checkTable($table)
|
||||
{
|
||||
$table = $table || $('.tablesorter:not(.table-datatable)');
|
||||
$(document).off('change.checktable').on('change.checktable', '.rows-selector:checkbox', function()
|
||||
{
|
||||
var $checkbox = $(this);
|
||||
var $datatable = $checkbox.closest('.datatable');
|
||||
if($datatable.length) {
|
||||
var $checkAll = $datatable.find('.check-all.check-btn:first').trigger('click');
|
||||
$checkbox.prop('checked', $checkAll.hasClass('checked'))
|
||||
return;
|
||||
}
|
||||
var scope = $checkbox.data('scope');
|
||||
var $target = scope ? $('#' + scope) : $checkbox.closest('.table');
|
||||
var isChecked = $checkbox.prop('checked');
|
||||
$target.find('tbody > tr').toggleClass('active', isChecked).find('td :checkbox').prop('checked', isChecked);
|
||||
});
|
||||
|
||||
$table = $table || $('.table-selectable');
|
||||
|
||||
if(!$table.length) return;
|
||||
|
||||
var checkRow = function(checked)
|
||||
{
|
||||
@@ -679,6 +696,8 @@ function checkTable($table)
|
||||
}
|
||||
};
|
||||
|
||||
var isSelectableTable = $table.hasClass('table-selectable');
|
||||
|
||||
$table.selectable(
|
||||
{
|
||||
selector: 'tbody > tr',
|
||||
@@ -699,6 +718,10 @@ function checkTable($table)
|
||||
});
|
||||
},
|
||||
clickBehavior: 'multi',
|
||||
startDrag: function(e)
|
||||
{
|
||||
if(!this.multiKey && isSelectableTable && !$(e.target).closest('.cell-id').length) return false;
|
||||
},
|
||||
select: function(e)
|
||||
{
|
||||
checkRow.call(e.target, true);
|
||||
@@ -708,21 +731,6 @@ function checkTable($table)
|
||||
checkRow.call(e.target, false);
|
||||
}
|
||||
}).on('click', 'tbody > tr :checkbox', function(e){checkRow.call(this); e.stopPropagation();}).on('click mousedown mousemove mouseup', 'tbody a,tbody select,tbody input', function(e) {e.stopPropagation();});
|
||||
|
||||
$(document).off('change.checktable').on('change.checktable', '.rows-selector:checkbox', function()
|
||||
{
|
||||
var $checkbox = $(this);
|
||||
var $datatable = $checkbox.closest('.datatable');
|
||||
if($datatable.length) {
|
||||
var $checkAll = $datatable.find('.check-all.check-btn:first').trigger('click');
|
||||
$checkbox.prop('checked', $checkAll.hasClass('checked'))
|
||||
return;
|
||||
}
|
||||
var scope = $checkbox.data('scope');
|
||||
var $target = scope ? $('#' + scope) : $checkbox.closest('.table');
|
||||
var isChecked = $checkbox.prop('checked');
|
||||
$target.find('tbody > tr').toggleClass('active', isChecked).find('td :checkbox').prop('checked', isChecked);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1300,7 +1308,7 @@ function setModal4List(triggerClass, replaceID, callback, width)
|
||||
}
|
||||
catch(err){}
|
||||
|
||||
if($list.is('.tablesorter:not(.table-datatable)')) checkTable($list);
|
||||
if($list.is('.table-selectable:not(.table-datatable)')) checkTable($list);
|
||||
else $list.find('tbody tr:not(.active-disabled) td').click(function(){$(this).closest('tr').toggleClass('active');});
|
||||
|
||||
if($.isFunction(callback)) callback();
|
||||
@@ -1433,7 +1441,7 @@ function fixedTfootAction(formID)
|
||||
if($(formID).find('table:last').find('tfoot').size() == 0) return false;
|
||||
|
||||
fixTfootInit();
|
||||
$(window).scroll(fixTfoot);//Fix table foot when scrolling.
|
||||
$(window).scroll(fixTfoot).resize(fixTfoot);//Fix table foot when scrolling.
|
||||
$('.side-handle').click(function(){setTimeout(fixTfootInit, 300);});//Fix table foot if module tree is hidden or displayed.
|
||||
|
||||
var $table, $tfoot, $inputGroup, tableWidth, tableOffset, hasFixed;
|
||||
|
||||
@@ -117,6 +117,7 @@ hr.small {margin: 10px 0}
|
||||
|
||||
.table caption {padding: 8px 20px; border: 1px solid #DDD; border-bottom: 0; background: #fafafa;}
|
||||
.table.table-condensed caption {padding: 6px 15px;}
|
||||
.table td.td-has-control {padding: 2px 4px;}
|
||||
|
||||
/* Datepicker */
|
||||
.datepicker-wrapper {position: relative; cursor: pointer;}
|
||||
@@ -161,7 +162,9 @@ i[class^="icon-"],i[class*=" icon-"],.link-icon i[class^="icon-"],.link-icon i[c
|
||||
|
||||
/* priority icons. */
|
||||
.pri1,.pri0,.pri2,.pri3,.pri4,.pri5,.pri6,.pri{display:inline-block;width: 18px;height: 18px;font-size: 12px;line-height: 14px;font-weight: bold; text-align: center; color: #ccc; -moz-border-radius:50%; -webkit-border-radius:50%; border-radius:50%;border: 2px solid #ccc; font-family: arial, helvetica, clean, sans-serif; background-color: #fff}
|
||||
.pri:before, .pri0:before{content: '?'}
|
||||
.pri0 {font-size: 0}
|
||||
.pri0:before {font-size: 12px}
|
||||
.pri:before, .pri0:before{content: '?';}
|
||||
.pri1{border-color: #d71319;color: #d71319;}
|
||||
.pri2{border-color: #EA644A;color: #EA644A;}
|
||||
.pri3{border-color: #BD7B46;color: #BD7B46;}
|
||||
@@ -284,8 +287,9 @@ fieldset > .form-group {margin-bottom: 0;}
|
||||
/* chosen container in input group */
|
||||
.input-group > .chosen-container {display: table-cell;}
|
||||
|
||||
/* chosen up */
|
||||
/* chosen */
|
||||
.chosen-up.chosen-container .chosen-drop {bottom: 100%; top: inherit; border-radius: 2px 2px 0 0; box-shadow: 0 -3px 5px rgba(0,0,0,.15); margin-top: auto; margin-bottom: -1px;}
|
||||
.chosen-container-single .chosen-single abbr {top: 6px!important;}
|
||||
|
||||
/* Condensed form */
|
||||
.form-condensed .table-form {margin-bottom: 0;}
|
||||
@@ -302,7 +306,6 @@ fieldset > .form-group {margin-bottom: 0;}
|
||||
.form-condensed .table-fixed .form-control {padding: 5px 6px}
|
||||
.form-condensed .table-fixed select.form-control {padding: 5px}
|
||||
.form-condensed .chosen-container {font-size: 13px}
|
||||
.chosen-container-single .chosen-single abbr {top: 6px;}
|
||||
.form-condensed .chosen-container-single .chosen-single {padding: 5px 10px}
|
||||
.form-condensed .chosen-container-single .chosen-search:before {top: 10px}
|
||||
|
||||
@@ -347,9 +350,10 @@ div.form-control[contenteditable='true'] {height: auto; text-align: left; outlin
|
||||
.panel .table-bordered > thead > tr:first-child th,.panel .table-bordered > tbody > tr:first-child th,.panel .table-bordered > tr:first-child th {border-top: 0;}
|
||||
.panel .table-bordered tr > td:first-child,.panel .table-bordered tr > th:first-child {border-left: 0;}
|
||||
.panel .table-bordered tr > td:last-child,.panel .table-bordered tr > th:last-child {border-right: 0;}
|
||||
.panel .table-bordered tfoot > tr:last-child > td {border-bottom: 0}
|
||||
|
||||
/* small panel */
|
||||
.panel-sm .panel-heading {padding: 7px 10px}
|
||||
.panel-sm .panel-heading {padding: 6px 10px}
|
||||
|
||||
/* list group */
|
||||
.list-group-item {padding: 8px 15px}
|
||||
@@ -546,8 +550,6 @@ body {color:#141414; padding-bottom: 40px;}
|
||||
.outer .table thead tr th.text-left {text-align: left;}
|
||||
.outer .table tbody td {vertical-align: middle;}
|
||||
.outer .table th {vertical-align: middle;}
|
||||
.outer .table tr > th:first-child, .outer .table tr > td:first-child {padding-left: 10px}
|
||||
.outer .table tr > th:last-child, .outer .table tr > td:last-child {padding-right: 10px}
|
||||
.outer .table.table-form tr > th:last-child, .outer .table.table-form tr > td:last-child {padding-right: 5px}
|
||||
.outer .table.table-form.table-fixed tr > th:last-child, .outer .table.table-form.table-fixed tr > td:last-child {padding-right: 15px}
|
||||
.outer .table tbody > tr:last-child td {border-bottom: 1px solid #e5e5e5;}
|
||||
@@ -567,11 +569,14 @@ body {color:#141414; padding-bottom: 40px;}
|
||||
.outer .table tfoot .chosen-container-single .chosen-single abbr {top: 4px;}
|
||||
.table-actions {float: left;}
|
||||
.table-actions > .checkbox {float: left; margin: 0}
|
||||
.table-actions > .btn-group, .table-actions > .btn, .table-actions > .input-group, .table-actions > .text {float: left; margin-right: 6px;}
|
||||
.table-actions > .btn-group, .table-actions > .btn, .table-actions > .input-group, .table-actions > .text {float: left; margin-right: 5px;}
|
||||
.table-actions > .text {line-height: 24px; color: #808080}
|
||||
.table-actions > .text strong {color: #333}
|
||||
.outer .table tfoot .pager {margin: -3px 0;}
|
||||
|
||||
.table .cell-id {text-align: left; padding-left: 12px!important;}
|
||||
.datatable .table > tbody > tr > td.check-btn, .datatable .table > thead > tr > th.check-btn {padding-left: 12px!important; padding-right: 0; text-align: left;}
|
||||
|
||||
/* color of a when visited */
|
||||
.outer .table tbody td > a:visited, #crumbs > a:visited, .side > a:visited {color: #551A8B}
|
||||
|
||||
@@ -598,7 +603,7 @@ body {color:#141414; padding-bottom: 40px;}
|
||||
.outer .main ul.list-unstyled li {padding: 2px 0}
|
||||
|
||||
.outer .main .table tr > th:first-child, .outer .main .table tr > td:first-child {padding-left: 0;}
|
||||
.outer .main-side > fieldset {padding: 5px 20px 10px 10px;}
|
||||
.outer .main-side > fieldset {padding: 5px 0px 10px 10px;}
|
||||
.outer .main-side > fieldset > .table {border: none}
|
||||
|
||||
.outer .main .tabs {margin-bottom: 15px;}
|
||||
@@ -612,8 +617,9 @@ body {color:#141414; padding-bottom: 40px;}
|
||||
.outer.with-side #featurebar, .outer.with-side #titlebar {margin-bottom: 20px;}
|
||||
.outer.with-side .main, .outer.with-side .side + form, .outer.with-side .main, .outer.with-side .side + table {margin-left: 212px; margin-right: 0;}
|
||||
.outer.with-side.with-transition .main, .outer.with-side.with-transition .side + form, .outer.with-side.with-transition .main, .outer.with-side.with-transition .side + table {transition: all 0.3s;}
|
||||
.outer.with-side .table tr > th:first-child, .outer.with-side .table tr > td:first-child {padding-left: 8px}
|
||||
.outer.with-side .table tr > th:last-child, .outer.with-side .table tr > td:last-child {padding-right: 8px}
|
||||
.outer.with-side .table tr > th:first-child, .outer.with-side .table tr > td:first-child {padding-left: 5px}
|
||||
.outer.with-side .table tr > th:first-child, .outer.with-side .table tr > td:first-child .table-actions {padding-left: 0;}
|
||||
.outer.with-side .table tr > th:last-child, .outer.with-side .table tr > td:last-child {padding-right: 5px}
|
||||
.outer .side {width: 192px; position: absolute; left: 20px;}
|
||||
.outer .side-body {overflow: hidden;}
|
||||
.outer .side-body .panel {min-width: 180px;}
|
||||
@@ -622,6 +628,9 @@ body {color:#141414; padding-bottom: 40px;}
|
||||
.outer .side-handle:hover {background: #c5c5c5; color: #04f}
|
||||
.outer.with-transition .side, .outer .side-handle.with-transition {transition: all 0.3s;}
|
||||
|
||||
.outer .side, .outer .side + .main {visibility: hidden;}
|
||||
.outer.with-side .side, .outer.with-side .side + .main {visibility: visible;}
|
||||
|
||||
.outer.hide-side .side{width: 0; border: none;}
|
||||
.outer.hide-side .side .side-handle {right: -15px;}
|
||||
.outer.hide-side .side .side-body {display:none;}
|
||||
@@ -645,7 +654,7 @@ body {color:#141414; padding-bottom: 40px;}
|
||||
.pager > .dropdown > a, .pager > i, .pager > a {display: inline-block; position: relative; padding: 5px; min-width: 25px; text-align: center; margin-left: -5px;}
|
||||
.pager .dropdown > a:hover, .pager > a:hover {background: #e5e5e5;}
|
||||
.pager .dropdown-menu {margin-top: 0; width: 212px; margin-left: -5px; padding: 0;}
|
||||
.pager .dropdown-menu > li {display: block; float: left; width: 70px; border-right: 1px dotted #ddd; border-bottom: 1px dotted #ddd}
|
||||
.pager .dropdown-menu > li {display: block; float: left; width: 70px; border-right: 1px dotted #ddd; border-bottom: 1px dotted #ddd;}
|
||||
#_pageID, #goto {display: none}
|
||||
|
||||
/* modal */
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The upgrade router file of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL (http://zpl.pub/page/zplv12.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package ZenTaoPMS
|
||||
* @version $Id: upgrade.php 4677 2013-04-26 06:23:58Z chencongzhi520@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
/* Judge my.php exists or not. */
|
||||
define('IN_UPGRADE', true);
|
||||
$myConfig = dirname(dirname(__FILE__)) . '/config/my.php';
|
||||
if(!file_exists($myConfig))
|
||||
{
|
||||
echo "文件" . $myConfig . "不存在! 提示:不要重命名原来的禅道安装目录,下载最新的源码包,覆盖即可。" . "<br />";
|
||||
echo $myConfig . " doesn't exists! Please don't rename zentao before overriding the source code!";
|
||||
exit;
|
||||
}
|
||||
|
||||
error_reporting(0);
|
||||
|
||||
/* Load the framework. */
|
||||
include '../framework/router.class.php';
|
||||
include '../framework/control.class.php';
|
||||
include '../framework/model.class.php';
|
||||
include '../framework/helper.class.php';
|
||||
|
||||
/* Instance the app. */
|
||||
$app = router::createApp('pms', dirname(dirname(__FILE__)), 'router');
|
||||
$common = $app->loadCommon();
|
||||
|
||||
/* Reset the config params to make sure the install program will be lauched. */
|
||||
$config->set('requestType', 'GET');
|
||||
$config->set('default.module', 'upgrade');
|
||||
$app->setDebug();
|
||||
|
||||
/* Check the installed version is the latest or not. */
|
||||
$config->installedVersion = $common->loadModel('setting')->getVersion();
|
||||
if(version_compare($config->version, $config->installedVersion) <= 0) die(header('location: index.php'));
|
||||
|
||||
/* Run it. */
|
||||
$app->parseRequest();
|
||||
$common->checkUpgradeStatus();
|
||||
$app->loadModule();
|
||||
Reference in New Issue
Block a user