Merge branch release/21.7.6 of zentao/zentaopms (#11433)
This commit is contained in:
@@ -1,206 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The trash view file of action module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package action
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<div id='mainMenu' class='clearfix'>
|
||||
<div class='btn-toolbar pull-left'>
|
||||
<?php $activeClass = $currentObjectType == 'all' ? 'btn-active-text' : '';?>
|
||||
<?php echo html::a($this->createLink('action', 'trash', "objectType=all&type=$type"), "<span class='text'>" . $lang->all . "</span>", '', "class='btn btn-link $activeClass'");?>
|
||||
<?php
|
||||
/* Output the objectType order by preferredTypeConfig. */
|
||||
foreach($preferredTypeConfig as $objectType)
|
||||
{
|
||||
if(in_array($objectType, $preferredType))
|
||||
{
|
||||
$activeClass = $objectType == $currentObjectType ? 'btn-active-text' : '';
|
||||
echo html::a($this->createLink('action', 'trash', "objectType=$objectType&type=$type"), "<span class='text'>" . zget($lang->action->objectTypes, $objectType) . "</span>", '', "class='btn btn-link $activeClass'");
|
||||
unset($preferredType[$objectType]);
|
||||
}
|
||||
}
|
||||
|
||||
/* Output the remaining types which transformed from more type. */
|
||||
foreach($preferredType as $objectType)
|
||||
{
|
||||
$activeClass = $objectType == $currentObjectType ? 'btn-active-text' : '';
|
||||
echo html::a($this->createLink('action', 'trash', "objectType=$objectType&type=$type"), "<span class='text'>" . zget($lang->action->objectTypes, $objectType) . "</span>", '', "class='btn btn-link $activeClass'");
|
||||
}
|
||||
|
||||
/* Output the more types. */
|
||||
if(!empty($moreType))
|
||||
{
|
||||
$moreLabel = $lang->more;
|
||||
$moreLabelActive = '';
|
||||
if(in_array($currentObjectType, $moreType))
|
||||
{
|
||||
$moreLabel = "<span class='text'>" . zget($lang->action->objectTypes, $currentObjectType) . "</span>";
|
||||
$moreLabelActive = 'btn-active-text';
|
||||
}
|
||||
echo '<div class="btn-group" id="more">';
|
||||
echo html::a('javascript:;', $moreLabel . " <span class='caret'></span>", '', "data-toggle='dropdown' class='btn btn-link $moreLabelActive'");
|
||||
echo "<ul class='dropdown-menu'>";
|
||||
foreach($moreType as $objectType)
|
||||
{
|
||||
$activeClass = $objectType == $currentObjectType ? 'btn-active-text' : '';
|
||||
$objectName = zget($lang->action->objectTypes, $objectType, '');
|
||||
if(empty($objectName)) continue;
|
||||
|
||||
echo '<li>' . html::a($this->createLink('action', 'trash', "objectType=$objectType&type=$type"), "<span class='text'>" . $objectName . "</span>", '', "class='btn btn-link $activeClass'") . '</li>';
|
||||
}
|
||||
echo '</ul></div>';
|
||||
}
|
||||
?>
|
||||
<?php if($currentObjectType != 'all'):?>
|
||||
<a class="btn btn-link querybox-toggle" id='bysearchTab'><i class="icon icon-search muted"></i> <?php echo $lang->action->byQuery;?></a>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<div class='btn-toolbar pull-right'>
|
||||
<?php if($type == 'hidden') echo html::a(inLink('trash', "browseType=all&type=all"), $lang->goback, '', "class='btn'");?>
|
||||
<?php if($type == 'all') echo html::a(inLink('trash', "browseType=all&type=hidden"), "<i class='icon-eye-close'></i> " . $lang->action->dynamic->hidden, '', "class='btn btn-danger'");?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cell<?php if($byQuery) echo ' show';?>" id="queryBox" data-module='trash'></div>
|
||||
<div id='mainContent' class="main-row">
|
||||
<?php if(empty($trashes)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->noData;?></span></p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class='main-table' data-ride='table'>
|
||||
<table class='table has-sort-head'>
|
||||
<?php $vars = "browseType=$currentObjectType&type=$type&byQuery=$byQuery&queryID=$queryID&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}"; ?>
|
||||
<thead>
|
||||
<tr class='colhead'>
|
||||
<th class='c-object-type'><?php common::printOrderLink('objectType', $orderBy, $vars, $lang->action->objectType);?></th>
|
||||
<th class='c-id'><?php common::printOrderLink('objectID', $orderBy, $vars, $lang->idAB);?></th>
|
||||
<th><?php echo $lang->action->objectName;?></th>
|
||||
<?php if($currentObjectType == 'execution'):?>
|
||||
<th class='w-250px'><?php echo $this->lang->project->project;?></th>
|
||||
<?php endif;?>
|
||||
<?php if(strpos(',story,requirement,', ",$currentObjectType,") !== false):?>
|
||||
<th class='w-250px'><?php echo $this->lang->story->product;?></th>
|
||||
<?php endif;?>
|
||||
<?php if($currentObjectType == 'task'):?>
|
||||
<th class='w-250px'><?php echo $this->lang->task->execution;?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-user'><?php common::printOrderLink('actor', $orderBy, $vars, $lang->action->actor);?></th>
|
||||
<th class='c-full-date'><?php common::printOrderLink('date', $orderBy, $vars, $lang->action->date);?></th>
|
||||
<th class='c-actions'><?php echo $lang->actions;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($trashes as $action):?>
|
||||
<?php $module = $action->objectType == 'case' ? 'testcase' : $action->objectType;?>
|
||||
<tr>
|
||||
<td><?php echo zget($lang->action->objectTypes, $action->objectType, '');?></td>
|
||||
<td><?php echo $action->objectID;?></td>
|
||||
<?php if($action->objectType == 'scene'): ?>
|
||||
<td class='text-left'>
|
||||
<?php echo $action->objectName;?>
|
||||
</td>
|
||||
<?php else: ?>
|
||||
<td class='text-left'>
|
||||
<?php
|
||||
$params = $action->objectType == 'user' ? "account={$action->objectName}" : "id={$action->objectID}";
|
||||
$methodName = 'view';
|
||||
if($module == 'caselib')
|
||||
{
|
||||
$methodName = 'view';
|
||||
$module = 'caselib';
|
||||
}
|
||||
if($module == 'basicmeas')
|
||||
{
|
||||
$module = 'measurement';
|
||||
$methodName = 'setSQL';
|
||||
$params = "id={$action->objectID}";
|
||||
}
|
||||
if($module == 'deploystep')
|
||||
{
|
||||
$module = 'deploy';
|
||||
$methodName = 'viewStep';
|
||||
}
|
||||
if($action->objectType == 'api')
|
||||
{
|
||||
$params = "libID=0&moduelID=0&apiID={$action->objectID}";
|
||||
$methodName = 'index';
|
||||
}
|
||||
if(strpos('traincourse,traincontents', $module) !== false)
|
||||
{
|
||||
$methodName = $module == 'traincourse' ? 'viewcourse' : 'viewchapter';
|
||||
$module = 'traincourse';
|
||||
}
|
||||
if(isset($config->action->customFlows[$action->objectType]))
|
||||
{
|
||||
$flow = $config->action->customFlows[$action->objectType];
|
||||
$module = $flow->module;
|
||||
}
|
||||
if(strpos($this->config->action->noLinkModules, ",{$module},") !== false)
|
||||
{
|
||||
echo $action->objectName;
|
||||
}
|
||||
else
|
||||
{
|
||||
$tab = '';
|
||||
$canView = common::hasPriv($module, $methodName);
|
||||
if($action->objectType == 'meeting') $tab = $action->project ? "data-app='project'" : "data-app='my'";
|
||||
if($module == 'requirement') $module = 'story';
|
||||
echo $canView ? html::a($this->createLink($module, $methodName, $params), $action->objectName, '_self', "title='{$action->objectName}' $tab") : "<span title='$action->objectName'>$action->objectName</span>";
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<?php endif ?>
|
||||
<?php if($currentObjectType == 'execution'):?>
|
||||
<td class="c-name flex" title="<?php echo $projectList[$action->project]->name;?>">
|
||||
<span class="text-ellipsis"><?php echo $projectList[$action->project]->name;?></span>
|
||||
<?php if($projectList[$action->project]->deleted):?>
|
||||
<span class='label label-danger'><?php echo $this->lang->project->deleted;?></span>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
<?php endif;?>
|
||||
<?php if(strpos(',story,requirement,', ",$currentObjectType,") !== false):?>
|
||||
<td class="c-name flex" title="<?php echo $productList[$action->objectID]->productTitle;?>">
|
||||
<span class="text-ellipsis"><?php echo $productList[$action->objectID]->productTitle;?></span>
|
||||
<?php if($productList[$action->objectID]->productDeleted):?>
|
||||
<span class='label label-danger'><?php echo $this->lang->story->deleted;?></span>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
<?php endif;?>
|
||||
<?php if($currentObjectType == 'task'):?>
|
||||
<td class="c-name flex" title="<?php echo $executionList[$action->execution]->name;?>">
|
||||
<span class="text-ellipsis"><?php echo $executionList[$action->execution]->name;?></span>
|
||||
<?php if($executionList[$action->execution]->deleted):?>
|
||||
<span class='label label-danger'><?php echo $this->lang->execution->deleted;?></span>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
<?php endif;?>
|
||||
<td><?php echo zget($users, $action->actor);?></td>
|
||||
<td><?php echo $action->date;?></td>
|
||||
<td>
|
||||
<?php
|
||||
common::printLink('action', 'undelete', "actionid=$action->id&browseType=$currentObjectType", $lang->action->undelete, 'hiddenwin');
|
||||
if($type == 'all') common::printLink('action', 'hideOne', "actionid=$action->id&browseType=$currentObjectType", $lang->action->hideOne, 'hiddenwin');
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="table-footer">
|
||||
<div class="table-actions btn-toolbar" style=''>
|
||||
<?php echo html::linkButton($lang->action->hideAll, inlink('hideAll'), 'hiddenwin');?>
|
||||
<span class='table-statistic'><?php echo $lang->action->trashTips;?></span>
|
||||
</div>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,55 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The safe view file of admin module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package admin
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<div class="main-row">
|
||||
<div class='side-col' id='sidebar'>
|
||||
<div class='cell'>
|
||||
<div class='list-group'>
|
||||
<?php
|
||||
if(common::hasPriv('admin', 'safe')) echo html::a($this->createLink('admin', 'safe'), $lang->admin->safe->set);
|
||||
if(common::hasPriv('admin', 'checkWeak')) echo html::a($this->createLink('admin', 'checkWeak'), $lang->admin->safe->checkWeak, '', "class='active'");
|
||||
if(common::hasPriv('admin', 'resetPWDSetting')) echo html::a($this->createLink('admin', 'resetPWDSetting'), $lang->admin->resetPWDSetting);
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id='mainContent' class="main-col main-content">
|
||||
<div class='main-table pd-0'>
|
||||
<table class='table table-condensed table-hover table-striped table-fixed'>
|
||||
<thead>
|
||||
<th class='c-id-sm text-center'><?php echo $lang->idAB;?></th>
|
||||
<th class='c-user'><?php echo $lang->user->realname;?></th>
|
||||
<th><?php echo $lang->user->account;?></th>
|
||||
<th class='c-mobile'><?php echo $lang->user->phone;?></th>
|
||||
<th class='c-mobile'><?php echo $lang->user->mobile;?></th>
|
||||
<th class='c-text'><?php echo $lang->admin->safe->reason;?></th>
|
||||
<th class='c-actions-2'><?php echo $lang->actions;?></th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($weakUsers as $user):?>
|
||||
<tr>
|
||||
<td class='text-center'><?php echo $user->id?></td>
|
||||
<td class='text-left'><?php echo $user->realname?></td>
|
||||
<td class='text-left'><?php echo $user->account?></td>
|
||||
<td><?php echo $user->phone?></td>
|
||||
<td><?php echo $user->mobile?></td>
|
||||
<td><?php echo $lang->admin->safe->reasonList[$user->weakReason];?></td>
|
||||
<td class='c-actions text-center'><?php common::printIcon('user', 'edit', "userID=$user->id", '', 'list');?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,172 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The view file of bug module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package admin
|
||||
* @version $Id: view.html.php 2568 2012-02-09 06:56:35Z shiyangyangwork@yahoo.cn $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php js::set('hasInternet', $zentaoData->hasData);?>
|
||||
<?php js::set('isIntranet', $isIntranet);?>
|
||||
<div id='mainContent' class='main-content admin'>
|
||||
<div class="main <?php if(!$zentaoData->hasData) echo 'without-internet';?>">
|
||||
<div class="settings panel">
|
||||
<div class="panel-title mt-6"><?php echo $lang->admin->setting?></div>
|
||||
<div class="settings-list <?php if($config->vision == 'lite') echo 'lite-setting';?>">
|
||||
<?php foreach($lang->admin->menuList as $menuKey => $menu):?>
|
||||
<?php if($config->vision == 'lite' and !in_array($menuKey, $config->admin->liteMenuList)) continue;?>
|
||||
<div class="setting-box" <?php if($menu['disabled']) echo "title={$lang->admin->noPriv}";?> data-id="<?php echo $menuKey;?>">
|
||||
<button class="btn shadow-primary-hover" <?php if($menu['disabled']) echo 'disabled';?> data-link='<?php echo $menu['link'];?>'>
|
||||
<h4 class="flex align-center w-full">
|
||||
<div class="flex align-center">
|
||||
<img src="static/svg/admin-<?php echo $menuKey;?>.svg"/>
|
||||
<?php echo $menu['name'];?>
|
||||
</div>
|
||||
<?php echo html::a($config->admin->helpURL[$menuKey], "<i title='{$lang->help}' class='icon icon-help'></i> ", '_blank', 'class="text-muted setting-help" onclick="window.event.cancelBubble=true;"');?>
|
||||
</h4>
|
||||
<p class="text-muted setting-desc" title="<?php echo $menu['desc'];?>"><?php echo $menu['desc'];?></p>
|
||||
</button>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php if($zentaoData->plugins):?>
|
||||
<div class="plug panel">
|
||||
<div class="panel-title">
|
||||
<?php echo $lang->admin->pluginRecommendation;?>
|
||||
<?php echo html::a($config->admin->extensionURL, "{$lang->more} <i class='icon icon-caret-right'></i>", '_blank', 'class="more text-muted flex align-center"');?>
|
||||
</div>
|
||||
<div class="plugin-list" <?php if($langNotCN) echo 'style="flex-wrap: nowrap"';?>>
|
||||
<?php foreach($zentaoData->plugins as $plugin):?>
|
||||
<?php $pluginDesc = preg_replace('/[[:cntrl:]]/mu', '', strip_tags($plugin->abstract));?>
|
||||
<div class="plugin-item shadow-primary-hover" onclick="window.open('<?php echo $plugin->viewLink;?>')">
|
||||
<span class='ext-download'><i class='icon icon-download-alt text-primary bg-primary-100 pd-3'></i></span>
|
||||
<h4 class="plug-title" title="<?php echo $plugin->name;?>"><?php echo $plugin->name;?></h4>
|
||||
<p class='extension-desc text-muted' title="<?php echo $pluginDesc;?>"><?php echo $pluginDesc;?></p>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
|
||||
<?php if(!$langNotCN):?>
|
||||
<div class="flex bottom">
|
||||
<div class="panel official">
|
||||
<div class="panel-title"><?php echo $lang->admin->officialAccount?></div>
|
||||
<div class="flex main-panel">
|
||||
<div class="official-img"></div>
|
||||
<div class="official-content">
|
||||
<div class="title">
|
||||
<?php echo $lang->admin->followUs?>
|
||||
<?php if(!$zentaoData->hasData):?>
|
||||
<i class="icon follow-us icon-arrow-right text-primary"></i>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<div class="content"> <?php echo $lang->admin->followUsContent?></div>
|
||||
</div>
|
||||
</div>
|
||||
<?php if(!$bind and !$ignore and $zentaoData->hasData and common::hasPriv('admin', 'register')):?>
|
||||
<div class="panel-link"> <?php echo sprintf($lang->admin->notice->register, html::a(inlink('register'), $lang->admin->registerNotice->submitHere, '', 'class="text-primary"'));?></div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php if($zentaoData->classes):?>
|
||||
<div class="panel publicClass">
|
||||
<div class="panel-title">
|
||||
<?php echo $lang->admin->publicClass;?>
|
||||
<?php echo html::a($config->admin->classURL, "{$lang->more} <i class='icon icon-caret-right'></i>", '_blank', 'class="more text-muted flex align-center"');?>
|
||||
</div>
|
||||
<div class="classList flex">
|
||||
<?php foreach($zentaoData->classes as $class):?>
|
||||
<a class="classItem shadow-primary-hover" href='<?php echo $class->viewLink;?>' target='_blank'>
|
||||
<div class="imgBack">
|
||||
<div class="classImg" style="background-image: url('<?php echo $class->image;?>');"></div>
|
||||
</div>
|
||||
<div class="classContent"><?php echo $class->name;?></div>
|
||||
</a>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php if($zentaoData->hasData and !$langNotCN):?>
|
||||
<div class="side panel" style="background: #FCFDFE">
|
||||
<div class="h-56 flex align-center justify-between">
|
||||
<div class="panel-title"><?php echo $lang->admin->zentaoInfo?></div>
|
||||
<div class="time-count">
|
||||
<?php echo $lang->admin->zentaoUsed;?>
|
||||
<?php if($dateUsed->year):?>
|
||||
<span class="time-block"><?php echo $dateUsed->year;?></span><?php echo $lang->year;?>
|
||||
<?php endif;?>
|
||||
<?php if($dateUsed->month):?>
|
||||
<span class="time-block"><?php echo $dateUsed->month;?></span><?php echo $lang->admin->mon;?>
|
||||
<?php endif;?>
|
||||
<span class="time-block"><?php echo $dateUsed->day;?></span><?php echo $lang->admin->day;?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="border-gray mb-16 radius-4">
|
||||
<div class="h-40 pl-16 flex align-center justify-between">
|
||||
<div class="panel-title"><?php echo $lang->admin->updateDynamics?></div>
|
||||
<?php echo html::a($config->admin->downloadURL, "{$lang->more} <i class='icon icon-caret-right pb-3'></i>", '_blank', 'class="more text-muted flex align-center"');?>
|
||||
</div>
|
||||
<?php foreach($zentaoData->dynamics as $dynamic):?>
|
||||
<div class="dynamic-block">
|
||||
<div class="dynamic-content" title=<?php echo $dynamic->title ?>><i class="icon icon-horn text-primary pr-4 font-20"></i><?php echo html::a($dynamic->link, $dynamic->title, '_blank');?></div>
|
||||
<div class="dynamic-time"><?php echo substr($dynamic->addedDate, 0, 10);?></div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<div class="border-gray mb-16 radius-4">
|
||||
<div class="h-40 pl-16 flex align-center justify-between">
|
||||
<div class="panel-title"><?php echo $lang->admin->updatePatch?></div>
|
||||
<?php echo html::a($config->admin->patchURL, "{$lang->more} <i class='icon icon-caret-right pb-3'></i>", '_blank', 'class="more text-muted flex align-center"');?>
|
||||
</div>
|
||||
<?php foreach($zentaoData->patches as $patch):?>
|
||||
<div class="patch-block">
|
||||
<div class="title flex justify-between">
|
||||
<div class="panel-title"><?php echo $patch->name?></div>
|
||||
<a href="<?php echo $patch->viewLink;?>" class='ext-download flex align-center' target='_blank'><i class='icon icon-download-alt text-primary bg-primary-100 pd-3'></i></a>
|
||||
</div>
|
||||
<div class="patch-content"><?php echo $patch->desc?></div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<?php if(!in_array($config->edition, array('max', 'ipd'))):?>
|
||||
<div class="border-gray mb-16 radius-4">
|
||||
<div class="h-40 pl-16 flex align-center justify-between">
|
||||
<div class="panel-title"><?php echo $lang->admin->upgradeRecommend?></div>
|
||||
</div>
|
||||
<?php if($config->edition != 'biz'):?>
|
||||
<div class="upgrade-block">
|
||||
<a class="title text-primary flex justify-between" href="<?php echo $config->admin->apiRoot;?>" target="_blank">
|
||||
<div class="panel-title"><i class="icon icon-zentao text-primary pr-4 font-18"></i><?php echo $lang->admin->bizTag?></div>
|
||||
<div class="flex align-center"><div><?php echo $lang->admin->productDetail?></div><i class="icon icon-caret-right text-primary pb-3"></i></div>
|
||||
</a>
|
||||
<?php foreach($lang->admin->productFeature['biz'] as $feature):?>
|
||||
<div class="upgrade-content color-gray"><?php echo $feature;?></div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div class="upgrade-block">
|
||||
<a class="title text-primary flex justify-between" href='<?php echo $config->admin->apiRoot;?>' target="_blank">
|
||||
<div class="panel-title"><i class="icon icon-zentao text-primary pr-4 font-18"></i><?php echo $lang->admin->maxTag?></div>
|
||||
<div class="flex align-center"><div><?php echo $lang->admin->productDetail?></div><i class="icon icon-caret-right text-primary pb-3"></i></div>
|
||||
</a>
|
||||
<?php foreach($lang->admin->productFeature['max'] as $feature):?>
|
||||
<div class="upgrade-content color-gray"><?php echo $feature;?></div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,37 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The log view file of admin module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Gang Liu <liugang@cnezsoft.com>
|
||||
* @package admin
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/form.html.php';?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='main-header'>
|
||||
<h2><?php echo $lang->webhook->setting;?></h2>
|
||||
</div>
|
||||
<div class='center-block mw-700px'>
|
||||
<form id='logForm' method='post' class='form-ajax'>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th class='w-100px'><?php echo $lang->admin->days;?></th>
|
||||
<td><?php echo html::input('days', $config->admin->log->saveDays, "class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th></th>
|
||||
<td>
|
||||
<?php echo html::submitButton();?>
|
||||
<?php echo $lang->admin->info->log;?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,59 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The resetpwdsetting view file of admin module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Shujie Tian <tianshujie@easycorp.ltd>
|
||||
* @package admin
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<style>
|
||||
<?php if(!common::checkNotCN()):?>
|
||||
.mailBox {width: 45px !important;}
|
||||
<?php else:?>
|
||||
.mailBox {width: 109px !important;}
|
||||
<?php endif;?>
|
||||
.heading {padding-left: 15px;}
|
||||
</style>
|
||||
<div class="main-row">
|
||||
<div class='side-col' id='sidebar'>
|
||||
<div class='cell'>
|
||||
<div class='list-group'>
|
||||
<?php
|
||||
if(common::hasPriv('admin', 'safe')) echo html::a($this->createLink('admin', 'safe'), $lang->admin->safe->set);
|
||||
if(common::hasPriv('admin', 'checkWeak')) echo html::a($this->createLink('admin', 'checkWeak'), $lang->admin->safe->checkWeak);
|
||||
if(common::hasPriv('admin', 'resetPWDSetting')) echo html::a($this->createLink('admin', 'resetPWDSetting'), $lang->admin->resetPWDSetting, '', "class='active'");
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id='mainContent' class='main-col main-content'>
|
||||
<div class='main-header'>
|
||||
<h2><?php echo $lang->admin->resetPWDSetting;?></h2>
|
||||
</div>
|
||||
<div class='center-block'>
|
||||
<form class="load-indicator main-form form-ajax" method='post'>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th class='mailBox'><?php echo $lang->admin->resetPWDByMail;?></th>
|
||||
<td class='w-300px text-left'>
|
||||
<?php $checkedKey = isset($config->resetPWDByMail) ? $config->resetPWDByMail : 0;?>
|
||||
<?php foreach($lang->admin->safe->resetPWDList as $key => $value):?>
|
||||
<label class="radio-inline"><input type="radio" name="resetPWDByMail" value="<?php echo $key?>"<?php echo $key == $checkedKey ? " checked='checked'" : ''?> id="resetPWDByMail<?php echo $key;?>"><?php echo $value;?></label>
|
||||
<?php endforeach;?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th></th>
|
||||
<td class='form-actions'><?php echo html::submitButton();?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,110 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The safe view file of admin module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package admin
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<style>
|
||||
.table-form>tbody>tr>th {width:118px !important;}
|
||||
.icon-exclamation-sign.icon {color:#2667E3; margin-right: 8px;}
|
||||
.notice {color:#2667E3; margin-left: 12px;}
|
||||
</style>
|
||||
<?php js::set('adminLang', $lang->admin);?>
|
||||
<?php js::set('loadedGD', extension_loaded('gd') && !empty($gdInfo['FreeType Support']));?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<div id='mainMenu' class='clearfix'>
|
||||
<div class='btn-toolbar pull-left'>
|
||||
<div class='btn-toolbar pull-left'><?php // common::printAdminSubMenu('system');?></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="main-row">
|
||||
<div class='side-col' id='sidebar'>
|
||||
<div class='cell'>
|
||||
<div class='list-group'>
|
||||
<?php
|
||||
if(common::hasPriv('admin', 'safe')) echo html::a($this->createLink('admin', 'safe'), $lang->admin->safe->set, '', "class='active'");
|
||||
if(common::hasPriv('admin', 'checkWeak')) echo html::a($this->createLink('admin', 'checkWeak'), $lang->admin->safe->checkWeak);
|
||||
if(common::hasPriv('admin', 'resetPWDSetting')) echo html::a($this->createLink('admin', 'resetPWDSetting'), $lang->admin->resetPWDSetting);
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id='mainContent' class='main-col main-content'>
|
||||
<div class='center-block'>
|
||||
<form class="load-indicator main-form form-ajax" method='post'>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th class='thWidth'><?php echo $lang->admin->safe->password?></th>
|
||||
<td class='w-250px'><?php echo html::radio('mode', $lang->admin->safe->modeList, isset($config->safe->mode) ? $config->safe->mode : 0, "onclick=showModeRule(this.value)")?></td>
|
||||
<td class='notice'><?php echo !empty($config->safe->changeWeak) ? $lang->admin->safe->noticeWeakMode : $lang->admin->safe->noticeMode;?></td>
|
||||
</tr>
|
||||
<tr id='mode1Rule' class='hidden'>
|
||||
<th></th>
|
||||
<td colspan='2'>
|
||||
<i class="icon icon-exclamation-sign"></i>
|
||||
<span style='color:#5E626D;font-weight:bold;font-size:13px;'><?php echo $lang->admin->safe->modeRuleList[1] . $lang->admin->safe->noticeStrong;?></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id='mode2Rule' class='hidden'>
|
||||
<th></th>
|
||||
<td colspan='2'>
|
||||
<i class="icon icon-exclamation-sign"></i>
|
||||
<span style='color:#5E626D;font-weight:bold;font-size:13px;'><?php echo $lang->admin->safe->modeRuleList[2] . $lang->admin->safe->noticeStrong;?></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->admin->safe->weak?></th>
|
||||
<td colspan='2'><?php echo html::textarea('weak', $config->safe->weak, "class='form-control' style='height:100px'")?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->admin->safe->changeWeak?></th>
|
||||
<td colspan='2'><?php echo html::radio('changeWeak', $lang->admin->safe->modifyPasswordList, isset($config->safe->changeWeak) ? $config->safe->changeWeak : 0, "onchange='changeWeakChange(this.value)'")?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->admin->safe->modifyPasswordFirstLogin?></th>
|
||||
<td colspan='2'><?php echo html::radio('modifyPasswordFirstLogin', $lang->admin->safe->modifyPasswordList, isset($config->safe->modifyPasswordFirstLogin) ? $config->safe->modifyPasswordFirstLogin : 0)?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->admin->safe->loginCaptcha?></th>
|
||||
<td><?php echo html::radio('loginCaptcha', $lang->admin->safe->loginCaptchaList, isset($config->safe->loginCaptcha) ? $config->safe->loginCaptcha : 0)?></td>
|
||||
<td class='notice'><?php if(!extension_loaded('gd') || empty($gdInfo['FreeType Support'])) echo $lang->admin->safe->noticeGd;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan='3' class='text-center form-actions'>
|
||||
<?php echo html::submitButton();?>
|
||||
<?php echo html::backButton();?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
var mode = $("input[name='mode']:checked").val();
|
||||
showModeRule(mode);
|
||||
if(!loadedGD) $('#loginCaptcha1').attr('disabled', true);
|
||||
});
|
||||
function showModeRule(mode)
|
||||
{
|
||||
if(mode == 0)
|
||||
{
|
||||
$('#mode1Rule').addClass('hidden');
|
||||
$('#mode2Rule').addClass('hidden');
|
||||
}
|
||||
else
|
||||
{
|
||||
mode == 1 ? $('#mode1Rule').removeClass('hidden') : $('#mode1Rule').addClass('hidden');
|
||||
mode == 2 ? $('#mode2Rule').removeClass('hidden') : $('#mode2Rule').addClass('hidden');
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,83 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The setmodule view file of admin module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yuting Wang <wangyuting@cnezsoft.com>
|
||||
* @package admin
|
||||
* @version $Id: setmodule.html.php 2568 2012-02-09 06:56:35Z shiyangyangwork@yahoo.cn $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<div id='mainContent' class='main-row'>
|
||||
<div class='main-col main-content'>
|
||||
<div class='main-header'>
|
||||
<h2><?php echo $lang->admin->setModuleIndex;?></h2>
|
||||
</div>
|
||||
<form class="load-indicator main-form form-ajax" id="ajaxForm" method="post">
|
||||
<table class='table table-condensed table-bordered active-disabled table-fixed'>
|
||||
<thead class='text-center'>
|
||||
<tr>
|
||||
<th class='w-150px'><?php echo $lang->admin->setModule->module;?></th>
|
||||
<th><?php echo $lang->admin->setModule->optional;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($config->featureGroup as $group => $features):?>
|
||||
<?php if(strpos(",$disabledFeatures,", ",$group,") !== false) continue;?>
|
||||
|
||||
<?php $hasData = false;?>
|
||||
<?php foreach($features as $feature):?>
|
||||
<?php $code = $group . ucfirst($feature);?>
|
||||
<?php if(strpos(",$disabledFeatures,", ",$code,") !== false) continue;?>
|
||||
<?php $hasData = true;?>
|
||||
<?php endforeach;?>
|
||||
|
||||
<?php if($hasData):?>
|
||||
<tr>
|
||||
<td class='text-middle text-right thWidth'>
|
||||
<div class="checkbox-primary checkbox-inline checkbox-right check-all">
|
||||
<input type='checkbox' id='allChecker<?php echo $group;?>' name='allChecker'>
|
||||
<label class='text-right' for='allChecker<?php echo $group;?>'><?php echo $lang->admin->setModule->{$group};?></label>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<?php foreach($features as $feature):?>
|
||||
<?php $code = $group. ucfirst($feature);?>
|
||||
<?php if(strpos(",$disabledFeatures,", ",$code,") !== false) continue;?>
|
||||
<?php
|
||||
if($code == 'myScore')
|
||||
{
|
||||
$value = $useScore;
|
||||
}
|
||||
else
|
||||
{
|
||||
$value = strpos(",$closedFeatures,", ",$code,") === false ? '1' : '0';
|
||||
}
|
||||
?>
|
||||
<div class='group-item'>
|
||||
<?php echo html::checkbox("module[{$code}]", array('1' => $lang->admin->setModule->{$feature}), $value, "data-code='{$code}'", 'inline');?>
|
||||
<?php echo html::hidden("module[{$code}][]", $value, $value ? 'disabled' : '');?>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<?php endforeach;?>
|
||||
<tr>
|
||||
<td class='text-middle text-right thWidth'>
|
||||
<div class="checkbox-primary checkbox-inline checkbox-right check-all">
|
||||
<input type='checkbox' id='allChecker'>
|
||||
<label class='text-right' for='allChecker'><?php echo $lang->selectAll;?></label>
|
||||
</div>
|
||||
</td>
|
||||
<td><?php echo html::submitButton();?></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,54 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The sso view file of admin module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package admin
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php'; ?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<div class='heading'>
|
||||
<h4><?php echo $lang->admin->sso;?></h4>
|
||||
</div>
|
||||
</div>
|
||||
<form method='post' id='dataform'>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th class='rowhead w-150px'><?php echo $lang->sso->turnon; ?></th>
|
||||
<td><?php echo html::radio('turnon', $lang->sso->turnonList, $turnon);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class='rowhead w-120px'><?php echo $lang->sso->redirect; ?></th>
|
||||
<td><?php echo html::radio('redirect', $lang->sso->turnonList, $redirect);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->sso->addr; ?></th>
|
||||
<td><?php echo html::input('addr', $addr, "class='form-control' placeholder='{$lang->sso->addrNotice}'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->sso->code; ?></th>
|
||||
<td><?php echo html::input('code', $code, "class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->sso->key; ?></th>
|
||||
<td><?php echo html::input('key', $key, "class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan='2' class='text-center form-actions'>
|
||||
<?php echo html::submitButton();?>
|
||||
<?php echo html::backButton();?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<div class='alert alert-info mg-0'><?php echo $lang->sso->help?></div>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,105 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The tableEngine view file of admin module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL (http://zpl.pub/page/zplv12.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package admin
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='main-header'>
|
||||
<?php
|
||||
$MyISAMCount = 0;
|
||||
$engineListHtml = '';
|
||||
foreach($tableEngines as $tableName => $engine)
|
||||
{
|
||||
if($engine != 'InnoDB') $MyISAMCount ++;
|
||||
$engineListHtml .= "<li data-table='$tableName'>" . sprintf($lang->admin->engineInfo, $tableName, $engine) . "</li>\n";
|
||||
}
|
||||
?>
|
||||
<h2>
|
||||
<?php if($MyISAMCount > 0):?>
|
||||
<?php printf($lang->admin->engineSummary['hasMyISAM'], $MyISAMCount);?>
|
||||
<?php echo html::a('###', $lang->admin->changeEngine, '', "class='btn btn-sm changeEngine btn-primary' onclick='changeAllEngines()'");?>
|
||||
<?php else:?>
|
||||
<?php print($lang->admin->engineSummary['allInnoDB']);?>
|
||||
<?php endif;?>
|
||||
</h2>
|
||||
</div>
|
||||
<div>
|
||||
<ul id='engineBox'><?php echo $engineListHtml?></ul>
|
||||
</div>
|
||||
</div>
|
||||
<?php js::set('changingTable', $lang->admin->changingTable);?>
|
||||
<?php js::set('hasMyISAM', $lang->admin->engineSummary['hasMyISAM']);?>
|
||||
<script>
|
||||
var changeFails = 0;
|
||||
/**
|
||||
* Change all table engines.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function changeAllEngines()
|
||||
{
|
||||
var $engineBox = $('#engineBox');
|
||||
$('.btn.changeEngine').hide();
|
||||
$engineBox.empty();
|
||||
|
||||
changeTableEngine();
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajax change table engine.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function changeTableEngine()
|
||||
{
|
||||
var $engineBox = $('#engineBox');
|
||||
var link = createLink('admin', 'ajaxChangeTableEngine');
|
||||
$.ajax(
|
||||
{
|
||||
type: "GET",
|
||||
url: link,
|
||||
success: function(response)
|
||||
{
|
||||
response = JSON.parse(response);
|
||||
if(response == null || response.result == 'finished')
|
||||
{
|
||||
$engineBox.append("<div class='text-success'><?php echo $lang->admin->changeFinished?></div>");
|
||||
$engineBox.append("<div class='btn btn-sm'><a href='javascript:location.reload()'><?php echo $lang->refresh;?></a></div>");
|
||||
if(changeFails == 0) $('#mainContent .main-header h2').html("<?php echo $lang->admin->engineSummary['allInnoDB']?>");
|
||||
if(changeFails != 0) $('#mainContent .main-header h2').html(hasMyISAM.replace('%s', changeFails));
|
||||
}
|
||||
else
|
||||
{
|
||||
table = response.thisTable;
|
||||
if($engineBox.find('[data-table=' + table + ']').length == 0) $engineBox.append("<li data-table='" + table + "'>" + changingTable.replace('%s', table) + "</li>");
|
||||
$engineBox.find('[data-table=' + table + ']').html(response.message);
|
||||
if(response.result == 'success') $engineBox.find('[data-table=' + table + ']').addClass('text-success');
|
||||
if(response.result == 'fail') $engineBox.find('[data-table=' + table + ']').addClass('text-warning');
|
||||
|
||||
nextTable = response.nextTable;
|
||||
if(nextTable && $engineBox.find('[data-table=' + nextTable + ']').length == 0) $engineBox.append("<li data-table='" + nextTable + "'>" + changingTable.replace('%s', nextTable) + "</li>");
|
||||
|
||||
if(response.result == 'fail') changeFails += 1;
|
||||
$(document).scrollTop($(document).height());
|
||||
|
||||
changeTableEngine();
|
||||
}
|
||||
},
|
||||
error: function()
|
||||
{
|
||||
changeTableEngine();
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,228 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The create view of doc module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Jia Fu <fujia@cnezsoft.com>
|
||||
* @package doc
|
||||
* @version $Id: create.html.php 975 2010-07-29 03:30:25Z jajacn@126.com $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<?php js::set('libID', $libID);?>
|
||||
<?php
|
||||
js::set('typeOptions', $typeOptions);
|
||||
js::set('langField', $lang->struct->field);
|
||||
js::set('langDesc', $lang->struct->desc);
|
||||
js::set('structAdd', $lang->struct->add);
|
||||
js::set('structDelete', $lang->delete);
|
||||
js::set('addSubField', $lang->struct->addSubField);
|
||||
js::set('struct_field', $lang->struct->field);
|
||||
js::set('struct_desc', $lang->struct->desc);
|
||||
js::set('struct_action', $lang->struct->action);
|
||||
js::set('struct_required', $lang->struct->required);
|
||||
js::set('struct_paramsType', $lang->struct->paramsType);
|
||||
?>
|
||||
<?php js::import($jsRoot . 'vue/vue.js');?>
|
||||
<div class='modal fade' id='filterStruct'>
|
||||
<div class='modal-dialog mw-500px'>
|
||||
<div class='modal-content'>
|
||||
<div class='modal-header'>
|
||||
<button type='button' class='close' data-dismiss='modal'>
|
||||
<i class='icon icon-close'></i>
|
||||
</button>
|
||||
<h4 class='modal-title'><?php echo $lang->api->struct;?></h4>
|
||||
</div>
|
||||
<div class='modal-body'>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<td><?php echo html::select('filter', $allStruct, '', "class='form-control chosen filterSelect'");?></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<?php echo html::submitButton($lang->confirm, '', 'btn btn-wide btn-primary submit-filter');?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainContent" class="main-content">
|
||||
<div class='center-block' id="apiApp">
|
||||
<div class='main-header'>
|
||||
<h2><?php echo $lang->api->create;?></h2>
|
||||
</div>
|
||||
<form class="load-indicator main-form form-ajax" id="dataform" method='post' enctype='multipart/form-data'>
|
||||
<table class='table table-form'>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class='w-110px'><?php echo $lang->api->lib;?></th>
|
||||
<td>
|
||||
<?php echo $libName . html::hidden('lib', $libID);?>
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->module;?></th>
|
||||
<td>
|
||||
<span id='moduleBox'><?php echo html::select('module', $moduleOptionMenu, $moduleID, "class='form-control chosen'");?></span>
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->formTitle;?></th>
|
||||
<td colspan='2'><?php echo html::input('title', '', "class='form-control' required");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->path;?></th>
|
||||
<td colspan='2'>
|
||||
<div class='table-row'>
|
||||
<div class='table-col col-prefix'>
|
||||
<?php echo html::select('protocol', $lang->api->protocalOptions, 'HTTP', "class='form-control chosen'");?>
|
||||
</div>
|
||||
<div class='table-col col-prefix'>
|
||||
<?php echo html::select('method', $lang->api->methodOptions, 'GET', "class='form-control chosen'");?>
|
||||
</div>
|
||||
<div class='table-col'>
|
||||
<?php echo html::input('path', '', "class='form-control'");?>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->requestType;?></th>
|
||||
<td>
|
||||
<span id='moduleBox'><?php echo html::select('requestType', $lang->api->requestTypeOptions, 'application/json', "class='form-control chosen'");?></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->status;?></th>
|
||||
<td><?php echo html::radio('status', $lang->api->statusOptions, apiModel::STATUS_DONE);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->owner;?></th>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php echo html::select('owner', $allUsers, $user, "class='form-control chosen'");?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->header;?></th>
|
||||
<td colspan="2">
|
||||
<table class="table table-data">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-300px"><?php echo $lang->struct->field;?></th>
|
||||
<th class="w-50px"><?php echo $lang->struct->required;?></th>
|
||||
<th class="w-500px"><?php echo $lang->struct->desc;?></th>
|
||||
<th><?php echo $lang->struct->action;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="(item,key) in header">
|
||||
<td class="w-300px">
|
||||
<input type="text" placeholder="<?php echo $lang->struct->field;?>" autocomplete="off" class="form-control" v-model="item.field">
|
||||
</td>
|
||||
<td class="w-50px">
|
||||
<div class="checkbox-primary">
|
||||
<input type="checkbox" v-model="item.required">
|
||||
<label></label>
|
||||
</div>
|
||||
</td>
|
||||
<td class="w-500px">
|
||||
<input type="text" placeholder="<?php echo $lang->struct->desc;?>" autocomplete="off" class="form-control" v-model="item.desc">
|
||||
</td>
|
||||
<td>
|
||||
<button class="btn btn-link btn-icon btn-add" type="button" @click="add(header, key, 'header')"><i class="icon icon-plus"></i></button>
|
||||
<button class="btn btn-link btn-icon btn-delete" type="button" @click="del(header, key)"><i class="icon icon-close"></i></button>
|
||||
</td>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->query;?></th>
|
||||
<td colspan="2">
|
||||
<table class="table table-data">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-300px"><?php echo $lang->struct->field;?></th>
|
||||
<th class="w-50px"><?php echo $lang->struct->required;?></th>
|
||||
<th class="w-500px"><?php echo $lang->struct->desc;?></th>
|
||||
<th><?php echo $lang->struct->action;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="(item,key) in queryP">
|
||||
<td class="w-300px">
|
||||
<input type="text" placeholder="<?php echo $lang->struct->field;?>" autocomplete="off" class="form-control" v-model="item.field">
|
||||
</td>
|
||||
<td class="w-50px">
|
||||
<div class="checkbox-primary">
|
||||
<input type="checkbox" v-model="item.required">
|
||||
<label></label>
|
||||
</div>
|
||||
</td>
|
||||
<td class="w-500px">
|
||||
<input type="text" placeholder="<?php echo $lang->struct->desc;?>" autocomplete="off" class="form-control" v-model="item.desc">
|
||||
</td>
|
||||
<td>
|
||||
<button class="btn btn-link btn-icon btn-add" type="button" @click="add(queryP, key, 'query')"><i class="icon icon-plus"></i></button>
|
||||
<button class="btn btn-link btn-icon btn-delete" type="button" @click="del(queryP, key)"><i class="icon icon-close"></i></button>
|
||||
</td>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->params;?></th>
|
||||
<td colspan='2'>
|
||||
<body-field @change="changeAttr" @change-type="changeType"></body-field>
|
||||
<input type="hidden" name="params" v-model="params">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->paramsExample;?></th>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php echo html::textarea('paramsExample', '', "style='width:100%;height:200px'");?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->response;?></th>
|
||||
<td colspan='2' id='responseDiv'>
|
||||
<body-field @change="changeRes" :struct-type="'json'" :show-type="false"></body-field>
|
||||
<input type="hidden" name="response" v-model="response">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->responseExample;?></th>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php echo html::textarea('responseExample', '', "style='width:100%;height:200px'");?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id='contentBox'>
|
||||
<th><?php echo $lang->api->desc;?></th>
|
||||
<td colspan='2'>
|
||||
<div class='contenthtml'><?php echo html::textarea('desc', '', "style='width:100%;height:200px'");?></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan='3' class='text-center form-actions'>
|
||||
<?php echo html::submitButton();?>
|
||||
<?php echo html::backButton($lang->goback, "data-app='{$app->tab}' class='btn btn-back btn-wide'");?>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,83 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The createlib view of doc module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Jia Fu <fujia@cnezsoft.com>
|
||||
* @package doc
|
||||
* @version $Id: createlib.html.php 975 2010-07-29 03:30:25Z jajacn@126.com $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<?php include '../../common/view/chosen.html.php';?>
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<div id="main">
|
||||
<div class="container">
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2><?php echo $lang->api->createLib;?></h2>
|
||||
</div>
|
||||
<form class='load-indicator main-form' id="apiForm" method='post' enctype='multipart/form-data'>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->libType;?></th>
|
||||
<td>
|
||||
<span><?php echo html::radio('libType', $lang->api->libTypeList, $type, "onchange='toggleLibType(this.value)'")?></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id='productBox' class="<?php if($type != 'product') echo 'hidden';?>">
|
||||
<th><?php echo $lang->api->product;?></th>
|
||||
<td class='required'>
|
||||
<span><?php echo html::select('product', $products, $objectID, "class='form-control chosen'")?></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id='projectBox' class="<?php if($type != 'project') echo 'hidden';?>">
|
||||
<th><?php echo $lang->api->project;?></th>
|
||||
<td class='required'>
|
||||
<span><?php echo html::select('project', $projects, $objectID, "class='form-control chosen'")?></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->name?></th>
|
||||
<td style="width: 80%"><?php echo html::input('name', '', "class='form-control'")?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->baseUrl?></th>
|
||||
<td style="width: 80%"><?php echo html::input('baseUrl', '', "class='form-control' placeholder='" . $lang->api->baseUrlDesc . "'");?></td>
|
||||
</tr>
|
||||
<tr id='aclBox'>
|
||||
<th><?php echo $lang->api->control;?></th>
|
||||
<td>
|
||||
<span><?php echo html::radio('acl', $lang->api->aclList, 'open', "onchange='toggleAcl(this.value, \"lib\")'", 'block');?></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id='whiteListBox' class='hidden'>
|
||||
<th><?php echo $lang->api->whiteList;?></th>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon groups-addon'><?php echo $lang->api->group?></span>
|
||||
<?php echo html::select('groups[]', $groups, '', "class='form-control chosen' multiple")?>
|
||||
</div>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon'><?php echo $lang->api->user?></span>
|
||||
<?php echo html::select('users[]', $users, '', "class='form-control chosen' multiple")?>
|
||||
<?php echo $this->fetch('my', 'buildContactLists', "dropdownName=users&attr=data-drop_direction='up'");?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='text-center form-actions' colspan='2'><?php echo html::submitButton();?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php js::set('productLang', $lang->productCommon);?>
|
||||
<?php js::set('projectLang', $lang->projectCommon);?>
|
||||
<?php js::set('libType', $type);?>
|
||||
<?php include '../../common/view/footer.lite.html.php';?>
|
||||
@@ -1,44 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The createlib view of doc module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Jia Fu <fujia@cnezsoft.com>
|
||||
* @package doc
|
||||
* @version $Id: createlib.html.php 975 2010-07-29 03:30:25Z jajacn@126.com $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<?php include '../../common/view/chosen.html.php';?>
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<div id="main">
|
||||
<div class="container">
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2><?php echo $lang->api->createRelease;?></h2>
|
||||
</div>
|
||||
<form class='load-indicator main-form form-ajax' id="apiForm" method='post' enctype='multipart/form-data'>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->version?></th>
|
||||
<td style="width: 100%"><?php echo html::input('version', '', "class='form-control'")?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->desc;?></th>
|
||||
<td colspan='2'>
|
||||
<?php echo html::textarea('desc', '', "rows='8' class='form-control kindeditor' hidefocus='true' tabindex=''");?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='text-center form-actions' colspan='2'><?php echo html::submitButton();?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.lite.html.php';?>
|
||||
@@ -1,69 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The create struct view of doc module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Thanatos <thanatos@915.com>
|
||||
* @package doc
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/chosen.html.php';?>
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<?php js::import($jsRoot . 'vue/vue.js');?>
|
||||
<?php js::set('paramsTypeOption', $lang->api->paramsScopeOptions);?>
|
||||
<?php
|
||||
js::set('typeOptions', $typeOptions);
|
||||
js::set('structAdd', $lang->struct->add);
|
||||
js::set('addSubField', $lang->struct->addSubField);
|
||||
js::set('structDelete', $lang->delete);
|
||||
js::set('langField', $lang->struct->field);
|
||||
js::set('langDesc', $lang->struct->desc);
|
||||
js::set('struct_field', $lang->struct->field);
|
||||
js::set('struct_desc', $lang->struct->desc);
|
||||
js::set('struct_action', $lang->struct->action);
|
||||
js::set('struct_required', $lang->struct->required);
|
||||
js::set('struct_paramsType', $lang->struct->paramsType);
|
||||
js::set('struct', '');
|
||||
?>
|
||||
<div id="app">
|
||||
<div id="mainContent" class="main-content">
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2><?php echo $lang->api->createStruct;?></h2>
|
||||
</div>
|
||||
<form class="load-indicator main-form form-ajax" id="dataform" method='post' enctype='multipart/form-data'>
|
||||
<table class='table table-form'>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class='w-110px'><?php echo $lang->api->structName;?></th>
|
||||
<td><?php echo html::input('name', '', "class='form-control' required");?> </td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="w-110px"></td>
|
||||
<td colspan="2">
|
||||
<body-field @change="changeAttr"></body-field>
|
||||
<input type="hidden" name="attribute" v-model="attr">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class='w-110px'><?php echo $lang->api->desc;?></th>
|
||||
<td colspan="2"><?php echo html::textarea('desc', '', "class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan='3' class='text-center form-actions'>
|
||||
<?php echo html::submitButton();?>
|
||||
<?php if(empty($gobackLink)) echo html::backButton($lang->goback, "data-app='{$app->tab}'");?>
|
||||
<?php if(!empty($gobackLink)) echo html::a($gobackLink, $lang->goback, '', "class='btn btn-back btn-wide'");?>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,231 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The create view of doc module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Jia Fu <fujia@cnezsoft.com>
|
||||
* @package doc
|
||||
* @version $Id: create.html.php 975 2010-07-29 03:30:25Z jajacn@126.com $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<?php js::import($jsRoot . 'vue/vue.js');?>
|
||||
<?php js::set('libID', $api->lib);?>
|
||||
<?php
|
||||
js::set('typeOptions', $typeOptions);
|
||||
js::set('langField', $lang->struct->field);
|
||||
js::set('langDesc', $lang->struct->desc);
|
||||
js::set('structAdd', $lang->struct->add);
|
||||
js::set('structDelete', $lang->delete);
|
||||
js::set('addSubField', $lang->struct->addSubField);
|
||||
js::set('struct_field', $lang->struct->field);
|
||||
js::set('struct_desc', $lang->struct->desc);
|
||||
js::set('struct_action', $lang->struct->action);
|
||||
js::set('struct_required', $lang->struct->required);
|
||||
js::set('struct_paramsType', $lang->struct->paramsType);
|
||||
js::set('api', $api);
|
||||
?>
|
||||
<div class='modal fade' id='customType'>
|
||||
<div class='modal-dialog mw-500px'>
|
||||
<div class='modal-content'>
|
||||
<div class='modal-header'>
|
||||
<button type='button' class='close' data-dismiss='modal'>
|
||||
<i class='icon icon-close'></i>
|
||||
</button>
|
||||
<h4 class='modal-title'><?php echo $lang->api->customType;?></h4>
|
||||
</div>
|
||||
<div class='modal-body'>
|
||||
<textarea class="form-control customTypeTextarea" rows="10" placeholder=""></textarea>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-wide btn-warning formatCustom" style="float: left"><?php echo $lang->api->format;?></button>
|
||||
<?php echo html::submitButton($lang->confirm, '', 'btn btn-wide btn-primary submit-custom');?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainContent" class="main-content">
|
||||
<div class='center-block' id="apiApp">
|
||||
<div class='main-header'>
|
||||
<?php if($edit):?>
|
||||
<h2>
|
||||
<span class='label label-id'><?php echo $api->id;?></span>
|
||||
<?php echo html::a($this->createLink('api', 'index', "apiID=$api->id"), $api->title, '', "title='$api->title'");?>
|
||||
<small> <?php echo $lang->arrow . ' ' . $lang->api->edit;?></small>
|
||||
</h2>
|
||||
<div
|
||||
class='pull-right'><?php echo html::a('###', $lang->save, '', 'id="top-submit" class="btn btn-primary"');?></div>
|
||||
<?php else:?>
|
||||
<h2><?php echo $lang->api->create;?></h2>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<form class="load-indicator main-form form-ajax" id="dataform" method='post' enctype='multipart/form-data'>
|
||||
<table class='table table-form'>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->module;?></th>
|
||||
<td>
|
||||
<span
|
||||
id='moduleBox'><?php echo html::select('module', $moduleOptionMenu, $moduleID, "class='form-control chosen'");?></span>
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->formTitle;?></th>
|
||||
<td colspan='2'><?php echo html::input('title', $api->title, "class='form-control' required");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->path;?></th>
|
||||
<td colspan='2'><?php echo html::input('path', $api->path, "class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->protocol;?></th>
|
||||
<td><?php echo html::radio('protocol', $lang->api->protocalOptions, $api->protocol ? $api->protocol : 'HTTP');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->method;?></th>
|
||||
<td><span id='moduleBox'><?php echo html::select('method', $lang->api->methodOptions, $api->method ? $api->method : 'GET', "class='form-control chosen'");?></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->requestType;?></th>
|
||||
<td><span id='moduleBox'><?php echo html::select('requestType', $lang->api->requestTypeOptions, $api->requestType ? $api->requestType : 'application/json', "class='form-control chosen'");?></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->status;?></th>
|
||||
<td><?php echo html::radio('status', $lang->api->statusOptions, $api->status ? $api->status : apiModel::STATUS_DOING);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>
|
||||
<nobr><?php echo $lang->api->owner;?></nobr>
|
||||
</th>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php echo html::select('owner', $allUsers, $api->owner ? $api->owner : $user, "class='form-control chosen'");?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->header;?></th>
|
||||
<td colspan="2">
|
||||
<table class="table table-data">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-300px"><?php echo $lang->struct->field;?></th>
|
||||
<th class="w-50px"><?php echo $lang->struct->required;?></th>
|
||||
<th class="w-500px"><?php echo $lang->struct->desc;?></th>
|
||||
<th><?php echo $lang->struct->action;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="(item,key) in header">
|
||||
<td class="w-300px">
|
||||
<input type="text" placeholder="<?php echo $lang->struct->field;?>" autocomplete="off" class="form-control" v-model="item.field">
|
||||
</td>
|
||||
<td class="w-50px">
|
||||
<div class="checkbox-primary">
|
||||
<input type="checkbox" v-model="item.required">
|
||||
<label></label>
|
||||
</div>
|
||||
</td>
|
||||
<td class="w-500px">
|
||||
<input type="text" placeholder="<?php echo $lang->struct->desc;?>" autocomplete="off" class="form-control" v-model="item.desc">
|
||||
</td>
|
||||
<td>
|
||||
<button class="btn btn-link btn-icon btn-add" type="button" @click="add(header, key, 'header')"><i class="icon icon-plus"></i></button>
|
||||
<button class="btn btn-link btn-icon btn-delete" type="button" @click="del(header, key)"><i class="icon icon-close"></i></button>
|
||||
</td>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->query;?></th>
|
||||
<td colspan="2">
|
||||
<table class="table table-data">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="w-300px"><?php echo $lang->struct->field;?></th>
|
||||
<th class="w-50px"><?php echo $lang->struct->required;?></th>
|
||||
<th class="w-500px"><?php echo $lang->struct->desc;?></th>
|
||||
<th><?php echo $lang->struct->action;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="(item,key) in queryP">
|
||||
<td class="w-300px">
|
||||
<input type="text" placeholder="<?php echo $lang->struct->field;?>" autocomplete="off" class="form-control" v-model="queryP[key].field">
|
||||
</td>
|
||||
<td class="w-50px">
|
||||
<div class="checkbox-primary">
|
||||
<input type="checkbox" v-model="item.required">
|
||||
<label></label>
|
||||
</div>
|
||||
</td>
|
||||
<td class="w-500px">
|
||||
<input type="text" placeholder="<?php echo $lang->struct->desc;?>" autocomplete="off" class="form-control" v-model="item.desc">
|
||||
</td>
|
||||
<td>
|
||||
<button class="btn btn-link btn-icon btn-add" type="button" @click="add(queryP, key, 'query')"><i class="icon icon-plus"></i></button>
|
||||
<button class="btn btn-link btn-icon btn-delete" type="button" @click="del(queryP, key)"><i class="icon icon-close"></i></button>
|
||||
</td>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->params;?></th>
|
||||
<td colspan='2'>
|
||||
<body-field @change="changeAttr" :attr="attr" :struct-type="attrType" @change-type="changeType"></body-field>
|
||||
<input type="hidden" name="params" v-model="params">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>
|
||||
<nobr><?php echo $lang->api->paramsExample;?></nobr>
|
||||
</th>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php echo html::textarea('paramsExample', $api->paramsExample, "style='width:100%;height:200px'");?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->response;?></th>
|
||||
<td colspan='2' id='responseDiv'>
|
||||
<body-field @change="changeRes" :struct-type="'json'" :show-type="false" :attr="api.response"></body-field>
|
||||
<input type="hidden" name="response" v-model="response">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>
|
||||
<nobr><?php echo $lang->api->responseExample;?></nobr>
|
||||
</th>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php echo html::textarea('responseExample', $api->responseExample, "style='width:100%;height:200px'");?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id='contentBox'>
|
||||
<th><?php echo $lang->api->desc;?></th>
|
||||
<td colspan='2'>
|
||||
<div class='contenthtml'><?php echo html::textarea('desc', $api->desc, "style='width:100%;height:200px'");?></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan='3' class='text-center form-actions'>
|
||||
<?php echo html::submitButton();?>
|
||||
<?php echo html::hidden('editedDate', $api->editedDate);?>
|
||||
<?php if(empty($gobackLink)) echo html::backButton($lang->goback, "data-app='{$app->tab}'");?>
|
||||
<?php if(!empty($gobackLink)) echo html::a($gobackLink, $lang->goback, '', "class='btn btn-back btn-wide'");?>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,70 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The createlib view of api module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Jia Fu <fujia@cnezsoft.com>
|
||||
* @package api
|
||||
* @version $Id: editlib.html.php 975 2010-07-29 03:30:25Z jajacn@126.com $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<?php include '../../common/view/chosen.html.php';?>
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<div id="main">
|
||||
<div class="container">
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2><?php echo $lang->api->editLib;?></h2>
|
||||
</div>
|
||||
<form class='load-indicator main-form form-ajax' id="apiForm" method='post' enctype='multipart/form-data'>
|
||||
<table class='table table-form'>
|
||||
<?php if(in_array($type, array('product', 'project'))):?>
|
||||
<tr>
|
||||
<th class='w-130px'><?php echo $lang->api->{$type};?></th>
|
||||
<td><?php echo $object->name?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->name?></th>
|
||||
<td style="width: 80%"><?php echo html::input('name', $lib->name, "class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->api->baseUrl?></th>
|
||||
<td style="width: 80%"><?php echo html::input('baseUrl', $lib->baseUrl, "class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr id='aclBox'>
|
||||
<th><?php echo $lang->api->control;?></th>
|
||||
<td>
|
||||
<span><?php echo html::radio('acl', $lang->api->aclList, $lib->acl, "onchange='toggleAcl(this.value, \"lib\")'", 'block')?></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id='whiteListBox' class='<?php echo $lib->acl == 'private' ? '' : 'hidden';?>'>
|
||||
<th><?php echo $lang->api->whiteList;?></th>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon groups-addon'><?php echo $lang->api->group?></span>
|
||||
<?php echo html::select('groups[]', $groups, $lib->groups, "class='form-control chosen' multiple");?>
|
||||
</div>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon'><?php echo $lang->api->user?></span>
|
||||
<?php echo html::select('users[]', $users, $lib->users, "class='form-control chosen' multiple");?>
|
||||
<?php echo $this->fetch('my', 'buildContactLists', "dropdownName=users&attr=data-drop_direction='up'");?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='text-center form-actions' colspan='2'><?php echo html::hidden('type', $type) . html::submitButton();?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php js::set('productLang', $lang->productCommon);?>
|
||||
<?php js::set('projectLang', $lang->projectCommon);?>
|
||||
<?php include '../../common/view/footer.lite.html.php';?>
|
||||
@@ -1,72 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The create struct view of doc module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Thanatos <thanatos@915.com>
|
||||
* @package doc
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/chosen.html.php';?>
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<?php js::import($jsRoot . 'vue/vue.js');?>
|
||||
<?php js::set('paramsTypeOption', $lang->api->paramsScopeOptions);?>
|
||||
<?php
|
||||
js::set('typeOptions', $typeOptions);
|
||||
js::set('structAdd', $lang->struct->add);
|
||||
js::set('addSubField', $lang->struct->addSubField);
|
||||
js::set('structDelete', $lang->delete);
|
||||
js::set('langField', $lang->struct->field);
|
||||
js::set('langDesc', $lang->struct->desc);
|
||||
js::set('struct_field', $lang->struct->field);
|
||||
js::set('struct_desc', $lang->struct->desc);
|
||||
js::set('struct_action', $lang->struct->action);
|
||||
js::set('struct_required', $lang->struct->required);
|
||||
js::set('struct_paramsType', $lang->struct->paramsType);
|
||||
js::set('struct', $struct);
|
||||
?>
|
||||
<div id="app">
|
||||
<div id="mainContent" class="main-content">
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2>
|
||||
<?php echo $struct->name;?>
|
||||
<small><?php echo $lang->arrow . ' ' . $lang->api->editStruct;?></small>
|
||||
</h2>
|
||||
</div>
|
||||
<form class="load-indicator main-form form-ajax" id="dataform" method='post' enctype='multipart/form-data'>
|
||||
<table class='table table-form'>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class='w-110px'><?php echo $lang->api->structName;?></th>
|
||||
<td><?php echo html::input('name', $struct->name, "class='form-control' required");?></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="w-110px"></td>
|
||||
<td colspan="2">
|
||||
<body-field @change="changeAttr" :attr="struct.attribute" :struct-type="struct.structType"></body-field>
|
||||
<input type="hidden" name="attribute" v-model="attr">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class='w-110px'><?php echo $lang->api->desc;?></th>
|
||||
<td colspan="2"><?php echo html::textarea('desc', $struct->desc, "class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan='3' class='text-center form-actions'>
|
||||
<?php echo html::submitButton();?>
|
||||
<?php if(empty($gobackLink)) echo html::backButton($lang->goback, "data-app='{$app->tab}'");?>
|
||||
<?php if(!empty($gobackLink)) echo html::a($gobackLink, $lang->goback, '', "class='btn btn-back btn-wide'");?>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,91 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The index view file of doc module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package doc
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php js::set('confirmDelete', $lang->api->confirmDelete);?>
|
||||
<?php js::set('treeData', $libTree);?>
|
||||
<div id="mainMenu" class="clearfix">
|
||||
<div id="leftBar" class="btn-toolbar pull-left">
|
||||
<?php echo $objectDropdown;?>
|
||||
<?php if(!empty($libTree)):?>
|
||||
<a class="btn btn-link querybox-toggle" id='bysearchTab'><i class="icon icon-search muted"></i> <?php echo $lang->doc->searchDoc;?></a>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<div class="btn-toolbar pull-right">
|
||||
<?php
|
||||
if($libTree and common::hasPriv('api', 'struct')) echo html::a($this->createLink('api', 'struct', "libID=$libID"), "<i class='icon-treemap muted'> </i>" . $lang->api->struct, '', "class='btn btn-link'");
|
||||
if($libTree and common::hasPriv('api', 'releases')) echo html::a($this->createLink('api', 'releases', "libID=$libID", 'html', true), "<i class='icon-version muted'> </i>" . $lang->api->releases, '', "class='btn btn-link iframe' data-width='800px'");
|
||||
if($libTree and common::hasPriv('api', 'createRelease')) echo html::a($this->createLink('api', 'createRelease', "libID=$libID"), "<i class='icon-publish muted'> </i>" . $lang->api->createRelease, '', "class='btn btn-link iframe' data-width='800px'");
|
||||
if($libTree and common::hasPriv('api', 'export') and $config->edition != 'open') echo html::a($this->createLink('api', 'export', "libID=$libID&version=$version&release=$release&moduleID=$moduleID", 'html', true), "<i class='icon-export muted'> </i>" . $lang->export, '', "class='btn btn-link export' data-width='480px' id='export'");
|
||||
if(common::hasPriv('api', 'createLib')) echo html::a($this->createLink('api', 'createLib', "type=" . ($objectType ? $objectType : 'nolink') . "&objectID=$objectID"), '<i class="icon icon-plus"></i> ' . $lang->api->createLib, '', 'class="btn btn-secondary iframe" data-width="800px"');
|
||||
if($libTree and common::hasPriv('api', 'create')) echo html::a($this->createLink('api', 'create', "libID=$libID&moduleID=$moduleID"), '<i class="icon icon-plus"></i> ' . $lang->api->createApi, '', 'class="btn btn-primary"');
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<div id='mainContent' class="fade <?php if(!empty($libTree)) echo 'flex';?>">
|
||||
<?php if(empty($libTree)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->doc->noLib;?></span>
|
||||
<?php
|
||||
if(common::hasPriv('api', 'createLib')) echo html::a(helper::createLink('api', 'createLib', "type=" . ($objectType ? $objectType : 'nolink')), '<i class="icon icon-plus"></i> ' . $lang->api->createLib, '', 'class="btn btn-info iframe" data-width="800px"');
|
||||
?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div id='sideBar' class="panel side side-col col overflow-auto" data-min-width="150">
|
||||
<?php include '../../doc/view/lefttree.html.php';?>
|
||||
</div>
|
||||
<div class="sidebar-toggle flex-center"><i class="icon icon-angle-left"></i></div>
|
||||
<div class="main-col flex-full overflow-visible flex-auto overflow-visible" data-min-width="500">
|
||||
<div class="cell<?php if($browseType == 'bySearch') echo ' show';?>" style="min-width: 400px" id="queryBox" data-module='api'></div>
|
||||
<?php include 'apilist.html.php';?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<div class='hidden' id='dropDownData'>
|
||||
<ul class='libDorpdown'>
|
||||
<?php if(common::hasPriv('tree', 'browse')):?>
|
||||
<li data-method="addCataLib" data-has-children='%hasChildren%' data-libid='%libID%' data-moduleid="%moduleID%" data-type="add"><a><i class="icon icon-add-directory"></i><?php echo $lang->doc->libDropdown['addModule'];?></a></li>
|
||||
<?php endif;?>
|
||||
<?php if(common::hasPriv('api', 'editLib')):?>
|
||||
<li data-method="editLib"><a href='<?php echo inlink('editLib', 'libID=%libID%');?>' data-toggle='modal' data-type='iframe'><i class="icon icon-edit"></i><?php echo $lang->doc->libDropdown['editLib'];?></a></li>
|
||||
<?php endif;?>
|
||||
<?php if(common::hasPriv('api', 'deleteLib')):?>
|
||||
<li data-method="deleteLib"><a href='<?php echo inlink('deleteLib', 'libID=%libID%');?>' target='hiddenwin'><i class="icon icon-trash"></i><?php echo $lang->doc->libDropdown['deleteLib'];?></a></li>
|
||||
<?php endif;?>
|
||||
</ul>
|
||||
<ul class='moduleDorpdown'>
|
||||
<?php if(common::hasPriv('tree', 'browse')):?>
|
||||
<li data-method="addCataBro" data-type="add" data-id="%moduleID%"><a><i class="icon icon-add-directory"></i><?php echo $lang->doc->libDropdown['addSameModule'];?></a></li>
|
||||
<li data-method="addCataChild" data-type="add" data-id="%moduleID%" data-has-children='%hasChildren%'><a><i class="icon icon-add-directory"></i><?php echo $lang->doc->libDropdown['addSubModule'];?></a></li>
|
||||
<li data-method="editCata" class='edit-module'><a data-href='<?php echo helper::createLink('tree', 'edit', 'moduleID=%moduleID%&type=doc');?>'><i class="icon icon-edit"></i><?php echo $lang->doc->libDropdown['editModule'];?></a></li>
|
||||
<li data-method="deleteCata"><a href='<?php echo helper::createLink('tree', 'delete', 'rootID=%libID%&moduleID=%moduleID%');?>' target='hiddenwin'><i class="icon icon-trash"></i><?php echo $lang->doc->libDropdown['delModule'];?></a></li>
|
||||
<?php endif;?>
|
||||
</ul>
|
||||
</div>
|
||||
<div class='hidden' data-id="ulTreeModal">
|
||||
<ul data-id="liTreeModal" class="menu-active-primary menu-hover-primary has-input">
|
||||
<li data-id="insert" class="has-input">
|
||||
<input data-target="%target%" class="form-control input-tree"></input>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="hidden" data-id="aTreeModal">
|
||||
<a href="###" data-has-children="false" title="%name%" data-id="%id%">
|
||||
<div class="text h-full w-full flex-between overflow-hidden" style="position: relative;">
|
||||
<div>%name%</div>
|
||||
<i class="icon icon-drop icon-ellipsis-v hidden file-drop-icon" data-iscatalogue="true"></i>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,76 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The index view file of doc module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Thanatos <thanatos915@163.com>
|
||||
* @package doc
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<div id='mainContent' class='main-row fade'>
|
||||
<div class='main-col'>
|
||||
<div id='mainMenu' class='clearfix'>
|
||||
<div class='main-header'>
|
||||
<h2><?php echo $lang->api->managePublish;?></h2>
|
||||
</div>
|
||||
</div>
|
||||
<?php if(empty($releases)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->noData;?></span></p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<form class='main-table' method='post' id='releaseListForm'>
|
||||
<table class='table has-sort-head' id='releaseList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<?php $vars = "libID={$libID}&orderBy=%s";?>
|
||||
<th class='c-id'><?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?></th>
|
||||
<th class='c-version'><?php common::printOrderLink('version', $orderBy, $vars, $lang->api->version);?></th>
|
||||
<th class='c-name'><?php echo $lang->api->desc;?></th>
|
||||
<th class='c-user'><?php common::printOrderLink('addedBy', $orderBy, $vars, $lang->api->structAddedBy);?></th>
|
||||
<th class='c-date'><?php common::printOrderLink('addedDate', $orderBy, $vars, $lang->api->structAddedDate);?></th>
|
||||
<th class='c-actions'><?php echo $lang->actions;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($releases as $release):?>
|
||||
<tr data-id="<?php echo $release->id;?>">
|
||||
<td><?php printf('%03d', $release->id);?></td>
|
||||
<td title=<?php echo $release->version;?>><?php echo $release->version;?></td>
|
||||
<td title=<?php echo $release->desc;?>><?php echo $release->desc;?></td>
|
||||
<td><?php echo zget($users, $release->addedBy, '');?></td>
|
||||
<td class="c-date"><?php echo $release->addedDate;?></td>
|
||||
<td class='c-actions'>
|
||||
<?php if(common::hasPriv('api', 'deleteRelease')) echo html::a($this->createLink('api', 'deleteRelease', "libID=$libID&id=$release->id"), '<i class="icon-trash"></i>', 'hiddenwin', "title='{$lang->api->deleteRelease}' class='btn'");?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
parent.$('#triggerModal .modal-content .modal-header .close').click(function()
|
||||
{
|
||||
parent.location.reload();
|
||||
});
|
||||
|
||||
/**
|
||||
* Remove release.
|
||||
*
|
||||
* @param int $releaseID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function removeRelease(releaseID)
|
||||
{
|
||||
$('tr[data-id=' + releaseID + ']').remove()
|
||||
}
|
||||
</script>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,75 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The index view file of doc module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Thanatos <thanatos915@163.com>
|
||||
* @package doc
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<div id='mainContent' class='main-row fade'>
|
||||
<div class='main-col'>
|
||||
<div class="cell" id="queryBox" data-module='user'></div>
|
||||
<div id='mainMenu' class='clearfix'>
|
||||
<div class='btn-toolbar pull-left leftBar'>
|
||||
<?php $gobackLink = $this->session->structList ? $this->session->structList : inlink('struct', "libID=$libID");?>
|
||||
<?php echo html::a($gobackLink, "<i class='icon-back'></i> " . $lang->goback, '', "class='btn btn-link'");?>
|
||||
<div class='divider'></div>
|
||||
<div class='page-title'>
|
||||
<span class='text'><?php echo $lang->struct->list;?></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class='btn-toolbar pull-right'>
|
||||
<?php common::printLink('api', 'createStruct', "libID=$libID", "<i class='icon icon-plus'></i> " . $lang->api->createStruct, '', "class='btn btn-primary create-user-btn'");?>
|
||||
</div>
|
||||
</div>
|
||||
<?php if(empty($structs)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->api->noStruct;?></span>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<form class='main-table table-user' data-ride='table' method='post' data-checkable='false' id='userListForm'>
|
||||
<table class='table has-sort-head' id='userList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<?php $vars = "libID={$libID}&releaseID=$releaseID&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}";?>
|
||||
<th class='c-id'><?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?></th>
|
||||
<th class='c-type'><?php common::printOrderLink('type', $orderBy, $vars, $lang->api->structType);?></th>
|
||||
<th class='c-name'><?php echo $lang->api->structName;?></th>
|
||||
<th class='c-user'><?php common::printOrderLink('addedBy', $orderBy, $vars, $lang->api->structAddedBy);?></th>
|
||||
<th class='c-date'><?php common::printOrderLink('addedDate', $orderBy, $vars, $lang->api->structAddedDate);?></th>
|
||||
<th class='c-actions-2'><?php echo $lang->actions;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($structs as $struct):?>
|
||||
<tr>
|
||||
<td><?php printf('%03d', $struct->id);?></td>
|
||||
<td><?php echo $struct->type;?></td>
|
||||
<td class='c-name' title="<?php echo $struct->name;?>"><?php echo $struct->name;?></td>
|
||||
<td><?php echo $struct->addedName;?></td>
|
||||
<td><?php echo formatTime($struct->addedDate, 'Y-m-d');?></td>
|
||||
<td class='c-actions'>
|
||||
<?php
|
||||
if(common::hasPriv('api', 'editStruct')) echo html::a($this->createLink('api', 'editStruct', "libID=$libID&structID=$struct->id"), '<i class="icon-edit"></i>', '', "title='{$lang->api->editStruct}' class='btn'");
|
||||
if(common::hasPriv('api', 'deleteStruct')) echo html::a($this->createLink('api', 'deleteStruct', "libID=$libID&structID=$struct->id"), '<i class="icon-trash"></i>', 'hiddenwin', "title='{$lang->api->deleteStruct}' class='btn'");
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class='table-footer'>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,46 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The index view file of doc module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package doc
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<?php js::set('confirmDelete', $lang->api->confirmDelete);?>
|
||||
<?php js::set('treeData', $libTree);?>
|
||||
<?php js::set('apiID', $apiID);?>
|
||||
<style>.panel-body{min-height: 180px}</style>
|
||||
<div id="mainMenu" class="clearfix">
|
||||
<div id="leftBar" class="btn-toolbar pull-left">
|
||||
<?php echo $objectDropdown;?>
|
||||
<?php $gobackLink = $this->session->structList ? $this->session->structList : inlink('index', "libID=$libID&moduleID=$moduleID");?>
|
||||
<?php echo html::a($gobackLink, "<i class='icon-back'></i> " . $lang->goback, '', "class='btn btn-link'");?>
|
||||
</div>
|
||||
<div class="btn-toolbar pull-right">
|
||||
<?php
|
||||
if($libTree and common::hasPriv('api', 'struct')) echo html::a($this->createLink('api', 'struct', "libID=$libID"), "<i class='icon-treemap muted'> </i>" . $lang->api->struct, '', "class='btn btn-link'");
|
||||
if($libTree and common::hasPriv('api', 'releases')) echo html::a($this->createLink('api', 'releases', "libID=$libID", 'html', true), "<i class='icon-version muted'> </i>" . $lang->api->releases, '', "class='btn btn-link iframe' data-width='800px'");
|
||||
if($libTree and common::hasPriv('api', 'createRelease')) echo html::a($this->createLink('api', 'createRelease', "libID=$libID"), "<i class='icon-publish muted'> </i>" . $lang->api->createRelease, '', "class='btn btn-link iframe' data-width='800px'");
|
||||
if($objectType == 'api' and common::hasPriv('api', 'createLib')) echo html::a($this->createLink('api', 'createLib', "type=" . ($objectType ? $objectType : 'nolink') . "&objectID=$objectID"), '<i class="icon icon-plus"></i> ' . $lang->api->createLib, '', 'class="btn btn-secondary iframe" data-width="800px"');
|
||||
if($objectType != 'api' and common::hasPriv('doc', 'createLib')) echo html::a($this->createLink('doc', 'createLib', "type=" . ($objectType ? $objectType : 'nolink') . "&objectID=$objectID"), '<i class="icon icon-plus"></i> ' . $lang->api->createLib, '', 'class="btn btn-secondary iframe" data-width="800px"');
|
||||
if($libTree and common::hasPriv('api', 'create')) echo html::a($this->createLink('api', 'create', "libID=$libID&moduleID=$moduleID"), '<i class="icon icon-plus"></i> ' . $lang->api->createApi, '', 'class="btn btn-primary"');
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<div id='mainContent' class="fade flex">
|
||||
<div id='sideBar' class="panel side side-col col overflow-auto" data-min-width="150">
|
||||
<?php include '../../doc/view/lefttree.html.php';?>
|
||||
</div>
|
||||
<div class="sidebar-toggle flex-center"><i class="icon icon-angle-left"></i></div>
|
||||
<div class="main-col flex-full overflow-visible flex-auto overflow-visible" data-min-width="500">
|
||||
<div class="cell<?php if($browseType == 'bySearch') echo ' show';?>" style="min-width: 400px" id="queryBox" data-module='api'></div>
|
||||
<?php include 'apilist.html.php';?>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,140 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The view file of backup module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package backup
|
||||
* @version $Id: view.html.php 2568 2012-02-09 06:56:35Z shiyangyangwork@yahoo.cn $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php if(!empty($error)):?>
|
||||
<div id="notice" class='alert alert-success' style="margin-bottom:35px;">
|
||||
<div class="content"><i class='icon-exclamation-sign'></i> <?php echo $error;?></div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div id='mainMenu' class='clearfix'>
|
||||
<div class='btn-toolbar pull-left'><?php // common::printAdminSubMenu('system');?></div>
|
||||
</div>
|
||||
<div id='mainContent' class="main-row">
|
||||
<div class="main-col main-content">
|
||||
<div class='main-header'>
|
||||
<h2>
|
||||
<?php echo $lang->backup->history?>
|
||||
</h2>
|
||||
<div class='pull-right'>
|
||||
<?php common::printLink('backup', 'setting', '', "<i class='icon icon-cog'></i> " . $lang->backup->setting, '', "data-width='500' class='iframe btn btn-primary'");?>
|
||||
<?php
|
||||
if(common::hasPriv('backup', 'backup'))
|
||||
{
|
||||
$backupLink = helper::createLink('backup', 'backup', 'reload=yes');
|
||||
echo html::commonButton("<i class='icon icon-copy'> </i>" . $lang->backup->backup, "data-link='{$backupLink}'", 'btn btn-primary backup load-indicator');
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<table class='table table-condensed table-bordered active-disabled table-fixed'>
|
||||
<thead class="text-center">
|
||||
<tr>
|
||||
<th class='w-150px'><?php echo $lang->backup->time?></th>
|
||||
<th><?php echo $lang->backup->files?></th>
|
||||
<th class='w-100px'><?php echo $lang->backup->allCount?></th>
|
||||
<th class='w-100px'><?php echo $lang->backup->count?></th>
|
||||
<th class='w-100px'><?php echo $lang->backup->size?></th>
|
||||
<th class='w-100px'><?php echo $lang->backup->status?></th>
|
||||
<th class='actionWidth'><?php echo $lang->actions?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class='text-center'>
|
||||
<?php foreach($backups as $backupFile):?>
|
||||
<?php $rowspan = count($backupFile->files);?>
|
||||
<?php $i = 0;?>
|
||||
<?php $isPHP = false;?>
|
||||
<?php foreach($backupFile->files as $file => $summary):?>
|
||||
<?php if(!$isPHP) $isPHP = strpos($file, '.php') !== false;?>
|
||||
<tr>
|
||||
<?php if($i == 0):?>
|
||||
<td <?php if($rowspan > 1) echo "rowspan='$rowspan'"?>><?php echo date(DT_DATETIME1, $backupFile->time);?></td>
|
||||
<?php endif;?>
|
||||
<td title=<?php echo $file;?> class='text-left' style='padding-left:5px;'><?php echo $file;?></td>
|
||||
<td><?php echo zget($summary, 'allCount', '');?></td>
|
||||
<td><?php echo zget($summary, 'count', '');?></td>
|
||||
<td>
|
||||
<?php
|
||||
$size = zget($summary, 'size', 0);
|
||||
if(!empty($size)) echo $this->backup->processFileSize($size);
|
||||
?>
|
||||
</td>
|
||||
<td style='overflow:visible'>
|
||||
<?php
|
||||
$status = zget($summary, 'count', 0) == zget($summary, 'allCount', 0) ? 'success' : 'fail';
|
||||
if(!empty($summary['errorFiles'])) $status = 'fail';
|
||||
if(!empty($summary['errorFiles'])):
|
||||
?>
|
||||
<div class="dropdown dropdown-hover"><?php echo $lang->backup->statusList[$status];?> <span class="caret"></span><div class="dropdown-menu pull-right errorFiles"><?php echo $lang->backup->copiedFail . '<br />' . join('<br />', $summary['errorFiles']);?></div></div>
|
||||
<?php else:?>
|
||||
<?php echo $lang->backup->statusList[$status];?>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
<?php if($i == 0):?>
|
||||
<td <?php if($rowspan > 1) echo "rowspan='$rowspan'"?>>
|
||||
<?php
|
||||
if(common::hasPriv('backup', 'rmPHPHeader') and $isPHP)
|
||||
{
|
||||
echo html::a(inlink('rmPHPHeader', "file={$backupFile->name}"), $lang->backup->rmPHPHeader, 'hiddenwin', "class='rmPHPHeader'");
|
||||
echo "<br />";
|
||||
}
|
||||
if(common::hasPriv('backup', 'restore')) echo html::a(inlink('restore', "file={$backupFile->name}&confirm=yes"), $lang->backup->restore, 'hiddenwin', "class='restore'");
|
||||
if(common::hasPriv('backup', 'delete')) echo html::a(inlink('delete', "file=$backupFile->name"), $lang->delete, 'hiddenwin');
|
||||
?>
|
||||
</td>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
<?php $i++;?>
|
||||
<?php endforeach;?>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2>
|
||||
<span class='label label-info'>
|
||||
<?php echo $lang->backup->restoreTip;?>
|
||||
<?php printf($lang->backup->holdDays, $config->backup->holdDays)?>
|
||||
</span>
|
||||
</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal fade" id="waiting" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog w-400px">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body">
|
||||
<p><?php echo $lang->backup->waiting?></p>
|
||||
<div id='message'><?php echo sprintf($lang->backup->progressSQL, 0);?></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal fade" id="spaceConfirm" aria-hidden="true">
|
||||
<div class="modal-dialog modal-sm">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body">
|
||||
<p></p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal"><?php echo $lang->backup->cancelBackup;?></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php js::set('backup', $lang->backup->common);?>
|
||||
<?php js::set('startBackup', $lang->backup->backup);?>
|
||||
<?php js::set('getSpaceLoading', $lang->backup->getSpaceLoading);?>
|
||||
<?php js::set('rmPHPHeader', $lang->backup->rmPHPHeader);?>
|
||||
<?php js::set('confirmRestore', $lang->backup->confirmRestore);?>
|
||||
<?php js::set('restore', $lang->backup->restore);?>
|
||||
<?php js::set('backupTimeout', $lang->backup->error->timeout);?>
|
||||
<?php js::set('alertTips', $lang->backup->insufficientDisk);?>
|
||||
<?php js::set('backupError', empty($backupError) ? '' : $backupError);?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,55 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The setting view file of backup module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package backup
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='main-header'>
|
||||
<h2><?php echo $lang->backup->setting;?></h2>
|
||||
</div>
|
||||
<?php if(!empty($error)):?>
|
||||
<div id='error'><?php echo $error;?></div>
|
||||
<?php else:?>
|
||||
<form method='post' target='hiddenwin'>
|
||||
<table class='w-p100'>
|
||||
<tr>
|
||||
<td style='height:80px;vertical-align:top'>
|
||||
<div class='input-group'>
|
||||
<?php echo html::checkbox('setting', $lang->backup->settingList, isset($config->backup->setting) ? $config->backup->setting : '');?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon'><?php echo $lang->backup->settingDir;?></span>
|
||||
<?php echo html::input('settingDir', !empty($config->backup->settingDir) ? $config->backup->settingDir : $this->app->getTmpRoot() . 'backup/', "class='form-control'");?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php if(common::hasPriv('backup', 'change')):?>
|
||||
<tr>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon'><?php echo $lang->backup->change;?></span>
|
||||
<?php echo html::input('holdDays', $config->backup->holdDays, "class='form-control'");?>
|
||||
<span class='input-group-addon'><?php echo $lang->day;?></span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr><td><?php echo html::submitButton('', '', 'btn btn-primary');?></td></tr>
|
||||
</table>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.lite.html.php';?>
|
||||
|
||||
@@ -1,77 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The bug block view file of block module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php if(empty($bugs)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<style>
|
||||
.block-bugs .c-id {width: 55px;}
|
||||
.block-bugs .c-level {width: 60px;text-align: center;}
|
||||
.block-bugs .c-pri {width: 35px;text-align: center;}
|
||||
.block-bugs .c-date {width: 140px;}
|
||||
.block-bugs .c-status {width: 80px;}
|
||||
.block-bugs.block-sm .c-status {text-align: center;}
|
||||
</style>
|
||||
<div class='panel-body has-table scrollbar-hover'>
|
||||
<table class='table table-borderless table-fixed table-fixed-head table-hover tablesorter block-bugs <?php if(!$longBlock) echo 'block-sm'?>'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-id'><?php echo $lang->idAB?></th>
|
||||
<th class='c-name'><?php echo $lang->bug->title;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-level'><?php echo $lang->bug->abbr->severity?></th>
|
||||
<th class='c-pri'><?php echo $lang->priAB?></th>
|
||||
<th class='c-date'><?php echo $lang->bug->deadline;?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-status'><?php echo $lang->bug->abbr->status;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<?php
|
||||
$hasCustomSeverity = false;
|
||||
foreach($lang->bug->severityList as $severityKey => $severityValue)
|
||||
{
|
||||
if(!empty($severityKey) && (string)$severityKey != (string)$severityValue)
|
||||
{
|
||||
$hasCustomSeverity = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
?>
|
||||
<tbody>
|
||||
<?php foreach($bugs as $bug):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
?>
|
||||
<tr>
|
||||
<td class='c-id-xs'><?php echo sprintf('%03d', $bug->id);?></td>
|
||||
<td class='c-name' title='<?php echo $bug->title?>'><?php echo html::a($this->createLink('bug', 'view', "bugID=$bug->id"), $bug->title, '', "style='color: $bug->color'")?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-severity'>
|
||||
<?php if($hasCustomSeverity):?>
|
||||
<span class='<?php echo 'label-severity-custom';?>' title='<?php echo zget($lang->bug->severityList, $bug->severity);?>' data-severity='<?php echo $bug->severity;?>'><?php echo zget($lang->bug->severityList, $bug->severity, $bug->severity);?></span>
|
||||
<?php else:?>
|
||||
<span class='label-severity' title='<?php echo zget($lang->bug->severityList, $bug->severity);?>' data-severity='<?php echo $bug->severity;?>'></span>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
<td class='c-pri'><span class='label-pri label-pri-<?php echo $bug->pri?>' title='<?php echo zget($lang->bug->priList, $bug->pri);?>'><?php echo zget($lang->bug->priList, $bug->pri)?></span></td>
|
||||
<td class='c-date'><?php echo helper::isZeroDate($bug->deadline) ? '' : $bug->deadline;?></td>
|
||||
<?php endif;?>
|
||||
<?php $status = $this->processStatus('bug', $bug);?>
|
||||
<td class='c-status' title='<?php echo $status;?>'>
|
||||
<span class="status-bug status-<?php echo $bug->status?>"><?php echo $status;?></span>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -1,50 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The build block view file of block module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php if(empty($builds)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<div class='panel-body has-table scrollbar-hover'>
|
||||
<table class='table table-borderless table-hover table-fixed table-fixed-head tablesorter block-builds'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-id text-center'><?php echo $lang->idAB?></th>
|
||||
<th><?php echo $lang->build->name;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th><?php echo $lang->build->product;?></th>
|
||||
<th><?php echo $lang->build->project;?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-date'><?php echo $lang->build->date;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($builds as $build):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$buildViewLink = $this->createLink('build', 'view', "buildID={$build->id}");
|
||||
$productViewLink = $this->createLink('product', 'browse', "productID={$build->product}");
|
||||
$projectViewLink = $this->createLink('projectbuild', 'browse', "projectID={$build->project}");
|
||||
?>
|
||||
<tr <?php echo $appid?>>
|
||||
<td class='text-center'><?php echo sprintf('%03d', $build->id);?></td>
|
||||
<td title='<?php echo $build->name?>'><?php echo html::a($buildViewLink, $build->name);?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td title='<?php echo $build->productName?>'><?php echo html::a($build->shadow ? $projectViewLink : $productViewLink, $build->productName);?></td>
|
||||
<td title='<?php echo $build->projectName?>'><?php echo html::a($projectViewLink, $build->projectName);?></td>
|
||||
<?php endif;?>
|
||||
<td><?php echo $build->date?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -1,62 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The case block view file of block module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php if(empty($cases)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<div class='panel-body has-table scrollbar-hover'>
|
||||
<style>
|
||||
.block-cases.block-sm .c-status{text-align:center}
|
||||
.block-cases.block-sm .c-status .status-text{display:none;}
|
||||
.case-status-normal {color: #a6aab8;}
|
||||
.case-status-blocked { color: #a6aab8; }
|
||||
.case-status-investigate {color: #a6aab8;}
|
||||
</style>
|
||||
<table class='table table-borderless table-hover table-fixed table-fixed-head tablesorter block-cases <?php if(!$longBlock) echo 'block-sm';?>'>
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
<th class='c-id-xs'><?php echo $lang->idAB?></th>
|
||||
<th class='c-pri'><?php echo $lang->priAB?></th>
|
||||
<th class='c-title text-left'><?php echo $lang->case->title;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-runtime'><?php echo $lang->testtask->lastRunTime;?></th>
|
||||
<th class='c-result'><?php echo $lang->testtask->lastRunResult;?></th>
|
||||
<th class='c-status'><?php echo $lang->statusAB;?></th>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($cases as $case):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('testcase', 'view', "caseID={$case->id}");
|
||||
?>
|
||||
<tr class='text-center' <?php echo $appid?>>
|
||||
<td class='c-id-xs'><?php echo sprintf('%03d', $case->id);?></td>
|
||||
<td class='c-pri'><span class='label-pri label-pri-<?php echo $case->pri?>' title='<?php echo zget($lang->case->priList, $case->pri, $case->pri);?>'><?php echo zget($lang->case->priList, $case->pri, $case->pri)?></span></td>
|
||||
<td class='c-title text-left' style='color: <?php echo $case->color?>' title='<?php echo $case->title?>'><?php echo $case->title?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-runtime'><?php if(!helper::isZeroDate($case->lastRunDate)) echo date(DT_MONTHTIME1, strtotime($case->lastRunDate));?></td>
|
||||
<td class='c-result'><?php if($case->lastRunResult) echo $lang->testcase->resultList[$case->lastRunResult];?></td>
|
||||
<?php $status = $this->processStatus('testcase', $case);?>
|
||||
<td class='c-status' title='<?php echo $status;?>'>
|
||||
<span class="case-status-<?php echo $case->status?>">
|
||||
<span class='status-text'><?php echo $status;?></span>
|
||||
</span>
|
||||
</td>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -1,46 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The admin view file of block module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php
|
||||
$webRoot = $this->app->getWebRoot();
|
||||
$jsRoot = $webRoot . "js/";
|
||||
include '../../common/view/chosen.html.php';
|
||||
?>
|
||||
<?php if(isset($pageCSS)) css::internal($pageCSS); ?>
|
||||
<form class="form-horizontal load-indicator" id="blockAdminForm" method='post' target='hiddenwin'>
|
||||
<div class="form-group">
|
||||
<label for="modules" class="col-sm-3"><?php echo $lang->block->lblModule;?></label>
|
||||
<div class="col-sm-7">
|
||||
<?php echo html::select('module', $modules, '', "class='form-control chosen'")?>
|
||||
</div>
|
||||
</div>
|
||||
<?php if($blocks):?>
|
||||
<div id="blocksList">
|
||||
<div class="form-group">
|
||||
<label for="moduleBlock" class="col-sm-3"><?php echo $this->lang->block->lblBlock;?></label>
|
||||
<div class="col-sm-7">
|
||||
<?php html::select('block', $blocks, '', "class='form-control chosen'");?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div id="blockParams">
|
||||
<?php include 'publicform.html.php';?>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-7 col-sm-offset-3">
|
||||
<button type="submit" class="btn btn-wide btn-primary"><?php echo $lang->save;?></button>
|
||||
<button type="button" class="btn btn-wide" data-dismiss="modal"><?php echo $lang->cancel;?></button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<?php if(isset($pageJS)) js::execute($pageJS);?>
|
||||
@@ -1,148 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The dashboard view file of block module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
if($extView = $this->getExtViewFile(__FILE__)){include $extView; return helper::cd();}
|
||||
$webRoot = $config->webRoot;
|
||||
$jsRoot = $webRoot . "js/";
|
||||
$themeRoot = $webRoot . "theme/";
|
||||
if(isset($pageCSS)) css::internal($pageCSS);
|
||||
$useGuest = $this->app->user->account == 'guest';
|
||||
?>
|
||||
<?php include '../../common/view/tablesorter.html.php';?>
|
||||
<div class='dashboard auto-fade-in fade' id='dashboard' data-confirm-remove-block='<?php echo $lang->block->confirmRemoveBlock;?>'>
|
||||
<?php if(empty($longBlocks) && empty($shortBlocks)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->block->noData;?></span>
|
||||
<?php echo html::a($this->createLink("block", "admin", "id=0&module=$module"), "<i class='icon icon-plus'></i> {$lang->block->createBlock}", '', "data-toggle='modal' data-type='ajax' data-width='700' data-title='{$lang->block->createBlock}' class='btn btn-info'")?>
|
||||
<?php echo html::a($this->createLink("block", "ajaxReset", "module=$module"), "<i class='icon icon-refresh'></i> {$lang->block->reset}", 'hiddenwin', 'class="btn btn-info"')?>
|
||||
</p>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div class="row">
|
||||
<div class='col-main'>
|
||||
<?php foreach($longBlocks as $index => $block):?>
|
||||
<?php if(isset($config->block->closed) && strpos(",{$config->block->closed},", ",{$block->source}|{$block->block},") !== false) continue;?>
|
||||
<div class='panel block-<?php echo $block->block;?> <?php if(isset($block->params->color)) echo 'panel-' . $block->params->color;?>' id='block<?php echo $block->id?>' data-id='<?php echo $block->id?>' data-name='<?php echo $block->title?>' data-order='<?php echo $block->order?>' data-url='<?php echo $block->blockLink?>'>
|
||||
<?php $hasHeading = ($block->block != 'welcome');?>
|
||||
<?php if($hasHeading):?>
|
||||
<div class='panel-heading'>
|
||||
<div class='panel-title'><?php echo $block->title;?></div>
|
||||
<?php endif;?>
|
||||
<nav class='panel-actions nav nav-default'>
|
||||
<?php if($this->config->vision == 'rnd' && $block->block == 'guide' && !commonModel::isTutorialMode()) echo '<li>' . html::a($this->createLink('tutorial', 'start'), $lang->block->tutorial, '', "title='{$lang->block->tutorial}' class='iframe tutorialBtn'") . '</li>'; ?>
|
||||
<?php if(!empty($block->moreLink)) echo '<li>' . html::a($block->moreLink, strtoupper($lang->more), '', "title='{$lang->more}'") . '</li>'; ?>
|
||||
<li class='dropdown'>
|
||||
<a href='javascript:;' data-toggle='dropdown' class='panel-action'><i class='icon icon-ellipsis-v'></i></a>
|
||||
<ul class='dropdown-menu pull-right'>
|
||||
<li><a href='javascript:;' class='refresh-panel'><i class='icon-repeat'></i> <?php echo $lang->block->refresh;?></a></li>
|
||||
<?php if(!$useGuest):?>
|
||||
<li><a data-toggle='modal' href="<?php echo $this->createLink("block", "admin", "id=$block->id&module=$module");?>" class='edit-block' data-title='<?php echo $block->title;?>' ><?php echo $lang->edit;?></a></li>
|
||||
<li><a href='javascript:deleteBlock(<?php echo $index;?>);' class='hidden-panel'><?php echo $lang->block->hidden;?></a></li>
|
||||
<li><?php if($this->app->user->admin):?>
|
||||
<?php echo html::a($this->createLink('block','close',"blockID={$block->id}"), $lang->block->closeForever, 'hiddenwin', "class='close-block' onclick=\"return confirm('{$lang->block->confirmClose}')\"")?>
|
||||
<?php endif;?></li>
|
||||
<?php endif;?>
|
||||
<li class="divider"></li>
|
||||
<li><?php echo html::a($this->createLink("block", "admin", "id=0&module=$module"), "{$lang->block->createBlock}", '', "data-toggle='modal' data-type='ajax' data-width='700' data-title='{$lang->block->createBlock}'")?></li>
|
||||
<li><?php echo html::a($this->createLink("block", "ajaxReset", "module=$module"), "{$lang->block->reset}", 'hiddenwin')?></li>
|
||||
</ul>
|
||||
</li>
|
||||
</nav>
|
||||
<?php if($hasHeading):?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div class='panel-body scrollbar-hover'></div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<div class='col-side'>
|
||||
<?php foreach($shortBlocks as $index => $block):?>
|
||||
<?php if(isset($config->block->closed) && strpos(",{$config->block->closed},", ",{$block->source}|{$block->block},") !== false) continue;?>
|
||||
<div class='panel block-sm block-<?php echo $block->block;?> <?php if(isset($block->params->color)) echo 'panel-' . $block->params->color;?>' id='block<?php echo $block->id?>' data-id='<?php echo $block->id?>' data-name='<?php echo $block->title?>' data-order='<?php echo $block->order?>' data-url='<?php echo $block->blockLink?>'>
|
||||
<?php $hasHeading = ($block->block != 'welcome');?>
|
||||
<?php if($hasHeading):?>
|
||||
<div class='panel-heading'>
|
||||
<div class='panel-title'><?php echo $block->title;?></div>
|
||||
<?php endif;?>
|
||||
<nav class='panel-actions nav nav-default'>
|
||||
<?php if(!empty($block->moreLink)) echo '<li>' . html::a($block->moreLink, strtoupper($lang->more), '', "title='{$lang->more}'") . '</li>';?>
|
||||
<li class='dropdown'>
|
||||
<a href='javascript:;' data-toggle='dropdown' class='panel-action'><i class='icon icon-ellipsis-v'></i></a>
|
||||
<ul class='dropdown-menu pull-right'>
|
||||
<li><a href='javascript:;' class='refresh-panel'><i class='icon-repeat'></i> <?php echo $lang->block->refresh?></a></li>
|
||||
<?php if(!$useGuest):?>
|
||||
<li><a data-toggle='modal' href="<?php echo $this->createLink("block", "admin", "id=$block->id&module=$module"); ?>" class='edit-block' data-title='<?php echo $block->title; ?>' ><?php echo $lang->edit; ?></a></li>
|
||||
<li><a href='javascript:deleteBlock(<?php echo $index?>);' class='hidden-panel'><?php echo $lang->block->hidden; ?></a></li>
|
||||
<?php if($this->app->user->admin):?>
|
||||
<li><?php echo html::a($this->createLink('block', 'close', "blockID={$block->id}"), $lang->block->closeForever, 'hiddenwin', "class='close-block' onclick=\"return confirm('{$lang->block->confirmClose}')\"")?>
|
||||
<?php endif;?>
|
||||
<?php endif;?>
|
||||
<li class="divider"></li>
|
||||
<li><?php echo html::a($this->createLink("block", "admin", "id=0&module=$module"), "{$lang->block->createBlock}", '', "data-toggle='modal' data-type='ajax' data-width='700' data-title='{$lang->block->createBlock}'")?></li>
|
||||
<li><?php echo html::a($this->createLink("block", "ajaxReset", "module=$module"), "{$lang->block->reset}", 'hiddenwin')?></li>
|
||||
</ul>
|
||||
</li>
|
||||
</nav>
|
||||
<?php if($hasHeading):?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div class='panel-body scrollbar-hover'></div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
config.ordersSaved = '<?php echo $lang->block->ordersSaved; ?>';
|
||||
config.confirmRemoveBlock = '<?php echo $lang->block->confirmRemoveBlock; ?>';
|
||||
config.cannotPlaceInLeft = '<?php echo $lang->block->cannotPlaceInLeft; ?>';
|
||||
config.cannotPlaceInRight = '<?php echo $lang->block->cannotPlaceInRight; ?>';
|
||||
|
||||
var module = '<?php echo $module?>';
|
||||
var useGuest = <?php echo $useGuest ? 'true' : 'false';?>;
|
||||
|
||||
<?php $remind = $this->loadModel('misc')->getPluginRemind();?>
|
||||
<?php if(!empty($remind)):?>
|
||||
var myModalTrigger = new $.zui.ModalTrigger({title:'<?php echo $lang->misc->expiredTipsTitle;?>', custom: function(){return <?php echo json_encode($remind);?>}, width:'600px'});
|
||||
var result = myModalTrigger.show();
|
||||
$('#pluginButton').click(function(){myModalTrigger.close()});
|
||||
$('#cancelButton').click(function(){myModalTrigger.close()});
|
||||
<?php endif;?>
|
||||
|
||||
<?php /* Check annual remind */ ?>
|
||||
$(function()
|
||||
{
|
||||
function checkRemind()
|
||||
{
|
||||
$.getJSON(createLink('misc', 'getRemind'), function(response)
|
||||
{
|
||||
if(!response || !response.data || !response.data.content) return;
|
||||
|
||||
var myModalTrigger = new $.zui.ModalTrigger(
|
||||
{
|
||||
title: response.data.title,
|
||||
custom: response.data.content,
|
||||
width: 600
|
||||
});
|
||||
$('#showAnnual').click(function(){myModalTrigger.close()});
|
||||
});
|
||||
}
|
||||
setTimeout(checkRemind, 1000);
|
||||
|
||||
$('#dashboard .row .panel').each(function()
|
||||
{
|
||||
refreshBlock($(this));
|
||||
})
|
||||
});
|
||||
</script>
|
||||
<?php if($extView = $this->getExtViewFile(__FILE__)){include $extView; return helper::cd();}?>
|
||||
<?php if(isset($pageJS)) js::execute($pageJS);?>
|
||||
@@ -1,56 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The doccollectlistblock view file of block module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Shujie Tian <tianshujie@easycorp.ltd>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<style>
|
||||
.block-doccollectlist .panel-body {padding-top: 0px;}
|
||||
.block-doccollectlist .doc-list > .doc-title {display: flex; overflow: hidden; text-overflow: clip; white-space: nowrap; padding: 8px 0;}
|
||||
.block-doccollectlist .doc-list > .doc-title > .label-rank {margin-right: 10px; padding-top: 1px; border: unset; color: #2E7FFF; background-color: #D5E5FF;}
|
||||
.block-doccollectlist .doc-list > .doc-title > .label-rank-1 {color: #FC5959; background-color: #FFE2D9;}
|
||||
.block-doccollectlist .doc-list > .doc-title > .label-rank-2 {color: #FF8058; background-color: #FFE2D9;}
|
||||
.block-doccollectlist .doc-list > .doc-title > .label-rank-3 {color: #FF9F46; background-color: #FFECDB;}
|
||||
.block-doccollectlist .doc-list > .doc-title > .doc-name {overflow: hidden; max-width: calc(100% - 130px);}
|
||||
[lang^=zh] .block-doccollectlist .doc-list > .doc-title > .doc-name {max-width: calc(100% - 110px);}
|
||||
.block-doccollectlist .doc-list > .doc-title > .label-collect-count {margin-left: 10px;}
|
||||
.block-doccollectlist .doc-list > .doc-title > .label-collect-count > .icon-flame {margin-bottom: 3px;}
|
||||
.block-doccollectlist .doc-list > .doc-title > .label-collect-count > .icon-flame.gray {filter: grayscale(100%);}
|
||||
.block-doccollectlist .doc-list > .doc-title > .label-collect-count > .view-text {color: #838A9D;}
|
||||
</style>
|
||||
<div class="panel-body">
|
||||
<?php if(empty($docList)):?>
|
||||
<div class='table-empty-tip'><p><span class='text-muted'><?php echo $lang->doc->noDoc;?></p></span></div>
|
||||
<?php else:?>
|
||||
<div class="doc-list table-row">
|
||||
<?php $rank = 1;?>
|
||||
<?php foreach($docList as $doc):?>
|
||||
<div class='doc-title'>
|
||||
<span class="label-pri label-rank label-rank-<?php echo $rank;?>"><?php echo $rank;?></span>
|
||||
<?php
|
||||
if(common::hasPriv('doc', 'view'))
|
||||
{
|
||||
echo html::a($this->createLink('doc', 'view', "docID=$doc->id"), $doc->title, '', "title='{$doc->title}' class='doc-name' data-app='{$this->app->tab}'");
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "<span class='doc-name' title='{$doc->title}'>{$doc->title}</span>";
|
||||
}
|
||||
?>
|
||||
<div class='label-collect-count'>
|
||||
<?php $flameClass = $rank < 4 ? '' : 'gray';?>
|
||||
<?php echo html::image("static/svg/flame.svg", "class='icon-flame $flameClass'");?>
|
||||
<span class='view-text'><?php echo sprintf($lang->doc->collectCount, $doc->collects);?></span>
|
||||
</div>
|
||||
</div>
|
||||
<?php $rank ++;?>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
@@ -1,37 +0,0 @@
|
||||
<?php if(empty($actions)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<style>
|
||||
.block-docdynamic .timeline > li .timeline-text {max-width: 600px; display: block; white-space: nowrap; overflow: hidden; text-overflow: clip; max-height: 20px;}
|
||||
.block-docdynamic .panel-body {padding-top: 0;}
|
||||
.timeline > li:before {left: -26px;}
|
||||
.timeline > li + li:after {left: -23px;}
|
||||
.timeline-text {margin-left: -18px;}
|
||||
.block-docdynamic .label-action {padding: 0 6px;}
|
||||
.block-docdynamic .label-action + a {padding-left: 6px;}
|
||||
.timeline > li.active:before {left: -30px; background-color: #FFF;}
|
||||
.timeline > li.collected > div:after {background-color: #FFAF65;}
|
||||
.timeline > li.releaseddoc > div:after {background-color: #66A2FF;}
|
||||
.timeline > li > div:after {left: -27px;}
|
||||
.timeline > li > div > .timeline-tag, .timeline > li > div > .timeline-text > .label-action {color: #838A9D;}
|
||||
.timeline > li > div > .timeline-text > a {color: #313C52;}
|
||||
</style>
|
||||
<div class='panel-body scrollbar-hover'>
|
||||
<ul class="timeline timeline-tag-left no-margin">
|
||||
<?php
|
||||
$i = 0;
|
||||
foreach($actions as $action)
|
||||
{
|
||||
$user = zget($users, $action->actor);
|
||||
$class = $action->major ? 'active' : '';
|
||||
if(in_array($action->action, array('releaseddoc', 'collected'))) $class .= " {$action->action}";
|
||||
echo "<li class='$class'><div>";
|
||||
if($action->objectLink) printf($lang->block->dynamicInfo, $action->date, $user, $action->actionLabel, $action->objectLabel, $action->objectLink, $action->objectName, $action->objectName);
|
||||
if(!$action->objectLink) printf($lang->block->noLinkDynamic, $action->date, $action->objectName, $user, $action->actionLabel, $action->objectLabel, ' ' . $action->objectName);
|
||||
echo "</div></li>";
|
||||
$i++;
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -1,79 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The docmycollectionblock view file of block module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yanyi Cao <caoyanyi@easycorp.ltd>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<style>
|
||||
.block-docmycollection .panel-body {padding: 0px 10px 20px;}
|
||||
.block-docmycollection .doc-list {display: flex; flex-wrap: wrap; padding: 0 4px 0 0;}
|
||||
.block-docmycollection .doc-list > .doc-box {border: unset; flex: 0 1 50%; padding: 8px; width: 0;}
|
||||
.block-docmycollection .doc-list > .doc-box > button.btn {padding: 5px 10px; height: 100%; width: 100%; cursor: pointer; white-space: nowrap; text-align: unset; border: 1px solid rgba(227, 228, 233, 0.6)}
|
||||
.block-docmycollection .doc-list > .doc-box > .btn:hover {background: unset;}
|
||||
.block-docmycollection .doc-list > .doc-box > .btn.no-priv {cursor: not-allowed; pointer-events: unset;}
|
||||
.block-docmycollection .doc-list > .doc-box > .btn.no-priv p {pointer-events: none;}
|
||||
.block-docmycollection .doc-list > .doc-box .date-interval {float: right; padding: 8px 0 8px 12px;}
|
||||
.block-docmycollection .doc-list > .doc-box > .btn > h4 {padding-right: 5px;}
|
||||
.block-docmycollection .doc-list > .doc-box .file-icon {margin-right: 2px; margin-bottom: 2px;}
|
||||
.block-docmycollection .doc-list > .doc-box .plug-title {height: 16px; overflow: hidden;}
|
||||
|
||||
.block-docmycollection.block-sm .doc-list > .doc-box {flex: 0 1 100%;}
|
||||
</style>
|
||||
<?php $canView = common::hasPriv('doc', 'view');?>
|
||||
<div class="panel-body">
|
||||
<?php if(empty($docList)):?>
|
||||
<div class='table-empty-tip'><p><span class='text-muted'><?php echo $lang->doc->noDoc;?></p></span></div>
|
||||
<?php else:?>
|
||||
<div class="doc-list">
|
||||
<?php foreach($docList as $doc):?>
|
||||
<div class="doc-box">
|
||||
<button class="btn shadow-primary-hover <?php if(!$canView) echo 'no-priv';?>" data-link='<?php echo $this->createLink("doc", "view", "docID=$doc->id");?>'>
|
||||
<span class='date-interval text-muted'>
|
||||
<?php
|
||||
$interval = $doc->editInterval;
|
||||
$editTip = $lang->doc->todayUpdated;
|
||||
if($interval->year)
|
||||
{
|
||||
$editTip = sprintf($lang->doc->yearsUpdated, $interval->year);
|
||||
}
|
||||
elseif($interval->month)
|
||||
{
|
||||
$editTip = sprintf($lang->doc->monthsUpdated, $interval->month);
|
||||
}
|
||||
elseif($interval->day)
|
||||
{ $editTip = sprintf($lang->doc->daysUpdated, $interval->day);
|
||||
}
|
||||
echo $editTip;
|
||||
?>
|
||||
</span>
|
||||
<h4 class="plug-title" title="<?php echo $doc->title;?>">
|
||||
<?php
|
||||
$docType = $doc->type == 'text' ? 'wiki-file' : $doc->type;
|
||||
echo html::image("static/svg/{$docType}.svg", "class='file-icon'");
|
||||
?>
|
||||
<?php echo $doc->title;?>
|
||||
</h4>
|
||||
<p class='edit-date text-muted'><?php echo $lang->doc->editedDate . (common::checkNotCN() ? ': ' : ':') . $doc->editedDate;?></p>
|
||||
</button>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
$('.doc-box .btn').on('click', function()
|
||||
{
|
||||
if($(this).hasClass('no-priv')) return;
|
||||
|
||||
location.href = $(this).data('link');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -1,80 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The docrecentupdateblock view file of block module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yanyi Cao <caoyanyi@easycorp.ltd>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<style>
|
||||
.block-docrecentupdate .panel-body {padding: 0px 10px 20px;}
|
||||
.block-docrecentupdate .doc-list {display: flex; flex-wrap: wrap; padding: 0 4px 0 0;}
|
||||
.block-docrecentupdate .doc-list > .doc-box {border: unset; flex: 0 1 33%; padding: 8px; width: 0;}
|
||||
.block-docrecentupdate .doc-list > .doc-box > button.btn {padding: 5px 10px; height: 100%; width: 100%; cursor: pointer; white-space: nowrap; text-align: unset; border: 1px solid rgba(227, 228, 233, 0.6)}
|
||||
.block-docrecentupdate .doc-list > .doc-box > .btn:hover {background: unset;}
|
||||
.block-docrecentupdate .doc-list > .doc-box > .btn.no-priv {cursor: not-allowed; pointer-events: unset;}
|
||||
.block-docrecentupdate .doc-list > .doc-box > .btn.no-priv p {pointer-events: none;}
|
||||
.block-docrecentupdate .doc-list > .doc-box .date-interval {float: right; padding: 8px 0 8px 12px;}
|
||||
.block-docrecentupdate .doc-list > .doc-box > .btn > h4 {padding-right: 5px;}
|
||||
.block-docrecentupdate .doc-list > .doc-box .file-icon {margin-right: 2px; margin-bottom: 2px;}
|
||||
.block-docrecentupdate .doc-list > .doc-box .plug-title {height: 16px; overflow: hidden;}
|
||||
|
||||
.block-docrecentupdate.block-sm .doc-list > .doc-box {flex: 0 1 100%;}
|
||||
</style>
|
||||
<?php $canView = common::hasPriv('doc', 'view');?>
|
||||
<div class="panel-body">
|
||||
<?php if(empty($docList)):?>
|
||||
<div class='table-empty-tip'><p><span class='text-muted'><?php echo $lang->doc->noDoc;?></p></span></div>
|
||||
<?php else:?>
|
||||
<div class="doc-list">
|
||||
<?php foreach($docList as $doc):?>
|
||||
<div class="doc-box">
|
||||
<button class="btn shadow-primary-hover <?php if(!$canView) echo 'no-priv';?>" data-link='<?php echo $this->createLink("doc", "view", "docID=$doc->id");?>'>
|
||||
<span class='date-interval text-muted'>
|
||||
<?php
|
||||
$interval = $doc->editInterval;
|
||||
$editTip = $lang->doc->todayUpdated;
|
||||
if($interval->year)
|
||||
{
|
||||
$editTip = sprintf($lang->doc->yearsUpdated, $interval->year);
|
||||
}
|
||||
elseif($interval->month)
|
||||
{
|
||||
$editTip = sprintf($lang->doc->monthsUpdated, $interval->month);
|
||||
}
|
||||
elseif($interval->day)
|
||||
{
|
||||
$editTip = sprintf($lang->doc->daysUpdated, $interval->day);
|
||||
}
|
||||
echo $editTip;
|
||||
?>
|
||||
</span>
|
||||
<h4 class="plug-title" title="<?php echo $doc->title;?>">
|
||||
<?php
|
||||
$docType = $doc->type == 'text' ? 'wiki-file' : $doc->type;
|
||||
echo html::image("static/svg/{$docType}.svg", "class='file-icon'");
|
||||
?>
|
||||
<?php echo $doc->title;?>
|
||||
</h4>
|
||||
<p class='edit-date text-muted'><?php echo $lang->doc->editedDate . (common::checkNotCN() ? ': ' : ':') . $doc->editedDate;?></p>
|
||||
</button>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
$('.doc-box .btn').on('click', function()
|
||||
{
|
||||
if($(this).hasClass('no-priv')) return;
|
||||
|
||||
location.href = $(this).data('link');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -1,79 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The statistic view file of block module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yanyi Cao <caoyanyi@easycorp.ltd>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<style>
|
||||
.block-docstatistic .flex {display: flex; flex-wrap: nowrap; flex-direction: row; justify-content: space-around; flex: auto;}
|
||||
.block-docstatistic .flex-column {flex-direction: column; padding-left: 10px;}
|
||||
.block-docstatistic .statistic {flex: 0 1 32%;}
|
||||
.block-docstatistic .created {flex: 0 1 48%;}
|
||||
.block-docstatistic .edited {flex: 0 1 16%; padding-left: 0px;}
|
||||
.block-docstatistic .divider {border-right: 1px solid #eee; padding-right: 12%;}
|
||||
.block-docstatistic .panel-body {padding-top: 0;}
|
||||
|
||||
.block-docstatistic.block-sm .flex {justify-content: start;}
|
||||
.block-docstatistic.block-sm .panel-body.flex {flex-direction: column;}
|
||||
.block-docstatistic.block-sm .divider {border-right: none;}
|
||||
.block-docstatistic.block-sm .statistic .flex {margin-top: -28px;}
|
||||
.block-docstatistic.block-sm .tile {padding: 10px 32px 20px;}
|
||||
.block-docstatistic.block-sm .panel-body {margin-top: 0px; padding: 10px;}
|
||||
.block-docstatistic.block-sm .flex-column .flex .tile:nth-child(1) {padding-left: 0;}
|
||||
.block-docstatistic.block-sm .edited {padding-left: 10px;}
|
||||
.block-docstatistic.block-sm .flex-column {border-bottom: 1px solid #eee;}
|
||||
.block-docstatistic.block-sm .flex-column:last-child {border-bottom: none;}
|
||||
</style>
|
||||
<div class='panel-move-handler'></div>
|
||||
<div class="panel-body flex">
|
||||
<div class='flex flex-column statistic'>
|
||||
<div class='flex'>
|
||||
<div class="tile">
|
||||
<div class="tile-amount"><?php echo (int)$statistic->totalDocs;?></div>
|
||||
<div class="tile-title"><?php echo $lang->doc->allDoc;?></div>
|
||||
</div>
|
||||
<div class="tile divider">
|
||||
<div class="tile-amount"><?php echo (int)$statistic->todayEditedDocs;?></div>
|
||||
<div class="tile-title"><?php echo $lang->doc->todayEdited;?></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class='flex flex-column created'>
|
||||
<div class='flex'>
|
||||
<?php if(common::hasPriv('doc', 'mySpace')):?>
|
||||
<a class="tile" href="<?php echo $this->createLink('doc', 'mySpace', 'type=createdBy');?>">
|
||||
<?php else:?>
|
||||
<div class="tile">
|
||||
<?php endif;?>
|
||||
<div class="tile-amount"><?php echo (int)$statistic->myDocs;?></div>
|
||||
<div class="tile-title"><?php echo $lang->doc->docCreated;?></div>
|
||||
<?php if(common::hasPriv('doc', 'mySpace')):?>
|
||||
</a>
|
||||
<?php else:?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div class="tile">
|
||||
<div class="tile-amount"><?php echo (int)$statistic->myDoc->docViews;?></div>
|
||||
<div class="tile-title"><?php echo $lang->doc->docViews;?></div>
|
||||
</div>
|
||||
<div class="tile divider">
|
||||
<div class="tile-amount"><?php echo (int)$statistic->myDoc->docCollects;?></div>
|
||||
<div class="tile-title"><?php echo $lang->doc->docCollects;?></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class='flex flex-column edited'>
|
||||
<div class='flex'>
|
||||
<div class="tile">
|
||||
<div class="tile-amount"><?php echo (int)$statistic->myEditedDocs;?></div>
|
||||
<div class="tile-title"><?php echo $lang->doc->docEdited;?></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,55 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The docviewlistblock view file of block module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Shujie Tian <tianshujie@easycorp.ltd>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<style>
|
||||
.block-docviewlist .panel-body {padding-top: 0px;}
|
||||
.block-docviewlist .doc-list > .doc-title {display: flex; overflow: hidden; text-overflow: clip; white-space: nowrap; padding: 8px 0;}
|
||||
.block-docviewlist .doc-list > .doc-title > .label-rank {margin-right: 10px; padding-top: 1px; border: unset; color: #2E7FFF; background-color: #D5E5FF;}
|
||||
.block-docviewlist .doc-list > .doc-title > .label-rank-1 {color: #FC5959; background-color: #FFE2D9;}
|
||||
.block-docviewlist .doc-list > .doc-title > .label-rank-2 {color: #FF8058; background-color: #FFE2D9;}
|
||||
.block-docviewlist .doc-list > .doc-title > .label-rank-3 {color: #FF9F46; background-color: #FFECDB;}
|
||||
.block-docviewlist .doc-list > .doc-title > .doc-name {overflow: hidden; max-width: calc(100% - 110px);}
|
||||
.block-docviewlist .doc-list > .doc-title > .label-view-count {margin-left: 10px;}
|
||||
.block-docviewlist .doc-list > .doc-title > .label-view-count > .icon-flame {margin-bottom: 3px;}
|
||||
.block-docviewlist .doc-list > .doc-title > .label-view-count > .icon-flame.gray {filter: grayscale(100%);}
|
||||
.block-docviewlist .doc-list > .doc-title > .label-view-count > .view-text {color: #838A9D;}
|
||||
</style>
|
||||
<div class="panel-body">
|
||||
<?php if(empty($docList)):?>
|
||||
<div class='table-empty-tip'><p><span class='text-muted'><?php echo $lang->doc->noDoc;?></p></span></div>
|
||||
<?php else:?>
|
||||
<div class="doc-list table-row">
|
||||
<?php $rank = 1;?>
|
||||
<?php foreach($docList as $doc):?>
|
||||
<div class='doc-title'>
|
||||
<span class="label-pri label-rank label-rank-<?php echo $rank;?>"><?php echo $rank;?></span>
|
||||
<?php
|
||||
if(common::hasPriv('doc', 'view'))
|
||||
{
|
||||
echo html::a($this->createLink('doc', 'view', "docID=$doc->id"), $doc->title, '', "title='{$doc->title}' class='doc-name' data-app='{$this->app->tab}'");
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "<span class='doc-name' title='{$doc->title}'>{$doc->title}</span>";
|
||||
}
|
||||
?>
|
||||
<div class='label-view-count'>
|
||||
<?php $flameClass = $rank < 4 ? '' : 'gray';?>
|
||||
<?php echo html::image("static/svg/flame.svg", "class='icon-flame $flameClass'");?>
|
||||
<span class='view-text'><?php echo sprintf($lang->doc->viewCount, $doc->views);?></span>
|
||||
</div>
|
||||
</div>
|
||||
<?php $rank ++;?>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
@@ -1,34 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The execution overview block view file of block module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Tingting Dai <daitingting@xirangit.com>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<style>
|
||||
.block-overview .tile-amount {font-size: 48px; margin-bottom: 10px;}
|
||||
</style>
|
||||
<div class="panel-body table-row">
|
||||
<div class="col-4 text-middle text-center">
|
||||
<div class="tile">
|
||||
<div class="tile-title"><?php echo $lang->execution->allExecutions;?></div>
|
||||
<div class="tile-amount"><?php echo $total;?></div>
|
||||
<a class="btn btn-primary btn-circle btn-icon-right btn-sm" href="<?php echo $this->createLink('execution', 'all', 'type=all');?>"><?php echo $lang->execution->viewAll;?> <span class="label label-badge label-icon"><i class="icon icon-arrow-right"></i></span></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-8 text-middle">
|
||||
<ul class="status-bars">
|
||||
<?php foreach($lang->execution->statusList as $statusKey => $statusName):?>
|
||||
<li>
|
||||
<span class="bar" style="height: <?php echo $overviewPercent[$statusKey];?>"><span class="value"><?php echo empty($overview[$statusKey]) ? 0 :html::a($this->createLink('execution', 'all', "type=$statusKey"), $overview[$statusKey]);?></span></span>
|
||||
<span class="title"><?php echo $statusName;?></span>
|
||||
</li>
|
||||
<?php endforeach;?>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,210 +0,0 @@
|
||||
<style>
|
||||
.types-line {display: table; padding: 0; margin: 0 auto;}
|
||||
.types-line > li {display: table-cell;}
|
||||
.types-line > li > div {position: relative; padding: 18px 5px 5px; text-align: center;}
|
||||
.types-line > li > div:before {content: ''; display: block; background: #eee; width: 100%; height: 2px; position: absolute; left: 50%; top: 4px;}
|
||||
.types-line > li:last-child > div:before {display: none;}
|
||||
.types-line > li > div:after {content: ''; display: block; background: #FFFFFF; box-shadow: 0 2px 4px 0 rgba(170,170,170,0.50), 0 0 5px 0 rgba(0,0,0,0.1); width: 10px; height: 10px; position: absolute; border-radius: 50%; top: 0; left: 50%; margin-left: -2px;}
|
||||
.types-line > li > div > small {display: block; color: #A6AAB8;}
|
||||
.types-line > li > div > span {display: block; color: #CBD0DB; font-size: 16px;}
|
||||
.execution-info {position: relative; height: 65px;}
|
||||
.execution-info + .execution-info {margin-top: 10px;}
|
||||
.execution-info .progress {position: absolute; left: 10px; top: 35px; right: 100px;}
|
||||
.execution-info .progress-info {position: absolute; left: 8px; top: 10px; width: 180px; font-size: 12px;}
|
||||
.execution-info .type-info {color: #A6AAB8; text-align: center; position: absolute; right: 0; top: 6px; width: 100px;}
|
||||
html[lang="en"] .execution-info .type-info {color: #A6AAB8; text-align: center; position: absolute; right: 0; top: 6px; width: 110px;}
|
||||
.execution-info .type-value,
|
||||
.execution-info .type-label {font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
.execution-info .type-value {font-size: 14px;}
|
||||
.execution-info .type-value > strong {font-size: 20px; color: #3C4353;}
|
||||
.execution-info .actions {position: absolute; left: 10px; top: 14px;}
|
||||
.block-statistic .panel-body {padding-top: 0}
|
||||
.block-statistic .tile {margin-bottom: 30px;}
|
||||
.block-statistic .tile-title {font-size: 18px; color: #A6AAB8;}
|
||||
.block-statistic .tile-amount {font-size: 48px; margin-bottom: 10px;}
|
||||
.block-statistic .col-nav {border-right: 1px solid #EBF2FB; width: 260px; padding: 0;}
|
||||
.block-statistic .nav-secondary > li {position: relative}
|
||||
.block-statistic .nav-secondary > li > a {font-size: 14px; color: #838A9D; position: relative; box-shadow: none; padding-left: 20px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; transition: all .2s;}
|
||||
.block-statistic .nav-secondary > li > a:first-child {padding-right: 36px;}
|
||||
.block-statistic .nav-secondary > li.active > a:first-child {color: #3C4353; background: transparent; box-shadow: none;}
|
||||
.block-statistic .nav-secondary > li.active > a:first-child:hover,
|
||||
.block-statistic .nav-secondary > li.active > a:first-child:focus,
|
||||
.block-statistic .nav-secondary > li > a:first-child:hover {box-shadow: none; border-radius: 4px 0 0 4px;}
|
||||
.block-statistic .nav-secondary > li.active > a:first-child:before {content: ' '; display: block; left: -1px; top: 10px; bottom: 10px; width: 4px; background: #006af1; position: absolute;}
|
||||
.block-statistic .nav-secondary > li > a.btn-view {position: absolute; top: 0; right: 0; bottom: 0; padding: 8px; width: 36px; text-align: center; opacity: 0;}
|
||||
.block-statistic .nav-secondary > li:hover > a.btn-view {opacity: 1}
|
||||
.block-statistic .nav-secondary > li.active > a.btn-view {box-shadow: none}
|
||||
.block-statistic .nav-secondary > li.switch-icon {display: none;}
|
||||
.block-statistic.block-sm .panel-body {padding-bottom: 10px; position: relative; padding-top: 45px; border-radius: 3px;}
|
||||
.block-statistic.block-sm .panel-body > .table-row,
|
||||
.block-statistic.block-sm .panel-body > .table-row > .col {display: block; width: auto;}
|
||||
.block-statistic.block-sm .panel-body > .table-row > .tab-content {padding: 0; margin: 0 -5px;}
|
||||
.block-statistic.block-sm .tab-pane > .table-row > .col-5 {width: 125px;}
|
||||
.block-statistic.block-sm .tab-pane > .table-row > .col-5 > .table-row {padding: 5px 0;}
|
||||
.block-statistic.block-sm .col-nav {border-left: none; position: absolute; top: 0; left: 15px; right: 15px; background: #f5f5f5;}
|
||||
.block-statistic.block-sm .nav-secondary {display: table; width: 100%; padding: 0; table-layout: fixed;}
|
||||
.block-statistic.block-sm .nav-secondary > li {display: none}
|
||||
.block-statistic.block-sm .nav-secondary > li.switch-icon,
|
||||
.block-statistic.block-sm .nav-secondary > li.active {display: table-cell; width: 100%; text-align: center;}
|
||||
.block-statistic.block-sm .nav-secondary > li.active > a:hover {cursor: default; background: none;}
|
||||
.block-statistic.block-sm .nav-secondary > li.switch-icon > a:hover {background: rgba(0,0,0,0.07);}
|
||||
.block-statistic.block-sm .nav-secondary > li > a {padding: 5px 10px; border-radius: 4px;}
|
||||
.block-statistic.block-sm .nav-secondary > li > a:before {display: none;}
|
||||
.block-statistic.block-sm .nav-secondary > li.switch-icon {width: 40px;}
|
||||
.block-statistic.block-sm .nav-secondary > li.active > a:first-child:before {display: none}
|
||||
.block-statistic.block-sm .nav-secondary > li.active > a.btn-view {width: auto; left: 0; right: 0;}
|
||||
.block-statistic.block-sm .nav-secondary > li.active > a.btn-view > i {display: none;}
|
||||
.block-statistic.block-sm .nav-secondary > li.active > a.btn-view:hover {cursor: pointer; background: rgba(0,0,0,.1)}
|
||||
|
||||
.status-count{margin:auto}
|
||||
.status-count tr:first-child td:last-child{color:#000;font-weight:bold}
|
||||
.block-statistic .execution-progress {vertical-align: middle;}
|
||||
</style>
|
||||
<script>
|
||||
<?php $blockNavId = 'nav-' . uniqid(); ?>
|
||||
$(function()
|
||||
{
|
||||
var $nav = $('#<?php echo $blockNavId;?>');
|
||||
$nav.on('click', '.switch-icon', function(e)
|
||||
{
|
||||
var isPrev = $(this).is('.prev');
|
||||
var $activeItem = $nav.children('.active');
|
||||
var $next = $activeItem[isPrev ? 'prev' : 'next']('li:not(.switch-icon)');
|
||||
if ($next.length) $next.find('a[data-toggle="tab"]').trigger('click');
|
||||
else $nav.children('li:not(.switch-icon)')[isPrev ? 'last' : 'first']().find('a[data-toggle="tab"]').trigger('click');
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
var $executionLi = $('#activeExecution');
|
||||
if($executionLi.length)
|
||||
{
|
||||
var executionLi = $executionLi[0];
|
||||
$(".col ul.nav").animate({scrollTop: executionLi.offsetTop}, "slow");
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<div class="panel-body">
|
||||
<div class="table-row">
|
||||
<?php if(empty($executions)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->block->noData;?></span></p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class="col col-nav">
|
||||
<ul class="nav nav-stacked nav-secondary scrollbar-hover" id='<?php echo $blockNavId;?>'>
|
||||
<li class='switch-icon prev'><a><i class='icon icon-arrow-left'></i></a></li>
|
||||
<?php $selected = key($executions);?>
|
||||
<?php $selected = !isset($executions[$selected]) ? key($executions) : $selected;?>
|
||||
<?php foreach($executions as $execution):?>
|
||||
<li <?php if($execution->id == $selected) echo "class='active' id='activeExecution'";?> executionID='<?php echo $execution->id;?>'>
|
||||
<a href="###" data-target="#tab3Content<?php echo $blockNavId . $execution->id;?>" data-toggle="tab" title='<?php echo $execution->name;?>'><?php echo $execution->name;?></a>
|
||||
<?php echo html::a(helper::createLink('execution', 'task', "executionID=$execution->id"), "<i class='icon-arrow-right text-primary'></i>", '', "class='btn-view' title={$lang->execution->task}");?>
|
||||
</li>
|
||||
<?php endforeach;?>
|
||||
<li class='switch-icon next'><a><i class='icon icon-arrow-right'></i></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col tab-content">
|
||||
<?php foreach($executions as $execution):?>
|
||||
<div class="tab-pane fade<?php if($execution->id == $selected) echo ' active in';?>" id="tab3Content<?php echo $blockNavId . $execution->id;?>">
|
||||
<div class="table-row">
|
||||
<div class="col-5 text-middle text-center">
|
||||
<div class="progress-pie inline-block space" data-value="<?php echo $execution->progress;?>" data-doughnut-size="84">
|
||||
<canvas width="120" height="120"></canvas>
|
||||
<div class="progress-info">
|
||||
<small><?php echo $lang->task->statusList['done'];?></small>
|
||||
<strong><?php echo $execution->progress;?><small><?php echo $lang->percent;?></small></strong>
|
||||
</div>
|
||||
</div>
|
||||
<div class="table-row text-center small text-muted with-padding">
|
||||
<div class="col-4 text-bottom">
|
||||
<div><?php echo $lang->execution->totalEstimate;?></div>
|
||||
<div><?php echo (float)$execution->totalEstimate;?> <span class="muted"><?php echo $lang->task->hour;?></span></div>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<span class="label label-dot label-primary"></span>
|
||||
<div><?php echo $lang->execution->totalConsumed;?></div>
|
||||
<div><?php echo (float)$execution->totalConsumed;?> <span class="muted"><?php echo $lang->task->hour;?></span></div>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<span class="label label-dot label-pale"></span>
|
||||
<div><?php echo $lang->execution->totalLeft;?></div>
|
||||
<div><?php echo (float)$execution->totalLeft;?> <span class="muted"><?php echo $lang->task->hour;?></span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-7 execution-progress">
|
||||
<div class="execution-info">
|
||||
<div class="progress-info"><i class="icon icon-check-circle text-success icon-sm"></i> <span class="text-muted"><?php echo $lang->task->yesterdayFinished;?></span> <strong><?php echo $execution->yesterdayFinished;?></strong></div>
|
||||
<div class="progress">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="<?php echo $execution->taskProgress;?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $execution->taskProgress;?>%">
|
||||
</div>
|
||||
</div>
|
||||
<div class="type-info">
|
||||
<div class="type-label">
|
||||
<table class='status-count'>
|
||||
<tr>
|
||||
<td class='text-right'><?php echo $lang->task->allTasks;?> :</td>
|
||||
<td class='text-left'><?php echo empty($execution->totalTasks) ? 0 : html::a($this->createLink('execution', 'task', "executionID={$execution->id}&status=all"), $execution->totalTasks);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='text-right'><?php echo $lang->task->noFinished;?> :</td>
|
||||
<td class='text-left'><?php echo empty($execution->undoneTasks) ? 0 : html::a($this->createLink('execution', 'task', "executionID={$execution->id}&status=undone"), $execution->undoneTasks);?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php if($execution->lifetime != 'ops' and !in_array($execution->attribute, array('request', 'review'))):?>
|
||||
<div class="execution-info">
|
||||
<div class="progress-info"><i class="icon icon-check-circle text-success icon-sm"></i> <span class="text-muted"><?php echo $lang->story->released;?></span> <strong><?php echo $execution->releasedStories;?></strong></div>
|
||||
<div class="progress">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="<?php echo $execution->storyProgress;?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $execution->storyProgress;?>%"></div>
|
||||
</div>
|
||||
<div class="type-info">
|
||||
<div class="type-label">
|
||||
<table class='status-count'>
|
||||
<tr>
|
||||
<td class='text-right'><?php echo $lang->story->total;?> :</td>
|
||||
<td class='text-left'><?php echo empty($execution->totalStories) ? 0 : html::a($this->createLink('execution', 'story', "executionID={$execution->id}&storyType=story&orderBy=order_desc&type=all"), $execution->totalStories);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='text-right'><?php echo $lang->story->unclosed;?> :</td>
|
||||
<td class='text-left'><?php echo empty($execution->unclosedStories) ? 0 : html::a($this->createLink('execution', 'story', "executionID={$execution->id}&storyType=story&orderBy=order_desc&type=unclosed"), $execution->unclosedStories);?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php if($execution->attribute != 'design'):?>
|
||||
<div class="execution-info">
|
||||
<div class="progress-info"><i class="icon icon-check-circle text-success icon-sm"></i> <span class="text-muted"><?php echo $lang->bug->yesterdayResolved;?></span> <strong><?php echo $execution->yesterdayResolved;?></strong></div>
|
||||
<div class="progress">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="<?php echo $execution->bugProgress;?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $execution->bugProgress;?>%">
|
||||
</div>
|
||||
</div>
|
||||
<div class="type-info">
|
||||
<div class="type-label">
|
||||
<table class='status-count'>
|
||||
<tr>
|
||||
<td class='text-right'><?php echo $lang->bug->allBugs;?> :</td>
|
||||
<td class='text-left'><?php echo empty($execution->totalBugs) ? 0 : html::a($this->createLink('execution', 'bug', "executionID={$execution->id}&productID=0&branch=0&orderBy=status,id_desc&build=0&type=all"), $execution->totalBugs);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='text-right'><?php echo $lang->bug->unResolved;?> :</td>
|
||||
<td class='text-left'><?php echo empty($execution->activeBugs) ? 0 : html::a($this->createLink('execution', 'bug', "executionID={$execution->id}&productID=0&branch=0&orderBy=status,id_desc&build=0&type=unresolved"), $execution->activeBugs);?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,33 +0,0 @@
|
||||
<div class='flowchart'>
|
||||
<?php foreach ($lang->block->flowchart as $flowName => $flow):?>
|
||||
<?php $idx = 0; ?>
|
||||
<div class='row flow-chart-row row-<?php echo $flowName?>'>
|
||||
<?php foreach ($flow as $flowItem):?>
|
||||
<div class='flow-item flow-item-<?php echo $idx ++ ?>'><div title='<?php echo $flowItem ?>'><div class='flow-item-display'><?php echo $flowItem ?></div></div></div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<style>
|
||||
.flow-chart-row {display: flex; gap: 5px; margin-bottom: 9px; width: 100%;}
|
||||
.flow-item {background: url('static/svg/arrow-blue.svg') center no-repeat; background-size: cover; text-align: center; margin: 0; padding-right: 15px; flex:0 1 15%; position: relative; padding: 5px 0 5px 8px; white-space:nowrap; overflow: hidden; color: #3c4353; display: flex; align-items: center; text-align: center; padding-right: 10px;}
|
||||
.ie-8 .flow-item > div:before {display: none}
|
||||
.flow-item > div:before {border-left-color: #fff; z-index: 1}
|
||||
.flow-item > div > div {display: flow-root; overflow: hidden;}
|
||||
.ie-8 .flow-item > div {margin-right: 10px}
|
||||
.flow-item-0 > div {color: #FFF; font-weight: 400;}
|
||||
.flow-item-0 > div:before {display: none}
|
||||
|
||||
.flow-item-1,
|
||||
.flow-item-2,
|
||||
.flow-item-3,
|
||||
.flow-item-4,
|
||||
.flow-item-5 {background-image: url('static/svg/arrow-white.svg'); }
|
||||
|
||||
.block-sm .flow-item {padding-right: 5px}
|
||||
.block-sm .flow-item > div:before, .block-sm .flow-item > div:after {border-width: 15px 0 15px 6px;}
|
||||
.block-sm .row-3 .flow-item-1, .block-sm .row-3 .flow-item-3 {width: 25%}
|
||||
.block-sm .flow-item > div:after {right: -6px;}
|
||||
|
||||
.flow-item-display {overflow: hidden; white-space:nowrap; text-overflow: clip; font-size: 12px;}
|
||||
</style>
|
||||
@@ -1,49 +0,0 @@
|
||||
<?php if(empty($issues)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<style>
|
||||
.block-issues .c-id {width: 50px;}
|
||||
.block-issues .c-pri {width: 50px;text-align: center;}
|
||||
.block-issues .c-category {width: 90px;}
|
||||
.block-issues .c-identifiedDate {width: 100px;}
|
||||
.block-issues .c-severity {width: 80px;}
|
||||
.block-issues .c-status {width: 90px;}
|
||||
.block-issues.block-sm .c-status {text-align: center;}
|
||||
</style>
|
||||
<div class='panel-body has-table scrollbar-hover'>
|
||||
<table class='table table-borderless table-fixed table-fixed-head table-hover tablesorter block-issues <?php if(!$longBlock) echo 'block-sm'?>'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-id'><?php echo $lang->idAB?></th>
|
||||
<th class='c-name'><?php echo $lang->issue->title?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-pri'><?php echo $lang->priAB?></th>
|
||||
<th class='c-category'><?php echo $lang->issue->severity;?></th>
|
||||
<th class='c-identifiedDate'><?php echo $lang->issue->deadline;?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-status'><?php echo $lang->issue->status;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($issues as $issue):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
?>
|
||||
<tr>
|
||||
<td class='c-id-xs'><?php echo sprintf('%03d', $issue->id);?></td>
|
||||
<td class='c-name' title='<?php echo $issue->title?>'><?php echo html::a($this->createLink('issue', 'view', "issueID=$issue->id", '', '', $issue->project), $issue->title)?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-pri'><span class="label-pri label-pri-<?php echo $issue->pri;?>"><?php echo zget($lang->issue->priList, $issue->pri)?></span></td>
|
||||
<td class='c-severity severity-issue severity-<?php echo $issue->severity;?>'><?php echo zget($lang->issue->severityList, $issue->severity)?></td>
|
||||
<td class='c-deadline'><?php echo $issue->deadline == '0000-00-00' ? '' : $issue->deadline;?></td>
|
||||
<?php endif;?>
|
||||
<?php $status = $this->processStatus('issue', $issue);?>
|
||||
<td class='c-status' title='<?php echo $status;?>'>
|
||||
<span class="status-issue status-<?php echo $issue->status?>"><?php echo $status;?></span>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -1,16 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The main view file of block module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.pms
|
||||
*/
|
||||
$viewDir = dirname(__FILE__);
|
||||
$extFire = $app->getExtensionRoot() . $config->edition . "/block/ext/view/{$code}block.html.php";
|
||||
$file2Include = file_exists($extFire) ? $extFire : "{$viewDir}/{$code}block.html.php";
|
||||
include $file2Include;
|
||||
?>
|
||||
@@ -1,49 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The plan block view file of block module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php if(empty($plans)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<div class='panel-body has-table scrollbar-hover'>
|
||||
<table class='table table-borderless table-hover table-fixed table-fixed-head tablesorter block-plan'>
|
||||
<thead>
|
||||
<tr>
|
||||
<?php if($longBlock):?>
|
||||
<th class='text-center w-50px'><?php echo $lang->idAB?></th>
|
||||
<th><?php echo $lang->productplan->product;?></th>
|
||||
<?php endif;?>
|
||||
<th><?php echo $lang->productplan->title;?></th>
|
||||
<th class='text-center w-100px'><?php echo $lang->productplan->begin;?></th>
|
||||
<th class='text-center w-100px'><?php echo $lang->productplan->end;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($plans as $plan):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$planViewLink = $this->createLink('productplan', 'view', "planID={$plan->id}");
|
||||
$productViewLink = $this->createLink('product', 'view', "productID={$plan->product}");
|
||||
?>
|
||||
<tr <?php echo $appid?>>
|
||||
<?php if($longBlock):?>
|
||||
<td class='text-center'><?php echo $plan->id;?></td>
|
||||
<td title='<?php echo $plan->productName?>'><?php echo html::a($productViewLink, $plan->productName);?></td>
|
||||
<?php endif;?>
|
||||
<td title='<?php echo $plan->title?>'><?php echo html::a($planViewLink, $plan->title);?></td>
|
||||
<td class='text-center'><?php echo $plan->begin?></td>
|
||||
<td class='text-center'><?php echo $plan->end?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -1,242 +0,0 @@
|
||||
<style>
|
||||
.preference .table-form > tbody > tr > th {font-weight: 400; color: #0B0F18;}
|
||||
.preference .chosen-container-single .chosen-single > span {color: #313C52;}
|
||||
.tip {margin-top: 10px;}
|
||||
|
||||
.preference > .preference-border {
|
||||
display: flex;
|
||||
padding: 5px 16px;
|
||||
border: 1px solid #EDEEF2;
|
||||
}
|
||||
.preference-border > .preference-img {
|
||||
flex: 0 0 80px;
|
||||
}
|
||||
.preference.picker-option-active >.preference-border {
|
||||
border: 2px solid #2E7FFF;
|
||||
}
|
||||
.preference.picker-option-active {
|
||||
background: unset!important;
|
||||
}
|
||||
.preference.picker-option-active > .preference-border {
|
||||
background: rgba(230,240,255, 0.4)!important;
|
||||
}
|
||||
.picker-option.picker-option-selected.preference {
|
||||
background: unset!important;
|
||||
}
|
||||
.picker-option.picker-option-selected.preference > .preference-border {
|
||||
background: rgba(230,240,255, 0.4)!important;
|
||||
}
|
||||
.preference-text {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-around;
|
||||
padding-left: 5px;
|
||||
}
|
||||
.preference-text > .title {
|
||||
color: #0B0F18;
|
||||
font-size: 13px;
|
||||
}
|
||||
.preference-text > .context {
|
||||
color: #838A9D;
|
||||
font-size: 12px;
|
||||
overflow: hidden;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.picker-option.picker-option-active,
|
||||
.picker-single .picker-option.picker-option-selected.picker-option-active.option-ursr,
|
||||
.picker-option.picker-option-selected.option-ursr {
|
||||
background: unset!important;
|
||||
color: unset;
|
||||
}
|
||||
.picker-option.picker-option-active > .border,
|
||||
.picker-single .picker-option.picker-option-selected.picker-option-active.option-ursr > .border,
|
||||
.picker-single .picker-option.picker-option-selected.picker-option-active.option-ursr > .border {
|
||||
background: rgba(230,240,255, 0.4)!important;
|
||||
}
|
||||
#pickerDropMenu-pk_URSR > .picker-option-list {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.option-ursr {
|
||||
flex: 1 1 50%;
|
||||
}
|
||||
.option-ursr > .border {
|
||||
height: 46px;
|
||||
display: flex;
|
||||
padding: 5px 16px;
|
||||
border: 1px solid #EDEEF2;
|
||||
align-items: center;
|
||||
}
|
||||
.option-ursr > .border > .value {
|
||||
margin-right: 20px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border-radius: 100%;
|
||||
background: rgba(230,240,255, 0.4);
|
||||
}
|
||||
.option-ursr > .border > .value > p {
|
||||
line-height: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
<div class='preference'>
|
||||
<form method='post' target='hiddenwin' action='<?php echo $this->createLink('my', 'preference', "showTip=false")?>'>
|
||||
<table align='center' class='table table-form w-320px'>
|
||||
<tr>
|
||||
<th class='w-120px'><?php echo $lang->my->storyConcept;?></th>
|
||||
<td><?php echo html::select('URSR', $URSRList, $URSR, "class='form-control picker URSR'");?></td>
|
||||
</tr>
|
||||
<?php if(in_array($config->systemMode, array('ALM', 'PLM'))):?>
|
||||
<tr>
|
||||
<th><?php echo $lang->my->programLink;?></th>
|
||||
<td><?php echo html::select('programLink', $lang->my->programLinkList, $programLink, "class='form-control picker programLink'");?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th><?php echo $lang->my->productLink;?></th>
|
||||
<td><?php echo html::select('productLink', $lang->my->productLinkList, $productLink, "class='form-control picker productLink'");?></td>
|
||||
</tr>
|
||||
<?php if($config->vision != 'or'):?>
|
||||
<tr>
|
||||
<th><?php echo $lang->my->projectLink;?></th>
|
||||
<td><?php echo html::select('projectLink', $lang->my->projectLinkList, $projectLink, "class='form-control picker projectLink'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->my->executionLink;?></th>
|
||||
<td><?php echo html::select('executionLink', $lang->my->executionLinkList, $executionLink, "class='form-control picker executionLink'");?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<td colspan='2' class='text-center form-actions'>
|
||||
<?php echo html::submitButton();?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
/**
|
||||
* Init preference.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function initPreference() {
|
||||
var objPngSrc = {
|
||||
'program-browse': 'list',
|
||||
'program-project': 'list-recent',
|
||||
'program-kanban': 'kanban',
|
||||
|
||||
'product-index': 'panel-recent-browse',
|
||||
'product-all': 'list',
|
||||
'product-dashboard': 'panel',
|
||||
'product-browse': 'list-recent',
|
||||
'product-kanban': 'kanban',
|
||||
|
||||
'project-browse': 'list',
|
||||
'project-execution': 'list-recent',
|
||||
'project-index': 'panel-recent-browse',
|
||||
'project-kanban': 'kanban',
|
||||
|
||||
'execution-all': 'list',
|
||||
'execution-task': 'list-recent',
|
||||
'execution-executionkanban': 'kanban',
|
||||
}
|
||||
|
||||
/**
|
||||
* Render program option.
|
||||
*
|
||||
* @param object $option
|
||||
* @param object $b
|
||||
* @access public
|
||||
* @return object
|
||||
*/
|
||||
function optionRenderProgram($option, b)
|
||||
{
|
||||
/* transform , to , then split to fit lang */
|
||||
var textArr = b.text.split('/');
|
||||
if (!$option.hasClass('preference'))
|
||||
{
|
||||
$option.empty();
|
||||
$option.addClass('preference');
|
||||
$option.attr("title", textArr[0]);
|
||||
$option.prepend('<div class="preference-border"><div class="preference-img"><img src="theme/default/images/guide/' + objPngSrc[b.value] + '.png"></div><div class="preference-text"><div class="title">' + textArr[0] + '</div><div class="context">' + textArr[1] + '</div></div></div>');
|
||||
}
|
||||
return $option;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render program text.
|
||||
*
|
||||
* @param object $text
|
||||
* @param object $b
|
||||
* @access public
|
||||
* @return object
|
||||
*/
|
||||
function textRenderProgram($text, b)
|
||||
{
|
||||
$text.empty();
|
||||
$text.addClass('preference-selection');
|
||||
$text.prepend('<span>' + b.split('/')[0] + '</span>')
|
||||
return $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render URSR option.
|
||||
*
|
||||
* @param object $option
|
||||
* @param object $b
|
||||
* @access public
|
||||
* @return object
|
||||
*/
|
||||
function optionRenderURSR($option, b)
|
||||
{
|
||||
if (!$option.hasClass('option-ursr'))
|
||||
{
|
||||
$option.addClass('option-ursr');
|
||||
$option.parent().addClass('list-ursr');
|
||||
$option.empty();
|
||||
$option.prepend('<div class="border shadow-primary-hover"><div class="value"><p>' + (b.$_index + 1) + '</p></div><div class="context">' + b.text + '</div></div>');
|
||||
}
|
||||
return $option;
|
||||
}
|
||||
|
||||
$('.programLink').picker({
|
||||
optionRender: optionRenderProgram,
|
||||
selectionTextRender: textRenderProgram
|
||||
});
|
||||
|
||||
$('.productLink').picker({
|
||||
optionRender: optionRenderProgram,
|
||||
selectionTextRender: textRenderProgram
|
||||
});
|
||||
|
||||
$('.projectLink').picker({
|
||||
optionRender: optionRenderProgram,
|
||||
selectionTextRender: textRenderProgram
|
||||
});
|
||||
|
||||
$('.executionLink').picker({
|
||||
optionRender: optionRenderProgram,
|
||||
selectionTextRender: textRenderProgram
|
||||
});
|
||||
|
||||
$('.URSR').picker({
|
||||
optionRender: optionRenderURSR
|
||||
});
|
||||
|
||||
$(document).on('mousemove', 'a.picker-option', function(e)
|
||||
{
|
||||
$('.picker-option.text-primary').removeClass('text-primary');
|
||||
$(this).addClass('text-primary');
|
||||
});
|
||||
}
|
||||
|
||||
$(function()
|
||||
{
|
||||
initPreference();
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
@@ -1,208 +0,0 @@
|
||||
<style>
|
||||
.block-productdoc .nav-stacked {overflow:auto; height:220px; max-height:220px; }
|
||||
.block-productdoc .panel-heading {border-bottom:1px solid #ddd;}
|
||||
.block-productdoc .panel-body {padding-top: 0; height:240px; padding-right:0px; padding-bottom:0px;}
|
||||
.block-productdoc .tab-content {padding-right:0px;}
|
||||
.block-productdoc .tab-pane {max-height:220px; overflow:auto;}
|
||||
.block-productdoc table.tablesorter th{border-bottom:0px !important;}
|
||||
.block-productdoc .tile {margin-bottom: 30px;}
|
||||
.block-productdoc .tile-title {font-size: 18px; color: #A6AAB8;}
|
||||
.block-productdoc .tile-amount {font-size: 48px; margin-bottom: 10px;}
|
||||
.block-productdoc .col-nav {border-right: 1px solid #EBF2FB; width: 210px; padding: 5px 0 0 0; }
|
||||
.block-productdoc .nav-secondary > li {position: relative;}
|
||||
.block-productdoc .nav-secondary > li > a {font-size: 14px; color: #838A9D; position: relative; box-shadow: none; padding-left: 20px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; transition: all .2s;}
|
||||
.block-productdoc .nav-secondary > li > a:first-child {padding-right: 36px;}
|
||||
.block-productdoc .nav-secondary > li.active > a:first-child {color: #3C4353; box-shadow: none;}
|
||||
.block-productdoc .nav-secondary > li.active > a:first-child:hover,
|
||||
.block-productdoc .nav-secondary > li.active > a:first-child:focus,
|
||||
.block-productdoc .nav-secondary > li > a:first-child:hover {box-shadow: none; border-radius: 4px 0 0 4px;}
|
||||
.block-productdoc .nav-secondary > li.active > a:first-child:before {content: ' '; display: block; left: -1px; top: 10px; bottom: 10px; width: 4px; background: #006af1; position: absolute;}
|
||||
.block-productdoc .nav-secondary > li > a.btn-view {position: absolute; top: 0; right: 0; bottom: 0; padding: 8px; width: 36px; text-align: center; opacity: 0;}
|
||||
.block-productdoc .nav-secondary > li:hover > a.btn-view {opacity: 1;}
|
||||
.block-productdoc .nav-secondary > li.active > a.btn-view {box-shadow: none;}
|
||||
.block-productdoc .nav-secondary > li.switch-icon {display: none;}
|
||||
.block-productdoc.block-sm .nav-stacked {height:auto;}
|
||||
.block-productdoc.block-sm .panel-body {position: relative; border-radius: 3px; height:275px; padding: 45px 8px 10px 8px}
|
||||
.block-productdoc.block-sm .panel-body > .table-row,
|
||||
.block-productdoc.block-sm .panel-body > .table-row > .col {display: block; width: auto;}
|
||||
.block-productdoc.block-sm .panel-body > .table-row > .tab-content {padding: 0; margin: 0 -5px;}
|
||||
.block-productdoc.block-sm .tab-pane > .table-row > .col-5 {width: 125px;}
|
||||
.block-productdoc.block-sm .tab-pane > .table-row > .col-5 > .table-row {padding: 5px 0;}
|
||||
.block-productdoc.block-sm .col-nav {border-left: none; position: absolute; top: 0; left: 15px; right: 15px; background: #f5f5f5; padding: 0px; margin-top:5px;}
|
||||
.block-productdoc.block-sm .nav-secondary {display: table; width: 100%; padding: 0; table-layout: fixed;}
|
||||
.block-productdoc.block-sm .nav-secondary > li {display: none;}
|
||||
.block-productdoc.block-sm .nav-secondary > li.switch-icon,
|
||||
.block-productdoc.block-sm .nav-secondary > li.active {display: table-cell; width: 100%; text-align: center;}
|
||||
.block-productdoc.block-sm .nav-secondary > li.active > a:hover {cursor: default; background: none;}
|
||||
.block-productdoc.block-sm .nav-secondary > li.switch-icon > a:hover {background: rgba(0, 0, 0, 0.07);}
|
||||
.block-productdoc.block-sm .nav-secondary > li > a {padding: 5px 10px; border-radius: 4px;}
|
||||
.block-productdoc.block-sm .nav-secondary > li > a:before {display: none;}
|
||||
.block-productdoc.block-sm .nav-secondary > li.switch-icon {width: 40px;}
|
||||
.block-productdoc.block-sm .nav-secondary > li.active > a:first-child:before {display: none}
|
||||
.block-productdoc.block-sm .nav-secondary > li.active > a.btn-view {width: auto; left: 0; right: 0;}
|
||||
.block-productdoc.block-sm .nav-secondary > li.active > a.btn-view > i {display: none;}
|
||||
.block-productdoc.block-sm .nav-secondary > li.active > a.btn-view:hover {cursor: pointer; background: rgba(0,0,0,.1);}
|
||||
|
||||
.block-productdoc .data {width: 40%; text-align: left; padding: 10px 0px; font-size: 14px; font-weight: 700;}
|
||||
.block-productdoc .dataTitle {width: 60%; text-align: right; padding: 10px 0px; font-size: 14px;}
|
||||
.block-productdoc .executionName {padding: 2px 10px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap;}
|
||||
.block-productdoc .lastIteration {padding-top: 6px;}
|
||||
|
||||
.forty-percent {width: 40%;}
|
||||
html[lang="de"] .block-productdoc .c-user{width: 105px;}
|
||||
|
||||
.block-productdoc #productType {position: absolute;top: 8px;left: 120px;}
|
||||
.block-productdoc #productType .btn {border:0px;}
|
||||
.block-productdoc #productType .btn:hover {background-color:#f5f5f5;}
|
||||
|
||||
.block-productdoc .table .c-title > .doc-title {display: inline-block; overflow: hidden; background: transparent; padding-right:0px;}
|
||||
.block-productdoc .table .c-title > span.doc-title {line-height: 0; vertical-align: inherit;}
|
||||
.block-productdoc .table .c-title[data-status=draft] > .doc-title {max-width: calc(100% - 35px);}
|
||||
.block-productdoc .table .c-title > .draft {background-color:rgba(129, 102, 238, 0.12); color:#8166EE;}
|
||||
</style>
|
||||
<?php $blockNavId = 'nav-' . uniqid(); ?>
|
||||
<?php js::set('emptyProducts', empty($products));?>
|
||||
<?php js::set('emptyInvolveds', empty($involveds));?>
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
if($('.block-productdoc<?php echo "#block{$block->id}";?> #productType').length > 1);
|
||||
{
|
||||
count = $('.block-productdoc<?php echo "#block{$block->id}";?> #productType').length;
|
||||
$('.block-productdoc<?php echo "#block{$block->id}";?> #productType').each(function()
|
||||
{
|
||||
if(count == 1) return;
|
||||
$(this).remove();
|
||||
count --;
|
||||
})
|
||||
}
|
||||
});
|
||||
|
||||
function switch<?php echo "block{$block->id}";?>Product(obj)
|
||||
{
|
||||
var $this = $(obj);
|
||||
var $nav = $this.closest('.nav');
|
||||
var isPrev = $this.is('.prev');
|
||||
var $activeItem = $nav.children('.active');
|
||||
var $next = $activeItem[isPrev ? 'prev' : 'next']('li:not(.switch-icon)');
|
||||
if($next.length > 0) $next.find('a[data-toggle="tab"]').trigger('click');
|
||||
if($next.length == 0) $nav.children('li:not(.switch-icon)')[isPrev ? 'last' : 'first']().find('a[data-toggle="tab"]').trigger('click');
|
||||
return false;
|
||||
}
|
||||
|
||||
function change<?php echo "block{$block->id}";?>ProductType(type)
|
||||
{
|
||||
var hiddenData = type == 'all' ? emptyProducts : emptyInvolveds;
|
||||
if(hiddenData)
|
||||
{
|
||||
$('.block-productdoc<?php echo "#block{$block->id}";?> .dataBlock').addClass('hidden');
|
||||
$('.block-productdoc<?php echo "#block{$block->id}";?> .block-statistic > .table-empty-tip').removeClass('hidden');
|
||||
}
|
||||
else
|
||||
{
|
||||
$('.block-productdoc<?php echo "#block{$block->id}";?> .dataBlock').removeClass('hidden');
|
||||
$('.block-productdoc<?php echo "#block{$block->id}";?> .block-statistic > .table-empty-tip').addClass('hidden');
|
||||
}
|
||||
|
||||
$('.block-productdoc<?php echo "#block{$block->id}";?> .nav.products').toggleClass('hidden', type != 'all');
|
||||
$('.block-productdoc<?php echo "#block{$block->id}";?> .nav.involveds').toggleClass('hidden', type != 'involved');
|
||||
$('.block-productdoc<?php echo "#block{$block->id}";?> #productType .btn').html($('.block-productdoc<?php echo "#block{$block->id}";?> #productType [data-type=' + type + ']').html() + " <span class='caret'></span>");
|
||||
var name = type == 'all' ? '.block-productdoc<?php echo "#block{$block->id}";?> .products' : '.block-productdoc<?php echo "#block{$block->id}";?> .involveds';
|
||||
var $obj = $(name + ' li.active').length > 0 ? $(name + ' .active:first').find('a') : $(name + ' li:not(.switch-icon):first').find('a');
|
||||
$(name + ' li').removeClass('active');
|
||||
$obj.closest('li').addClass('active');
|
||||
$('.block-productdoc<?php echo "#block{$block->id}";?> .tab-pane').removeClass('active').removeClass('in');
|
||||
$('.block-productdoc<?php echo "#block{$block->id}";?> .tab-pane' + $obj.data('target')).addClass('active').addClass('in');
|
||||
|
||||
$('.block-productdoc<?php echo "#block{$block->id}";?> #productType .dropdown-menu li').removeClass('active');
|
||||
$('.block-productdoc<?php echo "#block{$block->id}";?> #productType .dropdown-menu li a[data-type=' + type + ']').closest('li').addClass('active');
|
||||
}
|
||||
|
||||
</script>
|
||||
<div class="dropdown" id='productType'>
|
||||
<button class="btn" type="button" data-toggle="dropdown"><?php echo $lang->product->involved;?> <span class="caret"></span></button>
|
||||
<ul class="dropdown-menu">
|
||||
<li class='active'><a href="javascript:change<?php echo "block{$block->id}";?>ProductType('involved')" data-type='involved'><?php echo $lang->product->involved;?></a></li>
|
||||
<li><a href="javascript:change<?php echo "block{$block->id}";?>ProductType('all')" data-type='all'><?php echo $lang->product->all;?></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<?php $hiddenBlock = empty($involveds) ? 'hidden' : '';?>
|
||||
<?php $hiddenEmpty = empty($involveds) ? '' : 'hidden';?>
|
||||
<div class="panel-body">
|
||||
<div class="table-row block-statistic">
|
||||
<div class="table-empty-tip <?php echo $hiddenEmpty;?>">
|
||||
<p><span class="text-muted"><?php echo $lang->block->emptyTip;?></span></p>
|
||||
</div>
|
||||
<div class="col col-nav dataBlock <?php echo $hiddenBlock;?>">
|
||||
<ul class="nav nav-stacked nav-secondary scrollbar-hover involveds">
|
||||
<li class='switch-icon prev'><a href='###' onclick='switch<?php echo "block{$block->id}";?>Product(this)'><i class='icon icon-arrow-left'></i></a></li>
|
||||
<?php $selected = key($involveds);?>
|
||||
<?php foreach($involveds as $product):?>
|
||||
<li <?php if($product->id == $selected) echo "class='active' id='activeProduct'";?> productid='<?php echo $product->id;?>'>
|
||||
<a href="###" title="<?php echo $product->name?>" data-target='<?php echo "#tab3{$blockNavId}Content{$product->id}";?>' data-toggle="tab"><?php echo $product->name;?></a>
|
||||
<?php echo html::a(helper::createLink('doc', 'productSpace', "productID=$product->id"), "<i class='icon-arrow-right text-primary'></i>", '', "class='btn-view'");?>
|
||||
</li>
|
||||
<?php endforeach;?>
|
||||
<li class='switch-icon next'><a href='###' onclick='switch<?php echo "block{$block->id}";?>Product(this)'><i class='icon icon-arrow-right'></i></a></li>
|
||||
</ul>
|
||||
<ul class="nav nav-stacked nav-secondary scrollbar-hover products hidden">
|
||||
<li class='switch-icon prev'><a href='###' onclick='switch<?php echo "block{$block->id}";?>Product(this)'><i class='icon icon-arrow-left'></i></a></li>
|
||||
<?php foreach($products as $product):?>
|
||||
<li productid='<?php echo $product->id;?>'>
|
||||
<a href="###" title="<?php echo $product->name?>" data-target='<?php echo "#tab3{$blockNavId}Content{$product->id}";?>' data-toggle="tab"><?php echo $product->name;?></a>
|
||||
<?php echo html::a(helper::createLink('doc', 'productSpace', "productID=$product->id"), "<i class='icon-arrow-right text-primary'></i>", '', "class='btn-view'");?>
|
||||
</li>
|
||||
<?php endforeach;?>
|
||||
<li class='switch-icon next'><a href='###' onclick='switch<?php echo "block{$block->id}";?>Product(this)'><i class='icon icon-arrow-right'></i></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col tab-content dataBlock <?php echo $hiddenBlock;?>">
|
||||
<?php foreach($products as $product):?>
|
||||
<div class="tab-pane fade<?php if($product->id == $selected) echo ' active in';?>" id='<?php echo "tab3{$blockNavId}Content{$product->id}";?>'>
|
||||
<?php if(isset($docGroup[$product->id])):?>
|
||||
<div class="table-row">
|
||||
<table class='table table-borderless table-hover table-fixed table-fixed-head tablesorter'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-name'><?php echo $lang->doc->title?></th>
|
||||
<th class='c-user'><?php echo $lang->doc->addedBy?></th>
|
||||
<th class='c-date'><?php echo $lang->doc->addedDate?></th>
|
||||
<th class='c-date'><?php echo $lang->doc->editedDate?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($docGroup[$product->id] as $doc):?>
|
||||
<tr>
|
||||
<td class='c-title' data-status='<?php echo $doc->status?>'>
|
||||
<?php
|
||||
$docType = zget($config->doc->iconList, $doc->type);
|
||||
$icon = html::image("static/svg/{$docType}.svg", "class='file-icon'");
|
||||
if(common::hasPriv('doc', 'view'))
|
||||
{
|
||||
echo html::a($this->createLink('doc', 'view', "docID=$doc->id"), $icon . $doc->title, '', "title='{$doc->title}' class='doc-title' data-app='{$this->app->tab}'");
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "<span class='doc-title' title='{$doc->title}'>$icon {$doc->title}</span>";
|
||||
}
|
||||
if($doc->status == 'draft') echo "<span class='label label-badge draft'>{$lang->doc->draft}</span>";
|
||||
?>
|
||||
</td>
|
||||
<td class='c-user'><?php echo zget($users, $doc->addedBy);?></td>
|
||||
<td class='c-date'><?php echo substr($doc->addedDate, 0, 10);?></td>
|
||||
<td class='c-date'><?php echo substr($doc->editedDate, 0, 10);?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->block->emptyTip;?></span></p>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,37 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The overview block view file of block module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Gang Liu <liugang@cnezsoft.com>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<style>
|
||||
.block-overview .status-list li + li {margin-top: 5px;}
|
||||
.block-overview .status-list li > strong {font-size: 16px;}
|
||||
.progress-pie {position: relative;}
|
||||
.progress-pie .progress-info {position: absolute; width: 100%; height: 100%; left: 0; top: 0; text-align: center; padding-top: 25px;}
|
||||
.progress-pie .progress-info > small {display: block; color: #A6AAB8; line-height: 14px;}
|
||||
.progress-pie .progress-info > strong {display: block; font-size: 32px; line-height: 40px;}
|
||||
</style>
|
||||
<div class="panel-body table-row">
|
||||
<div class="col-6 text-middle text-center">
|
||||
<div class="progress-pie inline-block" data-value="<?php echo $normalPercent;?>" data-doughnut-size="80">
|
||||
<canvas width="100" height="100" style="width: 100px; height: 100px;"></canvas>
|
||||
<div class="progress-info">
|
||||
<small><?php echo $lang->product->all;?></small>
|
||||
<strong class='text-primary'><?php echo empty($total) ? 0 : html::a($this->createLink('product', 'all', "browseType=all"), $total, '', "class='text-primary'");?></strong>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 text-middle">
|
||||
<ul class="list-unstyled status-list">
|
||||
<li><span class="status-product status-unclosed"><?php echo $lang->product->statusList['normal'];?></span> <strong class='text-primary'><?php echo empty($normal) ? 0 : html::a($this->createLink('product', 'all', "browseType=noclosed"), $normal, '', "class='text-primary'");?></strong></li>
|
||||
<li><span class="status-product status-closed"><?php echo $lang->product->statusList['closed'];?></span> <strong class='text-primary'><?php echo empty($closed) ? 0 : html::a($this->createLink('product', 'all', "browseType=closed"), $closed, '', "class='text-primary'");?></strong></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,219 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The report block view file of block module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Gang Liu <liugang@cnezsoft.com>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<style>
|
||||
.types-line {display: table; padding: 0; margin: 0 auto;}
|
||||
.types-line > li {display: table-cell;}
|
||||
.types-line > li > div {position: relative; padding: 18px 5px 5px; text-align: center;}
|
||||
.types-line > li > div:before {content: ''; display: block; background: #eee; width: 100%; height: 2px; position: absolute; left: 50%; top: 4px;}
|
||||
.types-line > li:last-child > div:before {display: none;}
|
||||
.types-line > li > div:after {content: ''; display: block; background: #FFFFFF; box-shadow: 0 2px 4px 0 rgba(170,170,170,0.50), 0 0 5px 0 rgba(0,0,0,0.1); width: 10px; height: 10px; position: absolute; border-radius: 50%; top: 0; left: 50%; margin-left: -2px;}
|
||||
.types-line > li > div > small {display: block; color: #A6AAB8;}
|
||||
.types-line > li > div > span {display: block; color: #CBD0DB; font-size: 16px;}
|
||||
.product-info {position: relative; height: 65px;}
|
||||
.product-info + .product-info {margin-top: 10px;}
|
||||
.product-info .progress {position: absolute; left: 10px; top: 35px; right: 90px;}
|
||||
.product-info .progress-info {position: absolute; left: 5px; top: 10px; width: 180px; font-size: 12px;}
|
||||
.product-info .type-info {color: #A6AAB8; text-align: center; position: absolute; right: 0; top: 6px; width: 100px;}
|
||||
html[lang="en"] .product-info .type-info {color: #A6AAB8; text-align: center; position: absolute; right: 0; top: 6px; width: 75px;}
|
||||
.product-info .type-value,
|
||||
.product-info .type-label {font-size: 12px; overflow: visible; text-overflow: ellipsis; white-space: nowrap;}
|
||||
.product-info .type-value {font-size: 14px;}
|
||||
.product-info .type-value > strong {font-size: 20px; color: #3C4353;}
|
||||
.product-info .actions {position: absolute; right: 90px; top: 14px;}
|
||||
.block-statistic .panel-body {padding-top: 0;}
|
||||
.block-statistic .panel-body {padding-top: 0;}
|
||||
.block-statistic .tile {margin-bottom: 30px;}
|
||||
.block-statistic .tile-title {font-size: 18px; margin-bottom: 10px; color: #313C52;}
|
||||
.block-statistic .tile-amount {font-size: 44px; margin-bottom: 10px;}
|
||||
.block-statistic .col-nav {border-right: 1px solid #EBF2FB; width: 220px; padding: 0;}
|
||||
.block-statistic .nav-secondary > li {position: relative}
|
||||
.block-statistic .nav-secondary > li:hover {background: #f5f5f5;}
|
||||
.block-statistic .nav-secondary > li > a {font-size: 14px; color: #838A9D; position: relative; box-shadow: none; padding-left: 20px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; transition: all .2s;}
|
||||
.block-statistic .nav-secondary > li > a:first-child {padding-right: 36px;}
|
||||
.block-statistic .nav-secondary > li.active > a:first-child {color: #3C4353; background: transparent; box-shadow: none;}
|
||||
.block-statistic .nav-secondary > li.active > a:first-child:hover,
|
||||
.block-statistic .nav-secondary > li.active > a:first-child:focus,
|
||||
.block-statistic .nav-secondary > li > a:first-child:hover {box-shadow: none; border-radius: 4px 0 0 4px;}
|
||||
.block-statistic .nav-secondary > li.active > a:first-child:before {content: ' '; display: block; left: -1px; top: 10px; bottom: 10px; width: 4px; background: #006af1; position: absolute;}
|
||||
.block-statistic .nav-secondary > li > a.btn-view {position: absolute; top: 0; right: 0; bottom: 0; padding: 8px; width: 36px; text-align: center; opacity: 0; background: rgba(0,0,0,.05)}
|
||||
.block-statistic .nav-secondary > li.active > a.btn-view {box-shadow: none;}
|
||||
.block-statistic .nav-secondary > li:hover > a.btn-view {opacity: 1;}
|
||||
.block-statistic .nav-secondary > li.switch-icon {display: none;}
|
||||
.block-statistic.block-sm .panel-body {padding-bottom: 10px; position: relative; padding-top: 45px;}
|
||||
.block-statistic.block-sm .panel-body > .table-row,
|
||||
.block-statistic.block-sm .panel-body > .table-row > .col {display: block; width: auto;}
|
||||
.block-statistic.block-sm .panel-body > .table-row > .tab-content {padding: 0; margin: 0 -5px;}
|
||||
.block-statistic.block-sm .tab-pane > .table-row > .col-5 {width: 125px;}
|
||||
.block-statistic.block-sm .tab-pane > .table-row > .col-5 > .table-row {padding: 5px 0;}
|
||||
.block-statistic.block-sm .col-nav {border-left: none; position: absolute; top: 0; left: 15px; right: 15px; background: #f5f5f5; border-radius: 3px;}
|
||||
.block-statistic.block-sm .nav-secondary {display: table; width: 100%; padding: 0; table-layout: fixed;}
|
||||
.block-statistic.block-sm .nav-secondary > li {display: none;}
|
||||
.block-statistic.block-sm .nav-secondary > li.switch-icon,
|
||||
.block-statistic.block-sm .nav-secondary > li.active {display: table-cell; width: 100%; text-align: center;}
|
||||
.block-statistic.block-sm .nav-secondary > li.active > a:hover {cursor: default; background: none;}
|
||||
.block-statistic.block-sm .nav-secondary > li.switch-icon > a:hover {background: rgba(0,0,0,0.07);}
|
||||
.block-statistic.block-sm .nav-secondary > li > a {padding: 5px 10px; border-radius: 4px;}
|
||||
.block-statistic.block-sm .nav-secondary > li > a:before {display: none;}
|
||||
.block-statistic.block-sm .nav-secondary > li.switch-icon {width: 40px;}
|
||||
.block-statistic.block-sm .types-line > li > div {padding: 18px 2px 5px;}
|
||||
.block-statistic.block-sm .nav-secondary > li.active > a:first-child:before {display: none;}
|
||||
.block-statistic.block-sm .nav-secondary > li.active > a.btn-view {width: auto; left: 0; right: 0;}
|
||||
.block-statistic.block-sm .nav-secondary > li.active > a.btn-view > i {display: none;}
|
||||
.block-statistic.block-sm .nav-secondary > li.active > a.btn-view:hover {cursor: pointer; background: rgba(0,0,0,.1);}
|
||||
|
||||
.status-count {margin:auto;}
|
||||
.status-count tr:first-child td:last-child {color:#000; font-weight:bold;}
|
||||
</style>
|
||||
<script>
|
||||
<?php $blockNavId = 'nav-' . uniqid(); ?>
|
||||
$(function()
|
||||
{
|
||||
var $nav = $('#<?php echo $blockNavId;?>');
|
||||
$nav.on('click', '.switch-icon', function(e)
|
||||
{
|
||||
var isPrev = $(this).is('.prev');
|
||||
var $activeItem = $nav.children('.active');
|
||||
var $next = $activeItem[isPrev ? 'prev' : 'next']('li:not(.switch-icon)');
|
||||
if ($next.length) $next.find('a[data-toggle="tab"]').trigger('click');
|
||||
else $nav.children('li:not(.switch-icon)')[isPrev ? 'last' : 'first']().find('a[data-toggle="tab"]').trigger('click');
|
||||
e.preventDefault();
|
||||
|
||||
});
|
||||
|
||||
var $productLi = $('#activeProduct');
|
||||
if($productLi.length)
|
||||
{
|
||||
var productLi = $productLi[0];
|
||||
$(".col ul.nav").animate({scrollTop: productLi.offsetTop}, "slow");
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<div class="panel-body">
|
||||
<div class="table-row">
|
||||
<?php if(empty($products)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->block->noData;?></span></p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class="col col-nav">
|
||||
<ul class="nav nav-stacked nav-secondary scrollbar-hover" id='<?php echo $blockNavId;?>'>
|
||||
<li class='switch-icon prev'><a><i class='icon icon-arrow-left'></i></a></li>
|
||||
<?php $selected = empty($_SESSION['product']) ? key($products) : $this->session->product;?>
|
||||
<?php $selected = !isset($products[$selected]) ? key($products) : $selected;?>
|
||||
<?php foreach($products as $product):?>
|
||||
<li <?php if($product->id == $selected) echo "class='active' id='activeProduct'";?> productID='<?php echo $product->id;?>'>
|
||||
<a href="javascript:;" data-target="#tabProduct<?php echo $product->id;?>" data-toggle="tab" title='<?php echo $product->name;?>'><?php echo $product->name;?></a>
|
||||
<?php echo html::a(helper::createLink('product', 'browse', "productID=$product->id"), "<i class='icon-arrow-right text-primary'></i>", '', "class='btn-view' title={$lang->product->browse}");?></li>
|
||||
<?php endforeach;?>
|
||||
<li class='switch-icon next'><a><i class='icon icon-arrow-right'></i></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col tab-content">
|
||||
<?php foreach($products as $product):?>
|
||||
<div class="tab-pane fade <?php if($product->id == $selected) echo 'active in';?>" id="tabProduct<?php echo $product->id;?>">
|
||||
<div class="table-row">
|
||||
<div class="col-6 text-middle">
|
||||
<div class="tile">
|
||||
<div class="tile-title"><?php echo $lang->SRCommon;?></div>
|
||||
<?php if($product->stories):?>
|
||||
<div class="tile-amount text-primary"><?php echo array_sum($product->stories);?></div>
|
||||
<?php common::printLink('product', 'browse', "productID={$product->id}&branch=&type=allstory", $lang->story->viewAll . '<span class="label label-badge label-icon"><i class="icon icon-arrow-right"></i></span>', '', 'class="btn btn-primary btn-circle btn-icon-right btn-sm" data-app="product"');?>
|
||||
<?php else:?>
|
||||
<div class="tile-amount text-primary">0</div>
|
||||
<?php common::printLink('story', 'create', "productID={$product->id}", '<span class="label label-badge label-icon"><i class="icon icon-plus"></i></span>' . $lang->story->create, '', 'class="btn btn-primary btn-circle btn-icon-left btn-sm" data-app="product"');?>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<ul class="types-line">
|
||||
<?php foreach($config->statistic->storyStages as $stage):?>
|
||||
<li>
|
||||
<div>
|
||||
<small><?php echo zget($lang->story->stageList, $stage);?></small>
|
||||
<span><?php echo $product->stories ? zget($product->stories, $stage, 0) : 0;?></span>
|
||||
</div>
|
||||
</li>
|
||||
<?php endforeach;?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php if($product->stories):?>
|
||||
<div class="col-5">
|
||||
<div class="product-info">
|
||||
<?php $totalPlan = $product->plans ? array_sum($product->plans) : 0;?>
|
||||
<?php $unexpiredPlan = $product->plans ? zget($product->plans, 'unexpired', 0) : 0;?>
|
||||
<?php $unexpiredRate = $totalPlan ? round($unexpiredPlan / $totalPlan * 100, 2) : 0;?>
|
||||
<?php if($totalPlan):?>
|
||||
<div class="progress-info"></div>
|
||||
<div class="progress">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="<?php echo $unexpiredRate;?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $unexpiredRate;?>%"></div>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class="actions">
|
||||
<?php common::printLink('productplan', 'create', "productID={$product->id}", "<i class='icon icon-plus'></i> " . $lang->productplan->create, '', "class='btn btn-info' data-app='product'");?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div class="type-info">
|
||||
<div class="type-label">
|
||||
<table class='status-count'>
|
||||
<tr>
|
||||
<td class='text-right'><?php echo $lang->productplan->all;?> :</td>
|
||||
<td class='text-left'><?php echo empty($totalPlan) ? 0 : html::a($this->createLink('productplan', 'browse', "productID={$product->id}&branch=0&browseType=all"), $totalPlan);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='text-right'><?php echo $lang->productplan->unexpired;?> :</td>
|
||||
<td class='text-left'><?php echo empty($unexpiredPlan) ? 0 : html::a($this->createLink('productplan', 'browse', "productID={$product->id}&branch=0&browseType=unexpired"), $unexpiredPlan);?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="product-info">
|
||||
<?php $totalRelease = $product->releases ? array_sum($product->releases) : 0;?>
|
||||
<?php $normalRelease = $product->releases ? zget($product->releases, 'normal', 0) : 0;?>
|
||||
<?php $normalRate = $totalRelease ? round($normalRelease / $totalRelease * 100, 2) : 0;?>
|
||||
<?php if($totalRelease):?>
|
||||
<div class="progress-info">
|
||||
<?php if($product->lastRelease):?>
|
||||
<i class="icon icon-check-circle text-success icon-sm"></i> <span class="text-muted"><?php echo $lang->release->yesterday;?></span> <strong><?php echo $product->lastRelease;?></strong>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<div class="progress">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="<?php echo $normalRate;?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $normalRate;?>%"></div>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class="actions">
|
||||
<?php common::printLink('release', 'create', "productID={$product->id}", "<i class='icon icon-plus'></i> " . $lang->release->create, '', "class='btn btn-info' data-app='product'");?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div class="type-info">
|
||||
<div class="type-label">
|
||||
<table class='status-count'>
|
||||
<tr>
|
||||
<td class='text-right'><?php echo $lang->product->allRelease;?> :</td>
|
||||
<td class='text-left'><?php echo empty($totalRelease) ? 0 : html::a($this->createLink('release', 'browse', "productID={$product->id}&branch=0&type=all"), $totalRelease);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='text-right'><?php echo $lang->product->maintain;?> :</td>
|
||||
<td class='text-left'><?php echo empty($normalRelease) ? 0 : html::a($this->createLink('release', 'browse', "productID={$product->id}&branch=0&type=normal"), $normalRelease);?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,48 +0,0 @@
|
||||
<?php if(empty($projects)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<style>
|
||||
.block-programs .c-pri {width: 45px;text-align: center;}
|
||||
.block-programs .c-status, .block-programs .c-user {width: 80px;}
|
||||
</style>
|
||||
<div class='panel-body has-table scrollbar-hover'>
|
||||
<table class='table table-borderless table-hover table-fixed table-fixed-head tablesorter block-programs <?php if(!$longBlock) echo 'block-sm';?>'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-name'><?php echo $lang->project->name;?></th>
|
||||
<th class='c-user'><?php echo $lang->project->PM;?></th>
|
||||
<th class='c-status'><?php echo $lang->project->status;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-number'><?php echo $lang->project->teamCount;?></th>
|
||||
<th class='c-number text-right c-consumed'><?php echo $lang->task->consumed;?></th>
|
||||
<th class='c-budget text-right'><?php echo $lang->project->budget;?></th>
|
||||
<th class='c-number c-leftStories'><?php echo $lang->project->leftStories;?></th>
|
||||
<th class='c-number c-leftTasks'><?php echo $lang->project->leftTasks;?></th>
|
||||
<th class='c-number c-leftBugs'><?php echo $lang->project->leftBugs;?></th>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($projects as $project):?>
|
||||
<?php $viewLink = $this->createLink('project', 'index', "programID={$project->id}");?>
|
||||
<tr>
|
||||
<td title='<?php echo $project->name?>'><?php echo html::a($viewLink, $project->name);?></td>
|
||||
<td title="<?php echo zget($users, $project->PM, $project->PM)?>"><?php echo zget($users, $project->PM, $project->PM)?></td>
|
||||
<td class='c-status'>
|
||||
<span class="status-program status-<?php echo $project->status?>"><?php echo zget($lang->project->statusList, $project->status);?></span>
|
||||
</td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='text-center'><?php echo $project->teamCount;?></td>
|
||||
<td class='text-right' title="<?php echo $project->consumed . ' ' . $lang->execution->workHour;?>"><?php echo $project->consumed . $lang->execution->workHourUnit;?></td>
|
||||
<?php $programBudget = in_array($this->app->getClientLang(), array('zh-cn','zh-tw')) ? round((float)$project->budget / 10000, 2) . $this->lang->project->tenThousand : round((float)$project->budget, 2);?>
|
||||
<td class='text-right'><?php echo $project->budget != 0 ? zget($lang->project->currencySymbol, $project->budgetUnit) . ' ' . $programBudget : $lang->project->future;?></td>
|
||||
<td class='text-center'><?php echo $project->leftStories;?></td>
|
||||
<td class='text-center'><?php echo $project->leftTasks;?></td>
|
||||
<td class='text-center'><?php echo $project->leftBugs;?></td>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -1,208 +0,0 @@
|
||||
<style>
|
||||
.block-projectdoc .nav-stacked {overflow:auto; height:220px; max-height:220px; }
|
||||
.block-projectdoc .panel-heading {border-bottom:1px solid #ddd;}
|
||||
.block-projectdoc .panel-body {padding-top: 0; height:240px; padding-right:0px; padding-bottom:0px;}
|
||||
.block-projectdoc .tab-content {padding-right:0px;}
|
||||
.block-projectdoc .tab-pane {max-height:220px; overflow:auto;}
|
||||
.block-projectdoc table.tablesorter th{border-bottom:0px !important;}
|
||||
.block-projectdoc .tile {margin-bottom: 30px;}
|
||||
.block-projectdoc .tile-title {font-size: 18px; color: #A6AAB8;}
|
||||
.block-projectdoc .tile-amount {font-size: 48px; margin-bottom: 10px;}
|
||||
.block-projectdoc .col-nav {border-right: 1px solid #EBF2FB; width: 210px; padding: 8px 0 0 0;}
|
||||
.block-projectdoc .nav-secondary > li {position: relative;}
|
||||
.block-projectdoc .nav-secondary > li > a {font-size: 14px; color: #838A9D; position: relative; box-shadow: none; padding-left: 20px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; transition: all .2s;}
|
||||
.block-projectdoc .nav-secondary > li > a:first-child {padding-right: 36px;}
|
||||
.block-projectdoc .nav-secondary > li.active > a:first-child {color: #3C4353; box-shadow: none;}
|
||||
.block-projectdoc .nav-secondary > li.active > a:first-child:hover,
|
||||
.block-projectdoc .nav-secondary > li.active > a:first-child:focus,
|
||||
.block-projectdoc .nav-secondary > li > a:first-child:hover {box-shadow: none; border-radius: 4px 0 0 4px;}
|
||||
.block-projectdoc .nav-secondary > li.active > a:first-child:before {content: ' '; display: block; left: -1px; top: 10px; bottom: 10px; width: 4px; background: #006af1; position: absolute;}
|
||||
.block-projectdoc .nav-secondary > li > a.btn-view {position: absolute; top: 0; right: 0; bottom: 0; padding: 8px; width: 36px; text-align: center; opacity: 0;}
|
||||
.block-projectdoc .nav-secondary > li:hover > a.btn-view {opacity: 1;}
|
||||
.block-projectdoc .nav-secondary > li.active > a.btn-view {box-shadow: none;}
|
||||
.block-projectdoc .nav-secondary > li.switch-icon {display: none;}
|
||||
.block-projectdoc.block-sm .nav-stacked {height:auto;}
|
||||
.block-projectdoc.block-sm .panel-body {padding: 45px 8px 10px 8px; position: relative; border-radius: 3px; height:275px;}
|
||||
.block-projectdoc.block-sm .panel-body > .table-row,
|
||||
.block-projectdoc.block-sm .panel-body > .table-row > .col {display: block; width: auto;}
|
||||
.block-projectdoc.block-sm .panel-body > .table-row > .tab-content {padding: 0; margin: 0 -5px;}
|
||||
.block-projectdoc.block-sm .tab-pane > .table-row > .col-5 {width: 125px;}
|
||||
.block-projectdoc.block-sm .tab-pane > .table-row > .col-5 > .table-row {padding: 5px 0;}
|
||||
.block-projectdoc.block-sm .col-nav {border-left: none; position: absolute; top: 0; left: 15px; right: 15px; background: #f5f5f5; padding:0px; margin-top:5px;}
|
||||
.block-projectdoc.block-sm .nav-secondary {display: table; width: 100%; padding: 0; table-layout: fixed;}
|
||||
.block-projectdoc.block-sm .nav-secondary > li {display: none;}
|
||||
.block-projectdoc.block-sm .nav-secondary > li.switch-icon,
|
||||
.block-projectdoc.block-sm .nav-secondary > li.active {display: table-cell; width: 100%; text-align: center;}
|
||||
.block-projectdoc.block-sm .nav-secondary > li.active > a:hover {cursor: default; background: none;}
|
||||
.block-projectdoc.block-sm .nav-secondary > li.switch-icon > a:hover {background: rgba(0, 0, 0, 0.07);}
|
||||
.block-projectdoc.block-sm .nav-secondary > li > a {padding: 5px 10px; border-radius: 4px;}
|
||||
.block-projectdoc.block-sm .nav-secondary > li > a:before {display: none;}
|
||||
.block-projectdoc.block-sm .nav-secondary > li.switch-icon {width: 40px;}
|
||||
.block-projectdoc.block-sm .nav-secondary > li.active > a:first-child:before {display: none}
|
||||
.block-projectdoc.block-sm .nav-secondary > li.active > a.btn-view {width: auto; left: 0; right: 0;}
|
||||
.block-projectdoc.block-sm .nav-secondary > li.active > a.btn-view > i {display: none;}
|
||||
.block-projectdoc.block-sm .nav-secondary > li.active > a.btn-view:hover {cursor: pointer; background: rgba(0,0,0,.1);}
|
||||
|
||||
.block-projectdoc .data {width: 40%; text-align: left; padding: 10px 0px; font-size: 14px; font-weight: 700;}
|
||||
.block-projectdoc .dataTitle {width: 60%; text-align: right; padding: 10px 0px; font-size: 14px;}
|
||||
.block-projectdoc .executionName {padding: 2px 10px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap;}
|
||||
.block-projectdoc .lastIteration {padding-top: 6px;}
|
||||
|
||||
.forty-percent {width: 40%;}
|
||||
html[lang="de"] .block-projectdoc .c-user{width: 105px;}
|
||||
|
||||
.block-projectdoc #projectType {position: absolute;top: 8px;left: 120px;}
|
||||
.block-projectdoc #projectType .btn {border:0px;}
|
||||
.block-projectdoc #projectType .btn:hover {background-color:#f5f5f5;}
|
||||
|
||||
.block-projectdoc .table .c-title > .doc-title {display: inline-block; overflow: hidden; background: transparent; padding-right:0px;}
|
||||
.block-projectdoc .table .c-title > span.doc-title {line-height: 0; vertical-align: inherit;}
|
||||
.block-projectdoc .table .c-title[data-status=draft] > .doc-title {max-width: calc(100% - 35px);}
|
||||
.block-projectdoc .table .c-title > .draft {background-color:rgba(129, 102, 238, 0.12); color:#8166EE;}
|
||||
</style>
|
||||
<?php $blockNavId = 'nav-' . uniqid();?>
|
||||
<?php js::set('emptyProjects', empty($projects));?>
|
||||
<?php js::set('emptyInvolveds', empty($involveds));?>
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
if($('.block-projectdoc<?php echo "#block{$block->id}";?> #projectType').length > 1);
|
||||
{
|
||||
count = $('.block-projectdoc<?php echo "#block{$block->id}";?> #projectType').length;
|
||||
$('.block-projectdoc<?php echo "#block{$block->id}";?> #projectType').each(function()
|
||||
{
|
||||
if(count == 1) return;
|
||||
$(this).remove();
|
||||
count --;
|
||||
})
|
||||
}
|
||||
});
|
||||
|
||||
function switch<?php echo "block{$block->id}";?>Project(obj)
|
||||
{
|
||||
var $this = $(obj);
|
||||
var $nav = $this.closest('.nav');
|
||||
var isPrev = $this.is('.prev');
|
||||
var $activeItem = $nav.children('.active');
|
||||
var $next = $activeItem[isPrev ? 'prev' : 'next']('li:not(.switch-icon)');
|
||||
if($next.length > 0) $next.find('a[data-toggle="tab"]').trigger('click');
|
||||
if($next.length == 0) $nav.children('li:not(.switch-icon)')[isPrev ? 'last' : 'first']().find('a[data-toggle="tab"]').trigger('click');
|
||||
return false;
|
||||
}
|
||||
|
||||
function change<?php echo "block{$block->id}";?>ProjectType(type)
|
||||
{
|
||||
var hiddenData = type == 'all' ? emptyProjects : emptyInvolveds;
|
||||
if(hiddenData)
|
||||
{
|
||||
$('.block-projectdoc<?php echo "#block{$block->id}";?> .dataBlock').addClass('hidden');
|
||||
$('.block-projectdoc<?php echo "#block{$block->id}";?> .block-statistic > .table-empty-tip').removeClass('hidden');
|
||||
}
|
||||
else
|
||||
{
|
||||
$('.block-projectdoc<?php echo "#block{$block->id}";?> .dataBlock').removeClass('hidden');
|
||||
$('.block-projectdoc<?php echo "#block{$block->id}";?> .block-statistic > .table-empty-tip').addClass('hidden');
|
||||
}
|
||||
|
||||
$('.block-projectdoc<?php echo "#block{$block->id}";?> .nav.projects').toggleClass('hidden', type != 'all');
|
||||
$('.block-projectdoc<?php echo "#block{$block->id}";?> .nav.involveds').toggleClass('hidden', type != 'involved');
|
||||
$('.block-projectdoc<?php echo "#block{$block->id}";?> #projectType .btn').html($('.block-projectdoc<?php echo "#block{$block->id}";?> #projectType [data-type=' + type + ']').html() + " <span class='caret'></span>");
|
||||
var name = type == 'all' ? '.block-projectdoc<?php echo "#block{$block->id}";?> .projects' : '.block-projectdoc<?php echo "#block{$block->id}";?> .involveds';
|
||||
var $obj = $(name + ' li.active').length > 0 ? $(name + ' .active:first').find('a') : $(name + ' li:not(.switch-icon):first').find('a');
|
||||
$(name + ' li').removeClass('active');
|
||||
$obj.closest('li').addClass('active');
|
||||
$('.block-projectdoc<?php echo "#block{$block->id}";?> .tab-pane').removeClass('active').removeClass('in');
|
||||
$('.block-projectdoc<?php echo "#block{$block->id}";?> .tab-pane' + $obj.data('target')).addClass('active').addClass('in');
|
||||
|
||||
$('.block-projectdoc<?php echo "#block{$block->id}";?> #projectType .dropdown-menu li').removeClass('active');
|
||||
$('.block-projectdoc<?php echo "#block{$block->id}";?> #projectType .dropdown-menu li a[data-type=' + type + ']').closest('li').addClass('active');
|
||||
}
|
||||
|
||||
</script>
|
||||
<div class="dropdown" id='projectType'>
|
||||
<button class="btn" type="button" data-toggle="dropdown"><?php echo $lang->project->involved;?> <span class="caret"></span></button>
|
||||
<ul class="dropdown-menu">
|
||||
<li class='active'><a href="javascript:change<?php echo "block{$block->id}";?>ProjectType('involved')" data-type='involved'><?php echo $lang->project->involved;?></a></li>
|
||||
<li><a href="javascript:change<?php echo "block{$block->id}";?>ProjectType('all')" data-type='all'><?php echo $lang->project->all;?></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<?php $hiddenBlock = empty($involveds) ? 'hidden' : '';?>
|
||||
<?php $hiddenEmpty = empty($involveds) ? '' : 'hidden';?>
|
||||
<div class="panel-body">
|
||||
<div class="table-row block-statistic">
|
||||
<div class="table-empty-tip <?php echo $hiddenEmpty;?>">
|
||||
<p><span class="text-muted"><?php echo $lang->block->emptyTip;?></span></p>
|
||||
</div>
|
||||
<div class="col col-nav dataBlock <?php echo $hiddenBlock;?>">
|
||||
<ul class="nav nav-stacked nav-secondary scrollbar-hover involveds">
|
||||
<li class='switch-icon prev'><a href='###' onclick='switch<?php echo "block{$block->id}";?>Project(this)'><i class='icon icon-arrow-left'></i></a></li>
|
||||
<?php $selected = key($involveds);?>
|
||||
<?php foreach($involveds as $project):?>
|
||||
<li <?php if($project->id == $selected) echo "class='active' id='activeProject'";?> projectid='<?php echo $project->id;?>'>
|
||||
<a href="###" title="<?php echo $project->name?>" data-target='<?php echo "#tab3{$blockNavId}Content{$project->id}";?>' data-toggle="tab"><?php echo $project->name;?></a>
|
||||
<?php echo html::a(helper::createLink('doc', 'projectSpace', "projectID=$project->id"), "<i class='icon-arrow-right text-primary'></i>", '', "class='btn-view'");?>
|
||||
</li>
|
||||
<?php endforeach;?>
|
||||
<li class='switch-icon next'><a href='###' onclick='switch<?php echo "block{$block->id}";?>Project(this)'><i class='icon icon-arrow-right'></i></a></li>
|
||||
</ul>
|
||||
<ul class="nav nav-stacked nav-secondary scrollbar-hover projects hidden">
|
||||
<li class='switch-icon prev'><a href='###' onclick='switch<?php echo "block{$block->id}";?>Project(this)'><i class='icon icon-arrow-left'></i></a></li>
|
||||
<?php foreach($projects as $project):?>
|
||||
<li projectid='<?php echo $project->id;?>'>
|
||||
<a href="###" title="<?php echo $project->name?>" data-target='<?php echo "#tab3{$blockNavId}Content{$project->id}";?>' data-toggle="tab"><?php echo $project->name;?></a>
|
||||
<?php echo html::a(helper::createLink('doc', 'projectSpace', "projectID=$project->id"), "<i class='icon-arrow-right text-primary'></i>", '', "class='btn-view'");?>
|
||||
</li>
|
||||
<?php endforeach;?>
|
||||
<li class='switch-icon next'><a href='###' onclick='switch<?php echo "block{$block->id}";?>Project(this)'><i class='icon icon-arrow-right'></i></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col tab-content dataBlock <?php echo $hiddenBlock;?>">
|
||||
<?php foreach($projects as $project):?>
|
||||
<div class="tab-pane fade<?php if($project->id == $selected) echo ' active in';?>" id='<?php echo "tab3{$blockNavId}Content{$project->id}";?>'>
|
||||
<?php if(isset($docGroup[$project->id])):?>
|
||||
<div class="table-row">
|
||||
<table class='table table-borderless table-hover table-fixed table-fixed-head tablesorter'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-name'><?php echo $lang->doc->title?></th>
|
||||
<th class='c-user'><?php echo $lang->doc->addedBy?></th>
|
||||
<th class='c-date'><?php echo $lang->doc->addedDate?></th>
|
||||
<th class='c-date'><?php echo $lang->doc->editedDate?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($docGroup[$project->id] as $doc):?>
|
||||
<tr>
|
||||
<td class='c-title' data-status='<?php echo $doc->status?>'>
|
||||
<?php
|
||||
$docType = zget($config->doc->iconList, $doc->type);
|
||||
$icon = html::image("static/svg/{$docType}.svg", "class='file-icon'");
|
||||
if(common::hasPriv('doc', 'view'))
|
||||
{
|
||||
echo html::a($this->createLink('doc', 'view', "docID=$doc->id"), $icon . $doc->title, '', "title='{$doc->title}' class='doc-title' data-app='{$this->app->tab}'");
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "<span class='doc-title' title='{$doc->title}'>$icon {$doc->title}</span>";
|
||||
}
|
||||
if($doc->status == 'draft') echo "<span class='label label-badge draft'>{$lang->doc->draft}</span>";
|
||||
?>
|
||||
</td>
|
||||
<td class='c-user'><?php echo zget($users, $doc->addedBy);?></td>
|
||||
<td class='c-date'><?php echo substr($doc->addedDate, 0, 10);?></td>
|
||||
<td class='c-date'><?php echo substr($doc->editedDate, 0, 10);?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->block->emptyTip;?></span></p>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,36 +0,0 @@
|
||||
<?php if(empty($actions)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<style>
|
||||
.timeline > li .timeline-text {display: block; overflow: hidden; text-overflow: ellipsis; max-height: 20px; -webkit-line-clamp: 1; -webkit-box-orient: vertical; }
|
||||
.panel-body {padding-top: 0;}
|
||||
|
||||
.timeline >li:before {left: -26px;}
|
||||
.timeline >li + li:after {left: -23px;}
|
||||
.timeline-text {margin-left: -18px;}
|
||||
.block-projectdynamic .label-action {padding: 0 6px;}
|
||||
.block-projectdynamic .label-action + a {padding-left: 6px;}
|
||||
.timeline > li.active:before {left: -30px;}
|
||||
.timeline > li > div:after {left: -27px;}
|
||||
.timeline .timeline-text {display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
.timeline > li > div > .timeline-tag, .timeline > li > div > .timeline-text > .label-action {color: #838A9D;}
|
||||
.timeline > li > div > .timeline-text > a {color: #313C52;}
|
||||
</style>
|
||||
<div class='panel-body scrollbar-hover'>
|
||||
<ul class="timeline timeline-tag-left no-margin">
|
||||
<?php
|
||||
$i = 0;
|
||||
foreach($actions as $action)
|
||||
{
|
||||
$user = zget($users, $action->actor);
|
||||
if($action->action == 'login' or $action->action == 'logout') $action->objectName = $action->objectLabel = '';
|
||||
$class = $action->major ? "class='active'" : '';
|
||||
echo "<li $class><div>";
|
||||
printf($lang->block->dynamicInfo, $action->date, $user, $action->actionLabel, $action->objectLabel, $action->objectLink, $action->objectName, $action->objectName);
|
||||
echo "</div></li>";
|
||||
$i++;
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -1,268 +0,0 @@
|
||||
<style>
|
||||
.types-line {display: table; padding: 0; margin: 0 auto;}
|
||||
.types-line > li {display: table-cell;}
|
||||
.types-line > li > div {position: relative; padding: 18px 5px 5px; text-align: center;}
|
||||
.types-line > li > div:before {content: ''; display: block; background: #eee; width: 100%; height: 2px; position: absolute; left: 50%; top: 4px;}
|
||||
.types-line > li:last-child > div:before {display: none;}
|
||||
.types-line > li > div:after {content: ''; display: block; background: #FFFFFF; box-shadow: 0 2px 4px 0 rgba(170,170,170,0.50), 0 0 5px 0 rgba(0,0,0,0.1); width: 10px; height: 10px; position: absolute; border-radius: 50%; top: 0; left: 50%; margin-left: -2px;}
|
||||
.types-line > li > div > small {display: block; color: #A6AAB8;}
|
||||
.types-line > li > div > span {display: block; color: #CBD0DB; font-size: 16px;}
|
||||
.product-info {position: relative; height: 65px;}
|
||||
.product-info + .product-info {margin-top: 10px;}
|
||||
.product-info .progress {position: absolute; left: 10px; top: 35px; right: 100px;}
|
||||
.product-info .progress-info {position: absolute; left: 8px; top: 10px; width: 180px; font-size: 12px;}
|
||||
.product-info .type-info {color: #A6AAB8; text-align: center; position: absolute; right: 0; top: 6px; width: 100px;}
|
||||
html[lang="en"] .product-info .type-info {color: #A6AAB8; text-align: center; position: absolute; right: 0; top: 6px; width: 110px;}
|
||||
.product-info .type-value,
|
||||
.product-info .type-label {font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
.product-info .type-value {font-size: 14px;}
|
||||
.product-info .type-value > strong {font-size: 20px; color: #3C4353;}
|
||||
.product-info .actions {position: absolute; left: 10px; top: 14px;}
|
||||
.block-statistic .panel-body {padding-top: 0}
|
||||
.block-statistic .tile {margin-bottom: 30px;}
|
||||
.block-statistic .tile-title {font-size: 18px; color: #A6AAB8;}
|
||||
.block-statistic .tile-amount {font-size: 48px; margin-bottom: 10px;}
|
||||
.block-statistic .col-nav {border-right: 1px solid #EBF2FB; width: 210px; padding: 0;}
|
||||
.block-statistic .nav-secondary > li {position: relative;}
|
||||
.block-statistic .nav-secondary > li > a {font-size: 14px; color: #838A9D; position: relative; box-shadow: none; padding-left: 20px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; transition: all .2s;}
|
||||
.block-statistic .nav-secondary > li > a:first-child {padding-right: 36px;}
|
||||
.block-statistic .nav-secondary > li.active > a:first-child {color: #3C4353; background: transparent; box-shadow: none;}
|
||||
.block-statistic .nav-secondary > li.active > a:first-child:hover,
|
||||
.block-statistic .nav-secondary > li.active > a:first-child:focus,
|
||||
.block-statistic .nav-secondary > li > a:first-child:hover {box-shadow: none; border-radius: 4px 0 0 4px;}
|
||||
.block-statistic .nav-secondary > li.active > a:first-child:before {content: ' '; display: block; left: -1px; top: 10px; bottom: 10px; width: 4px; background: #006af1; position: absolute;}
|
||||
.block-statistic .nav-secondary > li > a.btn-view {position: absolute; top: 0; right: 0; bottom: 0; padding: 8px; width: 36px; text-align: center; opacity: 0;}
|
||||
.block-statistic .nav-secondary > li:hover > a.btn-view {opacity: 1;}
|
||||
.block-statistic .nav-secondary > li.active > a.btn-view {box-shadow: none;}
|
||||
.block-statistic .nav-secondary > li.switch-icon {display: none;}
|
||||
.block-statistic.block-sm .panel-body {padding-bottom: 10px; position: relative; padding-top: 45px; border-radius: 3px;}
|
||||
.block-statistic.block-sm .panel-body > .table-row,
|
||||
.block-statistic.block-sm .panel-body > .table-row > .col {display: block; width: auto;}
|
||||
.block-statistic.block-sm .panel-body > .table-row > .tab-content {padding: 0; margin: 0 -5px;}
|
||||
.block-statistic.block-sm .tab-pane > .table-row > .col-5 {width: 125px;}
|
||||
.block-statistic.block-sm .tab-pane > .table-row > .col-5 > .table-row {padding: 5px 0;}
|
||||
.block-statistic.block-sm .col-nav {border-left: none; position: absolute; top: 0; left: 15px; right: 15px; background: #f5f5f5;}
|
||||
.block-statistic.block-sm .nav-secondary {display: table; width: 100%; padding: 0; table-layout: fixed;}
|
||||
.block-statistic.block-sm .nav-secondary > li {display: none;}
|
||||
.block-statistic.block-sm .nav-secondary > li.switch-icon,
|
||||
.block-statistic.block-sm .nav-secondary > li.active {display: table-cell; width: 100%; text-align: center;}
|
||||
.block-statistic.block-sm .nav-secondary > li.active > a:hover {cursor: default; background: none;}
|
||||
.block-statistic.block-sm .nav-secondary > li.switch-icon > a:hover {background: rgba(0, 0, 0, 0.07);}
|
||||
.block-statistic.block-sm .nav-secondary > li > a {padding: 5px 10px; border-radius: 4px;}
|
||||
.block-statistic.block-sm .nav-secondary > li > a:before {display: none;}
|
||||
.block-statistic.block-sm .nav-secondary > li.switch-icon {width: 40px;}
|
||||
.block-statistic.block-sm .nav-secondary > li.active > a:first-child:before {display: none}
|
||||
.block-statistic.block-sm .nav-secondary > li.active > a.btn-view {width: auto; left: 0; right: 0;}
|
||||
.block-statistic.block-sm .nav-secondary > li.active > a.btn-view > i {display: none;}
|
||||
.block-statistic.block-sm .nav-secondary > li.active > a.btn-view:hover {cursor: pointer; background: rgba(0,0,0,.1);}
|
||||
.block-statistic .program-info .info span+span {margin-left: 15px;}
|
||||
.block-statistic .project-info {margin-top: 25px;}
|
||||
.block-statistic .project-info .col-xs-5, .block-statistic .project-info .col-xs-7 {margin-top: 8px;}
|
||||
.block-statistic .project-info .col-xs-5 {padding-left: 0;}
|
||||
|
||||
.block-statistic .data {width: 40%; text-align: left; padding: 10px 0px; font-size: 14px; font-weight: 700;}
|
||||
.block-statistic .dataTitle {width: 60%; text-align: right; padding: 10px 0px; font-size: 14px;}
|
||||
.block-statistic .executionName {padding: 2px 10px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap;}
|
||||
.block-statistic .lastIteration {padding-top: 6px;}
|
||||
.block-statistic .progress-text-left {margin-right: 90px}
|
||||
.block-statistic .progress-text-left .progress-text {padding-top: 2px; font-size: 14px; padding-right:5px; left: -50px;}
|
||||
|
||||
.status-count {margin: auto;}
|
||||
.status-count tr:first-child td:last-child {color: #000; font-weight: bold;}
|
||||
|
||||
.block-statistic .project-info {margin-left: 3px;}
|
||||
.block-statistic .project-budget {white-space: nowrap;}
|
||||
.block-statistic .progress-group {margin-top: 10px;}
|
||||
.block-statistic .progress-group .col {padding-left: 0;}
|
||||
.block-statistic .progress-percent {margin-top: 4px;}
|
||||
.block-statistic .weekly-title {font-weight: bold; color: #3C4253;}
|
||||
.block-statistic .weekly-small {font-size:12px; color: #838A9D;}
|
||||
.block-statistic .weekly-progress {font-weight: bold; font-size:24px;}
|
||||
.block-statistic .weekly-name {font-size: 14px; color: #838A9D;}
|
||||
.block-statistic .weekly-value {font-size: 14px;}
|
||||
.block-statistic .col-12 .stage {margin-left: 10px;}
|
||||
.block-statistic .col-12 .waterfall-title {padding-top: 3px;}
|
||||
.block-statistic .col-12 .waterfall-value {padding-top: 10px; font-size: 18px; font-weight: 600;}
|
||||
.block-statistic .col-12 .waterfall-title .col {padding-right: 0px; padding-left: 0px;}
|
||||
|
||||
.forty-percent {width: 40%;}
|
||||
</style>
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
var $nav = $('#<?php echo $blockNavId;?>');
|
||||
$nav.on('click', '.switch-icon', function(e)
|
||||
{
|
||||
var isPrev = $(this).is('.prev');
|
||||
var $activeItem = $nav.children('.active');
|
||||
var $next = $activeItem[isPrev ? 'prev' : 'next']('li:not(.switch-icon)');
|
||||
if ($next.length) $next.find('a[data-toggle="tab"]').trigger('click');
|
||||
else $nav.children('li:not(.switch-icon)')[isPrev ? 'last' : 'first']().find('a[data-toggle="tab"]').trigger('click');
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
var $projectList = $('#activeProject');
|
||||
if($projectList.length)
|
||||
{
|
||||
var projectList = $projectList[0];
|
||||
$(".col ul.nav").animate({scrollTop: projectList.offsetTop}, "slow");
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<div class="panel-body">
|
||||
<div class="table-row">
|
||||
<?php if(empty($projects)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->block->emptyTip;?></span></p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class="col col-nav">
|
||||
<ul class="nav nav-stacked nav-secondary scrollbar-hover" id='<?php echo $blockNavId;?>'>
|
||||
<li class='switch-icon prev'><a><i class='icon icon-arrow-left'></i></a></li>
|
||||
<?php $selected = key($projects);?>
|
||||
<?php foreach($projects as $project):?>
|
||||
<li <?php if($project->id == $selected) echo "class='active' id='activeProject'";?> projectID='<?php echo $project->id;?>'>
|
||||
<a href="###" title="<?php echo $project->name?>" data-target='<?php echo "#tab3{$blockNavId}Content{$project->id}";?>' data-toggle="tab"><?php echo $project->name;?></a>
|
||||
<?php echo html::a(helper::createLink('project', 'index', "projectID=$project->id"), "<i class='icon-arrow-right text-primary'></i>", '', "class='btn-view' title={$lang->project->index}");?>
|
||||
</li>
|
||||
<?php endforeach;?>
|
||||
<li class='switch-icon next'><a><i class='icon icon-arrow-right'></i></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col tab-content">
|
||||
<?php foreach($projects as $project):?>
|
||||
<div class="tab-pane fade<?php if($project->id == $selected) echo ' active in';?>" id='<?php echo "tab3{$blockNavId}Content{$project->id}";?>'>
|
||||
<div class="table-row">
|
||||
<?php if(in_array($project->model, array('scrum', 'kanban', 'agileplus'))):?>
|
||||
<div class='table-row'>
|
||||
<div class="col-4 text-center">
|
||||
<div><h4><?php echo $lang->block->storyCount;?></h4></div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->block->allStories . ":";?></div>
|
||||
<div class="col data"><?php echo $project->allStories;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->block->finish . ":";?></div>
|
||||
<div class="col data"><?php echo $project->doneStories;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->project->surplus . ":";?></div>
|
||||
<div class="col data"><?php echo $project->leftStories;?></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 text-center">
|
||||
<div><h4><?php echo $lang->block->investment;?></h4></div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->block->totalPeople . ":";?></div>
|
||||
<div class="col data"><?php echo $project->teamCount;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->block->estimate . ":";?></div>
|
||||
<div class="col data"><?php echo $project->estimate . $lang->execution->workHourUnit;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->block->consumedHours . ":";?></div>
|
||||
<div class="col data"><?php echo $project->consumed . $lang->execution->workHourUnit;?></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 text-center">
|
||||
<div><h4><?php echo $lang->block->taskCount;?></h4></div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->block->wait . ":";?></div>
|
||||
<div class="col data"><?php echo $project->waitTasks;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->block->doing . ":";?></div>
|
||||
<div class="col data"><?php echo $project->doingTasks;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->block->done . ":";?></div>
|
||||
<div class="col data"><?php echo $project->rndDoneTasks;?></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 text-center">
|
||||
<div><h4><?php echo $lang->block->bugCount;?></h4></div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->block->totalBug . ":";?></div>
|
||||
<div class="col data"><?php echo $project->allBugs;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->bug->statusList['resolved'] . ":";?></div>
|
||||
<div class="col data"><?php echo $project->doneBugs;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->bug->unResolved . ":";?></div>
|
||||
<div class="col data"><?php echo $project->leftBugs;?></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php if(!empty($project->executions) and $project->multiple):?>
|
||||
<div class="table-row project-info">
|
||||
<div class="col-2 text-right"><h4><?php echo $lang->block->last;?></h4></div>
|
||||
<div class="table-row lastIteration">
|
||||
<div class='col-5 text-center executionName'><?php echo html::a($this->createLink('execution', 'task', "executionID={$project->executions[0]->id}"), $project->executions[0]->name, '', "title='{$project->executions[0]->name}'");?></div>
|
||||
<div class='col-7'>
|
||||
<div class='progress progress-text-left'>
|
||||
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="<?php echo $project->executions[0]->hours->progress;?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $project->executions[0]->hours->progress;?>%">
|
||||
<span class='progress-text'><?php echo !empty($project->executions[0]->hours->progress) ? $project->executions[0]->hours->progress . '%' : '0%';?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php else:?>
|
||||
<div class="col-12">
|
||||
<div class='table-row text-left weekly-row with-padding'>
|
||||
<span class='weekly-title'><?php echo $lang->project->weekly;?></span>
|
||||
<span class='stage text-muted'><?php echo $project->current;?></span>
|
||||
</div>
|
||||
<div class='table-row text-center progress-group col-12 with-padding center-block'>
|
||||
<div class='forty-percent col'>
|
||||
<div class='progress-num col'>
|
||||
<span><?php echo $lang->project->progress . ':';?></span>
|
||||
<span class='project-info'><?php echo $project->progress . '%';?></span>
|
||||
</div>
|
||||
<div class='progress progress-percent col-1-8'>
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="82" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $project->progress;?>%"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-1-5">
|
||||
<span><?php echo $lang->project->teamCount . ':';?></span>
|
||||
<span class='project-info'><?php echo $project->teamCount;?></span>
|
||||
</div>
|
||||
<div class="col-1-5 project-budget">
|
||||
<span><?php echo $lang->project->budget . ':';?></span>
|
||||
<span class='project-info'>
|
||||
<?php
|
||||
$projectBudget = in_array($this->app->getClientLang(), array('zh-cn','zh-tw')) ? round((float)$project->budget / 10000, 2) . $this->lang->project->tenThousand : round((float)$project->budget, 2);
|
||||
echo $project->budget != 0 ? $projectBudget : $this->lang->project->future;
|
||||
?>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-1-5"></div>
|
||||
</div>
|
||||
<div class="table-row text-center waterfall-title small col-12 center-block">
|
||||
<?php $isChineseLang = in_array($this->app->getClientLang(), array('zh-cn','zh-tw'));?>
|
||||
<div class="col-1-5"><?php echo $isChineseLang ? $lang->project->pv . '(' . $lang->project->pvTitle . ')' : $lang->project->pv; ?></div>
|
||||
<div class="col-1-5"><?php echo $isChineseLang ? $lang->project->ev . '(' . $lang->project->evTitle . ')' : $lang->project->ev;?></div>
|
||||
<div class="col-1-5"><?php echo $isChineseLang ? $lang->project->ac . '(' . $lang->project->acTitle . ')' : $lang->project->ac;?></div>
|
||||
<div class="col-1-5"><?php echo $isChineseLang ? $lang->project->sv . '(' . $lang->project->svTitle . ')' : $lang->project->sv;?></div>
|
||||
<div class="col-1-5"><?php echo $isChineseLang ? $lang->project->cv . '(' . $lang->project->cvTitle . ')' : $lang->project->cv;?></div>
|
||||
</div>
|
||||
<div class="table-row text-center waterfall-value small col-12 center-block">
|
||||
<div class="col-1-5"><?php echo $project->pv;?></div>
|
||||
<div class="col-1-5"><?php echo $project->ev;?></div>
|
||||
<div class="col-1-5"><?php echo $project->ac;?></div>
|
||||
<div class="col-1-5"><?php echo $project->sv;?></div>
|
||||
<div class="col-1-5"><?php echo $project->cv;?></div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,185 +0,0 @@
|
||||
<style>
|
||||
.types-line {display: table; padding: 0; margin: 0 auto;}
|
||||
.types-line > li {display: table-cell;}
|
||||
.types-line > li > div {position: relative; padding: 18px 5px 5px; text-align: center;}
|
||||
.types-line > li > div:before {content: ''; display: block; background: #eee; width: 100%; height: 2px; position: absolute; left: 50%; top: 4px;}
|
||||
.types-line > li:last-child > div:before {display: none;}
|
||||
.types-line > li > div:after {content: ''; display: block; background: #FFFFFF; box-shadow: 0 2px 4px 0 rgba(170,170,170,0.50), 0 0 5px 0 rgba(0,0,0,0.1); width: 10px; height: 10px; position: absolute; border-radius: 50%; top: 0; left: 50%; margin-left: -2px;}
|
||||
.types-line > li > div > small {display: block; color: #A6AAB8;}
|
||||
.types-line > li > div > span {display: block; color: #CBD0DB; font-size: 16px;}
|
||||
.product-info {position: relative; height: 65px;}
|
||||
.product-info + .product-info {margin-top: 10px;}
|
||||
.product-info .progress {position: absolute; left: 10px; top: 35px; right: 90px;}
|
||||
.product-info .progress-info {position: absolute; left: 8px; top: 10px; width: 180px; font-size: 12px;}
|
||||
.product-info .type-info {color: #A6AAB8; text-align: center; position: absolute; right: 0; top: 6px; width: 100px;}
|
||||
.product-info .type-value,
|
||||
.product-info .type-label {font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #838A9D;}
|
||||
.progress-pie .progress-info>small {color: #838A9D;}
|
||||
.product-info .type-value {font-size: 14px;}
|
||||
.product-info .type-value > strong {font-size: 20px; color: #3C4353;}
|
||||
.product-info .actions {position: absolute; left: 10px; top: 14px;}
|
||||
.block-statistic .panel-body {padding-top: 0;}
|
||||
.block-statistic .tile {margin-bottom: 30px;}
|
||||
.block-statistic .tile-title {font-size: 18px; color: #A6AAB8;}
|
||||
.block-statistic .tile-amount {font-size: 48px; margin-bottom: 10px;}
|
||||
.block-statistic .col-nav {border-right: 1px solid #EBF2FB; width: 260px; padding: 0;}
|
||||
.block-statistic .nav-secondary > li {position: relative}
|
||||
.block-statistic .nav-secondary > li > a {font-size: 14px; color: #838A9D; position: relative; box-shadow: none; padding-left: 20px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; transition: all .2s;}
|
||||
.block-statistic .nav-secondary > li > a:first-child {padding-right: 36px;}
|
||||
.block-statistic .nav-secondary > li.active > a:first-child {color: #3C4353; background: transparent; box-shadow: none;}
|
||||
.block-statistic .nav-secondary > li.active > a:first-child:hover,
|
||||
.block-statistic .nav-secondary > li.active > a:first-child:focus,
|
||||
.block-statistic .nav-secondary > li > a:first-child:hover {box-shadow: none; border-radius: 4px 0 0 4px; background: #f5f5f5;}
|
||||
.block-statistic .nav-secondary > li.active > a:first-child:before {content: ' '; display: block; left: -1px; top: 10px; bottom: 10px; width: 4px; background: #006af1; position: absolute;}
|
||||
.block-statistic .nav-secondary > li > a.btn-view {position: absolute; top: 0; right: 0; bottom: 0; padding: 8px; width: 36px; text-align: center; opacity: 0;}
|
||||
.block-statistic .nav-secondary > li:hover > a.btn-view {opacity: 1}
|
||||
.block-statistic .nav-secondary > li.active > a.btn-view {box-shadow: none}
|
||||
.block-statistic .nav-stacked {overflow: auto; max-height: 247px;}
|
||||
.block-statistic .progress-pie .progress-info > strong {font-size: 24px;}
|
||||
.block-statistic .chosen-single {font-size: 16px; font-weight: bold;}
|
||||
.block-statistic .chosen-container-single .chosen-single div b {top: -2px}
|
||||
.block-statistic .nav-secondary > li.switch-icon {display: none;}
|
||||
.block-statistic.block-sm .panel-body {padding-bottom: 10px; position: relative; padding-top: 45px;}
|
||||
.block-statistic.block-sm .panel-body > .table-row,
|
||||
.block-statistic.block-sm .panel-body > .table-row > .col {display: block; width: auto;}
|
||||
.block-statistic.block-sm .panel-body > .table-row > .tab-content {padding: 0; margin: 0 -5px;}
|
||||
.block-statistic.block-sm .tab-pane > .table-row > .col-5 {width: 125px;}
|
||||
.block-statistic.block-sm .tab-pane > .table-row > .col-5 > .table-row {padding: 5px 0;}
|
||||
.block-statistic.block-sm .col-nav {border-left: none; position: absolute; top: 0; left: 15px; right: 15px; background: #f5f5f5; border-radius: 3px;}
|
||||
.block-statistic.block-sm .nav-secondary {display: table; width: 100%; padding: 0; table-layout: fixed;}
|
||||
.block-statistic.block-sm .nav-secondary > li {display: none}
|
||||
.block-statistic.block-sm .nav-secondary > li.switch-icon,
|
||||
.block-statistic.block-sm .nav-secondary > li.active {display: table-cell; width: 100%; text-align: center;}
|
||||
.block-statistic.block-sm .nav-secondary > li.active > a:hover {cursor: default; background: none;}
|
||||
.block-statistic.block-sm .nav-secondary > li.switch-icon > a:hover {background: rgba(0,0,0,0.07);}
|
||||
.block-statistic.block-sm .nav-secondary > li > a {padding: 5px 10px; border-radius: 4px;}
|
||||
.block-statistic.block-sm .nav-secondary > li > a:before {display: none;}
|
||||
.block-statistic.block-sm .nav-secondary > li.switch-icon {width: 40px;}
|
||||
.block-statistic .statistic-menu {height:20px;}
|
||||
.block-statistic.block-sm .nav-secondary > li.active > a.btn-view {width: auto; left: 0; right: 0;}
|
||||
.block-statistic.block-sm .nav-secondary > li.active > a.btn-view > i {display: none;}
|
||||
.block-statistic.block-sm .nav-secondary > li.active > a.btn-view:hover {cursor: pointer; background: rgba(0,0,0,.05)}
|
||||
</style>
|
||||
<script>
|
||||
<?php $blockNavId = 'nav-' . uniqid(); ?>
|
||||
$(function()
|
||||
{
|
||||
var $nav = $('#<?php echo $blockNavId;?>');
|
||||
$nav.on('click', '.switch-icon', function(e)
|
||||
{
|
||||
var isPrev = $(this).is('.prev');
|
||||
var $activeItem = $nav.children('.active');
|
||||
var $next = $activeItem[isPrev ? 'prev' : 'next']('li:not(.switch-icon)');
|
||||
if ($next.length) $next.find('a[data-toggle="tab"]').trigger('click');
|
||||
else $nav.children('li:not(.switch-icon)')[isPrev ? 'last' : 'first']().find('a[data-toggle="tab"]').trigger('click');
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
$('[name^=build]').change(function()
|
||||
{
|
||||
var $tab = $('#bugBox' + $(this).val());
|
||||
$tab.removeClass('hidden');
|
||||
$tab.find('.progress-pie').progressPie();
|
||||
$(this).parents('.tab-pane').find('.table-row').not($tab).addClass('hidden');
|
||||
});
|
||||
|
||||
$('.progress-pie').progressPie();
|
||||
});
|
||||
</script>
|
||||
<div class="panel-body block-qa">
|
||||
<div class="table-row">
|
||||
<div class="col col-nav">
|
||||
<ul class="nav nav-stacked nav-secondary" id='<?php echo $blockNavId;?>'>
|
||||
<li class='switch-icon prev'><a><i class='icon icon-arrow-left'></i></a></li>
|
||||
<?php $index = 1;?>
|
||||
<?php foreach($products as $product):?>
|
||||
<li <?php if($product == reset($products)) echo "class='active'";?> productID='<?php echo $product->id;?>'>
|
||||
<a href="javascript:;" data-target="#<?php echo $block->id;?>-tabQaProduct<?php echo $product->id;?>" data-toggle="tab" title='<?php echo $product->name;?>'><?php echo $product->name;?></a>
|
||||
<?php echo html::a(helper::createLink('bug', 'browse', "productID=$product->id"), "<i class='icon-arrow-right text-primary'></i>", '', "class='btn-view' title={$lang->bug->browse}");?></li>
|
||||
<?php $index++;?>
|
||||
<?php endforeach;?>
|
||||
<li class='switch-icon next'><a><i class='icon icon-arrow-right'></i></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col tab-content">
|
||||
<?php $index = 1;?>
|
||||
<?php foreach($products as $product):?>
|
||||
<div class="tab-pane fade <?php if($index == 1) echo 'active';?> in" id="<?php echo $block->id;?>-tabQaProduct<?php echo $product->id;?>">
|
||||
<div class="statistic-menu input-group space w-400px">
|
||||
<div class="input-group-cell">
|
||||
<?php if($product->testtask):?>
|
||||
<?php echo $product->testtask->name;?>
|
||||
<span class="text-muted small"><a href="<?php echo $this->createLink('testtask', 'browse', "productID={$product->id}");?>" class="text-primary"><?php echo $lang->block->lblTesttask;?> <i class="icon icon-right-circle icon-sm"></i></a></span>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="table-row" id='bugBox<?php echo $product->id;?>'>
|
||||
<div class="col-5 text-middle text-center">
|
||||
<div class="progress-pie inline-block space progress-pie-100" data-value="<?php echo $product->assignedRate;?>" data-doughnut-size="80">
|
||||
<canvas width="100" height="100" style="width: 100px; height: 100px;"></canvas>
|
||||
<div class="progress-info">
|
||||
<small><?php echo $lang->bug->allBugs;?></small>
|
||||
<strong><?php echo empty($product->total) ? 0 : html::a($this->createLink('bug', 'browse', "productID={$product->id}&branch=&type=all"), $product->total);?></strong>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center small with-padding">
|
||||
<span class="label label-dot label-primary"></span> <?php echo $lang->bug->assignToMe;?> <strong><?php echo empty($product->assignedToMe) ? 0 : html::a($this->createLink('bug', 'browse', "productID={$product->id}&branch=&browseType=assigntome"), $product->assignedToMe);?></strong>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-7">
|
||||
<div class="product-info">
|
||||
<?php if($product->yesterdayResolved):?>
|
||||
<div class="progress-info"><i class="icon icon-check-circle text-success icon-sm"></i> <span class="text-muted"><?php echo $lang->bug->yesterdayResolved;?></span> <strong><?php echo $product->yesterdayResolved;?></strong></div>
|
||||
<?php endif;?>
|
||||
<div class="progress">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="<?php echo $product->unresolvedRate;?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $product->unresolvedRate;?>%"></div>
|
||||
</div>
|
||||
<div class="type-info">
|
||||
<div class="type-label">
|
||||
<span><?php echo $lang->bug->unResolved;?></span>
|
||||
</div>
|
||||
<div class="type-value">
|
||||
<strong><?php echo empty($product->unresolved) ? 0 : html::a($this->createLink('bug', 'browse', "productID={$product->id}&branch=&browseType=unresolved"), $product->unresolved);?></strong>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="product-info">
|
||||
<?php if($product->yesterdayConfirmed):?>
|
||||
<div class="progress-info"><i class="icon icon-exclamation-sign text-danger icon-sm"></i> <span class="text-muted"><?php echo $lang->bug->yesterdayConfirmed;?></span> <strong><?php echo $product->yesterdayConfirmed;?></strong></div>
|
||||
<?php endif;?>
|
||||
<div class="progress">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="<?php echo $product->unconfirmedRate;?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $product->unconfirmedRate;?>%"></div>
|
||||
</div>
|
||||
<div class="type-info">
|
||||
<div class="type-label">
|
||||
<span><?php echo $lang->bug->unconfirmed;?></span>
|
||||
</div>
|
||||
<div class="type-value">
|
||||
<strong><?php echo empty($product->unconfirmed) ? 0 : html::a($this->createLink('bug', 'browse', "productID={$product->id}&branch=&browseType=unconfirmed"), $product->unconfirmed);?></strong>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="product-info">
|
||||
<?php if($product->yesterdayClosed):?>
|
||||
<div class="progress-info"><i class="icon icon-check-circle text-success icon-sm"></i> <span class="text-muted"><?php echo $lang->bug->yesterdayClosed;?></span> <strong><?php echo $product->yesterdayClosed;?></strong></div>
|
||||
<?php endif;?>
|
||||
<div class="progress">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="<?php echo $product->unclosedRate;?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $product->unclosedRate;?>%"></div>
|
||||
</div>
|
||||
<div class="type-info">
|
||||
<div class="type-label">
|
||||
<span><?php echo $lang->bug->unclosed;?></span>
|
||||
</div>
|
||||
<div class="type-value">
|
||||
<strong><?php echo empty($product->unclosed) ? 0 : html::a($this->createLink('bug', 'browse', "productID={$product->id}&branch=&browseType=unclosed"), $product->unclosed);?></strong>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php $index++;?>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,135 +0,0 @@
|
||||
<style>
|
||||
.cards-menu > li > a {padding-left: 5px; text-align: left;}
|
||||
.cards-menu > li > a > i {opacity: .5; display: inline-block; margin-right: 4px; width: 18px; text-align: center;}
|
||||
.cards-menu > li > a:hover > i {opacity: 1;}
|
||||
|
||||
#cards {margin: 0; padding: 0 10px 10px 10px;}
|
||||
#cards > .col {width: 33.33%;}
|
||||
.col-side #cards > .col {width: 100%;}
|
||||
#cards .panel-content {margin: 10px 0; border: 1px solid #DCDCDC; border-radius: 2px; box-shadow: none; height: 146px; cursor: pointer;}
|
||||
#cards .panel-content:hover {border-color: #006AF1; box-shadow: 0 0 10px 0 rgba(0,0,100,.25);}
|
||||
#cards .panel-heading {padding: 12px 24px 10px 16px;}
|
||||
#cards .panel-body {padding: 0 16px 16px;}
|
||||
#cards .panel-actions {padding: 7px 0; z-index: 0}
|
||||
#cards .project-type-label {padding: 2px 2px; margin-bottom: 3px;}
|
||||
#cards .project-name {font-size: 16px; font-weight: normal; display: inline-block; max-width: 75%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: middle;}
|
||||
#cards .project-infos {font-size: 12px; padding: 0 15px;}
|
||||
#cards .project-infos > span {display: inline-block; line-height: 12px;}
|
||||
#cards .project-infos > span > .icon {font-size: 12px; display: inline-block; position: relative; top: -1px}
|
||||
#cards .project-infos > span + span {margin-left: 10px;}
|
||||
#cards .project-detail {position: absolute; bottom: 27px; left: 16px; right: 16px; font-size: 12px; padding-left: 10px;}
|
||||
#cards .project-detail > p {margin-bottom: 8px;}
|
||||
#cards .project-detail .progress {height: 4px;}
|
||||
#cards .project-detail .progress-text-left .progress-text {width: 50px; left: -50px;}
|
||||
#cards .panel-heading {cursor: pointer;}
|
||||
#cards .project-stages-container {margin: 0 0 -16px 0; padding: 0 4px; height: 40px; overflow-x: auto; position: relative;}
|
||||
#cards .project-stages:after {content: ' '; width: 30px; display: block; right: -5px; top: 16px; bottom: -5px; z-index: 1; background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 100%); position: absolute;}
|
||||
#cards .project-stages-row {position: relative; height: 30px; z-index: 0;}
|
||||
#cards .project-stage-item {white-space: nowrap; position: absolute; top: 0; min-width: 48px; padding-top: 13px; color: #838A9D;}
|
||||
#cards .project-stage-item > div {max-width: 70px; white-space: nowrap; overflow: hidden; text-align: center; text-overflow: ellipsis;}
|
||||
#cards .project-stage-item:before {content: ' '; display: block; width: 8px; height: 8px; border-radius: 50%; background: #D1D1D1; position: absolute; left: 50%; margin-left: -4px; top: 0; z-index: 1;}
|
||||
#cards .project-stage-item + .project-stage-item:after {content: ' '; display: block; left: -50%; right: 50%; height: 2px; background-color: #D1D1D1; top: 3px; position: absolute; z-index: 0;}
|
||||
#cards .project-stage-item.is-going {color: #333;}
|
||||
#cards .project-stage-item.is-going::before {background-color: #0C64EB;}
|
||||
#dashboard .block-recentproject .panel-body {padding: 0;}
|
||||
.execution-name {overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
.scrollbar::-webkit-scrollbar:horizontal {height: 5px;}
|
||||
</style>
|
||||
<div class="panel-body">
|
||||
<?php if(empty($projects)):?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<div class='row' id='cards'>
|
||||
<?php foreach($projects as $projectID => $project):?>
|
||||
<?php $viewLink = $this->createLink('project', 'index', "projectID=$project->id");?>
|
||||
<div class='col'>
|
||||
<div class='panel-content'>
|
||||
<div class='panel-heading not-move-handler'>
|
||||
<?php $labelClass = $project->model == 'waterfall' ? 'label-warning' : 'label-info';?>
|
||||
<span class='project-type-label label <?php echo $labelClass;?> label-outline'><?php echo $lang->project->{$project->model};?></span>
|
||||
<strong class='project-name' title='<?php echo $project->name;?>'> <?php echo html::a($viewLink, $project->name);?> </strong>
|
||||
<nav class='panel-actions nav nav-default'>
|
||||
<li class='dropdown'>
|
||||
<ul class='dropdown-menu pull-right cards-menu'>
|
||||
<li><?php common::printIcon('project', 'group', "projectID=$project->id", $project, 'button', 'group', '', '', '', '', '', $project->id);?></li>
|
||||
<li><?php common::printIcon('project', 'manageMembers', "projectID=$project->id", $project, 'button', 'persons', '', '', '', '', '', $project->id);?></li>
|
||||
<li><?php common::printicon('project', 'activate', "projectID=$project->id", $project, 'button', '', '', 'iframe', true);?></li>
|
||||
<li><?php if(common::hasPriv('project', 'edit')) echo html::a($this->createLink('project', 'edit', "projectID=$project->id"), "<i class='icon-edit'></i> " . $lang->project->edit, '', "data-app='{$app->tab}'");?></li>
|
||||
<li><?php common::printIcon('project', 'start', "projectID=$project->id", $project, 'button', ' icon-play', '', 'iframe', true);?></li>
|
||||
<li><?php common::printIcon('project', 'suspend', "projectID=$project->id", $project, 'button', ' icon-pause', '', 'iframe', true);?></li>
|
||||
<li><?php common::printIcon('project', 'close', "projectID=$project->id", $project, 'button', ' icon-off', '', 'iframe', true);?></li>
|
||||
<li><?php if(common::hasPriv('project', 'delete')) echo html::a($this->createLink('project', 'delete', "projectID=$project->id"), "<i class='icon-trash'></i> " . $lang->project->delete, 'hiddenwin', "data-app='{$app->tab}'");?></li>
|
||||
</ul>
|
||||
</li>
|
||||
</nav>
|
||||
</div>
|
||||
<div class='panel-body'>
|
||||
<div class='project-infos'>
|
||||
<span><i class='icon icon-group'></i> <?php printf($lang->project->membersUnit, $project->teamCount); ?></span>
|
||||
<span><i class='icon icon-clock'></i> <?php printf($lang->project->hoursUnit, $project->estimate); ?></span>
|
||||
</div>
|
||||
<?php if($project->model === 'waterfall'):?>
|
||||
<div class='project-detail project-stages'>
|
||||
<?php
|
||||
$projectProjects = array();
|
||||
foreach($project->executions as $project)
|
||||
{
|
||||
if($project->grade == 1) $projectProjects[] = $project;
|
||||
}
|
||||
?>
|
||||
<?php if(empty($projectProjects)): ?>
|
||||
<div class='label label-outline'><?php echo zget($lang->project->statusList, $project->status);?></div>
|
||||
<?php else: ?>
|
||||
<p class='text-muted'><?php echo $lang->project->ongoingStage;?></p>
|
||||
<div class='project-stages-container scrollbar-hover scrollbar'>
|
||||
<div class='project-stages-row'>
|
||||
<?php foreach ($projectProjects as $project):?>
|
||||
<div class='project-stage-item is-<?php echo $project->status;?><?php if($project->status !== 'wait') echo ' is-going';?>'>
|
||||
<div title="<?php echo $project->name;?>"><?php echo $project->name;?></div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php elseif($project->multiple):?>
|
||||
<?php $project = empty($project->executions ) ? '' : end($project->executions);?>
|
||||
<div class='project-detail project-iteration'>
|
||||
<?php if($project):?>
|
||||
<p class='text-muted'><?php echo $project->type == 'kanban' ? $lang->project->lastKanban : $lang->project->lastIteration;?></p>
|
||||
<div class='row'>
|
||||
<div class='col-xs-5 execution-name' title="<?php echo $project->name;?>"><?php echo html::a($this->createLink('execution', 'task', "executionID={$project->id}"), $project->name);?></div>
|
||||
<div class='col-xs-7'>
|
||||
<div class="progress progress-text-left">
|
||||
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="<?php echo $project->hours->progress;?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $project->hours->progress;?>%">
|
||||
<span class="progress-text"><?php echo $project->hours->progress;?>%</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<script>
|
||||
/* Auto resize stages */
|
||||
$('.block-recentproject #cards .project-stages-container').each(function()
|
||||
{
|
||||
var $container = $(this);
|
||||
var $row = $container.children();
|
||||
var totalWidth = 0;
|
||||
$row.children().each(function()
|
||||
{
|
||||
var $item = $(this);
|
||||
$item.css('left', totalWidth);
|
||||
totalWidth += $item.width();
|
||||
});
|
||||
$row.css('minWidth', totalWidth);
|
||||
});
|
||||
</script>
|
||||
@@ -1,58 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The release block view file of block module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php if(empty($releases)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<div class='panel-body has-table scrollbar-hover'>
|
||||
<table class='table table-borderless table-hover table-fixed tablesorter block-release'>
|
||||
<thead>
|
||||
<tr>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-id-xs text-center'><?php echo $lang->idAB?></th>
|
||||
<th><?php echo $lang->release->product;?></th>
|
||||
<?php endif;?>
|
||||
<th><?php echo $lang->release->name;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th><?php echo $lang->release->build;?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-date text-center'><?php echo $lang->release->date;?></th>
|
||||
<th class='text-center w-90px'><?php echo $lang->release->status;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($releases as $release):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$productViewLink = $this->createLink('product', 'browse', "productID={$release->product}");
|
||||
$buildViewLink = $this->createLink('build', 'view', "buildID={$release->build}");
|
||||
$releaseViewLink = $this->createLink('release', 'view', "releaseID={$release->id}");
|
||||
?>
|
||||
<tr <?php echo $appid?>>
|
||||
<?php if($longBlock):?>
|
||||
<td class='text-center'><?php echo sprintf('%03d', $release->id);?></td>
|
||||
<td title='<?php echo $release->productName?>'><?php echo html::a($productViewLink, $release->productName);?></td>
|
||||
<?php endif;?>
|
||||
<td title='<?php echo $release->name?>'><?php echo html::a($releaseViewLink, $release->name);?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td title='<?php echo $release->buildName?>'><?php echo html::a($buildViewLink, $release->buildName);?></td>
|
||||
<?php endif;?>
|
||||
<td class='text-center'><?php echo $release->date?></td>
|
||||
<td class='c-status' title='<?php echo zget($lang->release->statusList, $release->status);?>'>
|
||||
<span class="status-release status-<?php echo $release->status?>"><?php echo zget($lang->release->statusList, $release->status);?></span>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -1,51 +0,0 @@
|
||||
<?php if(empty($risks)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<style>
|
||||
.block-risks .c-id {width: 50px;}
|
||||
.block-risks .c-pri {width: 50px;text-align: center;}
|
||||
.block-risks .c-plannedClosedDate {width: 100px;}
|
||||
.block-risks .c-category {width: 80px;}
|
||||
.block-risks .c-status {width: 80px;}
|
||||
.block-risks.block-sm .c-status {text-align: center;}
|
||||
.pri-low {color: #000000;}
|
||||
.pri-middle {color: #FF9900;}
|
||||
.pri-high {color: #E53333;}
|
||||
</style>
|
||||
<div class='panel-body has-table scrollbar-hover'>
|
||||
<table class='table table-borderless table-fixed table-fixed-head table-hover tablesorter block-risks <?php if(!$longBlock) echo 'block-sm'?>'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-id'><?php echo $lang->idAB?></th>
|
||||
<th class='c-name'><?php echo $lang->risk->name?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-pri'><?php echo $lang->priAB?></th>
|
||||
<th class='c-category'><?php echo $lang->risk->category;?></th>
|
||||
<th class='c-plannedClosedDate'><?php echo $lang->risk->plannedClosedDate;?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-status'><?php echo $lang->risk->status;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($risks as $risk):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
?>
|
||||
<tr>
|
||||
<td class='c-id-xs'><?php echo sprintf('%03d', $risk->id);?></td>
|
||||
<td class='c-name' title='<?php echo $risk->name?>'><?php echo html::a($this->createLink('risk', 'view', "riskID=$risk->id", '', '', $risk->project), $risk->name)?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-pri'><?php echo "<span class='pri-{$risk->pri}'>" . zget($lang->risk->priList, $risk->pri) . "</span>";?></td>
|
||||
<td class='c-category'><?php echo zget($lang->risk->categoryList, $risk->category)?></td>
|
||||
<td class='c-plannedClosedDate'><?php echo $risk->plannedClosedDate == '0000-00-00' ? '' : $risk->plannedClosedDate;?></td>
|
||||
<?php endif;?>
|
||||
<?php $status = $this->processStatus('risk', $risk);?>
|
||||
<td class='c-status' title='<?php echo $status;?>'>
|
||||
<span class="status-risk status-<?php echo $risk->status?>"><?php echo $status;?></span>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -1,50 +0,0 @@
|
||||
<?php if(empty($issues)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<style>
|
||||
.block-issues .c-id {width: 55px;}
|
||||
.block-issues .c-status {width: 80px;}
|
||||
.block-issues.block-sm .c-status {text-align: center;}
|
||||
.c-assignedTo {width: 100px; padding:0px !important;text-align:center;}
|
||||
.c-severity, .c-pri {text-align:center;}
|
||||
</style>
|
||||
<div class='panel-body has-table scrollbar-hover'>
|
||||
<table class='table table-borderless table-hover table-fixed table-fixed-head tablesorter block-issues <?php if(!$longBlock) echo 'block-sm';?>'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-id'><?php echo $lang->idAB;?></th>
|
||||
<th class='c-status'><?php echo $lang->issue->type;?></th>
|
||||
<th class='c-name'> <?php echo $lang->issue->title;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-status'><?php echo $lang->issue->severity;?></th>
|
||||
<th class='c-number'><?php echo $lang->issue->pri;?></th>
|
||||
<th class='c-user'><?php echo $lang->issue->owner;?></th>
|
||||
<th class='c-assignedTo'><?php echo $lang->issue->assignedTo;?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-status'><?php echo $lang->issue->status;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($issues as $issue):?>
|
||||
<?php
|
||||
$viewLink = $this->createLink('issue', 'view', "issueID={$issue->id}");
|
||||
?>
|
||||
<tr>
|
||||
<td class='c-id-xs'><?php echo sprintf('%03d', $issue->id);?></td>
|
||||
<td class='c-type'><?php echo zget($lang->issue->typeList, $issue->type);?></td>
|
||||
<td class='c-name' title='<?php echo $issue->title?>'><?php echo html::a($viewLink, $issue->title);?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-severity'><?php echo zget($lang->issue->severityList, $issue->severity, $issue->severity)?></td>
|
||||
<td class='c-pri'><?php echo zget($lang->issue->priList, $issue->pri, $issue->pri)?></td>
|
||||
<td><?php echo zget($users, $issue->owner, $issue->owner)?></td>
|
||||
<td class='c-assignedTo'><?php echo zget($users, $issue->assignedTo, $issue->assignedTo)?></td>
|
||||
<?php endif;?>
|
||||
<td class='c-status'>
|
||||
<span class="status-issue status-<?php echo $issue->status?>"><?php echo zget($lang->issue->statusList, $issue->status);?></span>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -1,76 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The project list block view file of block module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<style>
|
||||
.table .c-progress {width: 60px;}
|
||||
.table .c-estimate {width: 85px;}
|
||||
.table .c-burn {width: 150px;}
|
||||
</style>
|
||||
<?php if(empty($executionStats)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<div class="panel-body has-table scrollbar-hover">
|
||||
<table class='table table-borderless table-hover table-fixed table-fixed-head tablesorter block-projects tablesorter'>
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
<th class='c-name text-left'><?php echo $lang->execution->name;?></th>
|
||||
<th class="c-date"><?php echo $lang->execution->end;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<?php $thClass = common::checkNotCN() ? 'c-estimate' : 'c-hours';?>
|
||||
<th class="c-status"><?php echo $lang->statusAB;?></th>
|
||||
<th class='<?php echo $thClass?>'><?php echo $lang->execution->totalEstimate;?></th>
|
||||
<th class="c-hours"><?php echo $lang->execution->totalConsumed;?></th>
|
||||
<th class="c-hours"><?php echo $lang->execution->totalLeft;?></th>
|
||||
<?php endif;?>
|
||||
<th class="c-progress"><?php echo $lang->execution->progress;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-burn'><?php echo $lang->execution->burn;?></th>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="text-center">
|
||||
<?php $id = 0; ?>
|
||||
<?php foreach($executionStats as $execution):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn text-center' data-id='{$this->get->entry}'" : "class='text-center'";
|
||||
$viewLink = $this->createLink('execution', 'task', 'executionID=' . $execution->id);
|
||||
?>
|
||||
<tr <?php echo $appid?>>
|
||||
<td class='c-name text-left' title='<?php echo $execution->name;?>'><nobr><?php echo html::a($viewLink, $execution->name, '', "title='$execution->name' class='text-primary'");?></nobr></td>
|
||||
<td class="c-date"><?php echo $execution->end;?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class="w-70px">
|
||||
<?php if(isset($execution->delay)):?>
|
||||
<span class="status-project status-delayed" title='<?php echo $lang->execution->delayed;?>'><?php echo $lang->execution->delayed;?></span>
|
||||
<?php else:?>
|
||||
<?php $statusName = $this->processStatus('execution', $execution);?>
|
||||
<span class="status-project status-<?php echo $execution->status?>" title='<?php echo $statusName;?>'><?php echo $statusName;?></span>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
<td class="c-hours" title="<?php echo $execution->hours->totalEstimate . ' ' . $lang->execution->workHour;?>"><?php echo $execution->hours->totalEstimate . $lang->execution->workHourUnit;?></td>
|
||||
<td class="c-hours" title="<?php echo $execution->hours->totalConsumed . ' ' . $lang->execution->workHour;?>"><?php echo $execution->hours->totalConsumed . $lang->execution->workHourUnit;?></td>
|
||||
<td class="c-hours" title="<?php echo $execution->hours->totalLeft . ' ' . $lang->execution->workHour;?>"><?php echo $execution->hours->totalLeft . $lang->execution->workHourUnit;?></td>
|
||||
<?php endif;?>
|
||||
<td class="c-progress">
|
||||
<div class='progress-pie' data-doughnut-size='90' data-color='#3CB371' data-value='<?php echo round($execution->hours->progress);?>' data-width='24' data-height='24' data-back-color='#e8edf3'>
|
||||
<div class='progress-info'><?php echo round($execution->hours->progress);?></div>
|
||||
</div>
|
||||
</td>
|
||||
<?php if($longBlock):?>
|
||||
<td id='spark-<?php echo $id++?>' class='no-padding text-left sparkline' values='<?php echo join(',', $execution->burns);?>'></td>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -1,73 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The scrum overview block view file of block module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php $vision = $this->config->vision;?>
|
||||
<?php if(empty($totalData)): ?>
|
||||
<div class='empty-tip'><?php common::printLink('project', 'create', '', "<i class='icon-plus'></i> " . $lang->project->create, '', "class='btn btn-primary'")?></div>
|
||||
<?php else:?>
|
||||
<table class="table table-data">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><?php echo $lang->block->storyCount;?></th>
|
||||
<th></th>
|
||||
<th><?php echo $lang->block->investment;?></th>
|
||||
<th></th>
|
||||
<th><?php echo $lang->block->taskCount;?></th>
|
||||
<th></th>
|
||||
<?php if($vision == 'rnd'):?>
|
||||
<th><?php echo $lang->block->bugCount;?></th>
|
||||
<?php endif;?>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th><?php echo $lang->block->totalStory . ':';?></th>
|
||||
<td><?php echo $totalData[$projectID]->allStories;?></td>
|
||||
<th><?php echo $lang->block->totalPeople . ':';?></th>
|
||||
<td><?php echo $totalData[$projectID]->teamCount ? html::a($this->createLink('project', 'team', 'projectID=' . $projectID), $totalData[$projectID]->teamCount) : 0;?></td>
|
||||
<th><?php echo ($vision == 'rnd' ? $lang->block->wait : $lang->block->totalTask) . ':';?></th>
|
||||
<td><?php echo $vision == 'rnd' ? $totalData[$projectID]->waitTasks : $totalData[$projectID]->allTasks;?></td>
|
||||
<?php if($vision == 'rnd'):?>
|
||||
<th><?php echo $lang->block->totalBug . ':';?></th>
|
||||
<td><?php echo $totalData[$projectID]->allBugs;?></td>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->block->done . ':';?></th>
|
||||
<td><?php echo $totalData[$projectID]->doneStories;?></td>
|
||||
<th><?php echo $lang->block->estimate . ':';?></th>
|
||||
<td><?php echo $totalData[$projectID]->estimate . $lang->execution->workHourUnit;?></td>
|
||||
<th><?php echo ($vision == 'rnd' ? $lang->block->doing : $lang->block->done) . ':';?></th>
|
||||
<td><?php echo $vision == 'rnd' ? $totalData[$projectID]->doingTasks: $totalData[$projectID]->liteDoneTasks;?></td>
|
||||
<?php if($vision == 'rnd'):?>
|
||||
<th><?php echo $lang->bug->statusList['resolved'] . ':';?></th>
|
||||
<td><?php echo $totalData[$projectID]->doneBugs;?></td>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->block->left . ':';?></th>
|
||||
<td><?php echo $totalData[$projectID]->leftStories;?></td>
|
||||
<th><?php echo $lang->block->consumedHours . ':';?></th>
|
||||
<td><?php echo $totalData[$projectID]->consumed . $lang->execution->workHourUnit;?></td>
|
||||
<th><?php echo $vision == 'rnd' ? $lang->block->done . ':' : $lang->block->undone;?></th>
|
||||
<td><?php echo $vision == 'rnd' ? $totalData[$projectID]->rndDoneTasks : $totalData[$projectID]->leftTasks;?></td>
|
||||
<?php if($vision == 'rnd'):?>
|
||||
<th><?php echo $lang->bug->unResolved . ':';?></th>
|
||||
<td><?php echo $totalData[$projectID]->leftBugs;?></td>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<?php endif;?>
|
||||
@@ -1,58 +0,0 @@
|
||||
<?php if(empty($risks)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<style>
|
||||
.block-risks .c-id {width: 40px;}
|
||||
.block-risks .c-pri {width: 85px; text-align: center;}
|
||||
.block-risks .c-strategy, .block-risks .c-status {width: 80px;}
|
||||
.block-risks .c-user, .block-risks .c-rate, .block-risks .c-category {width: 110px;}
|
||||
.c-rate, .c-category {text-align:center;}
|
||||
.c-assignedTo {width: 100px; padding:0px !important;text-align:center;}
|
||||
.pri-low {color: #000000;}
|
||||
.pri-middle {color: #FF9900;}
|
||||
.pri-high {color: #E53333;}
|
||||
</style>
|
||||
<div class='panel-body has-table scrollbar-hover'>
|
||||
<table class='table table-borderless table-hover table-fixed table-fixed-head tablesorter block-risks <?php if(!$longBlock) echo 'block-sm';?>'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-id'><?php echo $lang->idAB;?></th>
|
||||
<th class='c-name'><?php echo $lang->risk->name;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-strategy'> <?php echo $lang->risk->strategy;?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-status'><?php echo $lang->risk->status;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-rate'><?php echo $lang->risk->rate;?></th>
|
||||
<th class='c-pri'><?php echo $lang->risk->pri;?></th>
|
||||
<th class='c-assignedTo text-center'><?php echo $lang->risk->assignedTo;?></th>
|
||||
<th class='c-category'><?php echo $lang->risk->category;?></th>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($risks as $risk):?>
|
||||
<?php
|
||||
$viewLink = $this->createLink('risk', 'view', "riskID={$risk->id}");
|
||||
?>
|
||||
<tr>
|
||||
<td class='c-id-xs'><?php echo sprintf('%03d', $risk->id);?></td>
|
||||
<td class='c-name' title='<?php echo $risk->name?>'><?php echo html::a($viewLink, $risk->name);?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-strategy'><?php echo zget($lang->risk->strategyList, $risk->strategy, $risk->strategy)?></td>
|
||||
<?php endif;?>
|
||||
<td class='c-status'>
|
||||
<span class="status-risk status-<?php echo $risk->status?>"><?php echo zget($lang->risk->statusList, $risk->status);?></span>
|
||||
</td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-rate'><?php echo $risk->rate?></td>
|
||||
<td class='c-pri'><?php echo "<span class='pri-{$risk->pri}'>" . zget($lang->risk->priList, $risk->pri) . "</span>";?></td>
|
||||
<td class='c-assignedTo'><?php echo zget($users, $risk->assignedTo, $risk->assignedTo)?></td>
|
||||
<td class='c-category'><?php echo zget($lang->risk->categoryList, $risk->category, $risk->category)?></td>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -1,55 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The testtask block view file of block module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php if(empty($testtasks)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<div class='panel-body has-table scrollbar-hover'>
|
||||
<table class='table table-borderless table-hover table-fixed-head tablesorter block-testtask table-fixed'>
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
<th class='text-left'><?php echo $lang->testtask->name;?></th>
|
||||
<?php if($longBlock and $project->hasProduct):?>
|
||||
<th class='text-left'><?php echo $lang->testtask->product;?></th>
|
||||
<?php endif;?>
|
||||
<?php if($longBlock):?>
|
||||
<th class='text-left'><?php echo $lang->testtask->project?></th>
|
||||
<?php endif;?>
|
||||
<th class='text-left'><?php echo $lang->testtask->build;?></th>
|
||||
<th class='w-date'><?php echo $lang->testtask->status;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($testtasks as $testtask):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$productViewLink = $this->createLink('product', 'browse', "productID={$testtask->product}");
|
||||
$projectViewLink = $this->createLink('project', 'view', "projectID={$testtask->project}");
|
||||
$testtaskViewLink = $this->createLink('testtask', 'view', "testtaskID={$testtask->id}");
|
||||
$buildViewLink = $this->createLink('build', 'view', "buildID={$testtask->build}");
|
||||
?>
|
||||
<tr class='text-center' <?php echo $appid?>>
|
||||
<td class='text-left text-ellipsis' title='<?php echo $testtask->name?>'><?php echo html::a($testtaskViewLink, $testtask->name);?></td>
|
||||
<?php if($longBlock and $project->hasProduct):?>
|
||||
<td class='text-left text-ellipsis' title='<?php echo $testtask->productName?>'><?php echo html::a($productViewLink, $testtask->productName);?></td>
|
||||
<?php endif;?>
|
||||
<?php if($longBlock):?>
|
||||
<td class='text-left text-ellipsis' title='<?php echo $testtask->projectName?>'><?php echo html::a($projectViewLink, $testtask->projectName);?></td>
|
||||
<?php endif;?>
|
||||
<td class='text-left text-ellipsis' title='<?php echo $testtask->buildName?>'><?php echo html::a($buildViewLink, $testtask->buildName);?></td>
|
||||
<td><?php echo zget($lang->testtask->statusList, $testtask->status)?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -1,44 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The sprint block view file of block module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php if(!$summary->total): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<style>
|
||||
.status-bars {display: table; width: 80%; height: 140px; padding: 5px; padding-top: 50px; margin: 0; overflow: hidden;}
|
||||
</style>
|
||||
<div class="panel-body table-row">
|
||||
<div class="col-4 text-middle text-center">
|
||||
<div class="tile">
|
||||
<div class="tile-title"><?php echo $lang->block->allExecutions;?></div>
|
||||
<?php $projectLink = $this->createLink('project', 'execution')?>
|
||||
<div class="tile-amount"><?php echo $summary->total ? html::a($projectLink, $summary->total) : 0;?></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-8 text-middle">
|
||||
<ul class="status-bars all-statistics">
|
||||
<li>
|
||||
<span class="bar" style="height: <?php echo $progress->doing * 100;?>%">
|
||||
<span class="value"><?php echo $summary->doing;?></span>
|
||||
</span>
|
||||
<span class="title"><?php echo $lang->block->doingExecution;?></span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="bar" style="height: <?php echo $progress->closed * 100;?>%">
|
||||
<span class="value"><?php echo $summary->closed;?></span>
|
||||
</span>
|
||||
<span class="title"><?php echo $lang->block->finishExecution;?></span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -1,68 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The story block view file of block module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php $this->app->loadLang('story');?>
|
||||
<?php if(empty($stories)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<style>
|
||||
.block-stories .c-id {width: 55px;}
|
||||
.block-stories .c-pri {width: 45px;text-align: center;}
|
||||
.block-stories .c-estimate {width: 65px; text-align: right;}
|
||||
.block-stories .c-status {width: 80px;}
|
||||
.block-stories .c-stage {width: 80px;}
|
||||
.block-stories.block-sm .estimate,
|
||||
.block-stories.block-sm .c-stage,
|
||||
.block-stories.block-sm .c-status {text-align: center;}
|
||||
</style>
|
||||
<div class='panel-body has-table scrollbar-hover'>
|
||||
<table class='table table-borderless table-hover table-fixed table-fixed-head tablesorter block-stories <?php if(!$longBlock) echo 'block-sm'?>'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="c-id"><?php echo $lang->idAB?></th>
|
||||
<th class="c-name"><?php echo $lang->story->title;?></th>
|
||||
<th class="c-pri"><?php echo $lang->priAB?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class="c-status"><?php echo $lang->statusAB;?></th>
|
||||
<th class='c-estimate'><?php echo $lang->story->estimateAB;?></th>
|
||||
<th class='c-stage'><?php echo $lang->story->stageAB;?></th>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($stories as $story):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('story', 'view', "storyID={$story->id}");
|
||||
?>
|
||||
<tr <?php echo $appid?>>
|
||||
<td class="c-id-xs"><?php echo sprintf('%03d', $story->id);?></td>
|
||||
<td class="c-name" style='color: <?php echo $story->color?>' title='<?php echo $story->title?>'><?php echo html::a($viewLink, $story->title);?></td>
|
||||
<td class="c-pri"><span class="label-pri label-pri-<?php echo $story->pri?>" title="<?php echo zget($lang->story->priList, $story->pri, $story->pri);?>"><?php echo zget($lang->story->priList, $story->pri, $story->pri)?></span></td>
|
||||
<?php if($longBlock):?>
|
||||
<?php $status = $this->processStatus('story', $story);?>
|
||||
<td class='c-status' title='<?php echo $status;?>'>
|
||||
<span class="status-story status-<?php echo $story->status?>"><?php echo $status;?></span>
|
||||
</td>
|
||||
<td class='c-estimate text-center' title="<?php echo $story->estimate . ' ' . $lang->hourCommon;?>"><?php echo $story->estimate . $config->hourUnit?></td>
|
||||
<td class='c-stage'>
|
||||
<span class='story-stage-<?php echo $story->stage?>'>
|
||||
<?php echo zget($lang->story->stageList, $story->stage, $story->stage);?>
|
||||
</span>
|
||||
</td>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -1,65 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The task block view file of block module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php if(empty($tasks)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<style>
|
||||
.block-tasks .c-id {width: 55px;}
|
||||
.block-tasks .c-pri {width: 45px;text-align: center;}
|
||||
.block-tasks .c-pri-long {width: 80px;}
|
||||
.block-tasks .c-estimate {width: 60px;text-align: right;}
|
||||
.block-tasks .c-deadline {width: 95px;}
|
||||
.block-tasks .c-status {width: 80px;}
|
||||
.block-tasks.block-sm .c-status {text-align: center;}
|
||||
</style>
|
||||
<div class='panel-body has-table scrollbar-hover'>
|
||||
<table class='table table-borderless table-hover table-fixed table-fixed-head tablesorter block-tasks <?php if(!$longBlock) echo 'block-sm';?>'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-id'><?php echo $lang->idAB;?></th>
|
||||
<th class='c-name'> <?php echo $lang->task->name;?></th>
|
||||
<th class='c-pri <?php if($longBlock) echo "c-pri-long"?>'><?php echo $lang->priAB?></th>
|
||||
<th class='c-status'><?php echo $lang->statusAB;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-deadline'><?php echo $lang->task->deadlineAB;?></th>
|
||||
<th class='c-estimate'><?php echo $lang->task->estimateAB;?></th>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($tasks as $task):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
?>
|
||||
<tr>
|
||||
<td class='c-id-xs'><?php echo sprintf('%03d', $task->id);?></td>
|
||||
<?php
|
||||
$onlybody = $task->executionType == 'kanban' ? true : '';
|
||||
$class = $task->executionType == 'kanban' ? "class='iframe' data-toggle='modal'" : '';
|
||||
?>
|
||||
<td class='c-name' style='color: <?php echo $task->color?>' title='<?php echo $task->name?>'><?php echo html::a($this->createLink('task', 'view', "taskID=$task->id", '', $onlybody, $task->project), $task->name, null, "$class data-width='80%'")?></td>
|
||||
<td class='c-pri <?php if($longBlock) echo "c-pri-long"?>'><span class='label-pri label-pri-<?php echo $task->pri;?>' title='<?php echo zget($lang->task->priList, $task->pri)?>'><?php echo zget($lang->task->priList, $task->pri)?></span></td>
|
||||
<?php $status = $this->processStatus('task', $task);?>
|
||||
<td class='c-status' title='<?php echo $status;?>'>
|
||||
<span class="status-task status-<?php echo $task->status?>"><?php echo $status;?></span>
|
||||
</td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-deadline'><?php if(substr($task->deadline, 0, 4) > 0) echo $task->deadline;?></td>
|
||||
<td class='c-estimate text-center' title="<?php echo $task->estimate . ' ' . $lang->execution->workHour;?>"><?php echo $task->estimate . $lang->execution->workHourUnit;?></td>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -1,62 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The testtask block view file of block module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package block
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php if(empty($testtasks)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<div class='panel-body has-table scrollbar-hover'>
|
||||
<table class='table table-borderless table-hover table-fixed-head tablesorter block-testtask table-fixed'>
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-id'><?php echo $lang->idAB?></th>
|
||||
<th class='text-left'><?php echo $lang->testtask->product;?></th>
|
||||
<?php endif;?>
|
||||
<th class='text-left'><?php echo $lang->testtask->name;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='text-left'><?php echo $lang->testtask->execution . '/' . $lang->testtask->build;?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-date'><?php echo $lang->testtask->begin;?></th>
|
||||
<th class='c-date'><?php echo $lang->testtask->end;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($testtasks as $testtask):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$productViewLink = $this->createLink('product', 'browse', "productID={$testtask->product}");
|
||||
$buildViewLink = $this->createLink('build', 'view', "buildID={$testtask->build}");
|
||||
$testtaskViewLink = $this->createLink('testtask', 'view', "testtaskID={$testtask->id}");
|
||||
|
||||
if($testtask->shadow)
|
||||
{
|
||||
$testtask->productName = zget($projects, $testtask->project);
|
||||
$productViewLink = $this->createLink('projectstory', 'story', "projectID={$testtask->project}&productID={$testtask->product}");
|
||||
}
|
||||
?>
|
||||
<tr class='text-center' <?php echo $appid?>>
|
||||
<?php if($longBlock):?>
|
||||
<td><?php echo sprintf('%03d', $testtask->id);?></td>
|
||||
<td class='text-left' title='<?php echo $testtask->productName?>'><?php echo html::a($productViewLink, $testtask->productName);?></td>
|
||||
<?php endif;?>
|
||||
<td class='text-left' title='<?php echo $testtask->name?>'><?php echo html::a($testtaskViewLink, $testtask->name);?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='text-left' title='<?php echo $testtask->projectName . '/' . $testtask->buildName?>'><?php echo html::a($buildViewLink, $testtask->projectName . '/' . $testtask->buildName);?></td>
|
||||
<?php endif;?>
|
||||
<td><?php echo $testtask->begin?></td>
|
||||
<td><?php echo $testtask->end?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -1,47 +0,0 @@
|
||||
<style>
|
||||
.themeSwitch .table-row {border-top: 0px !important;}
|
||||
.themeSwitch .theme-container:first-child {padding-top: 1%;}
|
||||
@media screen and (max-width: 1366px){.themeSwitch .theme-container:first-child {padding-top: 3%;} .theme-container + .theme-container {padding-top: 3%;}}
|
||||
.themeSwitch .theme-container {border-collapse:separate; border-spacing:10px; border: none;}
|
||||
.theme {margin-left: 10px; color: #FFF; border: none; background-size: 100% !important; cursor:pointer; border-radius: 4px; position: relative;}
|
||||
.theme:hover {box-shadow: 0 0 14px rgba(0, 0, 0, 0.4);}
|
||||
.theme-text {width: 100%;position: absolute; bottom: 6%; left: 50%; transform: translateX(-50%);}
|
||||
.theme-text .icon {padding-right: 10px;}
|
||||
.theme-text.active {left: 45%;}
|
||||
div.theme-default {background: #3785ff;}
|
||||
div.theme-blue {background: #2b80ff;}
|
||||
div.theme-green {background: #248f83;}
|
||||
div.theme-red {background: #f34a5a;}
|
||||
div.theme-pink {background: #f7889c;}
|
||||
div.theme-blackberry {background: #304269;}
|
||||
div.theme-classic {background: #114f8e;}
|
||||
div.theme-purple {background: #9958dc;}
|
||||
</style>
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
var $block = $('#block<?php echo $blockID;?>');
|
||||
var themePosition = "<?php echo 'themePosition-' . $blockID;?>";
|
||||
$block.find('.themeSwitch .theme').click(function()
|
||||
{
|
||||
var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop || $block.find('#guideBody').offset().top;
|
||||
localStorage.setItem(themePosition, scrollTop);
|
||||
|
||||
selectTheme($(this).attr('data-value'));
|
||||
});
|
||||
})
|
||||
</script>
|
||||
<div class='themeSwitch'>
|
||||
<?php $i = 0;?>
|
||||
<?php foreach($lang->block->themes as $themeKey => $themeName):?>
|
||||
<?php if($i % 4 == 0) echo "<div class='col-12 table-row theme-container'>"?>
|
||||
<div class="theme col-3 theme-<?php echo $themeKey;?>" data-value="<?php echo $themeKey;?>">
|
||||
<?php echo html::image($config->webRoot . "theme/default/images/guide/theme_{$themeKey}.png");?>
|
||||
<?php $hidden = $app->cookie->theme == $themeKey ? '' : 'hidden';?>
|
||||
<?php $active = $app->cookie->theme == $themeKey ? 'active' : '';?>
|
||||
<div class='theme-text text-center <?php echo $active;?>'><i class="icon icon-check-circle <?php echo $hidden;?>"></i><?php echo $themeName;?></div>
|
||||
</div>
|
||||
<?php if($i % 4 == 3) echo "</div>";?>
|
||||
<?php $i ++;?>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
@@ -1,53 +0,0 @@
|
||||
<style>
|
||||
.vision-switch {padding: 14px;}
|
||||
.vision-switch-container {display: flex;}
|
||||
.vision {width: 47%; border: none; background-color: rgba(230, 240 , 255, 0.4); cursor:pointer; border-radius: 2px; padding: 10px 10px 0 10px;}
|
||||
.vision + .vision {margin-left: 10px;}
|
||||
.vision:hover {box-shadow: 0 0 14px rgba(0, 0, 0, 0.12);}
|
||||
.vision.active {box-shadow: 0 0 0 2px #2E7FFF;}
|
||||
.vision-img {width: 100%; background-size: 100% !important;}
|
||||
.vision-title {font-size: 14px; color: #0B0F18; padding: 10px 8px 0;}
|
||||
.vision-text {font-size: 12px; color: #5E626D; padding: 8px;}
|
||||
</style>
|
||||
<?php js::set('vision', $this->config->vision);?>
|
||||
<div class='vision-switch'>
|
||||
<p><?php echo $lang->block->visionTitle;?></p>
|
||||
<div class="vision-switch-container">
|
||||
<?php foreach($lang->block->visions as $vision):?>
|
||||
<?php $active = $this->config->vision == $vision->key ? 'active' : '';?>
|
||||
<a href="<?php echo $this->createLink('my', 'ajaxSwitchVision', "vision=$vision->key");?>" data-type="ajax" class='vision <?php echo $active;?>' data-value="<?php echo $vision->key;?>">
|
||||
<div class='vision-img'>
|
||||
<?php if(common::checkNotCN() and $vision->key == 'rnd'):?>
|
||||
<?php echo html::image($config->webRoot . "theme/default/images/guide/vision_{$vision->key}_en.png");?>
|
||||
<?php elseif(!common::checkNotCN() and $vision->key == 'rnd'):?>
|
||||
<?php echo html::image($config->webRoot . "theme/default/images/guide/vision_{$vision->key}_cn.png");?>
|
||||
<?php else:?>
|
||||
<?php echo html::image($config->webRoot . "theme/default/images/guide/vision_{$vision->key}.png");?>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<div class='vision-title'><?php echo $vision->title;?></div>
|
||||
<div class='vision-text'><?php echo $vision->text;?></div>
|
||||
</a>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
var $block = $('#block<?php echo $blockID;?>');
|
||||
var visionPosition = "<?php echo 'visionPosition-' . $blockID;?>";
|
||||
$block.find('.vision-switch .vision').click(function(e)
|
||||
{
|
||||
var selectedVision = $(this).data('value');
|
||||
if (vision == selectedVision)
|
||||
{
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}
|
||||
|
||||
var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop || $block.find('#guideBody').offset().top;
|
||||
localStorage.setItem(visionPosition, scrollTop);
|
||||
});
|
||||
})
|
||||
</script>
|
||||
@@ -1,24 +0,0 @@
|
||||
<style>
|
||||
.block-waterfallestimate table{margin-bottom: 15px}
|
||||
.block-waterfallestimate table th{width: 135px !important}
|
||||
</style>
|
||||
<table class='table table-data'>
|
||||
<tr>
|
||||
<th><?php echo $lang->durationestimation->people;?></th>
|
||||
<td><?php echo $people ? $people : 0;?></td>
|
||||
<th><?php echo $lang->workestimation->duration;?></th>
|
||||
<td><?php echo zget($budget, 'duration', 0);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->durationestimation->members;?></th>
|
||||
<td><?php echo $members;?></td>
|
||||
<th><?php echo $lang->workestimation->consumed;?></th>
|
||||
<td><?php echo $consumed ? $consumed : 0;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->workestimation->totalLaborCost;?></th>
|
||||
<td><?php echo '¥' . zget($budget, 'totalLaborCost', 0);?></td>
|
||||
<th><?php echo $lang->block->remain;?></th>
|
||||
<td><?php echo $totalLeft ? $totalLeft : 0;?></td>
|
||||
</tr>
|
||||
</table>
|
||||
@@ -1,216 +0,0 @@
|
||||
<?php $waterfallGanttID = uniqid('wg'); ?>
|
||||
|
||||
<div class="panel-body">
|
||||
<div id='<?php echo $waterfallGanttID; ?>'>
|
||||
<?php if(count($products) >= 2): ?>
|
||||
<?php echo html::select($waterfallGanttID . 'ProductID', $products, $productID, "class='form-control chosen'");?>
|
||||
<span class='gantt-product-tips'><i>* </i><?php echo $lang->block->selectProduct;?></span>
|
||||
<?php endif;?>
|
||||
<?php if(empty($plans['data'])): ?>
|
||||
<div class='empty-tip'><?php echo $lang->programplan->noData;?></div>
|
||||
<?php else:?>
|
||||
<div class='gantt clearfix'>
|
||||
<div class='gantt-plans pull-left'></div>
|
||||
<div class='gantt-container scrollbar-hover'>
|
||||
<div class='gantt-canvas'>
|
||||
<div class='gantt-today'><div><?php echo $lang->programplan->today; ?></div></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<style>
|
||||
<?php if(common::checkNotCN()):?>
|
||||
.gantt-product-tips {position: absolute; top: -32px; left: 280px; opacity: 0.5;}
|
||||
<?php else:?>
|
||||
.gantt-product-tips {position: absolute; top: -32px; left: 240px; opacity: 0.5;}
|
||||
<?php endif;?>
|
||||
.gantt-product-tips i {vertical-align: middle;}
|
||||
.block-waterfallgantt > .panel-body {overflow: visible!important}
|
||||
#<?php echo $waterfallGanttID; ?> {position: relative}
|
||||
#<?php echo $waterfallGanttID; ?>ProductID_chosen {position: absolute; top: -39px; left: 120px; width: 150px!important}
|
||||
[lang="zh-cn"] #<?php echo $waterfallGanttID; ?>ProductID_chosen {left: 85px}
|
||||
.gantt-plans {padding: 20px 0 22px; max-height: 380px; overflow: hidden;}
|
||||
.gantt-plan {width: 70px; height: 50px; line-height: 50px}
|
||||
.gantt-plan div {overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
.gantt-container {position: absolute; left: 100px; top: 0; right: 0; bottom: -10px; overflow: auto; padding-top: 20px; max-height: 380px;}
|
||||
.gantt-canvas {border: 1px solid #dddee4; border-style: solid dotted; position: relative}
|
||||
.gantt-row {height: 50px; position: relative; z-index: 1}
|
||||
.gantt-row:hover {background-color: rgba(0,0,0,.05)}
|
||||
.gantt-bar {height: 15px; background: #dddee4; position: absolute; left: 0; top: 10px}
|
||||
.gantt-bar-progress {height: 15px; margin-bottom: 5px}
|
||||
.gantt-task-info {white-space: nowrap; width: 100%; overflow: visible}
|
||||
.gantt-col {position: absolute; z-index: 0; top: 0; border-right: 1px dotted #dddee4}
|
||||
.gantt-col-time {position: absolute; top: -18px; left: 0}
|
||||
.gantt-today {position: absolute; top: -16px; left: 0; bottom: 0; border-left: #00da88 dotted 1px;}
|
||||
.gantt-today > div {position: absolute; top: 0; left: 0; font-size: 12px; line-height: 14px; padding: 0 3px; background: #00da88; color: #fff; white-space: nowrap; z-index: 10;}
|
||||
</style>
|
||||
<script>
|
||||
(function() {
|
||||
function initWaterfallGanttBlock()
|
||||
{
|
||||
/* Init product select control */
|
||||
var $waterfallGanttProductID = $('#<?php echo $waterfallGanttID; ?>ProductID');
|
||||
$waterfallGanttProductID.on('change', function()
|
||||
{
|
||||
$.get(createLink('product', 'ajaxSetState', 'productID=' + $waterfallGanttProductID.val()), function()
|
||||
{
|
||||
refreshBlock($waterfallGanttProductID.closest('.panel'));
|
||||
});
|
||||
});
|
||||
|
||||
<?php if(!empty($plans['data'])): ?>
|
||||
var ganttData = <?php echo json_encode($plans['data']); ?>;
|
||||
if(!ganttData) return;
|
||||
|
||||
var plans = [];
|
||||
var tasks = [];
|
||||
var plansMap = {};
|
||||
var startDatetime = Number.MAX_SAFE_INTEGER;
|
||||
var endDatetime = 0;
|
||||
var minTimeGap = Number.MAX_SAFE_INTEGER;
|
||||
var $gantt = $('#<?php echo $waterfallGanttID; ?>');
|
||||
var ONE_DAY = 24 * 3600 * 1000;
|
||||
var TIME_GAP_STEP = 7;
|
||||
var MIN_COL_WIDTH = 60;
|
||||
|
||||
$.each(ganttData, function(index, item)
|
||||
{
|
||||
plansMap[item.id] = item;
|
||||
if(item.type == 'plan' && item.parent == '0')
|
||||
{
|
||||
item.startDatetime = createDatetime(item.start_date);
|
||||
item.endDatetime = createDatetime(item.deadline);
|
||||
startDatetime = Math.min(startDatetime, item.startDatetime);
|
||||
endDatetime = Math.max(endDatetime, item.endDatetime);
|
||||
minTimeGap = Math.min(minTimeGap, endDatetime - startDatetime);
|
||||
item.tasks = [];
|
||||
item.completeTasks = [];
|
||||
item.progress = Number.parseFloat(item.taskProgress.replace('%', ''), 10);
|
||||
plans.push(item);
|
||||
}
|
||||
else if(item.type === 'task')
|
||||
{
|
||||
item.progress = Number.parseFloat(item.taskProgress.replace('%', ''), 10);
|
||||
tasks.push(item);
|
||||
}
|
||||
});
|
||||
|
||||
$.each(tasks, function(index, task)
|
||||
{
|
||||
var plan = plansMap[task.parent];
|
||||
if(typeof(plan) == 'undefined') return;
|
||||
while(plan.parent > 0)
|
||||
{
|
||||
plan = plansMap[plan.parent];
|
||||
if(typeof(plan) != 'object') return;
|
||||
}
|
||||
if(task.progress === 100) plan.completeTasks.push(task);
|
||||
plan.tasks.push(task);
|
||||
});
|
||||
|
||||
var $plans = $gantt.find('.gantt-plans');
|
||||
var $ganttContainer = $gantt.find('.gantt-container');
|
||||
var $ganttCanvas = $gantt.find('.gantt-canvas');
|
||||
var themeColor = $.getThemeColor('primary');
|
||||
var canvasHeight = plans.length * 50 + 10;
|
||||
|
||||
var days = Math.ceil((endDatetime - startDatetime) / ONE_DAY);
|
||||
minTimeGap = Math.max(1, Math.ceil(minTimeGap / ONE_DAY));
|
||||
|
||||
/* Update gantt plans and bars */
|
||||
$.each(plans, function(index, plan)
|
||||
{
|
||||
var $plan = $('<div class="gantt-plan"></div>');
|
||||
$plan.append('<div class="strong" title="' + plan.name + '">' + plan.text + '</div>');
|
||||
$plans.append($plan);
|
||||
|
||||
var $bar = $('<div class="gantt-bar"></div>');
|
||||
$('<div class="gantt-bar-progress bg-primary"></div>').css(
|
||||
{
|
||||
width: plan.progress + '%',
|
||||
background: themeColor,
|
||||
}).appendTo($bar);
|
||||
$bar.append('<div class="gantt-task-info text-muted small"><?php echo $lang->programplan->task;?> ' + plan.completeTasks.length + '/' + plan.tasks.length + '</div>').attr('title', $.zui.formatDate(plan.startDatetime, 'yyyy-MM-dd') + '~' + $.zui.formatDate(plan.endDatetime, 'yyyy-MM-dd'));
|
||||
var $row = $('<div class="gantt-row" data-id="' + plan.id + '"></div>').append($bar);
|
||||
$ganttCanvas.append($row);
|
||||
});
|
||||
|
||||
/* Layout gantt container */
|
||||
$ganttContainer.css('left', $plans.width() + 15);
|
||||
$ganttCanvas.css('height', canvasHeight);
|
||||
|
||||
/* Layout gantt */
|
||||
layoutGantt();
|
||||
$(window).on('resize', layoutGantt);
|
||||
setTimeout(layoutGantt, 100);
|
||||
|
||||
/* Bind events */
|
||||
$ganttContainer.on('scroll', function()
|
||||
{
|
||||
$plans.scrollTop($ganttContainer.scrollTop());
|
||||
});
|
||||
|
||||
/**
|
||||
* Layout gantt
|
||||
*
|
||||
* @return {void}
|
||||
*/
|
||||
function layoutGantt()
|
||||
{
|
||||
var minWidth = $ganttContainer.width();
|
||||
var timeGap = minTimeGap < TIME_GAP_STEP ? minTimeGap : Math.floor(minTimeGap / TIME_GAP_STEP) * TIME_GAP_STEP;
|
||||
var colsCount = Math.ceil(days / timeGap);
|
||||
var canvasWidth = Math.max(minWidth, colsCount * MIN_COL_WIDTH);
|
||||
var colWidth = Math.floor(canvasWidth / colsCount);
|
||||
var pxPerMs = colWidth / (timeGap * ONE_DAY);
|
||||
$ganttCanvas.css('width', canvasWidth).find('.gantt-col').remove();
|
||||
for (var i = 0; i < colsCount; ++i)
|
||||
{
|
||||
var $col = $('<div class="gantt-col"></div>');
|
||||
$col.css(
|
||||
{
|
||||
left: i * colWidth,
|
||||
width: colWidth,
|
||||
height: canvasHeight
|
||||
});
|
||||
var colTime = startDatetime + i * timeGap * ONE_DAY;
|
||||
$col.append('<div class="gantt-col-time text-muted small">' + $.zui.formatDate(colTime, 'MM/dd') + '</div>');
|
||||
$ganttCanvas.append($col);
|
||||
}
|
||||
|
||||
$.each(plans, function(index, plan)
|
||||
{
|
||||
var $planRow = $gantt.find('.gantt-row[data-id="' + plan.id + '"]');
|
||||
$planRow.find('.gantt-bar').css(
|
||||
{
|
||||
left: Math.floor((plan.startDatetime - startDatetime) * pxPerMs),
|
||||
width: Math.floor((plan.endDatetime - plan.startDatetime) * pxPerMs)
|
||||
});
|
||||
});
|
||||
|
||||
$gantt.find('.gantt-today').css('left', (Date.now() - startDatetime) * pxPerMs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create date from string
|
||||
*
|
||||
* @param {String} dateStr like '2020-08-02'
|
||||
* @return {Number} Date timestramp
|
||||
*/
|
||||
function createDatetime(dateStr)
|
||||
{
|
||||
dateStr = dateStr.split('-');
|
||||
var year = Number.parseInt(dateStr[0].length > 3 ? dateStr[0] : dateStr[2], 10);
|
||||
var month = Number.parseInt(dateStr[1], 10);
|
||||
var day = Number.parseInt(dateStr[2].length > 3 ? dateStr[0] : dateStr[2], 10);
|
||||
return new Date(year, month - 1, day).getTime();
|
||||
}
|
||||
|
||||
<?php endif;?>
|
||||
}
|
||||
|
||||
initWaterfallGanttBlock();
|
||||
}());
|
||||
</script>
|
||||
</div>
|
||||
@@ -1,50 +0,0 @@
|
||||
<?php if(empty($issues)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<style>
|
||||
.block-issues .c-id {width: 55px;}
|
||||
.block-issues .c-status {width: 80px;}
|
||||
.block-issues.block-sm .c-status {text-align: center;}
|
||||
.c-assignedTo {width: 100px; padding:0px !important;text-align:center;}
|
||||
.c-severity, .c-pri {text-align:center;}
|
||||
</style>
|
||||
<div class='panel-body has-table scrollbar-hover'>
|
||||
<table class='table table-borderless table-hover table-fixed table-fixed-head tablesorter block-issues <?php if(!$longBlock) echo 'block-sm';?>'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-id'><?php echo $lang->idAB;?></th>
|
||||
<th class='c-status'><?php echo $lang->issue->type;?></th>
|
||||
<th class='c-name'> <?php echo $lang->issue->title;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-status'><?php echo $lang->issue->severity;?></th>
|
||||
<th class='c-number'><?php echo $lang->issue->pri;?></th>
|
||||
<th class='c-user'><?php echo $lang->issue->owner;?></th>
|
||||
<th class='c-assignedTo'><?php echo $lang->issue->assignedTo;?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-status'><?php echo $lang->issue->status;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($issues as $issue):?>
|
||||
<?php
|
||||
$viewLink = $this->createLink('issue', 'view', "issueID={$issue->id}");
|
||||
?>
|
||||
<tr>
|
||||
<td class='c-id-xs'><?php echo sprintf('%03d', $issue->id);?></td>
|
||||
<td class='c-type'><?php echo zget($lang->issue->typeList, $issue->type);?></td>
|
||||
<td class='c-name' title='<?php echo $issue->title?>'><?php echo html::a($viewLink, $issue->title);?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-severity'><?php echo zget($lang->issue->severityList, $issue->severity, $issue->severity)?></td>
|
||||
<td class='c-pri'><?php echo zget($lang->issue->priList, $issue->pri, $issue->pri)?></td>
|
||||
<td><?php echo zget($users, $issue->owner, $issue->owner)?></td>
|
||||
<td class='c-assignedTo'><?php echo zget($users, $issue->assignedTo, $issue->assignedTo)?></td>
|
||||
<?php endif;?>
|
||||
<td class='c-status'>
|
||||
<span class="status-issue status-<?php echo $issue->status?>"><?php echo zget($lang->issue->statusList, $issue->status);?></span>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -1,125 +0,0 @@
|
||||
<div class="panel-body">
|
||||
<?php if(!isset($charts['labels']) || empty($charts['labels'])): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<style>
|
||||
.block-waterfallprogress .milestone-chart {box-shadow: none}
|
||||
.block-waterfallprogress .milestone-chart.has-scrollbar {margin-bottom: -10px}
|
||||
</style>
|
||||
<div class='milestone-chart' id='milestoneChart'>
|
||||
<div class='chart-canvas scrollbar-hover'>
|
||||
<div class='chart-wrapper'>
|
||||
<canvas width='400' height='120' data-responsive='true'></canvas>
|
||||
</div>
|
||||
</div>
|
||||
<div class='chart-unit'><?php echo "({$lang->execution->workHour})";?></div>
|
||||
<div class='chart-legend'>
|
||||
<span class="barline line-pv">PV</span>
|
||||
<span class="barline line-ev">EV</span>
|
||||
<span class="barline line-ac">AC</span>
|
||||
</div>
|
||||
</div>
|
||||
<style>
|
||||
.milestone-chart {position: relative}
|
||||
.milestone-chart .chart-canvas {overflow: auto; max-width: 1002px}
|
||||
.milestone-chart .chart-wrapper {background: none; padding: 15px 0 0 0}
|
||||
.milestone-chart .chart-unit {position: absolute; left: 10px; top: 0;}
|
||||
.milestone-chart .chart-legend {position: absolute; right: 5px; top: 0;}
|
||||
.milestone-chart .barline {padding-left: 20px; position: relative; display: inline-block; line-height: 20px}
|
||||
.milestone-chart .barline + .barline {margin-left: 5px}
|
||||
.milestone-chart .barline:before {content: ' '; display: block; position: absolute; top: 8px; left: 0; width: 16px; height: 3px; background: #0c64eb}
|
||||
.milestone-chart .barline.line-ev:before {background: rgb(0, 218, 136)}
|
||||
.milestone-chart .barline.line-ac:before {background: rgb(255, 145, 0)}
|
||||
</style>
|
||||
<script>
|
||||
function initMilestoneChart()
|
||||
{
|
||||
var data =
|
||||
{
|
||||
labels: <?php echo isset($charts['labels']) ? json_encode($charts['labels']) : '[]'?>,
|
||||
datasets: [
|
||||
{
|
||||
label: 'PV',
|
||||
color: '#0c64eb',
|
||||
pointColor: '#0c64eb',
|
||||
pointStrokeColor: '#0c64eb',
|
||||
pointHighlightStroke: '#0c64eb',
|
||||
fillColor: 'rgba(0,106,241, .07)',
|
||||
pointHighlightFill: '#fff',
|
||||
data: <?php echo $charts['PV']?>
|
||||
},
|
||||
{
|
||||
label: 'EV',
|
||||
color: 'rgb(0, 218, 136)',
|
||||
pointColor: 'rgb(0, 218, 136)',
|
||||
pointStrokeColor: 'rgb(0, 218, 136)',
|
||||
pointHighlightStroke: 'rgb(0, 218, 136)',
|
||||
fillColor: 'rgb(0, 218, 136, .07)',
|
||||
pointHighlightFill: '#fff',
|
||||
data: <?php echo $charts['EV']?>
|
||||
},
|
||||
{
|
||||
label: 'AC',
|
||||
color: 'rgb(255, 145, 0)',
|
||||
pointColor: 'rgb(255, 145, 0)',
|
||||
pointStrokeColor: 'rgb(255, 145, 0)',
|
||||
pointHighlightStroke: 'rgb(255, 145, 0)',
|
||||
fillColor: 'rgb(255, 145, 0, .07)',
|
||||
pointHighlightFill: '#fff',
|
||||
data: <?php echo $charts['AC']?>
|
||||
}]
|
||||
};
|
||||
|
||||
var betterWidth = data.labels.length ? data.labels.length * Math.min(100, Math.max(20, (config.clientLang.startsWith('zh') ? 11 : 9) * data.labels[data.labels.length - 1].length)) : 20;
|
||||
var renderChart = function()
|
||||
{
|
||||
var $chart = $('#milestoneChart');
|
||||
var $wrapper = $chart.find('.chart-wrapper');
|
||||
var $canvas = $chart.find('canvas');
|
||||
var $chartCanvas = $chart.find('.chart-canvas');
|
||||
if (betterWidth > 400)
|
||||
{
|
||||
var updateWrapperSize = function()
|
||||
{
|
||||
$wrapper.hide();
|
||||
$chartCanvas.css('max-width', 'initial');
|
||||
var maxWidth = $chartCanvas.width();
|
||||
$chartCanvas.css('max-width', maxWidth);
|
||||
$chart.toggleClass('has-scrollbar', maxWidth < betterWidth);
|
||||
$wrapper.show();
|
||||
};
|
||||
updateWrapperSize();
|
||||
$(window).on('resize', updateWrapperSize);
|
||||
|
||||
$wrapper.css('min-width', betterWidth);
|
||||
$canvas.attr(
|
||||
{
|
||||
width: betterWidth,
|
||||
height: Math.min(200, Math.floor(betterWidth / 4))
|
||||
});
|
||||
}
|
||||
$canvas.lineChart(data,
|
||||
{
|
||||
animation: betterWidth < 400,
|
||||
pointDotStrokeWidth: 1,
|
||||
pointDotRadius: 2,
|
||||
datasetStrokeWidth: 2,
|
||||
datasetFill: false,
|
||||
datasetStroke: true,
|
||||
scaleShowBeyondLine: true,
|
||||
responsive: true,
|
||||
bezierCurve: false,
|
||||
scaleFontColor: '#838A9D',
|
||||
tooltipXPadding: 10,
|
||||
tooltipYPadding: 10,
|
||||
multiTooltipTitleTemplate: '<%= label %> <?php echo $lang->execution->workHour;?> /h',
|
||||
multiTooltipTemplate: '<%if (datasetLabel){%><%=datasetLabel%>: <%}%><%= value %>',
|
||||
});
|
||||
}
|
||||
|
||||
setTimeout(renderChart, betterWidth > 200 ? 100 : 10);
|
||||
}
|
||||
initMilestoneChart();
|
||||
</script>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -1,76 +0,0 @@
|
||||
<style>
|
||||
.block-waterfallreport .col-left {width: 25%; text-align: center;}
|
||||
.block-waterfallreport .col-right {width: 87%;}
|
||||
.block-waterfallreport .panel-body {padding-top: 0;}
|
||||
.block-waterfallreport .table-row {margin-bottom: 20px;}
|
||||
<?php if(common::checkNotCN()):?>
|
||||
.block-waterfallreport .stage {position: absolute; top: 14px; left: 140px;}
|
||||
<?php else:?>
|
||||
.block-waterfallreport .stage {position: absolute; top: 14px; left: 90px;}
|
||||
<?php endif;?>
|
||||
.block-waterfallreport .col-right .tiles {padding: 10px 0 0 16px;}
|
||||
.block-waterfallreport .col-right .tile {width: 20%;}
|
||||
.block-waterfallreport .col-right .tile .tile-title {font-weight: 700;}
|
||||
.block-waterfallreport .progress {position: absolute; left: 45px; top: 90px; right: 40px;}
|
||||
.block-waterfallreport .progress-num {font-size: 20px; font-weight: 700;}
|
||||
.block-waterfallreport .col-right .tile-amount {font-size: 20px;}
|
||||
|
||||
.block-waterfallreport #helpDropdown{display:inline-block; padding-left:5px; padding-right:10px;}
|
||||
.block-waterfallreport #helpDropdown .dropdown-menu{width:600px; text-align:left; height:300px; overflow:auto; background: #fff; padding-left:8px;font-weight: normal;}
|
||||
.block-waterfallreport #helpDropdown h2{font-size:14px; padding:0px; margin:0px; margin-top:10px;}
|
||||
.block-waterfallreport #helpDropdown p{padding:0px; margin:0px; margin-top:10px;}
|
||||
</style>
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
$('.block-waterfallreport').each(function()
|
||||
{
|
||||
$(this).find('.panel-heading .panel-title #helpDropdown').remove();
|
||||
$(this).find('.panel-heading .panel-title').append($('#helpDropdown.hidden'));
|
||||
$(this).find('.panel-heading .panel-title #helpDropdown').removeClass('hidden');
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
||||
<div id='helpDropdown' class="dropdown dropdown-hover hidden">
|
||||
<a data-toggle="dropdown"><i class="icon-help"></i></a>
|
||||
<div class="dropdown-menu">
|
||||
<?php echo $lang->weekly->blockHelpNotice;?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-body conatiner-fluid">
|
||||
<div class='table-row'>
|
||||
<div class="col col-left hide-in-sm">
|
||||
<h4><?php echo $lang->project->weekProgress;?></h4>
|
||||
<span class='progress-num'><?php echo $progress . '%';?></span>
|
||||
<div class="progress">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="<?php echo $progress;?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $progress;?>%">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class='col-right'>
|
||||
<div class='row tiles'>
|
||||
<div class="col tile">
|
||||
<div class="tile-title"><?php echo 'PV(' . $lang->programplan->end . ')';?></div>
|
||||
<div class="tile-amount"><?php echo $pv == 0 ? 0 : $pv;?></div>
|
||||
</div>
|
||||
<div class="col tile">
|
||||
<div class="tile-title"><?php echo 'EV(' . $lang->programplan->realEnd . ')';?></div>
|
||||
<div class="tile-amount"><?php echo $ev == 0 ? 0 : $ev;?></div>
|
||||
</div>
|
||||
<div class="col tile">
|
||||
<div class="tile-title"><?php echo 'AC(' . $lang->programplan->ac . ')';?></div>
|
||||
<div class="tile-amount"><?php echo $ac == 0 ? 0 : $ac;?></div>
|
||||
</div>
|
||||
<div class="col tile">
|
||||
<div class="tile-title"><?php echo 'SV(' . $lang->programplan->sv . ')';?></div>
|
||||
<div class="tile-amount"><?php echo $sv . '%';?></div>
|
||||
</div>
|
||||
<div class="col tile">
|
||||
<div class="tile-title"><?php echo 'CV(' . $lang->programplan->cv . ')';?></div>
|
||||
<div class="tile-amount"><?php echo $cv . '%';?></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,58 +0,0 @@
|
||||
<?php if(empty($risks)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<style>
|
||||
.block-risks .c-id {width: 40px;}
|
||||
.block-risks .c-pri {width: 85px; text-align: center;}
|
||||
.block-risks .c-strategy, .block-risks .c-status {width: 80px;}
|
||||
.block-risks .c-user, .block-risks .c-rate, .block-risks .c-category {width: 110px;}
|
||||
.c-rate, .c-category {text-align:center;}
|
||||
.c-assignedTo {width: 100px; padding:0px !important;text-align:center;}
|
||||
.pri-low {color: #000000;}
|
||||
.pri-middle {color: #FF9900;}
|
||||
.pri-high {color: #E53333;}
|
||||
</style>
|
||||
<div class='panel-body has-table scrollbar-hover'>
|
||||
<table class='table table-borderless table-hover table-fixed table-fixed-head tablesorter block-risks <?php if(!$longBlock) echo 'block-sm';?>'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-id'><?php echo $lang->idAB;?></th>
|
||||
<th class='c-name'><?php echo $lang->risk->name;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-strategy'> <?php echo $lang->risk->strategy;?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-status'><?php echo $lang->risk->status;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-rate'><?php echo $lang->risk->rate;?></th>
|
||||
<th class='c-pri'><?php echo $lang->risk->pri;?></th>
|
||||
<th class='c-assignedTo text-center'><?php echo $lang->risk->assignedTo;?></th>
|
||||
<th class='c-category'><?php echo $lang->risk->category;?></th>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($risks as $risk):?>
|
||||
<?php
|
||||
$viewLink = $this->createLink('risk', 'view', "riskID={$risk->id}");
|
||||
?>
|
||||
<tr>
|
||||
<td class='c-id-xs'><?php echo sprintf('%03d', $risk->id);?></td>
|
||||
<td class='c-name' title='<?php echo $risk->name?>'><?php echo html::a($viewLink, $risk->name);?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-strategy'><?php echo zget($lang->risk->strategyList, $risk->strategy, $risk->strategy)?></td>
|
||||
<?php endif;?>
|
||||
<td class='c-status' data-text="<?php echo $risk->status;?>">
|
||||
<span class="status-risk status-<?php echo $risk->status?>"><?php echo zget($lang->risk->statusList, $risk->status);?></span>
|
||||
</td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-rate'><?php echo $risk->rate?></td>
|
||||
<td class='c-pri'><?php echo "<span class='pri-{$risk->pri}'>" . zget($lang->risk->priList, $risk->pri) . "</span>";?></td>
|
||||
<td class='c-assignedTo'><?php echo zget($users, $risk->assignedTo, $risk->assignedTo)?></td>
|
||||
<td class='c-category'><?php echo zget($lang->risk->categoryList, $risk->category, $risk->category)?></td>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -1,52 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The batchedit of branch module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Qiyu Xie <xieqiyu@easycorp.ltd>
|
||||
* @package branch
|
||||
* @version $Id: batchedit.html.php 4903 2021-11-09 13:14:59Z hfz $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php js::set('canSetDefault', common::hasPriv('branch', 'setDefault'));?>
|
||||
<div id="mainContent" class="main-content fade">
|
||||
<div class="main-header">
|
||||
<h2><?php echo $lang->branch->common . '-' . $lang->branch->batchEdit;?></h2>
|
||||
</div>
|
||||
<form class="load-indicator main-form" method='post' target='hiddenwin' enctype='multipart/form-data' id='dataform'>
|
||||
<table class="table table-form">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-id'><?php echo $lang->branch->id;?></th>
|
||||
<th class='required c-name'><?php echo sprintf($lang->branch->name, $lang->product->branchName[$product->type]);?></th>
|
||||
<th class='c-desc'><?php echo sprintf($lang->branch->desc, $lang->product->branchName[$product->type]);?></th>
|
||||
<th class='c-status'><?php echo $lang->branch->status;?></th>
|
||||
<!-- The default branch is hidden for the moment,until this demand has been completed -->
|
||||
<th class='c-default text-center hidden'><?php echo $lang->branch->defaultBranch;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($branchList as $branch):?>
|
||||
<?php $disabled = $branch->id == BRANCH_MAIN ? 'disabled' : '';?>
|
||||
<tr>
|
||||
<td><?php echo ($branch->id == BRANCH_MAIN ? '' : $branch->id) . html::hidden("IDList[$branch->id]", $branch->id);?></td>
|
||||
<td><?php echo html::input("name[$branch->id]", $branch->name, "class='form-control chosen' $disabled");?></td>
|
||||
<td><?php echo html::input("desc[$branch->id]", $branch->desc, "class='form-control' $disabled");?></td>
|
||||
<td><?php echo html::select("status[$branch->id]", $lang->branch->statusList, $branch->status, "class='form-control' chosen $disabled onchange='canSetDefaultBranch(this)'");?></td>
|
||||
<!-- The default branch is hidden for the moment,until this demand has been completed -->
|
||||
<td class='text-center hidden'><input type='radio' name='default' value='<?php echo $branch->id;?>' <?php if($branch->default) echo 'checked';?> <?php if($branch->status == 'closed' or !common::hasPriv('branch', 'setDefault')) echo 'disabled';?>></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
<tr>
|
||||
<td colspan='6' class='form-actions text-center'>
|
||||
<?php echo html::submitButton() . html::backButton();?>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,34 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The create view file of branch module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Qiyu Xie <xieqiyu@easycorp.ltd>
|
||||
* @package branch
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='main-header'>
|
||||
<h2><?php echo sprintf($lang->branch->create, $lang->product->branchName[$product->type]);?></h2>
|
||||
</div>
|
||||
<form class='main-form' method='post' target='hiddenwin'>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th><?php echo sprintf($lang->branch->name, $lang->product->branchName[$product->type]);?></th>
|
||||
<td><?php echo html::input('name', '', "class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo sprintf($lang->branch->desc, $lang->product->branchName[$product->type]);?></th>
|
||||
<td><?php echo html::input('desc', '', "class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan='2' class='text-center form-actions'><?php echo html::submitButton();?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,38 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The edit view file of branch module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Qiyu Xie <xieqiyu@easycorp.ltd>
|
||||
* @package branch
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='main-header'>
|
||||
<h2><?php echo sprintf($lang->branch->edit, $lang->product->branchName[$product->type]);?></h2>
|
||||
</div>
|
||||
<form class='main-form' method='post' target='hiddenwin'>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th><?php echo sprintf($lang->branch->name, $lang->product->branchName[$product->type]);?></th>
|
||||
<td><?php echo html::input('name', $branch->name, "class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->branch->status;?></th>
|
||||
<td><?php echo html::select('status', $lang->branch->statusList, $branch->status, "class='form-control chosen'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo sprintf($lang->branch->desc, $lang->product->branchName[$product->type]);?></th>
|
||||
<td><?php echo html::input('desc', $branch->desc, "class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan='2' class='text-center form-actions'><?php echo html::submitButton();?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,188 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The manage view file of branch module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Qiyu Xie <xieqiyu@easycorp.ltd>
|
||||
* @package branch
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/sortable.html.php';?>
|
||||
<?php js::set('orderBy', $orderBy)?>
|
||||
<?php js::set('branchLang', $lang->branch);?>
|
||||
<?php js::set('productID', $productID);?>
|
||||
<?php js::set('branchPairs', $branchPairs);?>
|
||||
<?php $canCreate = common::hasPriv('branch', 'create');?>
|
||||
<?php $canOrder = common::hasPriv('branch', 'sort');?>
|
||||
<?php $canBatchEdit = common::hasPriv('branch', 'batchEdit');?>
|
||||
<?php $canMergeBranch = common::hasPriv('branch', 'mergeBranch');?>
|
||||
<?php $canBatchAction = ($canBatchEdit or $canMergeBranch);?>
|
||||
<div id="mainMenu" class="clearfix">
|
||||
<div class="btn-toolbar pull-left">
|
||||
<?php foreach(customModel::getFeatureMenu($this->moduleName, $this->methodName) as $menuItem):?>
|
||||
<?php if(isset($menuItem->hidden)) continue;?>
|
||||
<?php $label = "<span class='text'>{$menuItem->text}</span>";?>
|
||||
<?php $label .= $menuItem->name == $browseType ? " <span class='label label-light label-badge'>{$pager->recTotal}</span>" : '';?>
|
||||
<?php $active = $menuItem->name == $browseType ? 'btn-active-text' : '';?>
|
||||
<?php echo html::a($this->inlink('manage', "productID=$productID&browseType={$menuItem->name}&orderBy=$orderBy&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}"), $label, '', "class='btn btn-link $active' id='{$menuItem->name}'");?>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<div class="btn-toolbar pull-right">
|
||||
<?php if($canCreate) common::printLink('branch', 'create', "productID=$productID", "<i class='icon icon-plus'></i> " . $lang->branch->create, '', "class='btn btn-primary iframe'", true, true);?>
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainContent">
|
||||
<?php if(empty($branchList)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->branch->noData;?></span>
|
||||
<?php if($canCreate and $browseType != 'closed') echo html::a($this->createLink('branch', 'create', "productID=$productID", '', true), "<i class='icon icon-plus'></i> " . $lang->branch->create, '', "class='btn btn-info iframe'");?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<form class='main-table' data-ride='table' method='post' id='branchForm'>
|
||||
<table id="branchList" class="table has-sort-head">
|
||||
<thead>
|
||||
<tr>
|
||||
<?php $vars = "productID=$productID&browseType=$browseType&orderBy=%s&recTotal=$pager->recTotal&recPerPage=$pager->recPerPage&pageID=$pager->pageID"; ?>
|
||||
<?php if($canBatchAction):?>
|
||||
<th class='c-check'>
|
||||
<div class="checkbox-primary check-all" title="<?php echo $lang->selectAll?>"><label></label></div>
|
||||
</th>
|
||||
<?php endif;?>
|
||||
<?php if($canOrder):?>
|
||||
<th class='c-order sort-default'><?php echo $lang->branch->order;?></th>
|
||||
<?php endif;?>
|
||||
<th class='text-left'><?php common::printOrderLink('name', $orderBy, $vars, $lang->branch->name);?></th>
|
||||
<th class='c-status'><?php common::printOrderLink('status', $orderBy, $vars, $lang->branch->status);?></th>
|
||||
<th class='c-date'><?php common::printOrderLink('createdDate', $orderBy, $vars, $lang->branch->createdDate);?></th>
|
||||
<th class='c-date'><?php common::printOrderLink('closedDate', $orderBy, $vars, $lang->branch->closedDate);?></th>
|
||||
<th class='c-desc'><?php echo $lang->branch->desc;?></th>
|
||||
<th class='c-actions-2'><?php echo $lang->actions;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id='branchTableList'>
|
||||
<?php foreach($branchList as $branch):?>
|
||||
<?php $isMain = $branch->id == BRANCH_MAIN;?>
|
||||
<tr data-id='<?php echo $branch->id;?>' data-status='<?php echo $branch->status;?>'>
|
||||
<?php if($canBatchAction):?>
|
||||
<td class='cell-id'>
|
||||
<?php echo html::checkbox('branchIDList', array($branch->id => ''));?>
|
||||
</td>
|
||||
<?php endif;?>
|
||||
<?php if($canOrder):?>
|
||||
<td class='c-actions <?php echo $isMain ? '' : 'sort-handler';?>'>
|
||||
<?php echo $isMain ? '' : '<i class="icon icon-move"></i>';?>
|
||||
</td>
|
||||
<?php endif;?>
|
||||
<td class='c-name branchName' title='<?php echo $branch->name;?>'>
|
||||
<span class="text-ellipsis"><?php echo $branch->name;?> </span>
|
||||
<?php
|
||||
/* Fix bug#17342,由于默认分支的后续功能没做,暂时隐藏设置默认分支的功能 */
|
||||
//if($branch->default)
|
||||
//{
|
||||
// echo '<span class="label label-primary label-badge">' . $lang->branch->default . '</span>';
|
||||
//}
|
||||
//elseif($branch->status == 'active')
|
||||
//{
|
||||
// $setDefaultLink = helper::createLink('branch', 'setDefault', "productID=$productID&branchID=$branch->id", '', true);
|
||||
// $setDefaultHtml = html::a($setDefaultLink, "<span><i class='icon icon-hand-right'></i> {$lang->branch->setDefault}</span>", 'hiddenwin', "class='btn btn-icon-left btn-sm setDefault hidden'");
|
||||
|
||||
// echo common::hasPriv('branch', 'setDefault') ? $setDefaultHtml : '';
|
||||
//}
|
||||
?>
|
||||
</td>
|
||||
<td><?php echo zget($lang->branch->statusList, $branch->status);?></td>
|
||||
<td><?php echo helper::isZeroDate($branch->createdDate) ? '' : $branch->createdDate;?></td>
|
||||
<td><?php echo helper::isZeroDate($branch->closedDate) ? '' : $branch->closedDate;?></td>
|
||||
<td class='c-name' title='<?php echo $branch->desc;?>'><?php echo $branch->desc;?></td>
|
||||
<td class='c-actions'>
|
||||
<?php
|
||||
if(!$isMain)
|
||||
{
|
||||
common::printIcon('branch', 'edit', "branchID=$branch->id&productID=$productID", $branch, 'list', '', '', 'iframe', true, '', $lang->branch->edit);
|
||||
if($branch->status == 'active')
|
||||
{
|
||||
common::printIcon('branch', 'close', "branchID=$branch->id", $branch, 'list', 'off', 'hiddenwin');
|
||||
}
|
||||
else
|
||||
{
|
||||
common::printIcon('branch', 'activate', "branchID=$branch->id", $branch, 'list', 'active', 'hiddenwin');
|
||||
}
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="table-footer">
|
||||
<?php if($canBatchAction):?>
|
||||
<div class="checkbox-primary check-all">
|
||||
<label><?php echo $lang->selectAll?></label>
|
||||
</div>
|
||||
<?php if($canBatchEdit):?>
|
||||
<div class="table-actions btn-toolbar">
|
||||
<?php
|
||||
$batchEditLink = $this->createLink('branch', 'batchEdit', "productID=$productID");
|
||||
echo html::submitButton($lang->edit, "data-form-action='$batchEditLink'", 'btn');
|
||||
if(($browseType != 'closed' and common::hasPriv('branch', 'mergeBranch'))) echo html::a('#mergeBranch', $lang->branch->merge, '', "data-toggle='modal' class='btn' id='merge'");
|
||||
?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php endif;?>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
|
||||
<div class="modal fade" id="mergeBranch">
|
||||
<div class="modal-dialog mw-700px">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><i class="icon icon-close"></i></button>
|
||||
<span class="modal-title"><?php echo $lang->branch->mergeBranch;?></span>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form method='post' enctype='multipart/form-data' class="form-ajax">
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<td colspan="8">
|
||||
<div class="alert no-margin tips">
|
||||
<i class="icon-exclamation-sign icon"></i>
|
||||
<div id="marginTips">
|
||||
<p><?php echo $lang->branch->mergedMain;?></p>
|
||||
<p><?php echo $lang->branch->mergeTips;?></p>
|
||||
<p><?php echo $lang->branch->targetBranchTips;?></p>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->branch->mergeTo;?></th>
|
||||
<td colspan="7">
|
||||
<div class="input-group">
|
||||
<?php echo html::select('targetBranch', $branchPairs, '', "class='form-control chosen'");?>
|
||||
<span class='input-group-addon'>
|
||||
<?php echo html::checkbox('createBranch', $lang->branch->create, '', "id='createBranch'")?>
|
||||
</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan='8' class='text-center form-actions'>
|
||||
<?php echo html::commonButton($lang->save, "id='saveButton'", 'btn btn-primary btn-wide');?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,63 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The activate file of bug module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package bug
|
||||
* @version $Id: activate.html.php 4129 2013-01-18 01:58:14Z wwccss $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2>
|
||||
<span class='label label-id'><?php echo $bug->id;?></span>
|
||||
<?php echo isonlybody() ? ('<span title="' . $bug->title . '">' . $bug->title . '</span>') : html::a($this->createLink('bug', 'view', 'bug=' . $bug->id), $bug->title);?>
|
||||
|
||||
<?php if(!isonlybody()):?>
|
||||
<small><?php echo $lang->arrow . $lang->bug->activate;?></small>
|
||||
<?php endif;?>
|
||||
</h2>
|
||||
</div>
|
||||
<form method='post' enctype='multipart/form-data' target='hiddenwin'>
|
||||
<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->resolvedBy, "class='form-control chosen'");?></td><td></td>
|
||||
</tr>
|
||||
<tr class='hide'>
|
||||
<th><?php echo $lang->bug->status;?></th>
|
||||
<td><?php echo html::hidden('status', 'active');?></td>
|
||||
</tr>
|
||||
<?php $this->printExtendFields($bug, 'table');?>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->openedBuild;?></th>
|
||||
<td colspan='2'><?php echo html::select('openedBuild[]', $builds, $bug->openedBuild, 'size=4 multiple=multiple class="form-control picker-select"');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->comment;?></th>
|
||||
<td colspan='2'><?php echo html::textarea('comment', '', "rows='6' class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->files;?></th>
|
||||
<td colspan='2' class='text-left'><?php echo $this->fetch('file', 'buildform');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='text-center' colspan='3'><?php echo html::submitButton() . html::linkButton($lang->goback, $this->session->bugList, 'self', '', 'btn btn-wide');?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<hr class='small' />
|
||||
<div class='main'><?php include '../../common/view/action.html.php';?></div>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
js::set('productID', $bug->product);
|
||||
js::set('released', $lang->build->released);
|
||||
?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,59 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The complete file of task module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Jia Fu <fujia@cnezsoft.com>
|
||||
* @package task
|
||||
* @version $Id: complete.html.php 935 2010-07-06 07:49:24Z jajacn@126.com $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php
|
||||
include '../../common/view/header.html.php';
|
||||
include '../../common/view/kindeditor.html.php';
|
||||
js::set('holders', $lang->bug->placeholder);
|
||||
js::set('page', 'assignedto');
|
||||
?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2>
|
||||
<span class='label label-id'><?php echo $bug->id;?></span>
|
||||
<?php echo isonlybody() ? ('<span title="' . $bug->title . '">' . $bug->title . '</span>') : html::a($this->createLink('bug', 'view', 'bug=' . $bug->id), $bug->title);?>
|
||||
|
||||
<?php if(!isonlybody()):?>
|
||||
<small><?php echo $lang->arrow . $lang->bug->assignBug;?></small>
|
||||
<?php endif;?>
|
||||
</h2>
|
||||
</div>
|
||||
<form method='post' target='hiddenwin'>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th class='w-80px'><?php echo $lang->bug->assignBug;?></th>
|
||||
<td class='w-p25-f'><?php echo html::select('assignedTo', $users, $bug->assignedTo, "class='form-control chosen'");?></td><td></td>
|
||||
</tr>
|
||||
<tr class='hide'>
|
||||
<th><?php echo $lang->bug->status;?></th>
|
||||
<td><?php echo html::hidden('status', $bug->status);?></td>
|
||||
</tr>
|
||||
<?php $this->printExtendFields($bug, 'table');?>
|
||||
<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>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->comment;?></th>
|
||||
<td colspan='2'><?php echo html::textarea('comment', '', "rows='6' class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan='3' class='text-center form-actions'><?php echo html::submitButton() . html::linkButton($lang->goback, $this->server->http_referer, 'self', '', 'btn btn-wide');?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<hr class='small' />
|
||||
<div class='main'><?php include '../../common/view/action.html.php';?></div>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,68 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The batch activate view of bug module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Congzhi Chen <congzhi@cnezsoft.com>
|
||||
* @package bug
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
|
||||
<?php
|
||||
if($this->config->edition != 'open')
|
||||
{
|
||||
$action = $this->loadModel('workflowaction')->getByModuleAndAction('bug', 'batchactivate');
|
||||
if($action->js) echo "<script>{$action->js}</script>";
|
||||
if($action->css) echo "<style>{$action->css}</style>";
|
||||
}
|
||||
?>
|
||||
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='main-header'>
|
||||
<h2><?php echo $lang->bug->common . $lang->hyphen . $lang->bug->batchActivate;?></h2>
|
||||
</div>
|
||||
<form class='main-form' method='post' target='hiddenwin'>
|
||||
<table class='table table-form table-fixed'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-id'><?php echo $lang->idAB;?></th>
|
||||
<th class='c-title'><?php echo $lang->bug->title;?></th>
|
||||
<th class='c-assigned'><?php echo $lang->bug->assignedTo;?></th>
|
||||
<th class='c-build'><?php echo $lang->bug->openedBuild;?></th>
|
||||
<th><?php echo $lang->bug->legendComment;?></th>
|
||||
<?php
|
||||
$extendFields = $this->bug->getFlowExtendFields();
|
||||
foreach($extendFields as $extendField)
|
||||
{
|
||||
$required = strpos(",$extendField->rules,", ',1,') !== false ? 'required' : '';
|
||||
echo "<th class='c-extend $required'>{$extendField->name}</th>";
|
||||
}
|
||||
?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class='text-left'>
|
||||
<?php foreach($bugs as $bug):?>
|
||||
<tr>
|
||||
<td class='text-center'><?php echo $bug->id . html::hidden("bugIDList[$bug->id]", $bug->id);?></td>
|
||||
<td title='<?php echo $bug->title;?>'><?php echo $bug->title . html::hidden("statusList[$bug->id]", $bug->status);?></td>
|
||||
<td style='overflow:visible'><?php echo html::select("assignedToList[$bug->id]", $users, $bug->resolvedBy, "class='form-control chosen'");?></td>
|
||||
<td style='overflow:visible'><?php echo html::select("openedBuildList[$bug->id]", $builds, $bug->openedBuild, 'size=4 multiple=multiple class="form-control chosen"');?></td>
|
||||
<td><?php echo html::input("commentList[$bug->id]", '', "class='form-control'");?></td>
|
||||
<?php
|
||||
$this->loadModel('flow');
|
||||
foreach($extendFields as $extendField) echo "<td" . (($extendField->control == 'select' or $extendField->control == 'multi-select') ? " style='overflow:visible'" : '') . ">" . $this->flow->getFieldControl($extendField, $bug, $extendField->field . "[$bug->id]") . "</td>";
|
||||
?>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr><td colspan="<?php echo count($extendFields) + 5;?>" class='text-center'><?php echo html::submitButton();?></td></tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,324 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The batch create view of story module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yangyang Shi <shiyangyang@cnezsoft.com>
|
||||
* @package story
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php
|
||||
include '../../common/view/header.html.php';
|
||||
js::set('requiredFields', $config->bug->create->requiredFields);
|
||||
js::set('productID', $productID);
|
||||
js::set('released', $lang->build->released);
|
||||
?>
|
||||
<?php
|
||||
$visibleFields = array();
|
||||
$requiredFields = array();
|
||||
foreach(explode(',', $showFields) as $field)
|
||||
{
|
||||
if($field) $visibleFields[$field] = '';
|
||||
}
|
||||
|
||||
foreach(explode(',', $config->bug->create->requiredFields) as $field)
|
||||
{
|
||||
if($field)
|
||||
{
|
||||
$requiredFields[$field] = '';
|
||||
if(strpos(",{$config->bug->list->customBatchCreateFields},", ",{$field},") !== false) $visibleFields[$field] = '';
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php js::set('showFields', $showFields);?>
|
||||
<div id='mainContent' class='main-content fade'>
|
||||
<div class='main-header'>
|
||||
<h2>
|
||||
<?php echo $lang->bug->batchCreate;?>
|
||||
</h2>
|
||||
<div class="pull-right btn-toolbar">
|
||||
<?php if(common::hasPriv('file', 'uploadImages')) echo html::a($this->createLink('file', 'uploadImages', 'module=bug¶ms=' . helper::safe64Encode("productID=$productID&branch=$branch&executionID=$executionID&moduleID=$moduleID")), $lang->uploadImages, '', "data-toggle='modal' data-type='iframe' class='btn btn-primary' data-width='70%'")?>
|
||||
<button type='button' data-toggle='modal' data-target="#importLinesModal" class="btn btn-primary"><?php echo $lang->pasteText;?></button>
|
||||
<?php $customLink = $this->createLink('custom', 'ajaxSaveCustomFields', 'module=bug§ion=custom&key=batchCreateFields')?>
|
||||
<?php include '../../common/view/customfield.html.php';?>
|
||||
<?php if(isonlybody()):?>
|
||||
<div class="divider"></div>
|
||||
<button id="closeModal" type="button" class="btn btn-link" data-dismiss="modal"><i class="icon icon-close"></i></button>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<form class='main-form' method='post' target='hiddenwin' id='batchCreateForm'>
|
||||
<div class="table-responsive">
|
||||
<table class='table table-form'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-id'><?php echo $lang->idAB;?></th>
|
||||
<th class='c-branch<?php echo zget($visibleFields, $product->type, ' hidden')?> branchBox'> <?php echo $lang->product->branch;?></th>
|
||||
<th class='c-module<?php echo zget($requiredFields, 'module', '', ' required');?>'> <?php echo $lang->bug->module;?></th>
|
||||
<th class='c-project<?php echo zget($visibleFields, 'project', ' hidden') . zget($requiredFields, 'project', '', ' required');?> projectBox'><?php echo $lang->bug->project;?></th>
|
||||
<th class='c-execution<?php echo zget($visibleFields, 'execution', ' hidden') . zget($requiredFields, 'execution', '', ' required');?> executionBox'><?php echo (isset($project->model) and $project->model == 'kanban') ? $lang->bug->kanban : $lang->bug->execution;?></th>
|
||||
<th class='c-build required'><?php echo $lang->bug->openedBuild;?></th>
|
||||
<th class='c-title required'><?php echo $lang->bug->title;?></th>
|
||||
<?php if(isset($executionType) and $executionType == 'kanban'):?>
|
||||
<th class='c-execution'><?php echo $lang->kanbancard->region;?></th>
|
||||
<th class='c-execution'><?php echo $lang->kanbancard->lane;?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-date<?php echo zget($visibleFields, 'deadline', ' hidden') . zget($requiredFields, 'deadline', '', ' required');?> deadlineBox'><?php echo $lang->bug->deadline;?></th>
|
||||
<th class='c-steps<?php echo zget($visibleFields, 'steps', ' hidden') . zget($requiredFields, 'steps', '', ' required');?> stepsBox'><?php echo $lang->bug->steps;?></th>
|
||||
<th class='c-type<?php echo zget($visibleFields, 'type', ' hidden') . zget($requiredFields, 'type', '', ' required');?> typeBox'><?php echo $lang->typeAB;?></th>
|
||||
<th class='c-pri<?php echo zget($visibleFields, 'pri', ' hidden') . zget($requiredFields, 'pri', '', ' required');?> priBox'><?php echo $lang->bug->pri;?></th>
|
||||
<th class='c-severity<?php echo zget($visibleFields, 'severity', ' hidden') . zget($requiredFields, 'severity', '', ' required');?> severityBox'><?php echo $lang->bug->severity;?></th>
|
||||
<th class='c-os<?php echo zget($visibleFields, 'os', ' hidden') . zget($requiredFields, 'os', '', ' required');?> osBox'><?php echo $lang->bug->os;?></th>
|
||||
<th class='c-browser<?php echo zget($visibleFields, 'browser', ' hidden') . zget($requiredFields, 'browser', '', ' required');?> browserBox'><?php echo $lang->bug->browser;?></th>
|
||||
<th class='c-keywords<?php echo zget($visibleFields, 'keywords', ' hidden') . zget($requiredFields, 'keywords', '', ' required');?> keywordsBox'><?php echo $lang->bug->keywords;?></th>
|
||||
<?php
|
||||
$extendFields = $this->bug->getFlowExtendFields();
|
||||
foreach($extendFields as $extendField)
|
||||
{
|
||||
$required = strpos(",$extendField->rules,", ',1,') !== false ? 'required' : '';
|
||||
echo "<th class='c-extend $required'>{$extendField->name}</th>";
|
||||
}
|
||||
?>
|
||||
<th class='c-actions'><?php echo $lang->actions;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
$moduleOptionMenu += array('ditto' => $lang->bug->ditto);
|
||||
$projects += array('ditto' => $lang->bug->ditto);
|
||||
$executions += array('ditto' => $lang->bug->ditto);
|
||||
$lang->bug->typeList += array('ditto' => $lang->bug->ditto);
|
||||
$lang->bug->priList += array('ditto' => $lang->bug->ditto);
|
||||
?>
|
||||
<?php $i = 1; ?>
|
||||
<?php if(!empty($titles)):?>
|
||||
<?php foreach($titles as $bugTitle => $fileName):?>
|
||||
<?php
|
||||
$moduleID = $i == 1 ? $moduleID : 'ditto';
|
||||
$projectID = $i == 1 ? $projectID : 'ditto';
|
||||
$executionID = $i == 1 ? $executionID : 'ditto';
|
||||
$type = $i == 1 ? '' : 'ditto';
|
||||
$pri = $i == 1 ? 0 : 'ditto';
|
||||
?>
|
||||
<tr>
|
||||
<td class='text-left'><?php echo $i;?></td>
|
||||
<td class='<?php echo zget($visibleFields, $product->type, ' hidden')?> branchBox' style='overflow:visible'><?php echo html::select("branches[$i]", $branches, $branch, "class='form-control chosen' onchange='setBranchRelated(this.value, $productID, $i)'");?></td>
|
||||
<td><?php echo html::select("modules[$i]", $moduleOptionMenu, $moduleID, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'project', ' hidden')?> projectBox' style='overflow:visible'><?php echo html::select("projects[$i]", $projects, $projectID, "class='form-control chosen' onchange='loadProductExecutionsByProject($productID, this.value, $i)'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'execution', ' hidden')?> executionBox' style='overflow:visible'><?php echo html::select("executions[$i]", $executions, $executionID, "class='form-control chosen' onchange='loadExecutionBuilds($productID, this.value, $i)'");?></td>
|
||||
<td id='buildBox<?php echo $i;?>'><?php echo html::select("openedBuilds[$i][]", $builds, 'trunk', "class='form-control picker-select' multiple");?></td>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<div class="input-control has-icon-right">
|
||||
<?php echo html::input("title[$i]", $bugTitle, "class='form-control title-import'") . html::hidden("uploadImage[$i]", $fileName);?>
|
||||
<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->story->colorTag;?><i class="icon icon-close"></i></li>
|
||||
</ul>
|
||||
<?php echo html::hidden("color[$i]", '', "data-provide='colorpicker' data-icon='color' data-wrapper='input-control-icon-right' data-update-color='#title\\[{$i}\\]'");?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<?php if(isset($executionType) and $executionType == 'kanban'):?>
|
||||
<td><?php echo html::select("regions[$i]", $regionPairs, $regionID, "class='form-control chosen'");?></td>
|
||||
<td><?php echo html::select("lanes[$i]", $lanePairs, $laneID, "class='form-control chosen'");?></td>
|
||||
<?php endif;?>
|
||||
<td class='<?php echo zget($visibleFields, 'deadline', 'hidden')?> deadlineBox'><?php echo html::input("deadlines[$i]", '', "class='form-control form-date'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'steps', 'hidden')?> stepsBox'><?php echo html::textarea("stepses[$i]", '', "rows='1' class='form-control autosize'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'type', 'hidden')?> typeBox' style='overflow:visible'> <?php echo html::select("types[$i]", $lang->bug->typeList, $type, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'pri', 'hidden')?> priBox' style='overflow:visible'> <?php echo html::select("pris[$i]", $lang->bug->priList, $pri, "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'severity', 'hidden')?> severityBox' style='overflow:visible'><?php echo html::select("severities[$i]", $lang->bug->severityList, '3', "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'os', 'hidden')?> osBox' style='overflow:visible'> <?php echo html::select("oses[$i][]", $lang->bug->osList, '', "class='form-control chosen' multiple");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'browser', 'hidden')?> browserBox' style='overflow:visible'> <?php echo html::select("browsers[$i][]", $lang->bug->browserList, '', "class='form-control chosen' multiple");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'keywords', 'hidden')?> keywordsBox'><?php echo html::input("keywords[$i]", '', "class='form-control'");?></td>
|
||||
<?php
|
||||
$this->loadModel('flow');
|
||||
foreach($extendFields as $extendField) echo "<td" . (($extendField->control == 'select' or $extendField->control == 'multi-select') ? " style='overflow:visible'" : '') . ">" . $this->flow->getFieldControl($extendField, '', $extendField->field . "[$i]") . "</td>";
|
||||
?>
|
||||
<td class='c-actions text-left'>
|
||||
<a href='javascript:;' onclick='addRow(this)' class='btn btn-link'><i class='icon-plus'></i></a>
|
||||
<?php if($i != 1):?>
|
||||
<a href='javascript:;' onclick='deleteRow(this)' class='btn btn-link'><i class='icon icon-close'></i></a>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php $i++;?>
|
||||
<?php endforeach;?>
|
||||
<?php endif;?>
|
||||
<?php $nextStart = $i;?>
|
||||
<?php for($i = $nextStart; $i <= $config->bug->batchCreate; $i++):?>
|
||||
<?php
|
||||
$moduleID = $i - $nextStart == 0 ? $moduleID : 'ditto';
|
||||
$projectID = $i - $nextStart == 0 ? $projectID : 'ditto';
|
||||
$executionID = $i - $nextStart == 0 ? $executionID : 'ditto';
|
||||
$type = $i - $nextStart == 0 ? '' : 'ditto';
|
||||
$pri = $i - $nextStart == 0 ? 0 : 'ditto';
|
||||
?>
|
||||
<tr>
|
||||
<td><?php echo $i;?></td>
|
||||
<td class='<?php echo zget($visibleFields, $product->type, ' hidden')?> branchBox' style='overflow:visible'><?php echo html::select("branches[$i]", $branches, $branch, "class='form-control chosen' onchange='setBranchRelated(this.value, $productID, $i)'");?></td>
|
||||
<td><?php echo html::select("modules[$i]", $moduleOptionMenu, $moduleID, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'project', ' hidden')?> projectBox' style='overflow:visible'><?php echo html::select("projects[$i]", $projects, $projectID, "class='form-control chosen' onchange = 'loadProductExecutionsByProject($productID, this.value, $i)'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'execution', ' hidden')?> executionBox' style='overflow:visible'><?php echo html::select("executions[$i]", $executions, $executionID, "class='form-control chosen' onchange='loadExecutionBuilds($productID, this.value, $i)'");?></td>
|
||||
<td id='buildBox<?php echo $i;?>'><?php echo html::select("openedBuilds[$i][]", $builds, '', "class='form-control picker-select' multiple");?></td>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<div class="input-control has-icon-right">
|
||||
<?php echo html::input("title[$i]", '', "class='form-control title-import'");?>
|
||||
<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->bug->colorTag;?><i class="icon icon-close"></i></li>
|
||||
</ul>
|
||||
<?php echo html::hidden("color[$i]", '', "data-provide='colorpicker' data-icon='color' data-wrapper='input-control-icon-right' data-update-color='#title\\[$i\\]'");?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<?php if(isset($executionType) and $executionType == 'kanban'):?>
|
||||
<td><?php echo html::select("regions[$i]", $regionPairs, $regionID, "class='form-control chosen' onchange='setLane(this.value, $i)'");?></td>
|
||||
<td><?php echo html::select("lanes[$i]", $lanePairs, $laneID, "class='form-control chosen'");?></td>
|
||||
<?php endif;?>
|
||||
<td class='<?php echo zget($visibleFields, 'deadline', 'hidden')?> deadlineBox'><?php echo html::input("deadlines[$i]", '', "class='form-control form-date'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'steps', 'hidden')?> stepsBox'><?php echo html::textarea("stepses[$i]", '', "rows='1' class='form-control autosize'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'type', 'hidden')?> typeBox' style='overflow:visible'> <?php echo html::select("types[$i]", $lang->bug->typeList, $type, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'pri', 'hidden')?> priBox' style='overflow:visible'> <?php echo html::select("pris[$i]", $lang->bug->priList, $pri, "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'severity', 'hidden')?> severityBox' style='overflow:visible'><?php echo html::select("severities[$i]", $lang->bug->severityList, '3', "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'os', 'hidden')?> osBox' style='overflow:visible'> <?php echo html::select("oses[$i][]", $lang->bug->osList, '', "class='form-control chosen' multiple");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'browser', 'hidden')?> browserBox' style='overflow:visible'> <?php echo html::select("browsers[$i][]", $lang->bug->browserList, '', "class='form-control chosen' multiple");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'keywords', 'hidden')?> keywordsBox'><?php echo html::input("keywords[$i]", '', "class='form-control'");?></td>
|
||||
<?php
|
||||
$this->loadModel('flow');
|
||||
foreach($extendFields as $extendField) echo "<td" . (($extendField->control == 'select' or $extendField->control == 'multi-select') ? " style='overflow:visible'" : '') . ">" . $this->flow->getFieldControl($extendField, '', $extendField->field . "[$i]") . "</td>";
|
||||
?>
|
||||
<td class='c-actions text-left'>
|
||||
<a href='javascript:;' onclick='addRow(this)' class='btn btn-link'><i class='icon-plus'></i></a>
|
||||
<?php if($i != 1):?>
|
||||
<a href='javascript:;' onclick='deleteRow(this)' class='btn btn-link'><i class='icon icon-close'></i></a>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endfor;?>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan='<?php echo count($visibleFields) + 4?>' class='text-center form-actions'>
|
||||
<?php echo html::submitButton();?>
|
||||
<?php echo html::backButton();?>
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<?php js::set('rowIndex', -- $i);?>
|
||||
<table class='template' id='trTemp'>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>%s</td>
|
||||
<td class='<?php echo zget($visibleFields, $product->type, ' hidden')?> productBox' style='overflow:visible'><?php echo html::select("branches[%s]", $branches, $branch, "class='form-control chosen' onchange='setBranchRelated(this.value, $productID, \"%s\")'");?></td>
|
||||
<td><?php echo html::select("modules[%s]", $moduleOptionMenu, $moduleID, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'project', ' hidden')?> projectBox' style='overflow:visible'><?php echo html::select("projects[%s]", $projects, $projectID, "class='form-control chosen' onchange = 'loadProductExecutionsByProject($productID, this.value, \"%s\")'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'execution', ' hidden')?> executionBox' style='overflow:visible'><?php echo html::select("executions[%s]", $executions, $executionID, "class='form-control chosen' onchange='loadExecutionBuilds($productID, this.value, \"%s\")'");?></td>
|
||||
<td id='buildBox%s'><?php echo html::select("openedBuilds[%s][]", $builds, '', "class='form-control picker-select' multiple");?></td>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<div class="input-control has-icon-right">
|
||||
<?php echo html::input("title[%s]", '', "class='form-control title-import'");?>
|
||||
<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->story->colorTag;?><i class="icon icon-close"></i></li>
|
||||
</ul>
|
||||
<?php echo html::hidden("color[%s]", '', "data-provide='colorpicker-later' data-icon='color' data-wrapper='input-control-icon-right' data-update-color='#title\\[%s\\]'");?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td class='<?php echo zget($visibleFields, 'deadline', 'hidden')?> deadlineBox'><?php echo html::input("deadlines[%s]", '', "class='form-control form-date'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'steps', 'hidden')?> stepsBox'><?php echo html::textarea("stepses[%s]", '', "rows='1' class='form-control autosize'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'type', 'hidden')?> typeBox' style='overflow:visible'> <?php echo html::select("types[%s]", $lang->bug->typeList, $type, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'pri', 'hidden')?> priBox' style='overflow:visible'> <?php echo html::select("pris[%s]", $lang->bug->priList, $pri, "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'severity', 'hidden')?> severityBox' style='overflow:visible'><?php echo html::select("severities[%s]", $lang->bug->severityList, '3', "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'os', 'hidden')?> osBox' style='overflow:visible'> <?php echo html::select("oses[%s][]", $lang->bug->osList, '', "class='form-control chosen' multiple");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'browser', 'hidden')?> browserBox' style='overflow:visible'> <?php echo html::select("browsers[%s][]", $lang->bug->browserList, '', "class='form-control chosen' multiple");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'keywords', 'hidden')?> keywordsBox'><?php echo html::input("keywords[%s]", '', "class='form-control'");?></td>
|
||||
<?php
|
||||
$this->loadModel('flow');
|
||||
foreach($extendFields as $extendField) echo "<td" . (($extendField->control == 'select' or $extendField->control == 'multi-select') ? " style='overflow:visible'" : '') . ">" . $this->flow->getFieldControl($extendField, '', $extendField->field . "[%s]") . "</td>";
|
||||
?>
|
||||
<td class='c-actions text-left'>
|
||||
<a href='javascript:;' onclick='addRow(this)' class='btn btn-link'><i class='icon-plus'></i></a>
|
||||
<a href='javascript:;' onclick='deleteRow(this)' class='btn btn-link'><i class='icon icon-close'></i></a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div>
|
||||
<?php $i = '%i%';?>
|
||||
<table class='hidden'>
|
||||
<tr id='addRow' class='hidden'>
|
||||
<td><?php echo $i;?></td>
|
||||
<td class='<?php echo zget($visibleFields, $product->type, ' hidden')?> branchBox' style='overflow:visible'><?php echo html::select("branches[$i]", $branches, $branch, "class='form-control chosen' onchange='setBranchRelated(this.value, $productID, $i)'");?></td>
|
||||
<td><?php echo html::select("modules[$i]", $moduleOptionMenu, $moduleID, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'project', ' hidden')?> projectBox' style='overflow:visible'><?php echo html::select("projects[$i]", $projects, $projectID, "class='form-control chosen' onchange = 'loadProductExecutionsByProject($productID, this.value, $i)'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'execution', ' hidden')?> executionBox' style='overflow:visible'><?php echo html::select("executions[$i]", $executions, $executionID, "class='form-control chosen' onchange='loadExecutionBuilds($productID, this.value, $i)'");?></td>
|
||||
<td id='buildBox<?php echo $i;?>'><?php echo html::select("openedBuilds[$i][]", $builds, '', "class='form-control picker-select' multiple");?></td>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<div class="input-control has-icon-right">
|
||||
<?php echo html::input("title[$i]", '', "class='form-control title-import'");?>
|
||||
<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->bug->colorTag;?><i class="icon icon-close"></i></li>
|
||||
</ul>
|
||||
<?php echo html::hidden("color[$i]", '', "data-provide='colorpicker' data-icon='color' data-wrapper='input-control-icon-right' data-update-color='#title\\[$i\\]'");?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<?php if(isset($executionType) and $executionType == 'kanban'):?>
|
||||
<td><?php echo html::select("regions[$i]", $regionPairs, $regionID, "class='form-control chosen' onchange='setLane(this.value, $i)'");?></td>
|
||||
<td><?php echo html::select("lanes[$i]", $lanePairs, $laneID, "class='form-control chosen'");?></td>
|
||||
<?php endif;?>
|
||||
<td class='<?php echo zget($visibleFields, 'deadline', 'hidden')?> deadlineBox'><?php echo html::input("deadlines[$i]", '', "class='form-control form-date'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'steps', 'hidden')?> stepsBox'><?php echo html::textarea("stepses[$i]", '', "rows='1' class='form-control autosize'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'type', 'hidden')?> typeBox' style='overflow:visible'> <?php echo html::select("types[$i]", $lang->bug->typeList, $type, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'pri', 'hidden')?> priBox' style='overflow:visible'> <?php echo html::select("pris[$i]", $lang->bug->priList, $pri, "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'severity', 'hidden')?> severityBox' style='overflow:visible'><?php echo html::select("severities[$i]", $lang->bug->severityList, '3', "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'os', 'hidden')?> osBox' style='overflow:visible'> <?php echo html::select("oses[$i][]", $lang->bug->osList, '', "class='form-control chosen' multiple");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'browser', 'hidden')?> browserBox' style='overflow:visible'> <?php echo html::select("browsers[$i][]", $lang->bug->browserList, '', "class='form-control chosen' multiple");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'keywords', 'hidden')?> keywordsBox'><?php echo html::input("keywords[$i]", '', "class='form-control'");?></td>
|
||||
<?php
|
||||
$this->loadModel('flow');
|
||||
foreach($extendFields as $extendField) echo "<td" . (($extendField->control == 'select' or $extendField->control == 'multi-select') ? " style='overflow:visible'" : '') . ">" . $this->flow->getFieldControl($extendField, '', $extendField->field . "[$i]") . "</td>";
|
||||
?>
|
||||
<td class='c-actions text-left'>
|
||||
<a href='javascript:;' onclick='addRow(this)' class='btn btn-link'><i class='icon-plus'></i></a>
|
||||
<a href='javascript:;' onclick='deleteRow(this)' class='btn btn-link'><i class='icon icon-close'></i></a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<?php js::set('branch', $branch)?>
|
||||
<?php if(isonlybody()):?>
|
||||
<style>
|
||||
.body-modal .main-header {padding-right: 0px;}
|
||||
.btn-toolbar > .dropdown {margin: 0px;}
|
||||
</style>
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
parent.$('#triggerModal .modal-content .modal-header .close').hide();
|
||||
})
|
||||
</script>
|
||||
<?php endif;?>
|
||||
<?php include '../../common/view/pastetext.html.php';?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,170 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The batch edit view of bug module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Congzhi Chen <congzhi@cnezsoft.com>
|
||||
* @package bug
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/datepicker.html.php';?>
|
||||
<?php js::set('dittoNotice', $this->lang->bug->notice->productDitto);?>
|
||||
<?php js::set('showFields', $showFields);?>
|
||||
<?php js::set('requiredFields', $config->bug->edit->requiredFields);?>
|
||||
<div id='mainContent' class='main-content fade'>
|
||||
<div class='main-header'>
|
||||
<h2><?php echo $lang->bug->common . $lang->hyphen . $lang->bug->batchEdit;?></h2>
|
||||
<div class="pull-right btn-toolbar">
|
||||
<?php $customLink = $this->createLink('custom', 'ajaxSaveCustomFields', 'module=bug§ion=custom&key=batchEditFields')?>
|
||||
<?php include '../../common/view/customfield.html.php';?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php if(isset($suhosinInfo)):?>
|
||||
<div class='alert alert-info'><?php echo $suhosinInfo;?></div>
|
||||
<?php else:?>
|
||||
<?php
|
||||
$visibleFields = array();
|
||||
$requiredFields = array();
|
||||
foreach(explode(',', $showFields) as $field)
|
||||
{
|
||||
if($field) $visibleFields[$field] = '';
|
||||
}
|
||||
foreach(explode(',', $config->bug->edit->requiredFields) as $field)
|
||||
{
|
||||
if($field)
|
||||
{
|
||||
$requiredFields[$field] = '';
|
||||
if(strpos(",{$config->bug->list->customBatchEditFields},", ",{$field},") !== false) $visibleFields[$field] = '';
|
||||
}
|
||||
}
|
||||
$columns = count($visibleFields) + 2;
|
||||
?>
|
||||
<form class='main-form' method='post' target='hiddenwin' action="<?php echo inLink('batchEdit', "productID=$productID")?>" id='batchEditForm'>
|
||||
<div class="table-responsive">
|
||||
<table class='table table-form'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-id'><?php echo $lang->idAB;?></th>
|
||||
<th class='c-type<?php echo zget($visibleFields, 'type', ' hidden') . zget($requiredFields, 'type', '', ' required');?>'><?php echo $lang->bug->type;?></th>
|
||||
<th class='c-severity<?php echo zget($visibleFields, 'severity', ' hidden') . zget($requiredFields, 'severity', '', ' required');?>'><?php echo $lang->bug->severity;?></th>
|
||||
<th class='c-pri<?php echo zget($visibleFields, 'pri', ' hidden') . zget($requiredFields, 'pri', '', ' required');?>'><?php echo $lang->bug->pri;?></th>
|
||||
<th class="required <?php if(count($visibleFields) >= 8) echo ' c-title';?>"><?php echo $lang->bug->title;?></th>
|
||||
<?php if($branchProduct):?>
|
||||
<th class='c-branch'><?php echo $lang->bug->branch;?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-module<?php echo zget($requiredFields, 'module', '', ' required');?>'> <?php echo $lang->bug->module;?></th>
|
||||
<th class='c-plan<?php echo zget($visibleFields, 'productplan', ' hidden') . zget($requiredFields, 'productplan', '', ' required');?>'><?php echo $lang->bug->plan;?></th>
|
||||
<th class='c-assigned<?php echo zget($visibleFields, 'assignedTo', ' hidden') . zget($requiredFields, 'assignedTo', '', ' required');?>'><?php echo $lang->bug->assignedTo;?></th>
|
||||
<th class='c-date<?php echo zget($visibleFields, 'deadline', ' hidden') . zget($requiredFields, 'deadline', '', ' required');?>'><?php echo $lang->bug->deadline;?></th>
|
||||
<th class='c-os<?php echo zget($visibleFields, 'os', ' hidden') . zget($requiredFields, 'os', '', ' required');?>'><?php echo $lang->bug->os;?></th>
|
||||
<th class='c-browser<?php echo zget($visibleFields, 'browser', ' hidden') . zget($requiredFields, 'browser', '', ' required');?>'><?php echo $lang->bug->browser;?></th>
|
||||
<th class='c-keywords<?php echo zget($visibleFields, 'keywords', ' hidden') . zget($requiredFields, 'keywords', '', ' required');?>'><?php echo $lang->bug->keywords;?></th>
|
||||
<th class='c-user<?php echo zget($visibleFields, 'resolvedBy', ' hidden')?>'><?php echo $lang->bug->abbr->resolvedBy;?></th>
|
||||
<th class='c-resolution<?php echo zget($visibleFields, 'resolution', ' hidden')?>'><?php echo $lang->bug->abbr->resolution;?></th>
|
||||
<?php
|
||||
$extendFields = $this->bug->getFlowExtendFields();
|
||||
foreach($extendFields as $extendField) echo "<th class='c-extend'>{$extendField->name}</th>";
|
||||
?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($bugs as $bugID => $bug):?>
|
||||
<tr>
|
||||
<td><?php echo $bugID . html::hidden("bugIDList[$bugID]", $bugID);?></td>
|
||||
<td <?php echo zget($visibleFields, 'type', "class='hidden'")?>><?php echo html::select("types[$bugID]", $typeList, $bug->type, 'class=form-control');?></td>
|
||||
<td <?php echo zget($visibleFields, 'severity', "class='hidden'")?>><?php echo html::select("severities[$bugID]", $severityList, $bug->severity, 'class=form-control');?></td>
|
||||
<td <?php echo zget($visibleFields, 'pri', "class='hidden'")?>><?php echo html::select("pris[$bugID]", $priList, $bug->pri, 'class=form-control');?></td>
|
||||
<td style='overflow:visible' title='<?php echo $bug->title?>'>
|
||||
<div class='input-group'>
|
||||
<div class="input-control has-icon-right">
|
||||
<?php echo html::input("titles[$bugID]", $bug->title, "class='form-control' style='color:{$bug->color}'");?>
|
||||
<div class="colorpicker">
|
||||
<button type="button" class="btn btn-link dropdown-toggle" data-toggle="dropdown"><span class="cp-title"></span><span class="color-bar" style="background:<?php echo $bug->color;?>"></span><i class="ic"></i></button>
|
||||
<ul class="dropdown-menu clearfix">
|
||||
<li class="heading"><?php echo $lang->story->colorTag;?><i class="icon icon-close"></i></li>
|
||||
</ul>
|
||||
<?php echo html::hidden("colors[$bugID]", $bug->color, "data-provide='colorpicker' data-icon='color' data-wrapper='input-control-icon-right' data-update-color='#titles\\[{$bugID}\\]'");?>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
</td>
|
||||
<?php if($branchProduct):?>
|
||||
<td style='overflow:visible'>
|
||||
<?php $disabled = (isset($productList) and $productList[$bug->product]->type == 'normal') ? "disabled='disabled'" : '';?>
|
||||
<?php echo html::select("branches[$bugID]", !empty($disabled) ? array() : $branchTagOption[$bug->product], $bug->branch, "class='form-control picker-select' data-drop-width='auto' $disabled onchange='setBranchRelated(this.value, $bug->product, $bug->id)'");?>
|
||||
</td>
|
||||
<?php endif;?>
|
||||
<td><?php echo html::select("modules[$bugID]", isset($modules[$bug->product][$bug->branch]) ? $modules[$bug->product][$bug->branch] : array(0 => '/'), $bug->module, "class='form-control picker-select' data-drop-width='auto'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'productplan', ' hidden')?>' style='overflow:visible'><?php echo html::select("plans[$bugID]", $bug->plans, $bug->plan, "class='form-control picker-select' data-drop-width='auto'");?></td>
|
||||
<?php
|
||||
$assignedToList = array();
|
||||
if($app->tab == 'project' or $app->tab == 'execution')
|
||||
{
|
||||
if($bug->execution)
|
||||
{
|
||||
$assignedToList = array('' => '', 'ditto' => $this->lang->bug->ditto) + $executionMembers[$bug->execution];
|
||||
}
|
||||
elseif($bug->project)
|
||||
{
|
||||
$assignedToList = array('' => '', 'ditto' => $this->lang->bug->ditto) + $projectMembers[$bug->project];
|
||||
}
|
||||
else
|
||||
{
|
||||
$assignedToList = $productMembers[$bug->product][$bug->branch];
|
||||
if(empty($assignedToList))
|
||||
{
|
||||
$assignedToList = $users;
|
||||
unset($assignedToList['closed']);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$assignedToList = $users;
|
||||
unset($assignedToList['closed']);
|
||||
}
|
||||
?>
|
||||
<td class='<?php echo zget($visibleFields, 'assignedTo', ' hidden')?>' style='overflow:visible'><?php echo $bug->status == 'closed' ? html::input("assignedTos[$bugID]", ucfirst($bug->assignedTo), 'class=form-control disabled') : html::select("assignedTos[$bugID]", $assignedToList, $bug->assignedTo, "class='form-control picker-select' data-drop-width='135px'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'deadline', ' hidden')?>' style='overflow:visible'><?php echo html::input("deadlines[$bugID]", helper::isZeroDate($bug->deadline) ? '' : $bug->deadline, "class='form-control form-date'");?></td>
|
||||
<td <?php echo zget($visibleFields, 'os', "class='hidden'")?>><?php echo html::select("os[$bugID][]", $lang->bug->osList, $bug->os, 'class="form-control chosen" multiple');?></td>
|
||||
<td <?php echo zget($visibleFields, 'browser', "class='hidden'")?>><?php echo html::select("browsers[$bugID][]", $lang->bug->browserList, $bug->browser, 'class="form-control chosen" multiple');?></td>
|
||||
<td <?php echo zget($visibleFields, 'keywords', "class='hidden'")?>><?php echo html::input("keywords[$bugID]", $bug->keywords, 'class=form-control');?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'resolvedBy', ' hidden')?>' style='overflow:visible'><?php echo html::select("resolvedBys[$bugID]", $users, $bug->resolvedBy, "class='form-control picker-select' data-drop-width='auto'");?></td>
|
||||
<td <?php echo zget($visibleFields, 'resolution', "class='hidden'")?>>
|
||||
<table class='table-borderless table no-margin table-form'>
|
||||
<tr>
|
||||
<td class='pd-0'><?php echo html::select("resolutions[$bugID]", $resolutionList, $bug->resolution, "class='form-control' onchange=setDuplicate(this.value,$bugID)");?></td>
|
||||
<td class='pd-0 w-p50' id='<?php echo 'duplicateBox' . $bugID;?>' <?php if($bug->resolution != 'duplicate') echo "style='display:none'";?>>
|
||||
<?php
|
||||
$productBugs = isset($productBugList[$bug->product]) && isset($productBugList[$bug->product][$bug->branch]) ? $productBugList[$bug->product][$bug->branch] : array();
|
||||
if(isset($productBugs[$bug->id])) unset($productBugs[$bug->id]);
|
||||
?>
|
||||
<?php echo html::select("duplicates[$bugID]", $productBugs, $bug->duplicate, "class='form-control' placeholder='{$lang->bug->placeholder->duplicate}'");?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<?php foreach($extendFields as $extendField) echo "<td" . (($extendField->control == 'select' or $extendField->control == 'multi-select') ? " style='overflow:visible'" : '') . ">" . $this->loadModel('flow')->getFieldControl($extendField, $bug, $extendField->field . "[{$bugID}]") . "</td>";?>
|
||||
</tr>
|
||||
<?php if(isset($this->config->moreLinks["assignedTos[$bugID]"])) unset($this->config->moreLinks["assignedTos[$bugID]"]);?>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan='<?php echo $branchProduct ? $columns : ($columns - 1);?>' class='text-center form-actions'>
|
||||
<?php echo html::submitButton();?>
|
||||
<?php echo $this->app->tab == 'product' ? html::a($this->session->bugList, $lang->goback, '', "class='btn btn-back btn-wide'") : html::backButton();?>
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,457 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The browse view file of bug module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package bug
|
||||
* @version $Id: browse.html.php 5102 2013-07-12 00:59:54Z chencongzhi520@gmail.com $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php
|
||||
include '../../common/view/datatable.fix.html.php';
|
||||
js::set('browseType', $browseType);
|
||||
js::set('moduleID', $currentModuleID);
|
||||
js::set('bugBrowseType', ($browseType == 'bymodule' and $this->session->bugBrowseType == 'bysearch') ? 'all' : $this->session->bugBrowseType);
|
||||
js::set('flow', $config->global->flow);
|
||||
js::set('productID', $product->id);
|
||||
js::set('branch', $branch);
|
||||
$currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($browseType, array_keys($lang->bug->mySelects)) ? $browseType : '';
|
||||
?>
|
||||
<div id="mainMenu" class="clearfix">
|
||||
<div id="sidebarHeader">
|
||||
<div class="title">
|
||||
<?php
|
||||
echo $moduleName;
|
||||
if($currentModuleID)
|
||||
{
|
||||
$removeLink = $browseType == 'bymodule' ? inlink('browse', "productID={$product->id}&branch=$branch&browseType=$browseType¶m=0&orderBy=$orderBy&recTotal=0&recPerPage={$pager->recPerPage}") : 'javascript:removeCookieByKey("bugModule")';
|
||||
echo html::a($removeLink, "<i class='icon icon-sm icon-close'></i>", '', "class='text-muted'");
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn-toolbar pull-left">
|
||||
<?php
|
||||
common::sortFeatureMenu();
|
||||
$menus = customModel::getFeatureMenu($this->moduleName, $this->methodName);
|
||||
foreach($menus as $menuItem)
|
||||
{
|
||||
if(isset($menuItem->hidden)) continue;
|
||||
$menuBrowseType = strpos($menuItem->name, 'QUERY') === 0 ? 'bySearch' : $menuItem->name;
|
||||
$label = "<span class='text'>{$menuItem->text}</span>";
|
||||
$label .= $menuBrowseType == $this->session->bugBrowseType ? " <span class='label label-light label-badge'>{$pager->recTotal}</span>" : '';
|
||||
$active = $menuBrowseType == $this->session->bugBrowseType ? 'btn-active-text' : '';
|
||||
|
||||
if($menuItem->name == 'my')
|
||||
{
|
||||
echo "<li id='statusTab' class='dropdown " . (!empty($currentBrowseType) ? 'active' : '') . "'>";
|
||||
echo html::a('javascript:;', $menuItem->text . " <span class='caret'></span>", '', "data-toggle='dropdown' class='btn btn-link'");
|
||||
echo "<ul class='dropdown-menu'>";
|
||||
foreach($lang->bug->mySelects as $key => $value)
|
||||
{
|
||||
echo '<li' . ($key == $currentBrowseType ? " class='active'" : '') . '>';
|
||||
echo html::a($this->createLink('bug', 'browse', "productid={$product->id}&branch=$branch&browseType=$key"), $value);
|
||||
}
|
||||
echo '</ul></li>';
|
||||
}
|
||||
elseif($menuItem->name == 'QUERY')
|
||||
{
|
||||
$searchBrowseLink = inlink('browse', "productID={$product->id}&branch=$branch&browseType=bySearch¶m=%s");
|
||||
$isBySearch = $browseType == 'bysearch';
|
||||
include '../../common/view/querymenu.html.php';
|
||||
}
|
||||
elseif($menuItem->name == 'more')
|
||||
{
|
||||
$moreSelects = isset($lang->bug->moreSelects[$app->rawMethod]['more']) ? $lang->bug->moreSelects[$app->rawMethod]['more'] : array();
|
||||
if(!empty($moreSelects))
|
||||
{
|
||||
$moreLabel = $lang->more;
|
||||
$moreLabelActive = '';
|
||||
if(isset($moreSelects[$this->session->bugBrowseType]))
|
||||
{
|
||||
$moreLabel = "<span class='text'>{$moreSelects[$this->session->bugBrowseType]}</span> <span class='label label-light label-badge'>{$pager->recTotal}</span>";
|
||||
$moreLabelActive = 'btn-active-text';
|
||||
}
|
||||
echo "<div class='btn-group'><a href='javascript:;' data-toggle='dropdown' class='btn btn-link {$moreLabelActive}'>{$moreLabel} <span class='caret'></span></a>";
|
||||
echo "<ul class='dropdown-menu'>";
|
||||
foreach($moreSelects as $menuBrowseType => $label)
|
||||
{
|
||||
$active = $menuBrowseType == $this->session->bugBrowseType ? 'btn-active-text' : '';
|
||||
echo '<li>' . html::a($this->createLink('bug', 'browse', "productid={$product->id}&branch=$branch&browseType=$menuBrowseType"), "<span class='text'>{$label}</span>", '', "class='btn btn-link $active'") . '</li>';
|
||||
}
|
||||
echo '</ul></div>';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
echo html::a($this->createLink('bug', 'browse', "productid={$product->id}&branch=$branch&browseType=$menuBrowseType"), $label, '', "class='btn btn-link $active'");
|
||||
}
|
||||
}
|
||||
?>
|
||||
<a class="btn btn-link querybox-toggle" id='bysearchTab'><i class="icon icon-search muted"></i> <?php echo $lang->bug->byQuery;?></a>
|
||||
</div>
|
||||
<?php if(!isonlybody()):?>
|
||||
<div class="btn-toolbar pull-right">
|
||||
<?php common::printIcon('bug', 'report', "productID={$product->id}&browseType=$browseType&branchID=$branch&moduleID=$currentModuleID", '', 'button', 'bar-chart muted');?>
|
||||
<div class='btn-group'>
|
||||
<button type='button' class='btn btn-link dropdown-toggle' data-toggle='dropdown'>
|
||||
<i class="icon icon-export muted"></i> <span class="text"> <?php echo $lang->export;?></span> <span class="caret"></span></button>
|
||||
</button>
|
||||
<ul class='dropdown-menu' id='exportActionMenu'>
|
||||
<?php
|
||||
$class = common::hasPriv('bug', 'export') ? "" : "class='disabled'";
|
||||
$misc = common::hasPriv('bug', 'export') ? "class='export'" : "class='disabled'";
|
||||
$link = common::hasPriv('bug', 'export') ? $this->createLink('bug', 'export', "productID={$product->id}&orderBy=$orderBy&browseType=$browseType") : '#';
|
||||
echo "<li $class>" . html::a($link, $lang->bug->export, '', $misc) . "</li>";
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php if(common::canModify('product', $product)):?>
|
||||
<?php
|
||||
$createBugLink = '';
|
||||
$batchCreateLink = '';
|
||||
if(commonModel::isTutorialMode())
|
||||
{
|
||||
$wizardParams = helper::safe64Encode("productID={$product->id}&branch=$branch&extra=moduleID=$currentModuleID");
|
||||
$createBugLink = $this->createLink('tutorial', 'wizard', "module=bug&method=create¶ms=$wizardParams");
|
||||
}
|
||||
else
|
||||
{
|
||||
$selectedBranch = $branch != 'all' ? $branch : 0;
|
||||
$createBugLink = $this->createLink('bug', 'create', "productID={$product->id}&branch=$selectedBranch&extra=moduleID=$currentModuleID");
|
||||
}
|
||||
$batchCreateLink = $this->createLink('bug', 'batchCreate', "productID={$product->id}&branch=$branch&executionID=0&moduleID=$currentModuleID");
|
||||
|
||||
$buttonLink = '';
|
||||
$buttonTitle = '';
|
||||
if(common::hasPriv('bug', 'batchCreate'))
|
||||
{
|
||||
$buttonLink = $batchCreateLink;
|
||||
$buttonTitle = $lang->bug->batchCreate;
|
||||
}
|
||||
if(common::hasPriv('bug', 'create'))
|
||||
{
|
||||
$buttonLink = $createBugLink;
|
||||
$buttonTitle = $lang->bug->create;
|
||||
}
|
||||
$hidden = empty($buttonLink) ? 'hidden' : '';
|
||||
?>
|
||||
<div class='btn-group dropdown'>
|
||||
<?php echo html::a($buttonLink, "<i class='icon-plus'></i> $buttonTitle", '', "class='btn btn-primary create-bug-btn $hidden'");?>
|
||||
<?php if(common::hasPriv('bug', 'batchCreate') and common::hasPriv('bug', 'create')):?>
|
||||
<button type='button' class='btn btn-primary dropdown-toggle' data-toggle='dropdown'><span class='caret'></span></button>
|
||||
<ul class='dropdown-menu'>
|
||||
<li><?php echo html::a($createBugLink, $lang->bug->create);?></li>
|
||||
<li><?php echo html::a($batchCreateLink, $lang->bug->batchCreate);?></li>
|
||||
</ul>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php if($this->app->getViewType() == 'xhtml'):?>
|
||||
<div id="xx-title">
|
||||
<strong><?php echo $product->name;?></strong>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div id="mainContent" class="main-row fade">
|
||||
<div class="side-col" id="sidebar">
|
||||
<div class="sidebar-toggle"><i class="icon icon-angle-left"></i></div>
|
||||
<div class="cell">
|
||||
<?php if(!$moduleTree):?>
|
||||
<hr class="space">
|
||||
<div class="text-center text-muted"><?php echo $lang->bug->notice->noModule;?></div>
|
||||
<hr class="space">
|
||||
<?php endif;?>
|
||||
<?php echo $moduleTree;?>
|
||||
<div class="text-center">
|
||||
<?php common::printLink('tree', 'browse', "productID={$product->id}&view=bug¤tModuleID=0&branch=0&from={$this->lang->navGroup->bug}", $lang->tree->manage, '', "class='btn btn-info btn-wide'");?>
|
||||
<hr class="space-sm" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="main-col">
|
||||
<div class="cell<?php if($browseType == 'bysearch') echo ' show';?>" id="queryBox" data-module='bug'></div>
|
||||
<?php if(empty($bugs)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->bug->notice->noBug;?></span>
|
||||
<?php if(common::canModify('product', $product) and common::hasPriv('bug', 'create')):?>
|
||||
<?php echo html::a($this->createLink('bug', 'create', "productID={$product->id}&branch=$branch&extra=moduleID=$currentModuleID"), "<i class='icon icon-plus'></i> " . $lang->bug->create, '', "class='btn btn-info'");?>
|
||||
<?php endif;?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<?php
|
||||
$datatableId = $this->moduleName . ucfirst($this->methodName);
|
||||
$useDatatable = (isset($config->datatable->$datatableId->mode) and $config->datatable->$datatableId->mode == 'datatable');
|
||||
?>
|
||||
<?php if($this->app->getViewType() == 'xhtml'):?>
|
||||
<form class='main-table table-bug' method='post' id='bugForm'>
|
||||
<?php else:?>
|
||||
<form class='main-table table-bug' method='post' id='bugForm' <?php if(!$useDatatable) echo "data-ride='table'";?>>
|
||||
<?php endif;?>
|
||||
<div class="table-header fixed-right">
|
||||
<nav class="btn-toolbar pull-right setting"></nav>
|
||||
</div>
|
||||
<?php
|
||||
$vars = "productID={$product->id}&branch=$branch&browseType=$browseType¶m=$param&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}";
|
||||
if($useDatatable) include '../../common/view/datatable.html.php';
|
||||
|
||||
$setting = $this->loadModel('datatable')->getSetting('bug');
|
||||
$widths = $this->datatable->setFixedFieldWidth($setting);
|
||||
$columns = 0;
|
||||
|
||||
$canBeChanged = common::canModify('product', $product);
|
||||
$canBatchEdit = ($canBeChanged and common::hasPriv('bug', 'batchEdit'));
|
||||
$canBatchConfirm = ($canBeChanged and common::hasPriv('bug', 'batchConfirm'));
|
||||
$canBatchClose = common::hasPriv('bug', 'batchClose');
|
||||
$canBatchActivate = ($canBeChanged and common::hasPriv('bug', 'batchActivate'));
|
||||
$canBatchChangeBranch = ($canBeChanged and common::hasPriv('bug', 'batchChangeBranch'));
|
||||
$canBatchChangeModule = ($canBeChanged and common::hasPriv('bug', 'batchChangeModule'));
|
||||
$canBatchResolve = ($canBeChanged and common::hasPriv('bug', 'batchResolve'));
|
||||
$canBatchAssignTo = ($canBeChanged and common::hasPriv('bug', 'batchAssignTo'));
|
||||
|
||||
$canBatchAction = ($canBatchEdit or $canBatchConfirm or $canBatchClose or $canBatchActivate or $canBatchChangeBranch or $canBatchChangeModule or $canBatchResolve or $canBatchAssignTo);
|
||||
?>
|
||||
<?php if(!$useDatatable) echo '<div class="table-responsive">';?>
|
||||
<table class='table has-sort-head<?php if($useDatatable) echo ' datatable';?>' id='bugList' data-fixed-left-width='<?php echo $widths['leftWidth']?>' data-fixed-right-width='<?php echo $widths['rightWidth']?>'>
|
||||
<thead>
|
||||
<tr>
|
||||
<?php if($this->app->getViewType() == 'xhtml'):?>
|
||||
<?php
|
||||
foreach($setting as $value)
|
||||
{
|
||||
if($value->id == 'title' || $value->id == 'id' || $value->id == 'pri' || $value->id == 'status')
|
||||
{
|
||||
if($storyType == 'requirement' and (in_array($value->id, array('plan', 'stage')))) $value->show = false;
|
||||
|
||||
$this->datatable->printHead($value, $orderBy, $vars, $canBatchAction);
|
||||
$columns ++;
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php else:?>
|
||||
<?php
|
||||
foreach($setting as $value)
|
||||
{
|
||||
if($value->show)
|
||||
{
|
||||
if(common::checkNotCN() and $value->id == 'severity') $value->name = $lang->bug->severity;
|
||||
if(common::checkNotCN() and $value->id == 'pri') $value->name = $lang->bug->pri;
|
||||
if(common::checkNotCN() and $value->id == 'confirmed') $value->name = $lang->bug->confirmed;
|
||||
$this->datatable->printHead($value, $orderBy, $vars, $canBatchAction);
|
||||
$columns ++;
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($bugs as $bug):?>
|
||||
<tr data-id='<?php echo $bug->id?>'>
|
||||
<?php if($this->app->getViewType() == 'xhtml'):?>
|
||||
<?php
|
||||
foreach($setting as $value)
|
||||
{
|
||||
if($value->id == 'title' || $value->id == 'id' || $value->id == 'pri' || $value->id == 'status')
|
||||
{
|
||||
$this->bug->printCell($value, $bug, $users, $builds, $branchOption, $modulePairs, $executions, $plans, $stories, $tasks, $useDatatable ? 'datatable' : 'table');
|
||||
}
|
||||
}?>
|
||||
<?php else:?>
|
||||
<?php foreach($setting as $value) $this->bug->printCell($value, $bug, $users, $builds, $branchOption, $modulePairs, $executions, $plans, $stories, $tasks, $useDatatable ? 'datatable' : 'table', $projectPairs);?>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php if(!$useDatatable) echo '</div>';?>
|
||||
<div class='table-footer'>
|
||||
<?php if($canBatchAction):?>
|
||||
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
|
||||
<?php endif;?>
|
||||
<div class="table-actions btn-toolbar">
|
||||
<div class='btn-group dropup'>
|
||||
<?php
|
||||
$actionLink = $this->createLink('bug', 'batchEdit', "productID={$product->id}&branch=$branch");
|
||||
$misc = $canBatchEdit ? "onclick=\"setFormAction('$actionLink', '', '#bugList')\"" : "disabled='disabled'";
|
||||
echo html::commonButton($lang->edit, $misc);
|
||||
?>
|
||||
<button type='button' class='btn dropdown-toggle' data-toggle='dropdown'><span class='caret'></span></button>
|
||||
<ul class='dropdown-menu'>
|
||||
<?php
|
||||
$class = $canBatchConfirm ? '' : "class='disabled'";
|
||||
$actionLink = $this->createLink('bug', 'batchConfirm');
|
||||
$misc = $canBatchConfirm ? "onclick=\"setFormAction('$actionLink', 'hiddenwin', '#bugList')\"" : '';
|
||||
echo "<li $class>" . html::a('javascript:;', $lang->bug->confirm, '', $misc) . "</li>";
|
||||
|
||||
$class = $canBatchClose ? '' : "class='disabled'";
|
||||
$actionLink = $this->createLink('bug', 'batchClose');
|
||||
$misc = $canBatchClose ? "onclick=\"setFormAction('$actionLink', 'hiddenwin', '#bugList')\"" : '';
|
||||
echo "<li $class>" . html::a('javascript:;', $lang->bug->close, '', $misc) . "</li>";
|
||||
|
||||
$class = $canBatchActivate ? '' : "class='disabled'";
|
||||
$actionLink = $this->createLink('bug', 'batchActivate', "productID={$product->id}&branch=$branch");
|
||||
$misc = $canBatchActivate ? "onclick=\"setFormAction('$actionLink', '', '#bugList')\"" : '';
|
||||
echo "<li $class>" . html::a('javascript:;', $lang->bug->activate, '', $misc) . "</li>";
|
||||
|
||||
$misc = $canBatchResolve ? "id='resolveItem'" : '';
|
||||
if($misc)
|
||||
{
|
||||
echo "<li class='dropdown-submenu'>" . html::a('javascript:;', $lang->bug->resolve, '', $misc);
|
||||
echo "<ul class='dropdown-menu'>";
|
||||
unset($lang->bug->resolutionList['']);
|
||||
unset($lang->bug->resolutionList['duplicate']);
|
||||
unset($lang->bug->resolutionList['tostory']);
|
||||
foreach($lang->bug->resolutionList as $key => $resolution)
|
||||
{
|
||||
$actionLink = $this->createLink('bug', 'batchResolve', "resolution=$key");
|
||||
if($key == 'fixed')
|
||||
{
|
||||
$withSearch = count($builds) > 4;
|
||||
echo "<li class='dropdown-submenu'>";
|
||||
echo html::a('javascript:;', $resolution, '', "id='fixedItem'");
|
||||
echo "<div class='dropdown-menu" . ($withSearch ? ' with-search':'') . "'>";
|
||||
echo '<ul class="dropdown-list">';
|
||||
unset($builds['']);
|
||||
foreach($builds as $key => $build)
|
||||
{
|
||||
$actionLink = $this->createLink('bug', 'batchResolve', "resolution=fixed&resolvedBuild=$key");
|
||||
echo "<li class='option' data-key='$key'>";
|
||||
echo html::a('javascript:;', $build . (in_array($key, $releasedBuilds) ? " <span class='label label-primary label-outline'>{$lang->build->released}</span> " : ''), '', "onclick=\"setFormAction('$actionLink', 'hiddenwin', '#bugList')\"");
|
||||
echo "</li>";
|
||||
}
|
||||
echo "</ul>";
|
||||
if($withSearch) echo "<div class='menu-search'><div class='input-group input-group-sm'><input type='text' class='form-control' placeholder=''><span class='input-group-addon'><i class='icon-search'></i></span></div></div>";
|
||||
echo '</div></li>';
|
||||
}
|
||||
else
|
||||
{
|
||||
echo '<li>' . html::a('javascript:;', $resolution, '', "onclick=\"setFormAction('$actionLink', 'hiddenwin', '#bugList')\"") . '</li>';
|
||||
}
|
||||
}
|
||||
echo '</ul></li>';
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php if($canBatchChangeBranch and $this->session->currentProductType != 'normal'):?>
|
||||
<div class="btn-group dropup">
|
||||
<button data-toggle="dropdown" type="button" class="btn"><?php echo $lang->product->branchName[$this->session->currentProductType];?> <span class="caret"></span></button>
|
||||
<?php $withSearch = count($branchTagOption) > 6;?>
|
||||
<?php if($withSearch):?>
|
||||
<div class="dropdown-menu search-list search-box-sink" data-ride="searchList">
|
||||
<div class="input-control search-box has-icon-left has-icon-right search-example">
|
||||
<input id="userSearchBox" type="search" autocomplete="off" class="form-control search-input">
|
||||
<label for="userSearchBox" class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label>
|
||||
<a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a>
|
||||
</div>
|
||||
<?php $branchsPinYin = common::convert2Pinyin($branchTagOption);?>
|
||||
<?php else:?>
|
||||
<div class="dropdown-menu search-list">
|
||||
<?php endif;?>
|
||||
<div class="list-group">
|
||||
<?php
|
||||
foreach($branchTagOption as $branchID => $branchName)
|
||||
{
|
||||
$searchKey = $withSearch ? ('data-key="' . zget($branchsPinYin, $branchName, '') . '"') : '';
|
||||
$actionLink = $this->createLink('bug', 'batchChangeBranch', "branchID=$branchID");
|
||||
echo html::a('#', $branchName, '', "$searchKey onclick=\"setFormAction('$actionLink', 'hiddenwin', '#bugList')\" data-key='$branchID'");
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php if($canBatchChangeModule and ($product->type == 'normal' or $branch !== 'all')):?>
|
||||
<div class="btn-group dropup">
|
||||
<button data-toggle="dropdown" type="button" class="btn"><?php echo $lang->bug->abbr->module;?> <span class="caret"></span></button>
|
||||
<?php $withSearch = count($modules) > 6;?>
|
||||
<?php if($withSearch):?>
|
||||
<div class="dropdown-menu search-list search-box-sink" data-ride="searchList">
|
||||
<div class="input-control search-box has-icon-left has-icon-right search-example">
|
||||
<input id="userSearchBox" type="search" autocomplete="off" class="form-control search-input">
|
||||
<label for="userSearchBox" class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label>
|
||||
<a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a>
|
||||
</div>
|
||||
<?php $modulesPinYin = common::convert2Pinyin($modules);?>
|
||||
<?php else:?>
|
||||
<div class="dropdown-menu search-list">
|
||||
<?php endif;?>
|
||||
<div class="list-group">
|
||||
<?php
|
||||
foreach($modules as $moduleID => $module)
|
||||
{
|
||||
$searchKey = $withSearch ? ('data-key="' . zget($modulesPinYin, $module, '') . '"') : '';
|
||||
$actionLink = $this->createLink('bug', 'batchChangeModule', "moduleID=$moduleID");
|
||||
echo html::a('#', $module, '', "$searchKey onclick=\"setFormAction('$actionLink', 'hiddenwin', '#bugList')\" data-key='$currentModuleID'");
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php if($canBatchAssignTo):?>
|
||||
<div class="btn-group dropup">
|
||||
<button data-toggle="dropdown" type="button" class="btn" id="mulAssigned"><?php echo $lang->bug->assignedTo;?> <span class="caret"></span></button>
|
||||
<?php $withSearch = count($memberPairs) > 6;?>
|
||||
<?php if($withSearch):?>
|
||||
<div class="dropdown-menu search-list search-box-sink" data-ride="searchList">
|
||||
<div class="input-control search-box has-icon-left has-icon-right search-example">
|
||||
<input id="userSearchBox" type="search" autocomplete="off" class="form-control search-input">
|
||||
<label for="userSearchBox" class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label>
|
||||
<a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a>
|
||||
</div>
|
||||
<?php $membersPinYin = common::convert2Pinyin($memberPairs);?>
|
||||
<?php else:?>
|
||||
<div class="dropdown-menu search-list">
|
||||
<?php endif;?>
|
||||
<div class="list-group">
|
||||
<?php
|
||||
$actionLink = $this->createLink('bug', 'batchAssignTo', "productID={$product->id}&type=product");
|
||||
echo html::select('assignedTo', $memberPairs, '', 'class="hidden"');
|
||||
foreach ($memberPairs as $key => $value)
|
||||
{
|
||||
if(empty($key)) continue;
|
||||
$searchKey = $withSearch ? ('data-key="' . zget($membersPinYin, $value, '') . " @$key\"") : "data-key='@$key'";
|
||||
echo html::a("javascript:$(\"#assignedTo\").val(\"$key\");setFormAction(\"$actionLink\", \"hiddenwin\", \"#bugList\")", $value, '', $searchKey);
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<div class="table-statistic"><?php echo $summary;?></div>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
$('#module' + moduleID).closest('li').addClass('active');
|
||||
var branchID = $.cookie('bugBranch');
|
||||
$('#branch' + branchID).closest('li').addClass('active');
|
||||
<?php if($browseType == 'bysearch'):?>
|
||||
if($('#query li.active').size() == 0) $.toggleQueryBox(true);
|
||||
<?php endif;?>
|
||||
<?php if(!empty($useDatatable)):?>
|
||||
$(function(){$('#bugForm').table();})
|
||||
<?php endif;?>
|
||||
<?php $this->app->loadConfig('qa', '', false);?>
|
||||
<?php if(isset($config->qa->homepage) and $config->qa->homepage != 'browse' and $config->global->flow == 'full'):?>
|
||||
$(function(){$('#modulemenu .nav li:last').after("<li class='right'><a style='font-size:12px' href='javascript:setHomepage(\"qa\", \"browse\")'><i class='icon icon-cog'></i> <?php echo $lang->homepage?></a></li>")});
|
||||
<?php endif;?>
|
||||
<?php if(count($bugs) <= 2):?>
|
||||
$('#bugForm .table-footer .table-actions #assignedTo').closest('.btn-group.dropup').removeClass('dropup').addClass('dropdown');
|
||||
<?php endif;?>
|
||||
</script>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,47 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The close file of bug module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package bug
|
||||
* @version $Id: close.html.php 4129 2013-01-18 01:58:14Z wwccss $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2>
|
||||
<span class='label label-id'><?php echo $bug->id;?></span>
|
||||
<?php echo isonlybody() ? ('<span title="' . $bug->title . '">' . $bug->title . '</span>') : html::a($this->createLink('bug', 'view', 'bug=' . $bug->id), $bug->title);?>
|
||||
|
||||
<?php if(!isonlybody()):?>
|
||||
<small><?php echo $lang->arrow . $lang->bug->close;?></small>
|
||||
<?php endif;?>
|
||||
</h2>
|
||||
</div>
|
||||
<form method='post' target='hiddenwin'>
|
||||
<table class='table table-form'>
|
||||
<tr class='hide'>
|
||||
<th class='w-60px'><?php echo $lang->bug->status;?></th>
|
||||
<td><?php echo html::hidden('status', 'closed');?></td>
|
||||
</tr>
|
||||
<?php $this->printExtendFields($bug, 'table');?>
|
||||
<tr>
|
||||
<th class='w-60px'><?php echo $lang->comment;?></th>
|
||||
<td><?php echo html::textarea('comment', '', "rows='6' class='w-p98'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan='2' class='text-center form-actions'><?php echo html::submitButton() . html::linkButton($lang->goback, $this->session->bugList, 'self', '', 'btn btn-wide');?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<hr class='small' />
|
||||
<div class='main'><?php include '../../common/view/action.html.php';?></div>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,71 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The confirm file of bug module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package bug
|
||||
* @version $Id: resolve.html.php 1914 2011-06-24 10:11:25Z yidong@cnezsoft.com $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php
|
||||
include '../../common/view/header.html.php';
|
||||
include '../../common/view/kindeditor.html.php';
|
||||
js::set('holders', $lang->bug->placeholder);
|
||||
js::set('page', 'confirm');
|
||||
?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2>
|
||||
<span class='label label-id'><?php echo $bug->id;?></span>
|
||||
<?php echo isonlybody() ? ('<span title="' . $bug->title . '">' . $bug->title . '</span>') : html::a($this->createLink('bug', 'view', 'bug=' . $bug->id), $bug->title);?>
|
||||
|
||||
<?php if(!isonlybody()):?>
|
||||
<small><?php echo $lang->arrow . $lang->bug->confirm;?></small>
|
||||
<?php endif;?>
|
||||
</h2>
|
||||
</div>
|
||||
<form method='post' target='hiddenwin'>
|
||||
<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='form-control chosen'");?></td>
|
||||
<td></td>
|
||||
</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>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class='hide'>
|
||||
<th><?php echo $lang->bug->status;?></th>
|
||||
<td><?php echo html::hidden('status', $bug->status);?></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<?php $this->printExtendFields($bug, 'table');?>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->mailto;?></th>
|
||||
<td colspan='2'><?php echo html::select('mailto[]', $users, $bug->mailto, 'class="form-control picker-select" multiple');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->comment;?></th>
|
||||
<td colspan='2'><?php echo html::textarea('comment', '', "rows='6' class='w-p94'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='text-center form-actions' colspan='3'><?php echo html::submitButton() . html::linkButton($lang->goback, $this->server->http_referer, 'self', '', 'btn btn-wide');?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<hr class='small' />
|
||||
<div class='main'><?php include '../../common/view/action.html.php';?></div>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,381 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The create view of bug module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package bug
|
||||
* @version $Id: create.html.php 4903 2013-06-26 05:32:59Z wyd621@gmail.com $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php
|
||||
include '../../common/view/header.html.php';
|
||||
include '../../common/view/kindeditor.html.php';
|
||||
include '../../common/view/datepicker.html.php';
|
||||
js::set('holders', $lang->bug->placeholder);
|
||||
js::set('page', 'create');
|
||||
js::set('createRelease', $lang->release->create);
|
||||
js::set('createBuild', $lang->build->create);
|
||||
js::set('refresh', $lang->refreshIcon);
|
||||
js::set('flow', $config->global->flow);
|
||||
js::set('stepsRequired', $stepsRequired);
|
||||
js::set('stepsNotEmpty', $lang->bug->error->stepsNotEmpty);
|
||||
js::set('isStepsTemplate', $isStepsTemplate);
|
||||
js::set('oldProjectID', $projectID);
|
||||
js::set('blockID', $blockID);
|
||||
js::set('moduleID', $moduleID);
|
||||
js::set('tab', $this->app->tab);
|
||||
js::set('requiredFields', $config->bug->create->requiredFields);
|
||||
js::set('showFields', $showFields);
|
||||
js::set('projectExecutionPairs', $projectExecutionPairs);
|
||||
js::set('productID', $productID);
|
||||
js::set('released', $lang->build->released);
|
||||
if($this->app->tab == 'execution') js::set('objectID', zget($execution, 'id', ''));
|
||||
if($this->app->tab == 'project') js::set('objectID', $projectID);
|
||||
?>
|
||||
<div id="mainContent" class="main-content fade">
|
||||
<div class="center-block">
|
||||
<div class="main-header">
|
||||
<h2><?php echo $lang->bug->create;?></h2>
|
||||
<div class="pull-right btn-toolbar">
|
||||
<?php $customLink = $this->createLink('custom', 'ajaxSaveCustomFields', 'module=bug§ion=custom&key=createFields')?>
|
||||
<?php include '../../common/view/customfield.html.php';?>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
foreach(explode(',', $config->bug->create->requiredFields) as $field)
|
||||
{
|
||||
if($field and strpos($showFields, $field) === false) $showFields .= ',' . $field;
|
||||
}
|
||||
?>
|
||||
<form class="load-indicator main-form form-ajax" method='post' enctype='multipart/form-data' id='dataform'>
|
||||
<table class="table table-form">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class='w-110px'><?php echo $product->shadow ? $lang->bug->module : $lang->bug->product;?></th>
|
||||
<td class="<?php if($product->shadow) echo 'hidden';?>">
|
||||
<div class='input-group'>
|
||||
<?php echo html::select('product', $products, $productID, "onchange='loadAll(this.value);' class='form-control chosen control-product'");?>
|
||||
<?php if($product->type != 'normal' and isset($products[$productID])):?>
|
||||
<?php echo html::select('branch', $branches, $branch, "onchange='loadBranch()' class='form-control chosen control-branch'");?>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class='input-group' id='moduleIdBox'>
|
||||
<?php if(!$product->shadow):?>
|
||||
<span class="input-group-addon"><?php echo $lang->bug->module?></span>
|
||||
<?php endif;?>
|
||||
<?php
|
||||
echo html::select('module', $moduleOptionMenu, $moduleID, "onchange='loadModuleRelated()' class='form-control chosen'");
|
||||
if(count($moduleOptionMenu) == 1)
|
||||
{
|
||||
echo "<span class='input-group-addon'>";
|
||||
echo html::a($this->createLink('tree', 'browse', "rootID=$productID&view=bug¤tModuleID=0&branch=$branch", '', true), $lang->tree->manage, '', "class='text-primary' data-toggle='modal' data-type='iframe' data-width='95%'");
|
||||
echo ' ';
|
||||
echo html::a("javascript:void(0)", $lang->refreshIcon, '', "class='refresh' title='$lang->refresh' onclick='loadProductModules($productID)'");
|
||||
echo '</span>';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php $showExecution = (strpos(",$showFields,", ',execution,') !== false);?>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->project?></th>
|
||||
<td>
|
||||
<div class='table-row'>
|
||||
<div class='table-col' id='projectBox'>
|
||||
<?php echo html::select('project', $projects, $projectID, "class='form-control chosen' onchange='loadProductExecutions({$productID}, this.value)'");?>
|
||||
</div>
|
||||
<?php $executionClass = !$showExecution ? 'hidden' : '';?>
|
||||
<div class="table-col executionBox <?php echo $executionClass;?>">
|
||||
<div class='input-group' id='executionIdBox'>
|
||||
<span class='input-group-addon fix-border' id='executionBox'><?php echo $projectModel == 'kanban' ? $lang->bug->kanban : $lang->bug->execution;?></span>
|
||||
<?php echo html::select('execution', $executions, zget($execution, 'id', ''), "class='form-control chosen' onchange='loadExecutionRelated(this.value)'");?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class='input-group' id='buildBox'>
|
||||
<span class="input-group-addon"><?php echo $lang->bug->openedBuild?></span>
|
||||
<?php echo html::select('openedBuild[]', $builds, empty($buildID) ? '' : $buildID, "multiple=multiple class='picker-select form-control' data-items='" . count($builds) . "'");?>
|
||||
<span class='input-group-addon fix-border' id='buildBoxActions'></span>
|
||||
<div class='input-group-btn'><?php echo html::commonButton($lang->bug->allBuilds, "class='btn' id='all' data-toggle='tooltip' onclick='loadAllBuilds()'")?></div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><nobr><?php echo $lang->bug->lblAssignedTo;?></nobr></th>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php echo html::select('assignedTo', $productMembers, $assignedTo, "class='form-control chosen'");?>
|
||||
<span class='input-group-btn'><?php echo html::commonButton($lang->bug->allUsers, "class='btn btn-default' onclick='loadAllUsers()' data-toggle='tooltip'");?></span>
|
||||
</div>
|
||||
</td>
|
||||
<?php $showDeadline = strpos(",$showFields,", ',deadline,') !== false;?>
|
||||
<?php $showNoticefeedbackBy = strpos(",$showFields,", ',noticefeedbackBy,') !== false;?>
|
||||
<?php if($showDeadline):?>
|
||||
<td id='deadlineTd'>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon'><?php echo $lang->bug->deadline?></span>
|
||||
<span><?php echo html::input('deadline', $deadline, "class='form-control form-date'");?></span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php if($showNoticefeedbackBy):?>
|
||||
<tr>
|
||||
<th><nobr><?php echo $lang->bug->feedbackBy;?></nobr></th>
|
||||
<td><?php echo html::input('feedbackBy', isset($feedbackBy) ? $feedbackBy : '', "class='form-control'");?></td>
|
||||
<td id='notifyEmailTd'>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon'><?php echo $lang->bug->notifyEmail?></span>
|
||||
<span><?php echo html::input('notifyEmail', isset($notifyEmail) ? $notifyEmail : '', "class='form-control'");?></span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<?php elseif($showNoticefeedbackBy):?>
|
||||
<td>
|
||||
<div class='input-group' id='feedback'>
|
||||
<span class="input-group-addon"><?php echo $lang->bug->feedbackBy?></span>
|
||||
<?php echo html::input('feedbackBy', $feedbackBy, "class='form-control'");?>
|
||||
<span class="input-group-addon"><?php echo $lang->bug->notifyEmail?></span>
|
||||
<?php echo html::input('notifyEmail', $notifyEmail, "class='form-control'");?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<?php $showOS = strpos(",$showFields,", ',os,') !== false;?>
|
||||
<?php $showBrowser = strpos(",$showFields,", ',browser,') !== false;?>
|
||||
<tr class='bug-type'>
|
||||
<th><?php echo $lang->bug->type;?></th>
|
||||
<td>
|
||||
<div class='table-row'>
|
||||
<div class='table-col' id='typeBox'>
|
||||
<?php echo html::select('type', $lang->bug->typeList, $type, "class='form-control chosen'");?>
|
||||
</div>
|
||||
<?php if($showOS):?>
|
||||
<div class='table-col' id='osBox'>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon fix-border'><?php echo $lang->bug->os?></span>
|
||||
<?php echo html::select('os[]', $lang->bug->osList, $os, "class='form-control chosen' multiple");?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php if($showBrowser):?>
|
||||
<div class='table-col'>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon fix-border'><?php echo $lang->bug->browser?></span>
|
||||
<?php echo html::select('browser[]', $lang->bug->browserList, $browser, "class='form-control chosen' multiple");?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php if(isset($executionType) and $executionType == 'kanban'):?>
|
||||
<tr>
|
||||
<th><?php echo $lang->kanbancard->region;?></th>
|
||||
<td><?php echo html::select('region', $regionPairs, $regionID, "onchange='setLane(this.value)' class='form-control chosen'");?></td>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<div class="input-group-addon"><?php echo $lang->kanbancard->lane;?></div>
|
||||
<?php echo html::select('lane', $lanePairs, $laneID, "class='form-control chosen'");?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->title;?></th>
|
||||
<td colspan='2'>
|
||||
<div class="input-group title-group">
|
||||
<div class="input-control has-icon-right">
|
||||
<?php echo html::input('title', $bugTitle, "class='form-control' required");?>
|
||||
<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->story->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-right" data-update-color="#title" data-provide="colorpicker">
|
||||
</div>
|
||||
</div>
|
||||
<?php if(strpos(",$showFields,", ',severity,') !== false): // begin print severity selector ?>
|
||||
<span class="input-group-addon fix-border br-0"><?php echo $lang->bug->severity;?></span>
|
||||
<?php
|
||||
$hasCustomSeverity = false;
|
||||
foreach($lang->bug->severityList as $severityKey => $severityValue)
|
||||
{
|
||||
if(empty($severityValue)) unset($lang->bug->severityList[$severityKey]);
|
||||
if(!empty($severityKey) and (string)$severityKey != (string)$severityValue)
|
||||
{
|
||||
$hasCustomSeverity = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php if($hasCustomSeverity):?>
|
||||
<?php echo html::select('severity', (array)$lang->bug->severityList, $severity, "class='form-control'");?>
|
||||
<?php else: ?>
|
||||
<div class="input-group-btn pri-selector" data-type="severity">
|
||||
<button type="button" class="btn dropdown-toggle br-0" data-toggle="dropdown">
|
||||
<span class="pri-text"><span class="label-severity" data-severity="<?php echo $severity;?>" title="<?php echo $severity;?>"></span></span> <span class="caret"></span>
|
||||
</button>
|
||||
<div class='dropdown-menu pull-right'>
|
||||
<?php echo html::select('severity', (array)$lang->bug->severityList, $severity, "class='form-control' data-provide='labelSelector' data-label-class='label-severity'");?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php endif; // end print severity selector ?>
|
||||
<?php if(strpos(",$showFields,", ',pri,') !== false): // begin print pri selector?>
|
||||
<span class="input-group-addon fix-border br-0"><?php echo $lang->bug->pri;?></span>
|
||||
<?php
|
||||
$hasCustomPri = false;
|
||||
foreach($lang->bug->priList as $priKey => $priValue)
|
||||
{
|
||||
if(!empty($priKey) and (string)$priKey != (string)$priValue)
|
||||
{
|
||||
$hasCustomPri = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$priList = $lang->bug->priList;
|
||||
if(end($priList)) unset($priList[0]);
|
||||
if(!isset($priList[$pri]))
|
||||
{
|
||||
reset($priList);
|
||||
$pri = key($priList);
|
||||
}
|
||||
?>
|
||||
<?php if($hasCustomPri):?>
|
||||
<?php echo html::select('pri', (array)$priList, $pri, "class='form-control'");?>
|
||||
<?php else: ?>
|
||||
<div class="input-group-btn pri-selector" data-type="pri">
|
||||
<button type="button" class="btn dropdown-toggle br-0" data-toggle="dropdown">
|
||||
<span class="pri-text"><span class="label-pri label-pri-<?php echo empty($pri) ? '0' : $pri?>" title="<?php echo $pri?>"><?php echo $pri?></span></span> <span class="caret"></span>
|
||||
</button>
|
||||
<div class='dropdown-menu pull-right'>
|
||||
<?php echo html::select('pri', (array)$priList, $pri, "class='form-control' data-provide='labelSelector' data-label-class='label-pri'");?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php endif; // end print pri selector ?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->steps;?></th>
|
||||
<td colspan='2'>
|
||||
<?php echo $this->fetch('user', 'ajaxPrintTemplates', 'type=bug&link=steps');?>
|
||||
<?php echo html::textarea('steps', $steps, "rows='10' class='form-control'");?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php
|
||||
$showStory = strpos(",$showFields,", ',story,') !== false;
|
||||
$showTask = strpos(",$showFields,", ',task,') !== false;
|
||||
?>
|
||||
<?php if(($showStory or $showTask)):?>
|
||||
<tr>
|
||||
<th><?php echo ($showStory) ? $lang->bug->story : $lang->bug->task;?></th>
|
||||
<?php if($showStory):?>
|
||||
<td>
|
||||
<span id='storyIdBox'><?php echo html::select('story', empty($stories) ? '' : $stories, $storyID, "class='form-control chosen'");?></span>
|
||||
</td>
|
||||
<?php endif;?>
|
||||
<?php if($showTask):?>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php if($showStory):?>
|
||||
<span class='input-group-addon task'><?php echo $lang->bug->task?></span>
|
||||
<?php endif;?>
|
||||
<?php echo html::select('task', '', $taskID, "class='form-control chosen'") . html::hidden('oldTaskID', $taskID);?>
|
||||
</div>
|
||||
</td>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
|
||||
<?php
|
||||
$showMailto = strpos(",$showFields,", ',mailto,') !== false;
|
||||
$showKeywords = strpos(",$showFields,", ',keywords,') !== false;
|
||||
?>
|
||||
<?php if($showMailto or $showKeywords):?>
|
||||
<?php $colspan = ($showMailto and $showKeywords) ? '' : "colspan='2'";?>
|
||||
<tr>
|
||||
<th><?php echo ($showMailto) ? $lang->bug->lblMailto : $lang->bug->keywords;?></th>
|
||||
<?php if($showMailto):?>
|
||||
<td>
|
||||
<div class='input-group' id='contactListGroup'>
|
||||
<?php
|
||||
echo html::select('mailto[]', $users, str_replace(' ', '', $mailto), "class='form-control picker-select' multiple");
|
||||
echo $this->fetch('my', 'buildContactLists');
|
||||
?>
|
||||
</div>
|
||||
</td>
|
||||
<?php endif;?>
|
||||
<?php if($showKeywords):?>
|
||||
<td <?php echo $colspan?>>
|
||||
<div class='input-group'>
|
||||
<?php if($showMailto):?>
|
||||
<span class='input-group-addon' id='keywordsAddonLabel'><?php echo $lang->bug->keywords;?></span>
|
||||
<?php endif;?>
|
||||
<?php echo html::input('keywords', $keywords, "class='form-control'");?>
|
||||
</div>
|
||||
</td>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr class='hide'>
|
||||
<th><?php echo $lang->bug->status;?></th>
|
||||
<td><?php echo html::hidden('status', 'active');?></td>
|
||||
<td><?php echo html::hidden('issueKey', $issueKey);?></td>
|
||||
</tr>
|
||||
<?php $this->printExtendFields('', 'table');?>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->files;?></th>
|
||||
<td colspan='2'>
|
||||
<?php
|
||||
if($caseID)
|
||||
{
|
||||
echo $this->fetch('file', 'printFiles', array('files' => $resultFiles, 'fieldset' => 'false', 'object' => null, 'method' => 'edit', 'showDelete' => true, 'showEdit' => false));
|
||||
echo html::hidden('resultFiles', implode(',', array_keys($resultFiles)));
|
||||
}
|
||||
echo $this->fetch('file', 'buildform', 'fileCount=1&percent=0.85');
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan="3" class="text-center form-actions">
|
||||
<?php $browseLink = $this->session->bugList ? $this->session->bugList : $this->inlink('browse', "productID=$productID");?>
|
||||
<?php echo html::submitButton();?>
|
||||
<?php if($caseID) echo html::a($browseLink, $lang->goback, '', 'class="btn btn-wide"');?>
|
||||
<?php if(!$caseID and $gobackLink) echo html::a($gobackLink, $lang->goback, '', 'class="btn btn-wide"');?>
|
||||
<?php if(!$caseID and !$gobackLink) echo html::backButton();?>
|
||||
<?php echo html::hidden('case', (int)$caseID) . html::hidden('caseVersion', (int)$version);?>
|
||||
<?php echo html::hidden('result', (int)$runID) . html::hidden('testtask', empty($testtask) ? 0 : $testtask->id);?>
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<?php if(empty($product->shadow)) js::set('bugModule', $lang->bug->module);?>
|
||||
<?php js::set('bugExecution', $projectModel == 'kanban' ? $lang->bug->kanban : $lang->bug->execution);?>
|
||||
<script>
|
||||
$(function(){parent.$('body.hide-modal-close').removeClass('hide-modal-close');})
|
||||
</script>
|
||||
<?php if(isonlybody()):?>
|
||||
<script>
|
||||
$('#osBox').next('.table-col').find('span').removeClass('fix-border');
|
||||
var browser = $('#osBox').next('.table-col').html();
|
||||
$('#osBox').next('.table-col').remove();
|
||||
$('#typeBox').closest('tr').append('<td>' + browser + '</td>');
|
||||
</script>
|
||||
<?php endif;?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,331 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The edit file of bug module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package bug
|
||||
* @version $Id: edit.html.php 4259 2013-01-24 05:49:40Z wyd621@gmail.com $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php
|
||||
include '../../common/view/header.html.php';
|
||||
include '../../common/view/datepicker.html.php';
|
||||
include '../../common/view/kindeditor.html.php';
|
||||
js::set('page' , 'edit');
|
||||
js::set('changeProductConfirmed' , false);
|
||||
js::set('changeExecutionConfirmed' , false);
|
||||
js::set('confirmChangeProduct' , $lang->bug->notice->confirmChangeProduct);
|
||||
js::set('planID' , $bug->plan);
|
||||
js::set('oldProjectID' , $bug->project);
|
||||
js::set('oldStoryID' , $bug->story);
|
||||
js::set('oldTaskID' , $bug->task);
|
||||
js::set('oldOpenedBuild' , $bug->openedBuild);
|
||||
js::set('oldResolvedBuild' , $bug->resolvedBuild);
|
||||
js::set('confirmUnlinkBuild' , sprintf($lang->bug->notice->confirmUnlinkBuild, zget($resolvedBuildPairs, $bug->resolvedBuild)));
|
||||
js::set('tab' , $this->app->tab);
|
||||
js::set('bugID' , $bug->id);
|
||||
js::set('bugBranch' , $bug->branch);
|
||||
js::set('isClosedBug' , $bug->status == 'closed');
|
||||
js::set('projectExecutionPairs' , $projectExecutionPairs);
|
||||
js::set('productID' , $product->id);
|
||||
js::set('released' , $lang->build->released);
|
||||
if($this->app->tab == 'execution') js::set('objectID', $bug->execution);
|
||||
if($this->app->tab == 'project') js::set('objectID', $bug->project);
|
||||
?>
|
||||
|
||||
<div class='main-content' id='mainContent'>
|
||||
<form method='post' target='hiddenwin' enctype='multipart/form-data' id='dataform ajaxForm' class='form-ajax'>
|
||||
<div class='main-header'>
|
||||
<h2>
|
||||
<span class='label label-id'><?php echo $bug->id;?></span>
|
||||
<?php echo html::a($this->createLink('bug', 'view', "bugID=$bug->id"), $bug->title, '', "class='bug-title' title='$bug->title'");?>
|
||||
<small><?php echo $lang->arrow . ' ' . $lang->bug->edit;?></small>
|
||||
</h2>
|
||||
</div>
|
||||
<div class='main-row'>
|
||||
<div class='main-col col-8'>
|
||||
<div class='cell'>
|
||||
<div class='form-group'>
|
||||
<div class="input-control 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->story->colorTag;?><i class="icon icon-close"></i></li>
|
||||
</ul>
|
||||
<input type="hidden" class="colorpicker" id="color" name="color" value="<?php echo $bug->color;?>" data-icon="color" data-wrapper="input-control-icon-right" data-update-color=".bug-title" data-provide="colorpicker">
|
||||
</div>
|
||||
<?php echo html::input('title', $bug->title, "class='form-control bug-title'");?>
|
||||
</div>
|
||||
</div>
|
||||
<div class='detail'>
|
||||
<div class='detail-title'><?php echo $lang->bug->legendSteps;?></div>
|
||||
<div class='detail-content'>
|
||||
<?php echo html::textarea('steps', htmlSpecialString($bug->steps), "rows='12' class='form-control kindeditor' hidefocus='true'");?>
|
||||
</div>
|
||||
</div>
|
||||
<div class='detail'>
|
||||
<div class='detail-title'><?php echo $lang->bug->legendComment;?></div>
|
||||
<div class='detail-content article-content'>
|
||||
<?php echo html::textarea('comment', '', "rows='5' class='form-control kindeditor' hidefocus='true'");?>
|
||||
</div>
|
||||
</div>
|
||||
<?php $this->printExtendFields($bug, 'div', 'position=left');?>
|
||||
<div class="detail">
|
||||
<div class="detail-title"><?php echo $lang->files;?></div>
|
||||
<div class='detail-content'>
|
||||
<?php echo $this->fetch('file', 'printFiles', array('files' => $bug->files, 'fieldset' => 'false', 'object' => $bug, 'method' => 'edit'));?>
|
||||
<?php echo $this->fetch('file', 'buildform');?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='actions form-actions text-center'>
|
||||
<?php
|
||||
echo html::hidden('lastEditedDate', $bug->lastEditedDate);
|
||||
echo html::submitButton();
|
||||
echo html::backButton();
|
||||
?>
|
||||
</div>
|
||||
<hr class='small' />
|
||||
<?php include '../../common/view/action.html.php';?>
|
||||
</div>
|
||||
</div>
|
||||
<div class='side-col col-4'>
|
||||
<div class='cell'>
|
||||
<div class='detail'>
|
||||
<div class='detail-title'><?php echo $lang->story->legendBasicInfo;?></div>
|
||||
<table class='table table-form'>
|
||||
<tbody>
|
||||
<tr<?php if($product->shadow) echo " class='hide'";?>>
|
||||
<th class='w-80px'><?php echo $lang->bug->product;?></th>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php echo html::select('product', $products, $product->id, "onchange='loadAll(this.value)' class='form-control chosen'");?>
|
||||
<?php if($product->type != 'normal') echo html::select('branch', $branchPairs, $bug->branch, "onchange='loadBranch();' class='form-control'");?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class='w-80px'><?php echo $lang->bug->module;?></th>
|
||||
<td>
|
||||
<div class='input-group' id='moduleIdBox'>
|
||||
<?php
|
||||
echo html::select('module', $moduleOptionMenu, $bug->module, "onchange='loadModuleRelated()' class='form-control chosen'");
|
||||
if(count($moduleOptionMenu) == 1)
|
||||
{
|
||||
echo "<span class='input-group-addon'>";
|
||||
echo html::a($this->createLink('tree', 'browse', "rootID={$product->id}&view=bug¤tModuleID=0&branch=$bug->branch", '', true), $lang->tree->manage, '', "class='text-primary' data-toggle='modal' data-type='iframe' data-width='95%'");
|
||||
echo ' ';
|
||||
echo html::a("javascript:void(0)", $lang->refreshIcon, '', "class='refresh' title='$lang->refresh' onclick='loadProductModules($product->id)'");
|
||||
echo '</span>';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='<?php if($product->shadow and isset($project) and empty($project->multiple)) echo 'hide'?>'>
|
||||
<th><?php echo $lang->bug->plan;?></th>
|
||||
<td>
|
||||
<span id="planIdBox"><?php echo html::select('plan', $plans, $bug->plan, "class='form-control chosen'");?></span>
|
||||
</td>
|
||||
</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>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->severity;?></th>
|
||||
<td><?php echo html::select('severity', $lang->bug->severityList, $bug->severity, "class='form-control chosen'");?></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>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->status;?></th>
|
||||
<td class='status-<?php echo $bug->status;?>'>
|
||||
<?php
|
||||
echo zget($lang->bug->statusList, $bug->status);
|
||||
echo html::hidden('status', $bug->status);
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->confirmed;?></th>
|
||||
<td class='confirm<?php echo $bug->confirmed;?>'><?php echo $lang->bug->confirmedList[$bug->confirmed];?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->assignedTo;?></th>
|
||||
<td>
|
||||
<?php if($bug->status == 'closed'):?>
|
||||
<?php echo ucfirst($bug->assignedTo);?>
|
||||
<?php else:?>
|
||||
<div class='input-group'>
|
||||
<?php echo html::select('assignedTo', $assignedToPairs, $bug->assignedTo, "class='form-control chosen'");?>
|
||||
<span class='input-group-btn'><?php echo html::commonButton($lang->bug->allUsers, "class='btn btn-default' onclick='loadAllUsers()' data-toggle='tooltip'");?></span>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->deadline;?></th>
|
||||
<td><?php echo html::input('deadline', helper::isZeroDate($bug->deadline) ? '' : $bug->deadline, "class='form-control form-date'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->feedbackBy;?></th>
|
||||
<td><?php echo html::input('feedbackBy', $bug->feedbackBy, "class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->notifyEmail;?></th>
|
||||
<td><?php echo html::input('notifyEmail', $bug->notifyEmail, "class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->os;?></th>
|
||||
<td><?php echo html::select('os[]', $lang->bug->osList, $bug->os, "class='form-control chosen' multiple");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->browser;?></th>
|
||||
<td><?php echo html::select('browser[]', $lang->bug->browserList, $bug->browser, "class='form-control chosen' multiple");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->keywords;?></th>
|
||||
<td><?php echo html::input('keywords', $bug->keywords, 'class="form-control"');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->mailto;?></th>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php echo html::select('mailto[]', $users, $bug->mailto, 'class="form-control picker-select" multiple');?>
|
||||
<?php echo $this->fetch('my', 'buildContactLists');?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class='detail'>
|
||||
<div class='detail-title'><?php echo !empty($project->multiple) ? $lang->bug->legendPRJExecStoryTask : $lang->bug->legendExecStoryTask;?></div>
|
||||
<table class='table table-form'>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class='w-85px'><?php echo $lang->bug->project;?></th>
|
||||
<td><span id='projectBox'><?php echo html::select('project', $projects, $bug->project, "class='form-control chosen' onchange='loadProductExecutions($bug->product, this.value)'");?></span></td>
|
||||
</tr>
|
||||
<?php $executionClass = ($execution and !$execution->multiple) ? 'hide' : '';?>
|
||||
<tr class="executionBox <?php echo $executionClass;?>" >
|
||||
<th class='w-85px' id='executionBox'><?php echo $lang->bug->execution;?></th>
|
||||
<td><span id='executionIdBox'><?php echo html::select('execution', $executions, $bug->execution, "class='form-control chosen' onchange='loadExecutionRelated(this.value)'");?></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->story;?></th>
|
||||
<td><div id='storyIdBox'><?php echo html::select('story', $stories, $bug->story, "class='form-control chosen'");?></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->task;?></th>
|
||||
<td><div id='taskIdBox'><?php echo html::select('task', $tasks, $bug->task, "class='form-control chosen'");?></div></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class='detail'>
|
||||
<div class='detail-title'><?php echo $lang->bug->legendLife;?></div>
|
||||
<table class='table table-form'>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class='thWidth'><?php echo $lang->bug->openedBy;?></th>
|
||||
<td><?php echo zget($users, $bug->openedBy);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->openedBuild;?></th>
|
||||
<td>
|
||||
<div id='openedBuildBox' class='input-group'>
|
||||
<?php echo html::select('openedBuild[]', $openedBuildPairs, $bug->openedBuild, 'size=4 multiple=multiple class="picker-select form-control"');?>
|
||||
<span class='input-group-btn'><?php echo html::commonButton($lang->bug->allBuilds, "class='btn' onclick='loadAllBuilds(this)'")?></span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->resolvedBy;?></th>
|
||||
<td><?php echo html::select('resolvedBy', $users, $bug->resolvedBy, "class='form-control chosen'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->resolvedDate;?></th>
|
||||
<td><?php echo html::input('resolvedDate', $bug->resolvedDate, "class='form-control form-datetime'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->resolvedBuild;?></th>
|
||||
<td>
|
||||
<div id='resolvedBuildBox' class='input-group'>
|
||||
<?php echo html::select('resolvedBuild', $resolvedBuildPairs, $bug->resolvedBuild, "class='form-control picker-select'");?>
|
||||
<span class='input-group-btn'><?php echo html::commonButton($lang->bug->allBuilds, "class='btn' onclick='loadAllBuilds(this)'")?></span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->resolution;?></th>
|
||||
<td><?php echo html::select('resolution', $lang->bug->resolutionList, $bug->resolution, 'class=form-control onchange=setDuplicate(this.value)');?></td>
|
||||
</tr>
|
||||
<tr id='duplicateBugBox' <?php if($bug->resolution != 'duplicate') echo "style='display:none'";?>>
|
||||
<th><?php echo $lang->bug->duplicateBug;?></th>
|
||||
<td class='required'><?php echo html::select('duplicateBug', $productBugs, $bug->duplicateBug, "class='form-control' placeholder='{$lang->bug->placeholder->duplicate}'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->closedBy;?></th>
|
||||
<td><?php echo html::select('closedBy', $users, $bug->closedBy, "class='form-control chosen'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->closedDate;?></th>
|
||||
<td><?php echo html::input('closedDate', $bug->closedDate, "class='form-control form-datetime'");?></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class='detail'>
|
||||
<div class='detail-title'><?php echo $lang->bug->legendMisc;?></div>
|
||||
<table class='table table-form'>
|
||||
<tbody>
|
||||
<tr class='text-top'>
|
||||
<th class='thWidth'><?php echo $lang->bug->relatedBug;?></th>
|
||||
<td><?php if(common::hasPriv('bug', 'linkBugs')) echo html::a('#', $lang->bug->linkBugs, '', "class='text-primary' id='linkBugsLink'");?></td>
|
||||
</tr>
|
||||
<tr <?php if(!isset($bug->relatedBugTitles)) echo 'class="hidden"';?>>
|
||||
<th></th>
|
||||
<td>
|
||||
<ul class='list-unstyled'>
|
||||
<?php
|
||||
if(isset($bug->relatedBugTitles))
|
||||
{
|
||||
foreach($bug->relatedBugTitles as $relatedBugID => $relatedBugTitle)
|
||||
{
|
||||
echo "<li><div class='checkbox-primary'>";
|
||||
echo "<input type='checkbox' checked='checked' name='relatedBug[]' value=$relatedBugID />";
|
||||
echo "<label>#{$relatedBugID} {$relatedBugTitle}</label>";
|
||||
echo '</div></li>';
|
||||
}
|
||||
}
|
||||
?>
|
||||
<span id='linkBugsBox'></span>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->testtask;?></th>
|
||||
<td id='testtaskBox'><?php echo html::select('testtask', $testtasks, $bug->testtask, 'class="form-control chosen"');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->fromCase;?></th>
|
||||
<td><?php echo html::select('case', $cases, $bug->case, 'class="form-control picker-select"');?></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php $this->printExtendFields($bug, 'div', 'position=right');?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,13 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The export view file of bug module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Congzhi Chen<congzhi@cnezsoft.com>
|
||||
* @package task
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../file/view/export.html.php';?>
|
||||
@@ -1,98 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The link bug view of bug module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Fei Chen <chenfei@cnezsoft.com>
|
||||
* @package bug
|
||||
* @version $Id: linkbugs.html.php 4129 2016-03-08 09:00:12Z chenfei $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/tablesorter.html.php';?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='main-header'>
|
||||
<h2>
|
||||
<span class='label label-id'><?php echo $bug->id;?></span>
|
||||
<?php echo html::a($this->createLink('bug', 'view', "bugID=$bug->id"), $bug->title, '_blank', "title='$bug->title'");?>
|
||||
<small class='text-muted'> <?php echo $lang->arrow . $lang->bug->linkBugs;?></small>
|
||||
</h2>
|
||||
</div>
|
||||
<div id='queryBox' data-module='bug' class='show divider'></div>
|
||||
<?php if($bugs2Link):?>
|
||||
<form class='main-table' method='post' data-ride='table' target='hiddenwin' id='linkBugsForm'>
|
||||
<table class='table tablesorter' id='bugList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="c-id">
|
||||
<div class="checkbox-primary check-all" title="<?php echo $lang->selectAll?>">
|
||||
<label></label>
|
||||
</div>
|
||||
<?php echo $lang->idAB;?>
|
||||
</th>
|
||||
<th class='c-pri' title=<?php echo $lang->pri;?>><?php echo $lang->priAB;?></th>
|
||||
<th><?php echo $lang->bug->product;?></th>
|
||||
<th><?php echo $lang->bug->title;?></th>
|
||||
<th class='c-status'><?php echo $lang->bug->abbr->status;?></th>
|
||||
<th class='c-user'><?php echo $lang->openedByAB;?></th>
|
||||
<th class='c-user'><?php echo $lang->assignedToAB;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php $bugCount = 0;?>
|
||||
<?php foreach($bugs2Link as $bug2Link):?>
|
||||
<?php $bugLink = $this->createLink('bug', 'view', "bugID=$bug2Link->id");?>
|
||||
<tr>
|
||||
<td class='c-id'>
|
||||
<div class="checkbox-primary">
|
||||
<input type='checkbox' name='bugs[]' value='<?php echo $bug2Link->id;?>'/>
|
||||
<label></label>
|
||||
</div>
|
||||
<?php printf('%03d', $bug2Link->id);?>
|
||||
</td>
|
||||
<td><span class='label-pri <?php echo 'label-pri-' . $bug2Link->pri?>' title='<?php echo zget($lang->bug->priList, $bug2Link->pri, $bug2Link->pri);?>'><?php echo zget($lang->bug->priList, $bug2Link->pri, $bug2Link->pri);?></span></td>
|
||||
<td class='nobr' title="<?php echo $products[$bug2Link->product]?>"><?php echo html::a($this->createLink('product', 'browse', "productID=$bug2Link->product&branch=$bug2Link->branch"), $products[$bug2Link->product], '_blank');?></td>
|
||||
<td class='text-left nobr' title="<?php echo $bug2Link->title?>"><?php echo html::a($bugLink, $bug2Link->title);?></td>
|
||||
<td><?php echo $this->processStatus('bug', $bug2Link);?></td>
|
||||
<td><?php echo zget($users, $bug2Link->openedBy);?></td>
|
||||
<td><?php echo zget($users, $bug2Link->assignedTo);?></td>
|
||||
</tr>
|
||||
<?php $bugCount ++;?>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class='table-footer'>
|
||||
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
|
||||
<div class="table-actions btn-toolbar"><?php if($bugCount) echo html::submitButton('', '', 'btn btn-default');?></div>
|
||||
<?php echo html::hidden('bug', $bug->id);?>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
<?php if($bugs2Link):?>
|
||||
$('#linkBugsForm').table();
|
||||
setTimeout(function(){$('#linkBugsForm .table-footer').removeClass('fixed-footer');}, 100);
|
||||
<?php endif;?>
|
||||
|
||||
$('#submit').click(function(){
|
||||
var output = '';
|
||||
$('#linkBugsForm').find('tr.checked').each(function(){
|
||||
var bugID = $(this).find('td.c-id').find('div.checkbox-primary input').attr('value');
|
||||
var bugTitle = "#" + bugID + ' ' + $(this).find('td').eq(3).attr('title');
|
||||
var checkbox = "<li><div class='checkbox-primary'><input type='checkbox' checked='checked' name='relatedBug[]' " + "value=" + bugID + " /><label>" + bugTitle + "</label></div></li>";
|
||||
|
||||
output += checkbox;
|
||||
});
|
||||
$.closeModal();
|
||||
parent.$('#linkBugsBox').html(output).closest('tr').removeClass('hidden');
|
||||
return false;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,99 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The report view file of bug module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package bug
|
||||
* @version $Id: report.html.php 4657 2013-04-17 02:01:26Z chencongzhi520@gmail.com $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<div id="mainMenu" class="clearfix">
|
||||
<div class="btn-toolbar pull-left">
|
||||
<?php echo html::a($this->createLink('bug', 'browse', "productID=$productID&branch=0&browseType=$browseType&moduleID=$moduleID"), "<i class='icon icon-back icon-sm'> </i> " . $lang->goback, '', "class='btn btn-link'");?>
|
||||
<div class='divider'></div>
|
||||
<div class='page-title'>
|
||||
<span class='text'><?php echo $lang->bug->report->common;?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainContent" class='main-row'>
|
||||
<div class='side-col col-lg'>
|
||||
<div class='panel'>
|
||||
<div class='panel-heading'>
|
||||
<div class='panel-title'><?php echo $lang->bug->report->select;?></div>
|
||||
</div>
|
||||
<div class='panel-body'>
|
||||
<form method='post' id='chartTypesForm' class='no-stash'>
|
||||
<div class='checkboxes'>
|
||||
<?php echo html::checkBox('charts', $lang->bug->report->charts, $checkedCharts, '', 'block');?>
|
||||
</div>
|
||||
<div class='btn-toolbar'>
|
||||
<?php echo html::selectAll();?>
|
||||
<?php echo html::submitButton($lang->bug->report->create, '', 'btn btn-primary');?>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class='main-col'>
|
||||
<div class='cell'>
|
||||
<div class='btn-toolbar'>
|
||||
<?php foreach($lang->report->typeList as $type => $typeName):?>
|
||||
<?php echo html::a("javascript:changeChartType(\"$type\")", ($type == 'default' ? "<i class='icon icon-list-alt muted'></i> " : "<i class='icon icon-chart-{$type} muted'></i>") . $typeName, '', "class='btn btn-link " . ($type == $chartType ? 'btn-active-line' : '') . "'")?>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<div class='text-muted' style='padding-top:5px'><?php echo str_replace('%tab%', $lang->bug->unclosed . $lang->bug->common, $lang->report->notice->help);?></div>
|
||||
<?php foreach($charts as $chartType => $chartOption):?>
|
||||
<div class='table-row chart-row'>
|
||||
<div class='main-col'>
|
||||
<div class='chart-wrapper text-center'>
|
||||
<h4><?php echo $lang->bug->report->charts[$chartType];?></h4>
|
||||
<div class='chart-canvas'><canvas id='chart-<?php echo $chartType ?>' width='<?php echo $chartOption->width;?>' height='<?php echo $chartOption->height;?>' data-responsive='true'></canvas></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class='side-col col-xl'>
|
||||
<div style="overflow:auto;" class='table-wrapper'>
|
||||
<table class='table table-condensed table-hover table-striped table-bordered table-chart' data-chart='<?php echo $chartOption->type; ?>' data-target='#chart-<?php echo $chartType ?>' data-animation='false'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='chart-label' colspan='2'><?php echo $lang->report->item;?></th>
|
||||
<th class='w-50px text-right'><?php echo $lang->report->value;?></th>
|
||||
<th class='w-60px text-right'><?php echo $lang->report->percent;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<?php
|
||||
$colorList = array();
|
||||
if(strpos(strtolower($chartType), 'pri') !== false)
|
||||
{
|
||||
$colorList = $config->bug->colorList->pri;
|
||||
}
|
||||
elseif(strpos(strtolower($chartType), 'severity') !== false)
|
||||
{
|
||||
$colorList = $config->bug->colorList->severity;
|
||||
}
|
||||
?>
|
||||
<?php foreach($datas[$chartType] as $key => $data):?>
|
||||
<tr data-color="<?php echo !empty($colorList) ? zget($colorList, $key, '#C0C0C0') : '';?>">
|
||||
<td class='chart-color'><i class='chart-color-dot'></i></td>
|
||||
<td class='chart-label text-left' title='<?php echo isset($data->title) ? $data->title : $data->name;?>'><?php echo $data->name;?></td>
|
||||
<td class='chart-value text-right'><?php echo $data->value;?></td>
|
||||
<td class='text-right'><?php echo ($data->percent * 100) . '%';?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php js::set('productID', $productID);?>
|
||||
<?php js::set('browseType', $browseType);?>
|
||||
<?php js::set('branchID', $branchID);?>
|
||||
<?php js::set('moduleID', $moduleID);?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,100 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The resolve file of bug module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package bug
|
||||
* @version $Id: resolve.html.php 4129 2013-01-18 01:58:14Z wwccss $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<?php include '../../common/view/datepicker.html.php';?>
|
||||
<?php
|
||||
js::set('page', 'resolve');
|
||||
js::set('productID', $bug->product);
|
||||
js::set('bugID', $bug->id);
|
||||
js::set('released', $lang->build->released);
|
||||
?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2>
|
||||
<span class='label label-id'><?php echo $bug->id;?></span>
|
||||
<?php echo isonlybody() ? ('<span title="' . $bug->title . '">' . $bug->title . '</span>') : html::a($this->createLink('bug', 'view', 'bug=' . $bug->id), $bug->title);?>
|
||||
|
||||
<?php if(!isonlybody()):?>
|
||||
<small><?php echo $lang->arrow . $lang->bug->resolve;?></small>
|
||||
<?php endif;?>
|
||||
</h2>
|
||||
</div>
|
||||
<form method='post' enctype='multipart/form-data' target='hiddenwin'>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th class='thWidth'><?php echo $lang->bug->resolution;?></th>
|
||||
<td class='w-p35-f'><?php echo html::select('resolution', $lang->bug->resolutionList, '', "class='form-control chosen' onchange=setDuplicate(this.value)");?></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr id='duplicateBugBox' class='hide'>
|
||||
<th><?php echo $lang->bug->duplicateBug;?></th>
|
||||
<td class='required'><?php echo html::select('duplicateBug', '', '', "class='form-control' placeholder='{$lang->bug->placeholder->duplicate}'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->resolvedBuild;?></th>
|
||||
<td id='newBuildExecutionBox' class='hidden required'>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon'><?php echo (!empty($execution) and $execution->type == 'kanban') ? $lang->bug->kanban : $lang->build->execution;?></span>
|
||||
<?php echo html::select('buildExecution', $executions, $bug->execution, "class='form-control chosen'");?>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div id='resolvedBuildBox'><?php echo html::select('resolvedBuild', $builds, '', "class='form-control picker-select'");?></div>
|
||||
<div id='newBuildBox' class='hidden required'><?php echo html::input('buildName', '', "class='form-control' placeholder='{$lang->bug->placeholder->newBuildName}'");?></div>
|
||||
</td>
|
||||
<td>
|
||||
<?php if(common::hasPriv('build', 'create')):?>
|
||||
<div class='checkbox-primary'>
|
||||
<input type='checkbox' id='createBuild' name='createBuild' value='1' />
|
||||
<label for='createBuild'><?php echo $lang->bug->createBuild;?></label>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->resolvedDate;?></th>
|
||||
<td>
|
||||
<div class='datepicker-wrapper datepicker-date'>
|
||||
<?php echo html::input('resolvedDate', helper::now(), "class='form-control form-date'");?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->assignedTo;?></th>
|
||||
<td><?php echo html::select('assignedTo', $users, $assignedTo, "class='form-control chosen'");?></td>
|
||||
</tr>
|
||||
<tr class='hide'>
|
||||
<th><?php echo $lang->bug->status;?></th>
|
||||
<td><?php echo html::hidden('status', 'resolved');?></td>
|
||||
</tr>
|
||||
<?php $this->printExtendFields($bug, 'table', "columns=3");?>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->files;?></th>
|
||||
<td colspan='2'><?php echo $this->fetch('file', 'buildform', 'fileCount=1&percent=0.85');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->comment;?></th>
|
||||
<td colspan='3'><?php echo html::textarea('comment', '', "rows='6' class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='text-center form-actions' colspan='4'><?php echo html::submitButton() . html::linkButton($lang->goback, $this->session->bugList, 'self', '', 'btn btn-wide');?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<hr class='small' />
|
||||
<div class='main'><?php include '../../common/view/action.html.php';?></div>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,503 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The view file of bug module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package bug
|
||||
* @version $Id: view.html.php 4728 2013-05-03 06:14:34Z chencongzhi520@gmail.com $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<?php js::set('sysurl', common::getSysUrl());?>
|
||||
<?php js::set('confrimToStory', $lang->bug->notice->confirmToStory);?>
|
||||
<?php js::set('tab', $app->tab);?>
|
||||
<?php js::set('bugID', $bug->id);?>
|
||||
<?php js::set('branchID', $bug->branch);?>
|
||||
<?php js::set('errorNoExecution', $lang->bug->noExecution);?>
|
||||
<?php js::set('errorNoProject', $lang->bug->noProject);?>
|
||||
<?php $browseLink = $app->session->bugList ? $app->session->bugList : inlink('browse', "productID=$bug->product");?>
|
||||
<?php if(strpos($_SERVER["QUERY_STRING"], 'isNotice=1') === false):?>
|
||||
<div id="mainMenu" class="clearfix">
|
||||
<div class="btn-toolbar pull-left">
|
||||
<?php if(!isonlybody()):?>
|
||||
<?php echo html::a($browseLink, '<i class="icon icon-back icon-sm"></i> ' . $lang->goback, '', "class='btn btn-secondary'");?>
|
||||
<div class="divider"></div>
|
||||
<?php endif;?>
|
||||
<div class="page-title">
|
||||
<span class="label label-id"><?php echo $bug->id?></span>
|
||||
<span class="text" title="<?php echo $bug->title;?>" style='color: <?php echo $bug->color; ?>'><?php echo $bug->title;?></span>
|
||||
<?php if($bug->deleted):?>
|
||||
<span class='label label-danger'><?php echo $lang->bug->deleted;?></span>
|
||||
<?php endif; ?>
|
||||
<?php if($bug->case):?>
|
||||
<small><?php echo html::a(helper::createLink('testcase', 'view', "caseID=$bug->case&version=$bug->caseVersion", '', true), "<i class='icon icon-sitemap'></i> {$lang->bug->fromCase}$lang->hyphen$bug->case", '', isonlybody() ? '' : "data-toggle='modal' data-type='iframe' data-width='80%'");?></small>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php if(!isonlybody()):?>
|
||||
<div class="btn-toolbar pull-right">
|
||||
<?php if(common::canModify('product', $product)):?>
|
||||
<?php $tab = strpos('|execution|project|qa|', $this->app->tab) !== false ? $this->app->tab : 'qa';?>
|
||||
<?php if($this->app->tab != 'product') common::printLink('bug', 'create', "productID={$bug->product}&branch={$bug->branch}&extra=moduleID={$bug->module},projectID={$bug->project},executionID={$bug->execution}", "<i class='icon icon-plus'></i> " . $lang->bug->create, '', "class='btn btn-primary' data-app='$tab'"); ?>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php if($this->app->getViewType() == 'xhtml'):?>
|
||||
<div id="scrollContent">
|
||||
<?php endif;?>
|
||||
<?php endif;?>
|
||||
<div id="mainContent" class="main-row">
|
||||
<div class="main-col col-8">
|
||||
<div class="cell">
|
||||
<div class="detail">
|
||||
<div class="detail-title"><?php echo $lang->bug->legendSteps;?></div>
|
||||
<div class="detail-content article-content">
|
||||
<?php
|
||||
$tplStep = strip_tags(trim($lang->bug->tplStep));
|
||||
$steps = str_replace('<p>' . $tplStep, '<p class="stepTitle">' . $tplStep . '</p><p>', $bug->steps);
|
||||
|
||||
$tplResult = strip_tags(trim($lang->bug->tplResult));
|
||||
$steps = str_replace('<p>' . $tplResult, '<p class="stepTitle">' . $tplResult . '</p><p>', $steps);
|
||||
|
||||
$tplExpect = strip_tags(trim($lang->bug->tplExpect));
|
||||
$steps = str_replace('<p>' . $tplExpect, '<p class="stepTitle">' . $tplExpect . '</p><p>', $steps);
|
||||
|
||||
$steps = str_replace('<p></p>', '', $steps);
|
||||
echo $steps;
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<?php echo $this->fetch('file', 'printFiles', array('files' => $bug->files, 'fieldset' => 'true', 'object' => $bug, 'method' => 'view', 'showDelete' => false));?>
|
||||
<?php
|
||||
$canBeChanged = common::canBeChanged('bug', $bug);
|
||||
if($canBeChanged) $actionFormLink = $this->createLink('action', 'comment', "objectType=bug&objectID=$bug->id");
|
||||
?>
|
||||
</div>
|
||||
<?php $this->printExtendFields($bug, 'div', "position=left&inForm=0&inCell=1");?>
|
||||
<?php if($this->app->getViewType() != 'xhtml'):?>
|
||||
<div class="cell"><?php include '../../common/view/action.html.php';?></div>
|
||||
<?php endif;?>
|
||||
<?php
|
||||
$params = "bugID=$bug->id";
|
||||
$extraParams = "extras=bugID=$bug->id";
|
||||
if($this->app->tab == 'project') $extraParams .= ",projectID={$bug->project}";
|
||||
if($this->app->tab == 'execution') $extraParams .= ",executionID={$bug->execution}";
|
||||
$copyParams = "productID=$productID&branch=$bug->branch&$extraParams";
|
||||
$convertParams = "productID=$productID&branch=$bug->branch&moduleID=0&from=bug&bugID=$bug->id";
|
||||
?>
|
||||
<div class='main-actions'>
|
||||
<div class="btn-toolbar">
|
||||
<?php common::printBack($browseLink);?>
|
||||
<?php if(!$bug->deleted):?>
|
||||
<div class='divider'></div>
|
||||
<?php echo $this->bug->buildOperateMenu($bug, 'view');?>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="side-col col-4">
|
||||
<div class="cell">
|
||||
<div class='tabs'>
|
||||
<ul class='nav nav-tabs'>
|
||||
<li class='active'><a href='#legendBasicInfo' data-toggle='tab'><?php echo $lang->bug->legendBasicInfo;?></a></li>
|
||||
<li><a href='#legendExecStoryTask' data-toggle='tab'><?php echo !empty($project->multiple) ? $lang->bug->legendPRJExecStoryTask : $lang->bug->legendExecStoryTask;?></a></li>
|
||||
</ul>
|
||||
<div class='tab-content'>
|
||||
<div class='tab-pane active' id='legendBasicInfo'>
|
||||
<table class="table table-data">
|
||||
<tbody>
|
||||
<?php if(empty($product->shadow)):?>
|
||||
<tr valign='middle'>
|
||||
<th class='thWidth'><?php echo $lang->bug->product;?></th>
|
||||
<td><?php if(!common::printLink('product', 'view', "productID=$bug->product", $product->name, '', "data-app='product'")) echo $product->name;?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<?php if($product->type != 'normal'):?>
|
||||
<tr>
|
||||
<th class='thWidth'><?php echo sprintf($lang->product->branch, $lang->product->branchName[$product->type]);?></th>
|
||||
<td><?php if(!common::printLink('bug', 'browse', "productID=$bug->product&branch=$bug->branch", $branchName)) echo $branchName;?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th class='thWidth'><?php echo $lang->bug->module;?></th>
|
||||
<?php
|
||||
$moduleTitle = '';
|
||||
ob_start();
|
||||
if(empty($modulePath))
|
||||
{
|
||||
$moduleTitle .= '/';
|
||||
echo "/";
|
||||
}
|
||||
else
|
||||
{
|
||||
if($bugModule->branch and isset($branches[$bugModule->branch]))
|
||||
{
|
||||
$moduleTitle .= $branches[$bugModule->branch] . '/';
|
||||
echo $branches[$bugModule->branch] . $lang->arrow;
|
||||
}
|
||||
|
||||
foreach($modulePath as $key => $module)
|
||||
{
|
||||
$moduleTitle .= $module->name;
|
||||
if(!common::printLink('bug', 'browse', "productID=$bug->product&branch=$module->branch&browseType=byModule¶m=$module->id", $module->name, '', "data-app='qa'")) 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->bug->fromCase;?></th>
|
||||
<td><?php if($bug->case) echo html::a(helper::createLink('testcase', 'view', "caseID=$bug->case&version=$bug->caseVersion", '', true), "<i class='icon icon-sitemap'></i> {$lang->bug->fromCase}$lang->hyphen$bug->case", '', isonlybody() ? '' : "data-toggle='modal' data-type='iframe' data-width='80%'");?></td>
|
||||
</tr>
|
||||
<tr valign='middle' class='<?php if($product->shadow and isset($project) and empty($project->multiple)) echo 'hide'?>'>
|
||||
<th><?php echo $lang->bug->plan;?></th>
|
||||
<td><?php if(!$bug->plan or !common::printLink('productplan', 'view', "planID=$bug->plan&type=bug", $bug->planName)) echo $bug->planName;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->type;?></th>
|
||||
<td><?php if(isset($lang->bug->typeList[$bug->type])) echo $lang->bug->typeList[$bug->type]; else echo $bug->type;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<?php
|
||||
$hasCustomSeverity = false;
|
||||
foreach($lang->bug->severityList as $severityKey => $severityValue)
|
||||
{
|
||||
if(!empty($severityKey) and (string)$severityKey != (string)$severityValue)
|
||||
{
|
||||
$hasCustomSeverity = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
?>
|
||||
<th><?php echo $lang->bug->severity;?></th>
|
||||
<td>
|
||||
<?php if($hasCustomSeverity):?>
|
||||
<span class='label-severity-custom' data-severity='<?php echo $bug->severity;?>' title='<?php echo zget($lang->bug->severityList, $bug->severity);?>'><?php echo zget($lang->bug->severityList, $bug->severity, $bug->severity);?></span>
|
||||
<?php else:?>
|
||||
<span class='label-severity' data-severity='<?php echo $bug->severity;?>' title='<?php echo zget($lang->bug->severityList, $bug->severity)?>'></span>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->pri;?></th>
|
||||
<td>
|
||||
<?php if($bug->pri):?>
|
||||
<span class='label-pri <?php echo 'label-pri-' . $bug->pri;?>' title='<?php echo zget($lang->bug->priList, $bug->pri);?>'><?php echo zget($lang->bug->priList, $bug->pri)?></span>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->status;?></th>
|
||||
<td><span class='status-bug status-<?php echo $bug->status?>'><?php echo $this->processStatus('bug', $bug);?></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->activatedCount;?></th>
|
||||
<td><?php echo $bug->activatedCount;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->activatedDate;?></th>
|
||||
<td><?php echo $bug->activatedDate;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->confirmed;?></th>
|
||||
<td class='confirm<?php echo $bug->confirmed;?>'><?php echo $lang->bug->confirmedList[$bug->confirmed];?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->lblAssignedTo;?></th>
|
||||
<td><?php if($bug->assignedTo) echo zget($users, $bug->assignedTo) . $lang->at . $bug->assignedDate;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->deadline;?></th>
|
||||
<td>
|
||||
<?php
|
||||
if($bug->deadline) echo helper::isZeroDate($bug->deadline) ? '' : $bug->deadline;
|
||||
if(isset($bug->delay)) printf($lang->bug->notice->delayWarning, $bug->delay);
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->feedbackBy;?></th>
|
||||
<td><?php echo $bug->feedbackBy;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->notifyEmail;?></th>
|
||||
<td><?php echo $bug->notifyEmail;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->os;?></th>
|
||||
<td>
|
||||
<?php $osList = explode(',', $bug->os);?>
|
||||
<?php if($osList):?>
|
||||
<p class='osContent'>
|
||||
<?php foreach($osList as $os):?>
|
||||
<?php if($os) echo "<span class='label label-outline'>" . zget($lang->bug->osList, $os) . "</span>";?>
|
||||
<?php endforeach;?>
|
||||
</p>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->browser;?></th>
|
||||
<td>
|
||||
<?php $browserList = explode(',', $bug->browser);?>
|
||||
<?php if($browserList):?>
|
||||
<p class='browserContent'>
|
||||
<?php foreach($browserList as $browser):?>
|
||||
<?php if($browser) echo "<span class='label label-outline'>" . zget($lang->bug->browserList, $browser) . "</span>";?>
|
||||
<?php endforeach;?>
|
||||
</p>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->keywords;?></th>
|
||||
<td><?php echo $bug->keywords;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->mailto;?></th>
|
||||
<td>
|
||||
<?php
|
||||
if(!empty($bug->mailto))
|
||||
{
|
||||
foreach(explode(',', str_replace(' ', '', $bug->mailto)) as $account) echo ' ' . zget($users, $account);
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class='tab-pane' id='legendExecStoryTask'>
|
||||
<table class='table table-data'>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class='w-70px'><?php echo $lang->bug->project;?></th>
|
||||
<td><?php if($bug->project) echo html::a($this->createLink('project', 'view', "projectID=$bug->project"), $bug->projectName);?></td>
|
||||
</tr>
|
||||
<?php if(!empty($project->multiple)):?>
|
||||
<tr>
|
||||
<th class='w-70px'><?php echo (isset($project->model) and $project->model == 'kanban') ? $lang->bug->kanban : $lang->bug->execution;?></th>
|
||||
<td><?php if($bug->execution) echo html::a($this->createLink('execution', 'browse', "executionID=$bug->execution"), $bug->executionName);?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr class='nofixed'>
|
||||
<th><?php echo $lang->bug->story;?></th>
|
||||
<td>
|
||||
<?php
|
||||
if($bug->story) echo html::a($this->createLink('story', 'view', "storyID=$bug->story", '', true), "#$bug->story $bug->storyTitle", '', "class='iframe' data-width='80%'");
|
||||
if($bug->storyStatus == 'active' and $bug->latestStoryVersion > $bug->storyVersion and common::hasPriv('bug', 'confirmStoryChange'))
|
||||
{
|
||||
echo "(<span class='warning'>{$lang->story->changed}</span> ";
|
||||
echo html::a($this->createLink('bug', 'confirmStoryChange', "bugID=$bug->id"), $lang->confirm, 'hiddenwin');
|
||||
echo ")";
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->task;?></th>
|
||||
<td><?php if($bug->task) echo html::a($this->createLink('task', 'view', "taskID=$bug->task", '', true), $bug->taskName, '', "class='iframe' data-width='80%'");?></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cell">
|
||||
<div class='tabs'>
|
||||
<ul class='nav nav-tabs'>
|
||||
<li class='active'><a href='#legendLife' data-toggle='tab'><?php echo $lang->bug->legendLife;?></a></li>
|
||||
<li><a href='#legendMisc' data-toggle='tab'><?php echo $lang->bug->legendMisc;?></a></li>
|
||||
</ul>
|
||||
<div class='tab-content'>
|
||||
<div class='tab-pane active' id='legendLife'>
|
||||
<table class="table table-data">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class='thWidth'><?php echo $lang->bug->openedBy;?></th>
|
||||
<td> <?php echo zget($users, $bug->openedBy) . $lang->at . $bug->openedDate;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->openedBuild;?></th>
|
||||
<td>
|
||||
<?php
|
||||
if($bug->openedBuild)
|
||||
{
|
||||
$openedBuilds = explode(',', $bug->openedBuild);
|
||||
foreach($openedBuilds as $openedBuild)
|
||||
{
|
||||
if(!$openedBuild) continue;
|
||||
isset($builds[$openedBuild]) ? print($builds[$openedBuild] . '<br />') : print($openedBuild . '<br />');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
echo $bug->openedBuild;
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->lblResolved;?></th>
|
||||
<td><?php if($bug->resolvedBy) echo zget($users, $bug->resolvedBy) . $lang->at . $bug->resolvedDate;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->resolvedBuild;?></th>
|
||||
<td><?php if(isset($builds[$bug->resolvedBuild])) echo $builds[$bug->resolvedBuild]; else echo $bug->resolvedBuild;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->resolution;?></th>
|
||||
<td class='resolution'>
|
||||
<?php
|
||||
echo isset($lang->bug->resolutionList[$bug->resolution]) ? $lang->bug->resolutionList[$bug->resolution] : $bug->resolution;
|
||||
if(isset($bug->duplicateBugTitle)) echo " #$bug->duplicateBug:" . html::a($this->createLink('bug', 'view', "bugID=$bug->duplicateBug", '', true), $bug->duplicateBugTitle, '', "title='{$bug->duplicateBugTitle}' class='iframe' data-width='80%'");
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->closedBy;?></th>
|
||||
<td><?php if($bug->closedBy) echo zget($users, $bug->closedBy) . $lang->at . $bug->closedDate;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->lblLastEdited;?></th>
|
||||
<td><?php if($bug->lastEditedBy) echo zget($users, $bug->lastEditedBy, $bug->lastEditedBy) . $lang->at . $bug->lastEditedDate?></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class='tab-pane' id='legendMisc'>
|
||||
<table class="table table-data">
|
||||
<tbody>
|
||||
<tr class='text-top'>
|
||||
<th class='w-90px'><?php echo $lang->bug->relatedBug;?></th>
|
||||
<td>
|
||||
<?php
|
||||
if(isset($bug->relatedBugTitles))
|
||||
{
|
||||
foreach($bug->relatedBugTitles as $relatedBugID => $relatedBugTitle)
|
||||
{
|
||||
echo html::a($this->createLink('bug', 'view', "bugID=$relatedBugID", '', true), "#$relatedBugID $relatedBugTitle", '', "class='iframe' data-width='80%'") . '<br />';
|
||||
}
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php if($bug->case):?>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->fromCase;?></th>
|
||||
<td><?php echo html::a($this->createLink('testcase', 'view', "caseID=$bug->case&caseVersion=$bug->caseVersion", '', true), "#$bug->case $bug->caseTitle", '', "class='iframe' data-width='80%'");?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<?php if($bug->toCases):?>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->toCase;?></th>
|
||||
<td>
|
||||
<?php
|
||||
foreach($bug->toCases as $caseID => $case)
|
||||
{
|
||||
echo '<p style="margin-bottom:0;">' . html::a($this->createLink('testcase', 'view', "caseID=$caseID", '', true), $case, '', "class='iframe' data-width='80%'") . '</p>';
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<?php if($bug->toStory != 0):?>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->toStory;?></th>
|
||||
<td><?php echo html::a($this->createLink('story', 'view', "storyID=$bug->toStory", '', true), "#$bug->toStory $bug->toStoryTitle", '', "class='iframe' data-width='80%'");?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<?php if($bug->toTask != 0):?>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->toTask;?></th>
|
||||
<td><?php echo html::a($this->createLink('task', 'view', "taskID=$bug->toTask", '', true), "#$bug->toTask $bug->toTaskTitle", '', "class='iframe' data-width='80%'");?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<?php if(helper::hasFeature('devops')):?>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->linkMR;?></th>
|
||||
<td>
|
||||
<?php
|
||||
$canViewMR = common::hasPriv('mr', 'view');
|
||||
foreach($bug->linkMRTitles as $MRID => $linkMRTitle)
|
||||
{
|
||||
echo ($canViewMR ? html::a($this->createLink('mr', 'view', "MRID=$MRID"), "#$MRID $linkMRTitle") : "#$MRID $linkMRTitle") . '<br />';
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->linkCommit;?></th>
|
||||
<td>
|
||||
<?php
|
||||
$canViewRevision = common::hasPriv('repo', 'revision');
|
||||
foreach($linkCommits as $commit)
|
||||
{
|
||||
$revision = substr($commit->revision, 0, 10);
|
||||
$commitTitle = $revision . ' ' . $commit->comment;
|
||||
echo "<div class='link-commit' title='$commitTitle'>" . ($canViewRevision ? html::a($this->createLink('repo', 'revision', "repoID={$commit->repo}&objectID=0&revision={$commit->revision}"), $revision) . " $commit->comment" : $commitTitle) . '</div>';
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php $this->printExtendFields($bug, 'div', "position=right&inForm=0&inCell=1");?>
|
||||
</div>
|
||||
</div>
|
||||
<?php if($this->app->getViewType() == 'xhtml'):?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
|
||||
<div id="mainActions" class='main-actions'>
|
||||
<?php common::printPreAndNext($preAndNext);?>
|
||||
</div>
|
||||
<div class="modal fade" id="toTask">
|
||||
<div class="modal-dialog mw-500px select-project-modal">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title"><?php echo $lang->bug->selectProjects;?></h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->project;?></th>
|
||||
<td class='required'><?php echo html::select('taskProjects', $projects, '', "class='form-control chosen' onchange='loadProductExecutions({$productID}, this.value)'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th id='executionHead'><?php echo $lang->bug->execution;?></th>
|
||||
<td id='executionBox' class='required'><?php echo html::select('execution', '', '', "class='form-control chosen'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan='2' class='text-center'>
|
||||
<?php echo html::commonButton($lang->bug->nextStep, "id='toTaskButton'", 'btn btn-primary btn-wide');?>
|
||||
<?php echo html::commonButton($lang->cancel, "id='cancelButton' data-dismiss='modal'", 'btn btn-default btn-wide');?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
</script>
|
||||
<?php include '../../common/view/syntaxhighlighter.html.php';?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,117 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The create view of build module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package build
|
||||
* @version $Id: create.html.php 4728 2013-05-03 06:14:34Z chencongzhi520@gmail.com $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2><?php echo $lang->build->create;?></h2>
|
||||
</div>
|
||||
<form class='load-indicator main-form form-ajax' id='dataform' method='post' enctype='multipart/form-data'>
|
||||
<table class='table table-form'>
|
||||
<tr class="<?php echo ($app->tab == 'project' and !empty($multipleProject)) ? '' : 'hidden';?>">
|
||||
<th class='w-120px'><?php echo $lang->build->integrated;?></th>
|
||||
<td><?php echo html::radio('isIntegrated', $lang->build->isIntegrated, 'no');?></td>
|
||||
</tr>
|
||||
<tr class="<?php echo !empty($multipleProject) ? '' : 'hidden';?>">
|
||||
<th><?php echo $lang->executionCommon;?></th>
|
||||
<td><?php echo html::select('execution', $executions, $executionID, "onchange='loadProducts(this.value);' class='form-control chosen' required");?></td>
|
||||
</tr>
|
||||
<tr class="<?php echo $hidden;?>">
|
||||
<th class='w-120px'><?php echo $lang->build->product;?></th>
|
||||
<?php if(!empty($products) || !$executionID):?>
|
||||
<td>
|
||||
<div class='input-group' id='productBox'>
|
||||
<?php echo html::select('product', $products, empty($product) ? '' : $product->id, "onchange='loadBranches(this.value);' class='form-control chosen' required");?>
|
||||
</div>
|
||||
</td>
|
||||
<?php else:?>
|
||||
<td>
|
||||
<div class='input-group' id='productBox'>
|
||||
<?php printf($lang->build->noProduct, $this->createLink('execution', 'manageproducts', "executionID=$executionID&from=buildCreate", '', 'true'), $app->tab);?>
|
||||
</div>
|
||||
</td>
|
||||
<?php endif;?>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class='<?php if((!empty($product) and $product->type == 'normal') or empty($product)) echo 'hidden'?>'>
|
||||
<?php
|
||||
if(empty($product)) $product = new stdclass();
|
||||
$productType = zget($product, 'type', 'normal');
|
||||
$productBranches = zget($product, 'branches', array());
|
||||
?>
|
||||
<th class='w-120px'><?php echo $productType == 'normal' ? '' : $lang->product->branchName[$productType]?></th>
|
||||
<td>
|
||||
<div class='input-group' id='branchBox'>
|
||||
<?php echo html::select('branch[]', $branches, key($productBranches), "class='form-control chosen' multiple required"); ?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='hide'>
|
||||
<th class='w-120px'><?php echo $lang->build->builds;?></th>
|
||||
<td id='buildBox'><?php echo html::select('builds[]', array(), '', "class='form-control chosen' multiple data-placeholder='{$lang->build->placeholder->multipleSelect}'");?></td>
|
||||
<td>
|
||||
<icon class='icon icon-help' data-toggle='popover' data-trigger='focus hover' data-placement='right' data-tip-class='text-muted popover-sm' data-content="<?php echo $lang->build->notice->autoRelation;?>"></icon>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class='w-120px'><?php echo $lang->build->name;?></th>
|
||||
<td><?php echo html::input('name', '', "class='form-control' required");?></td>
|
||||
<td class='text-muted' id='lastBuildBox'>
|
||||
<?php if($lastBuild):?>
|
||||
<div class='help-block'> <?php echo $lang->build->last . ': <a class="code label label-badge label-light" id="lastBuildBtn">' . $lastBuild->name . '</a>';?></div>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->build->builder;?></th>
|
||||
<td><?php echo html::select('builder', $users, $app->user->account, 'class="form-control chosen" required');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->build->date;?></th>
|
||||
<td><?php echo html::input('date', helper::today(), "class='form-control form-date' required");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->build->scmPath;?></th>
|
||||
<td colspan='2'><?php echo html::input('scmPath', '', "class='form-control' placeholder='{$lang->build->placeholder->scmPath}'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->build->filePath;?></th>
|
||||
<td colspan='2'><?php echo html::input('filePath', '', "class='form-control' placeholder='{$lang->build->placeholder->filePath}'");?></td>
|
||||
</tr>
|
||||
<?php $this->printExtendFields('', 'table', 'columns=2');?>
|
||||
<tr>
|
||||
<th><?php echo $lang->build->files;?></th>
|
||||
<td colspan='2'><?php echo $this->fetch('file', 'buildForm');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->build->desc;?></th>
|
||||
<td colspan='2'><?php echo html::textarea('desc', '', "rows='10' class='form-control kindeditor' hidefocus='true'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3" class="text-center form-actions">
|
||||
<?php echo html::submitButton();?>
|
||||
<?php echo html::hidden('project', $projectID);?>
|
||||
<?php echo html::backButton();?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<?php js::set('productGroups', $productGroups);?>
|
||||
<?php js::set('projectID', $projectID);?>
|
||||
<?php js::set('executionID', $executionID);?>
|
||||
<?php js::set('currentTab', $this->app->tab);?>
|
||||
<?php js::set('multipleSelect', $lang->build->placeholder->multipleSelect);?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,117 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The edit view of build module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package build
|
||||
* @version $Id: edit.html.php 4728 2013-05-03 06:14:34Z chencongzhi520@gmail.com $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2>
|
||||
<span class='label-id'><?php echo $build->id;?></span>
|
||||
<?php echo html::a($this->createLink('build', 'view', 'build=' . $build->id), $build->name, '', "title='$build->name'");?>
|
||||
<small><?php echo $lang->arrow . $lang->build->edit;?></small>
|
||||
</h2>
|
||||
</div>
|
||||
<form class='load-indicator main-form form-ajax' method='post' id='dataform' enctype='multipart/form-data'>
|
||||
<table class='table table-form'>
|
||||
<tr class="<?php echo $hidden;?>">
|
||||
<th class='w-120px'><?php echo $lang->build->product;?></th>
|
||||
<td>
|
||||
<?php
|
||||
$disabled = '';
|
||||
if($build->stories or $build->bugs or $testtaskID) $disabled = 'disabled';
|
||||
?>
|
||||
<div class='input-group'>
|
||||
<?php echo html::select('product', $products, $build->product, "onchange='loadBranches(this.value);' class='form-control chosen' $disabled required");?>
|
||||
</div>
|
||||
</td>
|
||||
<td><?php if($disabled) echo $lang->build->notice->changeProduct;?></td>
|
||||
</tr>
|
||||
<tr class='<?php if((!empty($product) and $product->type == 'normal') or empty($product) or empty($build->execution)) echo 'hidden'?>'>
|
||||
<?php
|
||||
if(empty($product)) $product = new stdclass();
|
||||
$productType = zget($product, 'type', 'normal');
|
||||
$productBranches = zget($product, 'branches', array());
|
||||
?>
|
||||
<th class='w-120px'><?php echo $product->type == 'normal' ? '' : $lang->product->branchName[$product->type]?></th>
|
||||
<td>
|
||||
<div class='input-group' id='branchBox'>
|
||||
<?php echo html::select('branch[]', $branchTagOption, $build->branch, "class='form-control chosen' multiple required"); ?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php $disabled = $testtaskID ? 'disabled' : '';?>
|
||||
<?php if(!$build->execution):?>
|
||||
<tr>
|
||||
<th class='w-120px'><?php echo $lang->build->builds;?></th>
|
||||
<td id='buildBox'><?php echo html::select('builds[]', $builds, $build->builds, "class='form-control chosen' multiple $disabled data-placeholder='{$lang->build->placeholder->multipleSelect}'");?></td>
|
||||
<td>
|
||||
<?php if($disabled):?>
|
||||
<?php echo $lang->build->notice->changeBuilds;?>
|
||||
<?php else:?>
|
||||
<?php echo $lang->build->notice->autoRelation;?>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php elseif(!empty($multipleProject)):?>
|
||||
<th class='w-120px'><?php echo $executionType ? $lang->build->executionAB : $lang->build->execution;?></th>
|
||||
<td id='executionsBox'><?php echo html::select('execution', $executions, $build->execution, "class='form-control chosen' required $disabled");?></td>
|
||||
<td><?php if($disabled) echo $lang->build->notice->changeExecution;?></td>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th class='w-120px'><?php echo $lang->build->name;?></th>
|
||||
<td><?php echo html::input('name', $build->name, "class='form-control' required");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->build->builder;?></th>
|
||||
<td><?php echo html::select('builder', $users, $build->builder, 'class="form-control chosen" required');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->build->date;?></th>
|
||||
<td><?php echo html::input('date', $build->date, "class='form-control form-date' required");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->build->scmPath;?></th>
|
||||
<td colspan='2'><?php echo html::input('scmPath', $build->scmPath, "class='form-control' placeholder='{$lang->build->placeholder->scmPath}'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->build->filePath;?></th>
|
||||
<td colspan='2'><?php echo html::input('filePath', $build->filePath, "class='form-control' placeholder='{$lang->build->placeholder->filePath}'");?></td>
|
||||
</tr>
|
||||
<?php $this->printExtendFields($build, 'table', 'columns=2');?>
|
||||
<tr>
|
||||
<th><?php echo $lang->build->files;?></th>
|
||||
<td colspan='2'><?php echo $this->fetch('file', 'buildForm');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->build->desc;?></th>
|
||||
<td colspan='2'><?php echo html::textarea('desc', htmlSpecialString($build->desc), "rows='10' class='form-control kindeditor' hidefocus='true'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3" class="text-center form-actions">
|
||||
<?php echo html::submitButton();?>
|
||||
<?php echo html::backButton();?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<?php js::set('productGroups', $productGroups)?>
|
||||
<?php js::set('projectID', $build->project)?>
|
||||
<?php js::set('oldBranch', $oldBranch)?>
|
||||
<?php js::set('builds', $build->builds)?>
|
||||
<?php js::set('buildID', $build->id)?>
|
||||
<?php js::set('executionID', $build->execution)?>
|
||||
<?php js::set('currentTab', $this->app->tab);?>
|
||||
<?php js::set('multipleSelect', $lang->build->placeholder->multipleSelect);?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,79 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The link bug view of build module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package build
|
||||
* @version $Id: linkbug.html.php 5096 2013-07-11 07:02:43Z chencongzhi520@gmail.com $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<div id='queryBox' data-module='bug' class='show'></div>
|
||||
<div id='unlinkBugList'>
|
||||
<form class='main-table table-bug' data-ride='table' method='post' id='unlinkedBugsForm' target='hiddenwin' action='<?php echo $this->createLink('build', 'linkBug', "buildID={$build->id}&browseType=$browseType¶m=$param");?>'>
|
||||
<div class='table-header hl-primary text-primary strong'>
|
||||
<?php echo html::icon('unlink');?> <?php echo $lang->productplan->unlinkedBugs;?>
|
||||
</div>
|
||||
<table class='table tablesorter'>
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
<th class='c-id text-left'>
|
||||
<?php if($allBugs):?>
|
||||
<div class="checkbox-primary check-all tablesorter-noSort" title="<?php echo $lang->selectAll?>">
|
||||
<label></label>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php echo $lang->idAB;?>
|
||||
</th>
|
||||
<th class='c-status' title=<?php echo $lang->pri;?>> <?php echo $lang->priAB;?></th>
|
||||
<th class='text-left'><?php echo $lang->bug->title;?></th>
|
||||
<th class='c-user'> <?php echo $lang->openedByAB;?></th>
|
||||
<th class='c-user'> <?php echo $lang->bug->resolvedBy;?></th>
|
||||
<th class='c-status'> <?php echo $lang->statusAB;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class='text-center'>
|
||||
<?php $unlinkedCount = 0;?>
|
||||
<?php foreach($allBugs as $bug):?>
|
||||
<tr>
|
||||
<td class='c-id text-left'>
|
||||
<?php echo html::checkbox('bugs', array($bug->id => sprintf('%03d', $bug->id)), ($bug->status == 'resolved' or $bug->status == 'closed') ? $bug->id : '');?>
|
||||
</td>
|
||||
<td><span class='label-pri label-pri-<?php echo $bug->pri;?>' title='<?php echo zget($lang->bug->priList, $bug->pri, $bug->pri);?>'><?php echo zget($lang->bug->priList, $bug->pri, $bug->pri)?></span></td>
|
||||
<td class='text-left nobr' title='<?php echo $bug->title?>'><?php echo html::a($this->createLink('bug', 'view', "bugID=$bug->id", '', true), $bug->title, '', "data-toggle='modal' data-type='iframe' data-width='90%'");?></td>
|
||||
<td><?php echo zget($users, $bug->openedBy);?></td>
|
||||
<td style='overflow:visible;padding-top:1px;padding-bottom:1px;'><?php echo ($bug->status == 'resolved' or $bug->status == 'closed') ? zget($users, $bug->resolvedBy) : html::select("resolvedBy[{$bug->id}]", $users, $this->app->user->account, "class='form-control chosen'");?></td>
|
||||
<td>
|
||||
<span class='status-bug status-<?php echo $bug->status?>'>
|
||||
<?php echo $this->processStatus('bug', $bug);?>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<?php $unlinkedCount++;?>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php if($unlinkedCount):?>
|
||||
<div class='table-footer'>
|
||||
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
|
||||
<div class="table-actions btn-toolbar">
|
||||
<?php echo html::submitButton($lang->build->linkBug, '', 'btn btn-secondary');?>
|
||||
</div>
|
||||
<div class="btn-toolbar">
|
||||
<?php echo html::a($this->createLink(($this->app->tab == 'project' ? 'projectbuild' : 'build'), 'view', "buildID={$build->id}&type=bug") . "#app={$app->tab}", $lang->goback, '', "class='btn'");?>
|
||||
</div>
|
||||
<div class='table-statistic'></div>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
$('#unlinkBugList .tablesorter').sortTable();
|
||||
setForm();
|
||||
});
|
||||
</script>
|
||||
@@ -1,89 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The link story view of build module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package build
|
||||
* @version $Id: linkstory.html.php 5096 2013-07-11 07:02:43Z chencongzhi520@gmail.com $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<div id='queryBox' data-module='story' class='show'></div>
|
||||
<div id='unlinkStoryList'>
|
||||
<form class='main-table table-story' data-ride='table' method='post' id='unlinkedStoriesForm' target='hiddenwin' action='<?php echo $this->createLink('build', 'linkStory', "buildID={$build->id}&browseType=$browseType¶m=$param");?>'>
|
||||
<div class='table-header hl-primary text-primary strong'>
|
||||
<?php echo html::icon('unlink');?> <?php echo $lang->productplan->unlinkedStories;?>
|
||||
</div>
|
||||
<table class='table tablesorter'>
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
<th class='c-id text-left'>
|
||||
<?php if($allStories):?>
|
||||
<div class="checkbox-primary check-all tablesorter-noSort" title="<?php echo $lang->selectAll?>">
|
||||
<label></label>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php echo $lang->idAB;?>
|
||||
</th>
|
||||
<th class='c-pri' title=<?php echo $lang->pri;?>><?php echo $lang->priAB;?></th>
|
||||
<th class="text-left"><?php echo $lang->story->title;?></th>
|
||||
<th class='c-user'> <?php echo $lang->openedByAB;?></th>
|
||||
<th class='c-user'> <?php echo $lang->assignedToAB;?></th>
|
||||
<th class='c-id text-right'><?php echo $lang->story->estimateAB;?></th>
|
||||
<th class='c-status'><?php echo $lang->statusAB;?></th>
|
||||
<th class='c-status'><?php echo $lang->story->stageAB;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class='text-center'>
|
||||
<?php $unlinkedCount = 0;?>
|
||||
<?php $objectID = $this->app->tab == 'execution' ? $build->execution : $build->project;?>
|
||||
<?php foreach($allStories as $story):?>
|
||||
<tr>
|
||||
<td class='c-id text-left'>
|
||||
<?php echo html::checkbox('stories', array($story->id => sprintf('%03d', $story->id)), (in_array($story->stage, array('developed', 'closed', 'tested'))) ? $story->id : '');?>
|
||||
</td>
|
||||
<td><span class='label-pri label-pri-<?php echo $story->pri;?>' title='<?php echo zget($lang->story->priList, $story->pri, $story->pri);?>'><?php echo zget($lang->story->priList, $story->pri, $story->pri)?></span></td>
|
||||
<td class='text-left nobr' title='<?php echo $story->title?>'>
|
||||
<?php
|
||||
if($story->parent > 0) echo "<span class='label label-badge label-light'>{$lang->story->childrenAB}</span>";
|
||||
echo html::a($this->createLink('story', 'view', "storyID=$story->id&version=0¶m=$objectID", '', true), $story->title, '', "data-toggle='modal' data-type='iframe' data-width='90%'");
|
||||
?>
|
||||
</td>
|
||||
<td><?php echo zget($users, $story->openedBy);?></td>
|
||||
<td><?php echo zget($users, $story->assignedTo);?></td>
|
||||
<td class='w-right' title="<?php echo $story->estimate . ' ' . $lang->hourCommon;?>"><?php echo $story->estimate . $config->hourUnit;?></td>
|
||||
<td style='padding-right:10px;'>
|
||||
<span class='status-story status-<?php echo $story->status?>'>
|
||||
<?php echo $this->processStatus('story', $story);?>
|
||||
</span>
|
||||
</td>
|
||||
<td><?php echo $lang->story->stageList[$story->stage];?></td>
|
||||
</tr>
|
||||
<?php $unlinkedCount++;?>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php if($unlinkedCount):?>
|
||||
<div class='table-footer'>
|
||||
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
|
||||
<div class="table-actions btn-toolbar">
|
||||
<?php echo html::submitButton($lang->build->linkStory, '', 'btn btn-secondary');?>
|
||||
</div>
|
||||
<div class="btn-toolbar">
|
||||
<?php echo html::a($this->createLink(($this->app->tab == 'project' ? 'projectbuild' : 'build'), 'view', "buildID={$build->id}&type=story") . "#app={$app->tab}", $lang->goback, '', "class='btn'");?>
|
||||
</div>
|
||||
<div class='table-statistic'></div>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
$('#unlinkStoryList .tablesorter').sortTable();
|
||||
setForm();
|
||||
});
|
||||
</script>
|
||||
@@ -1,447 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The view file of build module's view method of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package build
|
||||
* @version $Id: view.html.php 4386 2013-02-19 07:37:45Z chencongzhi520@gmail.com $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/tablesorter.html.php';?>
|
||||
<?php js::set('confirmUnlinkStory', $lang->build->confirmUnlinkStory)?>
|
||||
<?php js::set('confirmUnlinkBug', $lang->build->confirmUnlinkBug)?>
|
||||
<?php js::set('flow', $config->global->flow)?>
|
||||
<?php if(isonlybody()):?>
|
||||
<style>
|
||||
#stories .action {display: none;}
|
||||
#bugs .action {display: none;}
|
||||
tbody tr td:first-child input {display: none;}
|
||||
.page-title .dropdown-menu {top: 40px; left: 70px;}
|
||||
</style>
|
||||
<?php endif;?>
|
||||
<div id='mainMenu' class='clearfix'>
|
||||
<div class='btn-toolbar pull-left'>
|
||||
<?php $browseLink = $this->session->buildList ? $this->session->buildList : $this->createLink('execution', 'build', "executionID=$build->execution");?>
|
||||
<?php
|
||||
$dataApp = strpos($browseLink, 'release') !== false ? 'data-app=product' : '';
|
||||
if(strpos($browseLink, 'projectrelease') !== false) $dataApp = 'data-app=project';
|
||||
?>
|
||||
<?php common::printBack($browseLink, 'btn btn-secondary', $dataApp);?>
|
||||
<div class='divider'></div>
|
||||
<div class='page-title'>
|
||||
<span title='<?php echo $build->name;?>'>
|
||||
<?php echo html::a('javascript:void(0)', "<span class='label label-id'>{$build->id}</span> " . $build->name . " <span class='caret'></span>", '', "data-toggle='dropdown' class='text btn btn-link btn-active-text'");?>
|
||||
<?php
|
||||
echo "<ul class='dropdown-menu'>";
|
||||
foreach($buildPairs as $id => $name)
|
||||
{
|
||||
$buildInfo = zget($builds, $id);
|
||||
echo '<li' . ($id == $build->id ? " class='active'" : '') . '>';
|
||||
echo html::a($this->createLink($buildInfo->execution ? 'build' : 'projectbuild', 'view', "buildID=$id") . "#app={$app->tab}", $name);
|
||||
echo '</li>';
|
||||
}
|
||||
echo '</ul>';
|
||||
?>
|
||||
</span>
|
||||
<?php if($build->deleted):?>
|
||||
<span class='label label-danger'><?php echo $lang->build->deleted;?></span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php if(!isonlybody()):?>
|
||||
<div class='btn-toolbar pull-right'>
|
||||
<?php echo $this->build->buildOperateMenu($build, 'view');?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php $module = $this->app->tab == 'project' ? 'projectbuild' : 'build';?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='tabs' id='tabsNav'>
|
||||
<?php $countStories = count($stories); $countBugs = count($bugs); $countGeneratedBugs = count($generatedBugs);?>
|
||||
<ul class='nav nav-tabs'>
|
||||
<li <?php if($type == 'story') echo "class='active'"?>><a href='#stories' data-toggle='tab'><?php echo html::icon($lang->icons['story'], 'text-primary') . ' ' . $lang->build->stories;?></a></li>
|
||||
<li <?php if($type == 'bug') echo "class='active'"?>><a href='#bugs' data-toggle='tab'><?php echo html::icon($lang->icons['bug'], 'text-green') . ' ' . $lang->build->bugs;?></a></li>
|
||||
<li <?php if($type == 'generatedBug') echo "class='active'"?>><a href='#generatedBugs' data-toggle='tab'><?php echo html::icon($lang->icons['bug'], 'text-red') . ' ' . $lang->build->generatedBugs;?></a></li>
|
||||
<li <?php if($type == 'buildInfo') echo "class='active'"?>><a href='#buildInfo' data-toggle='tab'><?php echo html::icon($lang->icons['plan'], 'text-info') . ' ' . $lang->build->view;?></a></li>
|
||||
</ul>
|
||||
<div class='tab-content'>
|
||||
<div class='tab-pane <?php if($type == 'story') echo 'active'?>' id='stories'>
|
||||
<?php if($canBeChanged and common::hasPriv($module, 'linkStory') and !isonlybody()):?>
|
||||
<div class='actions'><?php echo html::a("javascript:showLink($build->id, \"story\")", '<i class="icon-link"></i> ' . $lang->build->linkStory, '', "class='btn btn-primary'");?></div>
|
||||
<div class='linkBox cell hidden'></div>
|
||||
<?php endif;?>
|
||||
<form class='main-table table-story<?php if($link === 'true' and $type == 'story') echo " hidden";?>' data-ride='table' method='post' target='hiddenwin' action='<?php echo $this->createLink($module, 'batchUnlinkStory', "buildID={$build->id}")?>' id='linkedStoriesForm'>
|
||||
<table class='table has-sort-head' id='storyList'>
|
||||
<?php $canBatchUnlink = ($canBeChanged and common::hasPriv($module, 'batchUnlinkStory'));?>
|
||||
<?php $vars = "buildID={$build->id}&type=story&link=$link¶m=$param&orderBy=%s";?>
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
<th class='c-id text-left'>
|
||||
<?php if($canBatchUnlink):?>
|
||||
<div class="checkbox-primary check-all" title="<?php echo $lang->selectAll?>">
|
||||
<label></label>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?>
|
||||
</th>
|
||||
<th class='text-left'><?php common::printOrderLink('title', $orderBy, $vars, $lang->story->title);?></th>
|
||||
<th class='c-pri' title=<?php echo $lang->pri;?>><?php common::printOrderLink('pri', $orderBy, $vars, $lang->priAB);?></th>
|
||||
<th class='c-status'><?php common::printOrderLink('status', $orderBy, $vars, $lang->statusAB);?></th>
|
||||
<?php if($childBuilds):?>
|
||||
<th class='c-build'><?php echo $lang->build->linkedBuild;?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-user'> <?php common::printOrderLink('openedBy', $orderBy, $vars, $lang->openedByAB);?></th>
|
||||
<th class='c-estimate'> <?php common::printOrderLink('estimate', $orderBy, $vars, $lang->story->estimateAB);?></th>
|
||||
<th class='c-stage'> <?php common::printOrderLink('stage', $orderBy, $vars, $lang->story->stageAB);?></th>
|
||||
<th class='c-actions-1'><?php echo $lang->actions?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class='text-center'>
|
||||
<?php foreach($stories as $storyID => $story):?>
|
||||
<?php
|
||||
$unlinkClass = strpos(",$build->allStories,", ",$story->id,") !== false ? '' : "disabled";
|
||||
$buildName = $build->name;
|
||||
if($unlinkClass == 'disabled')
|
||||
{
|
||||
foreach($childBuilds as $childBuild)
|
||||
{
|
||||
if(strpos(",$childBuild->stories,", ",$story->id,") !== false)
|
||||
{
|
||||
$buildName = $childBuild->name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
<tr>
|
||||
<td class='c-id text-left'>
|
||||
<?php if($canBatchUnlink):?>
|
||||
<?php echo html::checkbox('unlinkStories', array($story->id => sprintf('%03d', $story->id)), '', $unlinkClass);?>
|
||||
<?php else:?>
|
||||
<?php printf('%03d', $story->id);?>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
<td class='text-left nobr' title='<?php echo $story->title?>'>
|
||||
<?php
|
||||
if($story->parent > 0) echo "<span class='label label-badge label-light'>{$lang->story->childrenAB}</span>";
|
||||
if($this->app->tab == 'execution' and common::hasPriv('execution', 'storyView'))
|
||||
{
|
||||
echo html::a($this->createLink('execution', 'storyView', "storyID=$story->id", '', true), $story->title, '', isonlybody() ? "data-width='1000'" : "class='iframe' data-width='1000'");
|
||||
}
|
||||
elseif($this->app->tab == 'project' and common::hasPriv('projectstory', 'view'))
|
||||
{
|
||||
echo html::a($this->createLink('projectstory', 'view', "storyID=$story->id&version=0¶m=$build->project", '', true), $story->title, '', isonlybody() ? "data-width='1000'" : "class='iframe' data-width='1000'");
|
||||
}
|
||||
else
|
||||
{
|
||||
echo $story->title;
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td>
|
||||
<?php if($story->pri):?>
|
||||
<span class='label-pri label-pri-<?php echo $story->pri;?>' title='<?php echo zget($lang->story->priList, $story->pri, $story->pri);?>'><?php echo zget($lang->story->priList, $story->pri, $story->pri);?></span>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
<td>
|
||||
<span class='status-story status-<?php echo $story->status;?>'><?php echo $this->processStatus('story', $story);?></span>
|
||||
</td>
|
||||
<?php if($childBuilds):?>
|
||||
<td class='c-build' title='<?php echo $buildName?>'><?php echo $buildName;?></td>
|
||||
<?php endif;?>
|
||||
<td class='c-user'><?php echo zget($users, $story->openedBy);?></td>
|
||||
<td class='c-estimate' title="<?php echo $story->estimate . ' ' . $lang->hourCommon;?>"><?php echo $story->estimate . $config->hourUnit;?></td>
|
||||
<td class='c-stage'><?php echo $lang->story->stageList[$story->stage];?></td>
|
||||
<td class='c-actions'>
|
||||
<?php
|
||||
if($canBeChanged and common::hasPriv($module, 'unlinkStory'))
|
||||
{
|
||||
$unlinkURL = $this->createLink($module, 'unlinkStory', "buildID=$build->id&story=$story->id");
|
||||
echo html::a($unlinkURL, '<i class="icon-unlink"></i>', 'hiddenwin', "class='btn' title='{$lang->build->unlinkStory}' $unlinkClass");
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class='table-footer'>
|
||||
<?php if($countStories):?>
|
||||
<?php if($canBatchUnlink):?>
|
||||
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
|
||||
<div class="table-actions btn-toolbar">
|
||||
<?php echo html::submitButton($lang->build->batchUnlink, '', 'btn');?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div class='table-statistic'><?php echo sprintf($lang->build->finishStories, $countStories);?></div>
|
||||
<?php endif;?>
|
||||
<?php
|
||||
$this->app->rawParams['type'] = 'story';
|
||||
$storyPager->show('right', 'pagerjs');
|
||||
$this->app->rawParams['type'] = $type;
|
||||
?>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class='tab-pane <?php if($type == 'bug') echo 'active'?>' id='bugs'>
|
||||
<?php if($canBeChanged and common::hasPriv($module, 'linkBug') and !isonlybody()):?>
|
||||
<div class='actions'><?php echo html::a("javascript:showLink($build->id, \"bug\")", '<i class="icon-bug"></i> ' . $lang->build->linkBug, '', "class='btn btn-primary'");?></div>
|
||||
<div class='linkBox cell hidden'></div>
|
||||
<?php endif;?>
|
||||
<form class='main-table table-bug<?php if($link === 'true' and $type == 'bug') echo " hidden";?>' data-ride='table' method='post' target='hiddenwin' action="<?php echo $this->createLink($module, 'batchUnlinkBug', "build=$build->id");?>" id='linkedBugsForm'>
|
||||
<table class='table has-sort-head' id='bugList'>
|
||||
<?php $canBatchUnlink = $canBeChanged and common::hasPriv($module, 'batchUnlinkBug');?>
|
||||
<?php $vars = "buildID={$build->id}&type=bug&link=$link¶m=$param&orderBy=%s";?>
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
<th class='c-id text-left'>
|
||||
<?php if($canBatchUnlink):?>
|
||||
<div class="checkbox-primary check-all" title="<?php echo $lang->selectAll?>">
|
||||
<label></label>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?>
|
||||
</th>
|
||||
<th class='text-left'><?php common::printOrderLink('title', $orderBy, $vars, $lang->bug->title);?></th>
|
||||
<th class='c-status'> <?php common::printOrderLink('status', $orderBy, $vars, $lang->bug->status);?></th>
|
||||
<?php if($childBuilds):?>
|
||||
<th class='c-build'><?php echo $lang->build->linkedBuild?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-user'> <?php common::printOrderLink('openedBy', $orderBy, $vars, $lang->openedByAB);?></th>
|
||||
<th class='c-date'> <?php common::printOrderLink('openedDate', $orderBy, $vars, $lang->bug->abbr->openedDate);?></th>
|
||||
<th class='c-user'> <?php common::printOrderLink('resolvedBy', $orderBy, $vars, $lang->bug->resolvedBy);?></th>
|
||||
<th class='c-date'> <?php common::printOrderLink('resolvedDate', $orderBy, $vars, $lang->bug->abbr->resolvedDate);?></th>
|
||||
<th class='c-actions-1'><?php echo $lang->actions?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class='text-center'>
|
||||
<?php foreach($bugs as $bug):?>
|
||||
<?php $bugLink = $this->createLink('bug', 'view', "bugID=$bug->id", '', true);?>
|
||||
<?php
|
||||
$unlinkClass = strpos(",$build->allBugs,", ",$bug->id,") !== false ? '' : "disabled";
|
||||
$buildName = $build->name;
|
||||
if($unlinkClass == 'disabled')
|
||||
{
|
||||
foreach($childBuilds as $childBuild)
|
||||
{
|
||||
if(strpos(",$childBuild->bugs,", ",$bug->id,") !== false)
|
||||
{
|
||||
$buildName = $childBuild->name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
<tr>
|
||||
<td class='c-id text-left'>
|
||||
<?php if($canBatchUnlink):?>
|
||||
<?php echo html::checkbox('unlinkBugs', array($bug->id => sprintf('%03d', $bug->id)), '', $unlinkClass);?>
|
||||
<?php else:?>
|
||||
<?php printf('%03d', $bug->id);?>
|
||||
<?php endif;?>
|
||||
<td class='text-left nobr' title='<?php echo $bug->title?>'>
|
||||
<?php echo html::a($bugLink, $bug->title, '', isonlybody() ? "data-width='1000'" : "class='iframe' data-width='1000'");?>
|
||||
</td>
|
||||
<td>
|
||||
<span class='status-bug status-<?php echo $bug->status?>'>
|
||||
<?php echo $this->processStatus('bug', $bug);?>
|
||||
</span>
|
||||
</td>
|
||||
<?php if($childBuilds):?>
|
||||
<td class='c-build' title='<?php echo $buildName?>'><?php echo $buildName;?></td>
|
||||
<?php endif;?>
|
||||
<td class='c-user'><?php echo zget($users, $bug->openedBy);?></td>
|
||||
<td class='c-date'><?php echo helper::isZeroDate($bug->openedDate) ? '' : substr($bug->openedDate, 5, 11);?></td>
|
||||
<td class='c-user'><?php echo zget($users, $bug->resolvedBy);?></td>
|
||||
<td class='c-date'><?php echo helper::isZeroDate($bug->resolvedDate) ? '' : substr($bug->resolvedDate, 5, 11);?></td>
|
||||
<td class='c-actions'>
|
||||
<?php
|
||||
if($canBeChanged and common::hasPriv($module, 'unlinkBug'))
|
||||
{
|
||||
$unlinkURL = $this->createLink($module, 'unlinkBug', "buildID=$build->id&bug=$bug->id");
|
||||
echo html::a("###", '<i class="icon-unlink"></i>', '', (!$unlinkClass ? "onclick='ajaxDelete(\"$unlinkURL\", \"bugList\", confirmUnlinkBug)'" : '') . "class='btn' title='{$lang->build->unlinkBug}' $unlinkClass");
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class='table-footer'>
|
||||
<?php if($countBugs):?>
|
||||
<?php if($canBatchUnlink):?>
|
||||
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
|
||||
<div class="table-actions btn-toolbar">
|
||||
<?php echo html::submitButton($lang->build->batchUnlink, '', 'btn');?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div class='table-statistic'><?php echo sprintf($lang->build->resolvedBugs, $countBugs);?></div>
|
||||
<?php endif;?>
|
||||
<?php
|
||||
$this->app->rawParams['type'] = 'bug';
|
||||
$bugPager->show('right', 'pagerjs');
|
||||
$this->app->rawParams['type'] = $type;
|
||||
?>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class='tab-pane <?php if($type == 'generatedBug') echo 'active'?>' id='generatedBugs'>
|
||||
<div class='main-table' data-ride='table'>
|
||||
<table class='table has-sort-head'>
|
||||
<?php $vars = "buildID={$build->id}&type=generatedBug&link=$link¶m=$param&orderBy=%s";?>
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
<th class='c-id text-left'><?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?></th>
|
||||
<th class='text-left'><?php common::printOrderLink('title', $orderBy, $vars, $lang->bug->title);?></th>
|
||||
<th class='c-severity' title=<?php echo $lang->bug->severity;?>><?php common::printOrderLink('severity', $orderBy, $vars, $lang->bug->abbr->severity);?></th>
|
||||
<th class='c-status'> <?php common::printOrderLink('status', $orderBy, $vars, $lang->bug->status);?></th>
|
||||
<th class='c-build'> <?php echo $lang->bug->openedBuild;?></th>
|
||||
<th class='c-user'> <?php common::printOrderLink('openedBy', $orderBy, $vars, $lang->openedByAB);?></th>
|
||||
<th class='c-date'> <?php common::printOrderLink('openedDate', $orderBy, $vars, $lang->bug->abbr->openedDate);?></th>
|
||||
<th class='c-user'> <?php common::printOrderLink('resolvedBy', $orderBy, $vars, $lang->bug->resolvedBy);?></th>
|
||||
<th class='c-date'> <?php common::printOrderLink('resolvedDate', $orderBy, $vars, $lang->bug->abbr->resolvedDate);?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<?php
|
||||
$hasCustomSeverity = false;
|
||||
foreach($lang->bug->severityList as $severityKey => $severityValue)
|
||||
{
|
||||
if(!empty($severityKey) and (string)$severityKey != (string)$severityValue)
|
||||
{
|
||||
$hasCustomSeverity = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
?>
|
||||
<tbody class='text-center'>
|
||||
<?php foreach($generatedBugs as $bug):?>
|
||||
<?php $bugLink = $this->createLink('bug', 'view', "bugID=$bug->id", '', true);?>
|
||||
<tr>
|
||||
<td class='text-left'><?php printf('%03d', $bug->id);?></td>
|
||||
<td class='text-left nobr' title='<?php echo $bug->title?>'>
|
||||
<?php echo html::a($bugLink, $bug->title, '', isonlybody() ? "data-width='1000'" : "class='iframe' data-width='1000'");?>
|
||||
</td>
|
||||
<td class='c-severity'>
|
||||
<?php if($hasCustomSeverity):?>
|
||||
<span class='label-severity-custom' data-severity='<?php echo $bug->severity;?>' title='<?php echo zget($lang->bug->severityList, $bug->severity);?>'><?php echo zget($lang->bug->severityList, $bug->severity, $bug->severity);?></span>
|
||||
<?php else:?>
|
||||
<span class='label-severity' data-severity='<?php echo $bug->severity;?>' title='<?php echo zget($lang->bug->severityList, $bug->severity, $bug->severity);?>'></span>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
<td>
|
||||
<span class='status-bug status-<?php echo $bug->status?>'>
|
||||
<?php echo $this->processStatus('bug', $bug);?>
|
||||
</span>
|
||||
</td>
|
||||
<?php
|
||||
$openedBuilds = '';
|
||||
foreach(explode(',', $bug->openedBuild) as $buildID) $openedBuilds .= ($buildID == 'trunk' ? 'Trunk' : zget($buildPairs, $buildID, '')) . ' ';
|
||||
?>
|
||||
<td class='c-build' title='<?php echo $openedBuilds;?>'><?php echo $openedBuilds;?></td>
|
||||
<td class='c-user'><?php echo zget($users, $bug->openedBy);?></td>
|
||||
<td class='c-date'><?php echo helper::isZeroDate($bug->openedDate) ? '' : substr($bug->openedDate, 5, 11);?></td>
|
||||
<td class='c-user'><?php echo zget($users, $bug->resolvedBy);?></td>
|
||||
<td class='c-date'><?php echo helper::isZeroDate($bug->resolvedDate) ? '' : substr($bug->resolvedDate, 5, 11);?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class='table-footer'>
|
||||
<?php if($countGeneratedBugs):?>
|
||||
<div class='table-statistic'><?php echo sprintf($lang->build->createdBugs, $countGeneratedBugs);?></div>
|
||||
<?php endif;?>
|
||||
<?php
|
||||
$this->app->rawParams['type'] = 'generatedBug';
|
||||
$generatedBugPager->show('right', 'pagerjs');
|
||||
$this->app->rawParams['type'] = $type;
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class='tab-pane <?php if($type == 'buildInfo') echo 'active'?>' id='buildInfo'>
|
||||
<div class='cell'>
|
||||
<div class='detail'>
|
||||
<div class='detail-title'><?php echo $lang->build->basicInfo?></div>
|
||||
<div class='detail-content'>
|
||||
<table class='table table-data table-condensed table-borderless table-fixed'>
|
||||
<tr class="<?php echo $hidden;?>">
|
||||
<th class='w-100px'><?php echo $lang->build->product;?></th>
|
||||
<td><?php echo $build->productName;?></td>
|
||||
</tr>
|
||||
<?php if($build->productType != 'normal'):?>
|
||||
<tr>
|
||||
<th class='w-100px'><?php echo $lang->product->branch;?></th>
|
||||
<td><?php echo $branchName;?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th class='w-100px'><?php echo $lang->build->name;?></th>
|
||||
<td><?php echo $build->name;?></td>
|
||||
</tr>
|
||||
<?php if($build->execution):?>
|
||||
<tr>
|
||||
<th><?php echo empty($multipleProject) ? $lang->build->project :($executionType ? $lang->build->executionAB : $lang->build->execution);?></th>
|
||||
<td>
|
||||
<?php $executionName = zget($executions, $build->execution);?>
|
||||
<?php echo ltrim($executionName, '/');?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php else:?>
|
||||
<tr>
|
||||
<th><?php echo $lang->build->builds;?></th>
|
||||
<td>
|
||||
<?php $builds = '';?>
|
||||
<?php foreach(explode(',', $build->builds) as $buildID):?>
|
||||
<?php if($buildID) $builds .= html::a($this->createLink('build', 'view', "buildID=$buildID") . "#app={$app->tab}", zget($buildPairs, $buildID)) . $lang->comma;?>
|
||||
<?php endforeach;?>
|
||||
<?php echo rtrim($builds, $lang->comma);?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th><?php echo $lang->build->builder;?></th>
|
||||
<td><?php echo zget($users, $build->builder);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->build->date;?></th>
|
||||
<td><?php echo $build->date;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->build->scmPath;?></th>
|
||||
<td style='word-break:break-all;'><?php echo html::a($build->scmPath, $build->scmPath, '_blank')?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->build->filePath;?></th>
|
||||
<td style='word-break:break-all;'><?php echo html::a($build->filePath, $build->filePath, '_blank');?></td>
|
||||
</tr>
|
||||
<?php $this->printExtendFields($build, 'table', 'inForm=0');?>
|
||||
<tr>
|
||||
<th style="vertical-align:top"><?php echo $lang->build->desc;?></th>
|
||||
<td class='article-content'>
|
||||
<?php if($build->desc):?>
|
||||
<?php echo $build->desc;?>
|
||||
<?php else:?>
|
||||
<?php echo $lang->noData;?>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<?php echo $this->fetch('file', 'printFiles', array('files' => $build->files, 'fieldset' => 'true'));?>
|
||||
<?php include '../../common/view/action.html.php';?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php js::set('param', helper::safe64Decode($param))?>
|
||||
<?php js::set('link', $link)?>
|
||||
<?php js::set('currentModule', $module)?>
|
||||
<?php js::set('buildID', $build->id)?>
|
||||
<?php js::set('type', $type)?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,107 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The batch create case view of caselib module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package caselib
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php js::set('testcaseBatchCreateNum', $config->testcase->batchCreate);?>
|
||||
<?php js::set('libID', $libID);?>
|
||||
<div id="mainContent" class="main-content fade">
|
||||
<div class="main-header">
|
||||
<h2><?php echo $lang->testcase->batchCreate;?></h2>
|
||||
<div class="pull-right btn-toolbar">
|
||||
<?php echo html::commonButton($lang->pasteText, "data-toggle='modal' data-target='#importLinesModal' ", 'btn btn-info')?>
|
||||
</div>
|
||||
</div>
|
||||
<form method='post' class='load-indicator main-form' enctype='multipart/form-data' target='hiddenwin' id="batchCreateForm">
|
||||
<table class='table table-form' id="tableBody">
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
<th class='c-id'><?php echo $lang->idAB;?></th>
|
||||
<th class='c-module<?php echo strpos($config->testcase->create->requiredFields, 'module') !== false ? ' required' : '';?>'><?php echo $lang->testcase->module;?></th>
|
||||
<th class='required'><?php echo $lang->testcase->title;?></th>
|
||||
<th class='c-status required'><?php echo $lang->testcase->type;?></th>
|
||||
<th class='c-status<?php echo strpos($config->testcase->create->requiredFields, 'pri') !== false ? ' required' : '';?>'><?php echo $lang->testcase->pri;?></th>
|
||||
<th class='c-text<?php echo strpos($config->testcase->create->requiredFields, 'precondition') !== false ? ' required' : '';?>'><?php echo $lang->testcase->precondition;?></th>
|
||||
<th class='c-text<?php echo strpos($config->testcase->create->requiredFields, 'keywords') !== false ? ' required' : '';?>'><?php echo $lang->testcase->keywords;?></th>
|
||||
<th class='c-text<?php echo strpos($config->testcase->create->requiredFields, 'stage') !== false ? ' required' : '';?>'><?php echo $lang->testcase->stage;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php unset($lang->testcase->typeList['']);?>
|
||||
<?php for($i = 0; $i < $config->testcase->batchCreate; $i++):?>
|
||||
<?php
|
||||
if($i != 0)
|
||||
{
|
||||
$currentModuleID = 'ditto';
|
||||
$moduleOptionMenu['ditto'] = $this->lang->testcase->ditto;
|
||||
}
|
||||
|
||||
if($i != 0) $lang->testcase->typeList['ditto'] = $lang->testcase->ditto;
|
||||
if($i != 0) $lang->testcase->priList['ditto'] = $lang->testcase->ditto;
|
||||
$type = $i == 0 ? 'feature' : 'ditto';
|
||||
$pri = $i == 0 ? 3 : 'ditto';
|
||||
?>
|
||||
<tr>
|
||||
<td><?php echo $i+1;?></td>
|
||||
<td class='text-left' style='overflow:visible'><?php echo html::select("module[$i]", $moduleOptionMenu, $currentModuleID, "class='form-control chosen'");?></td>
|
||||
<td style='overflow:visible'>
|
||||
<div class="input-control has-icon-right">
|
||||
<?php echo html::input("title[$i]", '', "class='form-control title-import'");?>
|
||||
<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->testcase->colorTag;?><i class="icon icon-close"></i></li>
|
||||
</ul>
|
||||
<?php echo html::hidden("color[$i]", '', "data-provide='colorpicker' data-icon='color' data-wrapper='input-control-icon-right' data-update-color='#title\\[$i\\]'");?>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td><?php echo html::select("type[$i]", $lang->testcase->typeList, $type, "class='form-control chosen'");?></td>
|
||||
<td><?php echo html::select("pri[$i]", $lang->testcase->priList, $pri, "class='form-control chosen'");?></td>
|
||||
<td><?php echo html::textarea("precondition[$i]", '', "rows='1' class='form-control autosize'")?></td>
|
||||
<td><?php echo html::input("keywords[$i]", '', "class='form-control'");?></td>
|
||||
<td class='text-left' style='overflow:visible'><?php echo html::select("stage[$i][]", $lang->testcase->stageList, '', "class='form-control chosen' multiple");?></td>
|
||||
</tr>
|
||||
<?php endfor;?>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr><td colspan='8' class='text-center form-actions'><?php echo html::submitButton()?> <?php echo html::backButton();?></td></tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
<table class='template' id='trTemp'>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>%s</td>
|
||||
<td class='text-left' style='overflow:visible'><?php echo html::select("module[%s]", $moduleOptionMenu, $currentModuleID, "class='form-control chosen'");?></td>
|
||||
<td style='overflow:visible'>
|
||||
<div class="input-control has-icon-right">
|
||||
<?php echo html::input("title[%s]", '', "class='form-control title-import'");?>
|
||||
<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->testcase->colorTag;?><i class="icon icon-close"></i></li>
|
||||
</ul>
|
||||
<?php echo html::hidden("color[%s]", '', "data-provide='colorpicker-later' data-icon='color' data-wrapper='input-control-icon-right' data-update-color='#title\\[%s\\]'");?>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td><?php echo html::select("type[%s]", $lang->testcase->typeList, $type, "class='form-control chosen'");?></td>
|
||||
<td><?php echo html::select("pri[%s]", $lang->testcase->priList, $pri, "class='form-control chosen'");?></td>
|
||||
<td><?php echo html::textarea("precondition[%s]", '', "rows='1' class='form-control autosize'")?></td>
|
||||
<td><?php echo html::input("keywords[%s]", '', "class='form-control'");?></td>
|
||||
<td class='text-left' style='overflow:visible'><?php echo html::select("stage[%s][]", $lang->testcase->stageList, '', "class='form-control chosen' multiple");?></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php include '../../common/view/pastetext.html.php';?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,235 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The library view file of caselib module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package caselib
|
||||
* @version $Id: library.html.php 5108 2013-07-12 01:59:04Z chencongzhi520@gmail.com $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php
|
||||
include '../../common/view/header.html.php';
|
||||
include '../../common/view/datatable.fix.html.php';
|
||||
js::set('browseType', $browseType);
|
||||
js::set('moduleID', $moduleID);
|
||||
js::set('confirmDelete', $lang->testcase->confirmDelete);
|
||||
js::set('batchDelete', $lang->testcase->confirmBatchDelete);
|
||||
js::set('flow', $config->global->flow);
|
||||
?>
|
||||
<style>
|
||||
.btn-group a i.icon-plus {font-size: 16px;}
|
||||
.btn-group a.btn-primary {border-right: 1px solid rgba(255,255,255,0.2);}
|
||||
.btn-group button.dropdown-toggle.btn-primary {padding:6px;}
|
||||
</style>
|
||||
<div id='mainMenu' class='clearfix'>
|
||||
<div id="sidebarHeader">
|
||||
<div class="title">
|
||||
<?php
|
||||
$this->app->loadLang('tree');
|
||||
echo isset($moduleID) ? $moduleName : $this->lang->tree->all;
|
||||
if(!empty($moduleID))
|
||||
{
|
||||
$removeLink = $browseType == 'bymodule' ? inlink('browse', "libID=$libID&browseType=$browseType¶m=0&orderBy=$orderBy&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}") : 'javascript:removeCookieByKey("libCaseModule")';
|
||||
echo html::a($removeLink, "<i class='icon icon-sm icon-close'></i>", '', "class='text-muted'");
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<div class='btn-toolbar pull-left'>
|
||||
<?php
|
||||
common::sortFeatureMenu();
|
||||
if(!$config->testcase->needReview && empty($config->testcase->forceReview)) unset($lang->caselib->featureBar['browse']['wait']);
|
||||
foreach($lang->caselib->featureBar['browse'] as $featureType => $label)
|
||||
{
|
||||
$activeClass = $browseType == $featureType ? 'btn-active-text' : '';
|
||||
echo html::a(inlink('browse', "libID=$libID&browseType=$featureType"), "<span class='text'>$label</span>", '',"class='btn btn-link $activeClass' data-app={$app->tab} id=" . $featureType .'Tab');
|
||||
}
|
||||
?>
|
||||
<a class="btn btn-link querybox-toggle" id='bysearchTab'><i class="icon icon-search muted"></i> <?php echo $lang->testcase->bySearch;?></a>
|
||||
</div>
|
||||
<div class='btn-toolbar pull-right'>
|
||||
<?php
|
||||
if(common::hasPriv('caselib', 'view'))
|
||||
{
|
||||
$link = helper::createLink('caselib', 'view', "libID=$libID");
|
||||
echo html::a($link, "<i class='icon icon-list-alt muted'> </i> " . $this->lang->caselib->view, '', "class='btn btn-link'");
|
||||
}
|
||||
?>
|
||||
<div class='btn-group'>
|
||||
<?php common::printLink('caselib', 'exportTemplate', "libID=$libID", "<i class='icon icon-export muted'> </i> " . $lang->caselib->exportTemplate, '', "class='btn btn-link export' data-width='40%'");?>
|
||||
<?php common::printLink('caselib', 'import', "libID=$libID", "<i class='icon muted icon-import'> </i> " . $lang->testcase->fileImport, '', "class='btn btn-link export'");?>
|
||||
</div>
|
||||
<?php echo html::a($this->createLink('caselib', 'create'), "<i class='icon icon-plus'> </i> " . $lang->caselib->create, '', 'class="btn btn-secondary"');?>
|
||||
<div class='btn-group dropdown'>
|
||||
<?php
|
||||
$params = "libID=$libID&moduleID=" . (isset($moduleID) ? $moduleID : 0);
|
||||
$actionLink = $this->createLink('caselib', 'createCase', $params);
|
||||
echo html::a($actionLink, "<i class='icon icon-plus'></i> {$lang->testcase->create}", '', "class='btn btn-primary'");
|
||||
?>
|
||||
<button type='button' class='btn btn-primary dropdown-toggle' data-toggle='dropdown'><span class='caret'></span></button>
|
||||
<ul class='dropdown-menu'>
|
||||
<li><?php echo html::a($actionLink, $lang->testcase->create);?></li>
|
||||
<li><?php echo html::a($this->createLink('caselib', 'batchCreateCase', $params), $lang->testcase->batchCreate);?></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainContent" class="main-row fade">
|
||||
<div class="side-col" id="sidebar">
|
||||
<div class="sidebar-toggle"><i class="icon icon-angle-left"></i></div>
|
||||
<div class="cell">
|
||||
<?php if(!$moduleTree):?>
|
||||
<hr class="space">
|
||||
<div class="text-center text-muted">
|
||||
<?php echo $lang->caselib->noModule;?>
|
||||
</div>
|
||||
<hr class="space">
|
||||
<?php endif;?>
|
||||
<?php echo $moduleTree;?>
|
||||
<div class="text-center">
|
||||
<?php common::printLink('tree', 'browse', "libID=$libID&view=caselib¤tModuleID=0&branch=0&from={$this->lang->navGroup->caselib}", $lang->tree->manage, '', "class='btn btn-info btn-wide'");?>
|
||||
<hr class="space-sm" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="main-col">
|
||||
<div id='queryBox' data-module='caselib' class='cell <?php if($browseType =='bysearch') echo 'show';?>'></div>
|
||||
<?php if(empty($cases)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->testcase->noCase;?></span>
|
||||
<?php if(common::hasPriv('caselib', 'createCase')):?>
|
||||
<?php echo html::a($this->createLink('caselib', 'createCase', "libID=$libID&moduleID=" . (isset($moduleID) ? $moduleID : 0)), "<i class='icon icon-plus'></i> " . $lang->testcase->create, '', "class='btn btn-info'");?>
|
||||
<?php endif;?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<form class="main-table table-testcase" data-ride="table" method="post" id='testcaseForm'>
|
||||
<?php $canBatchEdit = common::hasPriv('testcase', 'batchEdit');?>
|
||||
<?php $canBatchDelete = common::hasPriv('testcase', 'batchDelete');?>
|
||||
<?php $canBatchReview = common::hasPriv('testcase', 'batchReview') and ($config->testcase->needReview or !empty($config->testcase->forceReview));?>
|
||||
<?php $canBatchChangeModule = common::hasPriv('testcase', 'batchChangeModule');?>
|
||||
<?php $canBatchAction = ($canBatchEdit or $canBatchDelete or $canBatchReview or $canBatchChangeModule);?>
|
||||
<?php $vars = "libID=$libID&browseType=$browseType¶m=$param&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}";?>
|
||||
<div class="table-responsive">
|
||||
<table class='table has-sort-head' id='caseList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-id'>
|
||||
<?php if($canBatchAction):?>
|
||||
<div class="checkbox-primary check-all" title="<?php echo $lang->selectAll?>">
|
||||
<label></label>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?>
|
||||
</th>
|
||||
<th class='text-left'><?php common::printOrderLink('title', $orderBy, $vars, $lang->testcase->title);?></th>
|
||||
<th class='c-pri' title=<?php echo $lang->pri;?>><?php common::printOrderLink('pri', $orderBy, $vars, $lang->priAB);?></th>
|
||||
<th class='c-type'> <?php common::printOrderLink('type', $orderBy, $vars, $lang->typeAB);?></th>
|
||||
<th class='c-status'><?php common::printOrderLink('status', $orderBy, $vars, $lang->statusAB);?></th>
|
||||
<th class='c-user'> <?php common::printOrderLink('openedBy', $orderBy, $vars, $lang->openedByAB);?></th>
|
||||
<?php
|
||||
$extendFields = $this->caselib->getFlowExtendFields();
|
||||
foreach($extendFields as $extendField) echo "<th>{$extendField->name}</th>";
|
||||
?>
|
||||
<th class='c-actions-3 text-center'><?php echo $lang->actions;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($cases as $case):?>
|
||||
<tr>
|
||||
<td class='c-id'>
|
||||
<?php if($canBatchAction):?>
|
||||
<?php echo html::checkbox('caseIDList', array($case->id => '')) . html::a($this->createLink('testcase', 'view', "caseID=$case->id&version=$case->version"), sprintf('%03d', $case->id));?>
|
||||
<?php else:?>
|
||||
<?php echo sprintf('%03d', $case->id);?>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
<td class='text-left' title="<?php echo $case->title?>">
|
||||
<?php if($modulePairs and $case->module) echo "<span title='{$lang->testcase->module}' class='label label-info label-badge'>{$modulePairs[$case->module]}</span> ";?>
|
||||
<?php $viewLink = $this->createLink('testcase', 'view', "caseID=$case->id&version=$case->version");?>
|
||||
<?php echo html::a($viewLink, $case->title, null, "style='color: $case->color'");?>
|
||||
</td>
|
||||
<td><span class='label-pri label-pri-<?php echo $case->pri;?>' title='<?php echo zget($lang->testcase->priList, $case->pri, $case->pri);?>'><?php echo zget($lang->testcase->priList, $case->pri, $case->pri);?></span></td>
|
||||
<td><?php echo $lang->testcase->typeList[$case->type];?></td>
|
||||
<td class='<?php if(isset($run)) echo $run->status;?> testcase-<?php echo $case->status?>'> <?php echo $this->processStatus('testcase', $case);?></td>
|
||||
<td title="<?php echo zget($users, $case->openedBy);?>"><?php echo zget($users, $case->openedBy);?></td>
|
||||
<?php foreach($extendFields as $extendField) echo "<td>" . $this->loadModel('flow')->getFieldValue($extendField, $case) . "</td>";?>
|
||||
<td class='c-actions'>
|
||||
<?php echo $this->caselib->buildOperateMenu($case, 'browse');?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class='table-footer'>
|
||||
<?php if($canBatchAction):?>
|
||||
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
|
||||
<?php endif;?>
|
||||
<div class="table-actions btn-toolbar">
|
||||
<div class='btn-group dropup'>
|
||||
<?php $actionLink = $this->createLink('testcase', 'batchEdit', "libID=$libID&branch=0&type=lib");?>
|
||||
<?php $misc = $canBatchEdit ? "onclick=\"setFormAction('$actionLink')\"" : "disabled='disabled'";?>
|
||||
<?php echo html::commonButton($lang->edit, $misc);?>
|
||||
<?php if($canBatchDelete or $canBatchReview or $canBatchChangeModule):?>
|
||||
<button type='button' class='btn dropdown-toggle' data-toggle='dropdown'><span class='caret'></span></button>
|
||||
<ul class='dropdown-menu' id='moreActionMenu'>
|
||||
<?php
|
||||
if($canBatchDelete)
|
||||
{
|
||||
$actionLink = $this->createLink('testcase', 'batchDelete', "libID=$libID");
|
||||
$misc = "onclick=\"confirmBatchDelete('$actionLink')\"";
|
||||
echo "<li>" . html::a('#', $lang->delete, '', $misc) . "</li>";
|
||||
}
|
||||
|
||||
if($canBatchReview)
|
||||
{
|
||||
echo "<li class='dropdown-submenu'>";
|
||||
echo html::a('javascript:;', $lang->testcase->review, '', "id='reviewItem'");
|
||||
echo "<ul class='dropdown-menu'>";
|
||||
unset($lang->testcase->reviewResultList['']);
|
||||
foreach($lang->testcase->reviewResultList as $key => $result)
|
||||
{
|
||||
$actionLink = $this->createLink('testcase', 'batchReview', "result=$key");
|
||||
echo '<li>' . html::a('#', $result, '', "onclick=\"setFormAction('$actionLink', 'hiddenwin')\"") . '</li>';
|
||||
}
|
||||
echo '</ul></li>';
|
||||
}
|
||||
|
||||
if($canBatchChangeModule)
|
||||
{
|
||||
$withSearch = count($modules) > 8;
|
||||
echo "<li class='dropdown-submenu'>";
|
||||
echo html::a('javascript:;', $lang->testcase->moduleAB, '', "id='moduleItem'");
|
||||
echo "<div class='dropdown-menu" . ($withSearch ? ' with-search' : '') . "'>";
|
||||
echo '<ul class="dropdown-list">';
|
||||
foreach($modules as $moduleId => $module)
|
||||
{
|
||||
$actionLink = $this->createLink('testcase', 'batchChangeModule', "moduleID=$moduleId");
|
||||
echo "<li class='option' data-key='$moduleID'>" . html::a('#', $module, '', "onclick=\"setFormAction('$actionLink', 'hiddenwin')\"") . "</li>";
|
||||
}
|
||||
echo '</ul>';
|
||||
if($withSearch) echo "<div class='menu-search'><div class='input-group input-group-sm'><input type='text' class='form-control' placeholder=''><span class='input-group-addon'><i class='icon-search'></i></span></div></div>";
|
||||
echo '</div></li>';
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<div class='table-statistic'></div>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
$('#module' + moduleID).addClass('active');
|
||||
$('#<?php echo $this->session->libBrowseType?>Tab').addClass('btn-active-text').append(" <span class='label label-light label-badge'><?php echo $pager->recTotal;?></span>");
|
||||
</script>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,41 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The createlib view of caselib module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package caselib
|
||||
* @version $Id: create.html.php 4728 2013-05-03 06:14:34Z chencongzhi520@gmail.com $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<div id="mainContent" class="main-content">
|
||||
<div class="center-block">
|
||||
<div class="main-header">
|
||||
<h2><?php echo $lang->caselib->create;?></h2>
|
||||
</div>
|
||||
<form class="load-indicator main-form form-ajax" id="createForm" method="post" target='hiddenwin'>
|
||||
<table class="table table-form">
|
||||
<tr>
|
||||
<th><?php echo $lang->caselib->name;?></th>
|
||||
<td><?php echo html::input('name', '', "class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->caselib->desc;?></th>
|
||||
<td><?php echo html::textarea('desc', '', "rows=10 class='form-control kindeditor'");?></td>
|
||||
</tr>
|
||||
<?php $this->printExtendFields('', 'table');?>
|
||||
<tr>
|
||||
<td class='text-center form-actions' colspan='2'>
|
||||
<?php echo html::submitButton();?>
|
||||
<?php echo html::backButton();?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,230 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The create case view of caselib module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yidong Wang <yidong@cnezsoft.com>
|
||||
* @package caselib
|
||||
* @version $Id: createcase.html.php 4904 2013-06-26 05:37:45Z wyd621@gmail.com $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php js::set('lblDelete', $lang->testcase->deleteStep);?>
|
||||
<?php js::set('lblBefore', $lang->testcase->insertBefore);?>
|
||||
<?php js::set('lblAfter', $lang->testcase->insertAfter);?>
|
||||
<div class='main-content' id="mainContent">
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2><?php echo $lang->testcase->create;?></h2>
|
||||
<div class="pull-right btn-toolbar">
|
||||
<?php $customLink = $this->createLink('custom', 'ajaxSaveCustomFields', 'module=caselib§ion=custom&key=createFields');?>
|
||||
<?php include '../../common/view/customfield.html.php';?>
|
||||
</div>
|
||||
</div>
|
||||
<form method='post' enctype='multipart/form-data' id='dataform' target='hiddenwin'>
|
||||
<table class='table table-form'>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th><?php echo $lang->testcase->lib;?></th>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php echo html::select('lib', $libraries, $libID, "onchange='loadLibModules(this.value);' class='form-control chosen'");?>
|
||||
</div>
|
||||
</td>
|
||||
<td style='padding-left:15px;'<?php echo strpos($config->testcase->create->requiredFields, 'module') !== false ? ' class="required"' : '';?>>
|
||||
<div class='input-group' id='moduleIdBox'>
|
||||
<span class="input-group-addon w-80px"><?php echo $lang->testcase->module?></span>
|
||||
<?php
|
||||
echo html::select('module', $moduleOptionMenu, $currentModuleID, "onchange='loadModuleRelated();' class='form-control chosen'");
|
||||
if(count($moduleOptionMenu) == 1)
|
||||
{
|
||||
echo "<span class='input-group-btn'>";
|
||||
echo html::a($this->createLink('tree', 'browse', "rootID=$libID&view=caselib¤tModuleID=0", 'html', true), "<i class='icon icon-cog'></i>", '', "data-toggle='tooltip' class='btn iframe' data-width='95%' title='{$lang->tree->manage}'");
|
||||
echo '</span>';
|
||||
echo "<span class='input-group-btn'>";
|
||||
echo html::a("javascript:void(0)", "<i class='icon icon-refresh'></i>", '', "class='btn refresh' title='{$lang->refresh}' onclick='loadLibModules($libID)'");
|
||||
echo '</span>';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->testcase->type;?></th>
|
||||
<td><?php echo html::select('type', $lang->testcase->typeList, $type, "class='form-control chosen'");?></td>
|
||||
<?php if(strpos(",$showFields,", 'stage') !== false):?>
|
||||
<td style='padding-left:15px'<?php echo strpos($config->testcase->create->requiredFields, 'stage') !== false ? ' class="required"' : '';?>>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon w-80px'><?php echo $lang->testcase->stage?></span>
|
||||
<?php echo html::select('stage[]', $lang->testcase->stageList, $stage, "class='form-control chosen' multiple='multiple'");?>
|
||||
</div>
|
||||
</td>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->testcase->title;?></th>
|
||||
<td colspan='2'>
|
||||
<div class="input-group title-group">
|
||||
<div id="titleBox" class="input-control has-icon-right">
|
||||
<?php echo html::input('title', $caseTitle, "class='form-control'");?>
|
||||
<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->testcase->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-right" data-update-color="#title" data-provide="colorpicker">
|
||||
</div>
|
||||
</div>
|
||||
<?php if(strpos(",$showFields,", ',pri,') !== false): // begin print pri selector?>
|
||||
<span class="input-group-addon fix-border br-0"><?php echo $lang->testcase->pri;?></span>
|
||||
<?php
|
||||
$hasCustomPri = false;
|
||||
foreach($lang->testcase->priList as $priKey => $priValue)
|
||||
{
|
||||
if(!empty($priKey) and (string)$priKey != (string)$priValue)
|
||||
{
|
||||
$hasCustomPri = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$priList = $lang->testcase->priList;
|
||||
if(end($priList)) unset($priList[0]);
|
||||
if(!isset($priList[$pri]))
|
||||
{
|
||||
reset($priList);
|
||||
$pri = key($priList);
|
||||
}
|
||||
?>
|
||||
<?php if($hasCustomPri):?>
|
||||
<?php echo html::select('pri', (array)$priList, $pri, "class='form-control'");?>
|
||||
<?php else: ?>
|
||||
<?php ksort($priList);?>
|
||||
<?php $hasPri = strpos($config->testcase->create->requiredFields, 'pri') !== false ? True : False;?>
|
||||
<div <?php echo $hasPri ? "id='priRequiredBox'" : '';?> class="input-group-btn pri-selector <?php echo $hasPri ? 'required' : '';?>" data-type="pri">
|
||||
<button type="button" class="btn dropdown-toggle br-0" data-toggle="dropdown">
|
||||
<span class="pri-text"><span class="label-pri label-pri-<?php echo empty($pri) ? '0' : $pri?>" title="<?php echo $pri?>"><?php echo $pri?></span></span> <span class="caret"></span>
|
||||
</button>
|
||||
<div class='dropdown-menu pull-right'>
|
||||
<?php echo html::select('pri', (array)$priList, $pri, "class='form-control' data-provide='labelSelector' data-label-class='label-pri'");?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php endif; // end print pri selector ?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->testcase->precondition;?></th>
|
||||
<td colspan='2' <?php echo strpos($config->testcase->create->requiredFields, 'precondition') !== false ? ' class="required"' : '';?>><?php echo html::textarea('precondition', $precondition, " rows='2' class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->testcase->steps;?></th>
|
||||
<td colspan='2'>
|
||||
<table class='table table-form mg-0 table-bordered' style='border: 1px solid #ddd'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-id text-center'><?php echo $lang->testcase->stepID;?></th>
|
||||
<th><?php echo $lang->testcase->stepDesc;?></th>
|
||||
<th><?php echo $lang->testcase->stepExpect;?></th>
|
||||
<th class='step-actions'><?php echo $lang->actions;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id='steps' class='sortable' data-group-name='<?php echo $lang->testcase->groupName ?>'>
|
||||
<tr class='template step' id='stepTemplate'>
|
||||
<td class='step-id'></td>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon step-item-id'></span>
|
||||
<textarea rows='1' class='form-control autosize step-steps' name='steps[]'></textarea>
|
||||
<span class="input-group-addon step-type-toggle">
|
||||
<input type='hidden' name='stepType[]' value='item' class='step-type'>
|
||||
<div class='checkbox-primary'>
|
||||
<input tabindex='-1' type="checkbox" class='step-group-toggle'>
|
||||
<label class="checkbox-inline"><?php echo $lang->testcase->group ?></label>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</td>
|
||||
<td><textarea rows='1' class='form-control autosize step-expects' name='expects[]'></textarea></td>
|
||||
<td class='step-actions'>
|
||||
<div class='btn-group'>
|
||||
<button type='button' class='btn btn-step-add'><i class='icon icon-plus'></i></button>
|
||||
<button type='button' class='btn btn-step-move'><i class='icon icon-move'></i></button>
|
||||
<button type='button' class='btn btn-step-delete'><i class='icon icon-close'></i></button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php foreach($steps as $stepID => $step):?>
|
||||
<tr class='step'>
|
||||
<td class='step-id'></td>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon step-item-id'></span>
|
||||
<?php echo html::textarea('steps[]', $step->desc, "rows='1' class='form-control autosize step-steps'") ?>
|
||||
<span class='input-group-addon step-type-toggle'>
|
||||
<?php if(!isset($step->type)) $step->type = 'step';?>
|
||||
<input type='hidden' name='stepType[]' value='<?php echo $step->type;?>' class='step-type'>
|
||||
<div class='checkbox-primary'>
|
||||
<input tabindex='-1' type="checkbox" class='step-group-toggle'<?php if($step->type === 'group') echo ' checked' ?>>
|
||||
<label><?php echo $lang->testcase->group ?></label>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</td>
|
||||
<td><?php echo html::textarea('expects[]', $step->expect, "rows='1' class='form-control autosize step-expects'") ?></td>
|
||||
<td class='step-actions'>
|
||||
<div class='btn-group'>
|
||||
<button type='button' class='btn btn-step-add'><i class='icon icon-plus'></i></button>
|
||||
<button type='button' class='btn btn-step-move'><i class='icon icon-move'></i></button>
|
||||
<button type='button' class='btn btn-step-delete'><i class='icon icon-close'></i></button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<?php if(strpos(",$showFields,", ',keywords,') !== false):?>
|
||||
<tr>
|
||||
<th><?php echo $lang->testcase->keywords;?></th>
|
||||
<td colspan='2' <?php echo strpos($config->testcase->create->requiredFields, 'keywords') !== false ? ' class="required"' : '';?>><?php echo html::input('keywords', '', "class='form-control'");?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th><?php echo $lang->testcase->files;?></th>
|
||||
<td colspan='2'><?php echo $this->fetch('file', 'buildform');?></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan='3' class='text-center form-actions'>
|
||||
<?php echo html::submitButton();?>
|
||||
<?php echo html::backButton();?>
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
<div class='modal fade' id='searchStories'>
|
||||
<div class='modal-dialog'>
|
||||
<div class='modal-content'>
|
||||
<div class='modal-header'>
|
||||
<button type='button' class='close' data-dismiss='modal'><i class='icon icon-close'></i></button>
|
||||
<div class='searchInput w-p90'>
|
||||
<input id='storySearchInput' type='text' class='form-control' placeholder='<?php echo $lang->testcase->searchStories?>'>
|
||||
<i class='icon icon-search'></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class='modal-body'>
|
||||
<ul id='searchResult'></ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php js::set('caseModule', $lang->testcase->module)?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,41 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The edit view of caselib module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package caselib
|
||||
* @version $Id: edit.html.php 4728 2013-05-03 06:14:34Z chencongzhi520@gmail.com $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
<h2><?php echo $lang->caselib->edit;?></h2>
|
||||
</div>
|
||||
<form class='load-indicator main-form form-ajax' method='post' target='hiddenwin' id='dataform'>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th><?php echo $lang->caselib->name;?></th>
|
||||
<td><?php echo html::input('name', $lib->name, "class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->caselib->desc;?></th>
|
||||
<td><?php echo html::textarea('desc', htmlSpecialString($lib->desc), "rows=10 class='form-control'");?></td>
|
||||
</tr>
|
||||
<?php $this->printExtendFields($lib, 'table');?>
|
||||
<tr>
|
||||
<td class='text-center form-actions' colspan='2'>
|
||||
<?php echo html::submitButton();?>
|
||||
<?php echo html::backButton();?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,49 +0,0 @@
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<script>
|
||||
function setDownloading()
|
||||
{
|
||||
if(navigator.userAgent.toLowerCase().indexOf("opera") > -1) return true; // Opera don't support, omit it.
|
||||
|
||||
$.cookie('downloading', 0);
|
||||
time = setInterval("closeWindow()", 300);
|
||||
return true;
|
||||
}
|
||||
|
||||
function closeWindow()
|
||||
{
|
||||
if($.cookie('downloading') == 1)
|
||||
{
|
||||
parent.$.closeModal();
|
||||
$.cookie('downloading', null);
|
||||
clearInterval(time);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<main id="main">
|
||||
<div class="container">
|
||||
<div id="mainContent" class='main-content'>
|
||||
<div class='main-header'>
|
||||
<h2><?php echo $lang->testcase->exportTemplate;?></h2>
|
||||
</div>
|
||||
<form method='post' target='hiddenwin' onsubmit='setDownloading();' style='padding: 40px 5%'>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon'><?php echo $lang->testcase->num;?></span>
|
||||
<?php echo html::input('num', '10', "class='form-control'");?>
|
||||
</div>
|
||||
</td>
|
||||
<td class='c-encode'>
|
||||
<?php echo html::select('encode', $config->charsets[$this->cookie->lang], 'utf-8', "class='form-control'");?>
|
||||
</td>
|
||||
<td class="c-encode">
|
||||
<?php echo html::submitButton('', '', 'btn btn-primary btn-block');?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<?php include '../../common/view/footer.lite.html.php';?>
|
||||
@@ -1,26 +0,0 @@
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<main id="main">
|
||||
<div class="container">
|
||||
<div id="mainContent" class='main-content'>
|
||||
<div class='main-header'>
|
||||
<h2><?php echo $lang->testcase->fileImport;?></h2>
|
||||
</div>
|
||||
<form method='post' enctype='multipart/form-data' target='hiddenwin' style="padding:30px">
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<td>
|
||||
<input type='file' name='file' class='form-control'/>
|
||||
</td>
|
||||
<td class="w-150px">
|
||||
<?php echo html::select('encode', $config->charsets[$this->cookie->lang], 'utf-8', "class='form-control'");?>
|
||||
</td>
|
||||
<td class="w-150px">
|
||||
<?php echo html::submitButton('', '', 'btn btn-primary btn-block');?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<?php include '../../common/view/footer.lite.html.php';?>
|
||||
@@ -1,129 +0,0 @@
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php if(isset($suhosinInfo)):?>
|
||||
<div class='alert alert-info'><?php echo $suhosinInfo?></div>
|
||||
<?php elseif(empty($maxImport) and $allCount > $this->config->file->maxImport):?>
|
||||
<div id="mainContent" class="main-content">
|
||||
<div class="main-header">
|
||||
<h2><?php echo $lang->caselib->import;?></h2>
|
||||
</div>
|
||||
<p><?php echo sprintf($lang->file->importSummary, $allCount, html::input('maxImport', $config->file->maxImport, "style='width:50px'"), ceil($allCount / $config->file->maxImport));?></p>
|
||||
<p><?php echo html::commonButton($lang->import, "id='import'", 'btn btn-primary');?></p>
|
||||
</div>
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
$('#maxImport').keyup(function()
|
||||
{
|
||||
if(parseInt($('#maxImport').val())) $('#times').html(Math.ceil(parseInt($('#allCount').html()) / parseInt($('#maxImport').val())));
|
||||
});
|
||||
$('#import').click(function(){location.href = createLink('caselib', 'showImport', "libID=<?php echo $libID;?>&pageID=1&maxImport=" + $('#maxImport').val())})
|
||||
});
|
||||
</script>
|
||||
<?php else:?>
|
||||
<div id="mainContent" class="main-content">
|
||||
<div class="main-header clearfix">
|
||||
<h2><?php echo $lang->caselib->import;?></h2>
|
||||
</div>
|
||||
<form target='hiddenwin' method='post'>
|
||||
<table class='table table-form' id='showData'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-number'><?php echo $lang->testcase->id?></th>
|
||||
<th class='c-title' id='title'> <?php echo $lang->testcase->title?></th>
|
||||
<th class='c-module' id='module'> <?php echo $lang->testcase->module?></th>
|
||||
<th class='c-pri' id='pri'> <?php echo $lang->testcase->pri?></th>
|
||||
<th class='c-type' id='type'> <?php echo $lang->testcase->type?></th>
|
||||
<th class='c-stage' id='stage'> <?php echo $lang->testcase->stage?></th>
|
||||
<th class='c-text' id='keywords'> <?php echo $lang->testcase->keywords?></th>
|
||||
<th class='c-precondition' id='precondition'><?php echo $lang->testcase->precondition?></th>
|
||||
<th class='c-case-step col-content'>
|
||||
<table class='w-p100 table-borderless'>
|
||||
<tr>
|
||||
<th><?php echo $lang->testcase->stepDesc?></th>
|
||||
<th><?php echo $lang->testcase->stepExpect?></th>
|
||||
</tr>
|
||||
</table>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
$insert = true;
|
||||
$hideContentCol = true;
|
||||
?>
|
||||
<?php foreach($caseData as $key => $case):?>
|
||||
<?php if(empty($case->title)) continue;?>
|
||||
<?php if(!empty($case->id) and !isset($cases[$case->id])) $case->id = 0;?>
|
||||
<tr class='text-left'>
|
||||
<td>
|
||||
<?php
|
||||
if(!empty($case->id))
|
||||
{
|
||||
echo $case->id . html::hidden("id[$key]", $case->id);
|
||||
$insert = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
echo $key . " <sup class='text-green small'>{$lang->testcase->new}</sup>";
|
||||
}
|
||||
echo html::hidden("lib[$key]", $libID);
|
||||
?>
|
||||
</td>
|
||||
<td><?php echo html::input("title[$key]", $case->title, "class='form-control' style='margin-top:2px'")?></td>
|
||||
<td style='overflow:visible'><?php echo html::select("module[$key]", $modules, isset($case->module) ? $case->module : (!empty($case->id) ? $cases[$case->id]->module : ''), "class='form-control chosen'")?></td>
|
||||
<td><?php echo html::select("pri[$key]", $lang->testcase->priList, isset($case->pri) ? $case->pri : (!empty($case->id) ? $cases[$case->id]->pri : ''), "class='form-control chosen'")?></td>
|
||||
<td><?php echo html::select("type[$key]", $lang->testcase->typeList, isset($case->type) ? $case->type : (!empty($case->id) ? $cases[$case->id]->type : ''), "class='form-control chosen'")?></td>
|
||||
<td style='overflow:visible'><?php echo html::select("stage[$key][]", $lang->testcase->stageList, !empty($case->stage) ? $case->stage : (!empty($case->id) ? $cases[$case->id]->stage : ''), "multiple='multiple' class='form-control chosen'")?></td>
|
||||
<td><?php echo html::input("keywords[$key]", isset($case->keywords) ? $case->keywords : "", "class='form-control'")?></td>
|
||||
<td><?php echo html::textarea("precondition[$key]", isset($case->precondition) ? htmlSpecialString($case->precondition) : "", "class='form-control'")?></td>
|
||||
<td class='col-content'>
|
||||
<?php if(isset($stepData[$key]['desc'])):?>
|
||||
<table class='w-p100 bd-0'>
|
||||
<?php foreach($stepData[$key]['desc'] as $id => $desc):?>
|
||||
<?php
|
||||
if(empty($desc['content'])) continue;
|
||||
$hideContentCol = false;
|
||||
?>
|
||||
<tr class='step'>
|
||||
<td><?php echo $id . html::hidden("stepType[$key][$id]", $desc['type'])?></td>
|
||||
<td><?php echo html::textarea("desc[$key][$id]", htmlSpecialString($desc['content']), "class='form-control'")?></td>
|
||||
<td><?php if($desc['type'] != 'group') echo html::textarea("expect[$key][$id]", isset($stepData[$key]['expect'][$id]['content']) ? htmlSpecialString($stepData[$key]['expect'][$id]['content']) : '', "class='form-control'")?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</table>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan='9' class='text-center form-actions'>
|
||||
<?php
|
||||
$submitText = $isEndPage ? $this->lang->save : $this->lang->file->saveAndNext;
|
||||
if(!$insert and $dataInsert === '')
|
||||
{
|
||||
echo "<button type='button' data-toggle='modal' data-target='#importNoticeModal' class='btn btn-primary btn-wide'>{$submitText}</button>";
|
||||
}
|
||||
else
|
||||
{
|
||||
echo html::submitButton($submitText);
|
||||
if($dataInsert !== '') echo html::hidden('insert', $dataInsert);
|
||||
}
|
||||
echo html::hidden('isEndPage', $isEndPage ? 1 : 0);
|
||||
echo html::hidden('pagerID', $pagerID);
|
||||
echo ' ' . html::a($this->createLink('caselib', 'browse', "libID=$libID"), $lang->goback, '', 'class="btn btn-wide"');
|
||||
echo ' ' . sprintf($lang->file->importPager, $allCount, $pagerID, $allPager);
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
<?php if(!$insert and $dataInsert === '') include '../../common/view/noticeimport.html.php';?>
|
||||
</form>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php if(isset($hideContentCol) and $hideContentCol):?>
|
||||
<style>#mainContent .col-content{display: none;}</style>
|
||||
<?php endif;?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user