diff --git a/module/program/control.php b/module/program/control.php index 64399e5694..9d1fd368cd 100644 --- a/module/program/control.php +++ b/module/program/control.php @@ -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; diff --git a/module/program/js/prjedit.js b/module/program/js/prjedit.js index 274d34b92b..c7befb897c 100644 --- a/module/program/js/prjedit.js +++ b/module/program/js/prjedit.js @@ -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"); + } +} diff --git a/module/program/lang/zh-cn.php b/module/program/lang/zh-cn.php index e96201ddd1..62735cdace 100644 --- a/module/program/lang/zh-cn.php +++ b/module/program/lang/zh-cn.php @@ -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'] = "私有(项目集负责人和干系人可访问)"; diff --git a/module/program/model.php b/module/program/model.php index 5d7a37fe20..5c6086e734 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -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); diff --git a/module/program/view/prjedit.html.php b/module/program/view/prjedit.html.php index 1a2068be71..169698f92f 100644 --- a/module/program/view/prjedit.html.php +++ b/module/program/view/prjedit.html.php @@ -15,6 +15,10 @@ project->weekend);?> project->errorSameProducts);?> + +parent);?> +id);?> +program->PGMChangeTips);?> parent ? $lang->program->PGMPRJAclList : $lang->program->PRJAclList;?>