diff --git a/db/update20.0.sql b/db/update20.0.sql index 729a3c4b0d..73f2e83257 100644 --- a/db/update20.0.sql +++ b/db/update20.0.sql @@ -340,3 +340,14 @@ CREATE TABLE IF NOT EXISTS `zt_planstory` ( `order` mediumint(9) NOT NULL, UNIQUE KEY `unique` (`plan`,`story`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `zt_acl` ( + `id` mediumint(9) NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `objectType` char(30) NOT NULL, + `objectID` mediumint(9) NOT NULL DEFAULT '0', + `type` char(40) NOT NULL DEFAULT 'whitelist', + `source` char(30) NOT NULL, + `desc` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/db/zentao.sql b/db/zentao.sql index e0ecdab67a..9519320272 100644 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -1,3 +1,15 @@ +-- DROP TABLE IF EXISTS `zt_acllist`; +CREATE TABLE IF NOT EXISTS `zt_acllist` ( + `id` mediumint(9) NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `objectType` char(30) NOT NULL, + `objectID` mediumint(9) NOT NULL DEFAULT '0', + `type` char(40) NOT NULL DEFAULT 'whitelist', + `source` char(30) NOT NULL, + `desc` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + -- DROP TABLE IF EXISTS `zt_action`; CREATE TABLE IF NOT EXISTS `zt_action` ( `id` mediumint(8) unsigned NOT NULL auto_increment, diff --git a/module/programplan/model.php b/module/programplan/model.php index d477da86be..947030cf8d 100644 --- a/module/programplan/model.php +++ b/module/programplan/model.php @@ -564,6 +564,7 @@ class programplanModel extends model if(!dao::isError()) { $stageID = $this->dao->lastInsertID(); + $this->dao->update(TABLE_PROJECT)->set('`order`')->eq($stageID * 5)->where('id')->eq($stageID)->exec(); /* Add creators to stage teams and project teams. */ $member = new stdclass(); diff --git a/module/programplan/view/list.html.php b/module/programplan/view/list.html.php index a21f2d1057..e5a2212ad4 100644 --- a/module/programplan/view/list.html.php +++ b/module/programplan/view/list.html.php @@ -81,7 +81,7 @@ $(function(){$('#programplanForm').table();}) $(document).on('click', '.plan-toggle', function(e) { var $toggle = $(this); - var id = $(this).data('id'); + var id = $(this).data('id'); var isCollapsed = $toggle.toggleClass('collapsed').hasClass('collapsed'); $toggle.closest('[data-ride="table"]').find('tr.parent-' + id).toggle(!isCollapsed); diff --git a/module/project/control.php b/module/project/control.php index c79e7d60f6..61d135df3e 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -2332,11 +2332,11 @@ class project extends control return $this->send(array('result' => 'fail')); } - $orders = $this->post->projects; - $idList = array_keys($orders); + $idList = explode(',', $this->post->projects); $projects = $this->dao->select('id, `order`')->from(TABLE_PROJECT) ->where('id')->in($idList) ->fetchPairs('id', 'order'); + foreach($projects as $id => $order) { $newOrder = $orders[$id]; @@ -2387,6 +2387,7 @@ class project extends control public function all($status = 'undone', $projectID = 0, $orderBy = 'order_desc', $productID = 0, $recTotal = 0, $recPerPage = 10, $pageID = 1) { $this->app->loadLang('my'); + $this->app->loadLang('programplan'); if($this->projects) { $project = $this->commonAction($projectID); diff --git a/module/project/model.php b/module/project/model.php index c72b9beed9..6988566517 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -936,13 +936,29 @@ class projectModel extends model $projects = $this->getList($status, 0, $productID, $branch, $programID); $projects = $this->dao->select('*')->from(TABLE_PROJECT) ->where('id')->in(array_keys($projects)) + ->andWhere('grade')->eq(1) + ->andWhere('deleted')->eq('0') ->orderBy($orderBy) ->page($pager) ->fetchAll('id'); + if(empty($projects)) return array(); + /* In case of a waterfall model, obtain sub-stage data. */ + $PRJData = $this->getById($this->session->PRJ); + if($PRJData->model == 'waterfall') + { + $childrens = $this->dao->select('*')->from(TABLE_PROJECT) + ->where('parent')->in(array_keys($projects)) + ->andWhere('grade')->eq(2) + ->andWhere('deleted')->eq('0') + ->orderBy($orderBy) + ->page($pager) + ->fetchAll('id'); + $projects = $projects + $childrens; + } + $projectKeys = array_keys($projects); - $stats = array(); $hours = array(); $emptyHour = array('totalEstimate' => 0, 'totalConsumed' => 0, 'totalLeft' => 0, 'progress' => 0); @@ -996,7 +1012,7 @@ class projectModel extends model if($begin == '0000-00-00') $begin = $projects[$projectID]->openedDate; $projectBurns = $this->processBurnData($projectBurns, $itemCounts, $begin, $end); - /* Shorter names. */ + /* Shorter names. */ foreach($projectBurns as $projectBurn) { $projectBurn->name = substr($projectBurn->name, 5); @@ -1008,9 +1024,11 @@ class projectModel extends model } /* Process projects. */ + $parents = array(); + $children = array(); foreach($projects as $key => $project) { - // Process the end time. + /* Process the end time. */ $project->end = date(DT_DATE1, strtotime($project->end)); /* Judge whether the project is delayed. */ @@ -1028,10 +1046,17 @@ class projectModel extends model /* Process the hours. */ $project->hours = isset($hours[$project->id]) ? $hours[$project->id] : (object)$emptyHour; - $stats[] = $project; + $project->children = array(); + $project->grade == 1 ? $parents[$project->id] = $project : $children[$project->parent][] = $project; } - return $stats; + /* In the case of the waterfall model, calculate the sub-stage. */ + if($PRJData->model == 'waterfall') + { + foreach($parents as $id => $project) $project->children = isset($children[$id]) ? $children[$id] : array(); + } + + return $parents; } /** diff --git a/module/project/view/all.html.php b/module/project/view/all.html.php index 16107892b9..98868b2c0f 100644 --- a/module/project/view/all.html.php +++ b/module/project/view/all.html.php @@ -11,6 +11,19 @@ ?> +