Merge branch 'master' into sprint/220

This commit is contained in:
liyuchun
2022-08-01 00:25:13 +00:00
181 changed files with 4890 additions and 703 deletions
+1
View File
@@ -143,6 +143,7 @@ zentaoxx:
sed -i "s#\$this->app->getModuleRoot() . 'im/apischeme.json'#\$this->app->getExtensionRoot() . 'xuan/im/apischeme.json'#g" zentaoxx/extension/xuan/im/model.php
sed -i "s/'..\/..\/common\/view\/header.html.php'/\$$app->getModuleRoot() . 'common\/view\/header.html.php'/g" zentaoxx/extension/xuan/conference/view/admin.html.php
sed -i "s/'..\/..\/common\/view\/footer.html.php'/\$$app->getModuleRoot() . 'common\/view\/footer.html.php'/g" zentaoxx/extension/xuan/conference/view/admin.html.php
sed -i "s/\$$this->im->userGetChangedPassword()/array()/" zentaoxx/extension/xuan/im/control.php
echo "ALTER TABLE \`zt_user\` ADD \`pinyin\` varchar(255) NOT NULL DEFAULT '' AFTER \`realname\`;" >> zentaoxx/db/xuanxuan.sql
mkdir zentaoxx/tools; cp tools/cn2tw.php zentaoxx/tools; cd zentaoxx/tools; php cn2tw.php
cp tools/en2other.php zentaoxx/tools; cd zentaoxx/tools; php en2other.php ../
+1 -1
View File
@@ -1 +1 @@
17.3
17.4
+5 -5
View File
@@ -210,7 +210,7 @@ class userEntry extends Entry
if(!common::hasPriv('my', 'work')) break;
$control = $this->loadController('my', 'bug');
$control->bug($this->param('type', 'assignedTo'), $this->param('order', 'id_desc'), $this->param('total', 0), $this->param('limit', 5), $this->param('page', 1));
$control->bug($this->param('type', 'assignedTo'), 0, $this->param('order', 'id_desc'), $this->param('total', 0), $this->param('limit', 5), $this->param('page', 1));
$data = $this->getData();
if($data->status == 'success')
@@ -266,7 +266,7 @@ class userEntry extends Entry
if(!common::hasPriv('my', 'work')) break;
$control = $this->loadController('my', 'story');
$control->story($this->param('type', 'assignedTo'), $this->param('order', 'id_desc'), $this->param('total', 0), $this->param('limit', 5), $this->param('page', 1));
$control->story($this->param('type', 'assignedTo'), 0, $this->param('order', 'id_desc'), $this->param('total', 0), $this->param('limit', 5), $this->param('page', 1));
$data = $this->getData();
if($data->status == 'success')
@@ -290,7 +290,7 @@ class userEntry extends Entry
if($this->config->edition == 'max')
{
$control = $this->loadController('my', 'issue');
$control->issue('createdBy', 'id_desc', 0, $this->param('limit', 5), 1);
$control->issue('createdBy', 0, 'id_desc', 0, $this->param('limit', 5), 1);
$data = $this->getData();
if($data->status == 'success')
@@ -307,7 +307,7 @@ class userEntry extends Entry
if($this->config->edition == 'max')
{
$control = $this->loadController('my', 'risk');
$control->risk('createdBy', 'id_desc', 0, $this->param('limit', 5), 1);
$control->risk('createdBy', 0, 'id_desc', 0, $this->param('limit', 5), 1);
$data = $this->getData();
if($data->status == 'success')
@@ -324,7 +324,7 @@ class userEntry extends Entry
if($this->config->edition == 'max')
{
$control = $this->loadController('my', 'myMeeting');
$control->myMeeting('all', 'id_desc', 0, $this->param('limit', 5), 1);
$control->myMeeting('all', '', 'id_desc', 0, $this->param('limit', 5), 1);
$data = $this->getData();
if($data->status == 'success')
+1 -1
View File
@@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}}
if(!function_exists('getWebRoot')){function getWebRoot(){}}
/* 基本设置。Basic settings. */
$config->version = '17.3'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it.
$config->version = '17.4'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it.
$config->liteVersion = '1.2'; // 迅捷版版本。 The version of Lite.
$config->charset = 'UTF-8'; // ZenTaoPHP的编码。 The encoding of ZenTaoPHP.
$config->cookieLife = time() + 2592000; // Cookie的生存时间。The cookie life time.
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -4,7 +4,7 @@ ALTER TABLE `zt_mr` MODIFY COLUMN `targetProject` varchar(50) NOT NULL AFTER `s
UPDATE `zt_project` SET `status`='closed' WHERE `type` IN ('sprint', 'stage', 'kanban') AND `model`='' AND `status` = 'done';
ALTER TABLE `zt_repo` ADD COLUMN `serviceHost` varchar(50) NOT NULL AFTER `client`;
ALTER TABLE `zt_repo` ADD COLUMN `serviceProject` varchar(100) NOT NULL AFTER `serviceHost`;
UPDATE `zt_repo` SET `serviceHost` = `client`, `serviceProject` = `path` WHERE `SCM` = 'Gitlab';
UPDATE `zt_repo` SET `serviceHost` = `client`, `serviceProject` = `path` WHERE `SCM` = 'Gitlab' AND `client` <> '' AND `path` <> '';
UPDATE `zt_repo` SET `client` = '', `path` = '' WHERE `SCM` = 'Gitlab';
UPDATE `zt_workflowfield` SET `options`='user' WHERE `buildin`='1' AND `options`='8';
@@ -13,4 +13,4 @@ INSERT IGNORE INTO `zt_workflowfield` (`module`, `field`, `type`, `length`, `nam
('testcase', 'execution', 'mediumint', '8', '所属执行', 'select', '', '44', '0', '', '', 4, 0, 0, '0', '1', '0', '1', 1, '', '', '2022-03-18 09:16:38', '', '0000-00-00 00:00:00'),
('task', 'execution', 'mediumint', '8', '所属执行', 'select', '', '44', '0', '', '', 4, 0, 0, '0', '1', '0', '1', 1, '', '', '2022-03-18 09:16:38', '', '0000-00-00 00:00:00'),
('bug', 'execution', 'mediumint', '8', '所属执行', 'select', '', '44', '0', '', '', 6, 0, 0, '0', '1', '0', '1', 1, '', '', '2022-03-18 09:16:38', '', '0000-00-00 00:00:00'),
('build', 'execution', 'mediumint', '8', '所属执行', 'select', '', '44', '0', '', '', 5, 0, 0, '0', '1', '0', '1', 1, '', '', '2022-03-18 09:16:38', '', '0000-00-00 00:00:00');
('build', 'execution', 'mediumint', '8', '所属执行', 'select', '', '44', '0', '', '', 5, 0, 0, '0', '1', '0', '1', 1, '', '', '2022-03-18 09:16:38', '', '0000-00-00 00:00:00');
+110
View File
@@ -1,3 +1,113 @@
2022-07-27 17.4
完成的需求
开源版:
25633 项目集可以按照状态进行检索
30848 通用看板团队成员可以从系统通讯录中添加
32326 地盘最新动态区块中过滤掉当前用户无权访问的动态
32327 组织动态列表中过滤掉当前用户无权访问的动态
32331 计划的需求列表打开需求后返回列表时,保持列表排序
32679 添加待办页面增加指派给操作
33311 Bug关联相关Bug后可以实现互相关联
33316 软件需求详情的相关信息中增加相关版本信息
33317 软件需求详情的相关信息中增加相关发布信息
33594 地盘项目统计区块的排序规则和项目集列表保持一致
34037 调整文档中富文本和Markdown类型文档的创建流程
34136 详情页点击撤销评审后保留在该页面局部刷新
34172 全局设置中增加是否启用代号的设置功能
34282 调整文档全局创建流程第一步
34285 调整文档全局创建流程第二步
34292 文档编辑默认进入创建页面
34486 开启或关闭代号功能后项目集的代号信息处理规则
34487 开启或关闭代号功能后产品的代号信息处理规则
34488 开启或关闭代号功能后项目的代号信息处理规则
34489 开启或关闭代号功能后执行的代号信息处理规则
34577 已删除的项目集、产品、项目、执行不参与是否同名和同代号的判断
34732 专业研发看板项目二级导航中打印设置菜单
34733 打印专业研发看板项目设置功能的三级导航菜单
34734 实现专业研发看板项目的白名单页面及功能
34735 实现专业研发看板项目的产品页面及功能
34736 实现专业研发看板项目的团队页面及功能
34737 专业研发看板二级导航中打印设置菜单
34738 打印看板设置功能的三级导航菜单
34739 实现专业研发看板的概况页面及功能
34740 实现专业研发看板的产品页面及功能
34741 实现专业研发看板的团队页面及功能
34806 计划的Bug列表打开Bug后返回列表时,保持列表排序
34888 权限成员维护页面支持长按鼠标拖动后批量勾选功能
34923 在权限维护页面点击保存后继续保留在当前页面
35191 任务提交页面中,测试任务类型的多选文案显示完整
35205 实现专业研发看板的白名单页面及功能
35305 搜索展开保存条件时,保存搜索条件按钮左移
34618 调用API浏览Gitea合并请求列表
34619 调用API浏览Gitea合并请求概述
34620 调用API查看Gitea合并请求中的代码改动
34633 Gitea合并请求可以关联禅道的需求、任务以及Bug
34634 调用API创建Gitea合并请求
34635 调用API删除Gitea合并请求
34636 调用API实现Gitea合并请求的评审
34637 Gitea合并请求合并后调用API删除源分支
34638 调用API实现Gitea合并请求的合并
35241 在合并请求列表显示创建时间
35249 合并请求概况页面显示历史记录
35251 实现Gitea代码库下的代码对比功能
企业版:
29884 执行任务导出数据的名称增加来源Bug的信息
32192 组织菜单调整为团队、日程、日志、动态、公司
33191 加班申请通过后,办公我的考勤列表中操作/状态列展示“已加班”
33201 办公考勤的列表的标题字号修改为16px
33219 办公公司考勤页面中列表表头固定
33222 增加办公公司考勤表格的底部栏高度
33242 反馈页的通知改为“接收邮件通知”
33244 创建反馈时必填项校验在字段下方红字展示
33248 办公请假页面展示逻辑优化
33252 反馈功能的权限模块icon调整
33254 反馈权限列表中用户数量超出列宽时用省略号示意
33397 缩短办公节假日页面中左侧的时间目录宽度
33421 运维服务列表页面字段过长时省略显示
33423 运维账号页面列表为空时的快捷新建页面改为弹窗样式
34683 增加反馈转研发需求页面中父需求的标题宽度
34684 增大反馈转研发需求页面中反馈者的输入框宽度
34721 组织日志页面置顶显示滚动条
34730 固定组织日志页面日志详情的展示位置
旗舰版:
31845 修改项目风险列表中的挂起操作图标
33122 修改问题列表的创建日期显示内容
33305 项目问题列表页面优先级字段居中显示
33511 修改资产问题库中问题列表中“优先级”为“P”
33512 修改资产风险库列表页面“优先级”为“P”
33514 修改资产机会库列表页面“优先级”为“P”
33525 资产需求库需求列表页面审批字段居左显示
33528 资产问题库问题列表页面审批字段居左显示
33529 资产风险库风险列表页面审批字段居左显示
33530 资产机会库机会列表页面审批字段居左显示
33823 问题指派页面增加备注
34097 修改执行QA不符合项详情页面中解决图标
禅道客户端:
34124 XXD可以从XXB主动拉取配置
34123 喧喧增加禅道的checktable.php以便自动修复数据库
34122 去掉XXD中无意义的错误日志
33667 通知中心的信息通知逻辑优化
33665 修改通知中心的样式
33464 禅道客户端支持弹窗显示
33216 禅道客户端重连后不用跳到地盘页面
33213 喧喧webview中增加加载中的过渡页面
33196 合并禅道客户端禅道上方导航栏和窗口控制栏
33187 喧喧一键安装包采用新的控制面板
33068 实现客户端修改个人信息的功能
33066 将群的设为公开和白名单设置放入群设置弹窗
33065 实现只有群主和管理员才能添加群成员的功能
33063 实现禁用移动端的功能
33062 实现群主被删除后自动转让的功能
32013 输出roadrunner相关文档
修复的Bug
24009 內禅任务详情页面上一个下一个切换错误
25389 升级时需要把项目负责人加到团队中
25439 需求换了执行对应的用例无法关联测试单
22844 项目中创建或者编辑会议页面关联迭代后会清除之前选择的参会人员
23200 多人任务串行,可以操作出负的消耗工时
24357 多人任务填写日志后把日志删除对应的消耗工时仍然存在
25185 内置报表里,执行状态的下拉框里都没有已完成
2022-07-13 17.3
完成的需求
14130 点击按钮执行升级后禁用升级按钮
@@ -172,11 +172,6 @@ $projectIDParam = $isProjectStory ? "projectID=$projectID&" : '';
<strong>
<?php echo $this->product->getByID($productID)->name ?>
</strong>
<div class="linkButton" onclick="handleLinkButtonClick()">
<span title="<?php echo $lang->viewDetails;?>">
<i class="icon icon-import icon-rotate-270"></i>
</span>
</div>
</div>
<?php endif;?>
<div id="mainContent" class="main-row fade">
@@ -588,11 +583,5 @@ function setBadgeStyle(obj, isShow)
$label.find('.label-badge').css({"color":"#838a9d", "border-color":"#838a9d"});
}
}
function handleLinkButtonClick()
{
var xxcUrl = "xxc:openInApp/zentao-integrated/" + encodeURIComponent(window.location.href.replace(/.display=card/, '').replace('xhtml', 'html'));
window.open(xxcUrl);
}
</script>
<?php include $this->app->getModuleRoot() . '/common/view/footer.html.php';?>
@@ -16,13 +16,6 @@
<?php js::set('sysurl', common::getSysUrl());?>
<?php if(strpos($_SERVER["QUERY_STRING"], 'isNotice=1') === false):?>
<div id="mainMenu" class="clearfix">
<?php if($this->app->getViewType() == 'xhtml'):?>
<div class="linkButton" onclick="handleLinkButtonClick()">
<span title="<?php echo $lang->viewDetails;?>">
<i class="icon icon-import icon-rotate-270"></i>
</span>
</div>
<?php endif;?>
<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'");?>
@@ -344,11 +337,6 @@ js::set('cancel', $lang->cancel);
js::set('rawModule', $this->app->rawModule);
?>
<script>
function handleLinkButtonClick()
{
var xxcUrl = "xxc:openInApp/zentao-integrated/" + encodeURIComponent(window.location.href.replace(/.display=card/, '').replace('xhtml', 'html'));
window.open(xxcUrl);
}
</script>
<?php include $this->app->getModuleRoot() . 'common/view/syntaxhighlighter.html.php';?>
<?php include $this->app->getModuleRoot() . 'common/view/footer.html.php';?>
+13 -1
View File
@@ -12,15 +12,26 @@ class Gitea
* @param string $username
* @param string $password
* @param string $encoding
* @param object $repo
* @access public
* @return void
*/
public function __construct($client, $root, $username, $password, $encoding = 'UTF-8')
public function __construct($client, $root, $username, $password, $encoding = 'UTF-8', $repo = null)
{
putenv('LC_CTYPE=en_US.UTF-8');
$this->client = $client;
$this->root = rtrim($root, DIRECTORY_SEPARATOR);
if(!realpath($this->root) and !empty($repo))
{
global $app;
$project = $app->control->loadModel('gitea')->apiGetSingleProject($repo->serviceHost, $repo->serviceProject);
if(isset($project->tokenCloneUrl))
{
$cmd = 'git clone --progress -v "' . $project->tokenCloneUrl . '" "' . $this->root . '"';
exec($cmd);
}
}
$branch = isset($_COOKIE['repoBranch']) ? $_COOKIE['repoBranch'] : '';
if($branch)
@@ -51,6 +62,7 @@ class Gitea
chdir($this->root);
if(!empty($path)) $sub = ":$path";
if(!empty($this->branch))$revision = $this->branch;
execCmd(escapeCmd("$this->client pull"));
$cmd = escapeCmd("$this->client ls-tree -l $revision$sub");
$list = execCmd($cmd . ' 2>&1', 'array', $result);
if($result) return array();
+7 -6
View File
@@ -7,15 +7,16 @@ class gitlab
/**
* Construct
*
* @param string $client gitlab api url.
* @param string $root id of gitlab project.
* @param string $username null
* @param string $password token of gitlab api.
* @param string $encoding
* @param string $client gitlab api url.
* @param string $root id of gitlab project.
* @param string $username null
* @param string $password token of gitlab api.
* @param string $encoding
* @param object $repo
* @access public
* @return void
*/
public function __construct($client, $root, $username, $password, $encoding = 'UTF-8')
public function __construct($client, $root, $username, $password, $encoding = 'UTF-8', $repo = null)
{
$this->client = $client;
$this->root = rtrim($root, '/') . '/';
+2 -1
View File
@@ -12,10 +12,11 @@ class GitRepo
* @param string $username
* @param string $password
* @param string $encoding
* @param object $repo
* @access public
* @return void
*/
public function __construct($client, $root, $username, $password, $encoding = 'UTF-8')
public function __construct($client, $root, $username, $password, $encoding = 'UTF-8', $repo = null)
{
putenv('LC_CTYPE=en_US.UTF-8');
+1 -1
View File
@@ -15,7 +15,7 @@ class scm
$className = $repo->SCM;
if($className == 'Git') $className = 'GitRepo';
if(!class_exists($className)) require(strtolower($className) . '.class.php');
$this->engine = new $className($repo->client, $repo->path, $repo->account, $repo->password, $repo->encoding);
$this->engine = new $className($repo->client, $repo->path, $repo->account, $repo->password, $repo->encoding, $repo);
}
/**
+2 -1
View File
@@ -18,10 +18,11 @@ class Subversion
* @param string $account
* @param string $password
* @param string $encoding
* @param object $repo
* @access public
* @return void
*/
public function __construct($client, $root, $account, $password, $encoding = 'UTF-8')
public function __construct($client, $root, $account, $password, $encoding = 'UTF-8', $repo = null)
{
putenv('LC_CTYPE=en_US.UTF-8');
$this->root = str_replace(array('%3A', '%2F', '+'), array(':', '/', ' '), urlencode(rtrim($root, '/')));
+1 -1
View File
@@ -53,7 +53,7 @@
<th></th>
<td colspan='2'>
<i class="icon icon-exclamation-sign"></i>
<span style='color:#5E626D;font-weight:bold;font-size:13px;'><i class="icon icon-exclamation-sign"></i><?php echo $lang->admin->safe->modeRuleList[2] . $lang->admin->safe->noticeStrong;?></span>
<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>
+1
View File
@@ -0,0 +1 @@
#whiteListBox .input-group:last-child {margin-top: 10px;}
+9 -6
View File
@@ -221,13 +221,16 @@ class blockModel extends model
->andWhere('t1.deadline')->ne('0000-00-00')
->andWhere('t1.deadline')->lt($today)
->andWhere('t1.deleted')->eq(0)
->andWhere('t3.deleted')->eq(0)
->fetch('count');
$data['delayBug'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_BUG)
->where('assignedTo')->eq($this->app->user->account)
->andWhere('status')->eq('active')
->andWhere('deadline')->ne('0000-00-00')
->andWhere('deadline')->lt($today)
->andWhere('deleted')->eq(0)
$data['delayBug'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_BUG)->alias('t1')
->leftJoin(TABLE_PRODUCT)->alias('t2')->on('t1.product=t2.id')
->where('t1.assignedTo')->eq($this->app->user->account)
->andWhere('t1.status')->eq('active')
->andWhere('t1.deadline')->ne('0000-00-00')
->andWhere('t1.deadline')->lt($today)
->andWhere('t1.deleted')->eq(0)
->andWhere('t2.deleted')->eq(0)
->fetch('count');
$data['delayProject'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_PROJECT)
->where('status')->in('wait,doing')
@@ -41,6 +41,8 @@
<?php $id = 0; ?>
<?php foreach($executionStats as $execution):?>
<?php
if(!empty($execution->children)) continue;
$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);
if($config->systemMode == 'new') $execution->name = zget($projectPairs, $execution->project, '') . ' / ' . $execution->name;
@@ -185,11 +185,11 @@ $(function()
<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&orderBy=status,id_desc&build=0&type=all"), $execution->totalBugs);?></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&orderBy=status,id_desc&build=0&type=unresolved"), $execution->activeBugs);?></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>
+1 -1
View File
@@ -10,5 +10,5 @@ td.branchName > span {vertical-align: middle;}
#mergeBranch .form-actions {padding-top: 20px;}
.modal-body {padding-top: 0;}
.tips {background-color: #ffffff; max-width: 650px; display: flex; padding: 14px;}
.icon-exclamation-sign.icon {align-self: center; color: #2667E3; font-size: 24px;}
.icon-exclamation-sign.icon {align-self: center; color: #2667E3; font-size: 24px; opacity: 1;}
#marginTips {max-width: 585px; margin-left: 10px;}
+3 -2
View File
@@ -2254,12 +2254,13 @@ class bug extends control
* AJAX: get all users as assignedTo list.
*
* @param string $selectedUser
* @param string $params noletter|noempty|nodeleted|noclosed|withguest|pofirst|devfirst|qafirst|pmfirst|realname|outside|inside|all, can be sets of theme
* @access public
* @return string
*/
public function ajaxLoadAllUsers($selectedUser = '')
public function ajaxLoadAllUsers($selectedUser = '', $params = 'devfirst|noclosed')
{
$allUsers = $this->loadModel('user')->getPairs('devfirst|noclosed');
$allUsers = $this->loadModel('user')->getPairs($params);
return print(html::select('assignedTo', $allUsers, $selectedUser, 'class="form-control"'));
}
+1 -1
View File
@@ -1,2 +1,2 @@
.main-table {height: 600px !important}
.main-table {height: 80% !important}
#mainContent {min-height: 400px;}
+11 -4
View File
@@ -60,14 +60,21 @@ function loadAll(productID)
*/
function loadAllUsers()
{
var link = createLink('bug', 'ajaxLoadAllUsers', 'selectedUser=' + $('#assignedTo').val());
isClosedBug = typeof isClosedBug == 'undefined' ? false : isClosedBug;
var params = isClosedBug ? '&params=devfirst' : '';
var link = createLink('bug', 'ajaxLoadAllUsers', 'selectedUser=' + $('#assignedTo').val() + params);
$.get(link, function(data)
{
if(data)
{
var moduleID = $('#module').val();
var productID = $('#product').val();
setAssignedTo(moduleID, productID);
if(!isClosedBug)
{
var moduleID = $('#module').val();
var productID = $('#product').val();
setAssignedTo(moduleID, productID);
}
$('#assignedTo').replaceWith(data);
$('#assignedTo_chosen').remove();
$('#assignedTo').chosen();
+1 -1
View File
@@ -12,7 +12,7 @@ $(function()
var btnClass = " class='" + $that.attr('class') + "'";
var action = $that.html();
if(href.indexOf('createCase') >= 0 || href.indexOf('toStory') >= 0 || href.indexOf('create') >= 0 || href.indexOf('delete') >= 0) return true;
if(href.indexOf('createCase') >= 0 || href.indexOf('toStory') >= 0 || href.indexOf('toTask') >= 0 || href.indexOf('create') >= 0 || href.indexOf('delete') >= 0) return true;
if($that.hasClass('iframe'))
{
+7 -3
View File
@@ -1790,6 +1790,8 @@ class bugModel extends model
->andWhere('project')->eq((int)$projectID)
->andWhere('deleted')->eq(0)
->beginIF($excludeBugs)->andWhere('id')->notIN($excludeBugs)->fi()
->beginIF(!empty($productID) and strpos($bugQuery, 'product') === false and strpos($bugQuery, '`product` IN') === false)->andWhere('product')->eq($productID)->fi()
->beginIF(!empty($productID) and strpos($bugQuery, 'product') === false and strpos($bugQuery, '`product` IN') === false)->andWhere('branch')->eq($branchID)->fi()
->orderBy($orderBy)
->page($pager)
->fetchAll('id');
@@ -1801,7 +1803,7 @@ class bugModel extends model
->where('t1.deleted')->eq(0)
->beginIF(empty($build))->andWhere('t1.project')->eq($projectID)->fi()
->beginIF(!empty($productID))->andWhere('t1.product')->eq($productID)->fi()
->andWhere('t1.branch')->eq($branchID)
->beginIF(!empty($productID))->andWhere('t1.branch')->eq($branchID)->fi()
->beginIF($type == 'unresolved')->andWhere('t1.status')->eq('active')->fi()
->beginIF($type == 'noclosed')->andWhere('t1.status')->ne('closed')->fi()
->beginIF($type == 'assignedtome')->andWhere('t1.assignedTo')->eq($this->app->user->account)->fi()
@@ -1856,6 +1858,8 @@ class bugModel extends model
->andWhere('execution')->eq((int)$executionID)
->andWhere('deleted')->eq(0)
->beginIF($excludeBugs)->andWhere('id')->notIN($excludeBugs)->fi()
->beginIF(!empty($productID) and strpos($bugQuery, 'product') === false and strpos($bugQuery, '`product` IN') === false)->andWhere('product')->eq($productID)->fi()
->beginIF(!empty($productID) and $branchID !== 'all' and strpos($bugQuery, 'product') === false and strpos($bugQuery, '`product` IN') === false)->andWhere('branch')->eq($branchID)->fi()
->orderBy($orderBy)
->page($pager)
->fetchAll('id');
@@ -1865,7 +1869,7 @@ class bugModel extends model
$bugs = $this->dao->select('t1.*')->from(TABLE_BUG)->alias('t1')
->leftJoin(TABLE_MODULE)->alias('t2')->on('t1.module=t2.id')
->where('t1.deleted')->eq(0)
->beginIF($branchID != 'all')->andWhere('t1.branch')->eq($branchID)->fi()
->beginIF(!empty($productID) and $branchID !== 'all')->andWhere('t1.branch')->eq($branchID)->fi()
->beginIF(empty($build))->andWhere('t1.execution')->eq($executionID)->fi()
->beginIF(!empty($productID))->andWhere('t1.product')->eq($productID)->fi()
->beginIF($type == 'unresolved')->andWhere('t1.status')->eq('active')->fi()
@@ -3165,7 +3169,7 @@ class bugModel extends model
break;
case 'confirmed':
$class = 'confirm' . $bug->confirmed;
echo "<span class='$class'>" . zget($this->lang->bug->confirmedList, $bug->confirmed, $bug->confirmed) . "</span> ";
echo "<span class='$class' title='" . zget($this->lang->bug->confirmedList, $bug->confirmed, $bug->confirmed) . "'>" . zget($this->lang->bug->confirmedList, $bug->confirmed, $bug->confirmed) . "</span> ";
break;
case 'title':
$showBranch = isset($this->config->bug->browse->showBranch) ? $this->config->bug->browse->showBranch : 1;
-10
View File
@@ -159,11 +159,6 @@ $currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($brow
<strong>
<?php echo $this->product->getByID($productID)->name ?>
</strong>
<div class="linkButton" onclick="handleLinkButtonClick()">
<span title="<?php echo $lang->viewDetails;?>">
<i class="icon icon-import icon-rotate-270"></i>
</span>
</div>
</div>
<?php endif;?>
<div id="mainContent" class="main-row fade">
@@ -460,10 +455,5 @@ $(function(){$('#modulemenu .nav li:last').after("<li class='right'><a style='fo
<?php if(count($bugs) <= 2):?>
$('#bugForm .table-footer .table-actions #assignedTo').closest('.btn-group.dropup').removeClass('dropup').addClass('dropdown');
<?php endif;?>
function handleLinkButtonClick()
{
var xxcUrl = "xxc:openInApp/zentao-integrated/" + encodeURIComponent(window.location.href.replace(/.display=card/, '').replace('xhtml', 'html'));
window.open(xxcUrl);
}
</script>
<?php include '../../common/view/footer.html.php';?>
+1
View File
@@ -28,6 +28,7 @@ js::set('systemMode' , $config->systemMode);
js::set('confirmUnlinkBuild' , sprintf($lang->bug->confirmUnlinkBuild, zget($resolvedBuilds, $bug->resolvedBuild)));
js::set('tab' , $this->app->tab);
js::set('bugBranch' , $bug->branch);
js::set('isClosedBug' , $bug->status == 'closed');
if($this->app->tab == 'execution') js::set('objectID', $bug->execution);
if($this->app->tab == 'project') js::set('objectID', $bug->project);
?>
-12
View File
@@ -23,13 +23,6 @@
<?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">
<?php if($this->app->getViewType() == 'xhtml'):?>
<div class="linkButton" onclick="handleLinkButtonClick()">
<span title="<?php echo $lang->viewDetails;?>">
<i class="icon icon-import icon-rotate-270"></i>
</span>
</div>
<?php endif;?>
<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'");?>
@@ -466,11 +459,6 @@
</div>
</div>
<script>
function handleLinkButtonClick()
{
var xxcUrl = "xxc:openInApp/zentao-integrated/" + encodeURIComponent(window.location.href.replace(/.display=card/, '').replace('xhtml', 'html'));
window.open(xxcUrl);
}
</script>
<?php include '../../common/view/syntaxhighlighter.html.php';?>
<?php include '../../common/view/footer.html.php';?>
+1
View File
@@ -5,3 +5,4 @@
.page-title .text>a {font-weight: 700;}
.body-modal #mainContent {min-height: 200px;}
td.article-content{overflow:auto !important;}
+1 -1
View File
@@ -568,7 +568,7 @@ class buildModel extends model
$menu .= $this->buildMenu('testtask', 'create', "product=$build->product&execution={$executionID}&build=$build->id&projectID=$build->project", $build, $type, 'bullhorn', '', '', '', $testtaskApp);
if($tab == 'execution' and !empty($execution->type) and $execution->type != 'kanban') $menu .= $this->buildMenu('execution', 'bug', "execution={$extraParams['executionID']}&productID={$extraParams['productID']}&orderBy=status&build=$build->id", $build, $type, '', '', '', '', $this->lang->execution->viewBug);
if($tab == 'execution' and !empty($execution->type) and $execution->type != 'kanban') $menu .= $this->buildMenu('execution', 'bug', "execution={$extraParams['executionID']}&productID={$extraParams['productID']}&branchID=all&orderBy=status&build=$build->id", $build, $type, '', '', '', '', $this->lang->execution->viewBug);
if($tab == 'project' or empty($execution->type) or $execution->type == 'kanban') $menu .= $this->buildMenu('build', 'view', "{$params}&type=generatedBug", $build, $type, 'bug', '', '', '', "data-app='$tab'", $this->lang->project->bug);
$menu .= $this->buildMenu('build', 'edit', $params, $build, $type);
+1 -1
View File
@@ -344,7 +344,7 @@ tbody tr td:first-child input {display: none;}
<?php $this->printExtendFields($build, 'table', 'inForm=0');?>
<tr>
<th style="vertical-align:top"><?php echo $lang->build->desc;?></th>
<td>
<td class='article-content'>
<?php if($build->desc):?>
<?php echo $build->desc;?>
<?php else:?>
+1
View File
@@ -373,6 +373,7 @@ $lang->error->companyNotFound = "The domain %s cannot be found!";
$lang->error->length = array("『%s』Length Error. It should be『%s』", "『%s』length should be <=『%s』and >『%s』.");
$lang->error->reg = "『%s』Format Error. It should be『%s』.";
$lang->error->unique = "『%s』『%s』existed. Please go to Admin->System->Data->Recycle to restore it, if you are sure it is deleted.";
$lang->error->repeat = "『%s』『%s』exists.";
$lang->error->gt = "『%s』should be >『%s』.";
$lang->error->ge = "『%s』should be >=『%s』.";
$lang->error->lt = "『%s』should be <『%s』。";
+1
View File
@@ -373,6 +373,7 @@ $lang->error->companyNotFound = "The domain %s cannot be found!";
$lang->error->length = array("『%s』length error. It should be『%s』", "『%s』length should be <=『%s』and >『%s』.");
$lang->error->reg = "『%s』format error. It should be『%s』.";
$lang->error->unique = "『%s』『%s』exists. Go to Admin->System->Data->Recycle Bin to restore it, if you are sure it is deleted.";
$lang->error->repeat = "『%s』『%s』exists.";
$lang->error->gt = "『%s』should be >『%s』.";
$lang->error->ge = "『%s』should be >=『%s』.";
$lang->error->lt = "『%s』should be <『%s』。";
+1
View File
@@ -373,6 +373,7 @@ $lang->error->companyNotFound = "Le domaine %s ne peut être trouvé !";
$lang->error->length = array("『 %s 』erreur de longueur. Il devrait être『%s』", "La longueur de 『%s』devrait être <=『%s』et >『%s』.");
$lang->error->reg = "『 %s 』erreur de format. Il devrait être『%s』.";
$lang->error->unique = "『 %s 』『 %s 』existes. Allez à Admin->System->Data->Recycle Bin pour le restaurer, si vous êtes sûr qu'il est supprimé.";
$lang->error->repeat = "『 %s 』『 %s 』existes.";
$lang->error->gt = "『 %s 』devrait être > 『 %s 』.";
$lang->error->ge = "『 %s 』devrait être >= 『 %s 』.";
$lang->error->lt = "『%s』should be <『%s』。";
+1
View File
@@ -373,6 +373,7 @@ $lang->error->companyNotFound = "您访问的域名 %s 没有对应的公司。"
$lang->error->length = array("『%s』长度错误,应当为『%s』", "『%s』长度应当不超过『%s』,且大于『%s』。");
$lang->error->reg = "『%s』不符合格式,应当为:『%s』。";
$lang->error->unique = "『%s』已经有『%s』这条记录了。如果您确定该记录已删除,请到后台-系统-数据-回收站还原。";
$lang->error->repeat = "『%s』已经有『%s』这条记录了。";
$lang->error->gt = "『%s』应当大于『%s』。";
$lang->error->ge = "『%s』应当不小于『%s』。";
$lang->error->lt = "『%s』应当小于『%s』。";
+1 -1
View File
@@ -47,7 +47,7 @@ class compileModel extends model
*/
public function getList($repoID, $jobID, $orderBy = 'id_desc', $pager = null)
{
return $this->dao->select('t1.id, t1.name, t1.job, t1.status, t1.createdDate, t1.testtask, t2.pipeline, t2.triggerType, t2.comment, t2.atDay, t2.atTime, t2.engine, t3.name as repoName, t4.name as jenkinsName')->from(TABLE_COMPILE)->alias('t1')
return $this->dao->select('t1.id, t1.name, t1.job, t1.status, DATE_FORMAT(t1.createdDate, "%m-%d %H:%i") AS createdDate, t1.testtask, t2.pipeline, t2.triggerType, t2.comment, t2.atDay, t2.atTime, t2.engine, t3.name as repoName, t4.name as jenkinsName')->from(TABLE_COMPILE)->alias('t1')
->leftJoin(TABLE_JOB)->alias('t2')->on('t1.job=t2.id')
->leftJoin(TABLE_REPO)->alias('t3')->on('t2.repo=t3.id')
->leftJoin(TABLE_PIPELINE)->alias('t4')->on('t2.server=t4.id')
+11 -11
View File
@@ -28,22 +28,22 @@
<form class='main-table' id='ajaxForm' method='post'>
<table id='buildList' class='table has-sort-head table-fixed'>
<thead>
<tr class='text-center'>
<?php $vars = "jobID={$jobID}&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}";?>
<tr>
<?php $vars = "repoID=$repoID&jobID={$jobID}&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}";?>
<th class='c-id'><?php common::printOrderLink('id', $orderBy, $vars, $lang->compile->id);?></th>
<th class='text-left'><?php common::printOrderLink('name', $orderBy, $vars, $lang->compile->name);?></th>
<th class='c-build-type text-left'><?php echo $lang->compile->buildType;?></th>
<th class='c-repo text-left'><?php echo $lang->job->repo;?></th>
<th class='text-left'><?php echo $lang->job->triggerType;?></th>
<th class='c-status text-center'><?php common::printOrderLink('status', $orderBy, $vars, $lang->compile->status);?></th>
<th class='c-date text-center'><?php common::printOrderLink('createdDate', $orderBy, $vars, $lang->compile->time);?></th>
<th class='c-actions'><?php echo $lang->actions;?></th>
<th class='text'><?php common::printOrderLink('name', $orderBy, $vars, $lang->compile->name);?></th>
<th class='c-build-type'><?php echo $lang->compile->buildType;?></th>
<th class='c-repo'><?php echo $lang->job->repo;?></th>
<th class='text'><?php echo $lang->job->triggerType;?></th>
<th class='c-status'><?php common::printOrderLink('status', $orderBy, $vars, $lang->compile->status);?></th>
<th class='c-date'><?php common::printOrderLink('createdDate', $orderBy, $vars, $lang->compile->time);?></th>
<th class='c-actions-2'><?php echo $lang->actions;?></th>
</tr>
</thead>
<tbody class='text-left'>
<?php foreach($buildList as $id => $build):?>
<tr>
<td class='text-center'><?php echo $id;?></td>
<td class='text'><?php echo $id;?></td>
<td class='c-name' title='<?php echo $build->name;?>'><?php echo common::hasPriv('job', 'view') ? html::a($this->createLink('job', 'view', "jobID={$build->job}&compileID={$build->id}", 'html', true), $build->name, '', "class='iframe' data-width='90%'") : $build->name;?></td>
<td title='<?php echo $build->engine;?>'><?php echo $build->engine;?></td>
<td title='<?php echo $build->repoName;?>'><?php echo $build->repoName;?></td>
@@ -51,7 +51,7 @@
<?php $triggerConfig = $this->loadModel('job')->getTriggerConfig($build);?>
<td title='<?php echo $triggerConfig;?>'><?php echo $triggerConfig;?></td>
<?php $buildStatus = zget($lang->compile->statusList, $build->status);?>
<td class='text-center' title='<?php echo $buildStatus;?>'><?php echo $buildStatus;?></td>
<td class='text' title='<?php echo $buildStatus;?>'><?php echo $buildStatus;?></td>
<td title='<?php echo $build->createdDate;?>'><?php echo $build->createdDate;?></td>
<td class='c-actions text-left'>
<?php
+1 -1
View File
@@ -609,7 +609,7 @@ class custom extends control
if($this->config->edition != 'max') $this->loadModel('setting')->setItem('system.custom.hourPoint', $this->post->hourPoint);
$this->app->loadLang('common');
$locate = $this->config->systemMode == 'new' ? inlink('flow') : 'top';
$locate = $this->config->systemMode == 'new' ? 'parent' : 'top';
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $locate));
}
+10
View File
@@ -2,4 +2,14 @@ $(function()
{
$('#subNavbar .nav li').removeClass('active');
$('#subNavbar .nav li[data-id=' + type + ']').addClass('active');
$('#subNavbar .nav li > a').each(function()
{
var type = $(this).parent().attr('data-id');
if(type == 'bysearch') return;
type = type == 'all' ? type : type.toUpperCase();
var href = createLink('design', 'browse', 'projectID=' + projectID + '&productID=' + productID + '&type=' + type);
$(this).attr('href', href);
});
})
+2
View File
@@ -13,6 +13,8 @@
<?php include '../../common/view/header.html.php';?>
<?php include '../../common/view/sortable.html.php';?>
<?php js::set('type', strtolower($type));?>
<?php js::set('projectID', $projectID);?>
<?php js::set('productID', $productID);?>
<style>
.btn-group a i.icon-plus {font-size: 16px;}
.btn-group a.btn-primary {border-right: 1px solid rgba(255,255,255,0.3);}
+1 -1
View File
@@ -79,7 +79,7 @@
<?php foreach($design->tasks as $task):?>
<tr class='text-center'>
<td><?php $task->id?></td>
<td class='text-left'><?php echo html::a($this->createLink('task', 'view', "taskID=$task->id"), $task->name, '_blank');?></td>;
<td class='text-left'><?php echo html::a($this->createLink('task', 'view', "taskID=$task->id"), $task->name, '_blank');?></td>
<td><?php echo zget($users, $task->assignedTo);?></td>
<td><span class='status-task status-<?php echo $task->status;?>'><?php $this->processStatus('task', $task);?></span></td>
<td><?php echo $task->consumed;?></td>
+9 -5
View File
@@ -292,10 +292,11 @@ class doc extends control
* @param int $moduleID
* @param string $docType
* @param bool $fromGlobal
* @param string $from
* @access public
* @return void
*/
public function create($objectType, $objectID, $libID, $moduleID = 0, $docType = '', $fromGlobal = false)
public function create($objectType, $objectID, $libID, $moduleID = 0, $docType = '', $fromGlobal = false, $from = 'doc')
{
if(!empty($_POST))
{
@@ -361,7 +362,7 @@ class doc extends control
if($this->config->systemMode == 'new') unset($this->lang->doc->menu->project['subMenu']);
}
$this->config->showMainMenu = strpos($this->config->doc->textTypes, $docType) === false;
$this->config->showMainMenu = (strpos($this->config->doc->textTypes, $docType) === false or $from == 'template');
/* Get libs and the default lib id. */
$gobackLink = ($objectID == 0 and $libID == 0) ? $this->createLink('doc', 'tableContents', "type=$objectType") : '';
@@ -388,6 +389,7 @@ class doc extends control
$this->view->groups = $this->loadModel('group')->getPairs();
$this->view->users = $this->user->getPairs('nocode|noclosed|nodeleted');
$this->view->fromGlobal = $fromGlobal;
$this->view->from = $from;
$this->display();
}
@@ -424,12 +426,14 @@ class doc extends control
if(!empty($changes)) $this->action->logHistory($actionID, $changes);
}
$link = $this->session->docList ? $this->session->docList : $this->createLink('doc', 'index');
$doc = $this->doc->getById($docID);
$link = $this->session->docList ? $this->session->docList : $this->createLink('doc', 'index');
$doc = $this->doc->getById($docID);
$lib = $this->doc->getLibById($doc->lib);
$objectID = zget($lib, $lib->type, 0);
if(!empty($objectType) and $objectType != 'doc' and $doc->type != 'chapter' and $doc->type != 'article')
{
$link = $this->createLink('doc', 'objectLibs', "type=$objectType&objectID=$objectID&libID=$libID&docID=$docID");
$link = $this->createLink('doc', 'objectLibs', "type={$lib->type}&objectID=$objectID&libID={$doc->lib}&docID=$docID");
}
if(isonlybody()) return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'parent'));
+9
View File
@@ -34,6 +34,15 @@ function loadDocLibs(type)
$('#lib').replaceWith(data);
$('#lib_chosen').remove();
$('#lib').chosen();
if($('#lib').find('option').length == 0)
{
$('#submit').attr('disabled', 'disabled');
}
else
{
$('#submit').removeAttr('disabled');
}
})
$('#docType').toggleClass('hidden', type == 'api');
+1 -1
View File
@@ -133,7 +133,7 @@ $("a[href^='###']").click(function()
<td colspan='3' class='text-center form-actions'>
<?php echo html::hidden('contentType', 'html');?>
<?php echo html::submitButton();?>
<?php if(strpos($config->doc->textTypes, $docType) === false):?>
<?php if($config->showMainMenu):?>
<?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'");?>
<?php endif;?>
+1 -1
View File
@@ -94,7 +94,7 @@ if(empty($type)) $type = 'product';
foreach($this->lang->doc->typeList as $typeKey => $typeName)
{
$icon = zget($this->config->doc->iconList, $typeKey);
$class = strpos($this->config->doc->officeTypes, $typeKey) !== false ? 'iframe' : '';
$class = (strpos($this->config->doc->officeTypes, $typeKey) !== false or strpos($this->config->doc->textTypes, $typeKey) !== false) ? 'iframe' : '';
$html .= "<li>";
$html .= html::a(helper::createLink('doc', 'create', "objectType=$type&objectID=$objectID&libID=$libID&moduleID=0&type=$typeKey", '', $class ? true : false), "<i class='icon-$icon text-muted'></i> " . $typeName, '', "class='$class' data-app='{$this->app->tab}'");
$html .= "</li>";
+28 -6
View File
@@ -1667,7 +1667,6 @@ class execution extends control
}
}
$this->app->loadLang('kanban');
$this->loadModel('user');
$poUsers = $this->user->getPairs('noclosed|nodeleted|pofirst', '', $this->config->maxCount);
if(!empty($this->config->user->moreLink)) $this->config->moreLinks["PM"] = $this->config->user->moreLink;
@@ -1870,7 +1869,6 @@ class execution extends control
}
$this->loadModel('user');
$this->loadModel('kanban');
$poUsers = $this->user->getPairs('noclosed|nodeleted|pofirst', $execution->PO, $this->config->maxCount);
if(!empty($this->config->user->moreLink)) $this->config->moreLinks["PM"] = $this->config->user->moreLink;
@@ -1909,10 +1907,6 @@ class execution extends control
$this->view->teamMembers = $this->execution->getTeamMembers($executionID);
if($this->config->systemMode == 'new') $this->view->allProjects = $this->project->getPairsByModel($project->model, 0, 'noclosed', $project->id);
$this->view->laneCount = $this->kanban->getLaneCount($executionID, $execution->type);
$this->view->heightType = $execution->displayCards > 2 ? 'custom' : 'auto';
$this->view->displayCards = $execution->displayCards ? $execution->displayCards : '';
$this->display();
}
@@ -2300,6 +2294,7 @@ class execution extends control
$end = helper::today();
$dateList = date::getDateList($begin, $end, 'Y-m-d', 'noweekend');
$chartData = $this->execution->buildCFDData($executionID, $dateList, 'task');
if(isset($chartData['line'])) $chartData['line'] = array_reverse($chartData['line']);
$this->view->begin = helper::safe64Encode(urlencode($begin));
$this->view->end = helper::safe64Encode(urlencode($end));
@@ -2608,6 +2603,33 @@ class execution extends control
$this->display();
}
/**
* Set Kanban.
*
* @param int $executionID
* @access public
* @return void
*/
public function setKanban($executionID)
{
$execution = $this->execution->getByID($executionID);
if($_POST)
{
$this->execution->setKanban($executionID);
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'parent'));
}
$this->view->title = $this->lang->execution->setKanban;
$this->view->execution = $execution;
$this->view->laneCount = $this->loadModel('kanban')->getLaneCount($executionID, $execution->type);
$this->view->heightType = $execution->displayCards > 2 ? 'custom' : 'auto';
$this->view->displayCards = $execution->displayCards ? $execution->displayCards : '';
$this->display();
}
/**
* Tree view.
* Product
+1
View File
@@ -9,3 +9,4 @@
td.delayed {color: #fff; background: #e84e0f !important;}
.c-severity {width: 80px;}
.c-confirmed {overflow: hidden;}
+1 -4
View File
@@ -25,13 +25,10 @@
#plansBox .row {display: inline-table; width: 102%;}
#plansBox .row .col-sm-4 {display: inline-block; float: none; padding-right: 13px;}
#mainContent .laneHeightBox .radio-inline+.radio-inline {margin-left: 20px;}
#mainContent .laneHeightBox .tip {color: #999;}
#dateRange {vertical-align: top; padding-top: 13px;}
#dateRangeOption {vertical-align: top; padding-top: 13px;}
#beginLabel {white-space: nowrap;}
#endLabel {white-space: nowrap;}
#copyProjectModal .projectSelect {display: inline-block; margin-left: 10px; width: 20%;}
#copyProjectModal .titleBox{position: relative; bottom: 3px; display: inline-block;}
a.chosen-single > div > b {top: -4px !important;}
a.chosen-single > div > b {top: -4px !important;}
-2
View File
@@ -5,6 +5,4 @@
.chosen-container.chosen-highlight-selected .disabled-result.result-selected {background: none;}
#mainContent .laneHeightBox .radio-inline+.radio-inline, #mainContent .importBox .radio-inline+.radio-inline {margin-left: 20px;}
#mainContent .laneHeightBox .tip {color: #999;}
#dateRange {vertical-align: top; padding-top: 13px;}
+8
View File
@@ -0,0 +1,8 @@
#mainContent tr > th{width: 66px;}
[lang^='en'] #mainContent tr > th, [lang^='de'] #mainContent tr > th, [lang^='fr'] #mainContent tr > th{width: 105px;}
#mainContent .table-form > tbody > tr > th {vertical-align: top; padding-right: 5px;}
#mainContent .radio-inline {display: block;}
#mainContent .radio-inline+.radio-inline {margin-left: 0px; padding-top: 8px;}
#mainContent label > .tip {color: #999;}
#mainContent #cardBox th {vertical-align: middle;}
+1 -1
View File
@@ -143,7 +143,7 @@ function loadBranches(product)
var projectID = (typeof(systemMode) != 'undefined' && systemMode == 'new') ? $('#project').val() : 0;
var index = $inputgroup.find('select:first').attr('id').replace('products' , '');
$.get(createLink('branch', 'ajaxGetBranches', "productID=" + $(product).val() + "&oldBranch=0&param=active&projectID=" + projectID + "&withMainBranch="), function(data)
$.get(createLink('branch', 'ajaxGetBranches', "productID=" + $(product).val() + "&oldBranch=&param=active&projectID=" + projectID + "&withMainBranch="), function(data)
{
if(data)
{
-3
View File
@@ -5,9 +5,6 @@ function setCopyProject(executionID)
$(function()
{
var heightType = $("[name='heightType']:checked").val();
setCardCount(heightType);
$(document).on('click', '#copyProjects a', function()
{
setCopyProject($(this).data('id')); $('#copyProjectModal').modal('hide');
-3
View File
@@ -37,9 +37,6 @@ $().ready(function()
$(function()
{
var heightType = $("[name='heightType']:checked").val();
setCardCount(heightType);
/* If the story of the product which linked the execution under the project, you don't allow to remove the product. */
$("#productsBox select[name^='products']").each(function()
{
+1 -1
View File
@@ -1813,7 +1813,7 @@ function toggleRDSearchBox()
}
else
{
$(".querybox-toggle").css("color", "3c495c");
$(".querybox-toggle").css("color", "#3c495c");
$('#rdKanbanSearchInput').attr('value', '');
searchCards('');
}
+5
View File
@@ -0,0 +1,5 @@
$(function()
{
var heightType = $("[name='heightType']:checked").val();
setCardCount(heightType);
});
+1 -1
View File
@@ -1459,7 +1459,7 @@ function toggleSearchBox()
}
else
{
$(".querybox-toggle").css("color", "3c495c");
$(".querybox-toggle").css("color", "#3c495c");
$('#taskKanbanSearchInput').attr('value', '');
searchCards('');
}
+1
View File
@@ -461,6 +461,7 @@ $lang->execution->orderList['stage_desc'] = "Phase Ab.";
$lang->execution->kanban = "Kanban";
$lang->execution->kanbanSetting = "Kanban Einstellung";
$lang->execution->setKanban = "Kanban Einstellung";
$lang->execution->resetKanban = "Einstellungen zurücksetzen";
$lang->execution->printKanban = "Kanban drucken";
$lang->execution->fullScreen = "Full Screen";
+1
View File
@@ -461,6 +461,7 @@ $lang->execution->orderList['stage_desc'] = "Story Phase Descending";
$lang->execution->kanban = "Kanban";
$lang->execution->kanbanSetting = "Settings";
$lang->execution->setKanban = "Set Kanban";
$lang->execution->resetKanban = "Reset";
$lang->execution->printKanban = "Print";
$lang->execution->fullScreen = "Full Screen";
+1
View File
@@ -461,6 +461,7 @@ $lang->execution->orderList['stage_desc'] = "Story Phase Descendante";
$lang->execution->kanban = "Kanban";
$lang->execution->kanbanSetting = "Paramétrage";
$lang->execution->setKanban = "Paramétrage";
$lang->execution->resetKanban = "Réinitialiser";
$lang->execution->printKanban = "Impression";
$lang->execution->fullScreen = "Full Screen";
+1
View File
@@ -461,6 +461,7 @@ $lang->execution->orderList['stage_desc'] = "{$lang->SRCommon}阶段倒序";
$lang->execution->kanban = "看板";
$lang->execution->kanbanSetting = "看板设置";
$lang->execution->setKanban = "设置看板";
$lang->execution->resetKanban = "恢复默认";
$lang->execution->printKanban = "打印看板";
$lang->execution->fullScreen = "看板全屏展示";
+28 -3
View File
@@ -391,6 +391,7 @@ class executionModel extends model
$this->lang->project->code = $this->lang->execution->execCode;
}
$this->lang->error->unique = $this->lang->error->repeat;
$sprintProject = isset($sprint->project) ? $sprint->project : '0';
$this->dao->insert(TABLE_EXECUTION)->data($sprint)
->autoCheck($skipFields = 'begin,end')
@@ -540,6 +541,7 @@ class executionModel extends model
}
/* Update data. */
$this->lang->error->unique = $this->lang->error->repeat;
$executionProject = isset($execution->project) ? $execution->project : '0';
$this->dao->update(TABLE_EXECUTION)->data($execution)
->autoCheck($skipFields = 'begin,end')
@@ -1073,6 +1075,25 @@ class executionModel extends model
}
}
/**
* Set Kanban.
*
* @param int $executionID
* @access public
* @return void
*/
public function setKanban($executionID)
{
$execution = fixer::input('post')
->setIF($this->post->heightType == 'auto', 'displayCards', 0)
->remove('heightType')
->get();
if(isset($_POST['heightType']) and $this->post->heightType == 'custom' and !$this->loadModel('kanban')->checkDisplayCards($execution->displayCards)) return;
$this->dao->update(TABLE_EXECUTION)->data($execution)->where('id')->eq((int)$executionID)->exec();
}
/**
* Check the workload format and total.
*
@@ -2592,9 +2613,13 @@ class executionModel extends model
}
}
$projectID = $this->dao->select('project')->from(TABLE_EXECUTION)->where('id')->eq($executionID)->fetch('project');
if($this->config->systemMode == 'new')
{
$projectID = $this->dao->select('project')->from(TABLE_EXECUTION)->where('id')->eq($executionID)->fetch('project');
$this->session->set('project', $projectID);
$this->linkStory($projectID, $planStories, $planProducts);
}
$this->linkStory($executionID, $planStories, $planProducts);
if($this->config->systemMode == 'new') $this->linkStory($projectID, $planStories, $planProducts);
}
/**
@@ -3165,7 +3190,7 @@ class executionModel extends model
}
elseif((helper::today() > $execution->end))
{
$begin = date($execution->end, strtotime('-13 days')) > $execution->begin ? date($execution->end, strtotime('-13 days')) : $execution->begin;
$begin = date('Y-m-d', strtotime('-13 days', strtotime($execution->end))) > $execution->begin ? date('Y-m-d', strtotime('-13 days', strtotime($execution->end))) : $execution->begin;
$end = $execution->end;
}
+3 -12
View File
@@ -33,8 +33,9 @@
<div class="btn-toolbar pull-left">
<?php
$buildName = $build ? " <span class='label label-danger'>Build:{$build->name}</span>" : '';
echo html::a($this->inlink('bug', "executionID={$execution->id}&productID={$productID}&branch={$branchID}&orderBy=status,id_desc&build=$buildID&type=all"), "<span class='text'>{$lang->bug->allBugs}</span>" . ($type == 'all' ? " <span class='label label-light label-badge'>{$pager->recTotal}</span>$buildName" : ''), '', "id='allTab' class='btn btn-link" . ('all' == $type ? ' btn-active-text' : '') . "'");
echo html::a($this->inlink('bug', "executionID={$execution->id}&productID={$productID}&branch={$branchID}&orderBy=status,id_desc&build=$buildID&type=unresolved"), "<span class='text'>{$lang->bug->unResolved}</span>" . ($type == 'unresolved' ? " <span class='label label-light label-badge'>{$pager->recTotal}</span>$buildName" : ''), '', "id='unresolvedTab' class='btn btn-link" . ('unresolved' == $type ? ' btn-active-text' : '') . "'");
$module = $type != 'bysearch' ? "&param=$param" : '';
echo html::a($this->inlink('bug', "executionID={$execution->id}&productID={$productID}&branch={$branchID}&orderBy=status,id_desc&build=$buildID&type=all$module"), "<span class='text'>{$lang->bug->allBugs}</span>" . ($type == 'all' ? " <span class='label label-light label-badge'>{$pager->recTotal}</span>$buildName" : ''), '', "id='allTab' class='btn btn-link" . ('all' == $type ? ' btn-active-text' : '') . "'");
echo html::a($this->inlink('bug', "executionID={$execution->id}&productID={$productID}&branch={$branchID}&orderBy=status,id_desc&build=$buildID&type=unresolved$module"), "<span class='text'>{$lang->bug->unResolved}</span>" . ($type == 'unresolved' ? " <span class='label label-light label-badge'>{$pager->recTotal}</span>$buildName" : ''), '', "id='unresolvedTab' class='btn btn-link" . ('unresolved' == $type ? ' btn-active-text' : '') . "'");
?>
<a class="btn btn-link querybox-toggle" id="bysearchTab"><i class="icon icon-search muted"></i> <?php echo $lang->bug->search;?></a>
</div>
@@ -48,11 +49,6 @@
<strong>
<?php echo ($this->project->getById($execution->project)->name . ' / ' . $this->execution->getByID($execution->id)->name) ?>
</strong>
<div class="linkButton" onclick="handleLinkButtonClick()">
<span title="<?php echo $lang->viewDetails;?>">
<i class="icon icon-import icon-rotate-270"></i>
</span>
</div>
</div>
<?php endif;?>
<div id="mainContent" class='main-row split-row fade'>
@@ -208,10 +204,5 @@
<?php if(!empty($useDatatable)):?>
$(function(){$('#executionBugForm').table();})
<?php endif;?>
function handleLinkButtonClick()
{
var xxcUrl = "xxc:openInApp/zentao-integrated/" + encodeURIComponent(window.location.href.replace(/.display=card/, '').replace('xhtml', 'html'));
window.open(xxcUrl);
}
</script>
<?php include '../../common/view/footer.html.php';?>
-12
View File
@@ -224,18 +224,6 @@
<th><?php echo $lang->execution->team;?></th>
<td colspan='3'><?php echo html::select('teamMembers[]', $users, '', "class='form-control picker-select' multiple"); ?></td>
</tr>
<tr>
<th><?php echo $lang->kanban->columnWidth;?></th>
<td colspan='2'><?php echo nl2br(html::radio('fluidBoard', $lang->kanbancolumn->fluidBoardList, 0));?></td>
</tr>
<tr>
<th id='c-name'><?php echo $lang->kanban->laneHeight;?></th>
<td class='laneHeightBox' colspan='3'><?php echo nl2br(html::radio('heightType', $lang->kanbanlane->heightTypeList, 'auto', "onclick='setCardCount(this.value);'"));?></td>
</tr>
<tr class="hidden" id='cardBox'>
<th class='c-count'><?php echo $lang->kanban->cardCount;?></th>
<td><?php echo html::input('displayCards', '', "class='form-control' required placeholder='{$lang->kanban->cardCountTip}' autocomplete='off'");?></td>
</tr>
<tr>
<th><?php echo $showExecutionExec ? $lang->execution->execDesc : $lang->execution->desc;?></th>
<td colspan='3'>
-14
View File
@@ -195,20 +195,6 @@
<th><?php echo $lang->execution->team;?></th>
<td colspan='2'><?php echo html::select('teamMembers[]', $users, array_keys($teamMembers), "class='form-control picker-select' multiple"); ?></td>
</tr>
<tr>
<th><?php echo $lang->kanban->columnWidth;?></th>
<td colspan='2'><?php echo nl2br(html::radio('fluidBoard', $lang->kanbancolumn->fluidBoardList, $execution->fluidBoard));?></td>
</tr>
<?php if($laneCount > 1):?>
<tr>
<th id='c-name'><?php echo $lang->kanban->laneHeight;?></th>
<td class='laneHeightBox' colspan='2'><?php echo nl2br(html::radio('heightType', $lang->kanbanlane->heightTypeList, $heightType, "onclick='setCardCount(this.value);'"));?></td>
</tr>
<tr class="hidden" id='cardBox'>
<th class='c-count'><?php echo $lang->kanban->cardCount;?></th>
<td><?php echo html::input('displayCards', $displayCards, "class='form-control' required placeholder='{$lang->kanban->cardCountTip}' autocomplete='off'");?></td>
</tr>
<?php endif;?>
<tr>
<th><?php echo $lang->execution->desc;?></th>
<td colspan='2'><?php echo html::textarea('desc', htmlSpecialString($execution->desc), "rows='6' class='form-control kindeditor' hidefocus='true'");?></td>
+9
View File
@@ -226,6 +226,15 @@
<td colspan='13'>
<div class="table-row segments-list">
<?php if($groupBy == 'assignedTo' and isset($members[$task->assignedTo])) printf($lang->execution->memberHours, zget($users, $task->assignedTo), $members[$task->assignedTo]->totalHours);?>
<?php if($groupBy == 'assignedTo' and empty($task->assignedTo)):?>
<div class="table-col">
<div class="clearfix segments">
<div class="segment">
<div class="segment-title"><?php echo $groupName;?></div>
</div>
</div>
</div>
<?php endif;?>
<?php printf($lang->execution->countSummary, $groupSum, $groupDoing, $groupWait);?>
<?php printf($lang->execution->timeSummary, $groupEstimate . $lang->execution->workHourUnit, $groupConsumed . $lang->execution->workHourUnit, $groupLeft . $lang->execution->workHourUnit);?>
</div>
+1 -1
View File
@@ -60,7 +60,7 @@
</td>
<td title="<?php echo $executions[$task->execution];?>"><?php echo $executions[$task->execution];?></td>
<td><span class='label-pri label-pri-<?php echo $task->pri;?>' title='<?php echo zget($lang->task->priList, $task->pri, $task->pri);?>'><?php echo $task->pri == '0' ? '' : zget($lang->task->priList, $task->pri, $task->pri);?></span></td>
<td class='text-left nobr'><?php if(!common::printLink('task', 'view', "task=$task->id", $task->name, '', "class='preview'", true, true)) echo $task->name;?></td>
<td class='text-left nobr'><?php if(!common::printLink('task', 'view', "task=$task->id", $task->name, '', "class='preview iframe' data-width='90%'", true, true)) echo $task->name;?></td>
<td <?php echo $class;?>><?php echo $task->assignedToRealName;?></td>
<td 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>
+8 -6
View File
@@ -156,14 +156,16 @@ js::set('priv',
echo html::a('javascript:fullScreen()', "<i class='icon-fullscreen muted'></i> " . $lang->kanban->fullScreen, '', "class='btn btn-link'");
$actions = '';
$printCreateRegion = (common::hasPriv('kanban', 'createRegion') and $groupBy == 'default');
$printSettingBtn = ($printCreateRegion or common::hasPriv('execution', 'edit') or common::hasPriv('execution', 'close') or common::hasPriv('execution', 'delete') or !empty($executionActions));
$printSettingBtn = ($printCreateRegion or common::hasPriv('execution', 'edit') or common::hasPriv('execution', 'setKanban') or common::hasPriv('execution', 'close') or common::hasPriv('execution', 'delete') or !empty($executionActions));
if($printSettingBtn)
{
$actions .= html::a('javascript:;', "<i class='icon icon-cog-outline'></i>" . $lang->kanban->setting, '', "data-toggle='dropdown' class='btn btn-link'");
$actions .= "<ul id='kanbanActionMenu' class='dropdown-menu pull-right'>";
$width = $this->app->getClientLang() == 'en' ? '750' : '650';
$actions .= "<div class='btn-group menu-actions'>";
$actions .= html::a('javascript:;', "<i class='icon icon-ellipsis-v'></i>", '', "data-toggle='dropdown' class='btn btn-link'");
$actions .= "<ul class='dropdown-menu pull-right'>";
$width = common::checkNotCN() ? '600px' : '470px';
if($printCreateRegion) $actions .= '<li>' . html::a(helper::createLink('kanban', 'createRegion', "kanbanID=$execution->id&from=execution", '', true), '<i class="icon icon-plus"></i>' . $lang->kanban->createRegion, '', "class='iframe btn btn-link text-left'") . '</li>';
if(common::hasPriv('execution', 'setKanban')) $actions .= '<li>' . html::a(helper::createLink('execution', 'setKanban', "executionID=$execution->id", '', true), '<i class="icon icon-cog-outline"></i>' . $lang->execution->setKanban, '', "class='iframe btn btn-link text-left' data-width='$width'") . '</li>';
$kanbanActions = '';
if(common::hasPriv('execution', 'edit')) $kanbanActions .= '<li>' . html::a(helper::createLink('execution', 'edit', "executionID=$execution->id", '', true), '<i class="icon icon-edit"></i>' . $lang->kanban->edit, '', "class='iframe btn btn-link text-left' data-width='80%'") . '</li>';
if(common::hasPriv('execution', 'start')) $kanbanActions .= '<li class="startButton hidden">' . html::a(helper::createLink('execution', 'start', "executionID=$execution->id&from=kanban", '', true), '<i class="icon icon-play"></i>' . $lang->execution->start, '', "class='iframe btn btn-link text-left' data-width='75%'") . '</li>';
@@ -174,9 +176,9 @@ js::set('priv',
if(common::hasPriv('execution', 'delete')) $kanbanActions .= '<li>' . html::a(helper::createLink('execution', 'delete', "executionID=$execution->id"), '<i class="icon icon-trash"></i>' . $lang->delete, 'hiddenwin', "class='btn btn-link text-left'") . '</li>';
if($kanbanActions)
{
$actions .= (common::hasPriv('kanban', 'createRegion') and (common::hasPriv('execution', 'edit') or common::hasPriv('execution', 'delete') or !empty($executionActions))) ? "<div class='divider'></div>" . $kanbanActions : $kanbanActions;
$actions .= ((common::hasPriv('kanban', 'createRegion') or common::hasPriv('execution', 'setKanban')) and (common::hasPriv('execution', 'edit') or common::hasPriv('execution', 'delete') or !empty($executionActions))) ? "<div class='divider'></div>" . $kanbanActions : $kanbanActions;
}
$actions .= "</ul>";
$actions .= '</ul></div>';
}
echo $actions;
+2
View File
@@ -19,9 +19,11 @@
<div class="btn-toolbar pull-left">
<span class='btn btn-link btn-active-text'><span class='text'><?php echo $lang->execution->linkStory;?></span></span>
</div>
<?php if(!isonlybody()):?>
<div class='btn-toolbar pull-right'>
<?php echo html::a($browseLink, '<i class="icon icon-back icon-sm"></i> ' . $lang->goback, '', "class='btn btn-primary'");?>
</div>
<?php endif;?>
</div>
<div id="mainContent">
<div class="cell space-sm">
+42
View File
@@ -0,0 +1,42 @@
<?php
/**
* The edit view of execution module of ZenTaoPMS.
*
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology 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 execution
* @version $Id: edit.html.php 4728 2013-05-03 06:14:34Z chencongzhi520@gmail.com $
* @link http://www.zentao.net
*/
?>
<?php include '../../common/view/header.html.php';?>
<div id='mainContent' class='main-content'>
<div class='center-block'>
<div class='main-header'>
<h2>
<?php echo $lang->execution->setKanban;?>
</h2>
</div>
<form class='load-indicator main-form form-ajax' method='post' id='dataform'>
<table class='table table-form'>
<tr>
<th><?php echo $lang->kanban->columnWidth;?></th>
<td colspan='2'><?php echo nl2br(html::radio('fluidBoard', $lang->kanbancolumn->fluidBoardList, $execution->fluidBoard));?></td>
</tr>
<?php if($laneCount > 1):?>
<tr>
<th id='c-name'><?php echo $lang->kanban->laneHeight;?></th>
<td class='laneHeightBox' colspan='2'><?php echo nl2br(html::radio('heightType', $lang->kanbanlane->heightTypeList, $heightType, "onclick='setCardCount(this.value);'"));?></td>
</tr>
<tr class="hidden" id='cardBox'>
<th class='c-count'><?php echo $lang->kanban->cardCount;?></th>
<td><?php echo html::input('displayCards', $displayCards, "class='form-control' required placeholder='{$lang->kanban->cardCountTip}' autocomplete='off'");?></td>
</tr>
<?php endif;?>
<tr><td colspan='3' class='text-center form-actions'><?php echo html::submitButton() . ' ' . html::backButton();?></td></tr>
</table>
</form>
</div>
</div>
<?php include '../../common/view/footer.html.php';?>
-10
View File
@@ -155,11 +155,6 @@
<strong>
<?php echo ($this->project->getById($execution->project)->name . ' / ' . $this->execution->getByID($execution->id)->name) ?>
</strong>
<div class="linkButton" onclick="handleLinkButtonClick()">
<span title="<?php echo $lang->viewDetails;?>">
<i class="icon icon-import icon-rotate-270"></i>
</span>
</div>
</div>
<?php endif;?>
<div id="mainContent" class="main-row fade">
@@ -398,11 +393,6 @@ $(function()
}
});
});
function handleLinkButtonClick()
{
var xxcUrl = "xxc:openInApp/zentao-integrated/" + encodeURIComponent(window.location.href.replace(/.display=card/, '').replace('xhtml', 'html'));
window.open(xxcUrl);
}
<?php if(!empty($useDatatable)):?>
$(function(){$('#executionStoryForm').table();})
<?php endif;?>
-11
View File
@@ -174,11 +174,6 @@ body {margin-bottom: 25px;}
<strong>
<?php echo $projectName;?>
</strong>
<div class="linkButton" onclick="handleLinkButtonClick()">
<span title="<?php echo $lang->viewDetails;?>">
<i class="icon icon-import icon-rotate-270"></i>
</span>
</div>
</div>
<?php endif;?>
<div id="mainContent" class="main-row fade">
@@ -475,12 +470,6 @@ $(function()
});
<?php if($this->app->getViewType() == 'xhtml'):?>
function handleLinkButtonClick()
{
var xxcUrl = "xxc:openInApp/zentao-integrated/" + encodeURIComponent(window.location.href.replace(/.display=card/, '').replace('xhtml', 'html'));
window.open(xxcUrl);
}
$(function()
{
function handleClientReady()
+4 -3
View File
@@ -71,12 +71,13 @@
</div>
<?php
$width = common::checkNotCN() ? '600px' : '470px';
echo "<div class='btn-group menu-actions'>";
echo html::a('javascript:;', "<i class='icon icon-ellipsis-v'></i>", '', "data-toggle='dropdown' class='btn btn-link'");
echo "<ul class='dropdown-menu pull-right'>";
if(common::hasPriv('execution', 'printKanban')) echo '<li>' . html::a($this->createLink('execution', 'printKanban', "executionID=$executionID"), "<i class='icon icon-printer muted'></i> " . $lang->execution->printKanban, '', "class='iframe btn btn-link' id='printKanban' title='{$lang->execution->printKanban}' data-width='500'") . '</li>';
if(common::hasPriv('execution', 'edit')) echo '<li>' . html::a(helper::createLink('execution', 'edit', "executionID=$execution->id", '', true), '<i class="icon icon-edit"></i>' . $lang->execution->edit, '', "class='iframe btn btn-link text-left' data-width='75%'") . '</li>';
echo '<li>' .html::a('javascript:fullScreen()', "<i class='icon icon-fullscreen muted'></i> " . $lang->execution->fullScreen, '', "class='btn btn-link' title='{$lang->execution->fullScreen}' data-width='500'") . '</li>';
if(common::hasPriv('execution', 'setKanban')) echo '<li>' . html::a(helper::createLink('execution', 'setKanban', "executionID=$execution->id", '', true), '<i class="icon icon-cog-outline"></i>' . $lang->execution->setKanban, '', "class='iframe btn btn-link text-left' data-width='$width'") . '</li>';
if(common::hasPriv('execution', 'printKanban')) echo '<li>' . html::a($this->createLink('execution', 'printKanban', "executionID=$executionID"), "<i class='icon icon-printer muted'></i>" . $lang->execution->printKanban, '', "class='iframe btn btn-link' id='printKanban' title='{$lang->execution->printKanban}' data-width='500'") . '</li>';
echo '<li>' .html::a('javascript:fullScreen()', "<i class='icon icon-fullscreen muted'></i>" . $lang->execution->fullScreen, '', "class='btn btn-link' title='{$lang->execution->fullScreen}' data-width='500'") . '</li>';
echo '</ul></div>';
?>
<?php
+3 -1
View File
@@ -269,8 +269,10 @@
<p>
<?php if($execution->deleted):?>
<span class='label label-danger label-outline'><?php echo $lang->execution->deleted;?></span>
<?php endif; ?>
<?php endif;?>
<?php if(!empty($execution->lifetime)):?>
<span class="label label-primary label-outline"><?php echo zget($lang->execution->lifeTimeList, $execution->lifetime);?></span>
<?php endif;?>
<?php if(isset($execution->delay)):?>
<span class="label label-danger label-outline"><?php echo $lang->execution->delayed;?></span>
<?php else:?>
+2 -2
View File
@@ -8,10 +8,10 @@ $lang->gitea->edit = 'Edit Gitea';
$lang->gitea->view = 'View Gitea';
$lang->gitea->delete = 'Delete Gitea';
$lang->gitea->confirmDelete = 'Do you want to delete this Gitea server?';
$lang->gitea->giteaAvatar = 'Avatar';
$lang->gitea->bindUser = 'Bind User';
$lang->gitea->giteaEmail = 'Email';
$lang->gitea->giteaAvatar = 'Avatar';
$lang->gitea->giteaAccount = 'Gitea Account';
$lang->gitea->giteaEmail = 'Email';
$lang->gitea->zentaoAccount = 'Zentao Account';
$lang->gitea->bindingStatus = 'Binding Status';
$lang->gitea->notBind = 'Not bind';
+2 -2
View File
@@ -8,10 +8,10 @@ $lang->gitea->edit = 'Edit Gitea';
$lang->gitea->view = 'View Gitea';
$lang->gitea->delete = 'Delete Gitea';
$lang->gitea->confirmDelete = 'Do you want to delete this Gitea server?';
$lang->gitea->giteaAvatar = 'Avatar';
$lang->gitea->bindUser = 'Bind User';
$lang->gitea->giteaEmail = 'Email';
$lang->gitea->giteaAvatar = 'Avatar';
$lang->gitea->giteaAccount = 'Gitea Account';
$lang->gitea->giteaEmail = 'Email';
$lang->gitea->zentaoAccount = 'Zentao Account';
$lang->gitea->bindingStatus = 'Binding Status';
$lang->gitea->notBind = 'Not bind';
+2 -2
View File
@@ -8,10 +8,10 @@ $lang->gitea->edit = 'Edit Gitea';
$lang->gitea->view = 'View Gitea';
$lang->gitea->delete = 'Delete Gitea';
$lang->gitea->confirmDelete = 'Do you want to delete this Gitea server?';
$lang->gitea->giteaAvatar = 'Avatar';
$lang->gitea->bindUser = 'Bind User';
$lang->gitea->giteaEmail = 'Email';
$lang->gitea->giteaAvatar = 'Avatar';
$lang->gitea->giteaAccount = 'Gitea Account';
$lang->gitea->giteaEmail = 'Email';
$lang->gitea->zentaoAccount = 'Zentao Account';
$lang->gitea->bindingStatus = 'Binding Status';
$lang->gitea->notBind = 'Not bind';
+4 -32
View File
@@ -384,6 +384,10 @@ class giteaModel extends model
$project->path_with_namespace = $project->full_name;
$project->http_url_to_repo = $project->html_url;
$project->name_with_namespace = $project->full_name;
$gitea = $this->getByID($giteaID);
$oauth = "oauth2:{$gitea->token}@";
$project->tokenCloneUrl = preg_replace('/(http(s)?:\/\/)/', "\$1$oauth", $project->html_url);
}
return $project;
@@ -600,36 +604,4 @@ class giteaModel extends model
return $newBranches;
}
/**
* Check remote url.
*
* @param int $giteaID
* @param string $project
* @param string $client
* @param string $path
* @access public
* @return bool
*/
public function checkRemoteUrl($giteaID, $project, $client, $path)
{
if(chdir($path))
{
$url = new stdclass();
$remote = execCmd(escapeCmd("$client remote -v"), 'array');
$pregHttp = '/http(s)?:\/\/(www\.)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:\d+)*(\/\w+)*\.git/';
$pregSSH = '/ssh:\/\/git@[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:\d+)*(\/\w+)*\.git/';
if(preg_match($pregHttp, $remote[0], $matches)) $url->http = $matches[0];
if(preg_match($pregSSH, $remote[0], $matches)) $url->ssh = $matches[0];
$project = $this->apiGetSingleProject($giteaID, $project);
if(isset($project->clone_url))
{
if($project->clone_url == $url->http or $project->ssh_url == $url->ssh) return true;
}
}
return false;
}
}
+1 -1
View File
@@ -38,7 +38,7 @@
<th class='c-id'><?php common::printOrderLink('id', $orderBy, $vars, $lang->gitea->id);?></th>
<th class='c-name w-300px'><?php common::printOrderLink('name', $orderBy, $vars, $lang->gitea->name);?></th>
<th class='text'><?php common::printOrderLink('url', $orderBy, $vars, $lang->gitea->url);?></th>
<th class='c-actions-3'><?php echo $lang->actions;?></th>
<th class='c-actions-3 text-center'><?php echo $lang->actions;?></th>
</tr>
</thead>
<tbody>
+1 -1
View File
@@ -38,7 +38,7 @@
<th class='c-id'><?php common::printOrderLink('id', $orderBy, $vars, $lang->gitlab->id);?></th>
<th class='c-name w-300px'><?php common::printOrderLink('name', $orderBy, $vars, $lang->gitlab->name);?></th>
<th class='text-left'><?php common::printOrderLink('url', $orderBy, $vars, $lang->gitlab->url);?></th>
<th class='c-actions-3'><?php echo $lang->actions;?></th>
<th class='c-actions-3 text-center'><?php echo $lang->actions;?></th>
</tr>
</thead>
<tbody>
+1 -1
View File
@@ -43,7 +43,7 @@
<th class='c-name text-left'><?php common::printOrderLink('name', $orderBy, $vars, $lang->gitlab->group->name);?></th>
<th class='text-left'><?php common::printOrderLink('path', $orderBy, $vars, $lang->gitlab->group->path);?></th>
<th class='text-left'><?php echo $lang->gitlab->group->createOn;?></th>
<th class='c-actions-3'><?php echo $lang->actions;?></th>
<th class='c-actions-3 text-center'><?php echo $lang->actions;?></th>
</tr>
</thead>
<tbody>
+3 -1
View File
@@ -45,7 +45,7 @@
<th class='c-name'><?php common::printOrderLink('name', $orderBy, $vars, $lang->gitlab->project->name);?></th>
<th class='text'></th>
<th class='text'><?php echo $lang->gitlab->lastUpdate;?></th>
<th class='c-actions-8'><?php echo $lang->actions;?></th>
<th class='c-actions-9 text-center'><?php echo $lang->actions;?></th>
</tr>
</thead>
<tbody>
@@ -60,6 +60,8 @@
<td class='text' title='<?php echo substr($gitlabProject->last_activity_at, 0, 10);?>'><?php echo substr($gitlabProject->last_activity_at, 0, 10);?></td>
<td class='c-actions'>
<?php
echo common::buildIconButton('gitlab', 'browseBranch', "gitlabID=$gitlabID&projectID=$gitlabProject->id", '', 'list', 'treemap', '', '', false, '', $this->lang->gitlab->browseBranch, 0, $gitlabProject->default_branch);
echo common::buildIconButton('gitlab', 'browseTag', "gitlabID=$gitlabID&projectID=$gitlabProject->id", '', 'list', 'tag', '', '', false, '', $this->lang->gitlab->browseTag, 0, $gitlabProject->default_branch);
echo common::buildIconButton('gitlab', 'manageBranchPriv', "gitlabID=$gitlabID&projectID=$gitlabProject->id", '', 'list', 'branch-lock', '', '', false, '', $this->lang->gitlab->browseBranchPriv, 0, ($gitlabProject->isMaintainer and $gitlabProject->default_branch));
echo common::buildIconButton('gitlab', 'manageTagPriv', "gitlabID=$gitlabID&projectID=$gitlabProject->id", '', 'list', 'tag-lock', '', '', false, '', $this->lang->gitlab->browseTagPriv, 0, ($gitlabProject->isMaintainer and $gitlabProject->default_branch));
echo common::buildIconButton('gitlab', 'manageProjectMembers', 'repoID=' . zget($repoPairs, $gitlabProject->id), '', 'list', 'team', '', '', false, '', '', 0, isset($repoPairs[$gitlabProject->id]));
+1 -1
View File
@@ -51,7 +51,7 @@
<th class='c-name text-left'><?php common::printOrderLink('name', $orderBy, $vars, $lang->gitlab->tag->name);?></th>
<th class='text-left'><?php echo $lang->gitlab->tag->lastCommitter;?></th>
<th class='text-left'><?php common::printOrderLink('updated', $orderBy, $vars, $lang->gitlab->tag->lastCommittedDate);?></th>
<th class='c-actions-1'><?php echo $lang->actions;?></th>
<th class='c-actions-1 text-center'><?php echo $lang->actions;?></th>
</tr>
</thead>
<tbody>
+1 -1
View File
@@ -42,7 +42,7 @@
<th class='c-name text w-400px'></th>
<th class='text'><?php echo $lang->gitlab->user->createOn;?></th>
<th class='text'><?php echo $lang->gitlab->user->lastActivity;?></th>
<th class='c-actions-4'><?php echo $lang->actions;?></th>
<th class='c-actions-2'><?php echo $lang->actions;?></th>
</tr>
</thead>
<tbody>
+3 -2
View File
@@ -91,6 +91,7 @@ class group extends control
if(!empty($_POST))
{
$this->group->update($groupID);
if(dao::isError()) return print(js::error(dao::getError()));
if(isonlybody()) return print(js::closeModal('parent.parent', 'this'));
return print(js::locate($this->createLink('group', 'browse'), 'parent'));
}
@@ -191,8 +192,8 @@ class group extends control
if($type == 'byModule') $result = $this->group->updatePrivByModule();
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
if($type == 'byGroup') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('managePriv', "type=byGroup&param=$param&menu=$menu&version=$version")));
if($type == 'byModule') return print(js::alert($this->lang->saveSuccess) . js::execute('window.parent.location.reload()'));
if($type == 'byGroup') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'reload'));
if($type == 'byModule') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'window.parent.location.reload()'));
}
if($type == 'byGroup')
+1
View File
@@ -46,6 +46,7 @@ $lang->group->group = 'Group';
$lang->group->more = 'More';
$lang->group->allCheck = 'All';
$lang->group->noGroup = 'No group';
$lang->group->repeat = "『%s』『%s』exists.Please adjust it and try again.";
global $config;
if($config->systemMode == 'new') $lang->group->noneProject = 'No Project';
+1
View File
@@ -46,6 +46,7 @@ $lang->group->group = 'Group';
$lang->group->more = 'More';
$lang->group->allCheck = 'All';
$lang->group->noGroup = 'No group';
$lang->group->repeat = "『%s』『%s』exists.Please adjust it and try again.";
global $config;
if($config->systemMode == 'new') $lang->group->noneProject = 'No Project';
+1
View File
@@ -46,6 +46,7 @@ $lang->group->group = 'Group';
$lang->group->more = 'More';
$lang->group->allCheck = 'All';
$lang->group->noGroup = 'Aucun groupe';
$lang->group->repeat = "『%s』『%s』exists.Please adjust it and try again.";
global $config;
if($config->systemMode == 'new') $lang->group->noneProject = 'No Project';
+2
View File
@@ -767,6 +767,7 @@ $lang->resource->execution->storyEstimate = 'storyEstimate';
$lang->resource->execution->storyView = 'storyView';
if($config->systemMode == 'new') $lang->resource->execution->executionkanban = 'kanbanAction';
$lang->resource->execution->kanban = 'RDKanban';
$lang->resource->execution->setKanban = 'setKanban';
//if($config->systemMode == 'classic') $lang->resource->project->list = 'list';
//$lang->execution->methodOrder[0] = 'index';
@@ -825,6 +826,7 @@ $lang->execution->methodOrder[255] = 'unbindWhitelist';
$lang->execution->methodOrder[260] = 'storyEstimate';
$lang->execution->methodOrder[265] = 'executionkanban';
$lang->execution->methodOrder[270] = 'kanban';
$lang->execution->methodOrder[275] = 'setKanban';
/* Task. */
$lang->resource->task = new stdclass();
+1
View File
@@ -46,6 +46,7 @@ $lang->group->group = '分组';
$lang->group->more = '更多';
$lang->group->allCheck = '全部';
$lang->group->noGroup = '暂时没有分组。';
$lang->group->repeat = "『%s』已经有『%s』这条记录了,请调整后再试。";
global $config;
if($config->systemMode == 'new') $lang->group->noneProject = '暂时没有项目';
+8 -5
View File
@@ -27,7 +27,8 @@ class groupModel extends model
unset($group->limited);
$group->role = 'limited';
}
$this->dao->insert(TABLE_GROUP)->data($group)->batchCheck($this->config->group->create->requiredFields, 'notempty')->exec();
$this->lang->error->unique = $this->lang->group->repeat;
$this->dao->insert(TABLE_GROUP)->data($group)->batchCheck($this->config->group->create->requiredFields, 'notempty')->check('name', 'unique')->exec();
return $this->dao->lastInsertId();
}
@@ -41,7 +42,8 @@ class groupModel extends model
public function update($groupID)
{
$group = fixer::input('post')->get();
return $this->dao->update(TABLE_GROUP)->data($group)->batchCheck($this->config->group->edit->requiredFields, 'notempty')->where('id')->eq($groupID)->exec();
$this->lang->error->unique = $this->lang->group->repeat;
return $this->dao->update(TABLE_GROUP)->data($group)->batchCheck($this->config->group->edit->requiredFields, 'notempty')->check('name', 'unique', "id != {$groupID}")->where('id')->eq($groupID)->exec();
}
/**
@@ -54,6 +56,7 @@ class groupModel extends model
public function copy($groupID)
{
$group = fixer::input('post')->remove('options')->get();
$this->lang->error->unique = $this->lang->group->repeat;
$this->dao->insert(TABLE_GROUP)->data($group)->check('name', 'unique')->check('name', 'notempty')->exec();
if($this->post->options == false) return;
if(!dao::isError())
@@ -315,9 +318,9 @@ class groupModel extends model
/**
* Get admins by object id list.
*
* @param int $idList
* @param string $field
*
* @param int $idList
* @param string $field
* @access public
* @return void
*/
+1 -1
View File
@@ -17,7 +17,7 @@
</div>
</div>
<div id='mainContent' class='main-content'>
<form class="load-indicator main-form form-ajax" id="managePrivForm" method="post" target='hiddenwin'>
<form class="load-indicator main-form form-ajax" id="managePrivForm" method="post">
<table class='table table-hover table-striped table-bordered'>
<thead>
<tr class='text-center'>
+2
View File
@@ -120,3 +120,5 @@ body.menu-hide {padding-left: 0;}
{
#upgradeContent{width: 85%;}
}
#searchbox .dropdown-menu > li.search-type-all{max-width: 250px}
#searchbox .dropdown-menu > li.search-type-all a{width: 100%; overflow: hidden; text-overflow: ellipsis;}
+8 -5
View File
@@ -187,7 +187,7 @@
* @param {string} [appCode] The code of target app to open
* @return {void}
*/
function openTab(url, appCode)
function openTab(url, appCode, forceReload)
{
/* Check params */
if(!appCode)
@@ -264,7 +264,9 @@
}
/* Show page app and update iframe source */
if (url)
var iframe = app.$iframe[0];
var isSameUrl = iframe && url && iframe.contentWindow.location.href.endsWith(url);
if (url && (!isSameUrl || forceReload !== false))
{
app.$app.toggleClass('open-from-hidden', app.$app.is(':hidden'))
reloadApp(appCode, url, true);
@@ -441,7 +443,8 @@
if(url === true) url = app.url;
else if($.tabSession) url = $.tabSession.convertUrlWithTid(url);
var iframe = app.$iframe[0];
var iframe = app.$iframe[0];
var isSameUrl = iframe && url && iframe.contentWindow.location.href.endsWith(url);
/* Add hook to page before reload it */
if (iframe && iframe.contentWindow.beforeAppReload)
@@ -451,7 +454,7 @@
try
{
if(url) iframe.contentWindow.location.assign(url);
if(url && !isSameUrl) iframe.contentWindow.location.assign(url);
else iframe.contentWindow.location.reload(true);
}
catch(_)
@@ -462,7 +465,7 @@
if(!notTriggerEvent) app.$app.trigger('reloadapp', app);
if(url) $(iframe.contentWindow.document.body).hide(); // Code for task #59703.
app.$app.addClass('loading');
if(!isSameUrl) app.$app.addClass('loading');
if(app._loadTimer) clearTimeout(app._loadTimer);
app._loadTimer = setTimeout(function()
{
+17 -17
View File
@@ -139,16 +139,16 @@ class job extends control
/**
* Edit a job.
*
* @param int $id
* @param int $jobID
* @access public
* @return void
*/
public function edit($id)
public function edit($jobID)
{
$job = $this->job->getByID($id);
$job = $this->job->getByID($jobID);
if($_POST)
{
$this->job->update($id);
$this->job->update($jobID);
if(dao::isError())
{
$errors = dao::getError();
@@ -174,7 +174,7 @@ class job extends control
return $this->send(array('result' => 'fail', 'message' => $errors));
}
$this->loadModel('action')->create('job', $id, 'edited');
$this->loadModel('action')->create('job', $jobID, 'edited');
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('browse', "repoID={$job->repo}")));
}
@@ -190,7 +190,7 @@ class job extends control
foreach($repoList as $repo)
{
if(empty($repo->synced)) continue;
$repoPairs[$repo->id] = $repo->name;
$repoPairs[$repo->id] = "[{$repo->SCM}] {$repo->name}";
$repoTypes[$repo->id] = $repo->SCM;
if(strtolower($repo->SCM) == 'gitlab') $gitlabRepos[$repo->id] = $repo->name;
}
@@ -221,15 +221,15 @@ class job extends control
/**
* Delete a job.
*
* @param int $id
* @param int $jobID
* @access public
* @return void
*/
public function delete($id, $confirm = 'no')
public function delete($jobID, $confirm = 'no')
{
if($confirm != 'yes') return print(js::confirm($this->lang->job->confirmDelete, inlink('delete', "jobID=$id&confirm=yes")));
if($confirm != 'yes') return print(js::confirm($this->lang->job->confirmDelete, inlink('delete', "jobID=$jobID&confirm=yes")));
$this->job->delete(TABLE_JOB, $id);
$this->job->delete(TABLE_JOB, $jobID);
echo js::reload('parent');
}
@@ -317,27 +317,27 @@ class job extends control
/**
* Exec a job.
*
* @param int $id
* @param int $jobID
* @param string $showForm
* @access public
* @return void
*/
public function exec($id)
public function exec($jobID)
{
$job = $this->job->getByID($id);
$job = $this->job->getByID($jobID);
if(strtolower($job->engine) == 'gitlab')
{
if(!isset($job->reference) or !$job->reference)
{
return $this->send(array('result' => 'fail', 'message' => $this->lang->job->setReferenceTips, 'locate' => inlink('edit', "id=$id")));
return $this->send(array('result' => 'fail', 'message' => $this->lang->job->setReferenceTips, 'locate' => inlink('edit', "id=$jobID")));
}
}
$compile = $this->job->exec($id);
$compile = $this->job->exec($jobID);
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
$this->app->loadLang('compile');
$this->loadModel('action')->create('job', $id, 'executed');
$this->loadModel('action')->create('job', $jobID, 'executed');
return $this->send(array('result' => 'success', 'message' => sprintf($this->lang->job->sendExec, zget($this->lang->compile->statusList, $compile->status))));
}
@@ -409,7 +409,7 @@ class job extends control
}
else
{
$repoPairs[$repo->id] = $repo->name;
$repoPairs[$repo->id] = "[{$repo->SCM}] {$repo->name}";
}
}
echo html::select('repo', $repoPairs, '', "class='form-control chosen'");
+3 -3
View File
@@ -46,7 +46,7 @@ class jobModel extends model
*/
public function getList($repoID = 0, $orderBy = 'id_desc', $pager = null, $engine = '', $pipeline = '')
{
return $this->dao->select('t1.*, t2.name as repoName, t3.name as jenkinsName')->from(TABLE_JOB)->alias('t1')
return $this->dao->select('t1.*, DATE_FORMAT(t1.lastExec, "%m-%d %H:%i") AS lastExec, t2.name as repoName, t3.name as jenkinsName')->from(TABLE_JOB)->alias('t1')
->leftJoin(TABLE_REPO)->alias('t2')->on('t1.repo=t2.id')
->leftJoin(TABLE_PIPELINE)->alias('t3')->on('t1.server=t3.id')
->where('t1.deleted')->eq('0')
@@ -182,7 +182,7 @@ class jobModel extends model
$repo = $this->loadModel('repo')->getRepoByID($job->repo);
$project = zget($repo, 'project');
$job->server = (int)zget($repo, 'gitlab', 0);
$job->server = (int)zget($repo, 'serviceHost', 0);
$job->pipeline = json_encode(array('project' => $project, 'reference' => $this->post->reference));
}
@@ -300,7 +300,7 @@ class jobModel extends model
$project = zget($repo, 'project');
$job->repo = $job->gitlabRepo;
$job->server = (int)zget($repo, 'gitlab', 0);
$job->server = (int)zget($repo, 'serviceHost', 0);
$job->pipeline = json_encode(array('project' => $project, 'reference' => $this->post->reference));
}
+2 -2
View File
@@ -45,7 +45,7 @@
<th class='text-left'><?php echo $lang->job->triggerType;?></th>
<th class='c-status text-center'><?php common::printOrderLink('lastStatus', $orderBy, $vars, $lang->job->lastStatus);?></th>
<th class='c-exec'><?php common::printOrderLink('lastExec', $orderBy, $vars, $lang->job->lastExec);?></th>
<th class='c-actions-4'><?php echo $lang->actions;?></th>
<th class='c-actions-4 text-center'><?php echo $lang->actions;?></th>
</tr>
</thead>
<tbody>
@@ -72,7 +72,7 @@
<td><?php if($job->lastStatus) echo $job->lastExec;?></td>
<td class='c-actions text-center'>
<?php
common::printIcon('compile', 'browse', "jobID=$id", '', 'list', 'history');
common::printIcon('compile', 'browse', "repoID={$job->repo}&jobID=$id", '', 'list', 'history');
common::printIcon('job', 'edit', "jobID=$id", '', 'list', 'edit');
common::printIcon('job', 'exec', "jobID=$id", '', 'list', 'play');
if(common::hasPriv('job', 'delete')) echo html::a($this->createLink('job', 'delete', "jobID=$id"), '<i class="icon-trash"></i>', 'hiddenwin', "title='{$lang->job->delete}' class='btn'");
+1 -1
View File
@@ -41,7 +41,7 @@
</tr>
<tr class='commonRepo'>
<th><?php echo $lang->job->repo; ?></th>
<td><?php echo html::select('repo', $repoPairs, $job->repo, "class='form-control'"); ?></td>
<td><?php echo html::select('repo', $repoPairs, $job->repo, "class='form-control chosen'"); ?></td>
</tr>
<tr class='gitlabRepo hide'>
<th><?php echo $lang->job->repo; ?></th>
+1 -1
View File
@@ -1512,7 +1512,7 @@ class kanban extends control
$this->loadModel($objectType)->delete(constant($table), $objectID);
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
$kanbanID = $regionID ? $this->kanban->getKanbanIDByregion($regionID) : $this->session->execution;
$kanbanID = $regionID ? $this->kanban->getKanbanIDByRegion($regionID) : $this->session->execution;
$browseType = $this->config->vision == 'lite' ? 'task' : $this->session->execLaneType;
$groupBy = $this->session->execGroupBy ? $this->session->execGroupBy : 'default';
$kanbanGroup = $this->kanban->getRDKanban($kanbanID, $browseType, 'id_desc', 0, $groupBy);
+2 -2
View File
@@ -346,8 +346,8 @@ $lang->kanbanlane->modeList['independent'] = 'Independent Kanban column';
$lang->kanbanlane->heightTypeList['auto'] = "Adaptive <span class='tip'>(Adaptive to card height and lane name height)</span>";
$lang->kanbanlane->heightTypeList['custom'] = "Custom <span class='tip'>(Customize lane height based on number of cards)</span>";
$lang->kanbancolumn->fluidBoardList['0'] = 'Fixed';
$lang->kanbancolumn->fluidBoardList['1'] = 'Auto Width';
$lang->kanbancolumn->fluidBoardList['0'] = "Fixed<span class='tip'>(Keep all columns the same width)</span>";
$lang->kanbancolumn->fluidBoardList['1'] = "Auto Width<span class='tip'>(Adapts to lane width)</span>";
$lang->kanbanlane->error = new stdclass();
$lang->kanbanlane->error->mustBeInt = 'No. of cards must be a positive integer from 3 to 32767.';
+2 -2
View File
@@ -346,8 +346,8 @@ $lang->kanbanlane->modeList['independent'] = 'Independent Kanban column';
$lang->kanbanlane->heightTypeList['auto'] = "Adaptive <span class='tip'>(Adaptive to card height and lane name height)</span>";
$lang->kanbanlane->heightTypeList['custom'] = "Custom <span class='tip'>(Customize lane height based on number of cards)</span>";
$lang->kanbancolumn->fluidBoardList['0'] = 'Fixed';
$lang->kanbancolumn->fluidBoardList['1'] = 'Auto Width';
$lang->kanbancolumn->fluidBoardList['0'] = "Fixed<span class='tip'>(Keep all columns the same width)</span>";
$lang->kanbancolumn->fluidBoardList['1'] = "Auto Width<span class='tip'>(Adapts to lane width)</span>";
$lang->kanbanlane->error = new stdclass();
$lang->kanbanlane->error->mustBeInt = 'No. of cards must be a positive integer from 3 to 32767.';

Some files were not shown because too many files have changed in this diff Show More