* Fix edit project logic.

This commit is contained in:
Yagami
2020-11-03 10:05:28 +08:00
parent 0be65f7950
commit a0048a136c
5 changed files with 63 additions and 20 deletions
+23 -17
View File
@@ -840,7 +840,7 @@ class program extends control
* @access public
* @return void
*/
public function PRJEdit($projectID = 0)
public function PRJEdit($projectID = 0, $parentID = 0)
{
$this->lang->navGroup->program = 'project';
$this->app->loadLang('project');
@@ -867,24 +867,29 @@ class program extends control
$project = $this->program->getPRJByID($projectID);
$parents = $this->program->getParentPairs();
$programID = $this->program->getPRJProgramID($projectID);
$allProducts = $this->program->getPGMProduct($programID);
$linkedProducts = $this->project->getProducts($projectID);
$linkedBranches = array();
foreach($linkedProducts as $product)
{
if(!isset($allProducts[$product->id])) $allProducts[$product->id] = $product->name;
if($product->branch) $linkedBranches[$product->branch] = $product->branch;
}
foreach($linkedProducts as $product)
{
if(!isset($allProducts[$product->id])) $allProducts[$product->id] = $product->name;
if($product->branch) $linkedBranches[$product->branch] = $product->branch;
}
$productPlans = array(0 => '');
foreach($linkedProducts as $product)
$linkedProducts = array();
$linkedBranches = array();
$productPlans = array(0 => '');
if($parentID)
{
$productPlans[$product->id] = $this->productplan->getPairs($product->id);
$allProducts = $this->program->getPGMProduct($parentID);
}
else
{
$allProducts = $this->program->getPGMProduct($projectID);
$linkedProducts = $this->project->getProducts($projectID);
foreach($linkedProducts as $product)
{
if(!isset($allProducts[$product->id])) $allProducts[$product->id] = $product->name;
if($product->branch) $linkedBranches[$product->branch] = $product->branch;
}
foreach($linkedProducts as $product)
{
$productPlans[$product->id] = $this->loadModel('productplan')->getPairs($product->id);
}
}
$this->view->title = $this->lang->program->PRJEdit;
@@ -894,6 +899,7 @@ class program extends control
$this->view->users = $this->user->getPairs('noclosed|nodeleted');
$this->view->project = $project;
$this->view->parents = $parents;
$this->view->parentID = $parentID;
$this->view->allProducts = array('0' => '') + $allProducts;
$this->view->productPlans = $productPlans;
$this->view->linkedProducts = $linkedProducts;
+20
View File
@@ -13,6 +13,11 @@ $(function()
}
});
$('#parent').click(function()
{
if(!confirm(PGMChangeTips)) return false;
})
adjustProductBoxMargin();
adjustPlanBoxMargin();
});
@@ -28,3 +33,18 @@ function setAclList(programID)
$('.aclBox').html($('#PRJAcl').html());
}
}
function setParentProgram()
{
var parentProgram = $("#parent").val();
if(confirm(PGMChangeTips))
{
location.href = createLink('program', 'PRJEdit', 'projectID=' + projectID + '&programID=' + parentProgram);
}
else
{
$('#parent').val(oldParent);
$("#parent").trigger("chosen:updated");
}
}
+1
View File
@@ -207,6 +207,7 @@ $lang->program->PGMLongTime = '长期项目';
$lang->program->noPGM = '暂时没有项目集';
$lang->program->PGMShowClosed = '显示已关闭';
$lang->program->PGMTips = '修改父项目集,可关联产品也会发生变化,并且变为必填,如果未选择任何项目集,则系统会默认创建一个和该项目同名的产品并关联到该项目。';
$lang->program->PGMChangeTips = '修改父项目集后,项目已关联的产品会被清空,并且项目下的需求、bug等数据也会受影响,是否修改?';
$lang->program->PGMAclList['open'] = "公开(有项目集视图权限,即可访问)";
$lang->program->PGMAclList['private'] = "私有(项目集负责人和干系人可访问)";
+11 -1
View File
@@ -1135,6 +1135,7 @@ class programModel extends model
if(dao::isError()) return false;
}
/* Judge products not empty. */
if(!$_POST['products'][0])
{
dao::$errors[] = $this->lang->program->productNotEmpty;
@@ -1162,13 +1163,13 @@ class programModel extends model
$this->loadModel('personnel')->updateWhitelist($whitelist, 'project', $projectID);
if($project->acl != 'open') $this->loadModel('user')->updateUserView($projectID, 'project');
/* If parent not empty, link products or create products. */
if($project->parent)
{
$this->loadModel('project')->updateProducts($projectID);
}
else
{
/* If parent not empty, link products or create products. */
$product = new stdclass();
$product->name = $project->name;
$product->code = $project->code;
@@ -1258,6 +1259,13 @@ class programModel extends model
if(dao::isError()) return false;
}
/* Judge products not empty. */
if(!$_POST['products'][0])
{
dao::$errors[] = $this->lang->program->productNotEmpty;
return false;
}
}
$project = $this->loadModel('file')->processImgURL($project, $this->config->program->editor->prjedit['id'], $this->post->uid);
@@ -1278,6 +1286,8 @@ class programModel extends model
if(!dao::isError())
{
if($project->parent != $oldProject->parent) $this->loadModel('project')->updateProducts($projectID);
$this->file->updateObjectID($this->post->uid, $projectID, 'project');
$whitelist = explode(',', $project->whitelist);
$this->loadModel('personnel')->updateWhitelist($whitelist, 'project', $projectID);
+8 -2
View File
@@ -15,6 +15,10 @@
<?php js::import($jsRoot . 'misc/date.js');?>
<?php js::set('weekend', $config->project->weekend);?>
<?php js::set('errorSameProducts', $lang->project->errorSameProducts);?>
<?php js::set('parentID', $parentID);?>
<?php js::set('oldParent', $project->parent);?>
<?php js::set('projectID', $project->id);?>
<?php js::set('PGMChangeTips', $lang->program->PGMChangeTips);?>
<?php $aclList = $project->parent ? $lang->program->PGMPRJAclList : $lang->program->PRJAclList;?>
<div id='mainContent' class='main-content'>
<div class='center-block'>
@@ -30,7 +34,9 @@
</tr>
<tr>
<th><?php echo $lang->program->PGMParent;?></th>
<td><?php echo zget($parents, $project->parent, '/');?></td>
<td><?php echo html::select('parent', $parents, $parentID ? $parentID : $project->parent, "class='form-control chosen' onchange='setParentProgram(this.value)'");?></td>
<td></td>
<td></td>
</tr>
<tr>
<th><?php echo $lang->program->PRJName;?></th>
@@ -68,7 +74,7 @@
</div>
<?php $i++;?>
<?php endforeach;?>
<div class='col-sm-4'>
<div class='col-sm-4 <?php if($parentID) echo 'required';?>'>
<div class='input-group'>
<?php echo html::select("products[$i]", $allProducts, '', "class='form-control chosen' onchange='loadBranches(this)'");?>
<span class='input-group-addon fix-border'></span>