Merge branch '15.0.beta3' of https://gitlab.zcorp.cc/easycorp/zentaopms into 15.0.beta3
This commit is contained in:
@@ -354,3 +354,5 @@ update zt_block set source='project', block='project' where block='program' and
|
||||
update zt_team set type='execution' where type='project';
|
||||
update zt_action set objectType='execution' where objectType='project';
|
||||
update zt_file set objectType='execution' where objectType='project';
|
||||
|
||||
ALTER TABLE `zt_todo` ADD `deleted` ENUM( "0", "1" ) NOT NULL DEFAULT '0';
|
||||
|
||||
@@ -1086,6 +1086,7 @@ CREATE TABLE IF NOT EXISTS `zt_todo` (
|
||||
`finishedDate` datetime NOT NULL,
|
||||
`closedBy` varchar(30) NOT NULL DEFAULT '',
|
||||
`closedDate` datetime NOT NULL,
|
||||
`deleted` enum('0','1') NOT NULL default '0',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `account` (`account`),
|
||||
KEY `assignedTo` (`assignedTo`),
|
||||
|
||||
@@ -202,7 +202,7 @@ class router extends baseRouter
|
||||
$config->systemScore = $score;
|
||||
|
||||
/* Record hour unit. */
|
||||
$config->hourUnit = 'H';
|
||||
$config->hourUnit = 'h';
|
||||
if($hourKey == STORYPOINT_KEY) $config->hourUnit = 'SP';
|
||||
if($hourKey == FUNCTIONPOINT_KEY) $config->hourUnit = 'FP';
|
||||
|
||||
|
||||
@@ -1 +1,7 @@
|
||||
<?php
|
||||
$config->automation->ztfSite = 'http://www.ztesting.net';
|
||||
$config->automation->ztfDownload = 'https://ztf.im/ztf.html';
|
||||
$config->automation->ztfManual = 'https://ztf.im/book/ztf/ztf-about-26.html';
|
||||
$config->automation->zendataSite = 'https://www.zendata.cn';
|
||||
$config->automation->zendataDownload = 'https://www.zendata.cn/download.html';
|
||||
$config->automation->zendataManual = 'https://www.zendata.cn/book/zendata/why-zendata-115.html';
|
||||
|
||||
@@ -36,16 +36,7 @@ class automation extends control
|
||||
public function __construct($moduleName = '', $methodName = '')
|
||||
{
|
||||
parent::__construct($moduleName, $methodName);
|
||||
|
||||
/* Set testtask menu group. */
|
||||
$this->projectID = isset($_GET['PRJ']) ? $_GET['PRJ'] : 0;
|
||||
if(!$this->projectID)
|
||||
{
|
||||
$this->app->loadConfig('qa');
|
||||
foreach($this->config->qa->menuList as $module) $this->lang->navGroup->$module = 'qa';
|
||||
}
|
||||
|
||||
$this->view->products = $this->products = $this->loadModel('product')->getProductPairsByProject($this->projectID);
|
||||
$this->view->products = $this->products = $products = $this->loadModel('product')->getPairs();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -12,200 +12,55 @@
|
||||
$lang->automation->common = '自动化测试';
|
||||
$lang->automation->browse = '首页';
|
||||
|
||||
$lang->automation->description = '自动化测试解决方案';
|
||||
$lang->automation->ztf = 'ZTF自动化测试管理框架';
|
||||
$lang->automation->zendata = 'ZenData数据生成工具';
|
||||
$lang->automation->title = '自动化测试解决方案——两款工具';
|
||||
|
||||
$lang->automation->details = <<<EOF
|
||||
<article class="article">
|
||||
<header>
|
||||
<h1 class="text-center">自动化测试解决方案</h1>
|
||||
<div class="abstract">
|
||||
<p>
|
||||
摘要:欢迎使用禅道提供的自动化解决方案,本次为大家带来了两款工具。Zentao Testing Framework,简称ZTF,是一款开源自动化测试管理框架。
|
||||
ZenData可以用于手工测试场景下面测试数据的准备,也可以用于自动化测试脚本里面的数据生成和解析。
|
||||
</p>
|
||||
</div>
|
||||
</header>
|
||||
$lang->automation->ztfSite = '禅道ZTF官网';
|
||||
$lang->automation->ztfDownload = 'ZTF框架下载';
|
||||
$lang->automation->ztfManual = 'ZTF框架手册';
|
||||
|
||||
<section class="content">
|
||||
<h2>ZTF自动化测试管理框架</h2>
|
||||
<p>
|
||||
Zentao Testing Framework,简称ZTF,是一款开源自动化测试管理框架。
|
||||
和市面上已有的自动化测试框架相比,ZTF更聚焦于自动化测试的管理功能。
|
||||
ZTF提供了自动化测试脚本的定义、管理、驱动、执行结果的回传、bug的创建以及和其他自动化测框架的集成。
|
||||
ZTF使用go语言开发,可以支持各种平台。ZTF支持常见的编程语言,您可以选择您喜欢用的语言来开发自动化测试脚本。
|
||||
</p>
|
||||
<div class="section">
|
||||
<div class="text-left" style="padding:25px 15px 10px 15px;">
|
||||
<p>
|
||||
<a href="https://ztf.im/index.html" class="btn btn-primary bg-primary btn-lg" target="_blank">禅道ZTF官网</a>
|
||||
<a href="https://ztf.im/ztf.html" class="btn btn-primary bg-primary btn-lg" target="_blank">ZTF框架下载</a>
|
||||
<a href="https://ztf.im/book/ztf/ztf-about-26.html" class="btn btn-primary bg-primary btn-lg" target="_blank">ZTF框架手册</a>
|
||||
</p>
|
||||
<div style="margin-top:15px;" class="text-muted">
|
||||
<p>
|
||||
我们还提供了QQ群和微信群的交流方式,官方QQ技术支持响应时间为:上午9:00—11:30,下午13:00—17:30(周六周日,节假日休息)
|
||||
</p>
|
||||
<p>
|
||||
软件测试交流群: 522506766 (添加客服微信: easycorp666,可邀请您加入软件测试微信群)
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h2>ZenData数据生成工具</h2>
|
||||
<p>
|
||||
ZenData主要两大功能:数据生成和数据解析。通过一个配置文件,可以使用ZenData生成您想要的各种数据。
|
||||
同样也可以对某一个数据文件,指定其数据类型定义的配置文件,完成到结构化数据的解析。
|
||||
ZenData可以用于手工测试场景下面测试数据的准备,也可以用于自动化测试脚本里面的数据生成和解析。还可以一键生成海量数据用于性能和压力测试。
|
||||
</p>
|
||||
<div class="section">
|
||||
<div class="text-left" style="padding:25px 15px 10px 15px;">
|
||||
<p>
|
||||
<a href="https://www.zendata.cn/index.html" class="btn btn-primary bg-primary btn-lg" target="_blank">ZenData官网</a>
|
||||
<a href="https://www.zendata.cn/download.html" class="btn btn-primary bg-primary btn-lg" target="_blank">ZenData下载</a>
|
||||
<a href="https://www.zendata.cn/book/zendata/why-zendata-115.html" class="btn btn-primary bg-primary btn-lg" target="_blank">ZenData手册</a>
|
||||
</p>
|
||||
<div style="margin-top:15px;" class="text-muted">
|
||||
<p>
|
||||
我们还提供了QQ群和微信群的交流方式,官方QQ技术支持响应时间为:上午9:00—11:30,下午13:00—17:30(周六周日,节假日休息)
|
||||
</p>
|
||||
<p>
|
||||
软件测试交流群: 522506766 (添加客服微信: easycorp666,可邀请您加入软件测试微信群)
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
EOF;
|
||||
$lang->automation->ztfDetails = <<<EOF
|
||||
<article class="article">
|
||||
<header>
|
||||
<h1 class="text-center">ZTF自动化测试管理框架</h1>
|
||||
<div class="abstract">
|
||||
<p>
|
||||
摘要:Zentao Testing Framework,简称ZTF,是一款开源自动化测试管理框架。
|
||||
</p>
|
||||
</div>
|
||||
</header>
|
||||
$lang->automation->ztfFeature1 = 'ZTF为你解决各种问题';
|
||||
$lang->automation->ztfFeature2 = 'ZTF为你解决如下问题';
|
||||
$lang->automation->ztfFeature3 = '用例信息的管理';
|
||||
$lang->automation->ztfFeature4 = '测试结果的对比';
|
||||
$lang->automation->ztfFeature5 = '测试脚本的执行';
|
||||
$lang->automation->ztfFeature6 = '缺陷Bug的提交';
|
||||
|
||||
<section class="content">
|
||||
<h4>一、ZTF是什么</h4>
|
||||
<p>
|
||||
Zentao Testing Framework,简称ZTF,是一款开源自动化测试管理框架。
|
||||
和市面上已有的自动化测试框架相比,ZTF更聚焦于自动化测试的管理功能。
|
||||
ZTF提供了自动化测试脚本的定义、管理、驱动、执行结果的回传、bug的创建以及和其他自动化测框架的集成。
|
||||
ZTF使用go语言开发,可以支持各种平台。ZTF支持常见的编程语言,您可以选择您喜欢用的语言来开发自动化测试脚本。
|
||||
</p>
|
||||
<h4>二、为什么来做ZTF</h4>
|
||||
<p>
|
||||
市面上已经有很多自动化测试框架,我们为什么还要来做ZTF呢?ZTF主要是解决测试管理的问题。
|
||||
目前市面上的自动化测试框架主要分为两大类,一类是单元测试框架,一类是某种领域的自动化测试框架。
|
||||
单元测试框架是跟各个语言绑定的,比如cppunit, phpunit等。第二类框架以selenium为代表,可以用来做web的自动化测试。
|
||||
也还有做GUI或者手机应用乃至游戏等场景的自动化测试的框架。
|
||||
</p>
|
||||
<p>
|
||||
这就产生了一个问题,我们需要将这些自动化测试框架的测试脚本统一管理起来。
|
||||
每一个脚本都可以和测试管理系统里面的一个用例进行关联,脚本里面的步骤信息和管理系统里面的用例信息可以互相同步。
|
||||
测试执行的结果可以反映到测试管理系统中,失败的测试脚本可以创建bug。
|
||||
为此我们开发了ZTF测试管理框架。
|
||||
</p>
|
||||
<h4>三、ZTF和其他自动化测试框架的关系</h4>
|
||||
<p>
|
||||
ZTF和其他的自动化测试框架是互相合作的关系。
|
||||
您可以继续使用之前的自动化测试框架来进行脚本的开发,只需要通过注释的方式加入几个标签就可以转换成ztf的自动化测试脚本。
|
||||
</p>
|
||||
<h4>四、ZTF自动化测试框架的特点</h4>
|
||||
<ol>
|
||||
<li>简单:ZTF的语法标签和规则都很简单,一看就会,很容易上手。</li>
|
||||
<li>跨平台:ZTF使用GO语言开发,跨平台,只有一个可执行文件,就可以运行。</li>
|
||||
<li>跨语言:ZTF支持常见的编程语言,你喜欢用什么就用什么。</li>
|
||||
<li>跨框架:ZTF可以和市面上常见的单元测试框架、常见的自动化测试框架都可以很好的集成。</li>
|
||||
<li>工程化:使用ZTF可以真正达到工程化的自动化测试,可以大批量大规模的进行自动化测试的管理和执行。</li>
|
||||
<li>跨场景:借助于其他框架,ZTF可以用来做单元测试、接口测试、web界面测试、GUI界面测试、APP测试等多种场景。</li>
|
||||
</ol>
|
||||
<div class="section">
|
||||
<div class="text-left" style="padding:25px 15px 10px 15px;">
|
||||
<p>
|
||||
<a href="https://ztf.im/index.html" class="btn btn-primary bg-primary btn-lg" target="_blank">禅道ZTF官网</a>
|
||||
<a href="https://ztf.im/ztf.html" class="btn btn-primary bg-primary btn-lg" target="_blank">ZTF框架下载</a>
|
||||
<a href="https://ztf.im/book/ztf/ztf-about-26.html" class="btn btn-primary bg-primary btn-lg" target="_blank">ZTF框架手册</a>
|
||||
</p>
|
||||
<div style="margin-top:15px;" class="text-muted">
|
||||
<p>
|
||||
我们还提供了QQ群和微信群的交流方式,官方QQ技术支持响应时间为:上午9:00—11:30,下午13:00—17:30(周六周日,节假日休息)
|
||||
</p>
|
||||
<p>
|
||||
软件测试交流群: 522506766 (添加客服微信: easycorp666,可邀请您加入软件测试微信群)
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
EOF;
|
||||
$lang->automation->ztfFeature7 = 'ZTF对环境无任何依赖';
|
||||
$lang->automation->ztfFeature8 = '使用Go语言开发';
|
||||
$lang->automation->ztfFeature9 = '部署无任何依赖';
|
||||
$lang->automation->ztfFeature10 = '所有平台均可运行';
|
||||
$lang->automation->ztfFeature11 = '只有一个可执行文件';
|
||||
|
||||
$lang->automation->zendataDetails = <<<EOF
|
||||
<article class="article">
|
||||
<header>
|
||||
<h1 class="text-center">ZenData数据生成工具</h1>
|
||||
<div class="abstract">
|
||||
<p>
|
||||
摘要:ZenData使用YAML来作为数据类型配置文件实现了数据的生成和解析。
|
||||
ZenData可以用于手工测试场景下面测试数据的准备,也可以用于自动化测试脚本里面的数据生成和解析。
|
||||
还可以一键生成海量数据用于性能和压力测试。
|
||||
</p>
|
||||
</div>
|
||||
</header>
|
||||
$lang->automation->ztfFeature12 = 'ZTF对自动化测试方式无要求';
|
||||
$lang->automation->ztfFeature13 = '支持常见的各种开发语言';
|
||||
$lang->automation->ztfFeature14 = '可以和已知测试框架集成';
|
||||
$lang->automation->ztfFeature15 = '对脚本实现方式无要求';
|
||||
|
||||
<section class="content">
|
||||
<h4>一、ZenData的实现原理</h4>
|
||||
<p>
|
||||
ZenData使用YAML来作为数据类型配置文件。对于每一种类型的数据来讲,我们都可以将其拆分成若干的字段。
|
||||
比如我们要测试一个用户的订单表,会有订单的id,用户id或者账户名,订单的名称,订单的金额,订单的时间,订单状态等等字段。
|
||||
我们可以针对每一个字段配置其取值的范围。比如订单id,我可以定义为从1到10000,用户id可以是1-100。
|
||||
这样每一个字段都有了一个取值范围列表。当ZenData来生成数据的时候,从每一个字段里面依次取一个值,将其拼接在一起,就形成了一条记录。
|
||||
大家可以想象成每个字段都是一个转盘,按照自己的频率进行旋转,每一次旋转都从中取出一个值,和其他的字段进行组合。
|
||||
</p>
|
||||
<p>上面说的是最基本的的工作原理,ZenData还提供了步长、随机、循环、引用等多种定义方式,我们会在接下来的手册里面展开讲。</p>
|
||||
<h4>二、ZenData的用途</h4>
|
||||
<p>
|
||||
ZenData主要两大功能:数据生成和数据解析。通过一个配置文件,可以使用ZenData生成您想要的各种数据。
|
||||
同样也可以对某一个数据文件,指定其数据类型定义的配置文件,完成到结构化数据的解析。
|
||||
ZenData可以用于手工测试场景下面测试数据的准备,也可以用于自动化测试脚本里面的数据生成和解析。还可以一键生成海量数据用于性能和压力测试。
|
||||
</p>
|
||||
<h4>三、ZenData主要的特点</h4>
|
||||
<ol>
|
||||
<li>简单无依赖,只有一个可执行文件,即可满足命令行生成和HTTP接口两种数据生成服务。</li>
|
||||
<li>使用配置文件来生成数据,使用人员不需要有开发知识,即可上手应用。</li>
|
||||
<li>提供了功能强大的语法,分组、区间、步长、循环、随机、格式化和前后缀等,配置灵活性极强。</li>
|
||||
<li>支持从文本文件中读取数据,方便用户对字段取值进行精确控制。</li>
|
||||
<li>提供了Excel表格数据的标准SQL查询接口,使用更加灵活。</li>
|
||||
<li>使用预制的序列(ranges)、实例(instances)、配置(config)对定义进行复用,以解决复杂数据格式的定义。</li>
|
||||
<li>语法支持继承和扩展,为定义文件间的复用提供方便。</li>
|
||||
<li>可以反向解析数据,可以对程序的输出进行解析,方便自动化测试脚本进行比对。</li>
|
||||
<li>发行包內置了基础业务数据的定义文件(不断完善中)。</li>
|
||||
<li>提供了HTTP接口数据生成服务,各种语言都可以方便调用。</li>
|
||||
</ol>
|
||||
<div class="section">
|
||||
<div class="text-left" style="padding:25px 15px 10px 15px;">
|
||||
<p>
|
||||
<a href="https://www.zendata.cn/index.html" class="btn btn-primary bg-primary btn-lg" target="_blank">ZenData官网</a>
|
||||
<a href="https://www.zendata.cn/download.html" class="btn btn-primary bg-primary btn-lg" target="_blank">ZenData下载</a>
|
||||
<a href="https://www.zendata.cn/book/zendata/why-zendata-115.html" class="btn btn-primary bg-primary btn-lg" target="_blank">ZenData手册</a>
|
||||
</p>
|
||||
<div style="margin-top:15px;" class="text-muted">
|
||||
<p>
|
||||
我们还提供了QQ群和微信群的交流方式,官方QQ技术支持响应时间为:上午9:00—11:30,下午13:00—17:30(周六周日,节假日休息)
|
||||
</p>
|
||||
<p>
|
||||
软件测试交流群: 522506766 (添加客服微信: easycorp666,可邀请您加入软件测试微信群)
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
</article>
|
||||
EOF;
|
||||
$lang->automation->ztfFeature16 = '可批量将禅道测试用例导出为脚本';
|
||||
$lang->automation->ztfFeature17 = '可以将执行结果提交到禅道中';
|
||||
$lang->automation->ztfFeature18 = '可以将执行结果创建为Bug';
|
||||
$lang->automation->ztfFeature19 = 'ZTF和禅道深度集成';
|
||||
|
||||
$lang->automation->zendataSite = 'ZenData官网';
|
||||
$lang->automation->zendataDownload = 'ZenData下载';
|
||||
$lang->automation->zendataManual = 'ZenData手册';
|
||||
|
||||
$lang->automation->zendata = '通用数据生成利器';
|
||||
$lang->automation->zendataFeature1 = '不懂代码也可以使用,轻松上手';
|
||||
$lang->automation->zendataFeature2 = '数据格式完全自定义,无任何限制';
|
||||
$lang->automation->zendataFeature3 = '一键生成百万条数据,毫无压力';
|
||||
|
||||
$lang->automation->zendataFeature4 = '跨平台跨语言';
|
||||
$lang->automation->zendataFeature5 = '运行只需要一个可执行文件';
|
||||
$lang->automation->zendataFeature6 = 'Windows、Linux、MacOS都可以用';
|
||||
$lang->automation->zendataFeature7 = '各种语言都可以用';
|
||||
|
||||
$lang->automation->zendataFeature8 = '各种黑技巧';
|
||||
$lang->automation->zendataFeature9 = '区间,步长,随机,重复,引用';
|
||||
$lang->automation->zendataFeature10 = '指定文件列表,从excel中查询';
|
||||
$lang->automation->zendataFeature11 = '平行生成、递归生成、反向解析';
|
||||
|
||||
$lang->automation->groupTips = '欢迎扫码加入自动化测试QQ交流群';
|
||||
$lang->automation->groupTitle = '软件测试交流群:';
|
||||
$lang->automation->qqGroup = '522506766';
|
||||
$lang->automation->groupDescription = '为软件测试从业者提供的软件测试技术交流社群,分享软件测试工具与方法,帮助大家提升软件测试技能水平。';
|
||||
|
||||
@@ -11,28 +11,178 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<style>
|
||||
.ztf-block {width: 100%; margin-top: 22px; background: linear-gradient(to bottom, #deeaf8 , #f4f7fe); display: inline-flex; box-shadow: 2px 2px 5px #e2dede;}
|
||||
.ztf-logo {width: 40%; height: 190px; display: inline-block; line-height: 190px; text-align: right; padding-right: 65px;}
|
||||
.ztf-download {width: 45%; height: 190px; display: inline-block;}
|
||||
.ztf-download-trait {display: inline-block; width: 100%; margin: 45px 0px 6px 0px; font-weight:bold; font-size: 15px; color: #0c4678;}
|
||||
.ztf-download-trait div {width: 35%; float: left; padding: 8px 0px;}
|
||||
.ztf-download-button {width: 100%;}
|
||||
.ztf-download-button a {margin-right: 15px; font-weight:bold; font-size: 14px;}
|
||||
.dot-symbol{font-size: 12px; margin-right: 5px;}
|
||||
|
||||
.block-content {width: 100%;}
|
||||
.block-details {width: 49%; display: inline-block; padding: 30px 140px; margin-top: 20px; box-shadow: 2px 2px 5px #e2dede;}
|
||||
.block-details-right {float: right;}
|
||||
.block-details p {font-size: 18px; font-weight:bold; margin: 0 0 10px 20px;}
|
||||
.block-details li {width: 40%; float: left; padding: 6px 0px; font-size: 14px; font-weight:bold; color: #666666; text-align: left; list-style:none;}
|
||||
.block-details-line li {width: 100%;}
|
||||
|
||||
.zendata-block {width: 100%; margin-top: 40px; background: linear-gradient(to bottom, #deeaf8 , #f4f7fe); display: inline-flex; box-shadow: 2px 2px 5px #e2dede;}
|
||||
.zendata-logo {width: 40%; height: 170px; display: inline-block; line-height: 170px; text-align: right; padding-right: 90px;}
|
||||
.zendata-download {width: 45%; height: 170px; display: inline-block;}
|
||||
.zendata-download-trait {display: inline-block; width: 100%; margin: 60px 0px 6px 0px; font-weight:bold; font-size: 15px; color: #0c4678;}
|
||||
.zendata-download-trait div {margin-right: 35px; float: left; padding: 8px 0px;}
|
||||
.zendata-download-button {width: 100%;}
|
||||
.zendata-download-button a {margin-right: 15px; font-weight:bold; font-size: 14px;}
|
||||
|
||||
.zentata-content {display: table; width: 100%; table-layout: fixed; margin-top: 20px;}
|
||||
.block-zendata-block {display: table-cell;}
|
||||
.block-zendata {width: 96%; display: inline-block; padding: 30px 40px; margin-top: 20px; box-shadow: 2px 2px 5px #e2dede;}
|
||||
.block-zendata p {font-size: 18px; font-weight:bold; margin: 0 0 10px 20px;}
|
||||
.block-zendata li {width: 100%; float: left; padding: 6px 0px; font-size: 14px; font-weight:bold; color: #666666; text-align: left; list-style:none;}
|
||||
.qr-code {margin-top: 20px; padding: 20px 0px 20px 60px; box-shadow: 2px 2px 5px #e2dede;}
|
||||
.qr-code-img {width: 90px; height: 90px; display: inline-block; float: left;}
|
||||
.qr-code-details {display: inline-block; margin: 10px 0px 0px 10px;}
|
||||
.qr-code-details div{margin: 5px 0px;}
|
||||
.qr-code-group {color: #898989;}
|
||||
@media screen and (max-height: 768px)
|
||||
{
|
||||
.qr-code {padding: 20px 0px 20px 45px;}
|
||||
.block-details li {width: 50%;}
|
||||
.block-details-line li {width: 100%;}
|
||||
.ztf-download-trait div {width: 47%;}
|
||||
.block-details {padding: 30px 60px;}
|
||||
.block-zendata {padding: 30px 25px;}
|
||||
}
|
||||
.btn-automation {background: linear-gradient(to bottom, #0bb6fb, #0d67e1); border: 0px; padding: 8px 12px;}
|
||||
</style>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class="row">
|
||||
<div class="col-xs-2">
|
||||
<ul class="nav nav-tabs nav-stacked">
|
||||
<li class="active"><a href="###" data-target="#tab3Content1" data-toggle="tab"><?php echo $lang->automation->description;?></a></li>
|
||||
<li><a href="###" data-target="#tab3Content2" data-toggle="tab"><?php echo $lang->automation->ztf;?></a></li>
|
||||
<li><a href="###" data-target="#tab3Content3" data-toggle="tab"><?php echo $lang->automation->zendata;?></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-xs-1"></div>
|
||||
<div class="col-xs-10">
|
||||
<div class="tab-content col-xs-10">
|
||||
<div class="tab-pane fade active in" id="tab3Content1">
|
||||
<?php echo $lang->automation->details;?>
|
||||
<div class='text-center'>
|
||||
<h2 style='margin-top: 18px;'><?php echo $lang->automation->title;?></h1>
|
||||
</div>
|
||||
<div class='ztf-block'>
|
||||
<div class='ztf-logo'>
|
||||
<img src='<?php echo $config->webRoot . 'theme/default/images/main/ztf.png';?>' />
|
||||
</div>
|
||||
<div class="tab-pane fade" id="tab3Content2">
|
||||
<?php echo $lang->automation->ztfDetails;?>
|
||||
<div class='ztf-download'>
|
||||
<div class='ztf-download-trait'>
|
||||
<div><span class='dot-symbol'>●</span><span><?php echo $lang->automation->ztfFeature1;?></span></div>
|
||||
<div><span class='dot-symbol'>●</span><span><?php echo $lang->automation->ztfFeature19;?></span></div>
|
||||
<div><span class='dot-symbol'>●</span><span><?php echo $lang->automation->ztfFeature7;?></span></div>
|
||||
<div><span class='dot-symbol'>●</span><span><?php echo $lang->automation->ztfFeature12;?></span></div>
|
||||
</div>
|
||||
<div class="ztf-download-button">
|
||||
<a href="<?php echo $config->automation->ztfSite;?>" target='_blank' class='btn btn-primary btn-automation'><?php echo $lang->automation->ztfSite;?></a>
|
||||
<a href="<?php echo $config->automation->ztfDownload;?>" target='_blank' class='btn btn-primary btn-automation'><?php echo $lang->automation->ztfDownload;?></a>
|
||||
<a href="<?php echo $config->automation->ztfManual;?>" target='_blank' class='btn btn-primary btn-automation'><?php echo $lang->automation->ztfManual;?></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="tab3Content3">
|
||||
<?php echo $lang->automation->zendataDetails;?>
|
||||
</div>
|
||||
|
||||
<div class='block-content'>
|
||||
<div class='block-details'>
|
||||
<p><?php echo $lang->automation->ztfFeature2;?></p>
|
||||
<ul>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature3;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature4;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature5;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature6;?></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class='block-details block-details-right'>
|
||||
<p><?php echo $lang->automation->ztfFeature7;?></p>
|
||||
<ul>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature8;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature9;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature10;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature11;?></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class='block-details block-details-line'>
|
||||
<p><?php echo $lang->automation->ztfFeature12;?></p>
|
||||
<ul>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature13;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature14;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature15;?></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class='block-details block-details-line block-details-right'>
|
||||
<p><?php echo $lang->automation->ztfFeature12;?></p>
|
||||
<ul>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature16;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature17;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature18;?></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='zendata-block'>
|
||||
<div class='zendata-logo'>
|
||||
<img src='<?php echo $config->webRoot . 'theme/default/images/main/zendata.png';?>' />
|
||||
</div>
|
||||
<div class='zendata-download'>
|
||||
<div class='zendata-download-trait'>
|
||||
<div><span class='dot-symbol'>●</span><?php echo $lang->automation->zendata;?></div>
|
||||
<div><span class='dot-symbol'>●</span><?php echo $lang->automation->zendataFeature4;?></div>
|
||||
<div><span class='dot-symbol'>●</span><?php echo $lang->automation->zendataFeature8;?></div>
|
||||
</div>
|
||||
<div class="zendata-download-button">
|
||||
<a href="<?php echo $config->automation->zendataSite;?>" target='_blank' class='btn btn-primary btn-automation'><?php echo $lang->automation->zendataSite;?></a>
|
||||
<a href="<?php echo $config->automation->zendataDownload;?>" target='_blank' class='btn btn-primary btn-automation'><?php echo $lang->automation->zendataDownload;?></a>
|
||||
<a href="<?php echo $config->automation->zendataManual;?>" target='_blank' class='btn btn-primary btn-automation'><?php echo $lang->automation->zendataManual;?></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='zentata-content'>
|
||||
<div class='block-zendata-block'>
|
||||
<div class='block-zendata'>
|
||||
<p><?php echo $lang->automation->zendata;?></p>
|
||||
<ul>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->zendataFeature1;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->zendataFeature2;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->zendataFeature3;?></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class='block-zendata-block'>
|
||||
<div class='block-zendata'>
|
||||
<p><?php echo $lang->automation->zendataFeature4;?></p>
|
||||
<ul>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->zendataFeature5;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->zendataFeature6;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->zendataFeature7;?></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class='block-zendata-block'>
|
||||
<div class='block-zendata' style='width: 100%;'>
|
||||
<p><?php echo $lang->automation->zendataFeature8;?></p>
|
||||
<ul>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->zendataFeature9;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->zendataFeature10;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->zendataFeature11;?></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='qr-code'>
|
||||
<div class='qr-code-img'>
|
||||
<img src='<?php echo $config->webRoot . 'theme/default/images/main/qrcode.png';?>' />
|
||||
</div>
|
||||
<div class='qr-code-details'>
|
||||
<div style='font-size: 16px; font-weight: bold;'><?php echo $lang->automation->groupTips;?></div>
|
||||
<div class='qr-code-group'><span><?php echo $lang->automation->groupTitle;?></span> <span style='color: #1d7cf1;'><?php echo $lang->automation->qqGroup;?></span></div>
|
||||
<div class='qr-code-group'><?php echo $lang->automation->groupDescription;?></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-1"></div>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -1701,6 +1701,7 @@ class block extends control
|
||||
$stmt = $this->dao->select('*')->from(TABLE_TODO)
|
||||
->where("(assignedTo = '{$this->app->user->account}' or (account='{$this->app->user->account}'))")
|
||||
->andWhere('cycle')->eq(0)
|
||||
->andWhere('deleted')->eq(0)
|
||||
->andWhere('status')->eq('wait')
|
||||
->orderBy('`date` desc');
|
||||
if(isset($params->todoNum)) $stmt->limit($params->todoNum);
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<style>.table .c-progress {width: 60px;}</style>
|
||||
<?php if(empty($executionStats)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
@@ -56,10 +57,8 @@
|
||||
<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 progress-text-left">
|
||||
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="<?php echo $execution->hours->progress;?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $execution->hours->progress;?>%">
|
||||
<span class="progress-text"><?php echo $execution->hours->progress;?>%</span>
|
||||
</div>
|
||||
<div class='progress-pie' data-doughnut-size='90' data-color='#00da88' data-value='<?php echo $execution->hours->progress;?>' data-width='24' data-height='24' data-back-color='#e8edf3'>
|
||||
<div class='progress-info'><?php echo $execution->hours->progress;?></div>
|
||||
</div>
|
||||
</td>
|
||||
<?php if($longBlock):?>
|
||||
|
||||
@@ -19,7 +19,7 @@ if(!$selfCall) die(include('./todolist.html.php'));
|
||||
.block-todoes .todoes-input .form-control:-ms-input-placeholder {font-size: 12px; line-height: 20px;color: #a4a8b6;}
|
||||
.block-todoes .todoes-input .form-control::placeholder {font-size: 12px; line-height: 20px; color: #a4a8b6;}
|
||||
.block-todoes .todoes {padding: 0 10px 10px 10px; margin: 0 -20px; max-height: 350px; overflow: auto; overflow-x:hidden}
|
||||
.block-todoes .todoes > li {position: relative; padding: 5px 10px 5px 35px; list-style: none; white-space:nowrap; overflow: auto; overflow-x:hidden; width: 410px;}
|
||||
.block-todoes .todoes > li {position: relative; padding: 5px 10px 5px 35px; list-style: none; white-space:nowrap; overflow: auto; overflow-x:hidden;}
|
||||
.block-todoes .todoes > li:hover {background-color: #e9f2fb;}
|
||||
.block-todoes .todo-title {padding: 5px 15px 5px 5px;}
|
||||
.block-todoes .todo-pri {margin: 0 5px;}
|
||||
|
||||
@@ -67,7 +67,10 @@
|
||||
<div class='cell'><?php include '../../common/view/action.html.php';?></div>
|
||||
<?php
|
||||
$params = "bugID=$bug->id";
|
||||
$copyParams = "productID=$productID&branch=$bug->branch&extras=bugID=$bug->id,projectID={$bug->project},executionID={$bug->execution}";
|
||||
$extraParams = "extras=bugID=$bug->id";
|
||||
if($this->app->openApp == 'project') $extraParams .= ",projectID={$bug->project}";
|
||||
if($this->app->openApp == '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'>
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
<td class='text-left'><?php echo $URSR['SRName'];?></td>
|
||||
<td class='c-actions'>
|
||||
<?php $disabled = $key == $config->custom->URSR ? "disabled=disabled" : '';?>
|
||||
<?php if(common::hasPriv('custom', 'editStoryConcept')) echo html::a($this->createLink('custom', 'editStoryConcept', "id=$key", '', true), "<i class='icon icon-edit'></i>", '', "class='btn iframe' title={$lang->edit}");?>
|
||||
<?php if(common::hasPriv('custom', 'editStoryConcept')) echo html::a($this->createLink('custom', 'editStoryConcept', "id=$key", '', true), "<i class='icon icon-edit'></i>", '', "class='btn iframe' data-width=50% title={$lang->edit}");?>
|
||||
<?php if(common::hasPriv('custom', 'deleteStoryConcept')) echo html::a($this->createLink('custom', 'deleteStoryConcept', "id=$key"), "<i class='icon icon-trash'></i>", 'hiddenwin', "class='btn' $disabled title={$lang->delete} data-group='admin'");?>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#linkButton {border-radius: 4px !important;}
|
||||
tbody > tr > td > .btn-icon {margin-right: 4px;}
|
||||
.table td.c-estimate {padding-right: 12px;}
|
||||
#modules a.active {color: #0c64eb;}
|
||||
@media (max-width: 1200px) {#storyList .c-user, #storyList .c-estimate {display: none !important;};}
|
||||
@media (max-width: 1000px) {#storyList .c-status, #storyList .c-pri {display: none !important;};}
|
||||
|
||||
@@ -2,6 +2,7 @@ td.delayed {background: #e84e0f !important; color: white;}
|
||||
#int-dropdown {margin-left: -8px; border-radius: 4px; border: 1px solid #0c64eb;}
|
||||
#projectTaskForm table tbody tr td {overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
th.c-deadline {text-align: center;}
|
||||
.table td.c-estimate, .table td.c-consumed, .table td.c-left {padding-right: 12px;}
|
||||
.c-estimate {text-align: right;}
|
||||
.c-consumed {text-align: right;}
|
||||
.c-left {text-align: right;}
|
||||
|
||||
@@ -35,7 +35,7 @@ $lang->execution->to = '至';
|
||||
$lang->execution->days = '可用工作日';
|
||||
$lang->execution->day = '天';
|
||||
$lang->execution->workHour = '工时';
|
||||
$lang->execution->workHourUnit = 'H';
|
||||
$lang->execution->workHourUnit = 'h';
|
||||
$lang->execution->totalHours = '可用工时';
|
||||
$lang->execution->totalDays = '可用工日';
|
||||
$lang->execution->status = $lang->executionCommon . '状态';
|
||||
@@ -294,7 +294,7 @@ $lang->execution->noExecution = "暂时没有{$lang->executionCommon}。
|
||||
$lang->execution->noMembers = '暂时没有团队成员。';
|
||||
$lang->execution->workloadTotal = "工作量占比累计不应当超过100, 当前产品下的工作量之和为%s";
|
||||
// $lang->execution->linkProjectStoryTip = "(关联{$lang->SRCommon}来源于项目下所关联的{$lang->SRCommon})";
|
||||
$lang->execution->linkAllStoryTip = "(项目下还未关联{$lang->SRCommon},可直接关联该迭代/阶段/冲刺所关联产品的{$lang->SRCommon})";
|
||||
$lang->execution->linkAllStoryTip = "(项目下还未关联{$lang->SRCommon},可直接关联该执行所关联产品的{$lang->SRCommon})";
|
||||
|
||||
/* 交互提示。*/
|
||||
$lang->execution->confirmDelete = "您确定删除{$lang->executionCommon}[%s]吗?";
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
.table td.has-child > .plan-toggle > .icon {font-size: 16px; display: inline-block; transition: transform .2s; -ms-transform:rotate(-90deg); -moz-transform:rotate(-90deg); -o-transform:rotate(-90deg); -webkit-transform:rotate(-90deg); transform: rotate(-90deg);}
|
||||
.table td.has-child > .plan-toggle > .icon:before {text-align: left;}
|
||||
.table td.has-child > .plan-toggle.collapsed > .icon {-ms-transform:rotate(90deg); -moz-transform:rotate(90deg); -o-transform:rotate(90deg); -webkit-transform:rotate(90deg); transform: rotate(90deg);}
|
||||
.table td.hours {padding-right: 12px;}
|
||||
.main-table tbody > tr.table-children > td:first-child::before {width: 3px;}
|
||||
.hours {text-align: right; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
@-moz-document url-prefix() {.main-table tbody > tr.table-children > td:first-child::before {width: 4px;}}
|
||||
@@ -103,9 +104,9 @@
|
||||
<td class='c-status' title='<?php echo $executionStatus;?>'>
|
||||
<span class="status-execution status-<?php echo $execution->status?>"><?php echo $executionStatus;?></span>
|
||||
</td>
|
||||
<td class='hours' title='<?php echo $execution->hours->totalEstimate . ' ' . $this->lang->execution->workHour;?>'><?php echo $execution->hours->totalEstimate . ' ' . $this->lang->execution->workHourUnit;?></td>
|
||||
<td class='hours' title='<?php echo $execution->hours->totalConsumed . ' ' . $this->lang->execution->workHour;?>'><?php echo $execution->hours->totalConsumed . ' ' . $this->lang->execution->workHourUnit;?></td>
|
||||
<td class='hours' title='<?php echo $execution->hours->totalLeft . ' ' . $this->lang->execution->workHour;?>'><?php echo $execution->hours->totalLeft . ' ' . $this->lang->execution->workHourUnit;?></td>
|
||||
<td class='hours' title='<?php echo $execution->hours->totalEstimate . ' ' . $this->lang->execution->workHour;?>'><?php echo $execution->hours->totalEstimate . $this->lang->execution->workHourUnit;?></td>
|
||||
<td class='hours' title='<?php echo $execution->hours->totalConsumed . ' ' . $this->lang->execution->workHour;?>'><?php echo $execution->hours->totalConsumed . $this->lang->execution->workHourUnit;?></td>
|
||||
<td class='hours' title='<?php echo $execution->hours->totalLeft . ' ' . $this->lang->execution->workHour;?>'><?php echo $execution->hours->totalLeft . $this->lang->execution->workHourUnit;?></td>
|
||||
<td class="c-progress">
|
||||
<div class='progress-pie' data-doughnut-size='90' data-color='#00da88' data-value='<?php echo $execution->hours->progress;?>' data-width='24' data-height='24' data-back-color='#e8edf3'>
|
||||
<div class='progress-info'><?php echo $execution->hours->progress;?></div>
|
||||
|
||||
@@ -202,9 +202,9 @@
|
||||
<td class="c-status"><span class='status-task status-<?php echo $task->status;?>'> <?php echo $this->processStatus('task', $task);?></span></td>
|
||||
<td class="c-assign text-left"><?php echo "<span class='$assignedToClass'>" . $task->assignedToRealName . "</span>";?></td>
|
||||
<td class='c-user'><?php echo zget($users, $task->finishedBy);?></td>
|
||||
<td class="c-hours em" title="<?php echo $task->estimate . ' ' . $lang->execution->workHour;?>"><?php echo $task->estimate . ' ' . $lang->execution->workHourUnit;?></td>
|
||||
<td class="c-hours em" title="<?php echo $task->consumed . ' ' . $lang->execution->workHour;?>"><?php echo $task->consumed . ' ' . $lang->execution->workHourUnit;?></td>
|
||||
<td class="c-hours em" title="<?php echo $task->left . ' ' . $lang->execution->workHour;?>"><?php echo $task->left . ' ' . $lang->execution->workHourUnit;?></td>
|
||||
<td class="c-hours em" title="<?php echo $task->estimate . ' ' . $lang->execution->workHour;?>"><?php echo $task->estimate . $lang->execution->workHourUnit;?></td>
|
||||
<td class="c-hours em" title="<?php echo $task->consumed . ' ' . $lang->execution->workHour;?>"><?php echo $task->consumed . $lang->execution->workHourUnit;?></td>
|
||||
<td class="c-hours em" title="<?php echo $task->left . ' ' . $lang->execution->workHour;?>"><?php echo $task->left . $lang->execution->workHourUnit;?></td>
|
||||
<td class="c-num em"><?php echo $task->progress . '%';?></td>
|
||||
<td class="c-type"><?php echo zget($lang->task->typeList, $task->type);?></td>
|
||||
<td class='c-date <?php if(isset($task->delay)) echo 'delayed';?>'><?php if(substr($task->deadline, 0, 4) > 0) echo $task->deadline;?></td>
|
||||
|
||||
@@ -179,7 +179,7 @@
|
||||
</td>
|
||||
<td class='c-user' title='<?php echo zget($users, $story->openedBy);?>'><?php echo zget($users, $story->openedBy);?></td>
|
||||
<td class='c-user' title='<?php echo zget($users, $story->assignedTo);?>'><?php echo zget($users, $story->assignedTo);?></td>
|
||||
<td class='c-estimate text-right' title="<?php echo $story->estimate . ' ' . $lang->hourCommon;?>"><?php echo $story->estimate . ' ' . $config->hourUnit;?></td>
|
||||
<td class='c-estimate text-right' title="<?php echo $story->estimate . ' ' . $lang->hourCommon;?>"><?php echo $story->estimate . $config->hourUnit;?></td>
|
||||
<?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>
|
||||
|
||||
@@ -7,5 +7,6 @@
|
||||
.table td.has-child > .story-toggle > .icon {font-size: 16px; display: inline-block; transition: transform .2s; -ms-transform: rotate(-90deg); -moz-transform: rotate(-90deg); -o-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); transform: rotate(-90deg);}
|
||||
.table td.has-child > .story-toggle > .icon:before {text-align: left;}
|
||||
.table td.has-child > .story-toggle.collapsed > .icon {-ms-transform: rotate(90deg); -moz-transform: rotate(90deg); -o-transform: rotate(90deg); -webkit-transform: rotate(90deg); transform: rotate(90deg);}
|
||||
.table td.c-hours {padding-right: 12px;}
|
||||
.main-table tbody > tr.table-children > td:first-child::before {width: 3px;}
|
||||
@-moz-document url-prefix() {.main-table tbody > tr.table-children > td:first-child::before {width: 4px;};}
|
||||
|
||||
@@ -7,5 +7,6 @@
|
||||
.table td.has-child > .story-toggle > .icon {font-size: 16px; display: inline-block; transition: transform .2s; -ms-transform: rotate(-90deg); -moz-transform: rotate(-90deg); -o-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); transform: rotate(-90deg);}
|
||||
.table td.has-child > .story-toggle > .icon:before {text-align: left;}
|
||||
.table td.has-child > .story-toggle.collapsed > .icon {-ms-transform: rotate(90deg); -moz-transform: rotate(90deg); -o-transform: rotate(90deg); -webkit-transform: rotate(90deg); transform: rotate(90deg);}
|
||||
.table td.c-hours {padding-right: 12px;}
|
||||
.main-table tbody > tr.table-children > td:first-child::before {width: 3px;}
|
||||
@-moz-document url-prefix() {.main-table tbody > tr.table-children > td:first-child::before {width: 4px;};}
|
||||
|
||||
@@ -10,5 +10,6 @@ td.delayed {background: #e84e0f !important; color: white;}
|
||||
.table td.has-child > .task-toggle > .icon:before {text-align: left;}
|
||||
.table td.has-child > .task-toggle.collapsed {top: 2px;}
|
||||
.table td.has-child > .task-toggle.collapsed > .icon {-ms-transform: rotate(90deg); -moz-transform: rotate(90deg); -o-transform: rotate(90deg); -webkit-transform: rotate(90deg); transform: rotate(90deg);}
|
||||
.table td.c-hours {padding-right: 12px;}
|
||||
.main-table tbody > tr.table-children > td:first-child::before {width: 3px;}
|
||||
@-moz-document url-prefix() {.main-table tbody > tr.table-children > td:first-child::before {width: 4px;};}
|
||||
|
||||
@@ -34,7 +34,9 @@
|
||||
<tr class='text-left'>
|
||||
<th class='w-id'><?php echo $lang->idAB;?></th>
|
||||
<th class='c-name text-left'><?php echo $lang->my->name;?></th>
|
||||
<?php if($config->systemMode == 'new'):?>
|
||||
<th class='c-name text-left'><?php echo $lang->my->projects;?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-date'><?php echo $lang->execution->begin;?></th>
|
||||
<th class='c-date'><?php echo $lang->execution->end;?></th>
|
||||
<th class='c-status'><?php echo $lang->statusAB;?></th>
|
||||
@@ -54,7 +56,9 @@
|
||||
<span class='project-type-label label label-info label-outline'><?php echo zget($lang->execution->typeList, $execution->type);?></span>
|
||||
<?php echo html::a($link, $execution->name, '', "title='$execution->name'");?>
|
||||
</td>
|
||||
<?php if($config->systemMode == 'new'):?>
|
||||
<td class='c-name text-left'><?php echo html::a($this->createLink('project', 'browse', "id=$execution->project", '', '', $execution->project), $execution->projectName, '', "title='$execution->projectName'");?></td>
|
||||
<?php endif;?>
|
||||
<td><?php echo $execution->begin;?></td>
|
||||
<td><?php echo $execution->end;?></td>
|
||||
<td class="c-status">
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
</td>
|
||||
<td class='c-product'><?php echo $story->productTitle;?></td>
|
||||
<td class='c-user'><?php echo zget($users, $story->openedBy);?></td>
|
||||
<td class='c-hours' title="<?php echo $story->estimate . ' ' . $lang->hourCommon;?>"><?php echo $story->estimate . ' ' . $config->hourUnit;?></td>
|
||||
<td class='c-hours' title="<?php echo $story->estimate . ' ' . $lang->hourCommon;?>"><?php echo $story->estimate . $config->hourUnit;?></td>
|
||||
<td class='c-status'><span class='status-story status-<?php echo $story->status;?>'> <?php echo $this->processStatus('story', $story);?></span></td>
|
||||
<td class='c-stage'><?php echo zget($lang->story->stageList, $story->stage);?></td>
|
||||
<td class='c-actions'>
|
||||
@@ -125,7 +125,7 @@
|
||||
</td>
|
||||
<td class='c-product'><?php echo $child->productTitle;?></td>
|
||||
<td class='c-user'><?php echo zget($users, $child->openedBy);?></td>
|
||||
<td class='c-hours'><?php echo $child->estimate . ' ' . $config->hourUnit;?></td>
|
||||
<td class='c-hours'><?php echo $child->estimate . $config->hourUnit;?></td>
|
||||
<td class='c-status'><span class='status-story status-<?php echo $child->status;?>'> <?php echo $this->processStatus('story', $child);?></span></td>
|
||||
<td class='c-stage'><?php echo zget($lang->story->stageList, $child->stage);?></td>
|
||||
<td class='c-actions'>
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
<td class='c-product'><?php echo $story->productTitle;?></td>
|
||||
<td class='c-plan'><?php echo $story->planTitle;?></td>
|
||||
<td class='c-user'><?php echo zget($users, $story->openedBy);?></td>
|
||||
<td class='c-hours' title="<?php echo $story->estimate . ' ' . $lang->hourCommon;?>"><?php echo $story->estimate . ' ' . $config->hourUnit;?></td>
|
||||
<td class='c-hours' title="<?php echo $story->estimate . ' ' . $lang->hourCommon;?>"><?php echo $story->estimate . $config->hourUnit;?></td>
|
||||
<td class='c-status'><span class='status-story status-<?php echo $story->status;?>'> <?php echo $this->processStatus('story', $story);?></span></td>
|
||||
<td class='c-stage'><?php echo zget($lang->story->stageList, $story->stage);?></td>
|
||||
<td class='c-actions'>
|
||||
@@ -128,7 +128,7 @@
|
||||
<td class='c-product'><?php echo $child->productTitle;?></td>
|
||||
<td class='c-plan'><?php echo $child->planTitle;?></td>
|
||||
<td class='c-user'><?php echo zget($users, $child->openedBy);?></td>
|
||||
<td class='c-hours'><?php echo $child->estimate . ' ' . $config->hourUnit;?></td>
|
||||
<td class='c-hours'><?php echo $child->estimate . $config->hourUnit;?></td>
|
||||
<td class='c-status'><span class='status-story status-<?php echo $child->status;?>'> <?php echo $this->processStatus('story', $child);?></span></td>
|
||||
<td class='c-stage'><?php echo zget($lang->story->stageList, $child->stage);?></td>
|
||||
<td class='c-actions'>
|
||||
|
||||
@@ -99,9 +99,9 @@
|
||||
<?php if($type != 'finishedBy'): ?>
|
||||
<td class='c-user'><?php echo zget($users, $task->finishedBy);?></td>
|
||||
<?php endif;?>
|
||||
<td class='c-hours' title="<?php echo round($task->estimate, 1) . ' ' . $lang->execution->workHour;?>"><?php echo round($task->estimate, 1) . ' ' . $lang->execution->workHourUnit;?></td>
|
||||
<td class='c-hours' title="<?php echo round($task->consumed, 1) . ' ' . $lang->execution->workHour;?>"><?php echo round($task->consumed, 1) . ' ' . $lang->execution->workHourUnit;?></td>
|
||||
<td class='c-hours' title="<?php echo round($task->left, 1) . ' ' . $lang->execution->workHour;?>"><?php echo round($task->left, 1) . ' ' . $lang->execution->workHourUnit;?></td>
|
||||
<td class='c-hours' title="<?php echo round($task->estimate, 1) . ' ' . $lang->execution->workHour;?>"><?php echo round($task->estimate, 1) . $lang->execution->workHourUnit;?></td>
|
||||
<td class='c-hours' title="<?php echo round($task->consumed, 1) . ' ' . $lang->execution->workHour;?>"><?php echo round($task->consumed, 1) . $lang->execution->workHourUnit;?></td>
|
||||
<td class='c-hours' title="<?php echo round($task->left, 1) . ' ' . $lang->execution->workHour;?>"><?php echo round($task->left, 1) . $lang->execution->workHourUnit;?></td>
|
||||
<td class='c-status'>
|
||||
<?php $storyChanged = (!empty($task->storyStatus) and $task->storyStatus == 'active' and $task->latestStoryVersion > $task->storyVersion and !in_array($task->status, array('cancel', 'closed')));?>
|
||||
<?php !empty($storyChanged) ? print("<span class='status-story status-changed'>{$this->lang->my->storyChanged}</span>") : print("<span class='status-task status-{$task->status}'> " . $this->processStatus('task', $task) . "</span>");?>
|
||||
|
||||
@@ -24,6 +24,7 @@ $config->product->search['fields']['pri'] = $lang->story->pri;
|
||||
$config->product->search['fields']['product'] = $lang->story->product;
|
||||
$config->product->search['fields']['branch'] = '';
|
||||
$config->product->search['fields']['module'] = $lang->story->module;
|
||||
$config->product->search['fields']['plan'] = $lang->story->plan;
|
||||
$config->product->search['fields']['estimate'] = $lang->story->estimate;
|
||||
|
||||
$config->product->search['fields']['source'] = $lang->story->source;
|
||||
@@ -56,6 +57,7 @@ $config->product->search['params']['pri'] = array('operator' => '=',
|
||||
$config->product->search['params']['product'] = array('operator' => '=', 'control' => 'select', 'values' => '');
|
||||
$config->product->search['params']['branch'] = array('operator' => '=', 'control' => 'select', 'values' => '');
|
||||
$config->product->search['params']['module'] = array('operator' => 'belong', 'control' => 'select', 'values' => '');
|
||||
$config->product->search['params']['plan'] = array('operator' => '=', 'control' => 'select', 'values' => '');
|
||||
$config->product->search['params']['estimate'] = array('operator' => '=', 'control' => 'input', 'values' => '');
|
||||
|
||||
$config->product->search['params']['source'] = array('operator' => '=', 'control' => 'select', 'values' => $lang->story->sourceList);
|
||||
|
||||
@@ -245,6 +245,7 @@ class product extends control
|
||||
$this->lang->story->title = str_replace($this->lang->SRCommon, $this->lang->URCommon, $this->lang->story->title);
|
||||
$this->lang->story->create = str_replace($this->lang->SRCommon, $this->lang->URCommon, $this->lang->story->create);
|
||||
$this->config->product->search['fields']['title'] = $this->lang->story->title;
|
||||
unset($this->config->product->search['fields']['plan']);
|
||||
}
|
||||
|
||||
/* Build search form. */
|
||||
|
||||
@@ -25,5 +25,6 @@ a.removeModule:hover {color: red;}
|
||||
.table td.has-child > .story-toggle > .icon {font-size: 16px; display: inline-block; transition: transform .2s; -ms-transform: rotate(-90deg); -moz-transform: rotate(-90deg); -o-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); transform: rotate(-90deg);}
|
||||
.table td.has-child > .story-toggle > .icon:before {text-align: left;}
|
||||
.table td.has-child > .story-toggle.collapsed > .icon {-ms-transform: rotate(90deg); -moz-transform: rotate(90deg); -o-transform: rotate(90deg); -webkit-transform: rotate(90deg); transform: rotate(90deg);}
|
||||
.table td.c-estimate {padding-right: 12px;}
|
||||
.main-table tbody > tr.table-children > td:first-child::before {width: 3px;}
|
||||
@-moz-document url-prefix() {.main-table tbody > tr.table-children > td:first-child::before {width: 4px;};}
|
||||
|
||||
@@ -79,8 +79,8 @@
|
||||
<?php $projectBudget = in_array($this->app->getClientLang(), ['zh-cn','zh-tw']) ? number_format((float)$project->budget / 10000, 2) . $this->lang->project->tenThousand : number_format((float)$project->budget, 2);?>
|
||||
<?php $budgetTitle = $project->budget != 0 ? zget($this->lang->project->currencySymbol, $project->budgetUnit) . ' ' . $projectBudget : $this->lang->project->future;?>
|
||||
<td title='<?php echo $budgetTitle;?>' class='text-ellipsis'><?php echo $budgetTitle;?></td>
|
||||
<td class="text-right" title="<?php echo $project->hours->totalEstimate . ' ' . $lang->project->workHour;?>"><?php echo $project->hours->totalEstimate . ' ' . $lang->execution->workHourUnit;?></td>
|
||||
<td class="text-right" title="<?php echo $project->hours->totalConsumed . ' ' . $lang->project->workHour;?>"><?php echo $project->hours->totalConsumed . ' ' . $lang->execution->workHourUnit;?></td>
|
||||
<td class="text-right" title="<?php echo $project->hours->totalEstimate . ' ' . $lang->project->workHour;?>"><?php echo $project->hours->totalEstimate . $lang->execution->workHourUnit;?></td>
|
||||
<td class="text-right" title="<?php echo $project->hours->totalConsumed . ' ' . $lang->project->workHour;?>"><?php echo $project->hours->totalConsumed . $lang->execution->workHourUnit;?></td>
|
||||
<td>
|
||||
<div class='progress-pie' data-doughnut-size='90' data-color='#00da88' data-value='<?php echo $project->hours->progress;?>' data-width='24' data-height='24' data-back-color='#e8edf3'>
|
||||
<div class='progress-info'><?php echo $project->hours->progress;?></div>
|
||||
|
||||
@@ -1307,13 +1307,13 @@ class projectModel extends model
|
||||
echo $project->teamCount;
|
||||
break;
|
||||
case 'estimate':
|
||||
echo $project->hours->totalEstimate . ' ' . $this->lang->execution->workHourUnit;
|
||||
echo $project->hours->totalEstimate . $this->lang->execution->workHourUnit;
|
||||
break;
|
||||
case 'consume':
|
||||
echo $project->hours->totalConsumed . ' ' . $this->lang->execution->workHourUnit;
|
||||
echo $project->hours->totalConsumed . $this->lang->execution->workHourUnit;
|
||||
break;
|
||||
case 'surplus':
|
||||
echo $project->hours->totalLeft . ' ' . $this->lang->execution->workHourUnit;
|
||||
echo $project->hours->totalLeft . $this->lang->execution->workHourUnit;
|
||||
break;
|
||||
case 'progress':
|
||||
echo "<div class='progress-pie' data-doughnut-size='90' data-color='#00da88' data-value='{$project->hours->progress}' data-width='24' data-height='24' data-back-color='#e8edf3'><div class='progress-info'>{$project->hours->progress}</div></div>";
|
||||
|
||||
@@ -91,8 +91,8 @@ class reportModel extends model
|
||||
/**
|
||||
* Get executions.
|
||||
*
|
||||
* @param string $begin
|
||||
* @param string $end
|
||||
* @param string $begin
|
||||
* @param string $end
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
@@ -496,6 +496,7 @@ class reportModel extends model
|
||||
->leftJoin(TABLE_USER)->alias('t2')
|
||||
->on('t1.account = t2.account')
|
||||
->where('t1.cycle')->eq(0)
|
||||
->andWhere('t1.deleted')->eq(0)
|
||||
->andWhere('t1.status')->in('wait,doing')
|
||||
->query();
|
||||
|
||||
@@ -616,6 +617,7 @@ class reportModel extends model
|
||||
{
|
||||
return $this->dao->select("count(*) as count, sum(if((`status` != 'done'), 1, 0)) AS `undone`, sum(if((`status` = 'done'), 1, 0)) AS `done`")->from(TABLE_TODO)
|
||||
->where('LEFT(date, 4)')->eq($year)
|
||||
->andWhere('deleted')->eq('0')
|
||||
->beginIF($accounts)->andWhere('account')->in($accounts)->fi()
|
||||
->fetch();
|
||||
}
|
||||
@@ -632,6 +634,7 @@ class reportModel extends model
|
||||
{
|
||||
$effort = $this->dao->select('count(*) as count, sum(consumed) as consumed')->from(TABLE_TASKESTIMATE)
|
||||
->where('LEFT(date, 4)')->eq($year)
|
||||
->andWhere('deleted')->eq('0')
|
||||
->beginIF($accounts)->andWhere('account')->in($accounts)->fi()
|
||||
->fetch();
|
||||
|
||||
|
||||
@@ -685,8 +685,6 @@ class story extends control
|
||||
else
|
||||
{
|
||||
/* The stories of my. */
|
||||
$this->lang->story->menu = $this->lang->my->menu;
|
||||
$this->lang->story->menuOrder = $this->lang->my->menuOrder;
|
||||
$this->loadModel('my')->setMenu();
|
||||
|
||||
$branchProduct = false;
|
||||
|
||||
@@ -3389,7 +3389,7 @@ class storyModel extends model
|
||||
echo '</span>';
|
||||
break;
|
||||
case 'estimate':
|
||||
echo $story->estimate . ' ' . $this->config->hourUnit;
|
||||
echo $story->estimate . $this->config->hourUnit;
|
||||
break;
|
||||
case 'stage':
|
||||
if(isset($storyStages[$story->id]) and !empty($branches))
|
||||
|
||||
@@ -2972,13 +2972,13 @@ class taskModel extends model
|
||||
$storyChanged ? print("<span class='status-story status-changed'>{$this->lang->story->changed}</span>") : print("<span class='status-task status-{$task->status}'> " . $this->processStatus('task', $task) . "</span>");
|
||||
break;
|
||||
case 'estimate':
|
||||
echo round($task->estimate, 1) . ' ' . $this->lang->execution->workHourUnit;
|
||||
echo round($task->estimate, 1) . $this->lang->execution->workHourUnit;
|
||||
break;
|
||||
case 'consumed':
|
||||
echo round($task->consumed, 1) . ' ' . $this->lang->execution->workHourUnit;
|
||||
echo round($task->consumed, 1) . $this->lang->execution->workHourUnit;
|
||||
break;
|
||||
case 'left':
|
||||
echo round($task->left, 1) . ' ' . $this->lang->execution->workHourUnit;
|
||||
echo round($task->left, 1) . $this->lang->execution->workHourUnit;
|
||||
break;
|
||||
case 'progress':
|
||||
echo round($task->progress, 2) . '%';
|
||||
|
||||
@@ -422,7 +422,7 @@ class todo extends control
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->dao->delete()->from(TABLE_TODO)->where('id')->eq($todoID)->exec();
|
||||
$this->todo->delete(TABLE_TODO, $todoID);
|
||||
$this->loadModel('action')->create('todo', $todoID, 'erased');
|
||||
|
||||
/* if ajax request, send result. */
|
||||
@@ -679,7 +679,7 @@ class todo extends control
|
||||
*/
|
||||
public function createCycle()
|
||||
{
|
||||
$todoList = $this->dao->select('*')->from(TABLE_TODO)->where('cycle')->eq(1)->fetchAll('id');
|
||||
$todoList = $this->dao->select('*')->from(TABLE_TODO)->where('cycle')->eq(1)->andWhere('deleted')->eq(0)->fetchAll('id');
|
||||
$this->todo->createByCycle($todoList);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -458,7 +458,7 @@ class todoModel extends model
|
||||
if(empty($account)) $account = $this->app->user->account;
|
||||
|
||||
$stmt = $this->dao->select('*')->from(TABLE_TODO)
|
||||
->where('1')
|
||||
->where('deleted')->eq('0')
|
||||
->andWhere('account', true)->eq($account)
|
||||
->orWhere('assignedTo')->eq($account)
|
||||
->orWhere('finishedBy')->eq($account)
|
||||
@@ -553,7 +553,7 @@ class todoModel extends model
|
||||
$this->loadModel('action');
|
||||
$today = helper::today();
|
||||
$now = helper::now();
|
||||
$lastCycleList = $this->dao->select('*')->from(TABLE_TODO)->where('type')->eq('cycle')->andWhere('idvalue')->in(array_keys($todoList))->orderBy('date_asc')->fetchAll('idvalue');
|
||||
$lastCycleList = $this->dao->select('*')->from(TABLE_TODO)->where('type')->eq('cycle')->andWhere('deleted')->eq('0')->andWhere('idvalue')->in(array_keys($todoList))->orderBy('date_asc')->fetchAll('idvalue');
|
||||
$activedUsers = $this->dao->select('account')->from(TABLE_USER)->where('deleted')->eq(0)->fetchPairs('account', 'account');
|
||||
foreach($todoList as $todoID => $todo)
|
||||
{
|
||||
@@ -740,6 +740,7 @@ class todoModel extends model
|
||||
if(empty($account)) $account = $this->app->user->account;
|
||||
return $this->dao->select('count(*) as count')->from(TABLE_TODO)
|
||||
->where('cycle')->eq('0')
|
||||
->andWhere('deleted')->eq('0')
|
||||
->andWhere('account', true)->eq($account)
|
||||
->orWhere('assignedTo')->eq($account)
|
||||
->orWhere('finishedBy')->eq($account)
|
||||
|
||||
@@ -793,7 +793,7 @@ class userModel extends model
|
||||
if(defined('IN_USE')) $this->dao->update(TABLE_USER)->set('visits = visits + 1')->set('ip')->eq($ip)->set('last')->eq($last)->where('account')->eq($account)->exec();
|
||||
|
||||
/* Create cycle todo in login. */
|
||||
$todoList = $this->dao->select('*')->from(TABLE_TODO)->where('cycle')->eq(1)->andWhere('account')->eq($user->account)->fetchAll('id');
|
||||
$todoList = $this->dao->select('*')->from(TABLE_TODO)->where('cycle')->eq(1)->andWhere('deleted')->eq('0')->andWhere('account')->eq($user->account)->fetchAll('id');
|
||||
$this->loadModel('todo')->createByCycle($todoList);
|
||||
}
|
||||
return $user;
|
||||
@@ -2442,7 +2442,7 @@ class userModel extends model
|
||||
$count = 'count(*) AS count';
|
||||
|
||||
$personalData = array();
|
||||
$personalData['createdTodos'] = $this->dao->select($count)->from(TABLE_TODO)->where('account')->eq($account)->fetch('count');
|
||||
$personalData['createdTodos'] = $this->dao->select($count)->from(TABLE_TODO)->where('account')->eq($account)->andWhere('deleted')->eq('0')->fetch('count');
|
||||
$personalData['createdRequirements'] = $this->dao->select($count)->from(TABLE_STORY)->where('openedBy')->eq($account)->andWhere('deleted')->eq('0')->andWhere('type')->eq('requirement')->fetch('count');
|
||||
$personalData['createdStories'] = $this->dao->select($count)->from(TABLE_STORY)->where('openedBy')->eq($account)->andWhere('deleted')->eq('0')->andWhere('type')->eq('story')->fetch('count');
|
||||
$personalData['createdBugs'] = $this->dao->select($count)->from(TABLE_BUG)->where('openedBy')->eq($account)->andWhere('deleted')->eq('0')->fetch('count');
|
||||
|
||||
@@ -22,11 +22,11 @@
|
||||
<th class='w-id'> <?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?></th>
|
||||
<th class="text-left"><?php common::printOrderLink('name', $orderBy, $vars, $lang->user->name);?></th>
|
||||
<th class='w-status'> <?php common::printOrderLink('status', $orderBy, $vars, $lang->statusAB);?></th>
|
||||
<th class='w-user'> <?php $lang->team->role;?></th>
|
||||
<th class='w-user'> <?php echo $lang->team->role;?></th>
|
||||
<th class='w-date'> <?php common::printOrderLink('begin', $orderBy, $vars, $lang->execution->begin);?></th>
|
||||
<th class='w-date'> <?php common::printOrderLink('end', $orderBy, $vars, $lang->execution->end);?></th>
|
||||
<th class='w-date'> <?php $lang->team->join;?></th>
|
||||
<th class='w-110px'> <?php $lang->team->hours;?></th>
|
||||
<th class='w-date'> <?php echo $lang->team->join;?></th>
|
||||
<th class='w-110px'> <?php echo $lang->team->hours;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
@@ -13,6 +13,9 @@
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/tablesorter.html.php';?>
|
||||
<?php include './featurebar.html.php';?>
|
||||
<style>
|
||||
.table td.estimate {padding-right: 12px;}
|
||||
</style>
|
||||
<div id='mainContent'>
|
||||
<nav id='contentNav'>
|
||||
<ul class='nav nav-default'>
|
||||
@@ -59,7 +62,7 @@
|
||||
<td class='text-left nobr'><?php echo html::a($storyLink, $story->title);?></td>
|
||||
<td title='<?php echo $story->planTitle;?>'><?php echo $story->planTitle;?></td>
|
||||
<td><?php echo zget($users, $story->openedBy);?></td>
|
||||
<td class='text-right' title="<?php echo $story->estimate . ' ' . $lang->hourCommon;?>"><?php echo $story->estimate . ' ' . $config->hourUnit;?></td>
|
||||
<td class='estimate text-right' title="<?php echo $story->estimate . ' ' . $lang->hourCommon;?>"><?php echo $story->estimate . $config->hourUnit;?></td>
|
||||
<td class='story-<?php echo $story->status;?>'><?php echo $this->processStatus('story', $story);?></td>
|
||||
<td><?php echo $lang->story->stageList[$story->stage];?></td>
|
||||
</tr>
|
||||
|
||||
@@ -63,9 +63,9 @@
|
||||
<?php if($task->parent > 0) echo '<span class="label label-badge label-light">' . $this->lang->task->childrenAB . '</span> ';?>
|
||||
<?php echo html::a($this->createLink('task', 'view', "taskID=$task->id", '', false, $task->project), $task->name, null, "style='color: $task->color'");?>
|
||||
</td>
|
||||
<td class='hours' title="<?php echo $task->estimate . ' ' . $lang->execution->workHour;?>"><?php echo $task->estimate . ' ' . $lang->execution->workHourUnit;?></td>
|
||||
<td class='hours' title="<?php echo $task->consumed . ' ' . $lang->execution->workHour;?>"><?php echo $task->consumed . ' ' . $lang->execution->workHourUnit;?></td>
|
||||
<td class='hours' title="<?php echo $task->left . ' ' . $lang->execution->workHour;?>"><?php echo $task->left . ' ' . $lang->execution->workHourUnit;?></td>
|
||||
<td class='hours' title="<?php echo $task->estimate . ' ' . $lang->execution->workHour;?>"><?php echo $task->estimate . $lang->execution->workHourUnit;?></td>
|
||||
<td class='hours' title="<?php echo $task->consumed . ' ' . $lang->execution->workHour;?>"><?php echo $task->consumed . $lang->execution->workHourUnit;?></td>
|
||||
<td class='hours' title="<?php echo $task->left . ' ' . $lang->execution->workHour;?>"><?php echo $task->left . $lang->execution->workHourUnit;?></td>
|
||||
<td class=<?php if(isset($task->delay)) echo 'delayed';?>><?php if(substr($task->deadline, 0, 4) > 0) echo $task->deadline;?></td>
|
||||
<td class='<?php echo $task->status;?>'><?php echo $this->processStatus('task', $task);?></td>
|
||||
</tr>
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 10 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
Reference in New Issue
Block a user