Merge branch 'zentaopms_9.8' of github.com:easysoft/zentaopms into zentaopms_9.8
This commit is contained in:
@@ -1,3 +1,98 @@
|
||||
2018-03-21 9.8.2.stable
|
||||
完成的需求
|
||||
2853 计划日期待定是开始日期和结束日期都是待定
|
||||
2852 指派给我的区块中待办直接弹窗即可
|
||||
2850 调整导出数据页面的样式
|
||||
2849 消息发送设置页面样式调整
|
||||
2848 发布列表页面的版本链接不应该新开窗口
|
||||
2847 搜索表单字段检索下拉的菜单没有必要这么长
|
||||
2846 修改日志里面去掉版本之前的v
|
||||
2845 调整待办批量添加页面的样式
|
||||
2844 计划列表页面将任务,bug,工时字段放在结束日期字段后面
|
||||
2836 产品批量编辑增加产品线字段
|
||||
2831 禅道国际版不需要单独列gmail发信功能
|
||||
|
||||
修复的Bug
|
||||
1460 父子任务中,有子任务删除,剩余未删除子任务全部完成关闭后,不会更新父任务状态
|
||||
1459 搜索条件保存多菜单栏后,搜索条件不生效
|
||||
1458 企业版-运维-翻译
|
||||
1457 测试-测试单,可以对运维项目提测,但运维项目没有版本
|
||||
1456 用例库导入的模版文件格式不对
|
||||
1455 组织-动态 搜索下拉列表数据重复
|
||||
1454 产品描述中的图片再编辑产品后无法显示
|
||||
1453 需求列表,统计数量异常
|
||||
1452 项目-任务-导出问题。
|
||||
1451 控制面板 修改密码 翻译累赘 需要简化
|
||||
1448 个人档案中,对email地址未做格式验证
|
||||
1447 国际版中,我的地盘存在一个汉字
|
||||
1446 任务日志页面的ID有重复
|
||||
1445 文档编辑器选择编号格式无法正常显示
|
||||
1444 用户表真实姓名字段的长度需要加长
|
||||
1442 子任务取消,父任务无法点击完成。
|
||||
1441 项目关联需求(该需求关联产品,项目关联产品),看不到部分需求。
|
||||
1439 钉钉集成确认、解决bug,指派后消息中没有@显示
|
||||
1438 csv导入用例提示的行数错误
|
||||
1437 用例搜索结果的值选项中有“忽略”
|
||||
1436 文档库的统计数字和列出的数字不一致
|
||||
1435 添加用户时,用户名不符合规范提示信息不清楚
|
||||
1434 云禅道我的地盘指派给我的区块不显示内容,但可以点击
|
||||
1433 点击创建子任务按钮,弹出窗口容易和批量创建任务混淆,建议区分。
|
||||
1432 项目概况,编辑,产品名称展示优化。
|
||||
1431 后台自定义内容丢失
|
||||
1430 9.8.1批量创建需求,功能异常。
|
||||
1428 批量创建需求问题。
|
||||
1427 待办点击待办名称-删除按钮删除,弹出页面显示异常
|
||||
1426 项目-任务,多人任务,团队成员上限。新建与编辑不一致。
|
||||
1425 确认一下组织-用户中查看指派给他的任务和我的地盘中的查询规则是否一致
|
||||
1424 项目任务,完成,默认指派人应该是任务的创建者。
|
||||
1423 项目-测试单中提交测试,测试报告名称编号会显示所有项目版本
|
||||
1422 产品线删除后,所有页面产品所属产品线显示产品线编号
|
||||
1421 测试bug,保存搜索条件功能,异常。
|
||||
1420 指派人员开始任务,剩余工时填写0,完成任务时,完成者会显示创建人
|
||||
1419 IE11浏览器,点击需求的任务数,不弹窗(部分)。
|
||||
1418 通过解决bug选择解决版本,对版本提测生成测试单,不显示相关bug
|
||||
1417 关联需求显示的需求列表优先级没有按照后台自定义设置内容显示
|
||||
1416 父任务关闭后,子任务会同步关闭,但是子任务指派人不会指派给closed
|
||||
1415 延期的子任务,不会在项目-任务-已延期列表中显示
|
||||
1414 测试管理工具用例导出功能异常
|
||||
1413 钉钉集成创建任务消息中没有@显示
|
||||
1412 自定义bug优先级,存在问题。
|
||||
1411 用例库导入用例模块如果层级比较多无法展示
|
||||
1410 如果产品比较多查询性能问题需要排查一下
|
||||
1409 Bug添加搜索菜单,无法正常搜索。
|
||||
1408 测试-测试单查看概况没有显示版本的下载地址
|
||||
1407 任务列表选中统计的工时会把父子任务的工时重复统计
|
||||
1406 ie下日历无法正常点击选择日期
|
||||
1405 首页、任务列表、燃尽图、项目概况的剩余工时计算规则不一致
|
||||
1404 创建项目页面关联计划会显示过期的计划
|
||||
1403 项目按照计划关联需求会把没有关联的计划也列出来
|
||||
1401 后台-自定义-用户-职位,键值大于10个字符,可以正常保存,编辑用户选择职位时会提示字符数限制
|
||||
1400 子任务完成后,不会指派回任务创建者
|
||||
1399 测试报告参与人默认会显示已经移除关联的用例执行人
|
||||
1398 创建测试单可以不选择 版本直接提交
|
||||
1396 项目-测试单下,没有测试单时,会有一条测试报告,内容为空
|
||||
1395 Bug激活,提示问题(解决日期、关闭日期)
|
||||
1394 模块层数比较多显示不全
|
||||
1393 用例删除后,用例覆盖率统计时还是会统计这条用例
|
||||
1392 项目关联需求页面所属产品显示有问题
|
||||
1391 备注重复提交没有做内容验证
|
||||
1390 用例导出后,步骤、预期,会多出一行空行。专业版excel导出有同样问题
|
||||
1389 搜索保存菜单记录的有问题
|
||||
1387 后台-自定义-需求-评审流程,设置强制评审人员,保存不上
|
||||
1380 超级model调用如果某个参数的值中有 英文逗号只能传输第一个逗号之前的数据
|
||||
1379 任务列表,任务条数大于每页显示条数时,新建子任务会显示在最后一页
|
||||
1376 测试用例导入csv文件,预期和步骤包含符号时,需要加句号导入才能显示
|
||||
1372 统计报表统计和自定义内容不统一
|
||||
1370 后台自定义中的键值没有做检查
|
||||
1368 任务选择模块后,添加子任务保存后,停留在批量添加页面
|
||||
1363 后台自定义日期必填项无效
|
||||
1359 看板,未开始的任务,不能拖拽到进行中。
|
||||
1357 Bug列表,自定义列,勾选全局,点击保存;不生效。
|
||||
1346 用例执行的实际情况输入框,一旦输入内容就会显示滚动条会挡住输入的内容
|
||||
1339 父任务标题过长时,标题后面的折叠标签不显示
|
||||
1333 项目关闭后,状态为已完成,并且数据库中相关字段未更新
|
||||
1008 我的地盘首页的待办点击后跳转到组织-用户-待办页面
|
||||
|
||||
2018-01-17 9.8.stable
|
||||
完成的需求
|
||||
683 todo增加转需求,bug或者任务的功能
|
||||
|
||||
@@ -165,7 +165,7 @@ js::set('confirmDeleteTemplate', $lang->bug->confirmDeleteTemplate);
|
||||
$hasCustomSeverity = false;
|
||||
foreach($lang->bug->severityList as $severityKey => $severityValue)
|
||||
{
|
||||
if(!empty($severityKey) and ($severityKey != $severityValue or strlen($severityKey) != strlen($severityValue)))
|
||||
if(!empty($severityKey) and (string)$severityKey != (string)$severityValue)
|
||||
{
|
||||
$hasCustomSeverity = true;
|
||||
break;
|
||||
@@ -190,7 +190,7 @@ js::set('confirmDeleteTemplate', $lang->bug->confirmDeleteTemplate);
|
||||
$hasCustomPri = false;
|
||||
foreach($lang->bug->priList as $priKey => $priValue)
|
||||
{
|
||||
if(!empty($priKey) and ($priKey != $priValue or strlen($priKey) != strlen($priValue)))
|
||||
if(!empty($priKey) and (string)$priKey != (string)$priValue)
|
||||
{
|
||||
$hasCustomPri = true;
|
||||
break;
|
||||
|
||||
@@ -35,16 +35,8 @@ function computeEndDate(delta)
|
||||
currentBeginDate = beginDate.toString('yyyy-MM-dd');
|
||||
endDate = beginDate.addDays(delta - 1).toString('yyyy-MM-dd');
|
||||
|
||||
if(delta == 9999)
|
||||
{
|
||||
$('#begin').attr("disabled", "disabled");
|
||||
$('#end').val('').attr("disabled", "disabled");
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#begin').val(currentBeginDate).removeAttr('disabled')
|
||||
$('#end').val(endDate).removeAttr('disabled');
|
||||
}
|
||||
$('#begin').val(currentBeginDate);
|
||||
$('#end').val(endDate);
|
||||
}
|
||||
|
||||
$('#begin').on('change', function()
|
||||
@@ -57,3 +49,17 @@ $('#end').on('change', function()
|
||||
{
|
||||
$("input:radio[name='delta']").attr("checked", false);
|
||||
});
|
||||
|
||||
$('#future').on('change', function()
|
||||
{
|
||||
if($(this).prop('checked'))
|
||||
{
|
||||
$('#begin').val('').attr('disabled', 'disabled');
|
||||
$('#end').val('').parents('tr').hide();
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#begin').removeAttr('disabled');
|
||||
$('#end').val('').parents('tr').show();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -23,33 +23,34 @@ function convertStringToDate(dateString)
|
||||
function computeEndDate(delta)
|
||||
{
|
||||
beginDate = $('#begin').val();
|
||||
delta = parseInt(delta);
|
||||
if(!beginDate) return;
|
||||
|
||||
if(delta == 9999)
|
||||
delta = parseInt(delta);
|
||||
beginDate = convertStringToDate(beginDate);
|
||||
if((delta == 7 || delta == 14) && (beginDate.getDay() == 1))
|
||||
{
|
||||
$('#begin').attr("disabled", "disabled");
|
||||
$('#end').val('').attr("disabled","disabled");
|
||||
delta = (weekend == 2) ? (delta - 2) : (delta - 1);
|
||||
}
|
||||
|
||||
currentBeginDate = beginDate.toString('yyyy-MM-dd');
|
||||
endDate = beginDate.addDays(delta - 1).toString('yyyy-MM-dd');
|
||||
|
||||
$('#begin').val(currentBeginDate);
|
||||
$('#end').val(endDate).datetimepicker('update');
|
||||
}
|
||||
|
||||
$('#future').on('change', function()
|
||||
{
|
||||
if($(this).prop('checked'))
|
||||
{
|
||||
$('#begin').val('').attr('disabled', 'disabled');
|
||||
$('#end').val('').parents('tr').hide();
|
||||
}
|
||||
else
|
||||
{
|
||||
if(beginDate)
|
||||
{
|
||||
beginDate = convertStringToDate(beginDate);
|
||||
if((delta == 7 || delta == 14) && (beginDate.getDay() == 1))
|
||||
{
|
||||
delta = (weekend == 2) ? (delta - 2) : (delta - 1);
|
||||
}
|
||||
|
||||
currentBeginDate = beginDate.toString('yyyy-MM-dd');
|
||||
endDate = beginDate.addDays(delta - 1).toString('yyyy-MM-dd');
|
||||
}
|
||||
else
|
||||
{
|
||||
currentBeginDate = '';
|
||||
endDate = '';
|
||||
}
|
||||
|
||||
$('#begin').val(currentBeginDate).removeAttr('disabled')
|
||||
$('#end').val(endDate).removeAttr('disabled').datetimepicker('update');
|
||||
$('#begin').removeAttr('disabled');
|
||||
$('#end').val('').parents('tr').show();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$('#future').change();
|
||||
|
||||
@@ -52,14 +52,13 @@ $lang->productplan->bugs = 'Bug数';
|
||||
$lang->productplan->hour = '工时';
|
||||
$lang->productplan->project = $lang->projectCommon;
|
||||
|
||||
$lang->productplan->endList[7] = '一星期';
|
||||
$lang->productplan->endList[14] = '两星期';
|
||||
$lang->productplan->endList[31] = '一个月';
|
||||
$lang->productplan->endList[62] = '两个月';
|
||||
$lang->productplan->endList[93] = '三个月';
|
||||
$lang->productplan->endList[186] = '半年';
|
||||
$lang->productplan->endList[365] = '一年';
|
||||
$lang->productplan->endList[9999] = '待定';
|
||||
$lang->productplan->endList[7] = '一星期';
|
||||
$lang->productplan->endList[14] = '两星期';
|
||||
$lang->productplan->endList[31] = '一个月';
|
||||
$lang->productplan->endList[62] = '两个月';
|
||||
$lang->productplan->endList[93] = '三个月';
|
||||
$lang->productplan->endList[186] = '半年';
|
||||
$lang->productplan->endList[365] = '一年';
|
||||
|
||||
$lang->productplan->errorNoTitle = 'ID %s 标题不能为空';
|
||||
$lang->productplan->errorNoBegin = 'ID %s 开始时间不能为空';
|
||||
|
||||
@@ -117,16 +117,18 @@ class productplanModel extends model
|
||||
->where('product')->in($product)
|
||||
->andWhere('deleted')->eq(0)
|
||||
->beginIF($branch)->andWhere("branch")->in("0,$branch")->fi()
|
||||
->beginIF($expired == 'unexpired')->andWhere('end')->gt($date)->fi()
|
||||
->beginIF($expired == 'unexpired')->andWhere('end')->ge($date)->fi()
|
||||
->orderBy('begin desc')
|
||||
->fetchPairs();
|
||||
|
||||
if($expired == 'unexpired' and empty($plans))
|
||||
if($expired == 'unexpired')
|
||||
{
|
||||
$plans = $this->dao->select('id,CONCAT(title, " [", begin, " ~ ", end, "]") as title')->from(TABLE_PRODUCTPLAN)
|
||||
$plans += $this->dao->select('id,CONCAT(title, " [", begin, " ~ ", end, "]") as title')->from(TABLE_PRODUCTPLAN)
|
||||
->where('product')->in($product)
|
||||
->andWhere('deleted')->eq(0)
|
||||
->andWhere('end')->lt($date)
|
||||
->beginIF($branch)->andWhere("branch")->in("0,$branch")->fi()
|
||||
->beginIF($plans)->andWhere("id")->notIN(array_keys($plans))->fi()
|
||||
->orderBy('begin desc')
|
||||
->limit(5)
|
||||
->fetchPairs();
|
||||
@@ -159,16 +161,16 @@ class productplanModel extends model
|
||||
public function create()
|
||||
{
|
||||
$plan = fixer::input('post')->stripTags($this->config->productplan->editor->create['id'], $this->config->allowedTags)
|
||||
->setIF($this->post->delta == 9999 || empty($_POST['end']), 'end', '2030-01-01')
|
||||
->setIF($this->post->delta == 9999 || empty($_POST['begin']), 'begin', '2030-01-01')
|
||||
->remove('delta,uid')
|
||||
->setIF($this->post->future || empty($_POST['begin']), 'begin', '2030-01-01')
|
||||
->setIF($this->post->future || empty($_POST['end']), 'end', '2030-01-01')
|
||||
->remove('delta,uid,future')
|
||||
->get();
|
||||
$plan = $this->loadModel('file')->processImgURL($plan, $this->config->productplan->editor->create['id'], $this->post->uid);
|
||||
$this->dao->insert(TABLE_PRODUCTPLAN)
|
||||
->data($plan)
|
||||
->autoCheck()
|
||||
->batchCheck($this->config->productplan->create->requiredFields, 'notempty')
|
||||
->checkIF($this->post->delta != 9999 && !empty($_POST['begin']) && !empty($_POST['end']), 'end', 'gt', $plan->begin)
|
||||
->checkIF(!$this->post->future && !empty($_POST['begin']) && !empty($_POST['end']), 'end', 'gt', $plan->begin)
|
||||
->exec();
|
||||
if(!dao::isError())
|
||||
{
|
||||
@@ -190,9 +192,9 @@ class productplanModel extends model
|
||||
{
|
||||
$oldPlan = $this->dao->findByID((int)$planID)->from(TABLE_PRODUCTPLAN)->fetch();
|
||||
$plan = fixer::input('post')->stripTags($this->config->productplan->editor->edit['id'], $this->config->allowedTags)
|
||||
->setIF($this->post->delta == 9999 || $this->post->end == '', 'end', '2030-01-01')
|
||||
->setIF($this->post->delta == 9999 || empty($_POST['begin']), 'begin', '2030-01-01')
|
||||
->remove('delta,uid')
|
||||
->setIF($this->post->future || empty($_POST['begin']), 'begin', '2030-01-01')
|
||||
->setIF($this->post->future || empty($_POST['end']), 'end', '2030-01-01')
|
||||
->remove('delta,uid,future')
|
||||
->get();
|
||||
|
||||
$plan = $this->loadModel('file')->processImgURL($plan, $this->config->productplan->editor->edit['id'], $this->post->uid);
|
||||
@@ -200,7 +202,7 @@ class productplanModel extends model
|
||||
->data($plan)
|
||||
->autoCheck()
|
||||
->batchCheck($this->config->productplan->edit->requiredFields, 'notempty')
|
||||
->checkIF($this->post->delta != 9999 && !empty($_POST['begin']) && !empty($_POST['end']), 'end', 'gt', $plan->begin)
|
||||
->checkIF(!$this->post->future && !empty($_POST['begin']) && !empty($_POST['end']), 'end', 'gt', $plan->begin)
|
||||
->where('id')->eq((int)$planID)
|
||||
->exec();
|
||||
if(!dao::isError())
|
||||
|
||||
@@ -43,7 +43,16 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->productplan->begin;?></th>
|
||||
<td><?php echo html::input('begin', formatTime($begin), "class='form-control form-date'");?></td>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php echo html::input('begin', formatTime($begin), "class='form-control form-date'");?>
|
||||
<span class='input-group-addon'>
|
||||
<label class='checkbox-inline'>
|
||||
<input type='checkbox' id='future' name='future' value='1'> <?php echo $lang->productplan->future;?>
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->productplan->end;?></th>
|
||||
|
||||
@@ -41,7 +41,17 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->productplan->begin;?></th>
|
||||
<td><?php echo html::input('begin', $plan->begin != '2030-01-01' ? formatTime($plan->begin) : '', "class='form-control form-date'");?></td>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php echo html::input('begin', $plan->begin != '2030-01-01' ? formatTime($plan->begin) : '', "class='form-control form-date'");?>
|
||||
<?php $checked = $plan->begin == '2030-01-01' || $plan->end == '2030-01-01' ? "checked='checked'" : '';?>
|
||||
<span class='input-group-addon'>
|
||||
<label class='checkbox-inline'>
|
||||
<input type='checkbox' id='future' name='future' value='1' <?php echo $checked;?>> <?php echo $lang->productplan->future;?>
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->productplan->end;?></th>
|
||||
|
||||
@@ -20,7 +20,9 @@
|
||||
<span class='prefix'><?php echo html::icon($lang->icons['plan']);?> <strong><?php echo $plan->id;?></strong></span>
|
||||
<strong><?php echo $plan->title;?></strong>
|
||||
<?php if($product->type !== 'normal') echo "<span title='{$lang->product->branchName[$product->type]}' class='label label-branch label-badge'>" . $branches[$branch] . '</span>';?>
|
||||
<span class='label label-info label-badge'><?php echo $plan->begin . '~' . $plan->end;?></span>
|
||||
<span class='label label-info label-badge'>
|
||||
<?php echo ($plan->begin == '2030-01-01' || $plan->end == '2030-01-01') ? $lang->productplan->future : $plan->begin . '~' . $plan->end;?>
|
||||
</span>
|
||||
<?php if($plan->deleted):?>
|
||||
<span class='label label-danger'><?php echo $lang->plan->deleted;?></span>
|
||||
<?php endif; ?>
|
||||
@@ -403,7 +405,7 @@
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th><?php echo $lang->productplan->begin;?></th>
|
||||
<td><?php echo $plan->begin;?></td>
|
||||
<td><?php echo $plan->begin == '2030-01-01' ? $lang->productplan->future : $plan->begin;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->productplan->end;?></th>
|
||||
|
||||
@@ -1081,6 +1081,7 @@ class projectModel extends model
|
||||
$productType = $product->type;
|
||||
if($product->branch)
|
||||
{
|
||||
if(!isset($branchGroups[$product->id][$product->branch])) continue;
|
||||
$branchPairs[$product->branch] = (count($products) > 1 ? $product->name . '/' : '') . $branchGroups[$product->id][$product->branch];
|
||||
}
|
||||
else
|
||||
|
||||
@@ -44,7 +44,7 @@ include '../../common/view/chosen.html.php';
|
||||
#searchlite {line-height: 127px}
|
||||
#searchform.showmore #searchmore, #searchform #searchlite {display: none;}
|
||||
#searchform.showmore #searchlite, #searchform #searchmore {display: inline-block;}
|
||||
#searchform .chosen-container[id^="field"] .chosen-drop{min-width: 120px;}
|
||||
#searchform .chosen-container[id^="field"] .chosen-drop{min-width: 140px;}
|
||||
#searchform [id^="valueBox"] .chosen-container .chosen-single{max-width: 170px;}
|
||||
#searchform [id^="valueBox"] .chosen-container .chosen-drop{min-width: 400px;}
|
||||
#searchform .chosen-container .chosen-drop ul.chosen-results li{white-space:normal}
|
||||
|
||||
@@ -1615,8 +1615,8 @@ class storyModel extends model
|
||||
->where($sql)
|
||||
->beginIF($productID != 'all' and $productID != '')->andWhere('t1.`product`')->eq((int)$productID)->fi()
|
||||
->andWhere('deleted')->eq(0)
|
||||
->orderBy($orderBy, 't1.id')
|
||||
->page($pager)
|
||||
->orderBy($orderBy)
|
||||
->page($pager, 't1.id')
|
||||
->fetchAll('id');
|
||||
|
||||
if(!$tmpStories) return array();
|
||||
@@ -1962,7 +1962,7 @@ class storyModel extends model
|
||||
{
|
||||
if($type == 'short')
|
||||
{
|
||||
$property = '[p' . $story->pri . ', ' . $story->estimate . 'h]';
|
||||
$property = '[p' . (!empty($this->lang->story->priList[$story->pri]) ? $this->lang->story->priList[$story->pri] : 0) . ', ' . $story->estimate . 'h]';
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
$hasCustomPri = false;
|
||||
foreach($lang->story->priList as $priKey => $priValue)
|
||||
{
|
||||
if(!empty($priKey) and ($priKey != $priValue or strlen($priKey) != strlen($priValue)))
|
||||
if(!empty($priKey) and (string)$priKey != (string)$priValue)
|
||||
{
|
||||
$hasCustomPri = true;
|
||||
break;
|
||||
|
||||
@@ -14,4 +14,6 @@
|
||||
#taskPlanCol, #mailCol {width: 50%}
|
||||
#planAndMailCell.has-mail-col #taskPlanCol {padding-right: 5px;}
|
||||
#planAndMailCell.has-mail-col #taskPlanCol + #mailCol {padding-left: 5px;}
|
||||
.input-group-addon input[type='checkBox']{}
|
||||
.input-group-addon input[type='checkBox']{}
|
||||
|
||||
#modalTeam .modal-content{padding:8px 25px;}
|
||||
|
||||
@@ -3,3 +3,6 @@
|
||||
#finishedDate.form-control.form-date {width: 218px!important}
|
||||
#canceledDate.form-control.form-date {width: 218px!important}
|
||||
#closedDate.form-control.form-date {width: 218px!important}
|
||||
|
||||
#modalTeam .modal-content{padding:8px 25px;}
|
||||
#modalTeam .modal-content .table{border:none;}
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
<?php echo html::select('assignedTo[]', $members, $task->assignedTo, "class='form-control chosen'");?>
|
||||
<?php echo html::input('teamMember', '', "class='form-control team-group fix-border hidden' readonly='readonly'");?>
|
||||
<span class="input-group-addon team-group hidden" data-toggle='modalTeam'><?php echo $lang->task->team;?></span>
|
||||
<label class='input-group-addon affair'><input type='checkBox' name='multiple' id="multipleBox" value='1'/><?php echo $lang->task->multipleAB;?></label>
|
||||
<label class='input-group-addon affair'><input type='checkBox' name='multiple' id="multipleBox" value='1'/> <?php echo $lang->task->multipleAB;?></label>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
@@ -90,7 +90,7 @@
|
||||
$hasCustomPri = false;
|
||||
foreach($lang->task->priList as $priKey => $priValue)
|
||||
{
|
||||
if(!empty($priKey) and ($priKey != $priValue or strlen($priKey) != strlen($priValue)))
|
||||
if(!empty($priKey) and (string)$priKey != (string)$priValue)
|
||||
{
|
||||
$hasCustomPri = true;
|
||||
break;
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
$hasCustomPri = false;
|
||||
foreach($lang->testcase->priList as $priKey => $priValue)
|
||||
{
|
||||
if(!empty($priKey) and ($priKey != $priValue or strlen($priKey) != strlen($priValue)))
|
||||
if(!empty($priKey) and (string)$priKey != (string)$priValue)
|
||||
{
|
||||
$hasCustomPri = true;
|
||||
break;
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
$hasCustomPri = false;
|
||||
foreach($lang->testcase->priList as $priKey => $priValue)
|
||||
{
|
||||
if(!empty($priKey) and ($priKey != $priValue or strlen($priKey) != strlen($priValue)))
|
||||
if(!empty($priKey) and (string)$priKey != (string)$priValue)
|
||||
{
|
||||
$hasCustomPri = true;
|
||||
break;
|
||||
|
||||
@@ -16,3 +16,5 @@ $config->webhook->objectTypes['bug'] = array('opened', 'edited', 'commen
|
||||
$config->webhook->objectTypes['case'] = array('opened', 'edited', 'commented', 'reviewed', 'confirmed');
|
||||
$config->webhook->objectTypes['testtask'] = array('opened', 'edited', 'started', 'blocked', 'closed', 'activated');
|
||||
$config->webhook->objectTypes['todo'] = array('opened', 'edited');
|
||||
|
||||
$config->webhook->needAssignTypes = array('story', 'task', 'bug', 'todo');
|
||||
|
||||
@@ -227,13 +227,16 @@ class webhookModel extends model
|
||||
|
||||
$mobile = '';
|
||||
$email = '';
|
||||
foreach($users as $user)
|
||||
if(in_array($objectType, $this->config->webhook->needAssignTypes) && !empty($object->assignedTo))
|
||||
{
|
||||
if($user->account == $object->assignedTo)
|
||||
foreach($users as $user)
|
||||
{
|
||||
$mobile = $user->mobile;
|
||||
$email = $user->email;
|
||||
break;
|
||||
if($user->account == $object->assignedTo)
|
||||
{
|
||||
$mobile = $user->mobile;
|
||||
$email = $user->email;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
$action->text = $text;
|
||||
|
||||
Reference in New Issue
Block a user