diff --git a/app/Controllers/Admin/UserController.php b/app/Controllers/Admin/UserController.php index 1191837..9dd6c2e 100644 --- a/app/Controllers/Admin/UserController.php +++ b/app/Controllers/Admin/UserController.php @@ -23,7 +23,7 @@ class UserController extends \App\Controllers\Admin\AdminController 'passwd' => 'required|trim|min_length[4]|max_length[130]', 'name' => 'required|min_length[2]|max_length[20]', 'email' => 'required|valid_email', - 'role' => 'required|in_list[member,manager,cloudflare,director,master]', + 'role' => 'required|in_list[user,manager,cloudflare,director,master]', ] ], 'update' => [ @@ -33,7 +33,7 @@ class UserController extends \App\Controllers\Admin\AdminController 'passwd' => 'required|trim|min_length[4]|max_length[30]', 'name' => 'required|min_length[2]|max_length[20]', 'email' => 'required|valid_email', - 'role' => 'required|in_list[member,manager,cloudflare,director,master]', + 'role' => 'required|in_list[user,manager,cloudflare,director,master]', ] ], 'view' => [ @@ -57,21 +57,6 @@ class UserController extends \App\Controllers\Admin\AdminController $this->_viewDatas['className'] = $this->_className; } - //Insert관련 - protected function insert_process() - { - //암호값 hash작업 - $this->_viewDatas['fieldDatas']['passwd'] = password_hash($this->_viewDatas['fieldDatas']['passwd'], PASSWORD_DEFAULT); - return parent::insert_process(); - } - //Update관련 - protected function update_process($entity) - { - //암호값 hash작업 - $entity->passwd = password_hash($entity->passwd, PASSWORD_DEFAULT); - return parent::update_process($entity); - } - ////Action 모음 //Insert관련 final public function insert() diff --git a/app/Controllers/Common/CommonController.php b/app/Controllers/Common/CommonController.php index d7076e5..9427203 100644 --- a/app/Controllers/Common/CommonController.php +++ b/app/Controllers/Common/CommonController.php @@ -10,7 +10,7 @@ use Psr\Log\LoggerInterface; class CommonController extends BaseController { - use CommonTrait; + use \App\Controllers\Trait\CommonTrait; protected $_className = ''; protected $_model = null; @@ -28,6 +28,49 @@ class CommonController extends BaseController ]; } + //Field별 Form Option용 + protected function getFieldFormOption(string $field): array + { + switch ($field) { + default: + $temps = lang($this->_className . '.' . strtoupper($field)); + if (!is_array($temps)) { + throw new \Exception(__FUNCTION__ . "에서 {$field}의 데이터가 array가 아닙니다.\n" . var_export($temps, true)); + } + return array_merge( + [DEFAULTS['EMPTY'] => lang($this->_className . '.label.' . $field) . ' 선택'], + lang($this->_className . '.' . strtoupper($field)) + ); + break; + } + } + //Field별 Form Option용 + final protected function getFieldFormOptions(array $fieldFilters): array + { + $fieldFormOptions = array(); + foreach ($fieldFilters as $field) { + if (is_array($field)) { + throw new \Exception(__FUNCTION__ . "에서 field가 array 입니다.\n" . var_export($fieldFilters, true)); + } + $fieldFormOptions[$field] = $this->getFieldFormOption($field); + } + return $fieldFormOptions; + } + //Field별 Form Rule용 + final protected function getFieldRules(array $fields, array $fieldRules): array + { + $tempRules = $this->_model->getValidationRules(['only' => $fields]); + foreach ($fields as $field) { + if (is_array($field)) { + throw new \Exception(__FUNCTION__ . "에서 field가 array 입니다.\n" . var_export($fieldRules, true)); + } + if (array_key_exists($field, $fieldRules)) { + $tempRules[$field] = $fieldRules[$field]; + } + } + return $tempRules; + } + //Insert관련 protected function insert_init() { @@ -58,16 +101,16 @@ class CommonController extends BaseController protected function insert_validate() { - //변경할 값 확인 - if (!$this->validate($this->_viewDatas['fieldRules'])) { - throw new \Exception("{$this->_viewDatas['title']}의 검증 오류발생\n" . implode("\n", $this->validator->getErrors())); - } //변경된 값 적용 $this->_viewDatas['fieldDatas'] = array(); foreach ($this->_viewDatas['fields'] as $field) { $this->_viewDatas['fieldDatas'][$field] = rtrim($this->request->getVar($field)); Log::add("info", "{$field} : {$this->_viewDatas['fieldDatas'][$field]}"); } + //변경할 값 확인 + if (!$this->validate($this->_viewDatas['fieldRules'])) { + throw new \Exception("{$this->_viewDatas['title']}의 검증 오류발생\n" . implode("\n", $this->validator->getErrors())); + } } protected function insert_process() { @@ -84,7 +127,6 @@ class CommonController extends BaseController Log::save("{$this->_viewDatas['title']} {$message}"); return alert_CommonHelper($message, session()->get(LOGINS['RETURN_URL'])); } catch (\Exception $e) { - throw new \Exception($e->getMessage()); $message = __FUNCTION__ . " 실패하였습니다."; Log::add("warning", $e->getMessage()); Log::add("warning", var_export($this->_viewDatas['fieldDatas'], true)); @@ -124,10 +166,6 @@ class CommonController extends BaseController } protected function update_validate($entity) { - //변경할 값 확인 - if (!$this->validate($this->_viewDatas['fieldRules'])) { - throw new \Exception("{$this->_viewDatas['title']}의 검증 오류발생\n" . implode("\n", $this->validator->getErrors())); - } //변경된 값 적용 $this->_viewDatas['fieldDatas'] = array(); foreach ($this->_viewDatas['fields'] as $field) { @@ -142,6 +180,10 @@ class CommonController extends BaseController ); } } + //변경할 값 확인 + if (!$this->validate($this->_viewDatas['fieldRules'])) { + throw new \Exception("{$this->_viewDatas['title']}의 검증 오류발생\n" . implode("\n", $this->validator->getErrors())); + } return $entity; } protected function update_process($entity) diff --git a/app/Controllers/Common/CommonTrait.php b/app/Controllers/Common/CommonTrait.php deleted file mode 100644 index 63318f2..0000000 --- a/app/Controllers/Common/CommonTrait.php +++ /dev/null @@ -1,49 +0,0 @@ -_className . '.' . strtoupper($field)); - if (!is_array($temps)) { - throw new \Exception(__FUNCTION__ . "에서 {$field}의 데이터가 array가 아닙니다.\n" . var_export($temps, true)); - } - return array_merge( - [DEFAULTS['EMPTY'] => lang($this->_className . '.label.' . $field) . ' 선택'], - lang($this->_className . '.' . strtoupper($field)) - ); - break; - } - } - //Field별 Form Option용 - final protected function getFieldFormOptions(array $fieldFilters): array - { - $fieldFormOptions = array(); - foreach ($fieldFilters as $field) { - if (is_array($field)) { - throw new \Exception(__FUNCTION__ . "에서 field가 array 입니다.\n" . var_export($fieldFilters, true)); - } - $fieldFormOptions[$field] = $this->getFieldFormOption($field); - } - return $fieldFormOptions; - } - //Field별 Form Rule용 - final protected function getFieldRules(array $fields, array $fieldRules): array - { - $tempRules = $this->_model->getValidationRules(['only' => $fields]); - foreach ($fields as $field) { - if (is_array($field)) { - throw new \Exception(__FUNCTION__ . "에서 field가 array 입니다.\n" . var_export($fieldRules, true)); - } - if (array_key_exists($field, $fieldRules)) { - $tempRules[$field] = $fieldRules[$field]; - } - } - return $tempRules; - } -} diff --git a/app/Controllers/Trait/CommonTrait.php b/app/Controllers/Trait/CommonTrait.php new file mode 100644 index 0000000..5e40fd9 --- /dev/null +++ b/app/Controllers/Trait/CommonTrait.php @@ -0,0 +1,7 @@ +attributes['passwd']; } - public function setPassword(string $password) + public function getEncryptedPassword(string $password) { - $this->attributes['passwd'] = password_hash($password, PASSWORD_DEFAULT); + return password_hash($password, PASSWORD_DEFAULT); } } diff --git a/app/Libraries/Adapter/Auth/GoogleAdapter.php b/app/Libraries/Adapter/Auth/GoogleAdapter.php index 267c1c1..19f65c9 100644 --- a/app/Libraries/Adapter/Auth/GoogleAdapter.php +++ b/app/Libraries/Adapter/Auth/GoogleAdapter.php @@ -99,7 +99,7 @@ class GoogleAdapter extends Adapter // 'verifiedEmail' => true, // )) //조건에 해당하는 사용자가 있는지 검사 - $snsEntity = $this->getUserModel()->asObject(UserSNSEntity::class)->where( + $snsEntity = $this->getUserSNSModel()->asObject(UserSNSEntity::class)->where( array("site" => $this->getSiteName(), "uid" => $result['id']) )->first(); if (is_null($snsEntity)) { diff --git a/app/Models/CommonModel.php b/app/Models/CommonModel.php index 0fd224e..8fb2a18 100644 --- a/app/Models/CommonModel.php +++ b/app/Models/CommonModel.php @@ -2,12 +2,12 @@ namespace App\Models; -use App\Libraries\Log\Log; use CodeIgniter\Model; +use App\Libraries\Log\Log; class CommonModel extends Model { - // use CommonTrait; + use Trait\CommonTrait; protected $DBGroup = 'default'; // protected $table = 'user'; @@ -42,6 +42,31 @@ class CommonModel extends Model protected $beforeDelete = []; protected $afterDelete = []; + final protected function create_process($entity) + { + if (!$this->save($entity)) { + Log::add("error", __FUNCTION__ . "에서 호출:" . $this->getLastQuery()); + Log::add("error", implode("\n", $this->errors())); + throw new \Exception(__FUNCTION__ . " 오류 발생.\n" . var_export($this->errors(), true)); + } + $pk = $this->primaryKey; + $entity->$pk = $this->insertID(); + return $entity; + } + final protected function modify_process($entity) + { + if ($entity->hasChanged()) { + if (!$this->save($entity)) { + Log::add("error", __FUNCTION__ . "에서 호출:" . $this->getLastQuery()); + Log::add("error", implode("\n", $this->errors())); + throw new \Exception(__FUNCTION__ . " 오류 발생.\n" . var_export($this->errors(), true)); + } + } else { + throw new \Exception(__FUNCTION__ . " 오류 발생.\n 기존정보와 동일하여 수정되지 않았습니다."); + } + return $entity; + } + //Index관련 public function setIndexWordFilter(string $word) { diff --git a/app/Models/CommonTrait.php b/app/Models/CommonTrait.php deleted file mode 100644 index a2986d8..0000000 --- a/app/Models/CommonTrait.php +++ /dev/null @@ -1,41 +0,0 @@ -allowedFields as $field) { - if ($entity->$field != $datas[$field]) { - $entity->$field = $datas[$field]; - } - } - return $entity; - } - protected function create_CommonTrait($entity, array $datas) - { - $entity = $this->setEntityDatas_CommonTrait($entity, $datas); - if (!$this->save($entity)) { - Log::add("error", __FUNCTION__ . "에서 호출:" . $this->getLastQuery()); - Log::add("error", implode("\n", $this->errors())); - throw new \Exception(__FUNCTION__ . " 오류 발생.\n" . var_export($this->errors(), true)); - } - $entity->$this->primaryKey = $this->insertID(); - return $entity; - } - protected function modify_CommonTrait($entity, array $datas) - { - $entity = $this->setEntityDatas_CommonTrait($entity, $datas); - if ($entity->hasChanged()) { - if (!$this->save($entity)) { - Log::add("error", __FUNCTION__ . "에서 호출:" . $this->getLastQuery()); - Log::add("error", implode("\n", $this->errors())); - throw new \Exception(__FUNCTION__ . " 오류 발생.\n" . var_export($this->errors(), true)); - } - } - return $entity; - } -} diff --git a/app/Models/HPILOModel.php b/app/Models/HPILOModel.php index 586d47c..9707ab4 100644 --- a/app/Models/HPILOModel.php +++ b/app/Models/HPILOModel.php @@ -37,11 +37,16 @@ class HPILOModel extends CommonModel } public function create(array $datas): HPILOEntity { - return $this->create_CommonTrait(new HPILOEntity($datas), $datas); + return $this->create_process(new HPILOEntity($datas)); } public function modify(HPILOEntity $entity, array $datas): HPILOEntity { - return $this->modify_CommonTrait($entity, $datas); + foreach ($datas as $field => $value) { + if ($entity->$field != $datas[$field]) { + $entity->$field = $value; + } + } + return $this->modify_process($entity); } //Index관련 diff --git a/app/Models/LoggerModel.php b/app/Models/LoggerModel.php index e177525..cb3bb9d 100644 --- a/app/Models/LoggerModel.php +++ b/app/Models/LoggerModel.php @@ -9,7 +9,7 @@ class LoggerModel extends CommonModel protected $table = 'logger'; // protected $primaryKey = 'uid'; // protected $useAutoIncrement = true; - protected $allowedFields = ['user_uid', 'title', 'content', 'status', 'created_at']; + protected $allowedFields = ['user_uid', 'title', 'content', 'status', 'updated_at']; protected $validationRules = [ 'uid' => 'if_exist|numeric', 'user_uid' => 'if_exist|numeric', @@ -30,12 +30,18 @@ class LoggerModel extends CommonModel } public function create(array $datas): LoggerEntity { - $datas['user_uid'] = session()->get('uid'); - return $this->create_CommonTrait(new LoggerEntity($datas), $datas); + $entity = new LoggerEntity($datas); + $entity->user_uid = session()->get('uid'); + return parent::modify_process($entity); } public function modify(LoggerEntity $entity, array $datas): LoggerEntity { - return $this->modify_CommonTrait($entity, $datas); + foreach ($datas as $field => $value) { + if ($entity->$field != $datas[$field]) { + $entity->$field = $value; + } + } + return parent::modify_process($entity); } //Index관련 diff --git a/app/Models/Trait/CommonTrait.php b/app/Models/Trait/CommonTrait.php new file mode 100644 index 0000000..1e6e962 --- /dev/null +++ b/app/Models/Trait/CommonTrait.php @@ -0,0 +1,7 @@ + 'if_exist|numeric', 'id' => 'if_exist|min_length[4]|max_length[20]', @@ -18,7 +18,6 @@ class UserModel extends CommonModel 'name' => 'if_exist|min_length[2]|max_length[20]', 'email' => 'if_exist|valid_email', 'role' => 'if_exist|in_list[user,manager,cloudflare,director,master]', - 'oauth_id' => 'if_exist|trim|min_length[4]', 'status' => 'if_exist|in_list[use,unuse,standby]', 'updated_at' => 'if_exist|valid_date', 'created_at' => 'if_exist|valid_date', @@ -34,11 +33,20 @@ class UserModel extends CommonModel } public function create(array $datas): UserEntity { - return $this->create_CommonTrait(new UserEntity($datas), $datas); + $entity = new UserEntity(); + foreach ($datas as $field => $value) { + $entity->$field = $field === 'passwd' ? $entity->getEncryptedPassword($value) : $value; + } + return parent::create_process($entity); } public function modify(UserEntity $entity, array $datas): UserEntity { - return $this->modify_CommonTrait($entity, $datas); + foreach ($datas as $field => $value) { + if ($entity->$field != $datas[$field]) { + $entity->$field = $field === 'passwd' ? $entity->getEncryptedPassword($value) : $value; + } + } + return parent::modify_process($entity); } //Index관련 diff --git a/app/Models/UserSNSModel.php b/app/Models/UserSNSModel.php index 250fa50..84eecc9 100644 --- a/app/Models/UserSNSModel.php +++ b/app/Models/UserSNSModel.php @@ -37,11 +37,16 @@ class UserSNSModel extends CommonModel $entity->name = $datas['name']; $entity->email = $datas['email']; $entity->status = "standby"; - return $this->create_CommonTrait($entity, $datas); + return $this->create_process($entity); } public function modify(UserSNSEntity $entity, array $datas): UserSNSEntity { - return $this->modify_CommonTrait($entity, $datas); + foreach ($datas as $field => $value) { + if ($entity->$field != $datas[$field]) { + $entity->$field = $value; + } + } + return $this->modify_process($entity); } //Index관련