Merge branch 'master' of github.com:easysoft/zentaopms

This commit is contained in:
z
2020-08-18 14:11:53 +08:00
47 changed files with 261 additions and 126 deletions
-1
View File
@@ -1 +0,0 @@
ALTER TABLE `zt_user` ADD `type` char(30) NOT NULL AFTER `account`;
+1
View File
@@ -0,0 +1 @@
update zt_story set `plan`='' where `plan`=0;
-6
View File
@@ -856,12 +856,6 @@ class actionModel extends model
if(strpos($action->objectLabel, '|') !== false)
{
list($objectLabel, $moduleName, $methodName, $vars) = explode('|', $action->objectLabel);
$action->objectLink = '';
if(!common::hasPriv($moduleName, $methodName))
{
unset($actions[$i]);
continue;
}
$action->objectLink = helper::createLink($moduleName, $methodName, sprintf($vars, $action->objectID));
if($action->objectType == 'user') $action->objectLink = helper::createLink($moduleName, $methodName, sprintf($vars, $action->objectName));
+1
View File
@@ -66,6 +66,7 @@ function refreshBlock($panel, afterRefresh)
{
$panel.children('.panel-move-handler,style,script').remove();
$panel.find('.panel-body,.empty-tip').replaceWith($data);
$panel.find('.iframe').initIframeModal();
}
$panel.find('.progress-pie').progressPie();
if($.isFunction(afterRefresh))
+2 -1
View File
@@ -496,7 +496,8 @@ function notice()
if(typeof(branch) == 'undefined') branch = 0;
var link = createLink('release', 'create', 'productID=' + $('#product').val() + '&branch=' + branch);
if(typeof(flow) != 'undefined' && flow == 'onlyTest') link = createLink('build', 'create','projectID=' + $('#product').val());
html += '<a href="' + link + '" target="_blank" style="padding-right:5px">' + createBuild + '</a> ';
link += config.requestType == 'GET' ? '&onlybody=yes' : '?onlybody=yes';
html += '<a href="' + link + '" data-toggle="modal" data-type="iframe" style="padding-right:5px">' + createBuild + '</a> ';
html += '<a href="javascript:loadProductBuilds(' + $('#product').val() + ')">' + refresh + '</a>';
}
else
+1 -1
View File
@@ -2494,7 +2494,7 @@ class bugModel extends model
$canBatchResolve = common::hasPriv('bug', 'batchResolve');
$canBatchAssignTo = common::hasPriv('bug', 'batchAssignTo');
$canBatchAction = $canBatchEdit or $canBatchConfirm or $canBatchClose or $canBatchActivate or $canBatchChangeBranch or $canBatchChangeModule or $canBatchResolve or $canBatchAssignTo;
$canBatchAction = ($canBatchEdit or $canBatchConfirm or $canBatchClose or $canBatchActivate or $canBatchChangeBranch or $canBatchChangeModule or $canBatchResolve or $canBatchAssignTo);
$canView = common::hasPriv('bug', 'view');
+25 -12
View File
@@ -206,6 +206,17 @@ $currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($brow
$setting = $this->datatable->getSetting('bug');
$widths = $this->datatable->setFixedFieldWidth($setting);
$columns = 0;
$canBatchEdit = common::hasPriv('bug', 'batchEdit');
$canBatchConfirm = common::hasPriv('bug', 'batchConfirm');
$canBatchClose = common::hasPriv('bug', 'batchClose');
$canBatchActivate = common::hasPriv('bug', 'batchActivate');
$canBatchChangeBranch = common::hasPriv('bug', 'batchChangeBranch');
$canBatchChangeModule = common::hasPriv('bug', 'batchChangeModule');
$canBatchResolve = common::hasPriv('bug', 'batchResolve');
$canBatchAssignTo = common::hasPriv('bug', 'batchAssignTo');
$canBatchAction = ($canBatchEdit or $canBatchConfirm or $canBatchClose or $canBatchActivate or $canBatchChangeBranch or $canBatchChangeModule or $canBatchResolve or $canBatchAssignTo);
?>
<?php if(!$useDatatable) echo '<div class="table-responsive">';?>
<table class='table has-sort-head<?php if($useDatatable) echo ' datatable';?>' id='bugList' data-fixed-left-width='<?php echo $widths['leftWidth']?>' data-fixed-right-width='<?php echo $widths['rightWidth']?>'>
@@ -219,7 +230,7 @@ $currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($brow
if(common::checkNotCN() and $value->id == 'severity') $value->name = $lang->bug->severity;
if(common::checkNotCN() and $value->id == 'pri') $value->name = $lang->bug->pri;
if(common::checkNotCN() and $value->id == 'confirmed') $value->name = $lang->bug->confirmed;
$this->datatable->printHead($value, $orderBy, $vars);
$this->datatable->printHead($value, $orderBy, $vars, $canBatchAction);
$columns ++;
}
}
@@ -236,33 +247,35 @@ $currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($brow
</table>
<?php if(!$useDatatable) echo '</div>';?>
<div class='table-footer'>
<?php if($canBatchAction):?>
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
<?php endif;?>
<div class="table-actions btn-toolbar">
<div class='btn-group dropup'>
<?php
$actionLink = $this->createLink('bug', 'batchEdit', "productID=$productID&branch=$branch");
$misc = common::hasPriv('bug', 'batchEdit') ? "onclick=\"setFormAction('$actionLink')\"" : "disabled='disabled'";
$misc = $canBatchEdit ? "onclick=\"setFormAction('$actionLink')\"" : "disabled='disabled'";
echo html::commonButton($lang->edit, $misc);
?>
<button type='button' class='btn dropdown-toggle' data-toggle='dropdown'><span class='caret'></span></button>
<ul class='dropdown-menu'>
<?php
$class = common::hasPriv('bug', 'batchConfirm') ? '' : "class='disabled'";
$class = $canBatchConfirm ? '' : "class='disabled'";
$actionLink = $this->createLink('bug', 'batchConfirm');
$misc = common::hasPriv('bug', 'batchConfirm') ? "onclick=\"setFormAction('$actionLink', 'hiddenwin')\"" : '';
$misc = $canBatchConfirm ? "onclick=\"setFormAction('$actionLink', 'hiddenwin')\"" : '';
echo "<li $class>" . html::a('javascript:;', $lang->bug->confirmBug, '', $misc) . "</li>";
$class = common::hasPriv('bug', 'batchClose') ? '' : "class='disabled'";
$class = $canBatchClose ? '' : "class='disabled'";
$actionLink = $this->createLink('bug', 'batchClose');
$misc = common::hasPriv('bug', 'batchClose') ? "onclick=\"setFormAction('$actionLink', 'hiddenwin')\"" : '';
$misc = $canBatchClose ? "onclick=\"setFormAction('$actionLink', 'hiddenwin')\"" : '';
echo "<li $class>" . html::a('javascript:;', $lang->bug->close, '', $misc) . "</li>";
$class = common::hasPriv('bug', 'batchActivate') ? '' : "class='disabled'";
$class = $canBatchActivate ? '' : "class='disabled'";
$actionLink = $this->createLink('bug', 'batchActivate', "productID=$productID&branch=$branch");
$misc = common::hasPriv('bug', 'batchActivate') ? "onclick=\"setFormAction('$actionLink')\"" : '';
$misc = $canBatchActivate ? "onclick=\"setFormAction('$actionLink')\"" : '';
echo "<li $class>" . html::a('javascript:;', $lang->bug->activate, '', $misc) . "</li>";
$misc = common::hasPriv('bug', 'batchResolve') ? "id='resolveItem'" : '';
$misc = $canBatchResolve ? "id='resolveItem'" : '';
if($misc)
{
echo "<li class='dropdown-submenu'>" . html::a('javascript:;', $lang->bug->resolve, '', $misc);
@@ -302,7 +315,7 @@ $currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($brow
?>
</ul>
</div>
<?php if(common::hasPriv('bug', 'batchChangeBranch') and $this->session->currentProductType != 'normal'):?>
<?php if($canBatchChangeBranch and $this->session->currentProductType != 'normal'):?>
<div class="btn-group dropup">
<button data-toggle="dropdown" type="button" class="btn"><?php echo $lang->product->branchName[$this->session->currentProductType];?> <span class="caret"></span></button>
<?php $withSearch = count($branches) > 8;?>
@@ -330,7 +343,7 @@ $currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($brow
</div>
</div>
<?php endif;?>
<?php if(common::hasPriv('bug', 'batchChangeModule')):?>
<?php if($canBatchChangeModule):?>
<div class="btn-group dropup">
<button data-toggle="dropdown" type="button" class="btn"><?php echo $lang->bug->moduleAB;?> <span class="caret"></span></button>
<?php $withSearch = count($modules) > 8;?>
@@ -358,7 +371,7 @@ $currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($brow
</div>
</div>
<?php endif;?>
<?php if(common::hasPriv('bug', 'batchAssignTo')):?>
<?php if($canBatchAssignTo):?>
<div class="btn-group dropup">
<button data-toggle="dropdown" type="button" class="btn"><?php echo $lang->bug->assignedTo;?> <span class="caret"></span></button>
<?php $withSearch = count($memberPairs) > 10;?>
+3 -1
View File
@@ -97,7 +97,7 @@ js::set('flow', $config->global->flow);
<?php $canBatchDelete = common::hasPriv('testcase', 'batchDelete');?>
<?php $canBatchReview = common::hasPriv('testcase', 'batchReview') and ($config->testcase->needReview or !empty($config->testcase->forceReview));?>
<?php $canBatchChangeModule = common::hasPriv('testcase', 'batchChangeModule');?>
<?php $canBatchAction = $canBatchEdit or $canBatchDelete or $canBatchReview or $canBatchChangeModule;?>
<?php $canBatchAction = ($canBatchEdit or $canBatchDelete or $canBatchReview or $canBatchChangeModule);?>
<?php $vars = "libID=$libID&browseType=$browseType&param=$param&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}";?>
<div class="table-responsive">
<table class='table has-sort-head' id='caseList'>
@@ -155,7 +155,9 @@ js::set('flow', $config->global->flow);
</table>
</div>
<div class='table-footer'>
<?php if($canBatchAction):?>
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
<?php endif;?>
<div class="table-actions btn-toolbar">
<div class='btn-group dropup'>
<?php $actionLink = $this->createLink('testcase', 'batchEdit', "libID=$libID&branch=0&type=lib");?>
+1 -1
View File
@@ -1442,7 +1442,7 @@ EOD;
$method = $this->app->rawMethod;
}
if(!empty($this->app->user->modifyPassword) and (($module != 'my' or $method != 'changepassword') and ($module != 'user' or $method != 'logout'))) die(js::locate(helper::createLink('my', 'changepassword')));
if(!empty($this->app->user->modifyPassword) and (($module != 'my' or $method != 'changepassword') and ($module != 'user' or $method != 'logout'))) die(js::locate(helper::createLink('my', 'changepassword', '', '', true)));
if($this->isOpenMethod($module, $method)) return true;
if(!$this->loadModel('user')->isLogon() and $this->server->php_auth_user) $this->user->identifyByPhpAuth();
if(!$this->loadModel('user')->isLogon() and $this->cookie->za) $this->user->identifyByCookie();
+2 -2
View File
@@ -151,8 +151,8 @@ $lang->custom->moduleName['project'] = $lang->projectCommon;
$lang->custom->conceptQuestions['overview'] = "1. Which combination of management fits your company?";
$lang->custom->conceptQuestions['story'] = "2. Do you use the concept of requirement or user story in your company?";
$lang->custom->conceptQuestions['requirementpoint'] = "3. Do you use hours or function points to make estimations in your company?";
$lang->custom->conceptQuestions['storypoint'] = "3. Do you use hours or story points to make estimations in your company?";
$lang->custom->conceptQuestions['requirementpoint'] = "2. Do you use hours or function points to make estimations in your company?";
$lang->custom->conceptQuestions['storypoint'] = "2. Do you use hours or story points to make estimations in your company?";
$lang->custom->conceptOptions = new stdclass;
+2 -2
View File
@@ -151,8 +151,8 @@ $lang->custom->moduleName['project'] = $lang->projectCommon;
$lang->custom->conceptQuestions['overview'] = "1. Which combination of management fits your company?";
$lang->custom->conceptQuestions['story'] = "2. Do you use the concept of requirement or user story in your company?";
$lang->custom->conceptQuestions['requirementpoint'] = "3. Do you use hours or function points to make estimations in your company?";
$lang->custom->conceptQuestions['storypoint'] = "3. Do you use hours or story points to make estimations in your company?";
$lang->custom->conceptQuestions['requirementpoint'] = "2. Do you use hours or function points to make estimations in your company?";
$lang->custom->conceptQuestions['storypoint'] = "2. Do you use hours or story points to make estimations in your company?";
$lang->custom->conceptOptions = new stdclass;
+2 -2
View File
@@ -151,8 +151,8 @@ $lang->custom->moduleName['project'] = $lang->projectCommon;
$lang->custom->conceptQuestions['overview'] = "1. Quelle combinaison de gestion convient le mieux à votre entreprise ?";
$lang->custom->conceptQuestions['story'] = "2. Utilisez-vous le concept d'exigence ou de user story dans votre entreprise ?";
$lang->custom->conceptQuestions['requirementpoint'] = "3. Utilisez-vous des heures ou des points de fonction pour faire des estimations dans votre entreprise ?";
$lang->custom->conceptQuestions['storypoint'] = "3. Utilisez-vous des heures ou des points de Story pour faire des estimations dans votre entreprise ?";
$lang->custom->conceptQuestions['requirementpoint'] = "2. Utilisez-vous des heures ou des points de fonction pour faire des estimations dans votre entreprise ?";
$lang->custom->conceptQuestions['storypoint'] = "2. Utilisez-vous des heures ou des points de Story pour faire des estimations dans votre entreprise ?";
$lang->custom->conceptOptions = new stdclass;
+2 -2
View File
@@ -151,8 +151,8 @@ $lang->custom->moduleName['project'] = $lang->projectCommon;
$lang->custom->conceptQuestions['overview'] = "1. Sự kết hợp quản lý nào phù hợp với công ty của bạn?";
$lang->custom->conceptQuestions['story'] = "2. Bạn có sử dụng mô hình điều kiện hay câu chuyện người dùng trong doanh nghiệp của bạn?";
$lang->custom->conceptQuestions['requirementpoint'] = "3. Do you use hours or function points to make estimations in your company?";
$lang->custom->conceptQuestions['storypoint'] = "3. Bạn có dùng giờ hoặc điểm để tạo dự kiến trong doanh nghiệp của bạn ?";
$lang->custom->conceptQuestions['requirementpoint'] = "2. Do you use hours or function points to make estimations in your company?";
$lang->custom->conceptQuestions['storypoint'] = "2. Bạn có dùng giờ hoặc điểm để tạo dự kiến trong doanh nghiệp của bạn ?";
$lang->custom->conceptOptions = new stdclass;
+1 -1
View File
@@ -38,7 +38,7 @@
<tr>
<th><?php echo $lang->doc->title;?></th>
<td colspan='2'><?php echo html::input('title', $doc->title, "class='form-control' required");?></td>
</tr>
</tr>
<tr>
<th><?php echo $lang->doc->keywords;?></th>
<td colspan='2'><?php echo html::input('keywords', $doc->keywords, "class='form-control'");?></td>
+2
View File
@@ -146,6 +146,7 @@ js::set('docID', $doc->id);
</div>
</div>
<div class="side-col col-4 hidden">
<?php if(!empty($doc->digest)):?>
<div class="cell">
<details class="detail" open>
<summary class="detail-title"><?php echo $lang->doc->digest;?></summary>
@@ -154,6 +155,7 @@ js::set('docID', $doc->id);
</div>
</details>
</div>
<?php endif;?>
<div class="cell">
<details class="detail" open>
<summary class="detail-title"><?php echo $lang->doc->keywords;?></summary>
+14 -8
View File
@@ -29,13 +29,20 @@
</div>
<?php else:?>
<form id='myBugForm' class="main-table table-bug" data-ride="table" method="post" action='<?php echo $this->createLink('bug', 'batchEdit', "productID=0");?>'>
<?php $canBatchEdit = common::hasPriv('bug', 'batchEdit');?>
<?php
$canBatchEdit = common::hasPriv('bug', 'batchEdit');
$canBatchConfirm = common::hasPriv('bug', 'batchConfirm');
$canBatchClose = (common::hasPriv('bug', 'batchClose') and strtolower($type) != 'closedby');
$canBatchAssignTo = common::hasPriv('bug', 'batchAssignTo');
$canBatchAction = ($canBatchEdit or $canBatchConfirm or $canBatchClose or $canBatchAssignTo);
?>
<table class="table has-sort-head table-fixed" id='bugList'>
<?php $vars = "type=$type&orderBy=%s&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID"; ?>
<thead>
<tr>
<th class="w-100px">
<?php if($canBatchEdit):?>
<?php if($canBatchAction):?>
<div class="checkbox-primary check-all" title="<?php echo $lang->selectAll?>">
<label></label>
</div>
@@ -68,7 +75,7 @@
<?php foreach($bugs as $bug):?>
<tr>
<td class="c-id">
<?php if($canBatchEdit):?>
<?php if($canBatchAction):?>
<div class="checkbox-primary">
<input type='checkbox' name='bugIDList[]' value='<?php echo $bug->id;?>' />
<label></label>
@@ -105,23 +112,23 @@
</tbody>
</table>
<div class="table-footer">
<?php if($canBatchEdit):?>
<?php if($canBatchAction):?>
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
<?php endif;?>
<div class="table-actions btn-toolbar">
<?php
$actionLink = $this->createLink('bug', 'batchEdit');
$misc = common::hasPriv('bug', 'batchEdit') ? "onclick=\"setFormAction('$actionLink')\"" : "disabled='disabled'";
$misc = $canBatchEdit ? "onclick=\"setFormAction('$actionLink')\"" : "disabled='disabled'";
echo html::commonButton($lang->edit, $misc);
?>
<?php
if(common::hasPriv('bug', 'batchConfirm'))
if($canBatchConfirm)
{
$actionLink = $this->createLink('bug', 'batchConfirm');
$misc = "onclick=\"setFormAction('$actionLink', 'hiddenwin')\"";
echo html::commonButton($lang->bug->confirmBug, $misc);
}
if(common::hasPriv('bug', 'batchClose'))
if($canBatchClose)
{
$actionLink = $this->createLink('bug', 'batchClose');
$misc = "onclick=\"setFormAction('$actionLink', 'hiddenwin')\"";
@@ -129,7 +136,6 @@
}
?>
<?php
$canBatchAssignTo = common::hasPriv('bug', 'batchAssignTo');
if($canBatchAssignTo && count($bugs)):?>
<div class="btn-group dropup">
<button data-toggle="dropdown" type="button" class="btn"><?php echo $lang->bug->assignedTo?> <span class="caret"></span></button>
+12 -8
View File
@@ -32,13 +32,17 @@
<table class="table has-sort-head table-fixed">
<?php $vars = "type=$type&orderBy=%s&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID"; ?>
<?php
$canBatchEdit = common::hasPriv('story', 'batchEdit');
$canBatchClose = (common::hasPriv('story', 'batchClose') && strtolower($type) != 'closedbyme');
$canBatchEdit = common::hasPriv('story', 'batchEdit');
$canBatchClose = (common::hasPriv('story', 'batchClose') and strtolower($type) != 'closedby');
$canBatchReview = common::hasPriv('story', 'batchReview');
$canBatchAssignTo = common::hasPriv('story', 'batchAssignTo');
$canBatchAction = ($canBatchEdit or $canBatchClose or $canBatchReview or $canBatchAssignTo);
?>
<thead>
<tr>
<th class="c-id">
<?php if($canBatchEdit or $canBatchClose):?>
<?php if($canBatchAction):?>
<div class="checkbox-primary check-all" title="<?php echo $lang->selectAll?>">
<label></label>
</div>
@@ -61,7 +65,7 @@
<?php $storyLink = $this->createLink('story', 'view', "id=$story->id");?>
<tr>
<td class="c-id">
<?php if($canBatchEdit or $canBatchClose):?>
<?php if($canBatchAction):?>
<div class="checkbox-primary">
<input type='checkbox' name='storyIdList[<?php echo $story->id;?>]' value='<?php echo $story->id;?>' />
<label></label>
@@ -92,7 +96,7 @@
</tbody>
</table>
<div class="table-footer">
<?php if($canBatchEdit or $canBatchClose):?>
<?php if($canBatchAction):?>
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
<?php endif;?>
<div class="table-actions btn-toolbar">
@@ -104,7 +108,7 @@
echo html::commonButton($lang->edit, $misc);
}
?>
<?php if(common::hasPriv('story', 'batchReview')):?>
<?php if($canBatchReview):?>
<div class="btn-group dropup">
<button type='button' class='btn' data-toggle='dropdown'><?php echo $lang->story->review;?> <span class='caret'></span></button>
<ul class='dropdown-menu'>
@@ -141,7 +145,7 @@
</ul>
</div>
<?php endif;?>
<?php if(common::hasPriv('story', 'batchAssignTo')):?>
<?php if($canBatchAssignTo):?>
<div class="btn-group dropup">
<button data-toggle="dropdown" type="button" class="btn"><?php echo $lang->story->assignedTo?> <span class="caret"></span></button>
<?php
@@ -174,7 +178,7 @@
?>
</div>
<?php endif;?>
<?php if($canBatchClose and $type != 'closedBy'):?>
<?php if($canBatchClose):?>
<?php
$actionLink = $this->createLink('story', 'batchClose');
$misc = "data-form-action=\"$actionLink\"";
+13 -8
View File
@@ -52,12 +52,19 @@
</div>
<?php else:?>
<form class="main-table table-todo" data-ride="table" method="post">
<?php
$canBatchEdit = common::hasPriv('todo', 'batchEdit');
$canBatchFinish = common::hasPriv('todo', 'batchFinish');
$canBatchClose = common::hasPriv('todo', 'batchClose');
$canbatchAction = ($type != 'cycle' and ($canBatchEdit or $canBatchFinish or $canBatchClose or (common::hasPriv('todo', 'import2Today') and $importFuture)));
?>
<table class="table has-sort-head" id='todoList'>
<?php $vars = "type=$type&account=$account&status=$status&orderBy=%s&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID"; ?>
<thead>
<tr>
<th class="w-100px">
<?php if($type != 'cycle' and (common::hasPriv('todo', 'batchEdit') or (common::hasPriv('todo', 'import2Today') and $importFuture))):?>
<?php if($canbatchAction):?>
<div class="checkbox-primary check-all" title="<?php echo $lang->selectAll?>">
<label></label>
</div>
@@ -79,7 +86,7 @@
<?php foreach($todos as $todo):?>
<tr>
<td class="c-id">
<?php if($type != 'cycle' and (common::hasPriv('todo', 'batchEdit') or (common::hasPriv('todo', 'import2Today') and $importFuture))):?>
<?php if($canbatchAction):?>
<div class="checkbox-primary">
<input type='checkbox' name='todoIDList[<?php echo $todo->id;?>]' value='<?php echo $todo->id;?>' />
<label></label>
@@ -128,23 +135,22 @@
</tbody>
</table>
<div class="table-footer">
<?php if($type != 'cycle'):?>
<?php if(common::hasPriv('todo', 'batchEdit') or (common::hasPriv('todo', 'import2Today') and $importFuture)):?>
<?php if($canbatchAction):?>
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
<?php endif;?>
<div class="table-actions btn-toolbar">
<?php
if(common::hasPriv('todo', 'batchEdit'))
if($canBatchEdit)
{
$actionLink = $this->createLink('todo', 'batchEdit', "from=myTodo&type=$type&account=$account&status=$status");
echo html::commonButton($lang->edit, "onclick=\"setFormAction('$actionLink')\"");
}
if(common::hasPriv('todo', 'batchFinish'))
if($canBatchFinish)
{
$actionLink = $this->createLink('todo', 'batchFinish');
echo html::commonButton($lang->todo->finish, "onclick=\"setFormAction('$actionLink', 'hiddenwin')\"");
}
if(common::hasPriv('todo', 'batchClose'))
if($canBatchClose)
{
$actionLink = $this->createLink('todo', 'batchClose');
echo html::commonButton($lang->todo->close, "onclick=\"setFormAction('$actionLink', 'hiddenwin')\"");
@@ -160,7 +166,6 @@
}
?>
</div>
<?php endif;?>
<?php $pager->show('right', 'pagerjs');?>
</div>
</form>
+20 -9
View File
@@ -186,6 +186,17 @@ js::set('foldAll', $lang->project->treeLevel['root']);
$setting = $this->datatable->getSetting('product');
$widths = $this->datatable->setFixedFieldWidth($setting);
$columns = 0;
$canBatchEdit = common::hasPriv('story', 'batchEdit');
$canBatchClose = common::hasPriv('story', 'batchClose') and strtolower($browseType) != 'closedbyme' and strtolower($browseType) != 'closedstory';
$canBatchReview = common::hasPriv('story', 'batchReview');
$canBatchChangeStage = common::hasPriv('story', 'batchChangeStage');
$canBatchChangeBranch = common::hasPriv('story', 'batchChangeBranch');
$canBatchChangeModule = common::hasPriv('story', 'batchChangeModule');
$canBatchChangePlan = common::hasPriv('story', 'batchChangePlan');
$canBatchAssignTo = common::hasPriv('story', 'batchAssignTo');
$canBatchAction = ($canBatchEdit or $canBatchClose or $canBatchReview or $canBatchChangeStage or $canBatchChangeModule or $canBatchChangePlan or $canBatchAssignTo);
?>
<?php if(!$useDatatable) echo '<div class="table-responsive">';?>
<table class='table has-sort-head<?php if($useDatatable) echo ' datatable';?>' id='storyList' data-fixed-left-width='<?php echo $widths['leftWidth']?>' data-fixed-right-width='<?php echo $widths['rightWidth']?>'>
@@ -196,7 +207,7 @@ js::set('foldAll', $lang->project->treeLevel['root']);
{
if($value->show)
{
$this->datatable->printHead($value, $orderBy, $vars);
$this->datatable->printHead($value, $orderBy, $vars, $canBatchAction);
$columns ++;
}
}
@@ -224,11 +235,12 @@ js::set('foldAll', $lang->project->treeLevel['root']);
</table>
<?php if(!$useDatatable) echo '</div>';?>
<div class="table-footer">
<?php if($canBatchAction):?>
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
<?php endif;?>
<div class="table-actions btn-toolbar">
<div class='btn-group dropup'>
<?php
$canBatchEdit = common::hasPriv('story', 'batchEdit');
$disabled = $canBatchEdit ? '' : "disabled='disabled'";
$actionLink = $this->createLink('story', 'batchEdit', "productID=$productID&projectID=0&branch=$branch");
?>
@@ -236,13 +248,12 @@ js::set('foldAll', $lang->project->treeLevel['root']);
<button type='button' class='btn dropdown-toggle' data-toggle='dropdown'><span class='caret'></span></button>
<ul class='dropdown-menu'>
<?php
$canBatchClose = common::hasPriv('story', 'batchClose') && strtolower($browseType) != 'closedbyme' && strtolower($browseType) != 'closedstory';
$class = $canBatchClose ? '' : "class='disabled'";
$actionLink = $this->createLink('story', 'batchClose', "productID=$productID&projectID=0");
$misc = $canBatchClose ? "onclick=\"setFormAction('$actionLink')\"" : '';
echo "<li $class>" . html::a('#', $lang->close, '', $misc) . "</li>";
if(common::hasPriv('story', 'batchReview'))
if($canBatchReview)
{
echo "<li class='dropdown-submenu'>";
echo html::a('javascript:;', $lang->story->review, '', "id='reviewItem'");
@@ -283,7 +294,7 @@ js::set('foldAll', $lang->project->treeLevel['root']);
echo "<li $class>" . html::a('javascript:;', $lang->story->review, '', $class) . '</li>';
}
if(common::hasPriv('story', 'batchChangeBranch') and $this->session->currentProductType != 'normal')
if($canBatchChangeBranch and $this->session->currentProductType != 'normal')
{
$withSearch = count($branches) > 8;
echo "<li class='dropdown-submenu'>";
@@ -300,7 +311,7 @@ js::set('foldAll', $lang->project->treeLevel['root']);
echo '</div></li>';
}
if(common::hasPriv('story', 'batchChangeStage'))
if($canBatchChangeStage)
{
echo "<li class='dropdown-submenu'>";
echo html::a('javascript:;', $lang->story->stageAB, '', "id='stageItem'");
@@ -323,7 +334,7 @@ js::set('foldAll', $lang->project->treeLevel['root']);
</ul>
</div>
<?php if(common::hasPriv('story', 'batchChangeModule')):?>
<?php if($canBatchChangeModule):?>
<div class="btn-group dropup">
<button data-toggle="dropdown" type="button" class="btn"><?php echo $lang->story->moduleAB;?> <span class="caret"></span></button>
<?php $withSearch = count($modules) > 8;?>
@@ -350,7 +361,7 @@ js::set('foldAll', $lang->project->treeLevel['root']);
</div>
</div>
<?php endif;?>
<?php if(common::hasPriv('story', 'batchChangePlan')):?>
<?php if($canBatchChangePlan):?>
<div class="btn-group dropup">
<button data-toggle="dropdown" type="button" class="btn"><?php echo $lang->story->planAB;?> <span class="caret"></span></button>
<?php
@@ -381,7 +392,7 @@ js::set('foldAll', $lang->project->treeLevel['root']);
</div>
<?php endif;?>
<?php if(common::hasPriv('story', 'batchAssignTo')):?>
<?php if($canBatchAssignTo):?>
<div class="btn-group dropup">
<button data-toggle="dropdown" type="button" class="btn"><?php echo $lang->story->assignedTo;?> <span class="caret"></span></button>
<?php
+1 -1
View File
@@ -98,7 +98,7 @@
$canBatchChangeStage = common::hasPriv('story', 'batchChangeStage');
$canBatchAssignTo = common::hasPriv('story', 'batchAssignTo');
$canBatchAction = $canBatchUnlink or $canBatchClose or $canBatchEdit or $canBatchReview or $canBatchChangeBranch or $canBatchChangeModule or $canBatchChangePlan or $canBatchChangeStage or $canBatchAssignTo;
$canBatchAction = ($canBatchUnlink or $canBatchClose or $canBatchEdit or $canBatchReview or $canBatchChangeBranch or $canBatchChangeModule or $canBatchChangePlan or $canBatchChangeStage or $canBatchAssignTo);
$vars = "planID={$plan->id}&type=story&orderBy=%s&link=$link&param=$param";
?>
<thead>
+3 -1
View File
@@ -27,15 +27,18 @@
</div>
<div id='mainContent'>
<?php $canOrder = (common::hasPriv('project', 'updateOrder') and strpos($orderBy, 'order') !== false)?>
<?php $canBatchEdit = common::hasPriv('project', 'batchEdit'); ?>
<form class='main-table' id='projectsForm' method='post' action='<?php echo inLink('batchEdit', "projectID=$projectID");?>' data-ride='table'>
<table class='table has-sort-head table-fixed' id='projectList'>
<?php $vars = "status=$status&projectID=$projectID&orderBy=%s&productID=$productID&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}";?>
<thead>
<tr>
<th class='c-id'>
<?php if($canBatchEdit):?>
<div class="checkbox-primary check-all" title="<?php echo $lang->selectAll?>">
<label></label>
</div>
<?php endif;?>
<?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?>
</th>
<th><?php common::printOrderLink('name', $orderBy, $vars, $lang->project->name);?></th>
@@ -53,7 +56,6 @@
<?php endif;?>
</tr>
</thead>
<?php $canBatchEdit = common::hasPriv('project', 'batchEdit'); ?>
<tbody class='sortable' id='projectTableList'>
<?php foreach($projectStats as $project):?>
<tr data-id='<?php echo $project->id ?>' data-order='<?php echo $project->order ?>'>
+9 -5
View File
@@ -110,12 +110,16 @@
<tr>
<?php
$totalEstimate = 0;
$canBatchEdit = common::hasPriv('story', 'batchEdit');
$canBatchClose = common::hasPriv('story', 'batchClose');
$canBatchEdit = common::hasPriv('story', 'batchEdit');
$canBatchClose = common::hasPriv('story', 'batchClose');
$canBatchChangeStage = common::hasPriv('story', 'batchChangeStage');
$canBatchUnlink = common::hasPriv('project', 'batchUnlinkStory');
$canBatchAction = ($canBatchEdit or $canBatchClose or $canBatchChangeStage or $canBatchUnlink);
?>
<?php $vars = "projectID={$project->id}&orderBy=%s&type=$type&param=$param&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}"; ?>
<th class='c-id {sorter:false}'>
<?php if($canBatchEdit or $canBatchClose):?>
<?php if($canBatchAction):?>
<div class="checkbox-primary check-all" title="<?php echo $lang->selectAll?>">
<label></label>
</div>
@@ -146,7 +150,7 @@
?>
<tr id="story<?php echo $story->id;?>" data-id='<?php echo $story->id;?>' data-order='<?php echo $story->order ?>' data-estimate='<?php echo $story->estimate?>' data-cases='<?php echo zget($storyCases, $story->id, 0)?>'>
<td class='cell-id'>
<?php if($canBatchEdit or $canBatchClose):?>
<?php if($canBatchAction):?>
<?php echo html::checkbox('storyIdList', array($story->id => '')) . html::a(helper::createLink('story', 'view', "storyID=$story->id"), sprintf('%03d', $story->id));?>
<?php else:?>
<?php printf('%03d', $story->id);?>
@@ -220,7 +224,7 @@
</tbody>
</table>
<div class='table-footer'>
<?php if($canBatchEdit or $canBatchClose):?>
<?php if($canBatchAction):?>
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
<?php endif;?>
<div class='table-actions btn-toolbar'>
+11 -8
View File
@@ -209,6 +209,14 @@ js::set('foldAll', $lang->project->treeLevel['root']);
}
$widths = $this->datatable->setFixedFieldWidth($customFields);
$columns = 0;
$canBatchEdit = common::hasPriv('task', 'batchEdit', !empty(reset($tasks)) ? reset($tasks) : null);
$canBatchClose = (common::hasPriv('task', 'batchClose', !empty(reset($tasks)) ? reset($tasks) : null) and strtolower($browseType) != 'closed');
$canBatchCancel = common::hasPriv('task', 'batchCancel', !empty(reset($tasks)) ? reset($tasks) : null);
$canBatchChangeModule = common::hasPriv('task', 'batchChangeModule', !empty(reset($tasks)) ? reset($tasks) : null);
$canBatchAssignTo = common::hasPriv('task', 'batchAssignTo', !empty(reset($tasks)) ? reset($tasks) : null);
$canBatchAction = ($canBatchEdit or $canBatchClose or $canBatchCancel or $canBatchChangeModule or $canBatchAssignTo);
?>
<?php if(!$useDatatable) echo '<div class="table-responsive">';?>
<table class='table has-sort-head<?php if($useDatatable) echo ' datatable';?>' id='taskList' data-fixed-left-width='<?php echo $widths['leftWidth']?>' data-fixed-right-width='<?php echo $widths['rightWidth']?>'>
@@ -219,7 +227,7 @@ js::set('foldAll', $lang->project->treeLevel['root']);
{
if($field->show)
{
$this->datatable->printHead($field, $orderBy, $vars);
$this->datatable->printHead($field, $orderBy, $vars, $canBatchAction);
$columns++;
}
}
@@ -248,15 +256,10 @@ js::set('foldAll', $lang->project->treeLevel['root']);
<?php if(!$useDatatable) echo '</div>';?>
<div class="table-footer">
<?php if($canBatchAction):?>
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
<?php endif;?>
<div class="table-actions btn-toolbar">
<?php
$canBatchEdit = common::hasPriv('task', 'batchEdit', !empty($task) ? $task : null);
$canBatchClose = (common::hasPriv('task', 'batchClose', !empty($task) ? $task : null) && strtolower($browseType) != 'closedBy');
$canBatchCancel = common::hasPriv('task', 'batchCancel', !empty($task) ? $task : null);
$canBatchChangeModule = common::hasPriv('task', 'batchChangeModule', !empty($task) ? $task : null);
$canBatchAssignTo = common::hasPriv('task', 'batchAssignTo', !empty($task) ? $task : null);
?>
<div class='btn-group dropup'>
<?php
$actionLink = $this->createLink('task', 'batchEdit', "projectID=$projectID");
+1
View File
@@ -70,6 +70,7 @@ class release extends control
$this->executeHooks($releaseID);
if(isonlybody()) $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'closeModal' => true, 'callback' => "parent.loadProductBuilds($productID)"));
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('view', "releaseID=$releaseID")));
}
+7 -4
View File
@@ -70,12 +70,15 @@
<?php endif;?>
<form class='main-table table-story' method='post' id='linkedStoriesForm' data-ride="table">
<table class='table has-sort-head' id='storyList'>
<?php $canBatchUnlink = common::hasPriv('release', 'batchUnlinkStory');?>
<?php
$canBatchUnlink = common::hasPriv('release', 'batchUnlinkStory');
$canBatchClose = common::hasPriv('story', 'batchClose');
?>
<?php $vars = "releaseID={$release->id}&type=story&link=$link&param=$param&orderBy=%s";?>
<thead>
<tr class='text-center'>
<th class='c-id text-left'>
<?php if($canBatchUnlink):?>
<?php if($canBatchUnlink or $canBatchClose):?>
<div class="checkbox-primary check-all" title="<?php echo $lang->selectAll?>">
<label></label>
</div>
@@ -96,7 +99,7 @@
<?php $storyLink = $this->createLink('story', 'view', "storyID=$story->id", '', true);?>
<tr>
<td class='c-id text-left'>
<?php if($canBatchUnlink):?>
<?php if($canBatchUnlink or $canBatchClose):?>
<div class="checkbox-primary">
<input type='checkbox' name='storyIdList[]' value='<?php echo $story->id;?>'/>
<label></label>
@@ -131,7 +134,7 @@
</tbody>
</table>
<div class='table-footer'>
<?php if($countStories and $canBatchUnlink):?>
<?php if($countStories and ($canBatchUnlink or $canBatchClose)):?>
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
<div class="table-actions btn-toolbar">
<?php
+21 -3
View File
@@ -331,6 +331,7 @@ class storyModel extends model
$story->estimate = $stories->estimate[$i];
$story->status = ($stories->needReview[$i] == 0 and !$forceReview) ? 'active' : 'draft';
$story->keywords = $stories->keywords[$i];
$story->sourceNote = $stories->sourceNote[$i];
$story->product = $productID;
$story->openedBy = $this->app->user->account;
$story->openedDate = $now;
@@ -829,7 +830,7 @@ class storyModel extends model
if($data->pris[$storyID] == 'ditto') $data->pris[$storyID] = isset($prev['pri']) ? $prev['pri'] : 0;
if(isset($data->branches) and $data->branches[$storyID] == 'ditto') $data->branches[$storyID] = isset($prev['branch']) ? $prev['branch'] : 0;
if($data->modules[$storyID] == 'ditto') $data->modules[$storyID] = isset($prev['module']) ? $prev['module'] : 0;
if($data->plans[$storyID] == 'ditto') $data->plans[$storyID] = isset($prev['plan']) ? $prev['plan'] : 0;
if($data->plans[$storyID] == 'ditto') $data->plans[$storyID] = isset($prev['plan']) ? $prev['plan'] : '';
if($data->sources[$storyID] == 'ditto') $data->sources[$storyID] = isset($prev['source']) ? $prev['source'] : '';
if(isset($data->stages[$storyID]) and ($data->stages[$storyID] == 'ditto')) $data->stages[$storyID] = isset($prev['stage']) ? $prev['stage'] : '';
if(isset($data->closedBys[$storyID]) and ($data->closedBys[$storyID] == 'ditto')) $data->closedBys[$storyID] = isset($prev['closedBy']) ? $prev['closedBy'] : '';
@@ -874,7 +875,6 @@ class storyModel extends model
if($story->stage != $oldStory->stage) $story->stagedBy = (strpos('tested|verified|released|closed', $story->stage) !== false) ? $this->app->user->account : '';
if($story->title != $oldStory->title and $story->status != draft) $story->status = 'changed';
if($story->plan !== false and $story->plan == '') $story->plan = 0;
if($story->closedBy != false and $oldStory->closedDate == '') $story->closedDate = $now;
if($story->closedReason != false and $oldStory->closedDate == '') $story->closedDate = $now;
if($story->closedBy != false or $story->closedReason != false) $story->status = 'closed';
@@ -2817,6 +2817,17 @@ class storyModel extends model
*/
public function printCell($col, $story, $users, $branches, $storyStages, $modulePairs = array(), $storyTasks = array(), $storyBugs = array(), $storyCases = array(), $mode = 'datatable', $storyType = 'story')
{
$canBatchEdit = common::hasPriv('story', 'batchEdit');
$canBatchClose = common::hasPriv('story', 'batchClose');
$canBatchReview = common::hasPriv('story', 'batchReview');
$canBatchChangeStage = common::hasPriv('story', 'batchChangeStage');
$canBatchChangeBranch = common::hasPriv('story', 'batchChangeBranch');
$canBatchChangeModule = common::hasPriv('story', 'batchChangeModule');
$canBatchChangePlan = common::hasPriv('story', 'batchChangePlan');
$canBatchAssignTo = common::hasPriv('story', 'batchAssignTo');
$canBatchAction = ($canBatchEdit or $canBatchClose or $canBatchReview or $canBatchChangeStage or $canBatchChangeBranch or $canBatchChangeModule or $canBatchChangePlan or $canBatchAssignTo);
$canView = common::hasPriv('story', 'view');
$storyLink = helper::createLink('story', 'view', "storyID=$story->id");
$account = $this->app->user->account;
@@ -2877,7 +2888,14 @@ class storyModel extends model
switch($id)
{
case 'id':
echo html::checkbox('storyIdList', array($story->id => '')) . html::a(helper::createLink('story', 'view', "storyID=$story->id"), sprintf('%03d', $story->id));
if($canBatchAction)
{
echo html::checkbox('storyIdList', array($story->id => '')) . html::a(helper::createLink('story', 'view', "storyID=$story->id"), sprintf('%03d', $story->id));
}
else
{
printf('%03d', $story->id);
}
break;
case 'pri':
echo "<span class='label-pri label-pri-" . $story->pri . "' title='" . zget($this->lang->story->priList, $story->pri, $story->pri) . "'>";
+2
View File
@@ -51,6 +51,7 @@
<th class='col-name required has-btn'><?php echo $lang->story->title;?></th>
<th class='w-150px<?php echo zget($visibleFields, 'spec', ' hidden') . zget($requiredFields, 'spec', '', ' required');?>'><?php echo $lang->story->spec;?></th>
<th class='w-100px<?php echo zget($visibleFields, 'source', ' hidden') . zget($requiredFields, 'source', '', ' required');?>'><?php echo $lang->story->source;?></th>
<th class='w-100px<?php echo zget($visibleFields, 'source', ' hidden') . zget($requiredFields, 'sourceNote', '', ' required');?>'><?php echo $lang->story->sourceNote;?></th>
<th class='w-150px<?php echo zget($visibleFields, 'verify', ' hidden') . zget($requiredFields, 'verify', '', ' required');?>'><?php echo $lang->story->verify;?></th>
<th class='col-pri<?php echo zget($visibleFields, 'pri', ' hidden') . zget($requiredFields, 'pri', '', ' required');?>'><?php echo $lang->story->pri;?></th>
<th class='col-estimate<?php echo zget($visibleFields, 'estimate', ' hidden') . zget($requiredFields, 'estimate', '', ' required');?>'><?php echo $lang->story->estimate;?></th>
@@ -87,6 +88,7 @@
</td>
<td class='<?php echo zget($visibleFields, 'spec', 'hidden')?>'><textarea name="spec[$id]" id="spec$id" rows="1" class="form-control autosize"></textarea></td>
<td class='text-left<?php echo zget($visibleFields, 'source', ' hidden')?>'><?php echo html::select('source[$id]', $sourceList, '', "class='form-control'");?></td>
<td class='<?php echo zget($visibleFields, 'source', 'hidden')?>'><?php echo html::input('sourceNote[$id]', '', "class='form-control'");?></td>
<td class='<?php echo zget($visibleFields, 'verify', 'hidden')?>'><textarea name="verify[$id]" id="verify$id" rows="1" class="form-control autosize"></textarea></td>
<td class='text-left<?php echo zget($visibleFields, 'pri', ' hidden')?>' style='overflow:visible'><?php echo html::select('pri[$id]', $priList, $pri, "class='form-control chosen'");?></td>
<td class='<?php echo zget($visibleFields, 'estimate', 'hidden')?>'><?php echo html::input('estimate[$id]', $estimate, "class='form-control'");?></td>
+1 -1
View File
@@ -622,7 +622,7 @@ class task extends control
}
else
{
$story = $this->story->getById($task->story);
$story = $this->story->getById($task->story, $task->storyVersion);
$task->storySpec = empty($story) ? '' : $this->loadModel('file')->setImgSize($story->spec);
$task->storyVerify = empty($story) ? '' : $this->loadModel('file')->setImgSize($story->verify);
$task->storyFiles = $this->loadModel('file')->getByObject('story', $task->story);
+8 -2
View File
@@ -1,9 +1,15 @@
/* If left = 0, warning. */
function checkLeft()
{
var value = $("#left").val();
if(isNaN(parseFloat(value)) || value == 0)
var left = $("#left").val();
var consumed = $("#consumed").val();
if(isNaN(parseFloat(left)) || left == 0)
{
if(isNaN(parseFloat(consumed)) || consumed == 0)
{
alert(noticeTaskStart);
return false;
}
var result = confirm(confirmFinish);
if(!result) setTimeout(function() {$.enableForm()}, 500);
return result;
+2 -1
View File
@@ -189,6 +189,7 @@ $lang->task->confirmChangeProject = "Wenn Sie {$lang->projectCommon} ändern, d
$lang->task->confirmFinish = '"Reststunden " sind 0. Möchten Sue den Status auf Erledigt setzen?';
$lang->task->confirmRecord = '"Reststunden " sind 0. Möchten Sie den Task auf Erledigt setzen?';
$lang->task->confirmTransfer = '"Reststunden " sind 0. Möchten Sie den Task transferieren?';
$lang->task->noticeTaskStart = '"Cost Hour" and "Left Hour" cannot be 0 at the same time.';
$lang->task->noticeLinkStory = "Es wurde keine Story verknüpft. Sie können %s für dieses Projekt, anschließend %s.";
$lang->task->noticeSaveRecord = 'Ihre Stunden wurden nicht gespeichrt. Bitte erst speichern.';
$lang->task->commentActions = '%s. %s, kommentiert von <strong>%s</strong>.';
@@ -210,7 +211,7 @@ $lang->task->error->work = '"Bemerkung" muss kleiner als %d Zeichen
$lang->task->error->skipClose = 'Aufgabe: %s ist nicht “Erledigt” oder “Abgebrochen”. Möchten Sie die Aufgabe jetzt schließen?';
$lang->task->error->consumed = 'Aufgabe: %s Hour must be more than 0. Ignore changes to this Task.';
$lang->task->error->assignedTo = 'Mehere Tasks können nicht zugewisen werden, da die Benutzer nicht teil des Teams sind.';
$lang->task->error->consumedEmpty = '"Current Cost" should not be empty.';
$lang->task->error->consumedEmpty = '"Current Cost" should not be 0.';
$lang->task->error->deadlineSmall = '"Deadline" must be greater than "StartDate".';
$lang->task->error->alreadyStarted = 'You cannot start this task, because it is started.';
+2 -1
View File
@@ -189,6 +189,7 @@ $lang->task->confirmChangeProject = "If you change {$lang->projectCommon}, Modu
$lang->task->confirmFinish = '"Left Hour" is 0. Do you want to change the status to "Finished"?';
$lang->task->confirmRecord = '"Left Hour" is 0. Do you want to set the task as "Finished"?';
$lang->task->confirmTransfer = '"Left Hour" is 0,Do you want to transfer task?';
$lang->task->noticeTaskStart = '"Cost Hour" and "Left Hour" cannot be 0 at the same time.';
$lang->task->noticeLinkStory = "No story has been linked. You can %s for this project, then %s.";
$lang->task->noticeSaveRecord = 'Your Hour is not saved. Please save it first.';
$lang->task->commentActions = '%s. %s, commented by <strong>%s</strong>.';
@@ -210,7 +211,7 @@ $lang->task->error->work = '"Comment" must be < %d characters.';
$lang->task->error->skipClose = 'Task: %s is not "Finished” or “Cancelled”. Do you want to close it?';
$lang->task->error->consumed = 'Task: %s hour must be < 0. Ignore changes to this task.';
$lang->task->error->assignedTo = 'Multi-user task in the current status cannot be assigned to a member who is not in the task team.';
$lang->task->error->consumedEmpty = '"Current Cost" should not be empty.';
$lang->task->error->consumedEmpty = '"Current Cost" should not be 0.';
$lang->task->error->deadlineSmall = '"Deadline" must be greater than "StartDate".';
$lang->task->error->alreadyStarted = 'You cannot start this task, because it is started.';
+2 -1
View File
@@ -189,6 +189,7 @@ $lang->task->confirmChangeProject = "Si vous changez {$lang->projectCommon}, Mo
$lang->task->confirmFinish = '"Heures Restantes" à 0. Voulez-vous passer le statut à "Terminée" ?';
$lang->task->confirmRecord = '"Heures Restantes" à 0. Voulez-vous passer le statut de la tâche à "Finie" ?';
$lang->task->confirmTransfer = '"Heures Restantes" à 0. Voulez-vous transférer la tâche ?';
$lang->task->noticeTaskStart = '"Cost Hour" and "Left Hour" cannot be 0 at the same time.';
$lang->task->noticeLinkStory = "Aucune Story n'est associée. Vous pouvez %s pour ce projet, alors %s.";
$lang->task->noticeSaveRecord = "Votre temps n'a pas été sauvé. Enregistrez-le d'abord.";
$lang->task->commentActions = '%s. %s, commenté par <strong>%s</strong>.';
@@ -210,7 +211,7 @@ $lang->task->error->work = '"Commentaire" doit être < %d caractèr
$lang->task->error->skipClose = 'Tâche: %s non “Finie” ou “Annulée”. Voulez-vous la fermer malgré tout ?';
$lang->task->error->consumed = 'Tâche: %s heures doivent être < 0. Ignorer changements de cette tâche.';
$lang->task->error->assignedTo = "Tâche Multi-user dans le statut courant ne peut pas être assignée à un membre qui ne fait pas partie de l'équipe.";
$lang->task->error->consumedEmpty = '"Coût Actuel" ne devrait pas être vide.';
$lang->task->error->consumedEmpty = '"Coût Actuel" ne devrait pas être 0.';
$lang->task->error->deadlineSmall = '"Date Limite" doit être supérieur à la "Date de Départ".';
$lang->task->error->alreadyStarted = 'You cannot start this task, because it is started.';
+2 -1
View File
@@ -189,6 +189,7 @@ $lang->task->confirmChangeProject = "Nếu bạn thay đổi {$lang->projectCom
$lang->task->confirmFinish = '"Còn lại" bằng 0. Bạn có muốn thay đổi tình trạng thành "Kết thúc"?';
$lang->task->confirmRecord = '"Còn lại" bằng 0. Bạn có muốn thiết lập nhiệm vụ thành "Kết thúc"?';
$lang->task->confirmTransfer = '"Còn lại" bằng 0,Bạn có muốn chuyển thành nhiệm vụ?';
$lang->task->noticeTaskStart = '"Cost Hour" and "Left Hour" cannot be 0 at the same time.';
$lang->task->noticeLinkStory = "Không có câu chuyện liên kết. Bạn có thể %s cho dự án này, sau đó %s.";
$lang->task->noticeSaveRecord = 'Số giờ làm của bạn chưa được lưu. Vui lòng lưu nó trước.';
$lang->task->commentActions = '%s. %s, nhận xét bởi <strong>%s</strong>.';
@@ -210,7 +211,7 @@ $lang->task->error->work = '"Nhận xét" phải là < %d ký tự.
$lang->task->error->skipClose = 'Nhiệm vụ: %s không là "Kết thúc” hoặc “Đã hủy”. Bạn có muốn đóng nó?';
$lang->task->error->consumed = 'Nhiệm vụ: %s giờ phải là < 0. Bỏ qua thay đổi cho nhiệm vụ này.';
$lang->task->error->assignedTo = 'Nhiệm vụ nhiều người dùng trong tình trạng hiện tại không thể giao cho một thành viên người không trong Nhóm nhiệm vụ.';
$lang->task->error->consumedEmpty = '"Giờ làm" không nên trống.';
$lang->task->error->consumedEmpty = '"Giờ làm" không nên 0.';
$lang->task->error->deadlineSmall = '"Hạn chót" phải lớn hơn "Ngày bắt đầu".';
$lang->task->error->alreadyStarted = 'You cannot start this task, because it is started.';
+2 -1
View File
@@ -189,6 +189,7 @@ $lang->task->confirmChangeProject = "修改{$lang->projectCommon}会导致相
$lang->task->confirmFinish = '"预计剩余"为0,确认将任务状态改为"已完成"吗?';
$lang->task->confirmRecord = '"剩余"为0,任务将标记为"已完成",您确定吗?';
$lang->task->confirmTransfer = '"当前剩余"为0,任务将被转交,您确定吗?';
$lang->task->noticeTaskStart = '"总计消耗"和"预计剩余"不能同时为0';
$lang->task->noticeLinkStory = "没有可关联的相关{$lang->storyCommon},您可以为当前项目%s,然后%s";
$lang->task->noticeSaveRecord = '您有尚未保存的工时记录,请先将其保存。';
$lang->task->commentActions = '%s. %s, 由 <strong>%s</strong> 添加备注。';
@@ -210,7 +211,7 @@ $lang->task->error->work = '"备注"必须小于%d个字符';
$lang->task->error->skipClose = '任务:%s 不是“已完成”或“已取消”状态,确定要关闭吗?';
$lang->task->error->consumed = '任务:%s工时不能小于0,忽略该任务工时的改动';
$lang->task->error->assignedTo = '当前状态的多人任务不能指派给任务团队外的成员。';
$lang->task->error->consumedEmpty = '"本次消耗"不能为空';
$lang->task->error->consumedEmpty = '"本次消耗"不能为0';
$lang->task->error->deadlineSmall = '"截止日期"必须大于"预计开始"';
$lang->task->error->alreadyStarted = '此任务已被启动,不能重复启动!';
+2 -1
View File
@@ -189,6 +189,7 @@ $lang->task->confirmChangeProject = "修改{$lang->projectCommon}會導致相
$lang->task->confirmFinish = '"預計剩餘"為0,確認將任務狀態改為"已完成"嗎?';
$lang->task->confirmRecord = '"剩餘"為0,任務將標記為"已完成",您確定嗎?';
$lang->task->confirmTransfer = '"當前剩餘"為0,任務將被轉交,您確定嗎?';
$lang->task->noticeTaskStart = '"總計消耗"和"預計剩餘"不能同時為0';
$lang->task->noticeLinkStory = "沒有可關聯的相關{$lang->storyCommon},您可以為當前項目%s,然後%s";
$lang->task->noticeSaveRecord = '您有尚未保存的工時記錄,請先將其保存。';
$lang->task->commentActions = '%s. %s, 由 <strong>%s</strong> 添加備註。';
@@ -210,7 +211,7 @@ $lang->task->error->work = '"備註"必須小於%d個字元';
$lang->task->error->skipClose = '任務:%s 不是“已完成”或“已取消”狀態,確定要關閉嗎?';
$lang->task->error->consumed = '任務:%s工時不能小於0,忽略該任務工時的改動';
$lang->task->error->assignedTo = '當前狀態的多人任務不能指派給任務團隊外的成員。';
$lang->task->error->consumedEmpty = '"本次消耗"不能為空';
$lang->task->error->consumedEmpty = '"本次消耗"不能為0';
$lang->task->error->deadlineSmall = '"截止日期"必須大於"預計開始"';
$lang->task->error->alreadyStarted = '此任務已被啟動,不能重複啟動!';
+7 -2
View File
@@ -1232,6 +1232,11 @@ class taskModel extends model
if($this->post->left == 0)
{
if($task->consumed == 0)
{
dao::$errors[] = sprintf($this->lang->error->notempty, $this->lang->task->consumed);
return false;
}
$task->status = 'done';
$task->finishedBy = $this->app->user->account;
$task->finishedDate = helper::now();
@@ -2757,12 +2762,12 @@ class taskModel extends model
public function printCell($col, $task, $users, $browseType, $branchGroups, $modulePairs = array(), $mode = 'datatable', $child = false)
{
$canBatchEdit = common::hasPriv('task', 'batchEdit', !empty($task) ? $task : null);
$canBatchClose = (common::hasPriv('task', 'batchClose', !empty($task) ? $task : null) && strtolower($browseType) != 'closedBy');
$canBatchClose = (common::hasPriv('task', 'batchClose', !empty($task) ? $task : null) and strtolower($browseType) != 'closed');
$canBatchCancel = common::hasPriv('task', 'batchCancel', !empty($task) ? $task : null);
$canBatchChangeModule = common::hasPriv('task', 'batchChangeModule', !empty($task) ? $task : null);
$canBatchAssignTo = common::hasPriv('task', 'batchAssignTo', !empty($task) ? $task : null);
$canBatchAction = $canBatchEdit or $canBatchClose or $canBatchCancel or $canBatchChangeModule or $canBatchAssignTo;
$canBatchAction = ($canBatchEdit or $canBatchClose or $canBatchCancel or $canBatchChangeModule or $canBatchAssignTo);
$storyChanged = (!empty($task->storyStatus) and $task->storyStatus == 'active' and $task->latestStoryVersion > $task->storyVersion and !in_array($task->status, array('cancel', 'closed')));
$canView = common::hasPriv('task', 'view');
+1 -1
View File
@@ -88,7 +88,7 @@
?>
<tr>
<?php $disableAssignedTo = (isset($teams[$taskID]) and $tasks[$taskID]->assignedTo != $this->app->user->account) ? "disabled='disabled'" : '';?>
<?php $disableHour = isset($teams[$taskID]) ? "disabled='disabled'" : '';?>
<?php $disableHour = (isset($teams[$taskID]) or $tasks[$taskID]->parent < 0) ? "disabled='disabled'" : '';?>
<?php
$taskMembers = array();
if(isset($teams[$taskID]))
+2 -2
View File
@@ -182,7 +182,7 @@
<tr>
<th><?php echo $lang->task->estimate;?></th>
<td>
<?php $disabled = !empty($task->team) ? "disabled='disabled'" : '';?>
<?php $disabled = (!empty($task->team) or $task->parent < 0) ? "disabled='disabled'" : '';?>
<?php echo html::input('estimate', $task->estimate, "class='form-control' {$disabled}");?>
</td>
</tr>
@@ -193,7 +193,7 @@
<tr>
<th><?php echo $lang->task->left;?></th>
<td>
<?php $disabled = !empty($task->team) ? "disabled='disabled'" : '';?>
<?php $disabled = (!empty($task->team) or $task->parent < 0) ? "disabled='disabled'" : '';?>
<?php echo html::input('left', $task->left, "class='form-control' {$disabled}");?>
</td>
</tr>
+1
View File
@@ -14,6 +14,7 @@
<?php include '../../common/view/kindeditor.html.php';?>
<?php include '../../common/view/datepicker.html.php';?>
<?php js::set('confirmFinish', $lang->task->confirmFinish);?>
<?php js::set('noticeTaskStart', $lang->task->noticeTaskStart);?>
<div id='mainContent' class='main-content'>
<?php
/* IF it is multi-task, the suspened can only be restarted by the current user who it is assigned to. */
+1 -1
View File
@@ -83,7 +83,7 @@
<div class='detail-title'><?php echo $lang->task->case;?></div>
<div class='detail-content article-content'>
<ul class='list-unstyled'>
<?php foreach($task->cases as $caseID => $case) echo '<li>' . html::a($this->createLink('testcase', 'view', "caseID=$caseID", '', true), "#$caseID " . $case, '', "data-toggle='modal' data-type='iframe' data-width='90%'") . '</li>';?>
<?php foreach($task->cases as $caseID => $case) echo '<li>' . html::a($this->createLink('testcase', 'view', "caseID=$caseID", '', true), "#$caseID " . $case, '', isonlybody() ? '' : "data-toggle='modal' data-type='iframe' data-width='90%'") . '</li>';?>
</ul>
</div>
</div>
+18 -2
View File
@@ -266,7 +266,7 @@ class testcaseModel extends model
$type = $cases->type[$i] == 'ditto' ? $type : $cases->type[$i];
$pri = $cases->pri[$i] == 'ditto' ? $pri : $cases->pri[$i];
$cases->module[$i] = (int)$module;
$cases->story[$i] = (int)$story;
$cases->story[$i] = !empty($storyID) ? $storyID : (int)$story;
$cases->type[$i] = $type;
$cases->pri[$i] = $pri;
}
@@ -1392,6 +1392,15 @@ class testcaseModel extends model
*/
public function printCell($col, $case, $users, $branches, $modulePairs = array(), $browseType = '', $mode = 'datatable')
{
$canBatchRun = common::hasPriv('testtask', 'batchRun');
$canBatchEdit = common::hasPriv('testcase', 'batchEdit');
$canBatchDelete = common::hasPriv('testcase', 'batchDelete');
$canBatchCaseTypeChange = common::hasPriv('testcase', 'batchCaseTypeChange');
$canBatchConfirmStoryChange = common::hasPriv('testcase', 'batchConfirmStoryChange');
$canBatchChangeModule = common::hasPriv('testcase', 'batchChangeModule');
$canBatchAction = ($canBatchRun or $canBatchEdit or $canBatchDelete or $canBatchCaseTypeChange or $canBatchConfirmStoryChange or $canBatchChangeModule);
$canView = common::hasPriv('testcase', 'view');
$caseLink = helper::createLink('testcase', 'view', "caseID=$case->id&version=$case->version");
$account = $this->app->user->account;
@@ -1420,7 +1429,14 @@ class testcaseModel extends model
switch($id)
{
case 'id':
echo html::checkbox('caseIDList', array($case->id => '')) . html::a(helper::createLink('testcase', 'view', "caseID=$case->id"), sprintf('%03d', $case->id));
if($canBatchAction)
{
echo html::checkbox('caseIDList', array($case->id => '')) . html::a(helper::createLink('testcase', 'view', "caseID=$case->id"), sprintf('%03d', $case->id));
}
else
{
printf('%03d', $case->id);
}
break;
case 'pri':
echo "<span class='label-pri label-pri-" . $case->pri . "' title='" . zget($this->lang->testcase->priList, $case->pri, $case->pri) . "'>";
+18 -7
View File
@@ -72,6 +72,15 @@ js::set('suiteID', $suiteID);
$setting = $this->datatable->getSetting('testcase');
$widths = $this->datatable->setFixedFieldWidth($setting);
$columns = 0;
$canBatchRun = common::hasPriv('testtask', 'batchRun');
$canBatchEdit = common::hasPriv('testcase', 'batchEdit');
$canBatchDelete = common::hasPriv('testcase', 'batchDelete');
$canBatchCaseTypeChange = common::hasPriv('testcase', 'batchCaseTypeChange');
$canBatchConfirmStoryChange = common::hasPriv('testcase', 'batchConfirmStoryChange');
$canBatchChangeModule = common::hasPriv('testcase', 'batchChangeModule');
$canBatchAction = ($canBatchRun or $canBatchEdit or $canBatchDelete or $canBatchCaseTypeChange or $canBatchConfirmStoryChange or $canBatchChangeModule);
?>
<?php if(!$useDatatable) echo '<div class="table-responsive">';?>
<table class='table has-sort-head<?php if($useDatatable) echo ' datatable';?>' id='caseList' data-fixed-left-width='<?php echo $widths['leftWidth']?>' data-fixed-right-width='<?php echo $widths['rightWidth']?>' data-checkbox-name='caseIDList[]'>
@@ -82,7 +91,7 @@ js::set('suiteID', $suiteID);
{
if($value->show)
{
$this->datatable->printHead($value, $orderBy, $vars);
$this->datatable->printHead($value, $orderBy, $vars, $canBatchAction);
$columns ++;
}
}
@@ -99,16 +108,18 @@ js::set('suiteID', $suiteID);
</table>
<?php if(!$useDatatable) echo '</div>';?>
<div class='table-footer'>
<?php if($canBatchAction):?>
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
<?php endif;?>
<div class='table-actions btn-toolbar'>
<div class='btn-group dropup'>
<?php
$actionLink = $this->createLink('testtask', 'batchRun', "productID=$productID&orderBy=$orderBy");
$misc = common::hasPriv('testtask', 'batchRun') ? "onclick=\"setFormAction('$actionLink')\"" : "disabled='disabled'";
$misc = $canBatchRun ? "onclick=\"setFormAction('$actionLink')\"" : "disabled='disabled'";
echo html::commonButton($lang->testtask->runCase, $misc);
$actionLink = $this->createLink('testcase', 'batchEdit', "productID=$productID&branch=$branch");
$misc = common::hasPriv('testcase', 'batchEdit') ? "onclick=\"setFormAction('$actionLink')\"" : "disabled='disabled'";
$misc = $canBatchEdit ? "onclick=\"setFormAction('$actionLink')\"" : "disabled='disabled'";
echo html::commonButton($lang->edit, $misc);
?>
<button type='button' class='btn dropdown-toggle' data-toggle='dropdown'><span class='caret'></span></button>
@@ -128,14 +139,14 @@ js::set('suiteID', $suiteID);
echo '</ul></li>';
}
if(common::hasPriv('testcase', 'batchDelete'))
if($canBatchDelete)
{
$actionLink = $this->createLink('testcase', 'batchDelete', "productID=$productID");
$misc = "onclick=\"confirmBatchDelete('$actionLink')\"";
echo "<li>" . html::a('#', $lang->delete, '', $misc) . "</li>";
}
if(common::hasPriv('testcase', 'batchCaseTypeChange'))
if($canBatchCaseTypeChange)
{
echo "<li class='dropdown-submenu'>";
echo html::a('javascript:;', $lang->testcase->type, '', "id='typeChangeItem'");
@@ -149,7 +160,7 @@ js::set('suiteID', $suiteID);
echo '</ul></li>';
}
if(common::hasPriv('testcase', 'batchConfirmStoryChange'))
if($canBatchConfirmStoryChange)
{
$actionLink = $this->createLink('testcase', 'batchConfirmStoryChange', "productID=$productID");
$misc = "onclick=\"setFormAction('$actionLink')\"";
@@ -186,7 +197,7 @@ js::set('suiteID', $suiteID);
</div>
</div>
<?php endif;?>
<?php if(common::hasPriv('testcase', 'batchChangeModule')):?>
<?php if($canBatchChangeModule):?>
<div class="btn-group dropup">
<button data-toggle="dropdown" type="button" class="btn"><?php echo $lang->story->moduleAB;?> <span class="caret"></span></button>
<?php $withSearch = count($modules) > 10;?>
+2
View File
@@ -16,8 +16,10 @@
<?php js::set('sysurl', common::getSysUrl());?>
<div id='mainMenu' class='clearfix'>
<div class='btn-toolbar pull-left'>
<?php if(!isonlybody()):?>
<?php echo html::a($browseLink, '<i class="icon icon-back icon-sm"></i> ' . $lang->goback, '', "class='btn btn-secondary'");?>
<div class="divider"></div>
<?php endif;?>
<div class="page-title">
<span class='label label-id'><?php echo $case->id;?></span>
<span class='text' title='<?php echo $case->title;?>' style='color: <?php echo $case->color; ?>'><?php echo $case->title;?></span>
+8 -7
View File
@@ -441,10 +441,11 @@ class testreport extends control
if($this->app->getViewType() == 'mhtml') $recPerPage = 10;
$pager = pager::init($recTotal, $recPerPage, $pageID);
$tasks = $report->tasks ? $this->testtask->getByList($report->tasks) : array();;
$builds = $report->builds ? $this->build->getByList($report->builds) : array();
$cases = $this->testreport->getTaskCases($tasks, $report->begin, $report->end, $report->cases, $pager);
$bugInfo = $this->testreport->getBugInfo($tasks, $report->product, $report->begin, $report->end, $builds);
$tasks = $report->tasks ? $this->testtask->getByList($report->tasks) : array();;
$builds = $report->builds ? $this->build->getByList($report->builds) : array();
$cases = $this->testreport->getTaskCases($tasks, $report->begin, $report->end, $report->cases, $pager);
$totalCases = $this->testreport->getTaskCases($tasks, $report->begin, $report->end, $report->cases);
$bugInfo = $this->testreport->getBugInfo($tasks, $report->product, $report->begin, $report->end, $builds);
if($report->objectType == 'testtask')
{
@@ -471,10 +472,10 @@ class testreport extends control
$this->view->actions = $this->loadModel('action')->getList('testreport', $reportID);
$this->view->storySummary = $this->product->summary($stories);
$this->view->caseSummary = $this->testreport->getResultSummary($tasks, $cases, $report->begin, $report->end);
$this->view->caseSummary = $this->testreport->getResultSummary($tasks, $totalCases, $report->begin, $report->end);
$perCaseResult = $this->testreport->getPerCaseResult4Report($tasks, $cases, $report->begin, $report->end);
$perCaseRunner = $this->testreport->getPerCaseRunner4Report($tasks, $cases, $report->begin, $report->end);
$perCaseResult = $this->testreport->getPerCaseResult4Report($tasks, $totalCases, $report->begin, $report->end);
$perCaseRunner = $this->testreport->getPerCaseRunner4Report($tasks, $totalCases, $report->begin, $report->end);
$this->view->datas['testTaskPerRunResult'] = $this->loadModel('report')->computePercent($perCaseResult);
$this->view->datas['testTaskPerRunner'] = $this->report->computePercent($perCaseRunner);
+15 -1
View File
@@ -1437,6 +1437,13 @@ class testtaskModel extends model
*/
public function printCell($col, $run, $users, $task, $branches, $mode = 'datatable')
{
$canBatchEdit = common::hasPriv('testcase', 'batchEdit');
$canBatchUnlink = common::hasPriv('testtask', 'batchUnlinkCases');
$canBatchAssign = common::hasPriv('testtask', 'batchAssign');
$canBatchRun = common::hasPriv('testtask', 'batchRun');
$canBatchAction = ($canBatchEdit or $canBatchUnlink or $canBatchAssign or $canBatchRun);
$canView = common::hasPriv('testcase', 'view');
$caseLink = helper::createLink('testcase', 'view', "caseID=$run->case&version=$run->version&from=testtask&taskID=$run->task");
$account = $this->app->user->account;
@@ -1457,7 +1464,14 @@ class testtaskModel extends model
switch ($id)
{
case 'id':
echo html::checkbox('caseIDList', array($run->case => sprintf('%03d', $run->case)));
if($canBatchAction)
{
echo html::checkbox('caseIDList', array($run->case => sprintf('%03d', $run->case)));
}
else
{
printf('%03d', $run->case);
}
break;
case 'pri':
echo "<span class='label-pri label-pri-" . $run->pri . "' title='" . zget($this->lang->testcase->priList, $run->pri, $run->pri) . "'>";
+4 -3
View File
@@ -39,7 +39,8 @@
$canBatchUnlink = common::hasPriv('testtask', 'batchUnlinkCases');
$canBatchAssign = common::hasPriv('testtask', 'batchAssign');
$canBatchRun = common::hasPriv('testtask', 'batchRun');
$hasCheckbox = ($canBatchEdit or $canBatchUnlink or $canBatchAssign or $canBatchRun);
$canBatchAction = ($canBatchEdit or $canBatchUnlink or $canBatchAssign or $canBatchRun);
if($useDatatable) include '../../common/view/datatable.html.php';
if(!$useDatatable) include '../../common/view/tablesorter.html.php';
@@ -60,7 +61,7 @@
{
if($value->show)
{
$this->datatable->printHead($value, $orderBy, $vars);
$this->datatable->printHead($value, $orderBy, $vars, $canBatchAction);
$columns ++;
}
}
@@ -78,7 +79,7 @@
<?php if(!$useDatatable) echo '</div>';?>
<?php if($runs):?>
<div class='table-footer'>
<?php if($hasCheckbox):?>
<?php if($canBatchAction):?>
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
<div class='table-actions btn-toolbar'>
<div class='btn-group dropup'>
+4 -4
View File
File diff suppressed because one or more lines are too long