Merge branch 'master' of https://gitlab.zcorp.cc/easycorp/zentaopms
This commit is contained in:
@@ -25,3 +25,6 @@ ALTER table `zt_reviewcl` ADD `type` varchar(255) NOT NULL DEFAULT '' AFTER `cat
|
||||
UPDATE `zt_reviewcl` SET `type` = 'waterfall' WHERE `type` = '';
|
||||
|
||||
UPDATE `zt_activity` SET `order` = `id` * 5 WHERE `order` = '0';
|
||||
|
||||
ALTER table `zt_cmcl` ADD `projectType` varchar(255) NOT NULL DEFAULT '' AFTER `type`;
|
||||
UPDATE `zt_cmcl` SET `projectType` = 'waterfall' WHERE `projectType` = '';
|
||||
|
||||
@@ -9780,6 +9780,7 @@ CREATE TABLE IF NOT EXISTS `zt_reviewlist` (
|
||||
CREATE TABLE IF NOT EXISTS `zt_cmcl` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`type` char(30) NOT NULL,
|
||||
`projectType` varchar(255) NOT NULL,
|
||||
`title` int(11) NOT NULL,
|
||||
`contents` text NOT NULL,
|
||||
`assignedTo` varchar(30) NOT NULL,
|
||||
|
||||
@@ -339,12 +339,12 @@ class helper extends baseHelper
|
||||
$dateInterval->hour = $interval->format('%H');
|
||||
$dateInterval->minute = $interval->format('%i');
|
||||
$dateInterval->secound = $interval->format('%s');
|
||||
$dateInterval->year = ltrim($dateInterval->year, '0');
|
||||
$dateInterval->month = ltrim($dateInterval->month, '0');
|
||||
$dateInterval->day = ltrim($dateInterval->day, '0');
|
||||
$dateInterval->hour = ltrim($dateInterval->hour, '0');
|
||||
$dateInterval->minute = ltrim($dateInterval->minute, '0');
|
||||
$dateInterval->secound = ltrim($dateInterval->secound, '0');
|
||||
$dateInterval->year = $dateInterval->year == '00' ? 0 : ltrim($dateInterval->year, '0');
|
||||
$dateInterval->month = $dateInterval->month == '00' ? 0 : ltrim($dateInterval->month, '0');
|
||||
$dateInterval->day = $dateInterval->day == '00' ? 0 : ltrim($dateInterval->day, '0');
|
||||
$dateInterval->hour = $dateInterval->hour == '00' ? 0 : ltrim($dateInterval->hour, '0');
|
||||
$dateInterval->minute = $dateInterval->minute == '00' ? 0 : ltrim($dateInterval->minute, '0');
|
||||
$dateInterval->secound = $dateInterval->secound == '00' ? 0 : ltrim($dateInterval->secound, '0');
|
||||
}
|
||||
return $dateInterval;
|
||||
}
|
||||
|
||||
@@ -1134,13 +1134,15 @@ class customModel extends model
|
||||
$disabledFeatures = $this->setting->getItem('owner=system&module=common§ion=&key=disabledFeatures');
|
||||
$disabledFeatures = $disabledFeatures . ',' . $closedFeatures;
|
||||
|
||||
$hasWaterfall = strpos(",{$disabledFeatures},", ',waterfall,') === false;
|
||||
$hasWaterfallPlus = strpos(",{$disabledFeatures},", ',waterfallplus,') === false;
|
||||
$hasScrumMeasrecord = strpos(",{$disabledFeatures},", ',scrumMeasrecord,') === false;
|
||||
$hasWaterfallMeasrecord = (strpos(",{$disabledFeatures},", ',waterfallMeasrecord,') === false and ($hasWaterfall or $hasWaterfallPlus));
|
||||
$hasWaterfall = strpos(",{$disabledFeatures},", ',waterfall,') === false;
|
||||
$hasWaterfallPlus = strpos(",{$disabledFeatures},", ',waterfallplus,') === false;
|
||||
$hasScrumMeasrecord = strpos(",{$disabledFeatures},", ',scrumMeasrecord,') === false;
|
||||
$hasAgilePlusMeasrecord = strpos(",{$disabledFeatures},", ',agileMeasrecord,') === false;
|
||||
$hasWaterfallMeasrecord = (strpos(",{$disabledFeatures},", ',waterfallMeasrecord,') === false and $hasWaterfall);
|
||||
$hasWaterfallPlusMeasrecord = (strpos(",{$disabledFeatures},", ',waterfallplusMeasrecord,') === false and $hasWaterfallPlus);
|
||||
|
||||
$cronStatus = 'normal';
|
||||
if(!$hasScrumMeasrecord and !$hasWaterfallMeasrecord) $cronStatus = 'stop';
|
||||
if(!$hasScrumMeasrecord and !$hasAgilePlusMeasrecord and !$hasWaterfallMeasrecord and $hasWaterfallPlusMeasrecord) $cronStatus = 'stop';
|
||||
|
||||
$this->loadModel('cron');
|
||||
$cron = $this->dao->select('id,status')->from(TABLE_CRON)->where('command')->like('%methodName=initCrontabQueue')->fetch();
|
||||
|
||||
@@ -2,3 +2,5 @@
|
||||
.c-team-name {width: 120px;}
|
||||
.c-project, .c-user, .c-code, .c-desc, .c-days {width: 150px;}
|
||||
.c-method {width: 45px;}
|
||||
.c-type > .icon-help {vertical-align: text-top;}
|
||||
.c-type > .popover .popover-content {font-weight: 400;}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
.c-user {width: 150px !important;}
|
||||
.c-date {width: 125px;}
|
||||
.c-method {width: 60px;}
|
||||
.c-type {width: 130px;}
|
||||
|
||||
@@ -39,3 +39,4 @@
|
||||
.productsBox .required + .text-danger.help-text {position: relative; left: 10px;}
|
||||
.productsBox > #productNameLabel {padding-top: 8px;}
|
||||
.productsBox div[id^='branch'].chosen-disabled {pointer-events: none;}
|
||||
.methodTip icon:before {margin-bottom: 5px;}
|
||||
|
||||
@@ -27,3 +27,8 @@ $('#executionForm').on('change input mousedown', '.has-error', function()
|
||||
$(this).parent().find('.text-danger').remove();
|
||||
$(this).removeClass('has-error');
|
||||
})
|
||||
|
||||
$(function()
|
||||
{
|
||||
$('[data-toggle="popover"]').popover();
|
||||
})
|
||||
|
||||
@@ -153,6 +153,8 @@ $(function()
|
||||
{
|
||||
$('.disabledBranch div[id^="branch"]').addClass('chosen-disabled');
|
||||
}
|
||||
|
||||
$('[data-toggle="popover"]').popover();
|
||||
});
|
||||
|
||||
function showLifeTimeTips()
|
||||
|
||||
@@ -112,6 +112,8 @@ $(function()
|
||||
{
|
||||
$('.disabledBranch div[id^="branch"]').addClass('chosen-disabled');
|
||||
}
|
||||
|
||||
$('[data-toggle="popover"]').popover();
|
||||
})
|
||||
var lastProjectID = $("#project").val();
|
||||
|
||||
|
||||
@@ -151,6 +151,8 @@ $lang->execution->left = 'Left';
|
||||
$lang->execution->copyTeamTip = "copy Project/project team members";
|
||||
$lang->execution->daysGreaterProject = 'Days cannot be greater than days of execution 『%s』';
|
||||
$lang->execution->errorHours = 'Hours/Day cannot be greater than『24』';
|
||||
$lang->execution->agileplusMethodTip = 'When creating executions in an Agile Plus project, both Iteration and Kanban management methods are supported.';
|
||||
$lang->execution->typeTip = "The sub-stages of other types can be created under the parent stage of the 'mix' type, while the type of other parent-child levels is consistent.";
|
||||
|
||||
$lang->execution->start = 'Start';
|
||||
$lang->execution->activate = 'Aktivieren';
|
||||
|
||||
@@ -151,6 +151,8 @@ $lang->execution->left = 'Left';
|
||||
$lang->execution->copyTeamTip = "copy Project/project team members";
|
||||
$lang->execution->daysGreaterProject = 'Days cannot be greater than days of execution 『%s』';
|
||||
$lang->execution->errorHours = 'Hours/Day cannot be greater than『24』';
|
||||
$lang->execution->agileplusMethodTip = 'When creating executions in an Agile Plus project, both Iteration and Kanban management methods are supported.';
|
||||
$lang->execution->typeTip = "The sub-stages of other types can be created under the parent stage of the 'mix' type, while the type of other parent-child levels is consistent.";
|
||||
|
||||
$lang->execution->start = 'Start';
|
||||
$lang->execution->activate = 'Activate';
|
||||
|
||||
@@ -151,6 +151,8 @@ $lang->execution->left = 'Left';
|
||||
$lang->execution->copyTeamTip = "copy Project/project team members";
|
||||
$lang->execution->daysGreaterProject = 'Days cannot be greater than days of execution 『%s』';
|
||||
$lang->execution->errorHours = 'Hours/Day cannot be greater than『24』';
|
||||
$lang->execution->agileplusMethodTip = 'When creating executions in an Agile Plus project, both Iteration and Kanban management methods are supported.';
|
||||
$lang->execution->typeTip = "The sub-stages of other types can be created under the parent stage of the 'mix' type, while the type of other parent-child levels is consistent.";
|
||||
|
||||
$lang->execution->start = 'Démarrer';
|
||||
$lang->execution->activate = 'Activer';
|
||||
|
||||
@@ -151,6 +151,8 @@ $lang->execution->left = '剩余';
|
||||
$lang->execution->copyTeamTip = "可以选择复制项目或{$lang->execution->common}团队的成员";
|
||||
$lang->execution->daysGreaterProject = '可用工日不能大于执行的可用工日『%s』';
|
||||
$lang->execution->errorHours = '可用工时/天不能大于『24』';
|
||||
$lang->execution->agileplusMethodTip = '融合敏捷项目创建执行时,支持迭代和看板两种管理方法。';
|
||||
$lang->execution->typeTip = '“综合”类型的父阶段可以创建其它类型的子级,其它父子层级的类型均一致。';
|
||||
|
||||
$lang->execution->start = "开始";
|
||||
$lang->execution->activate = "激活";
|
||||
|
||||
@@ -62,7 +62,10 @@
|
||||
<th class='c-user<?php echo zget($visibleFields, 'PO', ' hidden') . zget($requiredFields, 'PO', '', ' required');?>'><?php echo $lang->execution->PO;?></th>
|
||||
<th class='c-user<?php echo zget($visibleFields, 'QD', ' hidden') . zget($requiredFields, 'QD', '', ' required');?>'><?php echo $lang->execution->QD;?></th>
|
||||
<th class='c-user<?php echo zget($visibleFields, 'RD', ' hidden') . zget($requiredFields, 'RD', '', ' required');?>'><?php echo $lang->execution->RD;?></th>
|
||||
<th class='c-type<?php echo zget($visibleFields, 'type', ' hidden') . zget($requiredFields, 'type', '', ' required');?>'><?php echo $lang->execution->$type;?></th>
|
||||
<th class='c-type<?php echo zget($visibleFields, 'type', ' hidden') . zget($requiredFields, 'type', '', ' required');?>'>
|
||||
<?php echo $lang->execution->$type;?>
|
||||
<icon class='icon icon-help' data-toggle='popover' data-trigger='focus hover' data-placement='right' data-tip-class='text-muted popover-sm' data-content="<?php echo $lang->execution->typeTip;?>"></icon>
|
||||
</th>
|
||||
<th class='c-date required'><?php echo $lang->execution->begin;?></th>
|
||||
<th class='c-date required'><?php echo $lang->execution->end;?></th>
|
||||
<th class='c-desc <?php echo zget($visibleFields, 'desc', ' hidden') . zget($requiredFields, 'desc', '', ' required');?>'><?php echo $lang->execution->$desc;?></th>
|
||||
|
||||
@@ -66,7 +66,10 @@
|
||||
<tr>
|
||||
<th><?php echo $lang->execution->method;?></th>
|
||||
<td class="col-main"><?php echo html::select("type", $lang->execution->typeList, $type, "class='form-control chosen' required onchange='setType(this.value)'");?></td>
|
||||
<td colspan='2'></td>
|
||||
<td class='methodTip'>
|
||||
<icon class='icon icon-help' data-toggle='popover' data-trigger='focus hover' data-placement='right' data-tip-class='text-muted popover-sm' data-content="<?php echo $lang->execution->agileplusMethodTip;?>"></icon>
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
|
||||
@@ -98,6 +98,9 @@
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td>
|
||||
<icon class='icon icon-help' data-toggle='popover' data-trigger='focus hover' data-placement='right' data-tip-class='text-muted popover-sm' data-content="<?php echo $lang->execution->typeTip;?>"></icon>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
|
||||
@@ -254,9 +254,9 @@ class group extends control
|
||||
foreach($this->lang->resource as $module => $moduleActions)
|
||||
{
|
||||
$modules[$module] = $this->lang->$module->common;
|
||||
foreach($moduleActions as $action)
|
||||
foreach($moduleActions as $key => $action)
|
||||
{
|
||||
$actions[$module][$action] = $this->lang->$module->$action;
|
||||
$actions[$module][$key] = $this->lang->$module->$action;
|
||||
}
|
||||
}
|
||||
$this->view->groups = $this->group->getPairs();
|
||||
|
||||
@@ -198,6 +198,8 @@ class my extends control
|
||||
$meetingCount = $pager->recTotal;
|
||||
}
|
||||
|
||||
if($this->app->viewType != 'json')
|
||||
{
|
||||
echo <<<EOF
|
||||
<script>
|
||||
var taskCount = $taskCount;
|
||||
@@ -227,6 +229,7 @@ if(isMax !== 0)
|
||||
}
|
||||
</script>
|
||||
EOF;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
#planForm tr td {vertical-align: top;}
|
||||
#mainContent .methodTitle, #mainContent .methodTip {display: inline-block; vertical-align: middle;}
|
||||
|
||||
@@ -5,6 +5,8 @@ $(function()
|
||||
$(this).removeClass('has-error');
|
||||
$(this).closest('td').find('.text-danger.help-text').remove();
|
||||
});
|
||||
|
||||
$('[data-toggle="popover"]').popover();
|
||||
});
|
||||
/**
|
||||
* Add item to create view of programplan.
|
||||
|
||||
@@ -57,4 +57,6 @@ $(function()
|
||||
if(!result) return false;
|
||||
}
|
||||
})
|
||||
|
||||
$('[data-toggle="popover"]').popover();
|
||||
})
|
||||
|
||||
@@ -20,6 +20,7 @@ $lang->programplan->delete = 'Delete Stage';
|
||||
$lang->programplan->close = 'Close Stage';
|
||||
$lang->programplan->activate = 'Activate Stage';
|
||||
$lang->programplan->createSubPlan = 'Create Sub Plan';
|
||||
$lang->programplan->subPlanManage = 'Sub-stages management';
|
||||
|
||||
$lang->programplan->parent = 'Parent Stage';
|
||||
$lang->programplan->emptyParent = 'N/A';
|
||||
@@ -72,6 +73,7 @@ $lang->programplan->emptyBegin = '『Begin』should not be blank';
|
||||
$lang->programplan->emptyEnd = '『End』should not be blank';
|
||||
$lang->programplan->checkBegin = '『Begin』should be valid date';
|
||||
$lang->programplan->checkEnd = '『End』should be valid date';
|
||||
$lang->programplan->methodTip = 'When creating sub-stages in a Waterfall Plus project stage, you can choose to create them as stages or as Iterations/Kanban. If the sub-stage is created as an Iteration/Kanban, it does not support creating sub-levels further down.';
|
||||
|
||||
$lang->programplan->milestoneList[1] = 'Yes';
|
||||
$lang->programplan->milestoneList[0] = 'No';
|
||||
|
||||
@@ -20,6 +20,7 @@ $lang->programplan->delete = 'Delete Stage';
|
||||
$lang->programplan->close = 'Close Stage';
|
||||
$lang->programplan->activate = 'Activate Stage';
|
||||
$lang->programplan->createSubPlan = 'Create Sub Stage';
|
||||
$lang->programplan->subPlanManage = 'Sub-stages management';
|
||||
|
||||
$lang->programplan->parent = 'Parent Stage';
|
||||
$lang->programplan->emptyParent = 'N/A';
|
||||
@@ -72,6 +73,7 @@ $lang->programplan->emptyBegin = '『Begin』should not be blank';
|
||||
$lang->programplan->emptyEnd = '『End』should not be blank';
|
||||
$lang->programplan->checkBegin = '『Begin』should be valid date';
|
||||
$lang->programplan->checkEnd = '『End』should be valid date';
|
||||
$lang->programplan->methodTip = 'When creating sub-stages in a Waterfall Plus project stage, you can choose to create them as stages or as Iterations/Kanban. If the sub-stage is created as an Iteration/Kanban, it does not support creating sub-levels further down.';
|
||||
|
||||
$lang->programplan->milestoneList[1] = 'Yes';
|
||||
$lang->programplan->milestoneList[0] = 'No';
|
||||
|
||||
@@ -20,6 +20,7 @@ $lang->programplan->delete = 'Delete Stage';
|
||||
$lang->programplan->close = 'Close Stage';
|
||||
$lang->programplan->activate = 'Activate Stage';
|
||||
$lang->programplan->createSubPlan = 'Create Sub Plan';
|
||||
$lang->programplan->subPlanManage = 'Sub-stages management';
|
||||
|
||||
$lang->programplan->parent = 'Parent Stage';
|
||||
$lang->programplan->emptyParent = 'N/A';
|
||||
@@ -72,6 +73,7 @@ $lang->programplan->emptyBegin = '『Begin』should not be blank';
|
||||
$lang->programplan->emptyEnd = '『End』should not be blank';
|
||||
$lang->programplan->checkBegin = '『Begin』should be valid date';
|
||||
$lang->programplan->checkEnd = '『End』should be valid date';
|
||||
$lang->programplan->methodTip = 'When creating sub-stages in a Waterfall Plus project stage, you can choose to create them as stages or as Iterations/Kanban. If the sub-stage is created as an Iteration/Kanban, it does not support creating sub-levels further down.';
|
||||
|
||||
$lang->programplan->milestoneList[1] = 'Yes';
|
||||
$lang->programplan->milestoneList[0] = 'No';
|
||||
|
||||
@@ -20,6 +20,7 @@ $lang->programplan->delete = '删除阶段';
|
||||
$lang->programplan->close = '关闭阶段';
|
||||
$lang->programplan->activate = '激活阶段';
|
||||
$lang->programplan->createSubPlan = '创建子阶段';
|
||||
$lang->programplan->subPlanManage = '子阶段的管理方法';
|
||||
|
||||
$lang->programplan->parent = '父阶段';
|
||||
$lang->programplan->emptyParent = '无';
|
||||
@@ -72,6 +73,7 @@ $lang->programplan->emptyBegin = '『计划开始』日期不能为空';
|
||||
$lang->programplan->emptyEnd = '『计划完成』日期不能为空';
|
||||
$lang->programplan->checkBegin = '『计划开始』应当为合法的日期';
|
||||
$lang->programplan->checkEnd = '『计划完成』应当为合法的日期';
|
||||
$lang->programplan->methodTip = '融合瀑布项目阶段子阶段创建时,可以选择创建为阶段或创建为迭代/看板。子阶段为迭代/看板,不支持继续向下创建子级。';
|
||||
|
||||
$lang->programplan->milestoneList[1] = '是';
|
||||
$lang->programplan->milestoneList[0] = '否';
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
<div class='main-header'>
|
||||
<?php if(!empty($planID) and $project->model == 'waterfallplus'):?>
|
||||
<div class="pull-left">
|
||||
<div class='methodTitle'><strong><?php echo $lang->programplan->subPlanManage . ':'?></strong></div>
|
||||
<div class='btn-group'>
|
||||
<a href='javascript:;' class='btn btn-link btn-limit' data-toggle='dropdown'><span class='text' title='<?php echo zget($lang->programplan->typeList, $executionType);?>'><?php echo zget($lang->programplan->typeList, $executionType);?></span> <span class='caret'></span></a>
|
||||
<ul class='dropdown-menu' style='max-height:240px; max-width: 300px; overflow-y:auto'>
|
||||
@@ -57,6 +58,7 @@
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
<div class='methodTip'><icon class='icon icon-help' data-toggle='popover' data-trigger='focus hover' data-placement='right' data-tip-class='text-muted popover-sm' data-content="<?php echo $lang->programplan->methodTip;?>"></icon></div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div class="btn-toolbar pull-right">
|
||||
|
||||
@@ -60,6 +60,9 @@
|
||||
<td colspan='2'>
|
||||
<?php echo $enableOptionalAttr ? html::select('attribute', $lang->stage->typeList, $plan->attribute, "class='form-control'") : zget($lang->stage->typeList, $plan->attribute);?>
|
||||
</td>
|
||||
<td>
|
||||
<icon class='icon icon-help' data-toggle='popover' data-trigger='focus hover' data-placement='right' data-tip-class='text-muted popover-sm' data-content="<?php echo $lang->execution->typeTip;?>"></icon>
|
||||
</td>
|
||||
</tr>
|
||||
<?php if($plan->setMilestone):?>
|
||||
<tr>
|
||||
|
||||
@@ -48,7 +48,11 @@
|
||||
<h2><?php echo $createTitle;?></h2>
|
||||
<?php if(!commonModel::isTutorialMode()): ?>
|
||||
<div class="pull-right btn-toolbar">
|
||||
<?php if($config->edition != 'max' or $model == 'kanban'):?>
|
||||
<button type='button' class='btn btn-link' data-toggle='modal' data-target='#copyProjectModal'><?php echo html::icon($lang->icons['copy'], 'muted') . ' ' . $lang->project->copy;?></button>
|
||||
<?php else: ?>
|
||||
<button type='button' class='btn btn-link open-btn' data-toggle='modal' data-target='#maxCopyProjectModal'><?php echo html::icon($lang->icons['copy'], 'muted') . ' ' . $lang->project->copy;?></button>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
@@ -599,7 +599,7 @@ class repo extends control
|
||||
}
|
||||
|
||||
/* Refresh repo. */
|
||||
if($refresh) $this->repo->updateCommit($repoID, $originBranchID);
|
||||
if($refresh) $this->repo->updateCommit($repoID, $objectID, $originBranchID);
|
||||
|
||||
/* Get files info. */
|
||||
$infos = $this->repo->getFileCommits($repo, $branchID, $path);
|
||||
|
||||
@@ -2810,7 +2810,7 @@ class repoModel extends model
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function updateCommit($repoID, $branchID = 0)
|
||||
public function updateCommit($repoID, $objectID = 0, $branchID = 0)
|
||||
{
|
||||
$repo = $this->getRepoByID($repoID);
|
||||
/* Update code commit history. */
|
||||
|
||||
@@ -199,7 +199,7 @@ class stageModel extends model
|
||||
$moduleName = $this->app->rawModule;
|
||||
$methodName = $this->app->rawMethod;
|
||||
if(!isset($this->lang->admin->menuList->model['subMenu']['waterfall']['exclude'])) $this->lang->admin->menuList->model['subMenu']['waterfall']['exclude'] = '';
|
||||
if(!isset($this->lang->admin->menuList->model['subMenu']['waterfallplus']['exclude'])) $this->lang->admin->menuList->model['subMenu']['agileplus']['exclude'] = '';
|
||||
if(!isset($this->lang->admin->menuList->model['subMenu']['waterfallplus']['exclude'])) $this->lang->admin->menuList->model['subMenu']['waterfallplus']['exclude'] = '';
|
||||
if($type == 'waterfall')
|
||||
{
|
||||
$this->lang->admin->menuList->model['subMenu']['waterfallplus']['exclude'] .= ",{$moduleName}-{$methodName}";
|
||||
|
||||
Reference in New Issue
Block a user