diff --git a/module/program/config/form.php b/module/program/config/form.php index d02830cddd..e1c48dcda5 100644 --- a/module/program/config/form.php +++ b/module/program/config/form.php @@ -4,9 +4,16 @@ $now = helper::now(); global $app; $config->program->form = new stdclass(); -$config->program->form->close['realEnd'] = array('type' => 'string', 'required' => true, 'default' => $now, 'filter' => 'trim'); -$config->program->form->close['status'] = array('type' => 'string', 'required' => false, 'default' => 'closed'); -$config->program->form->close['closedDate'] = array('type' => 'string', 'required' => false, 'default' => $now); -$config->program->form->close['closedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); -$config->program->form->close['lastEditedDate'] = array('type' => 'string', 'required' => false, 'default' => $now); -$config->program->form->close['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); +$config->program->form->close['realEnd'] = array('type' => 'date', 'required' => true, 'default' => $now, 'filter' => 'trim'); +$config->program->form->close['status'] = array('type' => 'string', 'required' => false, 'default' => 'closed'); +$config->program->form->close['closedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); +$config->program->form->close['closedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); +$config->program->form->close['lastEditedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); +$config->program->form->close['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); + +$config->program->form->activate['begin'] = array('type' => 'date', 'required' => false, 'default' => null, 'filter' => 'trim'); +$config->program->form->activate['end'] = array('type' => 'date', 'required' => false, 'default' => null, 'filter' => 'trim'); +$config->program->form->activate['status'] = array('type' => 'string', 'required' => false, 'default' => 'doing'); +$config->program->form->activate['realEnd'] = array('type' => 'date', 'required' => false, 'default' => null); +$config->program->form->activate['lastEditedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); +$config->program->form->activate['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); diff --git a/module/program/control.php b/module/program/control.php index c99de0ed97..a75db57295 100644 --- a/module/program/control.php +++ b/module/program/control.php @@ -301,23 +301,25 @@ class program extends control } /** + * 激活一个项目集。 * Activate a program. * * @param int $programID * @access public * @return void */ - public function activate($programID = 0) + public function activate(int $programID = 0) { $this->loadModel('action'); $program = $this->program->getByID($programID); if(!empty($_POST)) { - $changes = $this->program->activate($programID); + $programData = form::data()->get(); + $changes = $this->program->activate($programData, $program); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); - if($this->post->comment != '' or !empty($changes)) + if($this->post->comment != '' || !empty($changes)) { $actionID = $this->action->create('program', $programID, 'Activated', $this->post->comment); $this->action->logHistory($actionID, $changes); diff --git a/module/program/model.php b/module/program/model.php index 03172d3ed7..04230b4c00 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -992,32 +992,29 @@ class programModel extends model } /** + * 激活一个项目集。 * Activate a program. * - * @param int $programID + * @param object $program + * @param object $oldProgram * @access public * @return array|false */ - public function activate(int $programID) :array|false + public function activate(object $program, $oldProgram) :array|false { - $oldProgram = $this->getByID($programID); - $now = helper::now(); - - $program = fixer::input('post') - ->setDefault('realEnd','') - ->setDefault('status', 'doing') - ->setDefault('lastEditedBy', $this->app->user->account) - ->setDefault('lastEditedDate', $now) - ->setIF(!helper::isZeroDate($oldProgram->realBegan), 'realBegan', helper::today()) - ->stripTags($this->config->program->editor->activate['id'], $this->config->allowedTags) - ->remove('comment') - ->get(); + if($program->begin > $program->end) + { + dao::$errors['end'] = sprintf($this->lang->error->ge, $this->lang->program->end, $this->lang->program->begin); + return false; + } + if(!helper::isZeroDate($oldProgram->realBegan)) $program->realBegan = helper::today(); $program = $this->loadModel('file')->processImgURL($program, $this->config->program->editor->activate['id'], $this->post->uid); + $this->dao->update(TABLE_PROJECT)->data($program) ->autoCheck() ->checkFlow() - ->where('id')->eq((int)$programID) + ->where('id')->eq($oldProgram->id) ->exec(); if(dao::isError()) return false;