diff --git a/lib/dao/dm.class.php b/lib/dao/dm.class.php index 290a15f676..80904a01ae 100644 --- a/lib/dao/dm.class.php +++ b/lib/dao/dm.class.php @@ -19,6 +19,19 @@ */ class dm extends dao { + /** + * 设置$table属性。 + * Set the $table property. + * + * @param string $table + * @access public + * @return void + */ + public function setTable($table) + { + $this->table = trim($table, '`'); + } + /** * 类MySQL的DESC语法。 * Desc table, show fields. @@ -36,7 +49,7 @@ class dm extends dao foreach($rawFields as $rawField) { $field = new stdClass(); - $field->Field = $rawField->field; + $field->Field = $rawField->COLUMN_NAME; $fields[] = $field; } return $fields; @@ -255,8 +268,7 @@ class dm extends dao public function getPKColumns() { - $table = trim($this->table, '`'); - $sql = "SELECT A.OWNER, A.TABLE_NAME, WM_CONCAT(B.COLUMN_NAME) PK_COLUMNS FROM ALL_CONSTRAINTS A, ALL_CONS_COLUMNS B where A.CONSTRAINT_type = 'P' AND A.OWNER = '{$this->config->db->name}' AND A.TABLE_NAME = '{$table}' AND B.OWNER = A.OWNER AND A.TABLE_NAME = B.TABLE_NAME GROUP BY A.OWNER, A.TABLE_NAME;"; + $sql = "SELECT A.OWNER, A.TABLE_NAME, WM_CONCAT(B.COLUMN_NAME) PK_COLUMNS FROM ALL_CONSTRAINTS A, ALL_CONS_COLUMNS B where A.CONSTRAINT_type = 'P' AND A.OWNER = '{$this->config->db->name}' AND A.TABLE_NAME = '{$this->table}' AND B.OWNER = A.OWNER AND A.TABLE_NAME = B.TABLE_NAME GROUP BY A.OWNER, A.TABLE_NAME;"; $content = $this->dbh->query($sql)->fetch(); return empty($content) ? false : $content->PK_COLUMNS; @@ -285,7 +297,7 @@ class dm extends dao if($this->method == 'replace' && !empty($this->sqlobj->data)) { - $insertSql = "INSERT INTO {$this->table} "; + $insertSql = "INSERT INTO \"{$this->table}\" "; $fields = '('; $values = 'VALUES('; foreach($this->sqlobj->data as $field => $value) @@ -310,10 +322,10 @@ class dm extends dao { if(isset($this->sqlobj->data->{$pk})) $conditions[] = " \"{$pk}\" = '{$this->sqlobj->data->{$pk}}'"; } - $updateSql .= ' WHERE ' . implode(' AND ', $conditions); + if(!empty($conditions)) $updateSql .= ' WHERE ' . implode(' AND ', $conditions); } - $deleteSql = "DELETE FROM {$this->table} WHERE "; + $deleteSql = "DELETE FROM \"{$this->table}\" WHERE "; $ingore = array(); $ingore['`zt_config`'] = array('value'); foreach($this->sqlobj->data as $field => $value) @@ -418,7 +430,7 @@ EOT; foreach($rawFields as $rawField) { $firstPOS = strpos($rawField->data_type, '('); - $type = substr($rawField->data_type, 0, $firstPOS > 0 ? $firstPOS : strlen($rawField->type)); + $type = substr($rawField->data_type, 0, $firstPOS > 0 ? $firstPOS : strlen($rawField->data_type)); $type = str_replace(array('big', 'small', 'medium', 'tiny', 'var'), '', $type); $field = array(); @@ -449,7 +461,7 @@ EOT; { $field['rule'] = 'skip'; } - $fields[$rawField->field] = $field; + $fields[$rawField->column_name] = $field; } return $fields; } diff --git a/module/program/control.php b/module/program/control.php index 602770d402..302a431421 100644 --- a/module/program/control.php +++ b/module/program/control.php @@ -291,7 +291,7 @@ class program extends control $hasUnfinished = $this->program->hasUnfinished($program); if($hasUnfinished) return print(js::error($this->lang->program->closeErrorMessage)); - $changes = $this->project->close($programID); + $changes = $this->project->close($programID, 'program'); if(dao::isError()) return print(js::error(dao::getError())); if($this->post->comment != '' or !empty($changes)) @@ -362,7 +362,7 @@ class program extends control if(!empty($_POST)) { - $changes = $this->project->activate($programID); + $changes = $this->project->activate($programID, 'program'); if(dao::isError()) return print(js::error(dao::getError())); if($this->post->comment != '' or !empty($changes)) @@ -400,7 +400,7 @@ class program extends control if(!empty($_POST)) { - $changes = $this->project->suspend($programID); + $changes = $this->project->suspend($programID, 'program'); if(dao::isError()) return print(js::error(dao::getError())); if($this->post->comment != '' or !empty($changes)) diff --git a/module/program/model.php b/module/program/model.php index 4684a61e0d..6410e39ec8 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -1131,7 +1131,7 @@ class programModel extends model */ public function hasUnfinished($program) { - $unfinished = $this->dao->select("count(IF(id != {$program->id}, true, null)) as count")->from(TABLE_PROJECT) + $unfinished = $this->dao->select("count(IF(id != {$program->id}, 1, null)) as count")->from(TABLE_PROJECT) ->where('type')->in('program, project') ->andWhere('path')->like($program->path . '%') ->andWhere('status')->ne('closed') diff --git a/module/project/model.php b/module/project/model.php index 3ca191bb05..565734be8d 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -192,7 +192,7 @@ class projectModel extends model if(!$project) return false; - if($project->end == '0000-00-00') $project->end = ''; + if(helper::isZeroDate($project->end)) $project->end = ''; $project = $this->loadModel('file')->replaceImgURL($project, 'desc'); return $project; } @@ -1875,15 +1875,16 @@ class projectModel extends model * Suspend project. * * @param int $projectID + * @param string $type * @access public * @return void */ - public function suspend($projectID) + public function suspend($projectID, $type = 'project') { $editorIdList = $this->config->project->editor->suspend['id']; if($this->app->rawModule == 'program') $editorIdList = $this->config->program->editor->suspend['id']; - $oldProject = $this->getById($projectID); + $oldProject = $this->getById($projectID, $type); $project = fixer::input('post') ->add('id', $projectID) ->setDefault('status', 'suspended') @@ -1911,12 +1912,13 @@ class projectModel extends model * Activate project. * * @param int $projectID + * @param string $type * @access public * @return void */ - public function activate($projectID) + public function activate($projectID, $type = 'project') { - $oldProject = $this->getById($projectID); + $oldProject = $this->getById($projectID, $type); $now = helper::now(); $editorIdList = $this->config->project->editor->activate['id']; @@ -1928,7 +1930,7 @@ class projectModel extends model ->setDefault('status', 'doing') ->setDefault('lastEditedBy', $this->app->user->account) ->setDefault('lastEditedDate', $now) - ->setIF($oldProject->realBegan == '0000-00-00', 'realBegan', helper::today()) + ->setIF(!helper::isZeroDate($oldProject->realBegan), 'realBegan', helper::today()) ->stripTags($editorIdList, $this->config->allowedTags) ->remove('comment,readjustTime,readjustTask') ->get(); @@ -1999,12 +2001,13 @@ class projectModel extends model * Close project. * * @param int $projectID + * @param string $type * @access public * @return array */ - public function close($projectID) + public function close($projectID, $type = 'project') { - $oldProject = $this->getById($projectID); + $oldProject = $this->getById($projectID, $type); $now = helper::now(); $editorIdList = $this->config->project->editor->close['id'];