* improve UI of projet/tree view.

This commit is contained in:
Catouse
2018-05-23 11:43:13 +08:00
parent 9058191fcc
commit 4188bcabf5
7 changed files with 401 additions and 388 deletions
+1
View File
@@ -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;
+1
View File
@@ -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
View File
@@ -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');
}
});
});
+1
View File
@@ -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):?>
+289 -289
View File
@@ -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=&param=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=&param=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&param=$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&param=$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> &nbsp;';
}
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> &nbsp;';
}
}
?>
</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';?>
+2 -2
View File
@@ -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>
+2 -2
View File
File diff suppressed because one or more lines are too long