This commit is contained in:
liugang
2018-04-25 17:46:24 +08:00
15 changed files with 312 additions and 328 deletions
+1 -1
View File
@@ -106,7 +106,7 @@ $lang->common->common = 'Common Module';
$lang->menu = new stdclass();
$lang->menu->my = '<span>Dashboard</span>|my|index';
$lang->menu->product = $lang->productCommon . '|product|index|locate=no';
$lang->menu->project = $lang->projectCommon . '|project|index';
$lang->menu->project = $lang->projectCommon . '|project|index|locate=no';
$lang->menu->qa = 'QA|qa|index';
$lang->menu->doc = 'Doc|doc|index';
$lang->menu->report = 'Report|report|index';
+1 -1
View File
@@ -111,7 +111,7 @@ $lang->common->common = '公有模块';
$lang->menu = new stdclass();
$lang->menu->my = '<span> 我的地盘</span>|my|index';
$lang->menu->product = $lang->productCommon . '|product|index|locate=no';
$lang->menu->project = $lang->projectCommon . '|project|index';
$lang->menu->project = $lang->projectCommon . '|project|index|locate=no';
$lang->menu->qa = '测试|qa|index';
$lang->menu->doc = '文档|doc|index';
$lang->menu->report = '统计|report|index';
+1 -1
View File
@@ -871,7 +871,7 @@ EOD;
if(empty($class)) $class = 'btn';
$title = $lang->goback . $lang->backShortcutKey;
echo html::a($backLink, '<i class="icon-goback icon-back"></i>', '', "id='back' class='{$class}' title={$title}");
echo html::a($backLink, '<i class="icon-goback icon-back"></i> ' . $lang->goback, '', "id='back' class='{$class}' title={$title}");
}
/**
+3 -2
View File
@@ -15,6 +15,7 @@
#dept_chosen .chosen-single{width: 220px;}
#project_chosen .chosen-single{width: 220px;}
.radio-inline {line-height:normal;}
.outer .main .table tr > td:first-child {padding-left: 10px;}
.outer .main .table tr > td:last-child {padding-right: 10px;}
#teamForm .table tr > td:first-child {padding-left: 10px;}
#teamForm .table tr > td:last-child {padding-right: 10px;}
+1
View File
@@ -212,6 +212,7 @@ $lang->project->copyFromProject = "Duplicate from {$lang->projectCommon} <strong
$lang->project->cancelCopy = 'Cancel Duplication';
$lang->project->byPeriod = 'By Time';
$lang->project->byUser = 'ByUser';
$lang->project->noProject = 'No project. You could ';
/* 交互提示。*/
$lang->project->confirmDelete = "Do you want to delete {$lang->projectCommon}[%s]?";
+1
View File
@@ -213,6 +213,7 @@ $lang->project->copyFromProject = "复制自{$lang->projectCommon} <strong>%s</s
$lang->project->cancelCopy = '取消复制';
$lang->project->byPeriod = '按时间段';
$lang->project->byUser = '按用户';
$lang->project->noProject = '暂时没有项目,您现在可以';
/* 交互提示。*/
$lang->project->confirmDelete = "您确定删除{$lang->projectCommon}[%s]吗?";
+6
View File
@@ -10,7 +10,13 @@
*/
?>
<?php include '../../common/view/header.html.php';?>
<?php if(empty($projects)):?>
<div class="table-empty-tip">
<p><span class="text-muted"><?php echo $lang->project->noProject;?></span> <?php common::printLink('project', 'create', '', "<i class='icon icon-plus'></i> " . $lang->project->create, '', "class='btn btn-info'");?></p>
</div>
<?php else:?>
<?php echo $this->fetch('block', 'dashboard', 'module=project');?>
<?php endif;?>
<script>
<?php if($this->config->project->homepage != 'index'):?>
$(function()
+2 -8
View File
@@ -119,15 +119,9 @@
<?php $i ++; $memberCount ++;?>
<?php endfor;?>
</tbody>
<tfoot>
<?php js::set('i', $i);?>
<tr id='submit'>
<td colspan='6' class='text-center'>
<?php echo html::submitButton() ?>
</td>
</tr>
</tfoot>
</table>
<div class='table-footer text-center'><?php echo html::submitButton() . ' ' . html::backButton(); ?></div>
<?php js::set('i', $i);?>
</form>
</div>
<div>
+5 -9
View File
@@ -40,8 +40,8 @@
<th><?php echo $lang->team->days;?></th>
<th><?php echo $lang->team->hours;?></th>
<th><?php echo $lang->team->totalHours;?></th>
<th><?php echo $lang->team->limited;?></th>
<th><?php echo $lang->actions;?></th>
<th class='w-80px'><?php echo $lang->team->limited;?></th>
<th class='w-50px'><?php echo $lang->actions;?></th>
</tr>
</thead>
<tbody>
@@ -73,13 +73,9 @@
</tr>
<?php endforeach;?>
</tbody>
<tfoot>
<tr>
<td colspan='8'>
<div class='clearfix'><div class='text'><?php echo $lang->team->totalHours . ':' . "<strong>$totalHours{$lang->project->workHour}</strong>";?></div></div>
</td>
</tr>
</tfoot>
</table>
<div class='table-footer'>
<div class='text'><?php echo $lang->team->totalHours . ':' . "<strong>$totalHours{$lang->project->workHour}</strong>";?></div>
</tfoot>
</div>
<?php include '../../common/view/footer.html.php';?>
+2 -17
View File
@@ -1,17 +1,2 @@
.dropdown-pris > .btn {background-color: #fff;}
#mailto + .chosen-container-multi .chosen-choices {border-top-left-radius: 0; border-bottom-left-radius: 0}
#mailtoGroup .input-group-btn > .btn {margin-left: -1px!important;}
#mailtoGroup .chosen-container-single a {border-left-width: 0px;}
.chosen-container {max-width: 980px}
#priRowCol, #estRowCol {width: 110px;}
#priRowCol .input-group-btn .btn {width: 55px;}
#priRowCol.has-custom-pri {width: 150px!important}
.col-table .input-group {width: 100%}
#taskPlanCol, #mailCol {width: 50%}
#planAndMailCell.has-mail-col #taskPlanCol {padding-right: 5px;}
#planAndMailCell.has-mail-col #taskPlanCol + #mailCol {padding-left: 5px;}
.input-group-addon input[type='checkBox']{}
.input-control.has-icon-right > .form-control{padding-right: 50px;}
.input-control-icon-right{width: 50px;}
+20 -30
View File
@@ -27,7 +27,7 @@ function setOwners(result)
{
$('#assignedTo').attr('multiple', 'multiple');
$('#assignedTo').chosen('destroy');
$('#assignedTo').chosen(defaultChosenOptions);
$('#assignedTo').chosen();
$('.affair').hide();
$('.team-group').addClass('hidden');
$('#selectAllUser').removeClass('hidden');
@@ -36,7 +36,7 @@ function setOwners(result)
{
$('#assignedTo').removeAttr('multiple');
$('#assignedTo').chosen('destroy');
$('#assignedTo').chosen(defaultChosenOptions);
$('#assignedTo').chosen();
$('.affair').show();
$('#selectAllUser').addClass('hidden');
}
@@ -74,7 +74,7 @@ function setPreview()
if(!$('#story').val())
{
$('#preview').addClass('hidden');
$('#copyButton').parent().addClass('hidden');
$('#copyButton').addClass('hidden');
}
else
{
@@ -83,7 +83,7 @@ function setPreview()
storyLink = storyLink + concat + 'onlybody=yes';
$('#preview').removeClass('hidden');
$('#preview a').attr('href', storyLink);
$('#copyButton').parent().removeClass('hidden');
$('#copyButton').removeClass('hidden');
}
setAfter();
@@ -152,7 +152,7 @@ function setStories(moduleID, projectID)
$('#story').val(storyID);
setPreview();
$('#story_chosen').remove();
$("#story").chosen(defaultChosenOptions);
$("#story").chosen();
});
}
@@ -172,42 +172,32 @@ $(document).ready(function()
$('[data-toggle=tooltip]').tooltip();
/* Adjust form controls layout */
var ajustFormControls = function()
{
/* Adjust style for file box */
applyCssStyle('.fileBox > tbody > tr > td:first-child {transition: none; width: ' + ($('#dataPlanGroup').width() - 1) + 'px}', 'filebox');
/* Adjust #priRowCol and #estRowCol size */
var $priRowCol = $('#priRowCol'),
$estRowCol = $('#estRowCol');
$priRowCol.css('width', 54 + $priRowCol.find('.input-group-addon').outerWidth());
$estRowCol.css('width', 55 + $estRowCol.find('.input-group-addon').outerWidth());
};
ajustFormControls();
$(window).resize(ajustFormControls);
$(window).resize();
/* First unbind ajaxForm for form.*/
$("form[data-type='ajax']").unbind('submit');
setForm();
/* Bind ajaxForm for form again. */
$.ajaxForm("form[data-type='ajax']", function(response)
$('.form-ajax').ajaxForm(
{
if(response.message) alert(response.message);
if(response.locate)
finish:function(response)
{
if(response.locate == 'reload' && response.target == 'parent')
if(response.message) alert(response.message);
if(response.locate)
{
parent.$.cookie('selfClose', 1);
parent.$.closeModal(null, 'this');
}
else
{
location.href = response.locate;
if(response.locate == 'reload' && response.target == 'parent')
{
parent.$.cookie('selfClose', 1);
parent.$.closeModal(null, 'this');
}
else
{
location.href = response.locate;
}
}
return false;
}
return false;
});
});
+1
View File
@@ -167,6 +167,7 @@ $lang->task->confirmRecord = '"Left Hour" is 0. Do you want to set Task
$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>.';
$lang->task->noData = 'No Data.';
$lang->task->error = new stdclass();
$lang->task->error->consumedNumber = '"Consumed" must be numbers.';
+1
View File
@@ -167,6 +167,7 @@ $lang->task->confirmRecord = '"剩余"为0,任务将标记为"已完
$lang->task->noticeLinkStory = "没有可关联的相关需求,您可以为当前项目%s,然后%s";
$lang->task->noticeSaveRecord = '您有尚未保存的工时记录,请先将其保存。';
$lang->task->commentActions = '%s. %s, 由 <strong>%s</strong> 添加备注。';
$lang->task->noData = '暂无';
$lang->task->error = new stdclass();
$lang->task->error->consumedNumber = '"已经消耗"必须为数字';
+172 -186
View File
@@ -11,212 +11,198 @@
*/
?>
<?php include '../../common/view/header.html.php';?>
<?php include '../../common/view/form.html.php';?>
<?php include '../../common/view/datepicker.html.php';?>
<?php include '../../common/view/kindeditor.html.php';?>
<?php js::set('toTaskList',$this->config->global->flow == 'onlyTask' || !empty($task->id));?>
<div class='container mw-1400px'>
<div id='titlebar'>
<div class='heading'>
<span class='prefix'><?php echo html::icon($lang->icons['task']);?></span>
<strong><small class='text-muted'><?php echo html::icon($lang->icons['create']);?></small> <?php echo $lang->task->create;?></strong>
<?php js::set('toTaskList', $this->config->global->flow == 'onlyTask' || !empty($task->id));?>
<div id='mainContent' class='main-content'>
<div class='center-block'>
<div class='main-header'>
<h2><?php echo $lang->task->create;?></h2>
<div class='btn-toolbar pull-right'>
<?php $customLink = $this->createLink('custom', 'ajaxSaveCustomFields', 'module=task&section=custom&key=createFields')?>
<?php include '../../common/view/customfield.html.php';?>
</div>
</div>
<div class='actions'>
<button type="button" class="btn btn-default" data-toggle="customModal"><i class='icon icon-cog'></i> </button>
</div>
</div>
<form class='form-condensed' method='post' enctype='multipart/form-data' id='dataform' data-type='ajax'>
<table class='table table-form'>
<tr>
<th class='w-100px'><?php echo $lang->task->module;?></th>
<td id='moduleIdBox' class='w-p25-f'><?php echo html::select('module', $moduleOptionMenu, $task->module, "class='form-control chosen' onchange='setStories(this.value,$project->id)'");?></td>
<td></td><td></td><td></td><td></td>
</tr>
<tr>
<th><?php echo $lang->task->type;?></th>
<td><?php echo html::select('type', $lang->task->typeList, $task->type, "class='form-control chosen' onchange='setOwners(this.value)'");?></td><td></td>
</tr>
<tr>
<th><?php echo $lang->task->assignedTo;?></th>
<td>
<div class="input-group" id="dataPlanGroup">
<?php echo html::select('assignedTo[]', $members, $task->assignedTo, "class='form-control chosen'");?>
<?php echo html::input('teamMember', '', "class='form-control team-group fix-border hidden' readonly='readonly'");?>
<span class="input-group-addon team-group hidden" data-toggle='modalTeam'><?php echo $lang->task->team;?></span>
<label class='input-group-addon affair'><input type='checkBox' name='multiple' id="multipleBox" value='1'/><?php echo $lang->task->multipleAB;?></label>
</div>
</td>
<td>
<button type='button' class='btn btn-link<?php if($task->type !== 'affair') echo ' hidden';?>' id='selectAllUser'>
<?php echo $lang->task->selectAllUser;?>
</button>
</td>
</tr>
<?php if(strpos(",$showFields,", ',story,') !== false and $this->config->global->flow != 'onlyTask' and $project->type != 'ops'):?>
<tr>
<th><?php echo $lang->task->story;?></th>
<td colspan='5'>
<div class='input-group'>
<form class='load-indicator main-form form-ajax' method='post' enctype='multipart/form-data' id='dataform'>
<table class='table table-form'>
<tr>
<th><?php echo $lang->task->type;?></th>
<td><?php echo html::select('type', $lang->task->typeList, $task->type, "class='form-control chosen' onchange='setOwners(this.value)' required");?></td><td></td><td></td>
</tr>
<tr>
<th><?php echo $lang->task->module;?></th>
<td id='moduleIdBox'><?php echo html::select('module', $moduleOptionMenu, $task->module, "class='form-control chosen' onchange='setStories(this.value,$project->id)'");?></td><td></td><td></td>
</tr>
<tr>
<th><?php echo $lang->task->assignedTo;?></th>
<td>
<div class="input-group" id="dataPlanGroup">
<?php echo html::select('assignedTo[]', $members, $task->assignedTo, "class='form-control chosen'");?>
<?php echo html::input('teamMember', '', "class='form-control team-group fix-border hidden' readonly='readonly'");?>
<span class="input-group-addon team-group hidden" data-toggle='modalTeam'><?php echo $lang->task->team;?></span>
<label class='input-group-addon affair'><input type='checkBox' name='multiple' id="multipleBox" value='1'/> <?php echo $lang->task->multipleAB;?></label>
<span class='input-group-btn <?php if($task->type !== 'affair') echo 'hidden';?>' id='selectAllUser'>
<button type='button' class='btn'>
<?php echo $lang->task->selectAllUser;?>
</button>
</span>
</div>
</td>
<td>
</td>
</tr>
<?php if(strpos(",$showFields,", ',story,') !== false and $this->config->global->flow != 'onlyTask' and $project->type != 'ops'):?>
<tr>
<th><?php echo $lang->task->story;?></th>
<td colspan='3'>
<?php if(empty($stories)):?>
<span id='story'><?php printf($lang->task->noticeLinkStory, html::a($this->createLink('project', 'linkStory', "projectID=$project->id"), $lang->project->linkStory, '_blank'), html::a("javascript:loadStories($project->id)", $lang->refresh));?></span>
<?php else:?>
<?php echo html::select('story', $stories, $task->story, "class='form-control chosen' onchange='setStoryRelated();'");?>
<span class='input-group-btn' id='preview'><a href='#' class='btn iframe'><?php echo $lang->preview;?></a></span>
<?php endif;?>
</div>
</td>
</tr>
<?php endif;?>
<tr>
<th><?php echo $lang->task->name;?></th>
<td colspan='5'>
<div class='row-table'>
<div class='col-table'>
<div class="input-group w-p100">
<input type='hidden' id='color' name='color' data-provide='colorpicker' data-wrapper='input-group-btn fix-border-right' data-pull-menu-right='false' data-btn-tip='<?php echo $lang->task->colorTag ?>' data-update-text='#name' value='<?php echo $task->color;?>'>
<?php echo html::input('name', $task->name, "class='form-control' autocomplete='off'");?>
<?php if($this->config->global->flow != 'onlyTask'):?>
<span class='input-group-btn'><a href='javascript:copyStoryTitle();' id='copyButton' class='btn'><?php echo $lang->task->copyStoryTitle;?></a></span>
<?php echo html::hidden("storyEstimate") . html::hidden("storyDesc") . html::hidden("storyPri");?>
<?php endif;?>
</div>
<div class='input-group'>
<?php echo html::select('story', $stories, $task->story, "class='form-control chosen' onchange='setStoryRelated();'");?>
<span class='input-group-btn' id='preview'><a href='#' class='btn iframe'><?php echo $lang->preview;?></a></span>
</div>
<?php
$hiddenPri = strpos(",$showFields,", ',pri,') === false;
$hiddenEst = strpos(",$showFields,", ',estimate,') === false;
?>
<?php if(!$hiddenPri):?>
<?php endif;?>
</td>
</tr>
<?php endif;?>
<tr>
<th><?php echo $lang->task->name;?></th>
<td colspan='3'>
<div class="input-control has-icon-left has-icon-right">
<div class="colorpicker">
<button type="button" class="btn btn-link dropdown-toggle" data-toggle="dropdown"><span class="cp-title"></span><span class="color-bar"></span><i class="ic"></i></button>
<ul class="dropdown-menu clearfix">
<li class="heading"><?php echo $lang->task->colorTag;?><i class="icon icon-close"></i></li>
</ul>
<input type="hidden" class="colorpicker" id="color" name="color" value="" data-icon="color" data-wrapper="input-control-icon-left" data-update-color="#title" data-provide="colorpicker">
</div>
<?php echo html::input('name', $task->name, "class='form-control' autocomplete='off' required");?>
<?php if($this->config->global->flow != 'onlyTask'):?>
<a href='javascript:copyStoryTitle();' id='copyButton' class='input-control-icon-right'><?php echo $lang->task->copyStoryTitle;?></a>
<?php echo html::hidden("storyEstimate") . html::hidden("storyDesc") . html::hidden("storyPri");?>
<?php endif;?>
</div>
</td>
</tr>
<?php if(strpos(",$showFields,", ',pri,') !== false):?>
<tr>
<th><?php echo $lang->task->pri;?></th>
<td colspan='2'>
<?php
$hasCustomPri = false;
foreach($lang->task->priList as $priKey => $priValue)
{
if($priKey != $priValue or strlen($priKey) != strlen($priValue))
if($priKey and $priValue and ($priKey != $priValue or strlen($priKey) != strlen($priValue)))
{
$hasCustomPri = true;
break;
}
}
$priList = $lang->task->priList;
if(end($priList))
{
unset($priList[0]);
$priList[0] = '';
}
?>
<div class='col-table<?php if($hasCustomPri) echo ' has-custom-pri';?>' id='priRowCol'>
<div class='input-group'>
<span class='input-group-addon fix-border br-0'><?php echo $lang->task->pri;?></span>
<?php if($hasCustomPri):?>
<?php echo html::select('pri', $lang->task->priList, $task->pri, "class='form-control chosen'");?>
<?php else:?>
<div class='input-group-btn dropdown-pris'>
<button type='button' class='btn dropdown-toggle br-0' data-toggle='dropdown'>
<span class='pri-text'></span> &nbsp;<span class='caret'></span>
</button>
<ul class='dropdown-menu pull-right'></ul>
<?php echo html::select('pri', $lang->task->priList, $task->pri, "class='hide'");?>
</div>
<?php endif;?>
</div>
<?php if($hasCustomPri):?>
<?php echo html::select('pri', (array)$priList, $task->pri, "class='form-control chosen'");?>
<?php else: ?>
<?php echo html::select('pri', (array)$priList, $task->pri, "class='form-control' data-provide='labelSelector'");?>
<?php endif; ?>
</td>
</tr>
<?php endif;?>
<?php if(strpos(",$showFields,", ',estimate,') !== false):?>
<tr>
<th><?php echo $lang->task->estimateAB;?></th>
<td><input type="number" min="0" step="0.5" name="estimate" id="estimate" value="<?php echo $task->estimate;?>" class="form-control" autocomplete="off"></td>
<td class="muted"><?php echo $lang->task->hour;?></td>
</tr>
<?php endif;?>
<tr>
<th><?php echo $lang->task->desc;?></th>
<td colspan='3'><?php echo html::textarea('desc', $task->desc, "rows='10' class='form-control'");?></td>
</tr>
<tr>
<th><?php echo $lang->files;?></th>
<td colspan='3'><?php echo $this->fetch('file', 'buildform');?></td>
</tr>
<?php
$hiddenEstStarted = strpos(",$showFields,", ',estStarted,') === false;
$hiddenDeadline = strpos(",$showFields,", ',deadline,') === false;
?>
<?php if(!$hiddenEstStarted or !$hiddenDeadline):?>
<tr>
<th><?php echo $lang->task->datePlan;?></th>
<td colspan='2'>
<div class='input-group'>
<?php if(!$hiddenEstStarted):?>
<?php echo html::input('estStarted', $task->estStarted, "class='form-control form-date' placeholder='{$lang->task->estStarted}'");?>
<?php endif;?>
<?php if(!$hiddenEstStarted and !$hiddenDeadline):?>
<span class='input-group-addon fix-border'>~</span>
<?php endif;?>
<?php if(!$hiddenDeadline):?>
<?php echo html::input('deadline', $task->deadline, "class='form-control form-date' placeholder='{$lang->task->deadline}'");?>
<?php endif;?>
</div>
<?php endif;?>
<?php if(!$hiddenEst):?>
<div class='col-table' id='estRowCol'>
<div class='input-group'>
<span class='input-group-addon fix-border br-0'><?php echo $lang->task->estimateAB;?></span>
<?php echo html::input('estimate', $task->estimate, "class='form-control' placeholder='{$lang->task->hour}' autocomplete='off'");?>
</div>
</td>
</tr>
<?php endif;?>
<?php if(strpos(",$showFields,", ',mailto,') !== false):?>
<tr>
<th><?php echo $lang->story->mailto;?></th>
<td colspan='3'>
<div class="input-group">
<?php echo html::select('mailto[]', $project->acl == 'private' ? $members : $users, str_replace(' ', '', $task->mailto), "class='form-control chosen' data-placeholder='{$lang->chooseUsersToMail}' multiple");?>
<?php echo $this->fetch('my', 'buildContactLists');?>
</div>
<?php endif;?>
</td>
</tr>
<?php endif;?>
<tr <?php echo $this->config->global->flow == 'onlyTask' ? "class='hidden'" : '';?>>
<th><?php echo $lang->task->afterSubmit;?></th>
<td colspan='3'><?php echo html::radio('after', $lang->task->afterChoices, $this->config->global->flow == 'onlyTask' || !empty($task->id) ? 'toTaskList' : 'continueAdding');?></td>
</tr>
<tr>
<td colspan='4' class='text-center'><?php echo html::submitButton('', '', 'btn btn-primary btn-wide') . html::backButton('', '', 'btn btn-gray btn-wide');?></td>
</tr>
</table>
<div class='modal fade modal-team' id='modalTeam'>
<div class='modal-dialog'>
<div class='modal-header'>
<button type='button' class='close' data-dismiss='modal'>
<span aria-hidden='true'>×</span><span class='sr-only'><?php echo $lang->task->close;?></span>
</button>
<h4 class='modal-title'><?php echo $lang->task->team;?></h4>
</div>
<div class='modal-content with-padding'>
<table class="table table-form">
<?php for($i = 0; $i < 6; $i++):?>
<tr>
<td><?php echo html::select("team[]", $members, '', "class='form-control chosen'");?></td>
<td>
<div class='input-group'>
<?php echo html::input("teamEstimate[]", '', "class='form-control text-center' placeholder='{$lang->task->estimateAB}'") ?>
<span class='input-group-addon'><?php echo $lang->task->hour;?></span>
</div>
</td>
<td class='w-90px'>
<a href='javascript:;' class='btn btn-move-up btn-sm'><i class='icon-arrow-up'></i></a>
<a href='javascript:;' class='btn btn-move-down btn-sm'><i class='icon-arrow-down'></i></a>
</td>
</tr>
<?php endfor;?>
<tr>
<td colspan='3' class='text-center'><?php echo html::a('javascript:void(0)', $lang->confirm, '', "class='btn btn-primary' data-dismiss='modal'") ?></td>
</tr>
</table>
</div>
</td>
</tr>
<tr>
<th><?php echo $lang->task->desc;?></th>
<td colspan='5'><?php echo html::textarea('desc', $task->desc, "rows='10' class='form-control'");?></td>
</tr>
<?php
$hiddenEstStarted = strpos(",$showFields,", ',estStarted,') === false;
$hiddenDeadline = strpos(",$showFields,", ',deadline,') === false;
$hiddenMailto = strpos(",$showFields,", ',mailto,') === false;
?>
<?php if(!$hiddenEstStarted or !$hiddenDeadline or !$hiddenMailto):?>
<tr>
<th><?php echo ($hiddenEstStarted and $hiddenDeadline) ? $lang->task->mailto : $lang->task->datePlan;?></th>
<td id='planAndMailCell' colspan='5' class='<?php if(!$hiddenMailto) echo 'has-mail-col' ?>'>
<div class='row-table'>
<?php if(!$hiddenEstStarted or !$hiddenDeadline):?>
<div class='col-table' id='taskPlanCol'>
<div class='input-group' id='dataPlanGroup'>
<?php if(!$hiddenEstStarted):?>
<?php echo html::input('estStarted', $task->estStarted, "class='form-control form-date' placeholder='{$lang->task->estStarted}'");?>
<?php endif;?>
<?php if(!$hiddenEstStarted and !$hiddenDeadline):?>
<span class='input-group-addon fix-border'>~</span>
<?php endif;?>
<?php if(!$hiddenDeadline):?>
<?php echo html::input('deadline', $task->deadline, "class='form-control form-date' placeholder='{$lang->task->deadline}'");?>
<?php endif;?>
</div>
</div>
<?php endif;?>
<?php if(!$hiddenMailto):?>
<div class='col-table' id='mailCol'>
<div id='mailtoGroup' class='input-group'>
<?php if(!$hiddenEstStarted or !$hiddenDeadline):?>
<span class='input-group-addon'><?php echo $lang->task->mailto;?></span>
<?php endif;?>
<?php echo html::select('mailto[]', $project->acl == 'private' ? $members : $users, str_replace(' ', '', $task->mailto), "multiple class='form-control'");?>
<?php echo $this->fetch('my', 'buildContactLists');?>
</div>
</div>
<?php endif;?>
</div>
</td>
</tr>
<?php endif;?>
<tr>
<th><?php echo $lang->files;?></th>
<td colspan='5'><?php echo $this->fetch('file', 'buildform');?></td>
</tr>
<tr <?php echo $this->config->global->flow == 'onlyTask' ? "class='hidden'" : '';?>>
<th><?php echo $lang->task->afterSubmit;?></th>
<td colspan='5'><?php echo html::radio('after', $lang->task->afterChoices, $this->config->global->flow == 'onlyTask' || !empty($task->id) ? 'toTaskList' : 'continueAdding');?></td>
</tr>
<tr>
<td></td>
<td colspan='5'><?php echo html::submitButton() . html::backButton();?></td>
</tr>
</table>
<span id='responser'></span>
<div class='modal fade modal-team' id='modalTeam'>
<div class='modal-dialog'>
<div class='modal-header'>
<button type='button' class='close' data-dismiss='modal'>
<span aria-hidden='true'>×</span><span class='sr-only'><?php echo $lang->task->close;?></span>
</button>
<h4 class='modal-title'><?php echo $lang->task->team;?></h4>
</div>
<div class='modal-content'>
<table class="table table-form">
<?php for($i = 0; $i < 6; $i++):?>
<tr>
<td class='w-150px'><?php echo html::select("team[]", $members, '', "class='form-control chosen'");?></td>
<td>
<div class='input-group'>
<?php echo html::input("teamEstimate[]", '', "class='form-control text-center' placeholder='{$lang->task->estimateAB}'") ?>
<span class='input-group-addon'><?php echo $lang->task->hour;?></span>
</div>
</td>
<td class='w-90px'>
<a href='javascript:;' class='btn btn-move-up btn-sm'><i class='icon-arrow-up'></i></a>
<a href='javascript:;' class='btn btn-move-down btn-sm'><i class='icon-arrow-down'></i></a>
</td>
</tr>
<?php endfor;?>
<tr>
<td colspan='3' class='text-center'><?php echo html::a('javascript:void(0)', $lang->confirm, '', "class='btn btn-primary' data-dismiss='modal'") ?></td>
</tr>
</table>
</div>
</div>
</div>
</form>
</form>
</div>
</div>
<?php $customLink = $this->createLink('custom', 'ajaxSaveCustomFields', 'module=task&section=custom&key=createFields')?>
<?php include '../../common/view/customfield.html.php';?>
<?php include '../../common/view/footer.html.php';?>
+95 -73
View File
@@ -20,8 +20,8 @@
<div class="page-title">
<span class="label label-id"><?php echo $task->id?></span>
<span class="text" style='color: <?php echo $task->color; ?>'>
<?php if(!empty($task->parent)) echo '<span class="label">' . $this->lang->task->childrenAB . '</span> ';?>
<?php if(!empty($task->team)) echo '<span class="label">' . $this->lang->task->multipleAB . '</span> ';?>
<?php if(!empty($task->parent)) echo '<span class="label no-margin">' . $this->lang->task->childrenAB . '</span>';?>
<?php if(!empty($task->team)) echo '<span class="label no-margin">' . $this->lang->task->multipleAB . '</span>';?>
<?php echo isset($task->parentName) ? $task->parentName . '/' : '';?><?php echo $task->name;?>
</span>
<?php if($task->deleted):?>
@@ -38,23 +38,31 @@
<div class="cell">
<div class="detail">
<div class="detail-title"><?php echo $lang->task->legendDesc;?></div>
<div class="detail-content article-content"><?php echo $task->desc;?></div>
<div class="detail-content article-content">
<?php echo !empty($task->desc) ? $task->desc : "<div class='text-center text-muted'>" . $lang->task->noData . '</div>';?>
</div>
</div>
<?php if($project->type != 'ops'):?>
<?php if($task->fromBug != 0):?>
<div class="detail">
<div class="detail-title"><?php echo $lang->task->steps;?></div>
<div class="detail-content article-content"><?php echo $task->bugSteps;?></div>
<div class="detail-title"><?php echo $lang->bug->steps;?></div>
<div class="detail-content article-content">
<?php echo !empty($task->bugSteps) ? $task->bugSteps : "<div class='text-center text-muted'>" . $lang->task->noData . '</div>';?>
</div>
</div>
<?php elseif($task->story):?>
<div class="detail">
<div class='detail-title'><?php echo $lang->task->storySpec;?></div>
<div class='detail-content article-content'><?php echo $task->storySpec;?></div>
<div class='detail-content article-content'>
<?php echo (!empty($task->storySpec) || !empty($task->storyFiles)) ? $task->storySpec : "<div class='text-center text-muted'>" . $lang->task->noData . '</div>';?>
</div>
<?php echo $this->fetch('file', 'printFiles', array('files' => $task->storyFiles, 'fieldset' => 'false'));?>
</div>
<div class='detail'>
<div class='detail-title'><?php echo $lang->task->storyVerify;?></div>
<div class='detail-content article-content'><?php echo $task->storyVerify;?></div>
<div class='detail-content article-content'>
<?php echo !empty($task->storyVerify) ? $task->storyVerify : "<div class='text-center text-muted'>" . $lang->task->noData . '</div>';?>
</div>
</div>
<?php endif;?>
<?php if(isset($task->cases) and $task->cases):?>
@@ -62,7 +70,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, '', "data-toggle='modal' data-type='iframe' data-width='90%'") . '</li>';?>
</ul>
</div>
</div>
@@ -71,17 +79,18 @@
<?php if(!empty($task->children)):?>
<div class='detail'>
<div class='detail-title'><?php echo $this->lang->task->children;?></div>
<div class='detail-content article-content'>
<table class='table table-hover table-fixed'>
<tr class='text-center'>
<th class='w-60px'> <?php echo $lang->task->id;?></th>
<th class='w-40px'> <?php echo $lang->task->lblPri;?></th>
<th> <?php echo $lang->task->name;?></th>
<th class='w-100px'><?php echo $lang->task->deadline;?></th>
<th class='w-80px'> <?php echo $lang->task->assignedTo;?></th>
<th class='w-90px'> <?php echo $lang->task->status;?></th>
<th class='w-50px visible-lg'><?php echo $lang->task->consumedAB . $lang->task->lblHour;?></th>
<th class='w-50px visible-lg'><?php echo $lang->task->leftAB . $lang->task->lblHour;?></th>
<th class='w-200px'><?php echo $lang->actions;?></th>
<td class='w-50px'> <?php echo $lang->task->id;?></th>
<td class='w-40px'> <?php echo $lang->task->lblPri;?></th>
<td> <?php echo $lang->task->name;?></th>
<td class='w-100px'><?php echo $lang->task->deadline;?></th>
<td class='w-80px'> <?php echo $lang->task->assignedTo;?></th>
<td class='w-80px'> <?php echo $lang->task->status;?></th>
<td class='w-60px visible-lg'><?php echo $lang->task->consumedAB . $lang->task->lblHour;?></th>
<td class='w-60px visible-lg'><?php echo $lang->task->leftAB . $lang->task->lblHour;?></th>
<td class='w-230px'><?php echo $lang->actions;?></th>
</tr>
<?php foreach($task->children as $child):?>
<tr class='text-center'>
@@ -93,7 +102,7 @@
echo "</span>";
?>
</td>
<td class='text-left'><a href="<?php echo $this->createLink('task', 'view', "taskID=$child->id"); ?>"><?php echo $child->name;?></a></td>
<td class='text-left' title='<?php echo $child->name;?>'><a href="<?php echo $this->createLink('task', 'view', "taskID=$child->id"); ?>"><?php echo $child->name;?></a></td>
<td><?php echo $child->deadline;?></td>
<td><?php if(isset($users[$child->assignedTo])) echo $users[$child->assignedTo];?></td>
<td><?php echo zget($lang->task->statusList, $child->status);?></td>
@@ -112,6 +121,7 @@
</tr>
<?php endforeach;?>
</table>
</div>
</div>
<?php endif;?>
<?php echo $this->fetch('file', 'printFiles', array('files' => $task->files, 'fieldset' => 'true'));?>
@@ -127,7 +137,7 @@
<table class="table table-data">
<tbody>
<tr>
<th class='w-80px'><?php echo $lang->task->project;?></th>
<th><?php echo $lang->task->project;?></th>
<td><?php if(!common::printLink('project', 'view', "projectID=$task->project", $project->name)) echo $project->name;?></td>
</tr>
<tr>
@@ -166,15 +176,16 @@
<tr class='nofixed'>
<th><?php echo $lang->task->story;?></th>
<td>
<?php
if($task->storyTitle and !common::printLink('story', 'view', "storyID=$task->story", $task->storyTitle, '', "class='iframe' data-width='80%'", true, true)) echo $task->storyTitle;
if($task->needConfirm)
{
echo "(<span class='warning'>{$lang->story->changed}</span> ";
echo html::a($this->createLink('task', 'confirmStoryChange', "taskID=$task->id"), $lang->confirm, 'hiddenwin');
echo ")";
}
?>
<?php
if(!$task->storyTitle) echo $lang->task->noData;
if($task->storyTitle and !common::printLink('story', 'view', "storyID=$task->story", $task->storyTitle, '', "class='iframe' data-width='80%'", true, true)) echo $task->storyTitle;
if($task->needConfirm)
{
echo "(<span class='warning'>{$lang->story->changed}</span> ";
echo html::a($this->createLink('task', 'confirmStoryChange', "taskID=$task->id"), $lang->confirm, 'hiddenwin');
echo ")";
}
?>
</td>
</tr>
<?php if($task->fromBug):?>
@@ -185,7 +196,7 @@
<?php endif;?>
<tr>
<th><?php echo empty($task->team) ? $lang->task->assignTo : $lang->task->transferTo;?></th>
<td><?php echo $task->assignedTo ? $task->assignedToRealName . $lang->at . $task->assignedDate : '';?></td>
<td><?php echo $task->assignedTo ? $task->assignedToRealName . $lang->at . $task->assignedDate : $lang->task->noData;?></td>
</tr>
<tr>
<th><?php echo $lang->task->type;?></th>
@@ -193,15 +204,27 @@
</tr>
<tr>
<th><?php echo $lang->task->status;?></th>
<td><span class='status-<?php echo $task->status;?>'><span class="label label-dot"></span> <?php zget($lang->task->statusList, $task->status);?></td>
<td><span class='status-<?php echo $task->status;?>'><span class="label label-dot"></span> <?php echo zget($lang->task->statusList, $task->status);?></td>
</tr>
<tr>
<th><?php echo $lang->task->pri;?></th>
<td><span class='label-pri <?php echo 'label-pri-' . $task->pri;?>'><?php echo $task->pri == '0' ? '' : zget($lang->task->priList, $task->pri)?></span></td>
<td><span class='label-pri <?php echo 'label-pri-' . $task->pri;?>'><?php echo $task->pri == '0' ? $lang->task->noData : zget($lang->task->priList, $task->pri)?></span></td>
</tr>
<tr>
<th><?php echo $lang->task->mailto;?></th>
<td><?php $mailto = explode(',', str_replace(' ', '', $task->mailto)); foreach($mailto as $account) echo ' ' . zget($users, $account, $account); ?></td>
<td>
<?php
$mailto = explode(',', str_replace(' ', '', $task->mailto));
if(empty($mainto))
{
echo $lang->task->noData;
}
else
{
foreach($mailto as $account) echo ' ' . zget($users, $account, $account);
}
?>
</td>
</tr>
</tbody>
</table>
@@ -241,7 +264,7 @@
<div class="detail-content">
<table class='table table-data'>
<tr>
<th class='w-80px'><?php echo $lang->task->estStarted;?></th>
<th><?php echo $lang->task->estStarted;?></th>
<td><?php echo $task->estStarted;?></td>
</tr>
<tr>
@@ -251,10 +274,10 @@
<tr>
<th><?php echo $lang->task->deadline;?></th>
<td>
<?php
echo $task->deadline;
if(isset($task->delay)) printf($lang->task->delayWarning, $task->delay);
?>
<?php
echo $task->deadline;
if(isset($task->delay)) printf($lang->task->delayWarning, $task->delay);
?>
</td>
</tr>
<tr>
@@ -279,28 +302,28 @@
<div class="detail-content">
<table class='table table-data'>
<tr>
<th class='w-80px'><?php echo $lang->task->openedBy;?></th>
<td><?php if($task->openedBy) echo zget($users, $task->openedBy, $task->openedBy) . $lang->at . $task->openedDate;?></td>
<th><?php echo $lang->task->openedBy;?></th>
<td><?php echo $task->openedBy ? zget($users, $task->openedBy, $task->openedBy) . $lang->at . $task->openedDate : $lang->task->noData;?></td>
</tr>
<tr>
<th><?php echo $lang->task->finishedBy;?></th>
<td><?php if($task->finishedBy) echo zget($users, $task->finishedBy, $task->finishedBy) . $lang->at . $task->finishedDate;?></td>
<td><?php echo ($task->finishedBy) ? zget($users, $task->finishedBy, $task->finishedBy) . $lang->at . $task->finishedDate : $lang->task->noData;?></td>
</tr>
<tr>
<th><?php echo $lang->task->canceledBy;?></th>
<td><?php if($task->canceledBy) echo zget($users, $task->canceledBy, $task->canceledBy) . $lang->at . $task->canceledDate;?></td>
<td><?php echo $task->canceledBy ? zget($users, $task->canceledBy, $task->canceledBy) . $lang->at . $task->canceledDate : $lang->task->noData;?></td>
</tr>
<tr>
<th><?php echo $lang->task->closedBy;?></th>
<td><?php if($task->closedBy) echo zget($users, $task->closedBy, $task->closedBy) . $lang->at . $task->closedDate;?></td>
<td><?php echo $task->closedBy ? zget($users, $task->closedBy, $task->closedBy) . $lang->at . $task->closedDate : $lang->task->noData;?></td>
</tr>
<tr>
<th><?php echo $lang->task->closedReason;?></th>
<td><?php echo $lang->task->reasonList[$task->closedReason];?></td>
<td><?php echo $task->closedReason ? $lang->task->reasonList[$task->closedReason] : $lang->task->noData;?></td>
</tr>
<tr>
<th><?php echo $lang->task->lastEdited;?></th>
<td><?php if($task->lastEditedBy) echo zget($users, $task->lastEditedBy, $task->lastEditedBy) . $lang->at . $task->lastEditedDate;?></td>
<td><?php echo $task->lastEditedBy ? zget($users, $task->lastEditedBy, $task->lastEditedBy) . $lang->at . $task->lastEditedDate : $lang->task->noData;?></td>
</tr>
</table>
</div>
@@ -308,36 +331,35 @@
</div>
</div>
</div>
div>
iv id="mainActions">
<?php common::printPreAndNext($preAndNext);?>
<div class="btn-toolbar">
<?php if(!$task->deleted):?>
<?php
common::printIcon('task', 'assignTo', "projectID=$task->project&taskID=$task->id", $task, 'button', '', '', 'iframe', true, '', empty($task->team) ? $lang->task->assignTo : $lang->task->transfer);
common::printIcon('task', 'start', "taskID=$task->id", $task, 'button', '', '', 'iframe', true);
common::printIcon('task', 'restart', "taskID=$task->id", $task, 'button', '', '', 'iframe', true);
common::printIcon('task', 'recordEstimate', "taskID=$task->id", $task, 'button', '', '', 'iframe', true);
common::printIcon('task', 'pause', "taskID=$task->id", $task, 'button', '', '', 'iframe', true);
common::printIcon('task', 'finish', "taskID=$task->id", $task, 'button', '', '', 'iframe showinonlybody text-success', true);
common::printIcon('task', 'close', "taskID=$task->id", $task, 'button', '', '', 'iframe', true);
common::printIcon('task', 'activate', "taskID=$task->id", $task, 'button', '', '', 'iframe text-success', true);
common::printIcon('task', 'cancel', "taskID=$task->id", $task, 'button', '', '', 'iframe', true);
echo "<div class='divider'></div>";
if(empty($task->team) or empty($task->children)) common::printIcon('task', 'batchCreate', "project=$task->project&storyID=$task->story&moduleID=$task->module&taskID=$task->id", $task, 'button','plus','','','','',' ');
common::printIcon('task', 'edit', "taskID=$task->id", $task);
common::printIcon('task', 'create', "productID=0&storyID=0&moduleID=0&taskID=$task->id", $task, 'button', 'copy');
common::printIcon('task', 'delete', "projectID=$task->project&taskID=$task->id", $task);
echo "<div class='divider'></div>";
if(!empty($task->parent)) echo html::a(helper::createLink('task', 'view', "taskID=$task->parent"), "<i class='iconicon-double-angle-up'></i>", '', "class='btn' title='{$lang->task->parent}'");
common::printBack($browseLink);
?>
<?php else:?>
<?php common::printBack($browseLink);?>
<?php endif;?>
<div id="mainActions">
<?php common::printPreAndNext($preAndNext);?>
<div class="btn-toolbar">
<?php if(!$task->deleted):?>
<?php
common::printBack($browseLink);
common::printIcon('task', 'assignTo', "projectID=$task->project&taskID=$task->id", $task, 'button', '', '', 'iframe', true, '', empty($task->team) ? $lang->task->assignTo : $lang->task->transfer);
common::printIcon('task', 'start', "taskID=$task->id", $task, 'button', '', '', 'iframe', true);
common::printIcon('task', 'restart', "taskID=$task->id", $task, 'button', '', '', 'iframe', true);
common::printIcon('task', 'recordEstimate', "taskID=$task->id", $task, 'button', '', '', 'iframe', true);
common::printIcon('task', 'pause', "taskID=$task->id", $task, 'button', '', '', 'iframe', true);
common::printIcon('task', 'finish', "taskID=$task->id", $task, 'button', '', '', 'iframe showinonlybody text-success', true);
common::printIcon('task', 'close', "taskID=$task->id", $task, 'button', '', '', 'iframe', true);
common::printIcon('task', 'activate', "taskID=$task->id", $task, 'button', '', '', 'iframe text-success', true);
common::printIcon('task', 'cancel', "taskID=$task->id", $task, 'button', '', '', 'iframe', true);
echo "<div class='divider'></div>";
if(empty($task->team) or empty($task->children)) common::printIcon('task', 'batchCreate', "project=$task->project&storyID=$task->story&moduleID=$task->module&taskID=$task->id", $task, 'button','plus','','','','',' ');
common::printIcon('task', 'edit', "taskID=$task->id", $task);
common::printIcon('task', 'create', "productID=0&storyID=0&moduleID=0&taskID=$task->id", $task, 'button', 'copy');
common::printIcon('task', 'delete', "projectID=$task->project&taskID=$task->id", $task);
if(!empty($task->parent)) echo html::a(helper::createLink('task', 'view', "taskID=$task->parent"), "<i class='icon icon-double-angle-up'></i>", '', "class='btn btn-link' title='{$lang->task->parent}'");
?>
<?php else:?>
<?php common::printBack($browseLink);?>
<?php endif;?>
</div>
</div>
<?php include '../../common/view/syntaxhighlighter.html.php';?>
<?php include '../../common/view/footer.html.php';?>