Merge branch '15.0.beta3' of https://gitlab.zcorp.cc/easycorp/zentaopms into 15.0.beta3

This commit is contained in:
wangyidong
2021-05-31 13:09:17 +08:00
13 changed files with 52 additions and 6 deletions
+2 -1
View File
@@ -32,6 +32,7 @@ $config->action->objectNameFields['job'] = 'name';
$config->action->objectNameFields['team'] = 'name';
$config->action->objectNameFields['opportunity'] = 'name';
$config->action->objectNameFields['trainplan'] = 'name';
$config->action->objectNameFields['gapanalysis'] = 'account';
$config->action->commonImgSize = 870;
@@ -45,4 +46,4 @@ $config->action->majorList['program'] = array('opened', 'edited');
$config->action->majorList['project'] = array('opened', 'edited');
$config->action->majorList['execution'] = array('opened', 'edited');
$config->action->needGetProjectType = 'build,task,bug,case,testcase,caselib,testtask,testsuite,testreport,doc,issue,release,risk,design,opportunity,trainplan';
$config->action->needGetProjectType = 'build,task,bug,case,testcase,caselib,testtask,testsuite,testreport,doc,issue,release,risk,design,opportunity,trainplan,gapanalysis';
+2
View File
@@ -101,6 +101,7 @@ $lang->action->objectTypes['team'] = 'Team';
$lang->action->objectTypes['whitelist'] = 'Whitelist';
$lang->action->objectTypes['opportunity'] = 'Opportunity';
$lang->action->objectTypes['trainplan'] = 'Trainplan';
$lang->action->objectTypes['gapanalysis'] = 'Gap Analysis';
/* 用来描述操作历史记录。*/
$lang->action->desc = new stdclass();
@@ -485,6 +486,7 @@ $lang->action->label->design = 'Design|design|view|designID=%s';
$lang->action->label->stakeholder = 'Stakeholder|stakeholder|view|userID=%s';
$lang->action->label->opportunity = 'Opportunity|opportunity|view|opportunityID=%s';
$lang->action->label->trainplan = 'Trainplan|trainplan|view|trainplanID=%s';
$lang->action->label->gapanalysis = 'Gap Analysis|gapanalysis|view|gapanalysisID=%s';
/* Object type. */
$lang->action->search = new stdclass();
+2
View File
@@ -105,6 +105,7 @@ $lang->action->objectTypes['team'] = 'Team';
$lang->action->objectTypes['whitelist'] = 'Whitelist';
$lang->action->objectTypes['opportunity'] = 'Opportunity';
$lang->action->objectTypes['trainplan'] = 'Trainplan';
$lang->action->objectTypes['gapanalysis'] = 'Gap Analysis';
/* Used to describe operation history. */
$lang->action->desc = new stdclass();
@@ -488,6 +489,7 @@ $lang->action->label->design = 'Design|design|view|designID=%s';
$lang->action->label->stakeholder = 'Stakeholder|stakeholder|view|userID=%s';
$lang->action->label->opportunity = 'Opportunity|opportunity|view|opportunityID=%s';
$lang->action->label->trainplan = 'Trainplan|trainplan|view|trainplanID=%s';
$lang->action->label->gapanalysis = 'Gap Analysis|gapanalysis|view|gapanalysisID=%s';
/* Object type. */
$lang->action->search = new stdclass();
+2
View File
@@ -101,6 +101,7 @@ $lang->action->objectTypes['team'] = 'Team';
$lang->action->objectTypes['whitelist'] = 'Whitelist';
$lang->action->objectTypes['opportunity'] = 'Opportunity';
$lang->action->objectTypes['trainplan'] = 'Trainplan';
$lang->action->objectTypes['gapanalysis'] = 'Gap Analysis';
/* 用来描述操作历史记录。*/
$lang->action->desc = new stdclass();
@@ -497,6 +498,7 @@ $lang->action->label->design = 'Design|design|view|designID=%s';
$lang->action->label->stakeholder = 'Stakeholder|stakeholder|view|userID=%s';
$lang->action->label->opportunity = 'Opportunity|opportunity|view|opportunityID=%s';
$lang->action->label->trainplan = 'Trainplan|trainplan|view|trainplanID=%s';
$lang->action->label->gapanalysis = 'Gap Analysis|gapanalysis|view|gapanalysisID=%s';
/* Object type. */
$lang->action->search = new stdclass();
+2
View File
@@ -101,6 +101,7 @@ $lang->action->objectTypes['team'] = 'Team';
$lang->action->objectTypes['whitelist'] = 'Whitelist';
$lang->action->objectTypes['opportunity'] = 'Opportunity';
$lang->action->objectTypes['trainplan'] = 'Trainplan';
$lang->action->objectTypes['gapanalysis'] = 'Gap Analysis';
/* Used to describe operation history. */
$lang->action->desc = new stdclass();
@@ -485,6 +486,7 @@ $lang->action->label->design = 'Design|design|view|designID=%s';
$lang->action->label->stakeholder = 'Stakeholder|stakeholder|view|userID=%s';
$lang->action->label->opportunity = 'Opportunity|opportunity|view|opportunityID=%s';
$lang->action->label->trainplan = 'Trainplan|trainplan|view|trainplanID=%s';
$lang->action->label->gapanalysis = 'Gap Analysis|gapanalysis|view|gapanalysisID=%s';
/* Object type. */
$lang->action->search = new stdclass();
+2
View File
@@ -105,6 +105,7 @@ $lang->action->objectTypes['team'] = '团队';
$lang->action->objectTypes['whitelist'] = '白名单';
$lang->action->objectTypes['opportunity'] = '机会';
$lang->action->objectTypes['trainplan'] = '培训计划';
$lang->action->objectTypes['gapanalysis'] = '能力差距分析';
/* 用来描述操作历史记录。*/
$lang->action->desc = new stdclass();
@@ -488,6 +489,7 @@ $lang->action->label->design = '设计|design|view|designID=%s';
$lang->action->label->stakeholder = '干系人|stakeholder|view|userID=%s';
$lang->action->label->opportunity = '机会|opportunity|view|opportunityID=%s';
$lang->action->label->trainplan = '培训计划|trainplan|view|trainplanID=%s';
$lang->action->label->gapanalysis = '能力差距分析|gapanalysis|view|gapanalysisID=%s';
/* Object type. */
$lang->action->search = new stdclass();
+1 -1
View File
@@ -203,7 +203,7 @@ class actionModel extends model
}
/* Only process these object types. */
if(strpos(',story,productplan,release,task,build,bug,case,testtask,testreport,doc,doclib,issue,risk,opportunity,trainplan,team,', ",{$objectType},") !== false)
if(strpos(',story,productplan,release,task,build,bug,case,testtask,testreport,doc,doclib,issue,risk,opportunity,trainplan,gapanalysis,team,', ",{$objectType},") !== false)
{
if(!isset($this->config->objectTables[$objectType])) return $emptyRecord;
+1 -1
View File
@@ -1094,7 +1094,7 @@ class block extends control
}
/* Get bugs. */
$bugs = $this->dao->select("project, status, count(status) as totalBugs, count(status = 'active' or null) as activeBugs, count(resolvedDate like '{$yesterday}%' or null) as yesterdayResolved")->from(TABLE_BUG)
$bugs = $this->dao->select("project, count(status) as totalBugs, count(status = 'active' or null) as activeBugs, count(resolvedDate like '{$yesterday}%' or null) as yesterdayResolved")->from(TABLE_BUG)
->where('project')->in($executionIdList)
->andWhere('deleted')->eq(0)
->groupBy('project')
+1 -1
View File
@@ -1408,7 +1408,7 @@ EOD;
$diff = '';
if(substr_count($value, "\n") > 1 or
substr_count($old->$key, "\n") > 1 or
strpos('name,title,desc,spec,steps,content,digest,verify,report', strtolower($key)) !== false)
strpos('name,title,desc,spec,steps,content,digest,verify,report,analysis,prevention,resolution', strtolower($key)) !== false)
{
$diff = commonModel::diff($old->$key, $value);
}
+25
View File
@@ -1476,6 +1476,31 @@ class projectModel extends model
->fetchAll('account');
}
/**
* Get team member pairs by projectID.
*
* @param int $projectID
* @access public
* @return array
*/
public function getTeamMemberPairs($projectID)
{
if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getTeamMembers();
$project = $this->getByID($projectID);
$type = $this->config->systemMode == 'new' ? $project->type : 'project';
if(empty($project)) return array();
$members = $this->dao->select("t1.account, if(t2.deleted='0', t2.realname, t1.account) as realname")->from(TABLE_TEAM)->alias('t1')
->leftJoin(TABLE_USER)->alias('t2')->on('t1.account = t2.account')
->where('t1.root')->eq((int)$projectID)
->andWhere('t1.type')->eq($type)
->andWhere('t2.deleted')->eq('0')
->fetchPairs('account', 'realname');
return array('' => '') + $members;
}
/**
* Get project stats.
*
+9
View File
@@ -3,6 +3,15 @@ $(function()
$('#needNotReview').on('change', function()
{
$('#reviewer').attr('disabled', $(this).is(':checked') ? 'disabled' : null).trigger('chosen:updated');
if($(this).is(':checked'))
{
$('#reviewerTd').removeClass('required');
}
else
{
$('#reviewerTd').addClass('required');
}
getStatus('create', "product=" + $('#product').val() + ",execution=" + executionID + ",needNotReview=" + ($(this).prop('checked') ? 1 : 0));
});
$('#needNotReview').change();
+1 -1
View File
@@ -101,7 +101,7 @@
<tr>
<th><?php echo $lang->story->reviewedBy;?></th>
<?php $colspan = $type == 'story' ? "colspan='4'" : "colspan='2'";?>
<td <?php echo $colspan;?>>
<td <?php echo $colspan;?> id='reviewerTd'>
<div class="table-row">
<div class="table-col">
<?php echo html::select('reviewer[]', $users, empty($needReview) ? $product->PO : '', "class='form-control chosen' multiple");?>
+2 -1
View File
@@ -377,7 +377,8 @@ class todo extends control
$this->loadModel('user');
$projects = $this->loadModel('project')->getPairsByModel('all');
$model = $todo->type == 'opportunity' ? 'waterfall' : 'all';
$projects = $this->loadModel('project')->getPairsByModel($model);
if(!isset($this->session->project)) $this->session->set('project', key($projects));
$this->view->title = $this->app->user->account == $todo->account ? "{$this->lang->todo->common} #$todo->id $todo->name" : $this->lang->todo->common ;