Merge branch 'master' of https://github.com/easysoft/zentaopms
This commit is contained in:
@@ -32,17 +32,19 @@ js::set('page', 'confirmbug');
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th class='w-80px'><?php echo $lang->bug->assignedTo;?></th>
|
||||
<td class='w-p25-f'><?php echo html::select('assignedTo', $users, $bug->assignedTo, "class='select-2 chosen'");?></td>
|
||||
<td class='w-p25-f'><?php echo html::select('assignedTo', $users, $bug->assignedTo, "class='form-controlform-control chosen'");?></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->type;?></th>
|
||||
<td><?php echo html::select('type', $lang->bug->typeList, $bug->type, "class='form-control chosen'");?></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->pri;?></th>
|
||||
<td><?php echo html::select('pri', $lang->bug->priList, $bug->pri, "class='form-control chosen'");?></td>
|
||||
</tr>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->mailto;?></th>
|
||||
<td colspan='2'><?php echo html::select('mailto[]', $users, str_replace(' ' , '', $bug->mailto), 'class="form-control chosen" multiple');?></td>
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
<?php
|
||||
$module = $this->moduleName;
|
||||
$method = $this->methodName;
|
||||
js::set('themeRoot', $themeRoot);
|
||||
if(!isset($config->$module->editor->$method)) return;
|
||||
$editor = $config->$module->editor->$method;
|
||||
$editor['id'] = explode(',', $editor['id']);
|
||||
@@ -11,62 +10,71 @@ $editorLang = isset($editorLangs[$app->getClientLang()]) ? $editorLangs[$app->
|
||||
|
||||
/* set uid for upload. */
|
||||
$uid = uniqid('');
|
||||
js::set('kuid', $uid);
|
||||
?>
|
||||
<link rel="stylesheet" href="<?php echo $jsRoot;?>kindeditor/themes/default/default.css" />
|
||||
<script src='<?php echo $jsRoot;?>kindeditor/kindeditor-min.js' type='text/javascript'></script>
|
||||
<script src='<?php echo $jsRoot;?>kindeditor/lang/<?php echo $editorLang;?>.js' type='text/javascript'></script>
|
||||
<script src='<?php echo $jsRoot;?>kindeditor/kindeditor-min.js'></script>
|
||||
<script src='<?php echo $jsRoot;?>kindeditor/lang/<?php echo $editorLang;?>.js'></script>
|
||||
<script>
|
||||
var editor = <?php echo json_encode($editor);?>;
|
||||
(function($) {
|
||||
var kuid = '<?php echo $uid;?>';
|
||||
var editor = <?php echo json_encode($editor);?>;
|
||||
var K = KindEditor;
|
||||
|
||||
var bugTools =
|
||||
[ 'formatblock', 'fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold', 'italic','underline', '|',
|
||||
'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', '|',
|
||||
'emoticons', 'image', 'code', 'link', '|', 'removeformat','undo', 'redo', 'fullscreen', 'source', 'about'];
|
||||
var bugTools =
|
||||
[ 'formatblock', 'fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold', 'italic','underline', '|',
|
||||
'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', '|',
|
||||
'emoticons', 'image', 'code', 'link', '|', 'removeformat','undo', 'redo', 'fullscreen', 'source', 'about'];
|
||||
var simpleTools =
|
||||
[ 'formatblock', 'fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold', 'italic','underline', '|',
|
||||
'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', '|',
|
||||
'emoticons', 'image', 'code', 'link', '|', 'removeformat','undo', 'redo', 'fullscreen', 'source', 'about'];
|
||||
var fullTools =
|
||||
[ 'formatblock', 'fontname', 'fontsize', 'lineheight', '|', 'forecolor', 'hilitecolor', '|', 'bold', 'italic','underline', 'strikethrough', '|',
|
||||
'justifyleft', 'justifycenter', 'justifyright', 'justifyfull', '|',
|
||||
'insertorderedlist', 'insertunorderedlist', '|',
|
||||
'emoticons', 'image', 'insertfile', 'hr', '|', 'link', 'unlink', '/',
|
||||
'undo', 'redo', '|', 'selectall', 'cut', 'copy', 'paste', '|', 'plainpaste', 'wordpaste', '|', 'removeformat', 'clearhtml','quickformat', '|',
|
||||
'indent', 'outdent', 'subscript', 'superscript', '|',
|
||||
'table', 'code', '|', 'pagebreak', 'anchor', '|',
|
||||
'fullscreen', 'source', 'preview', 'about'];
|
||||
var editorToolsMap = {fullTools: fullTools, simpleTools: simpleTools, bugTools: bugTools};
|
||||
|
||||
var simpleTools =
|
||||
[ 'formatblock', 'fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold', 'italic','underline', '|',
|
||||
'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', '|',
|
||||
'emoticons', 'image', 'code', 'link', '|', 'removeformat','undo', 'redo', 'fullscreen', 'source', 'about'];
|
||||
|
||||
var fullTools =
|
||||
[ 'formatblock', 'fontname', 'fontsize', 'lineheight', '|', 'forecolor', 'hilitecolor', '|', 'bold', 'italic','underline', 'strikethrough', '|',
|
||||
'justifyleft', 'justifycenter', 'justifyright', 'justifyfull', '|',
|
||||
'insertorderedlist', 'insertunorderedlist', '|',
|
||||
'emoticons', 'image', 'insertfile', 'hr', '|', 'link', 'unlink', '/',
|
||||
'undo', 'redo', '|', 'selectall', 'cut', 'copy', 'paste', '|', 'plainpaste', 'wordpaste', '|', 'removeformat', 'clearhtml','quickformat', '|',
|
||||
'indent', 'outdent', 'subscript', 'superscript', '|',
|
||||
'table', 'code', '|', 'pagebreak', 'anchor', '|',
|
||||
'fullscreen', 'source', 'preview', 'about'];
|
||||
|
||||
$(document).ready(initKindeditor);
|
||||
function initKindeditor(afterInit)
|
||||
{
|
||||
$(':input[type=submit]').next('#uid').remove();
|
||||
$(':input[type=submit]').after("<input type='hidden' id='uid' name='uid' value=" + kuid + ">");
|
||||
var nextFormControl = 'input:not([type="hidden"]), textarea:not(.ke-edit-textarea), button[type="submit"], select';
|
||||
$.each(editor.id, function(key, editorID)
|
||||
// Kindeditor default options
|
||||
var editorDefaults =
|
||||
{
|
||||
editorTool = simpleTools;
|
||||
if(editor.tools == 'bugTools') editorTool = bugTools;
|
||||
if(editor.tools == 'fullTools') editorTool = fullTools;
|
||||
cssPath: [config.themeRoot + 'zui/css/min.css'],
|
||||
width: '100%',
|
||||
height: '200px',
|
||||
filterMode: true,
|
||||
bodyClass: 'article-content',
|
||||
urlType: 'absolute',
|
||||
uploadJson: createLink('file', 'ajaxUpload', 'uid=' + kuid),
|
||||
allowFileManager: true,
|
||||
langType: '<?php echo $editorLang?>',
|
||||
};
|
||||
|
||||
var K = KindEditor, $editor = $('#' + editorID);
|
||||
var placeholderText = $editor.attr('placeholder');
|
||||
if(placeholderText == undefined) placeholderText = '';
|
||||
var pasted;
|
||||
var options =
|
||||
window.editor = {};
|
||||
var nextFormControl = 'input:not([type="hidden"]), textarea:not(.ke-edit-textarea), button[type="submit"], select';
|
||||
|
||||
// Init kindeditor
|
||||
var setKindeditor = function(element, options)
|
||||
{
|
||||
var $editor = $(element);
|
||||
var pasted = false;
|
||||
options = $.extend({}, editorDefaults, $editor.data(), options);
|
||||
var editorID = $editor.attr('id');
|
||||
if(editorID === undefined)
|
||||
{
|
||||
cssPath:[themeRoot + 'zui/css/min.css'],
|
||||
width:'100%',
|
||||
height:'200px',
|
||||
items:editorTool,
|
||||
filterMode: true,
|
||||
bodyClass:'article-content',
|
||||
urlType:'absolute',
|
||||
uploadJson: createLink('file', 'ajaxUpload', 'uid=' + kuid),
|
||||
allowFileManager:true,
|
||||
langType:'<?php echo $editorLang?>',
|
||||
editorID = 'kindeditor-' + $.zui.uuid();
|
||||
$editor.attr('id', editorID);
|
||||
}
|
||||
|
||||
var editorTool = editorToolsMap[options.tools || editor.tools] || simpleTools;
|
||||
var placeholder = $editor.attr('placeholder') || options.placeholder || '';
|
||||
|
||||
$.extend(options,
|
||||
{
|
||||
items: editorTool,
|
||||
afterChange: function(){$editor.change().hide();},
|
||||
afterCreate : function()
|
||||
{
|
||||
@@ -95,10 +103,10 @@ function initKindeditor(afterInit)
|
||||
})
|
||||
}, 10);
|
||||
}
|
||||
if(pasted && placeholderText.indexOf('<?php echo $this->lang->noticePasteImg?>') < 0)
|
||||
if(pasted && placeholder.indexOf('<?php echo $this->lang->noticePasteImg?>') < 0)
|
||||
{
|
||||
if(placeholderText) placeholderText += '<br />';
|
||||
placeholderText += ' <?php echo $this->lang->noticePasteImg?>';
|
||||
if(placeholder) placeholder += '<br />';
|
||||
placeholder += ' <?php echo $this->lang->noticePasteImg?>';
|
||||
}
|
||||
|
||||
/* Paste in chrome.*/
|
||||
@@ -161,7 +169,7 @@ function initKindeditor(afterInit)
|
||||
/* Add for placeholder. */
|
||||
$(this.edit.doc).find('body').after('<span class="kindeditor-ph" style="width:100%;color:#888; padding:5px 5px 5px 7px; background-color:transparent; position:absolute;z-index:10;top:2px;border:0;overflow:auto;resize:none; font-size:13px;"></span>');
|
||||
var $placeholder = $(this.edit.doc).find('.kindeditor-ph');
|
||||
$placeholder.html(placeholderText);
|
||||
$placeholder.html(placeholder);
|
||||
$placeholder.css('pointerEvents', 'none');
|
||||
$placeholder.click(function(){frame.doc.body.focus()});
|
||||
if(frame.html() != '') $placeholder.hide();
|
||||
@@ -197,17 +205,44 @@ function initKindeditor(afterInit)
|
||||
if(keditor) keditor.focus();
|
||||
else if($next.hasClass('chosen')) $next.trigger('chosen:activate');
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
try
|
||||
{
|
||||
if(!window.editor) window.editor = {};
|
||||
var keditor = K.create('#' + editorID, options);
|
||||
window.editor['#'] = window.editor[editorID] = keditor;
|
||||
$editor.data('keditor', keditor);
|
||||
return keditor;
|
||||
}
|
||||
catch(e){}
|
||||
});
|
||||
catch(e){return false;}
|
||||
};
|
||||
|
||||
if($.isFunction(afterInit)) afterInit();
|
||||
}
|
||||
// Init kindeditor with jquery way
|
||||
$.fn.kindeditor = function(options)
|
||||
{
|
||||
return this.each(function()
|
||||
{
|
||||
setKindeditor(this, options);
|
||||
});
|
||||
};
|
||||
|
||||
// Init all kindeditor
|
||||
var initKindeditor = function(afterInit)
|
||||
{
|
||||
var $submitBtn = $('form :input[type=submit]');
|
||||
if($submitBtn.length)
|
||||
{
|
||||
$submitBtn.next('#uid').remove();
|
||||
$submitBtn.after("<input type='hidden' id='uid' name='uid' value=" + kuid + ">");
|
||||
}
|
||||
if($.isFunction(afterInit)) afterInit();
|
||||
$.each(editor.id, function(key, editorID)
|
||||
{
|
||||
setKindeditor('#' + editorID);
|
||||
});
|
||||
};
|
||||
|
||||
// Init all kindeditors when document is ready
|
||||
$(initKindeditor);
|
||||
}(jQuery));
|
||||
</script>
|
||||
|
||||
@@ -25,4 +25,5 @@ else
|
||||
?>
|
||||
<style>
|
||||
#contactListMenu + .chosen-container {min-width: 100px;}
|
||||
</style>
|
||||
#contactListMenu_chosen > a {border-top: 0px;}
|
||||
</style>
|
||||
|
||||
@@ -28,6 +28,7 @@ $config->project->editor->activate = array('id' => 'comment', 'tools' => 'simple
|
||||
$config->project->editor->close = array('id' => 'comment', 'tools' => 'simpleTools');
|
||||
$config->project->editor->start = array('id' => 'comment', 'tools' => 'simpleTools');
|
||||
$config->project->editor->suspend = array('id' => 'comment', 'tools' => 'simpleTools');
|
||||
$config->project->editor->tree = array('id' => 'comment', 'tools' => 'simpleTools');
|
||||
|
||||
$config->project->search['module'] = 'task';
|
||||
$config->project->search['fields']['name'] = $lang->task->name;
|
||||
|
||||
@@ -49,3 +49,4 @@ h2.detail-title .label-id, h2.detail-title .label {top: -1px}
|
||||
.detail + .detail {padding-top: 10px;}
|
||||
.btn-comment.pull-right {z-index: 10;}
|
||||
details .btn-comment.pull-right {right: 30px;}
|
||||
.modal-comment .modal-dialog {min-width: 600px; margin-left: -200px!important;}
|
||||
+105
-95
@@ -1,108 +1,118 @@
|
||||
$(function()
|
||||
{
|
||||
var $taskTree = $('#taskTree').tree(
|
||||
var $taskTree = $('#taskTree').tree(
|
||||
{
|
||||
name: 'taskTree',
|
||||
initialState: 'preserve'
|
||||
name: 'taskTree',
|
||||
initialState: 'preserve'
|
||||
});
|
||||
|
||||
var taskTree = $taskTree.data('zui.tree');
|
||||
var taskTree = $taskTree.data('zui.tree');
|
||||
|
||||
// 根据列表展开树形列表
|
||||
var showTreeLevel = function(level)
|
||||
{
|
||||
$('.btn-tree-view').removeClass('btn-active-text');
|
||||
// 根据列表展开树形列表
|
||||
var showTreeLevel = function(level)
|
||||
{
|
||||
$('.btn-tree-view').removeClass('btn-active-text');
|
||||
|
||||
if (level === 'root')
|
||||
{
|
||||
$('[data-type=root]').addClass('btn-active-text');
|
||||
taskTree.collapse();
|
||||
}
|
||||
else if (level === 'all')
|
||||
{
|
||||
$('[data-type=all]').addClass('btn-active-text');
|
||||
taskTree.collapse();
|
||||
taskTree.expand($taskTree.find('li.has-list'), true);
|
||||
}
|
||||
else if (level === 'task')
|
||||
{
|
||||
$('[data-type=task]').addClass('btn-active-text');
|
||||
taskTree.collapse();
|
||||
taskTree.show($taskTree.find('li.item-task').parent().parent(), true);
|
||||
}
|
||||
else if (level === 'story')
|
||||
{
|
||||
taskTree.collapse();
|
||||
taskTree.show($taskTree.find('li.item-story').parent().parent(), true);
|
||||
$('[data-type=story]').addClass('btn-active-text');
|
||||
}
|
||||
$('#main').toggleClass('tree-show-root', level === 'root');
|
||||
};
|
||||
|
||||
$(document).on('click', '.btn-tree-view', function()
|
||||
{
|
||||
showTreeLevel($(this).data('type'));
|
||||
return false;
|
||||
});
|
||||
|
||||
// 第一次访问时,展示所以节点
|
||||
if (!$.zui.store.get('zui.tree::taskTree#taskTree')) showTreeLevel('all');
|
||||
|
||||
// 在右侧显示内容
|
||||
var $itemContent = $('#itemContent');
|
||||
var $mainContent = $('#mainContent');
|
||||
var isItemLoading = false, lastAjaxRequest;
|
||||
var showItem = function(url, loadingText)
|
||||
{
|
||||
$.zui.messager.hide();
|
||||
$mainContent.toggleClass('hide-side', !url);
|
||||
if (!url)
|
||||
{
|
||||
$taskTree.find('li.selected').removeClass('selected');
|
||||
isItemLoading = false;
|
||||
return;
|
||||
}
|
||||
if (lastAjaxRequest) lastAjaxRequest.abort();
|
||||
$itemContent.empty().addClass('loading').attr('data-loading', loadingText || '');
|
||||
isItemLoading = true;
|
||||
lastAjaxRequest = $.ajax(
|
||||
{
|
||||
url: url,
|
||||
success: function(data)
|
||||
if (level === 'root')
|
||||
{
|
||||
if (!isItemLoading) return;
|
||||
$itemContent.html(data).removeClass('loading');
|
||||
lastAjaxRequest = null;
|
||||
isItemLoading = false;
|
||||
$itemContent.find('.text-limit').textLimit();
|
||||
$itemContent.find('.histories').histories();
|
||||
$itemContent.find('.iframe').modalTrigger();
|
||||
},
|
||||
error: function()
|
||||
{
|
||||
$mainContent.addClass('hide-side');
|
||||
isItemLoading = false;
|
||||
$.zui.messager.danger(window.lang.timeout);
|
||||
$('[data-type=root]').addClass('btn-active-text');
|
||||
taskTree.collapse();
|
||||
}
|
||||
});
|
||||
};
|
||||
else if (level === 'all')
|
||||
{
|
||||
$('[data-type=all]').addClass('btn-active-text');
|
||||
taskTree.collapse();
|
||||
taskTree.expand($taskTree.find('li.has-list'), true);
|
||||
}
|
||||
else if (level === 'task')
|
||||
{
|
||||
$('[data-type=task]').addClass('btn-active-text');
|
||||
taskTree.collapse();
|
||||
taskTree.show($taskTree.find('li.item-task').parent().parent(), true);
|
||||
}
|
||||
else if (level === 'story')
|
||||
{
|
||||
taskTree.collapse();
|
||||
taskTree.show($taskTree.find('li.item-story').parent().parent(), true);
|
||||
$('[data-type=story]').addClass('btn-active-text');
|
||||
}
|
||||
$('#main').toggleClass('tree-show-root', level === 'root');
|
||||
};
|
||||
|
||||
var stopPropagation = function(e) {e.stopPropagation();};
|
||||
$taskTree.on('click', '.tree-link', function(e)
|
||||
{
|
||||
var $link = $(this);
|
||||
showItem($link.attr('href'), $link.find('.title').text());
|
||||
$taskTree.find('li.selected').removeClass('selected');
|
||||
$link.closest('li').addClass('selected');
|
||||
e.preventDefault();
|
||||
stopPropagation(e);
|
||||
});
|
||||
$(document).on('click', '.btn-tree-view', function()
|
||||
{
|
||||
showTreeLevel($(this).data('type'));
|
||||
return false;
|
||||
});
|
||||
|
||||
$itemContent.on('click', stopPropagation);
|
||||
$taskTree.on('click', stopPropagation);
|
||||
// 第一次访问时,展示所以节点
|
||||
if (!$.zui.store.get('zui.tree::taskTree#taskTree')) showTreeLevel('all');
|
||||
|
||||
$(document).on('click', function()
|
||||
{
|
||||
showItem(false);
|
||||
});
|
||||
// 在右侧显示内容
|
||||
var $itemContent = $('#itemContent');
|
||||
var $mainContent = $('#mainContent');
|
||||
var isItemLoading = false, lastAjaxRequest;
|
||||
var showItem = function(url, loadingText)
|
||||
{
|
||||
$.zui.messager.hide();
|
||||
$mainContent.toggleClass('hide-side', !url);
|
||||
if (!url)
|
||||
{
|
||||
$taskTree.find('li.selected').removeClass('selected');
|
||||
isItemLoading = false;
|
||||
$.zui.store.set('project/tree/showItem', false);
|
||||
return;
|
||||
}
|
||||
if (lastAjaxRequest) lastAjaxRequest.abort();
|
||||
$itemContent.empty().addClass('loading').attr('data-loading', loadingText || '');
|
||||
isItemLoading = true;
|
||||
lastAjaxRequest = $.ajax(
|
||||
{
|
||||
url: url,
|
||||
success: function(data)
|
||||
{
|
||||
if (!isItemLoading) return;
|
||||
$itemContent.html(data).removeClass('loading');
|
||||
lastAjaxRequest = null;
|
||||
isItemLoading = false;
|
||||
$itemContent.find('.text-limit').textLimit();
|
||||
$itemContent.find('.histories').histories();
|
||||
$itemContent.find('.iframe').modalTrigger();
|
||||
$.zui.store.set('project/tree/showItem', url);
|
||||
},
|
||||
error: function()
|
||||
{
|
||||
$mainContent.addClass('hide-side');
|
||||
isItemLoading = false;
|
||||
$.zui.messager.danger(window.lang.timeout);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
var stopPropagation = function(e) {e.stopPropagation();};
|
||||
$taskTree.on('click', '.tree-link', function(e)
|
||||
{
|
||||
var $link = $(this);
|
||||
showItem($link.attr('href'), $link.find('.title').text());
|
||||
$taskTree.find('li.selected').removeClass('selected');
|
||||
$link.closest('li').addClass('selected');
|
||||
e.preventDefault();
|
||||
stopPropagation(e);
|
||||
});
|
||||
|
||||
$itemContent.on('click', stopPropagation);
|
||||
$taskTree.on('click', stopPropagation);
|
||||
|
||||
$(document).on('click', function()
|
||||
{
|
||||
showItem(false);
|
||||
}).on('ready', function()
|
||||
{
|
||||
var lastUrl = $.zui.store.get('project/tree/showItem');
|
||||
if(lastUrl)
|
||||
{
|
||||
showItem(lastUrl);
|
||||
$taskTree.find('.tree-link[href="' + lastUrl + '"]').closest('li').addClass('selected');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<div id="mainMenu" class="clearfix">
|
||||
<div class="btn-toolbar pull-left">
|
||||
<?php foreach ($lang->project->treeLevel as $name => $btnLevel):?>
|
||||
|
||||
@@ -1,259 +1,223 @@
|
||||
<div class="detail">
|
||||
<h2 class="detail-title"><span class="label-id"><?php echo $story->id?></span> <span class="label label-story"><?php echo $lang->story->common?></span> <span class="title"><?php echo $story->title;?></span></h2>
|
||||
<div class="detail-content article-content">
|
||||
<div class="infos">
|
||||
<span class="status-draft"><span class="label label-dot"></span> <?php echo $lang->story->statusList[$story->status];?></span>
|
||||
<span><?php echo $lang->story->stage;?> <?php echo $lang->story->stageList[$story->stage];?></span>
|
||||
<span><?php echo $lang->story->estimate;?> <?php echo $story->estimate;?></span>
|
||||
</div>
|
||||
<div class="btn-toolbar">
|
||||
<?php
|
||||
$vars = "story={$story->id}";
|
||||
common::printIcon('story', 'change', $vars, $story, 'list', 'fork', '', 'btn btn-info btn-icon');
|
||||
common::printIcon('story', 'delete', $vars, $story, 'list', 'trash', 'hiddenwin', 'btn btn-info btn-icon');
|
||||
common::printIcon('story', 'review', $vars, $story, 'list', 'glasses', '', 'btn btn-info btn-icon');
|
||||
common::printIcon('story', 'close', $vars, $story, 'list', 'off', '', 'btn btn-info btn-icon iframe', true);
|
||||
common::printIcon('story', 'edit', $vars, $story, 'list', '', '', 'btn btn-info btn-icon');
|
||||
if($this->config->global->flow != 'onlyStory') common::printIcon('story', 'createCase', "productID=$story->product&branch=$story->branch&module=0&from=¶m=0&$vars", $story, 'list', 'sitemap', '', 'btn btn-info btn-icon');
|
||||
?>
|
||||
</div>
|
||||
<h2 class="detail-title"><span class="label-id"><?php echo $story->id?></span> <span class="label label-story"><?php echo $lang->story->common?></span> <span class="title"><?php echo $story->title;?></span></h2>
|
||||
<div class="detail-content article-content">
|
||||
<div class="infos">
|
||||
<span class="status-draft"><span class="label label-dot"></span> <?php echo $lang->story->statusList[$story->status];?></span>
|
||||
<span><?php echo $lang->story->stage;?> <?php echo $lang->story->stageList[$story->stage];?></span>
|
||||
<span><?php echo $lang->story->estimate;?> <?php echo $story->estimate;?></span>
|
||||
</div>
|
||||
<div class="btn-toolbar">
|
||||
<?php
|
||||
$vars = "story={$story->id}";
|
||||
common::printIcon('story', 'change', $vars, $story, 'list', 'fork', '', 'btn btn-info btn-icon');
|
||||
common::printIcon('story', 'delete', $vars, $story, 'list', 'trash', 'hiddenwin', 'btn btn-info btn-icon');
|
||||
common::printIcon('story', 'review', $vars, $story, 'list', 'glasses', '', 'btn btn-info btn-icon');
|
||||
common::printIcon('story', 'close', $vars, $story, 'list', 'off', '', 'btn btn-info btn-icon iframe', true);
|
||||
common::printIcon('story', 'edit', $vars, $story, 'list', '', '', 'btn btn-info btn-icon');
|
||||
if($this->config->global->flow != 'onlyStory') common::printIcon('story', 'createCase', "productID=$story->product&branch=$story->branch&module=0&from=¶m=0&$vars", $story, 'list', 'sitemap', '', 'btn btn-info btn-icon');
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="detail">
|
||||
<div class="detail-title"><?php echo $lang->story->legendSpec;?></div>
|
||||
<div class="detail-content article-content">
|
||||
<?php echo !empty($story->spec) ? $story->spec : "<div class='text-center text-muted'>" . $lang->noData . '</div>';?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="detail">
|
||||
<div class="detail-title"><?php echo $lang->story->legendSpec;?></div>
|
||||
<div class="detail-content article-content">
|
||||
<?php echo !empty($story->spec) ? $story->spec : "<div class='text-center text-muted'>" . $lang->noData . '</div>';?>
|
||||
</div>
|
||||
<div class="detail">
|
||||
<div class="detail-title"><?php echo $lang->story->legendVerify;?></div>
|
||||
<div class="detail-content article-content">
|
||||
<?php echo !empty($story->verify) ? $story->verify : "<div class='text-center text-muted'>" . $lang->noData . '</div>';?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="detail">
|
||||
<div class="detail-title"><?php echo $lang->story->legendVerify;?></div>
|
||||
<div class="detail-content article-content">
|
||||
<?php echo !empty($story->verify) ? $story->verify : "<div class='text-center text-muted'>" . $lang->noData . '</div>';?>
|
||||
</div>
|
||||
<?php echo $this->fetch('file', 'printFiles', array('files' => $story->files, 'fieldset' => 'true'));?>
|
||||
</div>
|
||||
<?php echo $this->fetch('file', 'printFiles', array('files' => $story->files, 'fieldset' => 'true'));?>
|
||||
|
||||
<details class="detail" open>
|
||||
<summary class="detail-title"><?php echo $lang->story->legendBasicInfo;?></summary>
|
||||
<div class="detail-content">
|
||||
<table class="table table-data">
|
||||
<tbody>
|
||||
<details class="detail" open>
|
||||
<summary class="detail-title"><?php echo $lang->story->legendBasicInfo;?></summary>
|
||||
<div class="detail-content">
|
||||
<table class="table table-data">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->product;?></th>
|
||||
<td><?php echo html::a($this->createLink('product', 'view', "productID=$story->product"), $product->name);?></td>
|
||||
</tr>
|
||||
<?php if($product->type != 'normal'):?>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->product;?></th>
|
||||
<td><?php echo html::a($this->createLink('product', 'view', "productID=$story->product"), $product->name);?></td>
|
||||
<th><?php echo sprintf($lang->product->branch, zget($lang->product->branchName, $product->type));?></th>
|
||||
<td><?php common::printLink('product', 'browse', "productID=$story->product&branch=$story->branch", $branches[$story->branch]);?></td>
|
||||
</tr>
|
||||
<?php if($product->type != 'normal'):?>
|
||||
<tr>
|
||||
<th><?php echo sprintf($lang->product->branch, zget($lang->product->branchName, $product->type));?></th>
|
||||
<td><?php common::printLink('product', 'browse', "productID=$story->product&branch=$story->branch", $branches[$story->branch]);?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->module;?></th>
|
||||
<?php
|
||||
$moduleTitle = '';
|
||||
ob_start();
|
||||
if(empty($modulePath))
|
||||
{
|
||||
$moduleTitle .= '/';
|
||||
echo "/";
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach($modulePath as $key => $module)
|
||||
{
|
||||
$moduleTitle .= $module->name;
|
||||
if(!common::printLink('product', 'browse', "productID=$story->product&branch=$story->branch&browseType=byModule¶m=$module->id", $module->name)) echo $module->name;
|
||||
if(isset($modulePath[$key + 1]))
|
||||
{
|
||||
$moduleTitle .= '/';
|
||||
echo $lang->arrow;
|
||||
}
|
||||
}
|
||||
}
|
||||
$printModule = ob_get_contents();
|
||||
ob_end_clean();
|
||||
?>
|
||||
<td title='<?php echo $moduleTitle?>'><?php echo $printModule?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->plan;?></th>
|
||||
<td>
|
||||
<?php
|
||||
if(isset($story->planTitle))
|
||||
{
|
||||
foreach($story->planTitle as $planID => $planTitle)
|
||||
{
|
||||
if(!common::printLink('productplan', 'view', "planID=$planID", $planTitle)) echo $lanTitle;
|
||||
echo '<br />';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
echo $lang->noData;
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->source;?></th>
|
||||
<td id='source'><?php echo $story->source ? $lang->story->sourceList[$story->source] : $lang->noData;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->sourceNote;?></th>
|
||||
<td><?php echo $story->sourceNote ? $story->sourceNote : $lang->noData;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->status;?></th>
|
||||
<td><span class='status-<?php echo $story->status?>'><span class="label label-dot"></span> <?php echo $lang->story->statusList[$story->status];?></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->stage;?></th>
|
||||
<td>
|
||||
<?php
|
||||
if($story->stages and $branches)
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->module;?></th>
|
||||
<?php
|
||||
$moduleTitle = '';
|
||||
ob_start();
|
||||
if(empty($modulePath))
|
||||
{
|
||||
$moduleTitle .= '/';
|
||||
echo "/";
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach($modulePath as $key => $module)
|
||||
{
|
||||
foreach($story->stages as $branch => $stage) if(isset($branches[$branch])) echo $branches[$branch] . ' : ' . $lang->story->stageList[$stage] . '<br />';
|
||||
$moduleTitle .= $module->name;
|
||||
if(!common::printLink('product', 'browse', "productID=$story->product&branch=$story->branch&browseType=byModule¶m=$module->id", $module->name)) echo $module->name;
|
||||
if(isset($modulePath[$key + 1]))
|
||||
{
|
||||
$moduleTitle .= '/';
|
||||
echo $lang->arrow;
|
||||
}
|
||||
}
|
||||
else
|
||||
}
|
||||
$printModule = ob_get_contents();
|
||||
ob_end_clean();
|
||||
?>
|
||||
<td title='<?php echo $moduleTitle?>'><?php echo $printModule?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->plan;?></th>
|
||||
<td>
|
||||
<?php
|
||||
if(isset($story->planTitle))
|
||||
{
|
||||
foreach($story->planTitle as $planID => $planTitle)
|
||||
{
|
||||
echo $lang->story->stageList[$story->stage];
|
||||
if(!common::printLink('productplan', 'view', "planID=$planID", $planTitle)) echo $lanTitle;
|
||||
echo '<br />';
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->pri;?></th>
|
||||
<td>
|
||||
<?php if($story->pri):?>
|
||||
<span class='label-pri <?php echo 'label-pri-' . $story->pri;?>' title='<?php echo zget($lang->story->priList, $story->pri)?>'><?php echo zget($lang->story->priList, $story->pri)?></span>
|
||||
<?php else:?>
|
||||
<?php echo $lang->noData;?>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->estimate;?></th>
|
||||
<td><?php echo $story->estimate;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->keywords;?></th>
|
||||
<td><?php echo $story->keywords ? $story->keywords : $lang->noData;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->legendMailto;?></th>
|
||||
<td>
|
||||
}
|
||||
else
|
||||
{
|
||||
echo $lang->noData;
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->source;?></th>
|
||||
<td id='source'><?php echo $story->source ? $lang->story->sourceList[$story->source] : $lang->noData;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->sourceNote;?></th>
|
||||
<td><?php echo $story->sourceNote ? $story->sourceNote : $lang->noData;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->status;?></th>
|
||||
<td><span class='status-<?php echo $story->status?>'><span class="label label-dot"></span> <?php echo $lang->story->statusList[$story->status];?></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->stage;?></th>
|
||||
<td>
|
||||
<?php
|
||||
$mailto = explode(',', $story->mailto);
|
||||
if(empty($mainto))
|
||||
if($story->stages and $branches)
|
||||
{
|
||||
echo $lang->noData;
|
||||
foreach($story->stages as $branch => $stage) if(isset($branches[$branch])) echo $branches[$branch] . ' : ' . $lang->story->stageList[$stage] . '<br />';
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach($mailto as $account)
|
||||
{
|
||||
if(empty($account)) continue; echo "<span>" . $users[trim($account)] . '</span> ';
|
||||
}
|
||||
echo $lang->story->stageList[$story->stage];
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</details>
|
||||
|
||||
<details class="detail" open>
|
||||
<summary class="detail-title"><?php echo $lang->story->legendProjectAndTask;?></summary>
|
||||
<div class="detail-content">
|
||||
<ul class="list-unstyled">
|
||||
<?php
|
||||
foreach($story->tasks as $projectTasks)
|
||||
{
|
||||
foreach($projectTasks as $task)
|
||||
{
|
||||
if(!isset($projects[$task->project])) continue;
|
||||
$projectName = $projects[$task->project];
|
||||
echo "<li title='$task->name'>" . html::a($this->createLink('task', 'view', "taskID=$task->id", '', true), "#$task->id $task->name", '', "class='iframe' data-width='80%'");
|
||||
echo html::a($this->createLink('project', 'browse', "projectID=$task->project"), $projectName, '', "class='text-muted'") . '</li>';
|
||||
}
|
||||
}
|
||||
if(count($story->tasks) == 0)
|
||||
{
|
||||
foreach($story->projects as $projectID => $project)
|
||||
{
|
||||
echo "<li title='$project->name'>" . html::a($this->createLink('project', 'browse', "projectID=$projectID"), $project->name, '', "class='text-muted'") . '</li>';
|
||||
}
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
</details>
|
||||
|
||||
<details class="detail" open>
|
||||
<summary class="detail-title"><?php echo $lang->story->legendRelated;?></summary>
|
||||
<div class="detail-content">
|
||||
<table class="table table-data">
|
||||
<tbody>
|
||||
<?php if($config->global->flow != 'onlyStory'):?>
|
||||
<?php if(!empty($fromBug)):?>
|
||||
<tr class='text-top'>
|
||||
<th class='w-70px'><?php echo $lang->story->legendFromBug;?></th>
|
||||
<td class='pd-0'>
|
||||
<ul class='list-unstyled'>
|
||||
<?php echo "<li title='#$fromBug->id $fromBug->title'>" . html::a($this->createLink('bug', 'view', "bugID=$fromBug->id"), "#$fromBug->id $fromBug->title") . '</li>';?>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->pri;?></th>
|
||||
<td>
|
||||
<?php if($story->pri):?>
|
||||
<span class='label-pri <?php echo 'label-pri-' . $story->pri;?>' title='<?php echo zget($lang->story->priList, $story->pri)?>'><?php echo zget($lang->story->priList, $story->pri)?></span>
|
||||
<?php else:?>
|
||||
<?php echo $lang->noData;?>
|
||||
<?php endif;?>
|
||||
<tr class='text-top'>
|
||||
<th class='w-70px'><?php echo $lang->story->legendBugs;?></th>
|
||||
<td class='pd-0'>
|
||||
<?php if(empty($bugs)):?>
|
||||
<?php echo $lang->noData;?>
|
||||
<?php else:?>
|
||||
<ul class='list-unstyled'>
|
||||
<?php
|
||||
foreach($bugs as $bug)
|
||||
{
|
||||
echo "<li title='#$bug->id $bug->title'>" . html::a($this->createLink('bug', 'view', "bugID=$bug->id"), "#$bug->id $bug->title") . '</li>';
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='text-top'>
|
||||
<th><?php echo $lang->story->legendCases;?></th>
|
||||
<td class='pd-0'>
|
||||
<?php if(empty($cases)):?>
|
||||
<?php echo $lang->noData;?>
|
||||
<?php else:?>
|
||||
<ul class='list-unstyled'>
|
||||
<?php
|
||||
foreach($cases as $case)
|
||||
{
|
||||
echo "<li title='#$case->id $case->title'>" . html::a($this->createLink('testcase', 'view', "caseID=$case->id"), "#$case->id $case->title") . '</li>';
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->estimate;?></th>
|
||||
<td><?php echo $story->estimate;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->keywords;?></th>
|
||||
<td><?php echo $story->keywords ? $story->keywords : $lang->noData;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->legendMailto;?></th>
|
||||
<td>
|
||||
<?php
|
||||
$mailto = explode(',', $story->mailto);
|
||||
if(empty($mainto))
|
||||
{
|
||||
echo $lang->noData;
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach($mailto as $account)
|
||||
{
|
||||
if(empty($account)) continue; echo "<span>" . $users[trim($account)] . '</span> ';
|
||||
}
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</details>
|
||||
|
||||
<details class="detail" open>
|
||||
<summary class="detail-title"><?php echo $lang->story->legendProjectAndTask;?></summary>
|
||||
<div class="detail-content">
|
||||
<ul class="list-unstyled">
|
||||
<?php
|
||||
foreach($story->tasks as $projectTasks)
|
||||
{
|
||||
foreach($projectTasks as $task)
|
||||
{
|
||||
if(!isset($projects[$task->project])) continue;
|
||||
$projectName = $projects[$task->project];
|
||||
echo "<li title='$task->name'>" . html::a($this->createLink('task', 'view', "taskID=$task->id", '', true), "#$task->id $task->name", '', "class='iframe' data-width='80%'");
|
||||
echo html::a($this->createLink('project', 'browse', "projectID=$task->project"), $projectName, '', "class='text-muted'") . '</li>';
|
||||
}
|
||||
}
|
||||
if(count($story->tasks) == 0)
|
||||
{
|
||||
foreach($story->projects as $projectID => $project)
|
||||
{
|
||||
echo "<li title='$project->name'>" . html::a($this->createLink('project', 'browse', "projectID=$projectID"), $project->name, '', "class='text-muted'") . '</li>';
|
||||
}
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
</details>
|
||||
|
||||
<details class="detail" open>
|
||||
<summary class="detail-title"><?php echo $lang->story->legendRelated;?></summary>
|
||||
<div class="detail-content">
|
||||
<table class="table table-data">
|
||||
<tbody>
|
||||
<?php if($config->global->flow != 'onlyStory'):?>
|
||||
<?php if(!empty($fromBug)):?>
|
||||
<tr class='text-top'>
|
||||
<th class='w-70px'><?php echo $lang->story->legendFromBug;?></th>
|
||||
<td class='pd-0'>
|
||||
<ul class='list-unstyled'>
|
||||
<?php echo "<li title='#$fromBug->id $fromBug->title'>" . html::a($this->createLink('bug', 'view', "bugID=$fromBug->id"), "#$fromBug->id $fromBug->title") . '</li>';?>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr class='text-top'>
|
||||
<th><?php echo $lang->story->legendLinkStories;?></th>
|
||||
<th class='w-70px'><?php echo $lang->story->legendBugs;?></th>
|
||||
<td class='pd-0'>
|
||||
<?php $linkStories = explode(',', $story->linkStories);?>
|
||||
<?php if(count($linkStories) < 2):?>
|
||||
<?php if(empty($bugs)):?>
|
||||
<?php echo $lang->noData;?>
|
||||
<?php else:?>
|
||||
<ul class='list-unstyled'>
|
||||
<?php
|
||||
foreach($linkStories as $linkStoryID)
|
||||
foreach($bugs as $bug)
|
||||
{
|
||||
if(isset($story->extraStories[$linkStoryID])) echo '<li>' . html::a($this->createLink('story', 'view', "storyID=$linkStoryID"), "#$linkStoryID " . $story->extraStories[$linkStoryID]) . '</li>';
|
||||
echo "<li title='#$bug->id $bug->title'>" . html::a($this->createLink('bug', 'view', "bugID=$bug->id"), "#$bug->id $bug->title") . '</li>';
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
@@ -261,85 +225,121 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='text-top'>
|
||||
<th><?php echo $lang->story->legendChildStories;?></th>
|
||||
<th><?php echo $lang->story->legendCases;?></th>
|
||||
<td class='pd-0'>
|
||||
<?php $childStories = explode(',', $story->childStories);?>
|
||||
<?php if(count($childStories) < 2):?>
|
||||
<?php if(empty($cases)):?>
|
||||
<?php echo $lang->noData;?>
|
||||
<?php else:?>
|
||||
<ul class='list-unstyled'>
|
||||
<?php
|
||||
foreach($childStories as $childStoryID)
|
||||
foreach($cases as $case)
|
||||
{
|
||||
if(isset($story->extraStories[$childStoryID])) echo '<li>' . html::a($this->createLink('story', 'view', "storyID=$childStoryID"), "#$childStoryID " . $story->extraStories[$childStoryID]) . '</li>';
|
||||
echo "<li title='#$case->id $case->title'>" . html::a($this->createLink('testcase', 'view', "caseID=$case->id"), "#$case->id $case->title") . '</li>';
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</details>
|
||||
|
||||
<details class="detail" open>
|
||||
<summary class="detail-title"><?php echo $lang->story->legendLifeTime;?></summary>
|
||||
<div class="detail-content">
|
||||
<table class="table table-data">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class='w-70px'><?php echo $lang->story->openedBy;?></th>
|
||||
<td><?php echo $users[$story->openedBy] . $lang->at . $story->openedDate;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->assignedTo;?></th>
|
||||
<td><?php echo $story->assignedTo ? $users[$story->assignedTo] . $lang->at . $story->assignedDate : $lang->noData;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->reviewedBy;?></th>
|
||||
<td>
|
||||
<?php endif;?>
|
||||
<tr class='text-top'>
|
||||
<th><?php echo $lang->story->legendLinkStories;?></th>
|
||||
<td class='pd-0'>
|
||||
<?php $linkStories = explode(',', $story->linkStories);?>
|
||||
<?php if(count($linkStories) < 2):?>
|
||||
<?php echo $lang->noData;?>
|
||||
<?php else:?>
|
||||
<ul class='list-unstyled'>
|
||||
<?php
|
||||
$reviewedBy = explode(',', $story->reviewedBy);
|
||||
if(count($reviewedBy) < 2)
|
||||
foreach($linkStories as $linkStoryID)
|
||||
{
|
||||
echo $lang->noData;
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach($reviewedBy as $account) echo ' ' . $users[trim($account)];
|
||||
if(isset($story->extraStories[$linkStoryID])) echo '<li>' . html::a($this->createLink('story', 'view', "storyID=$linkStoryID"), "#$linkStoryID " . $story->extraStories[$linkStoryID]) . '</li>';
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->reviewedDate;?></th>
|
||||
<td><?php echo $story->reviewedBy ? $story->reviewedDate : $lang->noData;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->closedBy;?></th>
|
||||
<td><?php echo $story->closedBy ? $users[$story->closedBy] . $lang->at . $story->closedDate : $lang->noData;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->closedReason;?></th>
|
||||
<td>
|
||||
</ul>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='text-top'>
|
||||
<th><?php echo $lang->story->legendChildStories;?></th>
|
||||
<td class='pd-0'>
|
||||
<?php $childStories = explode(',', $story->childStories);?>
|
||||
<?php if(count($childStories) < 2):?>
|
||||
<?php echo $lang->noData;?>
|
||||
<?php else:?>
|
||||
<ul class='list-unstyled'>
|
||||
<?php
|
||||
echo $story->closedReason ? $lang->story->reasonList[$story->closedReason] : $lang->noData;
|
||||
if(isset($story->extraStories[$story->duplicateStory]))
|
||||
foreach($childStories as $childStoryID)
|
||||
{
|
||||
echo html::a(inlink('view', "storyID=$story->duplicateStory"), '#' . $story->duplicateStory . ' ' . $story->extraStories[$story->duplicateStory]);
|
||||
if(isset($story->extraStories[$childStoryID])) echo '<li>' . html::a($this->createLink('story', 'view', "storyID=$childStoryID"), "#$childStoryID " . $story->extraStories[$childStoryID]) . '</li>';
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->lastEditedBy;?></th>
|
||||
<td><?php echo $story->lastEditedBy ? $users[$story->lastEditedBy] . $lang->at . $story->lastEditedDate : $lang->noData;?></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</details>
|
||||
</ul>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</details>
|
||||
|
||||
<?php $actionFormLink = $this->createLink('action', 'comment', "objectType=story&objectID=$story->id");?>
|
||||
<?php include '../../common/view/action.html.php';?>
|
||||
<details class="detail" open>
|
||||
<summary class="detail-title"><?php echo $lang->story->legendLifeTime;?></summary>
|
||||
<div class="detail-content">
|
||||
<table class="table table-data">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class='w-70px'><?php echo $lang->story->openedBy;?></th>
|
||||
<td><?php echo $users[$story->openedBy] . $lang->at . $story->openedDate;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->assignedTo;?></th>
|
||||
<td><?php echo $story->assignedTo ? $users[$story->assignedTo] . $lang->at . $story->assignedDate : $lang->noData;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->reviewedBy;?></th>
|
||||
<td>
|
||||
<?php
|
||||
$reviewedBy = explode(',', $story->reviewedBy);
|
||||
if(count($reviewedBy) < 2)
|
||||
{
|
||||
echo $lang->noData;
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach($reviewedBy as $account) echo ' ' . $users[trim($account)];
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->reviewedDate;?></th>
|
||||
<td><?php echo $story->reviewedBy ? $story->reviewedDate : $lang->noData;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->closedBy;?></th>
|
||||
<td><?php echo $story->closedBy ? $users[$story->closedBy] . $lang->at . $story->closedDate : $lang->noData;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->closedReason;?></th>
|
||||
<td>
|
||||
<?php
|
||||
echo $story->closedReason ? $lang->story->reasonList[$story->closedReason] : $lang->noData;
|
||||
if(isset($story->extraStories[$story->duplicateStory]))
|
||||
{
|
||||
echo html::a(inlink('view', "storyID=$story->duplicateStory"), '#' . $story->duplicateStory . ' ' . $story->extraStories[$story->duplicateStory]);
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->story->lastEditedBy;?></th>
|
||||
<td><?php echo $story->lastEditedBy ? $users[$story->lastEditedBy] . $lang->at . $story->lastEditedDate : $lang->noData;?></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</details>
|
||||
|
||||
<?php $actionFormLink = $this->createLink('action', 'comment', "objectType=story&objectID=$story->id");?>
|
||||
<?php include '../../common/view/action.html.php';?>
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
<span class="label-id"><?php echo $task->id?></span>
|
||||
<span class="label label-task"><?php echo $lang->task->common?></span>
|
||||
<span class="title">
|
||||
<?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 if(!empty($task->parent)) echo '<span class="label no-margin label-badge label-light">' . $this->lang->task->childrenAB . '</span>';?>
|
||||
<?php if(!empty($task->team)) echo '<span class="label no-margin label-badge label-light">' . $this->lang->task->multipleAB . '</span>';?>
|
||||
<?php echo isset($task->parentName) ? $task->parentName . '/' : '';?><?php echo $task->name;?>
|
||||
</span>
|
||||
</h2>
|
||||
|
||||
@@ -1589,6 +1589,7 @@ class story extends control
|
||||
$mailto = trim($mailto);
|
||||
if(isset($users[$mailto])) $story->mailto .= $users[$mailto] . ',';
|
||||
}
|
||||
$story->mailto = rtrim($story->mailto, ',');
|
||||
|
||||
$story->reviewedBy = trim(trim($story->reviewedBy), ',');
|
||||
$reviewedBys = explode(',', $story->reviewedBy);
|
||||
@@ -1598,6 +1599,7 @@ class story extends control
|
||||
$reviewedBy = trim($reviewedBy);
|
||||
if(isset($users[$reviewedBy])) $story->reviewedBy .= $users[$reviewedBy] . ',';
|
||||
}
|
||||
$story->reviewedBy = rtrim($story->reviewedBy, ',');
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
<div class='center-block mw-1400px'>
|
||||
<div class='main-header'>
|
||||
<h2><?php echo $lang->testreport->edit;?></h2>
|
||||
<div class='btn-toolbar pull-right'><?php echo html::backButton();?></div>
|
||||
<div class='btn-toolbar pull-right'><?php echo html::backButton('<i class="icon icon-back icon-sm"></i>' . $lang->goback, '', 'btn btn-link');?></div>
|
||||
</div>
|
||||
<form method='post' enctype='multipart/form-data' target='hiddenwin'>
|
||||
<div class='detail'>
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user