Merge branch 'master' of https://github.com/easysoft/zentaopms
This commit is contained in:
@@ -11,34 +11,31 @@
|
||||
*/
|
||||
?>
|
||||
<?php include 'header.html.php';?>
|
||||
<div id='mainContent' class='main-row'>
|
||||
<div class='side-col' id='sidebar'></div>
|
||||
<div class='main-col main-content'>
|
||||
<form class="load-indicator main-form form-ajax" method='post'>
|
||||
<div class='main-header'>
|
||||
<div class='heading'>
|
||||
<strong><?php echo $lang->custom->flow?></strong>
|
||||
</div>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<form class="load-indicator main-form form-ajax" method='post'>
|
||||
<div class='main-header'>
|
||||
<div class='heading'>
|
||||
<strong><?php echo $lang->custom->flow?></strong>
|
||||
</div>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th class='w-120px text-top'><?php echo $lang->custom->select;?></th>
|
||||
<?php $checkedKey = isset($config->custom->productProject) ? $config->custom->productProject : '0_0' ?>
|
||||
<td>
|
||||
<?php foreach($lang->custom->productProject->relation as $key => $value):?>
|
||||
<p><label class="radio-inline"><input type="radio" name="productProject" value="<?php echo $key?>"<?php echo $key == $checkedKey ? " checked='checked'" : ''?> id="productProject<?php echo $key;?>"><?php echo $value;?></label></p>
|
||||
<?php endforeach;?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td></td><td><?php echo html::submitButton('', '', 'btn btn-primary btn-wide')?></td></tr>
|
||||
<tr>
|
||||
<td colspan='2' class='pd-0'>
|
||||
<div class='alert alert-info alert-block'><strong><?php echo $lang->custom->productProject->notice?></strong></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th class='w-120px text-top'><?php echo $lang->custom->select;?></th>
|
||||
<?php $checkedKey = isset($config->custom->productProject) ? $config->custom->productProject : '0_0' ?>
|
||||
<td>
|
||||
<?php foreach($lang->custom->productProject->relation as $key => $value):?>
|
||||
<p><label class="radio-inline"><input type="radio" name="productProject" value="<?php echo $key?>"<?php echo $key == $checkedKey ? " checked='checked'" : ''?> id="productProject<?php echo $key;?>"><?php echo $value;?></label></p>
|
||||
<?php endforeach;?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td></td><td><?php echo html::submitButton('', '', 'btn btn-primary btn-wide')?></td></tr>
|
||||
<tr>
|
||||
<td colspan='2' class='pd-0'>
|
||||
<div class='alert alert-info alert-block'><strong><?php echo $lang->custom->productProject->notice?></strong></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
$(function()
|
||||
|
||||
@@ -10,35 +10,32 @@
|
||||
*/
|
||||
?>
|
||||
<?php include 'header.html.php';?>
|
||||
<div id='mainContent' class='main-row'>
|
||||
<div class='side-col' id='sidebar'></div>
|
||||
<div class='main-col main-content'>
|
||||
<form class="load-indicator main-form form-ajax" method='post'>
|
||||
<div class='main-header'>
|
||||
<div class='heading'>
|
||||
<strong><?php echo $lang->custom->score?></strong>
|
||||
</div>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<form class="load-indicator main-form form-ajax" method='post'>
|
||||
<div class='main-header'>
|
||||
<div class='heading'>
|
||||
<strong><?php echo $lang->custom->score?></strong>
|
||||
</div>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th class='w-100px text-top'><?php echo $lang->custom->score;?></th>
|
||||
<td>
|
||||
<?php $checkedKey = isset($config->global->scoreStatus) ? $config->global->scoreStatus : 0;?>
|
||||
<?php foreach($lang->custom->scoreStatus as $key => $value):?>
|
||||
<p><label class="radio-inline"><input type="radio" name="score" value="<?php echo $key?>"<?php echo $key == $checkedKey ? " checked='checked'" : ''?> id="score<?php echo $key;?>"><?php echo $value;?></label></p>
|
||||
<?php endforeach;?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th></th>
|
||||
<td class='form-actions'>
|
||||
<?php echo html::submitButton('', '', 'btn btn-primary btn-wide');?>
|
||||
<?php common::printLink('score', 'reset', '', "<i class='icon-refresh'></i> " . $lang->custom->scoreReset, '', ' id="scoreRefresh" class="btn btn-wide iframe" data-width="480"', true, true);?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th class='w-100px text-top'><?php echo $lang->custom->score;?></th>
|
||||
<td>
|
||||
<?php $checkedKey = isset($config->global->scoreStatus) ? $config->global->scoreStatus : 0;?>
|
||||
<?php foreach($lang->custom->scoreStatus as $key => $value):?>
|
||||
<p><label class="radio-inline"><input type="radio" name="score" value="<?php echo $key?>"<?php echo $key == $checkedKey ? " checked='checked'" : ''?> id="score<?php echo $key;?>"><?php echo $value;?></label></p>
|
||||
<?php endforeach;?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th></th>
|
||||
<td class='form-actions'>
|
||||
<?php echo html::submitButton('', '', 'btn btn-primary btn-wide');?>
|
||||
<?php common::printLink('score', 'reset', '', "<i class='icon-refresh'></i> " . $lang->custom->scoreReset, '', ' id="scoreRefresh" class="btn btn-wide iframe" data-width="480"', true, true);?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
$(function()
|
||||
|
||||
@@ -11,28 +11,25 @@
|
||||
*/
|
||||
?>
|
||||
<?php include 'header.html.php';?>
|
||||
<div id='mainContent' class='main-row'>
|
||||
<div class='side-col' id='sidebar'></div>
|
||||
<div class='main-col main-content'>
|
||||
<form class="load-indicator main-form form-ajax" method='post'>
|
||||
<div class='main-header'>
|
||||
<div class='heading'>
|
||||
<strong><?php echo $lang->custom->working?></strong>
|
||||
</div>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<form class="load-indicator main-form form-ajax" method='post'>
|
||||
<div class='main-header'>
|
||||
<div class='heading'>
|
||||
<strong><?php echo $lang->custom->working?></strong>
|
||||
</div>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th class='text-top'><?php echo $lang->custom->working;?></th>
|
||||
<td>
|
||||
<?php $checkedKey = isset($config->global->flow) ? $config->global->flow : 'full';?>
|
||||
<?php foreach($lang->custom->workingList as $key => $value):?>
|
||||
<p><label class="radio-inline"><input type="radio" name="flow" value="<?php echo $key?>"<?php echo $key == $checkedKey ? " checked='checked'" : ''?> id="flow<?php echo $key;?>"><?php echo $value;?></label></p>
|
||||
<?php endforeach;?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td></td><td><?php echo html::submitButton('', '', 'btn btn-primary btn-wide')?></td></tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th class='text-top'><?php echo $lang->custom->working;?></th>
|
||||
<td>
|
||||
<?php $checkedKey = isset($config->global->flow) ? $config->global->flow : 'full';?>
|
||||
<?php foreach($lang->custom->workingList as $key => $value):?>
|
||||
<p><label class="radio-inline"><input type="radio" name="flow" value="<?php echo $key?>"<?php echo $key == $checkedKey ? " checked='checked'" : ''?> id="flow<?php echo $key;?>"><?php echo $value;?></label></p>
|
||||
<?php endforeach;?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td></td><td><?php echo html::submitButton('', '', 'btn btn-primary btn-wide')?></td></tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -191,7 +191,6 @@ $lang->resource->story->create = 'create';
|
||||
$lang->resource->story->batchCreate = 'batchCreate';
|
||||
$lang->resource->story->edit = 'edit';
|
||||
$lang->resource->story->linkStory = 'linkStory';
|
||||
$lang->resource->story->unlinkStory = 'unlinkStory';
|
||||
$lang->resource->story->batchEdit = 'batchEdit';
|
||||
$lang->resource->story->export = 'export';
|
||||
$lang->resource->story->delete = 'delete';
|
||||
@@ -234,7 +233,6 @@ $lang->story->methodOrder[90] = 'cases';
|
||||
$lang->story->methodOrder[95] = 'zeroCase';
|
||||
$lang->story->methodOrder[100] = 'report';
|
||||
$lang->story->methodOrder[105] = 'linkStory';
|
||||
$lang->story->methodOrder[110] = 'unlinkStory';
|
||||
$lang->story->methodOrder[115] = 'batchChangeBranch';
|
||||
$lang->story->methodOrder[120] = 'batchChangeModule';
|
||||
|
||||
@@ -485,7 +483,6 @@ $lang->resource->bug->batchConfirm = 'batchConfirm';
|
||||
$lang->resource->bug->view = 'view';
|
||||
$lang->resource->bug->edit = 'edit';
|
||||
$lang->resource->bug->linkBugs = 'linkBugs';
|
||||
$lang->resource->bug->unlinkBug = 'unlinkBug';
|
||||
$lang->resource->bug->batchEdit = 'batchEdit';
|
||||
$lang->resource->bug->batchClose = 'batchClose';
|
||||
$lang->resource->bug->assignTo = 'assignTo';
|
||||
@@ -530,7 +527,6 @@ $lang->bug->methodOrder[100] = 'saveTemplate';
|
||||
$lang->bug->methodOrder[105] = 'deleteTemplate';
|
||||
$lang->bug->methodOrder[110] = 'setPublic';
|
||||
$lang->bug->methodOrder[115] = 'linkBugs';
|
||||
$lang->bug->methodOrder[120] = 'unlinkBug';
|
||||
$lang->bug->methodOrder[125] = 'batchChangeModule';
|
||||
$lang->bug->methodOrder[130] = 'batchChangeBranch';
|
||||
|
||||
@@ -545,7 +541,6 @@ $lang->resource->testcase->createBug = 'createBug';
|
||||
$lang->resource->testcase->view = 'view';
|
||||
$lang->resource->testcase->edit = 'edit';
|
||||
$lang->resource->testcase->linkCases = 'linkCases';
|
||||
$lang->resource->testcase->unlinkCase = 'unlinkCase';
|
||||
$lang->resource->testcase->batchEdit = 'batchEdit';
|
||||
$lang->resource->testcase->delete = 'delete';
|
||||
$lang->resource->testcase->batchDelete = 'batchDelete';
|
||||
@@ -581,7 +576,6 @@ $lang->testcase->methodOrder[65] = 'batchDelete';
|
||||
$lang->testcase->methodOrder[70] = 'batchChangeModule';
|
||||
$lang->testcase->methodOrder[75] = 'batchChangeBranch';
|
||||
$lang->testcase->methodOrder[80] = 'linkCases';
|
||||
$lang->testcase->methodOrder[85] = 'unlinkCase';
|
||||
$lang->testcase->methodOrder[90] = 'bugs';
|
||||
$lang->testcase->methodOrder[95] = 'review';
|
||||
$lang->testcase->methodOrder[100] = 'batchReview';
|
||||
@@ -1311,11 +1305,8 @@ $lang->changelog['7.4.beta'][] = 'my-unbind';
|
||||
$lang->changelog['8.0'][] = 'story-batchChangeBranch';
|
||||
|
||||
$lang->changelog['8.0.1'][] = 'bug-linkBugs';
|
||||
$lang->changelog['8.0.1'][] = 'bug-unlinkBug';
|
||||
$lang->changelog['8.0.1'][] = 'story-linkStory';
|
||||
$lang->changelog['8.0.1'][] = 'story-unlinkStory';
|
||||
$lang->changelog['8.0.1'][] = 'testcase-linkCases';
|
||||
$lang->changelog['8.0.1'][] = 'testcase-unlinkCase';
|
||||
|
||||
$lang->changelog['8.1.3'][] = 'story-batchChangeModule';
|
||||
$lang->changelog['8.1.3'][] = 'task-batchChangeModule';
|
||||
|
||||
@@ -73,7 +73,7 @@ $lang->mail->secureList['tls'] = 'tls';
|
||||
|
||||
$lang->mail->more = 'More';
|
||||
$lang->mail->noticeResend = 'Sent it again!';
|
||||
$lang->mail->inputFromEmail = 'Enter Sender Email';
|
||||
$lang->mail->inputFromEmail = 'Sender Email';
|
||||
$lang->mail->nextStep = 'Next';
|
||||
$lang->mail->successSaved = 'Configuration has been saved.';
|
||||
$lang->mail->testSubject = 'Testing Email';
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
</div>
|
||||
<form class='pdt-20' method='post' target='hiddenwin'>
|
||||
<table class='table table-form'>
|
||||
<tr><th style='width:130px'><?php echo $lang->mail->inputFromEmail; ?></th><td class='w-p50'><?php echo html::input('fromAddress', $fromAddress, "class='form-control' autocomplete='off'");?></td><td><?php echo html::submitButton($lang->mail->nextStep);?></td></tr>
|
||||
<tr><th style='width:140px'><?php echo $lang->mail->inputFromEmail; ?></th><td class='w-p50'><?php echo html::input('fromAddress', $fromAddress, "class='form-control' autocomplete='off'");?></td><td><?php echo html::submitButton($lang->mail->nextStep);?></td></tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
.checkbox-primary + .checkbox-primary {margin:0px;}
|
||||
.checkbox-primary {margin:0px; margin-right:10px !important; width:100px;display:inline-block}
|
||||
.checkbox-primary {margin:0px; margin-right:10px !important; width:120px;display:inline-block}
|
||||
.checkbox-primary label{white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
|
||||
div.chosen-container + select + div.chosen-container > .chosen-choices {border-top:0px;}
|
||||
|
||||
.table-bordered thead .checkbox-primary{width:200px;}
|
||||
|
||||
@@ -13,7 +13,7 @@ $(function()
|
||||
if(hash.indexOf('#todo-') === 0)
|
||||
{
|
||||
var todoId = hash.substr(6);
|
||||
var url = createLink('todo', 'view', 'id=' + todoId + '&from=my&onlybody=yes');
|
||||
var url = createLink('todo', 'view', 'id=' + todoId + '&from=my', '', 'yes');
|
||||
var $a = $('<a/>');
|
||||
$a.attr({href: url}).modalTrigger(
|
||||
{
|
||||
|
||||
@@ -270,8 +270,9 @@
|
||||
echo "<li class='dropdown-submenu'>";
|
||||
echo html::a('javascript:;', $lang->story->stageAB, '', "id='stageItem'");
|
||||
echo "<ul class='dropdown-menu'>";
|
||||
$lang->story->stageList[''] = $lang->null;
|
||||
foreach($lang->story->stageList as $key => $stage)
|
||||
$stageList['verified'] = $lang->story->stageList['verified'];
|
||||
$stageList['closed'] = $lang->story->stageList['closed'];
|
||||
foreach($stageList as $key => $stage)
|
||||
{
|
||||
$actionLink = $this->createLink('story', 'batchChangeStage', "stage=$key");
|
||||
echo "<li>" . html::a('#', $stage, '', "onclick=\"setFormAction('$actionLink','hiddenwin')\"") . "</li>";
|
||||
|
||||
@@ -98,7 +98,8 @@
|
||||
|
||||
if(common::hasPriv('productplan', 'delete', $plan))
|
||||
{
|
||||
common::printIcon('productplan', 'delete', "planID=$plan->id", $plan, '<i class="icon-link"></i>', '', 'hiddenwin');
|
||||
$deleteURL = $this->createLink('productplan', 'delete', "planID=$plan->id&confirm=yes");
|
||||
echo html::a("javascript:ajaxDelete(\"$deleteURL\",\"productplanList\",confirmDelete)", '<i class="icon-trash"></i>', '', "class='btn btn-icon' title='{$lang->productplan->delete}'");
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
|
||||
@@ -2030,11 +2030,9 @@ class projectModel extends model
|
||||
|
||||
foreach($tasks as $task)
|
||||
{
|
||||
if($task->status != 'cancel')
|
||||
{
|
||||
$totalEstimate += $task->estimate;
|
||||
$totalConsumed += $task->consumed;
|
||||
}
|
||||
$totalEstimate += $task->estimate;
|
||||
$totalConsumed += $task->consumed;
|
||||
|
||||
if($task->status != 'cancel' and $task->status != 'closed') $totalLeft += $task->left;
|
||||
|
||||
$statusVar = 'status' . ucfirst($task->status);
|
||||
|
||||
@@ -87,7 +87,8 @@
|
||||
common::printIcon('build', 'edit', "buildID=$build->id", $build, 'list');
|
||||
if(common::hasPriv('build', 'delete', $build))
|
||||
{
|
||||
common::printIcon('build', 'delete', "buildID=$build->id", $build, '<i class="icon-trash"></i>', '', 'hiddenwin');
|
||||
$deleteURL = $this->createLink('build', 'delete', "buildID=$build->id&confirm=yes");
|
||||
echo html::a("javascript:ajaxDelete(\"$deleteURL\",\"buildList\",confirmDelete)", '<i class="icon-trash"></i>', '', "class='btn' title='{$lang->build->delete}'");
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
|
||||
@@ -142,11 +142,21 @@
|
||||
$groupSum = 0;
|
||||
foreach($groupTasks as $taskKey => $task)
|
||||
{
|
||||
if(!$task->parent && $task->status != 'cancel')
|
||||
if($groupBy == 'story')
|
||||
{
|
||||
$groupEstimate += $task->estimate;
|
||||
$groupConsumed += $task->consumed;
|
||||
$groupLeft += ($task->status == 'cancel' ? 0 : $task->left);
|
||||
if(!$task->parent)
|
||||
{
|
||||
$groupEstimate += $task->estimate;
|
||||
$groupConsumed += $task->consumed;
|
||||
if($task->status != 'cancel' && $task->status != 'closed') $groupLeft += $task->left;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$groupEstimate += $task->estimate;
|
||||
$groupConsumed += $task->consumed;
|
||||
|
||||
if($groupBy == 'status' || ($task->status != 'cancel' && $task->status != 'closed')) $groupLeft += $task->left;
|
||||
}
|
||||
|
||||
if($task->status == 'wait') $groupWait++;
|
||||
|
||||
@@ -77,7 +77,8 @@
|
||||
common::printIcon('release', 'edit', "release=$release->id", $release, 'list');
|
||||
if(common::hasPriv('release', 'delete', $release))
|
||||
{
|
||||
common::printIcon('release', 'delete', "releaseID=$release->id", $release, '<i class="icon-link"></i>', '', 'hiddenwin');
|
||||
$deleteURL = $this->createLink('release', 'delete', "releaseID=$release->id&confirm=yes");
|
||||
echo html::a("javascript:ajaxDelete(\"$deleteURL\",\"releaseList\",confirmDelete)", '<i class="icon-trash"></i>', '', "class='btn' title='{$lang->release->delete}'");
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
|
||||
@@ -99,4 +99,5 @@ $lang->report->mailTitle->task = " Task (%s),";
|
||||
$lang->report->mailTitle->todo = " Todo (%s),";
|
||||
$lang->report->mailTitle->testTask = " Test Task (%s),";
|
||||
|
||||
$lang->report->proVersion = '<a href="http://api.zentao.net/goto.php?item=proversion&from=reportpage" target="_blank">Try ZenTao Pro for more!</a>';
|
||||
$lang->report->proVersion = '<a href="http://api.zentao.net/goto.php?item=proversion&from=reportpage" target="_blank">Try ZenTao Pro for more!</a>';
|
||||
$lang->report->proVersionEn = '<a href="http://api.zentao.pm/goto.php?item=proversion&from=reportpage" target="_blank">Try ZenTao Pro for more!</a>';
|
||||
|
||||
@@ -100,3 +100,4 @@ $lang->report->mailTitle->todo = " 待办(%s),";
|
||||
$lang->report->mailTitle->testTask = " 测试版本(%s),";
|
||||
|
||||
$lang->report->proVersion = '<a href="http://api.zentao.net/goto.php?item=proversion&from=reportpage" target="_blank">更多精彩,尽在专业版!</a>';
|
||||
$lang->report->proVersionEn = '<a href="http://api.zentao.pm/goto.php?item=proversion&from=reportpage" target="_blank">Try ZenTao Pro for more!</a>';
|
||||
|
||||
@@ -100,3 +100,4 @@ $lang->report->mailTitle->todo = " 待辦(%s),";
|
||||
$lang->report->mailTitle->testTask = " 測試版本(%s),";
|
||||
|
||||
$lang->report->proVersion = '<a href="http://api.zentao.net/goto.php?item=proversion&from=reportpage" target="_blank">更多精彩,盡在專業版!</a>';
|
||||
$lang->report->proVersionEn = '<a href="http://api.zentao.pm/goto.php?item=proversion&from=reportpage" target="_blank">Try ZenTao Pro for more!</a>';
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<?php include 'blockreportlist.html.php';?>
|
||||
<div class='panel panel-body' style='padding: 10px 6px'>
|
||||
<div class='text proversion'>
|
||||
<strong class='text-danger small text-latin'>PRO</strong> <span class='text-important'><?php echo $lang->report->proVersion;?></span>
|
||||
<strong class='text-danger small text-latin'>PRO</strong> <span class='text-important'><?php echo $this->app->getClientLang() == 'en'? $lang->report->proVersionEn : $lang->report->proVersion; ?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<?php include 'blockreportlist.html.php';?>
|
||||
<div class='panel panel-body' style='padding: 10px 6px'>
|
||||
<div class='text proversion'>
|
||||
<strong class='text-danger small text-latin'>PRO</strong> <span class='text-important'><?php echo $lang->report->proVersion;?></span>
|
||||
<strong class='text-danger small text-latin'>PRO</strong> <span class='text-important'><?php echo $this->app->getClientLang() == 'en'? $lang->report->proVersionEn : $lang->report->proVersion; ?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<?php include 'blockreportlist.html.php';?>
|
||||
<div class='panel panel-body' style='padding: 10px 6px'>
|
||||
<div class='text proversion'>
|
||||
<strong class='text-danger small text-latin'>PRO</strong> <span class='text-important'><?php echo $lang->report->proVersion;?></span>
|
||||
<strong class='text-danger small text-latin'>PRO</strong> <span class='text-important'><?php echo $this->app->getClientLang() == 'en'? $lang->report->proVersionEn : $lang->report->proVersion; ?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<?php include 'blockreportlist.html.php';?>
|
||||
<div class='panel panel-body' style='padding: 10px 6px'>
|
||||
<div class='text proversion'>
|
||||
<strong class='text-danger small text-latin'>PRO</strong> <span class='text-important'><?php echo $lang->report->proVersion;?></span>
|
||||
<strong class='text-danger small text-latin'>PRO</strong> <span class='text-important'><?php echo $this->app->getClientLang() == 'en'? $lang->report->proVersionEn : $lang->report->proVersion; ?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<?php include 'blockreportlist.html.php';?>
|
||||
<div class='panel panel-body' style='padding: 10px 6px'>
|
||||
<div class='text proversion'>
|
||||
<strong class='text-danger small text-latin'>PRO</strong> <span class='text-important'><?php echo $lang->report->proVersion;?></span>
|
||||
<strong class='text-danger small text-latin'>PRO</strong> <span class='text-important'><?php echo $this->app->getClientLang() == 'en'? $lang->report->proVersionEn : $lang->report->proVersion; ?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1040,12 +1040,10 @@ class storyModel extends model
|
||||
$story->lastEditedDate = $now;
|
||||
$story->stage = $stage;
|
||||
|
||||
/* When stage is verified then only change to released. */
|
||||
if($oldStory->stage == 'verified' and $story->stage != 'released')
|
||||
if($stage == 'verified' or $stage == 'closed')
|
||||
{
|
||||
$story->stage = 'verified';
|
||||
$this->dao->update(TABLE_STORY)->data($story)->autoCheck()->where('id')->eq((int)$storyID)->exec();
|
||||
$this->dao->update(TABLE_STORYSTAGE)->set('stage')->eq('verified')->where('story')->eq((int)$storyID)->exec();
|
||||
$this->dao->update(TABLE_STORYSTAGE)->set('stage')->eq($stage)->where('story')->eq((int)$storyID)->exec();
|
||||
if(!dao::isError()) $allChanges[$storyID] = common::createChanges($oldStory, $story);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -246,7 +246,7 @@
|
||||
$linkStories = explode(',', $story->linkStories) ;
|
||||
foreach($linkStories as $linkStoryID)
|
||||
{
|
||||
if(isset($story->extraStories[$linkStoryID])) echo '<li>' . html::a(inlink('view', "storyID=$linkStoryID", '', true), "#$linkStoryID " . $story->extraStories[$linkStoryID], '', "class='iframe' data-width='80%'") . '</li>';
|
||||
if(isset($story->extraStories[$linkStoryID])) echo '<li>' . html::a($this->createLink('story', 'view', "storyID=$linkStoryID", '', true), "#$linkStoryID " . $story->extraStories[$linkStoryID], '', "class='iframe' data-width='80%'") . '</li>';
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
@@ -260,7 +260,7 @@
|
||||
$childStories = explode(',', $story->childStories) ;
|
||||
foreach($childStories as $childStoryID)
|
||||
{
|
||||
if(isset($story->extraStories[$childStoryID])) echo '<li>' . html::a(inlink('view', "storyID=$childStoryID", '', true), "#$childStoryID " . $story->extraStories[$childStoryID], '', "class='iframe' data-width='80%'") . '</li>';
|
||||
if(isset($story->extraStories[$childStoryID])) echo '<li>' . html::a($this->createLink('story', 'view', "storyID=$childStoryID", '', true), "#$childStoryID " . $story->extraStories[$childStoryID], '', "class='iframe' data-width='80%'") . '</li>';
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
|
||||
@@ -45,6 +45,14 @@ class task extends control
|
||||
*/
|
||||
public function create($projectID = 0, $storyID = 0, $moduleID = 0, $taskID = 0, $todoID = 0)
|
||||
{
|
||||
$this->project->getLimitedProject();
|
||||
$limitedProjects = !empty($_SESSION['limitedProjects']) ? $_SESSION['limitedProjects'] : '';
|
||||
if(strpos(",{$limitedProjects},", ",$projectID,") !== false)
|
||||
{
|
||||
echo js::alert($this->lang->task->createDenied);
|
||||
die(js::locate($this->createLink('project', 'task', "projectID=$projectID")));
|
||||
}
|
||||
|
||||
$task = new stdClass();
|
||||
$task->module = $moduleID;
|
||||
$task->assignedTo = '';
|
||||
@@ -195,6 +203,14 @@ class task extends control
|
||||
*/
|
||||
public function batchCreate($projectID = 0, $storyID = 0, $moduleID = 0, $taskID = 0, $iframe = 0)
|
||||
{
|
||||
$this->project->getLimitedProject();
|
||||
$limitedProjects = !empty($_SESSION['limitedProjects']) ? $_SESSION['limitedProjects'] : '';
|
||||
if(strpos(",{$limitedProjects},", ",$projectID,") !== false)
|
||||
{
|
||||
echo js::alert($this->lang->task->createDenied);
|
||||
die(js::locate($this->createLink('project', 'task', "projectID=$projectID")));
|
||||
}
|
||||
|
||||
$project = $this->project->getById($projectID);
|
||||
$taskLink = $this->createLink('project', 'browse', "projectID=$projectID&tab=task");
|
||||
$storyLink = $this->session->storyList ? $this->session->storyList : $this->createLink('project', 'story', "projectID=$projectID");
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
function adjustSortBtn()
|
||||
{
|
||||
$('.btn-move-up:first').addClass('disabled').attr('disabled', 'disabled');
|
||||
$('.btn-move-down:last').addClass('disabled').attr('disabled', 'disabled');
|
||||
}
|
||||
|
||||
$('.btn-move-up, .btn-move-down').click(function()
|
||||
{
|
||||
var $this = $(this);
|
||||
if($this.hasClass('btn-move-up'))
|
||||
{
|
||||
$(this).parents('tr').prev().before($(this).parents('tr'));
|
||||
}
|
||||
else
|
||||
{
|
||||
$this.parents('tr').next().after($(this).parents('tr'));
|
||||
}
|
||||
$('.btn-move-up, .btn-move-down').removeClass('disabled').removeAttr('disabled');
|
||||
|
||||
adjustSortBtn();
|
||||
});
|
||||
|
||||
function adjustSortBtn()
|
||||
{
|
||||
$('.btn-move-up:first').addClass('disabled').attr('disabled', 'disabled');
|
||||
$('.btn-move-down:last').addClass('disabled').attr('disabled', 'disabled');
|
||||
}
|
||||
|
||||
$('#modalTeam .btn').click(function()
|
||||
{
|
||||
var team = '';
|
||||
var time = 0;
|
||||
$('[name*=team]').each(function()
|
||||
{
|
||||
if($(this).find('option:selected').text() != '')
|
||||
{
|
||||
team += ' ' + $(this).find('option:selected').text();
|
||||
}
|
||||
|
||||
estimate = parseFloat($(this).parents('td').next('td').find('[name*=teamEstimate]').val());
|
||||
if(!isNaN(estimate))
|
||||
{
|
||||
time += estimate;
|
||||
}
|
||||
|
||||
$('#teamMember').val(team);
|
||||
$('#estimate').val(time);
|
||||
})
|
||||
});
|
||||
|
||||
//end
|
||||
|
||||
@@ -234,3 +234,25 @@ $(document).ready(function()
|
||||
|
||||
adjustButtons();
|
||||
});
|
||||
|
||||
$('#modalTeam .btn').click(function()
|
||||
{
|
||||
var team = '';
|
||||
var time = 0;
|
||||
$('[name*=team]').each(function()
|
||||
{
|
||||
if($(this).find('option:selected').text() != '')
|
||||
{
|
||||
team += ' ' + $(this).find('option:selected').text();
|
||||
}
|
||||
|
||||
estimate = parseFloat($(this).parents('td').next('td').find('[name*=teamEstimate]').val());
|
||||
if(!isNaN(estimate))
|
||||
{
|
||||
time += estimate;
|
||||
}
|
||||
|
||||
$('#teamMember').val(team);
|
||||
$('#estimate').val(time);
|
||||
})
|
||||
});
|
||||
|
||||
@@ -173,6 +173,7 @@ $lang->task->noticeSaveRecord = 'Your Hour is not saved. Please save it fir
|
||||
$lang->task->commentActions = '%s. %s, commented by <strong>%s</strong>.';
|
||||
$lang->task->deniedNotice = 'Only the %s can %s the task.';
|
||||
$lang->task->noTask = 'No tasks. ';
|
||||
$lang->task->createDenied = 'Create task is denied in this project';
|
||||
|
||||
$lang->task->error = new stdclass();
|
||||
$lang->task->error->consumedNumber = '"Consumed" must be numbers.';
|
||||
|
||||
@@ -173,6 +173,7 @@ $lang->task->noticeSaveRecord = '您有尚未保存的工时记录,请先
|
||||
$lang->task->commentActions = '%s. %s, 由 <strong>%s</strong> 添加备注。';
|
||||
$lang->task->deniedNotice = '当前任务只有%s才可以%s。';
|
||||
$lang->task->noTask = '暂时没有任务。';
|
||||
$lang->task->createDenied = '你不能在该项目添加任务';
|
||||
|
||||
$lang->task->error = new stdclass();
|
||||
$lang->task->error->consumedNumber = '"已经消耗"必须为数字';
|
||||
|
||||
@@ -498,6 +498,8 @@ class taskModel extends model
|
||||
|
||||
if(isset($task))
|
||||
{
|
||||
if($this->post->status) return $currentTask;
|
||||
|
||||
if($currentTask->consumed == 0)
|
||||
{
|
||||
$currentTask->status = 'wait';
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
</a>
|
||||
<div class="divider"></div>
|
||||
<div class="page-title">
|
||||
<?php $rootName = $viewType == 'line' ? '' : $root->name;?>
|
||||
<?php $rootName = $viewType == 'line' ? '' : $root->name;?>
|
||||
<span class="text" title='<?php echo $rootName;?>'>
|
||||
<?php
|
||||
if($viewType == 'doc')
|
||||
|
||||
@@ -227,6 +227,7 @@ class upgradeModel extends model
|
||||
case '10_0':
|
||||
$this->execSQL($this->getUpgradeFile('10.0'));
|
||||
$this->fixStorySpecTitle();
|
||||
$this->removeUnlinkPriv();//Remove unlink privilege for story, bug and testcase module.
|
||||
}
|
||||
|
||||
$this->deletePatch();
|
||||
@@ -2366,4 +2367,27 @@ class upgradeModel extends model
|
||||
|
||||
return !dao::isError();
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove unlink privilege for story, bug and testcase module.
|
||||
*
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public function removeUnlinkPriv()
|
||||
{
|
||||
$this->dao->delete()->from(TABLE_GROUPPRIV)
|
||||
->where('((module')->eq('story')
|
||||
->andWhere('method')->eq('unlinkStory')
|
||||
->markRight(1)
|
||||
->orWhere('(module')->eq('bug')
|
||||
->andWhere('method')->eq('unlinkBug')
|
||||
->markRight(1)
|
||||
->orWhere('(module')->eq('testcase')
|
||||
->andWhere('method')->eq('unlinkCase')
|
||||
->markRight(2)
|
||||
->exec();
|
||||
|
||||
return !dao::isError();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -334,6 +334,7 @@ function ajaxDelete(url, replaceID, notice)
|
||||
{
|
||||
$.get(document.location.href, function(data)
|
||||
{
|
||||
if(!($(data).find('#' + replaceID).length))location.reload();
|
||||
$('#' + replaceID).html($(data).find('#' + replaceID).html());
|
||||
if(typeof sortTable == 'function') sortTable();
|
||||
$('#' + replaceID).find('[data-toggle=modal], a.iframe').modalTrigger();
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -6,3 +6,6 @@ body{padding-bottom:0px;}
|
||||
.datatable .scroll-wrapper .scroll-slide {bottom:-55px;}
|
||||
.table-footer.fixed-footer{bottom:0px !important;}
|
||||
#footer{display:none;}
|
||||
|
||||
#header #mainHeader #navbar li[data-id='oa']{display:none;}
|
||||
#subNavbar li[data-id='review']{display:none;}
|
||||
|
||||
Reference in New Issue
Block a user