diff --git a/framework/router.class.php b/framework/router.class.php index 9fa4eddea5..bf4fc40b58 100755 --- a/framework/router.class.php +++ b/framework/router.class.php @@ -150,6 +150,8 @@ class router extends baseRouter $productIndex = $storyIndex = $hourIndex = $planIndex = $URAndSR = 0; $projectIndex = empty($this->config->isINT) ? 0 : 1; + $model = new stdclass(); + $model->model = 'scrum'; if($this->session->PRJ) $model = $this->dbh->query('SELECT model FROM' . TABLE_PROJECT . "WHERE id = {$this->session->PRJ}")->fetch(); foreach($commonSettings as $setting) diff --git a/module/upgrade/control.php b/module/upgrade/control.php index 48172f9a57..37956f91dc 100644 --- a/module/upgrade/control.php +++ b/module/upgrade/control.php @@ -249,15 +249,12 @@ class upgrade extends control } elseif($type == 'moreLink') { - foreach($this->post->programs as $i => $programID) + foreach($this->post->projects as $i => $projectID) { - $projectID = $this->post->projects[$i]; + $sprintID = $this->post->sprints[$i]; /* Change program field for product and project. */ - $this->upgrade->setProgram4Project($programID, array($projectID)); - - /* Set program team. */ - $this->upgrade->setProgramTeam($programID, array(), array($projectID)); + $this->upgrade->processMergedData(0, $projectID, array(), array($sprintID)); } } @@ -376,31 +373,31 @@ class upgrade extends control /* Get no merged projects that link more then two products. */ if($type == 'moreLink') { - $noMergedProjects = $this->dao->select('*')->from(TABLE_PROJECT)->where('model')->eq('')->andWhere('deleted')->eq(0)->fetchAll('id'); - $projectProducts = $this->dao->select('*')->from(TABLE_PROJECTPRODUCT)->where('project')->in(array_keys($noMergedProjects))->fetchGroup('project', 'product'); + $noMergedSprints = $this->dao->select('*')->from(TABLE_PROJECT)->where('parent')->eq(0)->andWhere('path')->eq('')->fetchAll('id'); + $projectProducts = $this->dao->select('*')->from(TABLE_PROJECTPRODUCT)->where('project')->in(array_keys($noMergedSprints))->fetchGroup('project', 'product'); $productPairs = array(); - foreach($projectProducts as $projectID => $products) + foreach($projectProducts as $sprintID => $products) { foreach($products as $productID => $data) $productPairs[$productID] = $productID; } - $programs = $this->dao->select('t1.*,t2.id as productID')->from(TABLE_PROJECT)->alias('t1') - ->leftJoin(TABLE_PRODUCT)->alias('t2')->on('t1.id=t2.program') - ->where('t2.id')->in($productPairs) + $projects = $this->dao->select('t1.*,t2.product as productID')->from(TABLE_PROJECT)->alias('t1') + ->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.id=t2.project') + ->where('t2.product')->in($productPairs) ->fetchAll('productID'); - foreach($noMergedProjects as $projectID => $project) + foreach($noMergedSprints as $sprintID => $sprint) { - $products = zget($projectProducts, $projectID, array()); + $products = zget($projectProducts, $sprintID, array()); foreach($products as $productID => $data) { - $program = zget($programs, $productID, ''); - if($program) $project->programs[$program->id] = $program->name; + $project = zget($projects, $productID, ''); + if($project) $sprint->projects[$project->id] = $project->name; } } - $this->view->noMergedProjects = $noMergedProjects; + $this->view->noMergedSprints = $noMergedSprints; } $this->view->title = $this->lang->upgrade->mergeProgram; diff --git a/module/upgrade/js/mergeprogram.js b/module/upgrade/js/mergeprogram.js index 009b7f8853..87203d1785 100644 --- a/module/upgrade/js/mergeprogram.js +++ b/module/upgrade/js/mergeprogram.js @@ -21,6 +21,19 @@ $(function() setPgmBegin(pgmBegin); }) + $('#longTime').change(function() + { + if($(this).prop('checked')) + { + $('#end').val('').attr('disabled', 'disabled'); + $('#days').val(''); + } + else + { + $('#end').removeAttr('disabled'); + } + }); + $('#lineList li a').click(function() { /* Active current li and remove active before li. */ diff --git a/module/upgrade/model.php b/module/upgrade/model.php index fa0b84cd81..b078d58435 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -3854,17 +3854,20 @@ class upgradeModel extends model */ public function createProgram($productIdList = array(), $projectIdList = array()) { + $this->app->loadLang('program'); $data = fixer::input('post')->get(); if(!isset($data->programs)) { + if(!$this->post->longTime and !$this->post->end) die(js::alert(sprintf($this->lang->error->notempty, $this->lang->program->end))); + /* Insert program. */ $program = new stdclass(); $program->name = $data->PGMName; $program->type = 'program'; $program->status = 'wait'; $program->begin = $data->begin; - $program->end = $data->end; + $program->end = isset($data->end) ? $data->end : ''; $program->openedBy = $this->app->user->account; $program->openedDate = helper::now(); $program->openedVersion = $this->config->version; @@ -3875,10 +3878,9 @@ class upgradeModel extends model $this->lang->project->name = $this->lang->program->PGMName; $this->dao->insert(TABLE_PROJECT)->data($program) - ->batchcheck('name,begin,end', 'notempty') + ->batchcheck('name,begin', 'notempty') ->checkIF($program->end != '', 'end', 'gt', $program->begin) ->check('name', 'unique', "deleted='0'") - ->check('code', 'unique', "deleted='0'") ->exec(); if(dao::isError()) return false; @@ -3890,12 +3892,16 @@ class upgradeModel extends model $programID = $data->programs; } - if(!isset($data->programs)) + if(!isset($data->projects)) { + if(!$this->post->longTime and !$this->post->end) die(js::alert(sprintf($this->lang->error->notempty, $this->lang->program->end))); + /* Insert project. */ $project = new stdclass(); $project->name = $data->PRJName; $project->type = 'project'; + $project->model = 'scrum'; + $project->code = $data->code; $project->parent = $programID; $project->status = 'wait'; $project->begin = $data->begin; @@ -3911,9 +3917,8 @@ class upgradeModel extends model $this->lang->project->code = $this->lang->program->PRJCode; $this->dao->insert(TABLE_PROJECT)->data($project) - ->batchcheck('name,code', 'notempty') + ->batchcheck('name', 'notempty') ->check('name', 'unique', "deleted='0'") - ->check('code', 'unique', "deleted='0'") ->exec(); if(dao::isError()) return false; @@ -3928,49 +3933,6 @@ class upgradeModel extends model return array($programID, $projectID); } - /** - * Create product for program. - * - * @param int $programID - * @access public - * @return void - */ - public function createProduct4Program($programID) - { - $program = $this->dao->select('*')->from(TABLE_PROJECT)->where('id')->eq($programID)->fetch(); - - $product = $this->dao->select('*')->from(TABLE_PRODUCT)->where('program')->eq($programID)->andWhere('deleted')->eq(0)->andWhere('code')->eq($program->code)->fetch(); - if($product) return $product->id; - - $product = new stdclass(); - $product->name = $program->name; - $product->code = $program->code; - $product->program = $program->id; - $product->type = 'normal'; - $product->status = 'normal'; - $product->acl = $program->acl; - $product->whitelist = $program->whitelist; - $product->createdBy = $program->createdBy; - $product->createdDate = $program->createdDate; - $product->createdVersion = $this->config->version; - - $this->dao->insert(TABLE_PRODUCT)->data($product)->exec(); - $productID = $this->dao->lastInsertId(); - $this->dao->update(TABLE_PRODUCT)->set('`order`')->eq($productID * 5)->where('id')->eq($productID)->exec(); - - $this->app->loadLang('doc'); - $lib = new stdclass(); - $lib->product = $productID; - $lib->name = $this->lang->doclib->main['product']; - $lib->type = 'product'; - $lib->main = '1'; - $lib->acl = 'default'; - $this->dao->insert(TABLE_DOCLIB)->data($lib)->exec(); - if($product->acl != 'open') $this->loadModel('user')->updateUserView($productID, 'product'); - - return $productID; - } - /** * Replace program or PRJ id for product and project linked objects. * @@ -3999,7 +3961,8 @@ class upgradeModel extends model $this->dao->update(TABLE_DOC)->set('PRJ')->eq($projectID)->where("lib IN(SELECT id from " . TABLE_DOCLIB . " WHERE type = 'project' and project " . helper::dbIN($sprintIdList) . ')')->exec(); /* Compute sprint path and grade. */ - foreach($sprintIdList as $sprint) + $sprints = $this->dao->select('id, type')->from(TABLE_PROJECT)->where('id')->in($sprintIdList)->fetchAll(); + foreach($sprints as $sprint) { $data = new stdclass(); $data->project = $projectID; @@ -4013,11 +3976,11 @@ class upgradeModel extends model } /* Set product and project relation. */ - foreach($productIdList as $product) + foreach($productIdList as $productID) { $data = new stdclass(); $data->project = $projectID; - $data->product = $product->id; + $data->product = $productID; $this->dao->replace(TABLE_PROJECTPRODUCT)->data($data)->exec(); } @@ -4049,13 +4012,13 @@ class upgradeModel extends model if(isset($product->feedback)) $teams[$product->feedback] = $product->feedback; } - foreach($projects as $project) + foreach($sprints as $sprint) { - $teams[$project->PO] = $project->PO; - $teams[$project->PM] = $project->PM; - $teams[$project->QD] = $project->QD; - $teams[$project->RD] = $project->RD; - if(isset($project->feedback)) $teams[$project->feedback] = $project->feedback; + $teams[$sprint->PO] = $sprint->PO; + $teams[$sprint->PM] = $sprint->PM; + $teams[$sprint->QD] = $sprint->QD; + $teams[$sprint->RD] = $sprint->RD; + if(isset($sprint->feedback)) $teams[$sprint->feedback] = $sprint->feedback; } $teams += $this->dao->select('account')->from(TABLE_TEAM)->where('type')->eq('project')->andWhere('root')->in($sprintIdList)->fetchPairs('account', 'account'); @@ -4082,10 +4045,27 @@ class upgradeModel extends model ->andWhere('root')->in($sprintIdList) ->exec(); - /* Get all white list. */ + /* Get all actor in sprint and product. */ foreach($productIdList as $productID) $productIdList[$productID] = ",{$productID},"; $whiteList = $this->dao->select('actor')->from(TABLE_ACTION)->where('project')->in($sprintIdList)->orWhere('product')->in($productIdList)->fetchPairs('actor', 'actor'); - $whiteList = array_diff($whiteList, $team); + $whiteList = array_diff($whiteList, $teams); + + /* Get all white list in sprint and product. */ + $groups = array(); + foreach($products as $product) + { + if($product->acl != 'custom' || $product->whitelist) return; + $groups += explode(',', $product->whitelist); + } + + foreach($sprints as $sprint) + { + if($sprint->acl != 'custom' || $sprint->whitelist) return; + $groups += explode(',', $sprint->whitelist); + } + + $users = $groups ? $this->dao->select('account')->from(TABLE_USERGROUP)->where('`group`')->in($groups)->fetchPairs() : array(); + foreach($users as $account) $whiteList[$account] = $account; /* Insert whiteList into program and projec. */ if($whiteList) diff --git a/module/upgrade/view/createprogram.html.php b/module/upgrade/view/createprogram.html.php index 4225479590..1b20ced680 100644 --- a/module/upgrade/view/createprogram.html.php +++ b/module/upgrade/view/createprogram.html.php @@ -42,7 +42,7 @@ program->PRJCode;?> - + program->PRJPM;?> @@ -55,6 +55,12 @@ program->begin . "' required");?> program->to;?> program->end . "' required");?> + +
+ + +
+
diff --git a/module/upgrade/view/mergebyline.html.php b/module/upgrade/view/mergebyline.html.php index 2ef855932b..9b6b10f972 100644 --- a/module/upgrade/view/mergebyline.html.php +++ b/module/upgrade/view/mergebyline.html.php @@ -1,4 +1,4 @@ - +
+ +
+ upgrade->mergeSummary, $noMergedProductCount, $noMergedSprintCount); + echo '
' . $lang->upgrade->mergeByProject; + ?> +
+
-
- upgrade->mergeSummary, $noMergedProductCount, $noMergedSprintCount); - echo '
' . $lang->upgrade->mergeByProject; - ?> -
- - - - - - - +
+
upgrade->project;?>
+
$sprint):?>
- + - -
upgrade->project;?>
id => "{$lang->upgrade->project} #{$sprint->id} {$sprint->name}"), $sprint->id);?>id => "{$lang->upgrade->project} #{$sprint->id} {$sprint->name}"), $sprint->id);?>
+
+
-
+
+
+
diff --git a/module/upgrade/view/mergeprogram.html.php b/module/upgrade/view/mergeprogram.html.php index cf7b0bff3a..29497eb0c1 100644 --- a/module/upgrade/view/mergeprogram.html.php +++ b/module/upgrade/view/mergeprogram.html.php @@ -28,7 +28,7 @@
upgrade->mergeSummary, $noMergedProductCount, $noMergedProjectCount); + printf($lang->upgrade->mergeSummary, $noMergedProductCount, $noMergedSprintCount); echo '
' . $lang->upgrade->mergeByMoreLink; ?>
@@ -37,15 +37,15 @@ upgrade->project;?> - upgrade->program;?> + upgrade->program;?> - $project):?> + $sprint):?> - projectCommon} #{$project->id} {$project->name}" . html::hidden("projects[]", $project->id);?> + upgrade->project} #{$sprint->id} {$sprint->name}" . html::hidden("sprints[]", $sprint->id);?> - programs, '', "class='form-control chosen'");?> + projects, '', "class='form-control chosen'");?> diff --git a/module/user/model.php b/module/user/model.php index 4b9e07a947..48f2c2fb9f 100644 --- a/module/user/model.php +++ b/module/user/model.php @@ -1368,7 +1368,7 @@ class userModel extends model if($allProducts === null) $allProducts = $this->dao->select('id,PO,QD,RD,createdBy,acl,whitelist,program')->from(TABLE_PRODUCT)->where('acl')->ne('open')->fetchAll('id'); if($allProjects === null) $allProjects = $this->dao->select('id,PO,PM,QD,RD,acl')->from(TABLE_PROJECT)->where('acl')->ne('open')->andWhere('type')->eq('project')->fetchAll('id'); if($allPrograms === null) $allPrograms = $this->dao->select('id,PO,PM,QD,RD,acl')->from(TABLE_PROJECT)->where('acl')->ne('open')->andWhere('type')->eq('program')->fetchAll('id'); - if($allSprints === null) $allSprints = $this->dao->select('id,PO,PM,QD,RD,acl')->from(TABLE_PROJECT)->where('acl')->eq('private')->andWhere('type')->in('sprint,stage')->fetchAll('id'); + if($allSprints === null) $allSprints = $this->dao->select('id,PO,PM,QD,RD,acl,project,type')->from(TABLE_PROJECT)->where('acl')->eq('private')->andWhere('type')->in('sprint,stage')->fetchAll('id'); /* Get teams. */ if($teams === null)