diff --git a/db/update15.0.sql b/db/update15.0.sql index 38589e5355..22cb22f4be 100644 --- a/db/update15.0.sql +++ b/db/update15.0.sql @@ -20,6 +20,8 @@ ALTER TABLE `zt_project` ADD `parentVersion` smallint(6) NOT NULL AFTER `version ALTER TABLE `zt_project` ADD `planDuration` int(11) NOT NULL AFTER `parentVersion`; ALTER TABLE `zt_project` ADD `realDuration` int(11) NOT NULL AFTER `planDuration`; ALTER TABLE `zt_project` ADD `output` text NOT NULL AFTER `milestone`; +ALTER TABLE `zt_project` ADD `lastEditedBy` varchar(30) NOT NULL DEFAULT '' AFTER `openedVersion`; +ALTER TABLE `zt_project` ADD `lastEditedDate` datetime NOT NULL AFTER `lastEditedBy`; ALTER TABLE `zt_product` ADD `program` mediumint(8) unsigned NOT NULL AFTER `id`; ALTER TABLE `zt_product` ADD `bind` enum('0','1') NOT NULL DEFAULT '0' AFTER `code`; diff --git a/db/zentao.sql b/db/zentao.sql index 4bdc98a4b4..6329d56e44 100644 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -683,6 +683,8 @@ CREATE TABLE IF NOT EXISTS `zt_project` ( `openedBy` varchar(30) NOT NULL DEFAULT '', `openedDate` datetime NOT NULL, `openedVersion` varchar(20) NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, `closedBy` varchar(30) NOT NULL DEFAULT '', `closedDate` datetime NOT NULL, `canceledBy` varchar(30) NOT NULL DEFAULT '', diff --git a/module/program/control.php b/module/program/control.php index 4a1117393a..a14256563b 100644 --- a/module/program/control.php +++ b/module/program/control.php @@ -1654,7 +1654,12 @@ class program extends control { $newID = array_shift($idList); if($id == $newID) continue; - $this->dao->update(TABLE_PROJECT)->set('`order`')->eq($order)->where('id')->eq($newID)->exec(); + $this->dao->update(TABLE_PROJECT) + ->set('`order`')->eq($order) + ->set('lastEditedBy')->eq($this->app->user->account) + ->set('lastEditedDate')->eq(helper::now()) + ->where('id')->eq($newID) + ->exec(); } } diff --git a/module/program/model.php b/module/program/model.php index 53036f9182..352fe821d5 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -1480,6 +1480,8 @@ class programModel extends model ->setDefault('openedBy', $this->app->user->account) ->setDefault('openedDate', helper::now()) ->setDefault('team', substr($this->post->name, 0, 30)) + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', helper::now()) ->add('type', 'project') ->join('whitelist', ',') ->stripTags($this->config->program->editor->prjcreate['id'], $this->config->allowedTags) @@ -1665,6 +1667,8 @@ class programModel extends model $project = fixer::input('post') ->setDefault('team', substr($this->post->name, 0, 30)) + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', helper::now()) ->setIF($this->post->delta == 999, 'end', LONG_TIME) ->setIF($this->post->delta == 999, 'days', 0) ->setIF($this->post->begin == '0000-00-00', 'begin', '') @@ -1783,9 +1787,11 @@ class programModel extends model $projectID = (int)$projectID; $projects[$projectID] = new stdClass(); - $projects[$projectID]->name = $projectName; - $projects[$projectID]->parent = $parentProgram; - $projects[$projectID]->PM = $data->PMs[$projectID]; + $projects[$projectID]->name = $projectName; + $projects[$projectID]->parent = $parentProgram; + $projects[$projectID]->PM = $data->PMs[$projectID]; + $projects[$projectID]->lastEditedBy = $this->app->user->account; + $projects[$projectID]->lastEditedDate = helper::now(); /* Check unique name for edited projects. */ if(isset($nameList[$projectName])) dao::$errors['name'][] = 'project#' . $projectID . sprintf($this->lang->error->unique, $this->lang->program->PRJName, $projectName); diff --git a/module/project/model.php b/module/project/model.php index 9a2234f7c2..9c1589cb95 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -342,6 +342,8 @@ class projectModel extends model ->setDefault('openedBy', $this->app->user->account) ->setDefault('openedDate', helper::now()) ->setDefault('openedVersion', $this->config->version) + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', helper::now()) ->setDefault('team', substr($this->post->name,0, 30)) ->setIF($this->config->systemMode == 'new', 'project', $this->session->PRJ) ->setIF($this->config->systemMode == 'new', 'parent', $this->session->PRJ) @@ -470,6 +472,8 @@ class projectModel extends model /* Get the data from the post. */ $project = fixer::input('post') + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', helper::now()) ->setIF(helper::isZeroDate($this->post->begin), 'begin', '') ->setIF(helper::isZeroDate($this->post->end), 'end', '') ->setIF($this->post->acl != 'custom', 'whitelist', '') @@ -565,21 +569,23 @@ class projectModel extends model $projectID = (int)$projectID; $projects[$projectID] = new stdClass(); - $projects[$projectID]->name = $projectName; - $projects[$projectID]->code = $projectCode; - $projects[$projectID]->PM = $data->PMs[$projectID]; - $projects[$projectID]->PO = $data->POs[$projectID]; - $projects[$projectID]->QD = $data->QDs[$projectID]; - $projects[$projectID]->RD = $data->RDs[$projectID]; - $projects[$projectID]->lifetime = $data->lifetimes[$projectID]; - $projects[$projectID]->attribute = $data->attributes[$projectID]; - $projects[$projectID]->status = $data->statuses[$projectID]; - $projects[$projectID]->begin = $data->begins[$projectID]; - $projects[$projectID]->end = $data->ends[$projectID]; - $projects[$projectID]->team = $data->teams[$projectID]; - $projects[$projectID]->desc = htmlspecialchars_decode($data->descs[$projectID]); - $projects[$projectID]->days = $data->dayses[$projectID]; - $projects[$projectID]->order = $data->orders[$projectID]; + $projects[$projectID]->name = $projectName; + $projects[$projectID]->code = $projectCode; + $projects[$projectID]->PM = $data->PMs[$projectID]; + $projects[$projectID]->PO = $data->POs[$projectID]; + $projects[$projectID]->QD = $data->QDs[$projectID]; + $projects[$projectID]->RD = $data->RDs[$projectID]; + $projects[$projectID]->lifetime = $data->lifetimes[$projectID]; + $projects[$projectID]->attribute = $data->attributes[$projectID]; + $projects[$projectID]->status = $data->statuses[$projectID]; + $projects[$projectID]->begin = $data->begins[$projectID]; + $projects[$projectID]->end = $data->ends[$projectID]; + $projects[$projectID]->team = $data->teams[$projectID]; + $projects[$projectID]->desc = htmlspecialchars_decode($data->descs[$projectID]); + $projects[$projectID]->days = $data->dayses[$projectID]; + $projects[$projectID]->order = $data->orders[$projectID]; + $projects[$projectID]->lastEditedBy = $this->app->user->account; + $projects[$projectID]->lastEditedDate = helper::now(); /* Check unique name for edited projects. */ if(isset($nameList[$projectName])) dao::$errors['name'][] = 'project#' . $projectID . sprintf($this->lang->error->unique, $this->lang->project->name, $projectName); @@ -652,6 +658,8 @@ class projectModel extends model $project = fixer::input('post') ->add('realBegan', $now) ->setDefault('status', 'doing') + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', $now) ->remove('comment')->get(); $this->dao->update(TABLE_PROJECT)->data($project)->autoCheck()->where('id')->eq((int)$projectID)->exec(); @@ -670,7 +678,11 @@ class projectModel extends model { $oldProject = $this->getById($projectID); $now = helper::now(); - $project = fixer::input('post')->remove('comment')->get(); + $project = fixer::input('post') + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', $now) + ->remove('comment') + ->get(); $this->dao->update(TABLE_PROJECT)->data($project) ->autoCheck() @@ -693,6 +705,8 @@ class projectModel extends model $now = helper::now(); $project = fixer::input('post') ->setDefault('status', 'suspended') + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', $now) ->remove('comment')->get(); $this->dao->update(TABLE_PROJECT)->data($project) @@ -716,6 +730,8 @@ class projectModel extends model $now = helper::now(); $project = fixer::input('post') ->setDefault('status', 'doing') + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', $now) ->remove('comment,readjustTime,readjustTask') ->get(); @@ -783,6 +799,8 @@ class projectModel extends model ->setDefault('status', 'closed') ->setDefault('closedBy', $this->app->user->account) ->setDefault('closedDate', $now) + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', $now) ->remove('comment') ->get(); diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 2dbfa89bf5..906dc5834f 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -1060,6 +1060,7 @@ class upgradeModel extends model $releases = $this->dao->select('id, `desc`')->from(TABLE_RELEASE)->fetchAll(); $projects = $this->dao->select('id, `desc`, goal')->from(TABLE_PROJECT)->fetchAll(); $builds = $this->dao->select('id, `desc`')->from(TABLE_BUILD)->fetchAll(); + $account = isset($this->app->user->account) ? $this->app->user->account : ''; foreach($products as $product) { @@ -1084,8 +1085,10 @@ class upgradeModel extends model foreach($projects as $project) { - $project->desc = nl2br($project->desc); - $project->goal = nl2br($project->goal); + $project->desc = nl2br($project->desc); + $project->goal = nl2br($project->goal); + $project->lastEditedBy = $account; + $project->lastEditedDate = helper::now(); $this->dao->update(TABLE_PROJECT)->data($project)->where('id')->eq($project->id)->exec(); $this->saveLogs($this->dao->get()); } @@ -4068,19 +4071,21 @@ class upgradeModel extends model /* Insert project. */ $project = new stdclass(); - $project->name = $data->PRJName; - $project->type = 'project'; - $project->model = 'scrum'; - $project->parent = $programID; - $project->status = $data->PRJStatus; - $project->begin = $data->begin; - $project->end = isset($data->end) ? $data->end : LONG_TIME; - $project->PM = $data->PM; - $project->auth = 'extend'; - $project->openedBy = $account; - $project->openedDate = helper::now(); - $project->openedVersion = $this->config->version; - $project->acl = $data->acl; + $project->name = $data->PRJName; + $project->type = 'project'; + $project->model = 'scrum'; + $project->parent = $programID; + $project->status = $data->PRJStatus; + $project->begin = $data->begin; + $project->end = isset($data->end) ? $data->end : LONG_TIME; + $project->PM = $data->PM; + $project->auth = 'extend'; + $project->openedBy = $account; + $project->openedDate = helper::now(); + $project->openedVersion = $this->config->version; + $project->lastEditedBy = $account; + $project->lastEditedDate = helper::now(); + $project->acl = $data->acl; $this->lang->project->name = $this->lang->program->PRJName;