From 0988413e94513dc2173873cae0c4746d9b215b69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=B5=9C=EC=A4=80=ED=9D=A0?= Date: Thu, 20 Jul 2023 12:36:21 +0900 Subject: [PATCH] servermgrv2 init... --- app/Config/Constants.php | 61 ++- app/Config/Routes.php | 10 +- app/Controllers/Admin/AdminController.php | 5 +- app/Controllers/Admin/Home.php | 11 +- app/Controllers/Admin/LoggerController.php | 2 +- app/Controllers/Admin/UserSNSController.php | 2 +- .../{Common => }/AuthController.php | 28 +- app/Controllers/BaseController.php | 492 ++++++++++++++++- app/Controllers/Common/CommonController.php | 505 ------------------ app/Controllers/Front/FrontController.php | 6 +- app/Entities/UserEntity.php | 4 - app/Filters/AuthFilter.php | 35 +- app/Language/en/Admin/UserSNS.php | 1 + app/Libraries/Adapter/Auth/Adapter.php | 15 +- app/Libraries/Adapter/Auth/GoogleAdapter.php | 15 +- app/Libraries/Adapter/Auth/LocalAdapter.php | 1 + app/Models/CommonModel.php | 44 +- app/Models/LoggerModel.php | 33 +- app/Models/UserModel.php | 40 +- app/Models/UserSNSModel.php | 33 +- app/Trait/CommonTrait.php | 35 -- app/Views/layouts/admin/member_link.php | 31 +- 22 files changed, 708 insertions(+), 701 deletions(-) rename app/Controllers/{Common => }/AuthController.php (69%) delete mode 100644 app/Controllers/Common/CommonController.php delete mode 100644 app/Trait/CommonTrait.php diff --git a/app/Config/Constants.php b/app/Config/Constants.php index 5a92cb9..fdc842e 100644 --- a/app/Config/Constants.php +++ b/app/Config/Constants.php @@ -134,46 +134,44 @@ define('LAYOUTS', [ ] ]); -//Login 관련 -define('LOGINS', [ - 'ISLOGIN' => getenv('login.islogin.name') ? getenv('login.islogin.name') : "isLoggedIn", - 'RETURN_URL' => getenv('login.return_url.name') ? getenv('login.return_url.name') : "return_url", - 'USER' => [ - 'NAME' => getenv('login.user.name') ? getenv('login.user.name') : "user", - 'FIELDS' => ['PK' => 'uid', 'TITLE' => 'name', 'ROLE' => 'role'], - ] +//SESSION 관련 +define('SESSION_NAMES', [ + 'RETURN_URL' => "return_url", + 'USER' => "user", +]); +//SESSION USER FIELD관련 +define('SESSION_USER_FIELDS', [ + 'PK' => 'uid', 'TITLE' => 'name', 'ROLE' => 'role' ]); //인증 관련 -define('AUTHS', [ - 'DEBUG' => getenv('auth.debug') == 'true' ? true : false, - 'ADAPTERS' => getenv('auth.adapters') ? implode(",", getenv('auth.adapters')) : ['Local', 'Google'], +define('AUTH_ADAPTERS', [ + 'Local' => [ + 'DEBUG' => getenv("auth.loca.debug") ?: false, + ], 'Google' => [ - 'ICON' => '', + 'DEBUG' => getenv("auth.google.debug") ?: false, + 'ICON' => getenv("auth.google.icon") ?: '', 'CLIENT_ID' => getenv("auth.google.client.id"), 'CLIENT_KEY' => getenv("auth.google.client.key"), 'CALLBACK_URL' => getenv("auth.google.client.callback_url"), - 'TOKEN_NAME' => getenv('auth.google.client.token_name') ? getenv('auth.google.client.token_name') : "access_token", + 'TOKEN_NAME' => getenv('auth.google.client.token_name') ?: "access_token", ], ]); //등급 관련 define('ROLES', [ - 'user' => '일반회원', 'vip' => 'VIP회원', - 'bronze' => '일반판매자', 'silver' => '고급판매자', 'gold' => '파워리셀러', 'mallmaster' => "쇼핑몰관리자", - 'manager' => '관리자', 'cloudflare' => "Cloudflare관리자", 'director' => '감독자', - 'system' => '서버관리자', 'developer' => '개발자', 'master' => "마스터", -]); -define('STATUS', [ - "use" => "사용", - "unuse" => "사용않함", + 'CUSTOMERS' => ['user' => '일반회원', 'vip' => 'VIP회원'], + 'SELLERS' => ['bronze' => '일반판매자', 'silver' => '고급판매자', 'gold' => '파워리셀러'], + 'OPERATORS' => ['manager' => '관리자', 'cloudflare' => "Cloudflare관리자", 'director' => '감독자', 'master' => "마스터"], ]); +define('STATUS', ["use" => "사용", "unuse" => "사용않함",]); //Upload , Download 관련 define('PATHS', [ - 'EXCEL' => getenv('path.excel') ? getenv('path.excel') : "../writable/Excel", - 'UPLOAD' => getenv('path.upload') ? getenv('path.upload') : "../writable/uploads", - 'DOWNLOAD' => getenv('path.download') ? getenv('path.download') : "../writable/download", - 'API' => getenv('path.api') ? getenv('path.api') : "../writable/api", + 'EXCEL' => getenv('path.excel') ?: "../writable/Excel", + 'UPLOAD' => getenv('path.upload') ?: "../writable/uploads", + 'DOWNLOAD' => getenv('path.download') ?: "../writable/download", + 'API' => getenv('path.api') ?: "../writable/api", ]); foreach (PATHS as $key => $path) { if (!is_dir(APPPATH . $path)) { @@ -196,13 +194,14 @@ define('AUDIOS', [ //Default값 정의 define('DEFAULTS', [ - 'ROLE' => getenv('default.role') ? getenv('default.role') : "user", - 'STATUS' => getenv('default.status') ? getenv('default.status') : "use", - 'EMPTY' => getenv('default.empty') ? getenv('default.empty') : "", - 'PERPAGE' => getenv('default.perpage') ? getenv('default.perpage') : 20, + 'ROLE' => getenv('default.role') ?: "user", + 'STATUS' => getenv('default.status') ?: "use", + 'EMPTY' => getenv('default.empty') ?: "", + 'PERPAGE' => getenv('default.perpage') ?: 20, ]); +//UUID초기값 정의 define('UUIDS', [ - 'NAMESPACE' => getenv('uuid.namespace') ? getenv('uuid.namespace') : "8fc990b07418d5826d98de952cfb268dee4a23a3", - 'SECRET' => getenv('uuid.secret') ? getenv('default.secret') : "delftstack1", + 'NAMESPACE' => getenv('uuid.namespace') ?: "8fc990b07418d5826d98de952cfb268dee4a23a3", + 'SECRET' => getenv('uuid.secret') ?: "delftstack1", ]); diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 96c5df1..63ef3d1 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -35,10 +35,10 @@ $routes->setAutoRoute(false); $routes->addPlaceholder('uuid', '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'); $routes->get('/', 'Home::index'); -$routes->get('/login', 'Common\AuthController::login'); -$routes->post('/signin', 'Common\AuthController::signin/local'); -$routes->get('/signin/(:alpha)', 'Common\AuthController::signin/$1'); -$routes->get('/logout', 'Common\AuthController::logout'); +$routes->get('/login', 'AuthController::login'); +$routes->post('/signin', 'AuthController::signin/local'); +$routes->get('/signin/(:alpha)', 'AuthController::signin/$1'); +$routes->get('/logout', 'AuthController::logout'); $routes->group('cli', ['namespace' => 'App\Controllers\CLI'], function ($routes) { }); $routes->group('front', ['namespace' => 'App\Controllers\Front'], function ($routes) { @@ -62,7 +62,7 @@ $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'au $routes->group('usersns', static function ($routes) { $routes->get('', 'UserSNSController::index'); $routes->get('excel', 'UserSNSController::excel'); - $routes->get('view/(:num)', 'UserController::view/$1'); + $routes->get('view/(:num)', 'UserSNSController::view/$1'); $routes->get('delete/(:num)', 'UserSNSController::delete/$1', ['filter' => 'authFilter:master,director']); $routes->get('toggle/(:num)/(:hash)', 'UserSNSController::toggle/$1/$2', ['filter' => 'authFilter:master,director']); }); diff --git a/app/Controllers/Admin/AdminController.php b/app/Controllers/Admin/AdminController.php index 6b6843c..8094773 100644 --- a/app/Controllers/Admin/AdminController.php +++ b/app/Controllers/Admin/AdminController.php @@ -2,11 +2,12 @@ namespace App\Controllers\Admin; +use App\Controllers\BaseController; use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\ResponseInterface; use Psr\Log\LoggerInterface; -class AdminController extends \App\Controllers\Common\CommonController +class AdminController extends BASEController { public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger) { @@ -14,6 +15,6 @@ class AdminController extends \App\Controllers\Common\CommonController $this->_className .= 'Admin'; $this->_viewPath = strtolower($this->_className); $this->_viewDatas['layout'] = LAYOUTS['admin']; - $this->_viewDatas['title'] = "관리자"; + $this->_viewDatas['title'] = "관리자페이지"; } } diff --git a/app/Controllers/Admin/Home.php b/app/Controllers/Admin/Home.php index d44a62a..82de417 100644 --- a/app/Controllers/Admin/Home.php +++ b/app/Controllers/Admin/Home.php @@ -6,6 +6,7 @@ use App\Controllers\BaseController; use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\ResponseInterface; use Psr\Log\LoggerInterface; + class Home extends BaseController { protected $_viewDatas = array(); @@ -14,14 +15,8 @@ class Home extends BaseController parent::initController($request, $response, $logger); helper('Common'); $this->_viewDatas = [ - 'layout'=>LAYOUTS['admin'], - 'title'=>'관리자페이지', - 'session'=>session() + 'layout' => LAYOUTS['admin'], + 'title' => '관리자페이지', ]; } - - public function index() - { - return view('admin/index',$this->_viewDatas); - } } diff --git a/app/Controllers/Admin/LoggerController.php b/app/Controllers/Admin/LoggerController.php index fae9b08..ea5df47 100644 --- a/app/Controllers/Admin/LoggerController.php +++ b/app/Controllers/Admin/LoggerController.php @@ -51,7 +51,7 @@ class LoggerController extends \App\Controllers\Admin\AdminController case 'user_uid': if (is_null($this->_user_uids)) { //모든 필요한 FormOption등 조기화작업 필요 - $this->_user_uids = $this->getUserModel()->getList( + $this->_user_uids = $this->getUserModel()->getFieldFormOptions( ['status' => 'use'], [DEFAULTS['EMPTY'] => lang($this->_className . '.label.' . $field) . ' 선택'] ); diff --git a/app/Controllers/Admin/UserSNSController.php b/app/Controllers/Admin/UserSNSController.php index 192c61c..a1305b4 100644 --- a/app/Controllers/Admin/UserSNSController.php +++ b/app/Controllers/Admin/UserSNSController.php @@ -51,7 +51,7 @@ class UserSNSController extends \App\Controllers\Admin\AdminController case 'user_uid': if (is_null($this->_user_uids)) { //모든 필요한 FormOption등 조기화작업 필요 - $this->_user_uids = $this->getUserModel()->getList( + $this->_user_uids = $this->getUserModel()->getFieldFormOptions( ['status' => 'use'], [DEFAULTS['EMPTY'] => lang($this->_className . '.label.' . $field) . ' 선택'] ); diff --git a/app/Controllers/Common/AuthController.php b/app/Controllers/AuthController.php similarity index 69% rename from app/Controllers/Common/AuthController.php rename to app/Controllers/AuthController.php index 53b0217..2ef9d8f 100644 --- a/app/Controllers/Common/AuthController.php +++ b/app/Controllers/AuthController.php @@ -1,8 +1,7 @@ _viewDatas = [ 'layout' => LAYOUTS['empty'], 'title' => '로그인', - 'session' => session() ]; $this->initAdapters(); } private function initAdapters() { - foreach (AUTHS['ADAPTERS'] as $site) { - $this->getAdapter($site); + foreach (array_keys(AUTH_ADAPTERS) as $adapter) { + $this->getAdapter($adapter); } } private function getAdapter(string $site): Adapter @@ -35,7 +32,7 @@ class AuthController extends BaseController $site = ucfirst($site); if (!array_key_exists($site, $this->_adapters)) { $adapterClass = sprintf("\App\Libraries\Adapter\Auth\%sAdapter", $site); - $this->_adapters[$site] = new $adapterClass($site, AUTHS['DEBUG']); + $this->_adapters[$site] = new $adapterClass($site, AUTH_ADAPTERS[$site]['DEBUG']); } return $this->_adapters[$site]; } @@ -48,8 +45,8 @@ class AuthController extends BaseController 'hiddens' => [], ]; //RETURN_URL 존재하면 추가 - if (!is_null(session()->get(LOGINS['RETURN_URL']))) { - $this->_viewDatas['forms']['hiddens'][LOGINS['RETURN_URL']] = session()->get(LOGINS['RETURN_URL']); + if (!$this->_session->get(SESSION_NAMES['RETURN_URL'])) { + $this->_viewDatas['forms']['hiddens'][SESSION_NAMES['RETURN_URL']] = $this->_session->get(SESSION_NAMES['RETURN_URL']); } $this->_viewDatas['login_buttons'] = array(); foreach ($this->_adapters as $key => $adapter) { @@ -63,19 +60,20 @@ class AuthController extends BaseController try { //각 Adapter별 인층체크 후 Session에 인증정보 설정 $this->getAdapter($site)->signin($this->request->getVar()); - $return_url = session()->get(LOGINS['RETURN_URL']) ? session()->get(LOGINS['RETURN_URL']) : "/"; - return redirect()->to($this->request->getVar(LOGINS['RETURN_URL']) ? $this->request->getVar(LOGINS['RETURN_URL']) : $return_url); + $return_url = $this->_session->get(SESSION_NAMES['RETURN_URL']) ?: "/"; + return redirect()->to($this->request->getVar(SESSION_NAMES['RETURN_URL']) ?: $return_url); } catch (\Exception $e) { - session()->setFlashdata('error', $e->getMessage()); + $this->_session->setFlashdata('error', $e->getMessage()); return redirect()->back()->withInput(); } } public function logout() { - //Session에 Login 정보 삭제 - session()->set([LOGINS['ISLOGIN'] => false]); - session_destroy(); + //로그인 여부 확인후 Session에 Login 정보 삭제 + if ($this->_session->get(SESSION_NAMES['USER'])) { + session_destroy(); + } return redirect()->route('/'); } } diff --git a/app/Controllers/BaseController.php b/app/Controllers/BaseController.php index ecea162..ad29e00 100644 --- a/app/Controllers/BaseController.php +++ b/app/Controllers/BaseController.php @@ -8,6 +8,7 @@ use CodeIgniter\HTTP\IncomingRequest; use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\ResponseInterface; use Psr\Log\LoggerInterface; +use App\Libraries\Log\Log; /** * Class BaseController @@ -35,7 +36,7 @@ abstract class BaseController extends Controller * * @var array */ - protected $helpers = []; + protected $helpers = ['Common']; /** * Be sure to declare properties for any property fetch you initialized. @@ -46,6 +47,12 @@ abstract class BaseController extends Controller /** * Constructor. */ + protected $_model = null; + protected $_className = ''; + protected $_defines = array(); + protected $_viewPath = ''; + protected $_viewDatas = array(); + protected $_session = null; public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger) { // Do Not Edit This Line @@ -54,5 +61,488 @@ abstract class BaseController extends Controller // Preload any models, libraries, etc, here. // E.g.: $this->session = \Config\Services::session(); + $this->_session = \Config\Services::session(); + $this->_viewDatas = [ + 'layout' => LAYOUTS['empty'], + 'title' => '' + ]; + } + + //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() + { + $this->_viewDatas['fields'] = $this->_defines['insert']['fields'];; + $this->_viewDatas['fieldRules'] = $this->getFieldRules($this->_viewDatas['fields'], $this->_defines['insert']['fieldRules']); + } + protected function insert_form_init() + { + $this->_viewDatas['fieldFilters'] = $this->_defines['insert']['fieldFilters']; + $this->_viewDatas['fieldFormOptions'] = $this->getFieldFormOptions($this->_viewDatas['fieldFilters']); + $this->_viewDatas['forms'] = ['attributes' => ['method' => "post",], 'hiddens' => []]; + helper(['form']); + } + protected function insert_form_process() + { + } + final public function insert_form() + { + try { + $this->insert_init(); + $this->insert_form_init(); + $this->insert_form_process(); + return view($this->_viewPath . '/insert', $this->_viewDatas); + } catch (\Exception $e) { + return alert_CommonHelper($e->getMessage(), 'back'); + } + } + + protected function insert_validate() + { + //변경된 값 적용 + $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() + { + return $this->_model->create($this->_viewDatas['fieldDatas']); + } + protected function insert_procedure() + { + $message = ""; + try { + $this->insert_init(); + $this->insert_validate(); + $this->insert_process(); + $message = __FUNCTION__ . " 완료하였습니다."; + Log::save("{$this->_viewDatas['title']} {$message}"); + return alert_CommonHelper($message, $this->_session->get(SESSION_NAMES['RETURN_URL'])); + } catch (\Exception $e) { + $message = __FUNCTION__ . " 실패하였습니다."; + Log::add("warning", $e->getMessage()); + Log::add("warning", var_export($this->_viewDatas['fieldDatas'], true)); + Log::save("{$this->_viewDatas['title']} {$message}", false); + return redirect()->back()->withInput()->with("error", $message . "
\n{$e->getMessage()}"); + } + } + + //Update관련 + protected function update_init() + { + $this->_viewDatas['fields'] = $this->_defines['update']['fields'];; + $this->_viewDatas['fieldRules'] = $this->getFieldRules($this->_viewDatas['fields'], $this->_defines['update']['fieldRules']); + } + protected function update_form_init() + { + $this->_viewDatas['fieldFilters'] = $this->_defines['update']['fieldFilters']; + $this->_viewDatas['fieldFormOptions'] = $this->getFieldFormOptions($this->_viewDatas['fieldFilters']); + $this->_viewDatas['forms'] = ['attributes' => ['method' => "post",], 'hiddens' => []]; + helper(['form']); + } + protected function update_form_process($entity) + { + return $entity; + } + final public function update_form($uid) + { + try { + $entity = $this->_model->getEntity($uid); + $this->update_init(); + $this->update_form_init(); + $this->_viewDatas['entity'] = $this->update_form_process($entity); + return view($this->_viewPath . '/update', $this->_viewDatas); + } catch (\Exception $e) { + return alert_CommonHelper($e->getMessage(), 'back'); + } + } + protected function update_validate($entity) + { + //변경된 값 적용 + $this->_viewDatas['fieldDatas'] = array(); + foreach ($this->_viewDatas['fields'] as $field) { + $this->_viewDatas['fieldDatas'][$field] = rtrim($this->request->getVar($field)); + if ($entity->$field != $this->_viewDatas['fieldDatas'][$field]) { + // 기존값을 DB에서 수정전까지 유지하기위해서 + // $entity->$field = $this->_viewDatas['fieldDatas'][$field]; + //암호는 보안상 log에 남지 않게하기 위함 + Log::add( + $field == 'passwd' ? "debug" : "info", + "{$field} : {$entity->$field} => {$this->_viewDatas['fieldDatas'][$field]}" + ); + } + } + //변경할 값 확인 + 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) + { + return $this->_model->modify($entity, $this->_viewDatas['fieldDatas']); + } + protected function update_procedure($uid) + { + $message = ""; + try { + $entity = $this->_model->getEntity($uid); + $this->update_init(); + $entity = $this->update_validate($entity); + $entity = $this->update_process($entity); + $message = "{$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다."; + Log::save("{$this->_viewDatas['title']} {$message}"); + return alert_CommonHelper($message, $this->_session->get(SESSION_NAMES['RETURN_URL'])); + } catch (\Exception $e) { + $message = __FUNCTION__ . " 실패하였습니다."; + Log::add("warning", $e->getMessage()); + Log::add("warning", var_export($this->_viewDatas['fieldDatas'], true)); + Log::save("{$this->_viewDatas['title']} {$message}", false); + return redirect()->back()->withInput()->with("error", $message . "
\n{$e->getMessage()}"); + } + } + + //Toggle 관련 + protected function toggle_init($field) + { + $this->_viewDatas['fields'] = [$field]; + $this->_viewDatas['fieldRules'] = $this->getFieldRules($this->_viewDatas['fields'], array()); + } + protected function toggle_validate($entity) + { + return $this->update_validate($entity); + } + protected function toggle_process($entity) + { + return $this->update_process($entity); + } + protected function toggle_procedure($uid, string $field) + { + $message = ""; + try { + $entity = $this->_model->getEntity($uid); + $this->toggle_init($field); + $entity = $this->toggle_validate($entity); + $entity = $this->toggle_process($entity); + $message = "{$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다."; + Log::save("{$this->_viewDatas['title']} {$message}"); + return alert_CommonHelper($message, $this->_session->get(SESSION_NAMES['RETURN_URL'])); + } catch (\Exception $e) { + $message = __FUNCTION__ . " 실패하였습니다."; + Log::add("warning", $e->getMessage()); + Log::add("warning", var_export($this->_viewDatas['fieldDatas'], true)); + Log::save("{$this->_viewDatas['title']} {$message}", false); + return alert_CommonHelper($message . "
\n{$e->getMessage()}", 'back'); + } + } + //Batchjob 관련 + protected function batchjob_init() + { + //fields 해당하는 field중 선택된 값이 있는경우만 fields로 정의 + $fields = array(); + foreach ($this->_defines['index']['batchjobFilters'] as $field) { + if ($this->request->getVar($field)) { + array_push($fields, $field); + } + } + if (!is_array($fields) || count($fields) === 0) { + throw new \Exception($this->_viewDatas['title'] . '에서 변경할 항목(field)이 선택되지 않았습니다.'); + } + //Fields,FielRules재정의 + $this->_viewDatas['fields'] = $fields; + $this->_viewDatas['fieldRules'] = $this->getFieldRules($this->_viewDatas['fields'], array()); + } + protected function batchjob_validate($entity) + { + return $this->update_validate($entity); + } + protected function batchjob_process($entity) + { + return $this->update_process($entity); + } + protected function batchjob_procedure() + { + $uids = $this->request->getVar('batchjob_uids'); + if (is_null($uids) || !is_array($uids) || !count($uids)) { + return alert_CommonHelper($this->_viewDatas['title'] . '에서 변경할 항목(uid)이 선택되지 않았습니다.', 'back'); + } + $message = ""; + try { + $this->batchjob_init(); + $entitys = array(); + foreach ($uids as $uid) { + $entity = $this->_model->getEntity($uid); + try { + $entity = $this->batchjob_validate($entity); + array_push($entitys, $this->batchjob_process($entity)); + } catch (\Exception $e) { + Log::add("warning", "{$entity->getTitle()}는 다음과 같은 이유로 수정되지 않았습니다.\n
" . $e->getMessage()); + } + } + $message = "총: " . count($entitys) . "개의 수정(Batchjob)을 완료하였습니다."; + Log::save("{$this->_viewDatas['title']} {$message}"); + return alert_CommonHelper($message, $this->_session->get(SESSION_NAMES['RETURN_URL'])); + } catch (\Exception $e) { + $message = "총: " . count($uids) . "개의 수정(Batchjob)을 실패하였습니다."; + Log::add("warning", $e->getMessage()); + Log::add("warning", var_export($this->_viewDatas['fieldDatas'], true)); + Log::save("{$this->_viewDatas['title']} {$message}", false); + return alert_CommonHelper($message . "
\n{$e->getMessage()}", 'back'); + } + } + + //Delete 관련 + protected function delete_process($entity) + { + if (!$this->_model->delete($entity->getPrimaryKey())) { + Log::add("error", __FUNCTION__ . "에서 호출:" . $this->_model->getLastQuery()); + Log::add("error", implode("\n", $this->_model->errors())); + throw new \Exception(__FUNCTION__ . " 오류 발생.\n" . var_export($this->_model->errors(), true)); + } + return $entity; + } + protected function delete_procedure($uid) + { + $message = ""; + try { + $entity = $this->_model->getEntity($uid); + $this->delete_process($entity); + $message = "{$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다."; + Log::save("{$this->_viewDatas['title']} {$message}"); + return alert_CommonHelper($message, $this->_session->get(SESSION_NAMES['RETURN_URL'])); + } catch (\Exception $e) { + $message = __FUNCTION__ . " 실패하였습니다."; + Log::add("warning", $e->getMessage()); + Log::save("{$this->_viewDatas['title']} {$message}", false); + return alert_CommonHelper($message . "
\n{$e->getMessage()}", 'back'); + } + } + + //View 관련 + protected function view_init() + { + $this->_viewDatas['fields'] = $this->_defines['view']['fields']; + $this->_viewDatas['fieldFilters'] = $this->_defines['view']['fieldFilters']; + $this->_viewDatas['fieldRules'] = $this->getFieldRules($this->_viewDatas['fields'], $this->_defines['view']['fieldRules']); + helper(['form']); + $this->_viewDatas['fieldFormOptions'] = $this->getFieldFormOptions($this->_viewDatas['fieldFilters']); + $this->_viewDatas['forms'] = ['attributes' => ['method' => "post",], 'hiddens' => []]; + } + protected function view_process($entity) + { + return $entity; + } + protected function view_procedure($uid) + { + try { + $entity = $this->_model->getEntity($uid); + // dd($entity); + $this->view_init(); + $this->_viewDatas['entity'] = $this->view_process($entity); + return view($this->_viewPath . '/view', $this->_viewDatas); + } catch (\Exception $e) { + return alert_CommonHelper($e->getMessage(), 'back'); + } + } + + //Index 관련 + protected function index_init() + { + $this->_viewDatas['fields'] = $this->_defines['index']['fields']; + $this->_viewDatas['fieldFilters'] = $this->_defines['index']['fieldFilters']; + $this->_viewDatas['batchjobFilters'] = $this->_defines['index']['batchjobFilters']; + helper(['form']); + $this->_viewDatas['fieldFormOptions'] = $this->getFieldFormOptions($this->_viewDatas['fieldFilters']); + $this->_viewDatas['forms'] = ['attributes' => ['method' => "post",], 'hiddens' => []]; + $this->_session->set(SESSION_NAMES['RETURN_URL'], current_url() . '?' . $this->request->getUri()->getQuery()); + + foreach ($this->_viewDatas['fieldFilters'] as $field) { + $this->_viewDatas[$field] = $this->request->getVar($field) ? $this->request->getVar($field) : DEFAULTS['EMPTY']; + } + $this->_viewDatas['word'] = $this->request->getVar('word') ? $this->request->getVar('word') : ''; + $this->_viewDatas['start'] = $this->request->getVar('start') ? $this->request->getVar('start') : ''; + $this->_viewDatas['end'] = $this->request->getVar('end') ? $this->request->getVar('end') : ''; + $this->_viewDatas['order_field'] = $this->request->getVar('order_field') ? $this->request->getVar('order_field') : 'uid'; + $this->_viewDatas['order_value'] = $this->request->getVar('order_value') ? $this->request->getVar('order_value') : 'DESC'; + $this->_viewDatas['page'] = $this->request->getVar('page') ? $this->request->getVar('page') : 1; + $this->_viewDatas['per_page'] = $this->request->getVar('per_page') ? $this->request->getVar('per_page') : DEFAULTS['PERPAGE']; + $this->_viewDatas['uri'] = $this->request->getUri(); + } + //index 모델 전처리 + protected function index_setCondition() + { + foreach ($this->_viewDatas['fieldFilters'] as $field) { + $value = $this->request->getVar($field) ? $this->request->getVar($field) : false; + if ($value) { + $this->_model->where($field, $value); + } + } + $word = $this->request->getVar('word') ? $this->request->getVar('word') : ''; + if (isset($word) && $word !== '') { + $this->_model->setIndexWordFilter($word); + } + $start = $this->request->getVar('start') ? $this->request->getVar('start') : ''; + $end = $this->request->getVar('end') ? $this->request->getVar('end') : ''; + if (isset($start) && $start !== '' && isset($end) && $end !== '') { + $this->_model->setIndexDateFilter($start, $end); + } + } + protected function index_getRows(int $page = 0, int $per_page = 0): array + { + //Totalcount 처리 + $this->index_setCondition(); + $this->_viewDatas['total_count'] = $this->_model->countAllResults(); + //Rows 처리 + $this->index_setCondition(); + //OrderBy + $order_field = $this->request->getVar('order_field') ? $this->request->getVar('order_field') : 'uid'; + $order_value = $this->request->getVar('order_value') ? $this->request->getVar('order_value') : 'DESC'; + $this->_model->setIndexOrderBy($order_field, $order_value); + //Limit + $rows = $per_page ? $this->_model->findAll($per_page, $page * $per_page - $per_page) : $this->_model->findAll(); + // log_message("debug", __METHOD__ . "에서 호출[{$per_page}:{$page}=>{$page}*{$per_page}-{$per_page}]\n" . $this->_model->getLastQuery()); + return $rows; + } + private function index_getPagination($pager_group = 'default', int $segment = 0, $template = 'bootstrap_full'): string + { + // 1.Views/Pagers/에 bootstrap_full.php,bootstrap_simple.php 생성 + // 2.app/Config/Pager.php/$templates에 'bootstrap_full => 'Pagers\bootstrap_full', + // 'bootstrap_simple' => 'Pagers\bootstrap_simple', 추가 + $pager = \Config\Services::pager(); + // $this->_model->paginate($this->_viewDatas['per_page'], $pager_group, $this->_viewDatas['page'], $segment); + $pager->makeLinks( + $this->_viewDatas['page'], + $this->_viewDatas['per_page'], + $this->_viewDatas['total_count'], + $template, + $segment, + $pager_group + ); + $this->_viewDatas['page'] = $pager->getCurrentPage($pager_group); + $this->_viewDatas['total_page'] = $pager->getPageCount($pager_group); + return $pager->links($pager_group, $template); + } + protected function index_process() + { + //모델 처리 + $this->_viewDatas['rows'] = $this->index_getRows((int)$this->_viewDatas['page'], (int)$this->_viewDatas['per_page']); + //줄수 처리용 + $this->_viewDatas['pageOptions'] = array("" => "줄수선택"); + for ($i = 10; $i <= $this->_viewDatas['total_count'] + $this->_viewDatas['per_page']; $i += 10) { + $this->_viewDatas['pageOptions'][$i] = $i; + } + //pagenation 처리 + $this->_viewDatas['pagination'] = $this->index_getPagination(); + } + protected function index_procedure() + { + try { + $this->index_init(); + $this->index_process(); + return view($this->_viewPath . '/index', $this->_viewDatas); + } catch (\Exception $e) { + return alert_CommonHelper($e->getMessage(), 'back'); + } + } + + //Excel 관련 + protected function excel_init() + { + $this->_viewDatas['fields'] = $this->_defines['excel']['fields']; + $this->_viewDatas['fieldFilters'] = $this->_defines['excel']['fieldFilters']; + $this->_viewDatas['fieldFormOptions'] = $this->getFieldFormOptions($this->_viewDatas['fieldFilters']); + } + private function excel_getSpreadSheet() + { + //Excepl 초기화 + $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet(); + $sheet = $spreadsheet->getActiveSheet(); + //Header용 + $column = 'A'; + foreach ($this->_viewDatas['fields'] as $field) { + $sheet->setCellValue($column++ . '1', lang($this->_className . '.label.' . $field)); + } + //본문용 + $line = 2; + foreach ($this->index_getRows() as $row) { + $column = 'A'; + foreach ($this->_viewDatas['fields'] as $field) { + // echo "\n
".var_export($this->_fieldFilters,true)."\n
".var_export($fieldFormOptions,true);exit; + $value = in_array($field, $this->_viewDatas['fieldFilters']) ? $this->_viewDatas['fieldFormOptions'][$field][$row[$field]] : $row[$field]; + $sheet->setCellValue($column . $line, $value); + $column++; + } + $line++; + } + return $spreadsheet; + } + protected function excel_process() + { + $fileName = date('Y-m-d_Hm') . '.xlsx'; + //파일저장 참고:https://teserre.tistory.com/19 + $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($this->excel_getSpreadSheet(), 'Xlsx'); + //파일저장용 + // $writer->save(Excel_FilePath . '/' . $fileName); + //Download시 + header("Content-Type: application/vnd.ms-excel"); + header(sprintf("Content-Disposition: attachment; filename=%s", urlencode($fileName))); + return $writer->save('php://output'); + } + protected function excel_procedure() + { + try { + $this->excel_init(); + return $this->excel_process(); + } catch (\Exception $e) { + return alert_CommonHelper($e->getMessage(), 'back'); + } } } diff --git a/app/Controllers/Common/CommonController.php b/app/Controllers/Common/CommonController.php deleted file mode 100644 index 860d7ac..0000000 --- a/app/Controllers/Common/CommonController.php +++ /dev/null @@ -1,505 +0,0 @@ -_viewDatas = [ - 'layout' => LAYOUTS['empty'], - 'title' => '', - 'session' => session() - ]; - } - - //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() - { - $this->_viewDatas['fields'] = $this->_defines['insert']['fields'];; - $this->_viewDatas['fieldRules'] = $this->getFieldRules($this->_viewDatas['fields'], $this->_defines['insert']['fieldRules']); - } - protected function insert_form_init() - { - $this->_viewDatas['fieldFilters'] = $this->_defines['insert']['fieldFilters']; - $this->_viewDatas['fieldFormOptions'] = $this->getFieldFormOptions($this->_viewDatas['fieldFilters']); - $this->_viewDatas['forms'] = ['attributes' => ['method' => "post",], 'hiddens' => []]; - helper(['form']); - } - protected function insert_form_process() - { - } - final public function insert_form() - { - try { - $this->insert_init(); - $this->insert_form_init(); - $this->insert_form_process(); - return view($this->_viewPath . '/insert', $this->_viewDatas); - } catch (\Exception $e) { - return alert_CommonHelper($e->getMessage(), 'back'); - } - } - - protected function insert_validate() - { - //변경된 값 적용 - $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() - { - return $this->_model->create($this->_viewDatas['fieldDatas']); - } - protected function insert_procedure() - { - $message = ""; - try { - $this->insert_init(); - $this->insert_validate(); - $this->insert_process(); - $message = __FUNCTION__ . " 완료하였습니다."; - Log::save("{$this->_viewDatas['title']} {$message}"); - return alert_CommonHelper($message, session()->get(LOGINS['RETURN_URL'])); - } catch (\Exception $e) { - $message = __FUNCTION__ . " 실패하였습니다."; - Log::add("warning", $e->getMessage()); - Log::add("warning", var_export($this->_viewDatas['fieldDatas'], true)); - Log::save("{$this->_viewDatas['title']} {$message}", false); - return redirect()->back()->withInput()->with("error", $message . "
\n{$e->getMessage()}"); - } - } - - //Update관련 - protected function update_init() - { - $this->_viewDatas['fields'] = $this->_defines['update']['fields'];; - $this->_viewDatas['fieldRules'] = $this->getFieldRules($this->_viewDatas['fields'], $this->_defines['update']['fieldRules']); - } - protected function update_form_init() - { - $this->_viewDatas['fieldFilters'] = $this->_defines['update']['fieldFilters']; - $this->_viewDatas['fieldFormOptions'] = $this->getFieldFormOptions($this->_viewDatas['fieldFilters']); - $this->_viewDatas['forms'] = ['attributes' => ['method' => "post",], 'hiddens' => []]; - helper(['form']); - } - protected function update_form_process($entity) - { - return $entity; - } - final public function update_form($uid) - { - try { - $entity = $this->_model->getEntity($uid); - $this->update_init(); - $this->update_form_init(); - $this->_viewDatas['entity'] = $this->update_form_process($entity); - return view($this->_viewPath . '/update', $this->_viewDatas); - } catch (\Exception $e) { - return alert_CommonHelper($e->getMessage(), 'back'); - } - } - protected function update_validate($entity) - { - //변경된 값 적용 - $this->_viewDatas['fieldDatas'] = array(); - foreach ($this->_viewDatas['fields'] as $field) { - $this->_viewDatas['fieldDatas'][$field] = rtrim($this->request->getVar($field)); - if ($entity->$field != $this->_viewDatas['fieldDatas'][$field]) { - // 기존값을 DB에서 수정전까지 유지하기위해서 - // $entity->$field = $this->_viewDatas['fieldDatas'][$field]; - //암호는 보안상 log에 남지 않게하기 위함 - Log::add( - $field == 'passwd' ? "debug" : "info", - "{$field} : {$entity->$field} => {$this->_viewDatas['fieldDatas'][$field]}" - ); - } - } - //변경할 값 확인 - 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) - { - return $this->_model->modify($entity, $this->_viewDatas['fieldDatas']); - } - protected function update_procedure($uid) - { - $message = ""; - try { - $entity = $this->_model->getEntity($uid); - $this->update_init(); - $entity = $this->update_validate($entity); - $entity = $this->update_process($entity); - $message = "{$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다."; - Log::save("{$this->_viewDatas['title']} {$message}"); - return alert_CommonHelper($message, session()->get(LOGINS['RETURN_URL'])); - } catch (\Exception $e) { - $message = __FUNCTION__ . " 실패하였습니다."; - Log::add("warning", $e->getMessage()); - Log::add("warning", var_export($this->_viewDatas['fieldDatas'], true)); - Log::save("{$this->_viewDatas['title']} {$message}", false); - return redirect()->back()->withInput()->with("error", $message . "
\n{$e->getMessage()}"); - } - } - - //Toggle 관련 - protected function toggle_init($field) - { - $this->_viewDatas['fields'] = [$field]; - $this->_viewDatas['fieldRules'] = $this->getFieldRules($this->_viewDatas['fields'], array()); - } - protected function toggle_validate($entity) - { - return $this->update_validate($entity); - } - protected function toggle_process($entity) - { - return $this->update_process($entity); - } - protected function toggle_procedure($uid, string $field) - { - $message = ""; - try { - $entity = $this->_model->getEntity($uid); - $this->toggle_init($field); - $entity = $this->toggle_validate($entity); - $entity = $this->toggle_process($entity); - $message = "{$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다."; - Log::save("{$this->_viewDatas['title']} {$message}"); - return alert_CommonHelper($message, session()->get(LOGINS['RETURN_URL'])); - } catch (\Exception $e) { - $message = __FUNCTION__ . " 실패하였습니다."; - Log::add("warning", $e->getMessage()); - Log::add("warning", var_export($this->_viewDatas['fieldDatas'], true)); - Log::save("{$this->_viewDatas['title']} {$message}", false); - return alert_CommonHelper($message . "
\n{$e->getMessage()}", 'back'); - } - } - //Batchjob 관련 - protected function batchjob_init() - { - //fields 해당하는 field중 선택된 값이 있는경우만 fields로 정의 - $fields = array(); - foreach ($this->_defines['index']['batchjobFilters'] as $field) { - if ($this->request->getVar($field)) { - array_push($fields, $field); - } - } - if (!is_array($fields) || count($fields) === 0) { - throw new \Exception($this->_viewDatas['title'] . '에서 변경할 항목(field)이 선택되지 않았습니다.'); - } - //Fields,FielRules재정의 - $this->_viewDatas['fields'] = $fields; - $this->_viewDatas['fieldRules'] = $this->getFieldRules($this->_viewDatas['fields'], array()); - } - protected function batchjob_validate($entity) - { - return $this->update_validate($entity); - } - protected function batchjob_process($entity) - { - return $this->update_process($entity); - } - protected function batchjob_procedure() - { - $uids = $this->request->getVar('batchjob_uids'); - if (is_null($uids) || !is_array($uids) || !count($uids)) { - return alert_CommonHelper($this->_viewDatas['title'] . '에서 변경할 항목(uid)이 선택되지 않았습니다.', 'back'); - } - $message = ""; - try { - $this->batchjob_init(); - $entitys = array(); - foreach ($uids as $uid) { - $entity = $this->_model->getEntity($uid); - try { - $entity = $this->batchjob_validate($entity); - array_push($entitys, $this->batchjob_process($entity)); - } catch (\Exception $e) { - Log::add("warning", "{$entity->getTitle()}는 다음과 같은 이유로 수정되지 않았습니다.\n
" . $e->getMessage()); - } - } - $message = "총: " . count($entitys) . "개의 수정(Batchjob)을 완료하였습니다."; - Log::save("{$this->_viewDatas['title']} {$message}"); - return alert_CommonHelper($message, session()->get(LOGINS['RETURN_URL'])); - } catch (\Exception $e) { - $message = "총: " . count($uids) . "개의 수정(Batchjob)을 실패하였습니다."; - Log::add("warning", $e->getMessage()); - Log::add("warning", var_export($this->_viewDatas['fieldDatas'], true)); - Log::save("{$this->_viewDatas['title']} {$message}", false); - return alert_CommonHelper($message . "
\n{$e->getMessage()}", 'back'); - } - } - - //Delete 관련 - protected function delete_process($entity) - { - if (!$this->_model->delete($entity->getPrimaryKey())) { - Log::add("error", __FUNCTION__ . "에서 호출:" . $this->_model->getLastQuery()); - Log::add("error", implode("\n", $this->_model->errors())); - throw new \Exception(__FUNCTION__ . " 오류 발생.\n" . var_export($this->_model->errors(), true)); - } - return $entity; - } - protected function delete_procedure($uid) - { - $message = ""; - try { - $entity = $this->_model->getEntity($uid); - $this->delete_process($entity); - $message = "{$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다."; - Log::save("{$this->_viewDatas['title']} {$message}"); - return alert_CommonHelper($message, session()->get(LOGINS['RETURN_URL'])); - } catch (\Exception $e) { - $message = __FUNCTION__ . " 실패하였습니다."; - Log::add("warning", $e->getMessage()); - Log::save("{$this->_viewDatas['title']} {$message}", false); - return alert_CommonHelper($message . "
\n{$e->getMessage()}", 'back'); - } - } - - //View 관련 - protected function view_init() - { - $this->_viewDatas['fields'] = $this->_defines['view']['fields']; - $this->_viewDatas['fieldFilters'] = $this->_defines['view']['fieldFilters']; - $this->_viewDatas['fieldRules'] = $this->getFieldRules($this->_viewDatas['fields'], $this->_defines['view']['fieldRules']); - helper(['form']); - $this->_viewDatas['fieldFormOptions'] = $this->getFieldFormOptions($this->_viewDatas['fieldFilters']); - $this->_viewDatas['forms'] = ['attributes' => ['method' => "post",], 'hiddens' => []]; - } - protected function view_process($entity) - { - return $entity; - } - protected function view_procedure($uid) - { - try { - $entity = $this->_model->getEntity($uid); - $this->view_init(); - $this->_viewDatas['entity'] = $this->view_process($entity); - return view($this->_viewPath . '/view', $this->_viewDatas); - } catch (\Exception $e) { - return alert_CommonHelper($e->getMessage(), 'back'); - } - } - - //Index 관련 - protected function index_init() - { - $this->_viewDatas['fields'] = $this->_defines['index']['fields']; - $this->_viewDatas['fieldFilters'] = $this->_defines['index']['fieldFilters']; - $this->_viewDatas['batchjobFilters'] = $this->_defines['index']['batchjobFilters']; - helper(['form']); - $this->_viewDatas['fieldFormOptions'] = $this->getFieldFormOptions($this->_viewDatas['fieldFilters']); - $this->_viewDatas['forms'] = ['attributes' => ['method' => "post",], 'hiddens' => []]; - session()->set(LOGINS['RETURN_URL'], current_url() . '?' . $this->request->getUri()->getQuery()); - - foreach ($this->_viewDatas['fieldFilters'] as $field) { - $this->_viewDatas[$field] = $this->request->getVar($field) ? $this->request->getVar($field) : DEFAULTS['EMPTY']; - } - $this->_viewDatas['word'] = $this->request->getVar('word') ? $this->request->getVar('word') : ''; - $this->_viewDatas['start'] = $this->request->getVar('start') ? $this->request->getVar('start') : ''; - $this->_viewDatas['end'] = $this->request->getVar('end') ? $this->request->getVar('end') : ''; - $this->_viewDatas['order_field'] = $this->request->getVar('order_field') ? $this->request->getVar('order_field') : 'uid'; - $this->_viewDatas['order_value'] = $this->request->getVar('order_value') ? $this->request->getVar('order_value') : 'DESC'; - $this->_viewDatas['page'] = $this->request->getVar('page') ? $this->request->getVar('page') : 1; - $this->_viewDatas['per_page'] = $this->request->getVar('per_page') ? $this->request->getVar('per_page') : DEFAULTS['PERPAGE']; - $this->_viewDatas['uri'] = $this->request->getUri(); - } - //index 모델 전처리 - protected function index_setCondition() - { - foreach ($this->_viewDatas['fieldFilters'] as $field) { - $value = $this->request->getVar($field) ? $this->request->getVar($field) : false; - if ($value) { - $this->_model->where($field, $value); - } - } - $word = $this->request->getVar('word') ? $this->request->getVar('word') : ''; - if (isset($word) && $word !== '') { - $this->_model->setIndexWordFilter($word); - } - $start = $this->request->getVar('start') ? $this->request->getVar('start') : ''; - $end = $this->request->getVar('end') ? $this->request->getVar('end') : ''; - if (isset($start) && $start !== '' && isset($end) && $end !== '') { - $this->_model->setIndexDateFilter($start, $end); - } - } - protected function index_getRows(int $page = 0, int $per_page = 0): array - { - //Totalcount 처리 - $this->index_setCondition(); - $this->_viewDatas['total_count'] = $this->_model->countAllResults(); - //Rows 처리 - $this->index_setCondition(); - //OrderBy - $order_field = $this->request->getVar('order_field') ? $this->request->getVar('order_field') : 'uid'; - $order_value = $this->request->getVar('order_value') ? $this->request->getVar('order_value') : 'DESC'; - $this->_model->setIndexOrderBy($order_field, $order_value); - //Limit - $rows = $per_page ? $this->_model->findAll($per_page, $page * $per_page - $per_page) : $this->_model->findAll(); - // log_message("debug", __METHOD__ . "에서 호출[{$per_page}:{$page}=>{$page}*{$per_page}-{$per_page}]\n" . $this->_model->getLastQuery()); - return $rows; - } - private function index_getPagination($pager_group = 'default', int $segment = 0, $template = 'bootstrap_full'): string - { - // 1.Views/Pagers/에 bootstrap_full.php,bootstrap_simple.php 생성 - // 2.app/Config/Pager.php/$templates에 'bootstrap_full => 'Pagers\bootstrap_full', - // 'bootstrap_simple' => 'Pagers\bootstrap_simple', 추가 - $pager = \Config\Services::pager(); - // $this->_model->paginate($this->_viewDatas['per_page'], $pager_group, $this->_viewDatas['page'], $segment); - $pager->makeLinks( - $this->_viewDatas['page'], - $this->_viewDatas['per_page'], - $this->_viewDatas['total_count'], - $template, - $segment, - $pager_group - ); - $this->_viewDatas['page'] = $pager->getCurrentPage($pager_group); - $this->_viewDatas['total_page'] = $pager->getPageCount($pager_group); - return $pager->links($pager_group, $template); - } - protected function index_process() - { - //모델 처리 - $this->_viewDatas['rows'] = $this->index_getRows((int)$this->_viewDatas['page'], (int)$this->_viewDatas['per_page']); - //줄수 처리용 - $this->_viewDatas['pageOptions'] = array("" => "줄수선택"); - for ($i = 10; $i <= $this->_viewDatas['total_count'] + $this->_viewDatas['per_page']; $i += 10) { - $this->_viewDatas['pageOptions'][$i] = $i; - } - //pagenation 처리 - $this->_viewDatas['pagination'] = $this->index_getPagination(); - } - protected function index_procedure() - { - try { - $this->index_init(); - $this->index_process(); - return view($this->_viewPath . '/index', $this->_viewDatas); - } catch (\Exception $e) { - return alert_CommonHelper($e->getMessage(), 'back'); - } - } - - //Excel 관련 - protected function excel_init() - { - $this->_viewDatas['fields'] = $this->_defines['excel']['fields']; - $this->_viewDatas['fieldFilters'] = $this->_defines['excel']['fieldFilters']; - $this->_viewDatas['fieldFormOptions'] = $this->getFieldFormOptions($this->_viewDatas['fieldFilters']); - } - private function excel_getSpreadSheet() - { - //Excepl 초기화 - $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet(); - $sheet = $spreadsheet->getActiveSheet(); - //Header용 - $column = 'A'; - foreach ($this->_viewDatas['fields'] as $field) { - $sheet->setCellValue($column++ . '1', lang($this->_className . '.label.' . $field)); - } - //본문용 - $line = 2; - foreach ($this->index_getRows() as $row) { - $column = 'A'; - foreach ($this->_viewDatas['fields'] as $field) { - // echo "\n
".var_export($this->_fieldFilters,true)."\n
".var_export($fieldFormOptions,true);exit; - $value = in_array($field, $this->_viewDatas['fieldFilters']) ? $this->_viewDatas['fieldFormOptions'][$field][$row[$field]] : $row[$field]; - $sheet->setCellValue($column . $line, $value); - $column++; - } - $line++; - } - return $spreadsheet; - } - protected function excel_process() - { - $fileName = date('Y-m-d_Hm') . '.xlsx'; - //파일저장 참고:https://teserre.tistory.com/19 - $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($this->excel_getSpreadSheet(), 'Xlsx'); - //파일저장용 - // $writer->save(Excel_FilePath . '/' . $fileName); - //Download시 - header("Content-Type: application/vnd.ms-excel"); - header(sprintf("Content-Disposition: attachment; filename=%s", urlencode($fileName))); - return $writer->save('php://output'); - } - protected function excel_procedure() - { - try { - $this->excel_init(); - return $this->excel_process(); - } catch (\Exception $e) { - return alert_CommonHelper($e->getMessage(), 'back'); - } - } -} diff --git a/app/Controllers/Front/FrontController.php b/app/Controllers/Front/FrontController.php index 956d912..89d5312 100644 --- a/app/Controllers/Front/FrontController.php +++ b/app/Controllers/Front/FrontController.php @@ -2,15 +2,17 @@ namespace App\Controllers\Front; +use App\Controllers\BaseController; use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\ResponseInterface; use Psr\Log\LoggerInterface; -class FrontController extends \App\Controllers\Common\CommonController + +class FrontController extends BASEController { public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger) { parent::initController($request, $response, $logger); - $this->_viewPath = $this->_viewPath.'/front'; + $this->_viewPath = $this->_viewPath . '/front'; $this->_viewDatas['layout'] = LAYOUTS['front']; $this->_viewDatas['title'] = "사용자페이지"; } diff --git a/app/Entities/UserEntity.php b/app/Entities/UserEntity.php index e876c0f..6b0de1b 100644 --- a/app/Entities/UserEntity.php +++ b/app/Entities/UserEntity.php @@ -22,8 +22,4 @@ class UserEntity extends CommonEntity { return $this->attributes['passwd']; } - public function getEncryptedPassword(string $password) - { - return password_hash($password, PASSWORD_DEFAULT); - } } diff --git a/app/Filters/AuthFilter.php b/app/Filters/AuthFilter.php index 56b320a..dfac979 100644 --- a/app/Filters/AuthFilter.php +++ b/app/Filters/AuthFilter.php @@ -25,23 +25,24 @@ class AuthFilter implements FilterInterface */ public function before(RequestInterface $request, $arguments = null) { - //dd($request);exit; - if (!session()->get(LOGINS['ISLOGIN'])) { - session()->set(LOGINS['RETURN_URL'], $request->getUri()->getPath() . '?' . $request->getUri()->getQuery()); - $error = session()->getFlashdata('error') ? session()->getFlashdata('error') : '먼저 로그인을하셔야합니다.'; - return redirect()->to('/login')->with('error', $error); - } - - if (!in_array(session()->get(LOGINS['USER']['NAME'])['role'], $arguments)) { - return redirect()->to('/login')->with( - 'error', - sprintf( - "%s 회원님은 %s로서 접속에 필요한 권한[%s]이 없습니다. ", - session()->get(LOGINS['USER']['NAME'])[LOGINS['USER']['FIELDS']['TITLE']], - session()->get(LOGINS['USER']['NAME'])[LOGINS['USER']['FIELDS']['ROLE']], - implode(",", $arguments) - ) - ); + // 로그인을 했으면 + if (session()->get(SESSION_NAMES['USER'])) { + $userSessions = session()->get(SESSION_NAMES['USER']); + // 회원 ROLE이 필요ROLE 목록에 존재하지 않으면(ACL) + if (!in_array($userSessions[SESSION_USER_FIELDS['ROLE']], $arguments)) { + return redirect()->to('/login')->with( + 'error', + sprintf( + "%s 회원님은 %s로서 접속에 필요한 권한[%s]이 없습니다. ", + $userSessions[SESSION_USER_FIELDS['TITLE']], + $userSessions[SESSION_USER_FIELDS['ROLE']], + implode(",", $arguments) + ) + ); + } + } else { + session()->set(SESSION_NAMES['RETURN_URL'], $request->getUri()->getPath() . '?' . $request->getUri()->getQuery()); + return redirect()->to('/login')->with('error', session()->getFlashdata('error') ?: '먼저 로그인을하셔야합니다.'); } } diff --git a/app/Language/en/Admin/UserSNS.php b/app/Language/en/Admin/UserSNS.php index 72631b5..22db1cc 100644 --- a/app/Language/en/Admin/UserSNS.php +++ b/app/Language/en/Admin/UserSNS.php @@ -8,6 +8,7 @@ return [ 'id' => "SNS ID", 'name' => "SNS 이름", 'email' => "SNS 메일", + 'detail' => "SNS 정보", 'status' => "상태", 'updated_at' => "수정일", 'created_at' => "작성일" diff --git a/app/Libraries/Adapter/Auth/Adapter.php b/app/Libraries/Adapter/Auth/Adapter.php index 8cd8e9f..bab3357 100644 --- a/app/Libraries/Adapter/Auth/Adapter.php +++ b/app/Libraries/Adapter/Auth/Adapter.php @@ -13,10 +13,12 @@ abstract class Adapter private $_userModel = null; private $_userSNSModel = null; protected $_debug = false; + protected $_session = null; protected function __construct(string $site, $debug = false) { $this->_site = $site; $this->_debug = $debug; + $this->_session = \Config\Services::session(); } final public function getSiteName(): string { @@ -46,15 +48,10 @@ abstract class Adapter protected function setUserSession(UserEntity $entity): void { - session()->set(LOGINS['ISLOGIN'], true); - $datas = array(); - foreach (LOGINS['USER']['FIELDS'] as $field) { - $datas[$field] = $entity->$field; + $datas = array(SESSION_NAMES['USER'] => array()); + foreach (SESSION_USER_FIELDS as $key => $field) { + $datas[SESSION_NAMES['USER']][$field] = $entity->$field; } - session()->set(array(LOGINS['USER']['NAME'] => $datas)); - } - protected function getUserSession(): array - { - return session()->get(LOGINS['USER']['NAME']); + $this->_session->set($datas); } } diff --git a/app/Libraries/Adapter/Auth/GoogleAdapter.php b/app/Libraries/Adapter/Auth/GoogleAdapter.php index 216d22f..00e41b2 100644 --- a/app/Libraries/Adapter/Auth/GoogleAdapter.php +++ b/app/Libraries/Adapter/Auth/GoogleAdapter.php @@ -16,10 +16,9 @@ class GoogleAdapter extends Adapter { if (is_null($this->_client)) { $this->_client = new \Google_Client(); - $this->_client->setClientId(AUTHS[$this->getSiteName()]['CLIENT_ID']); - $this->_client->setClientSecret(AUTHS[$this->getSiteName()]['CLIENT_KEY']); - // throw new \Exception("URL:" . base_url() . AUTHS[$this->getSiteName()]['CALLBACK_URL']); - $this->_client->setRedirectUri(base_url() . AUTHS[$this->getSiteName()]['CALLBACK_URL']); + $this->_client->setClientId(AUTH_ADAPTERS[$this->getSiteName()]['CLIENT_ID']); + $this->_client->setClientSecret(AUTH_ADAPTERS[$this->getSiteName()]['CLIENT_KEY']); + $this->_client->setRedirectUri(base_url() . AUTH_ADAPTERS[$this->getSiteName()]['CALLBACK_URL']); $this->_client->addScope('email'); $this->_client->addScope('profile'); } @@ -37,23 +36,23 @@ class GoogleAdapter extends Adapter if (isset($tokenInfo['error'])) { throw new \Exception($tokenInfo['error']); } - $token = $tokenInfo[AUTHS[$this->getSiteName()]['TOKEN_NAME']]; + $token = $tokenInfo[AUTH_ADAPTERS[$this->getSiteName()]['TOKEN_NAME']]; //3. Google Service에 접근하기위해 Access Token을 설정 $this->getClient()->setAccessToken($token); //4. Google에 로그인이 했으므로 세션에 Token값 설정 - session()->set(AUTHS[$this->getSiteName()]['TOKEN_NAME'], $token); + $this->_session->set(AUTH_ADAPTERS[$this->getSiteName()]['TOKEN_NAME'], $token); } private function getAccessToken(): ?string { - return session()->get(AUTHS[$this->getSiteName()]['TOKEN_NAME']); + return $this->_session->get(AUTH_ADAPTERS[$this->getSiteName()]['TOKEN_NAME']); } public function getAuthButton() { $button = ""; if (!$this->getAccessToken()) { - $button = anchor($this->getClient()->createAuthUrl(), AUTHS[$this->getSiteName()]['ICON'], ["target" => "_self"]); + $button = anchor($this->getClient()->createAuthUrl(), AUTH_ADAPTERS[$this->getSiteName()]['ICON'], ["target" => "_self"]); } return $button; } diff --git a/app/Libraries/Adapter/Auth/LocalAdapter.php b/app/Libraries/Adapter/Auth/LocalAdapter.php index 5334fa4..aa3e550 100644 --- a/app/Libraries/Adapter/Auth/LocalAdapter.php +++ b/app/Libraries/Adapter/Auth/LocalAdapter.php @@ -10,6 +10,7 @@ class LocalAdapter extends Adapter { parent::__construct($site, $debug); } + public function getAuthButton() { return ""; diff --git a/app/Models/CommonModel.php b/app/Models/CommonModel.php index 58a1034..3c9ee43 100644 --- a/app/Models/CommonModel.php +++ b/app/Models/CommonModel.php @@ -4,12 +4,10 @@ namespace App\Models; use CodeIgniter\Model; use App\Libraries\Log\Log; -use App\Trait\CommonTrait; +use App\Entities\CommonEntity; -class CommonModel extends Model +abstract class CommonModel extends Model { - use CommonTrait; - protected $DBGroup = 'default'; // protected $table = 'user'; protected $primaryKey = 'uid'; @@ -43,13 +41,51 @@ class CommonModel extends Model protected $beforeDelete = []; protected $afterDelete = []; + abstract public function getEntityByField($field, $value): ?CommonEntity; + abstract public function getEntity($uid): ?CommonEntity; + abstract public function getFieldFormOptions(): array; + + //참고:https://www.delftstack.com/howto/php/php-uuid/#create-a-function-to-generate-v5-uuid-in-php + // $v5_uuid = getUUIDv5_CommonTrait('8fc990b07418d5826d98de952cfb268dee4a23a3', 'delftstack!'); + final public function getUUIDv5_CommonTrait() + { + $n_hex = str_replace(array('-', '{', '}'), '', UUIDS['NAMESPACE']); // Getting hexadecimal components of namespace + $binray_str = ''; // Binary value string + //Namespace UUID to bits conversion + for ($i = 0; $i < strlen($n_hex); $i += 2) { + $binray_str .= chr(hexdec($n_hex[$i] . $n_hex[$i + 1])); + } + //hash value + $hashing = sha1($binray_str . UUIDS['SECRET']); + + return sprintf( + '%08s-%04s-%04x-%04x-%12s', + // 32 bits for the time_low + substr($hashing, 0, 8), + // 16 bits for the time_mid + substr($hashing, 8, 4), + // 16 bits for the time_hi, + (hexdec(substr($hashing, 12, 4)) & 0x0fff) | 0x5000, + // 8 bits and 16 bits for the clk_seq_hi_res, + // 8 bits for the clk_seq_low, + (hexdec(substr($hashing, 16, 4)) & 0x3fff) | 0x8000, + // 48 bits for the node + substr($hashing, 20, 12) + ); + } final protected function create_process($entity) { + //primaryKey 할당 + if ($this->useAutoIncrement === false) { + $pk = $this->primaryKey; + $entity->$pk = $this->getUUIDv5_CommonTrait(); + } 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)); } + //primaryKey 할당 if ($this->useAutoIncrement === true) { $pk = $this->primaryKey; $entity->$pk = $this->insertID(); diff --git a/app/Models/LoggerModel.php b/app/Models/LoggerModel.php index 3d6c4c4..e0b324a 100644 --- a/app/Models/LoggerModel.php +++ b/app/Models/LoggerModel.php @@ -9,7 +9,7 @@ class LoggerModel extends CommonModel protected $table = 'tw_logger'; // protected $primaryKey = 'uid'; // protected $useAutoIncrement = true; - protected $allowedFields = ['tw_user_uid', 'title', 'content', 'status', 'updated_at']; + protected $allowedFields = ['user_uid', 'title', 'content', 'status', 'updated_at']; protected $validationRules = [ 'uid' => 'if_exist|numeric', 'user_uid' => 'required|string', @@ -22,22 +22,37 @@ class LoggerModel extends CommonModel public function getEntityByField($field, $value): ?LoggerEntity { - return $this->asObject(LoggerEntity::class)->where($field, $value)->first(); + $entity = $this->asObject(LoggerEntity::class)->where($field, $value)->first(); + if (is_null($entity)) { + throw new \Exception("해당 데이터가 없습니다.\n {$field}->{$value}"); + } + return $entity; } - public function getEntity(int $uid): ?LoggerEntity + public function getEntity($uid): ?LoggerEntity { return $this->getEntityByField($this->primaryKey, $uid); } - public function create(array $datas): LoggerEntity + public function getFieldFormOptions(array $wheres = array(), $temps = array()): array { - $entity = new LoggerEntity($datas); - $entity->user_uid = session()->get(LOGINS['USER']['NAME'])[LOGINS['USER']['FIELDS']['PK']]; + foreach ($this->asObject(LoggerEntity::class)->where($wheres)->findAll() as $entity) { + $temps[$entity->getPrimaryKey()] = $entity->getTitle(); + } + return $temps; + } + public function create(array $formDatas): LoggerEntity + { + $entity = new LoggerEntity($formDatas); + //로그인 여부 확인후 필요한 데이터 저장 + if (session()->get(SESSION_NAMES['USER'])) { + $userSessions = session()->get(SESSION_NAMES['USER']); + $entity->user_uid = $userSessions[SESSION_USER_FIELDS['PK']]; + } return parent::create_process($entity); } - public function modify(LoggerEntity $entity, array $datas): LoggerEntity + public function modify(LoggerEntity $entity, array $formDatas): LoggerEntity { - foreach ($datas as $field => $value) { - if ($entity->$field != $datas[$field]) { + foreach ($formDatas as $field => $value) { + if ($entity->$field != $formDatas[$field]) { $entity->$field = $value; } } diff --git a/app/Models/UserModel.php b/app/Models/UserModel.php index b89c88c..a07433b 100644 --- a/app/Models/UserModel.php +++ b/app/Models/UserModel.php @@ -24,26 +24,36 @@ class UserModel extends CommonModel public function getEntityByField($field, $value): ?UserEntity { - return $this->asObject(UserEntity::class)->where($field, $value)->first(); + $entity = $this->asObject(UserEntity::class)->where($field, $value)->first(); + if (is_null($entity)) { + throw new \Exception("해당 데이터가 없습니다.\n {$field}->{$value}"); + } + return $entity; } - public function getEntity(string $uid): ?UserEntity + public function getEntity($uid): ?UserEntity { return $this->getEntityByField($this->primaryKey, $uid); } - public function create(array $datas): UserEntity + public function getFieldFormOptions(array $wheres = array(), $temps = array()): array { - $entity = new UserEntity(); - $entity->uid = $this->getUUIDv5_CommonTrait(UUIDS['NAMESPACE'], UUIDS['SECRET']); - foreach ($datas as $field => $value) { - $entity->$field = $field === 'passwd' ? $entity->getEncryptedPassword($value) : $value; + foreach ($this->asObject(UserEntity::class)->where($wheres)->findAll() as $entity) { + $temps[$entity->getPrimaryKey()] = $entity->getTitle(); + } + return $temps; + } + public function create(array $formDatas): UserEntity + { + $entity = new UserEntity($formDatas); + foreach ($formDatas as $field => $value) { + $entity->$field = $field === 'passwd' ? password_hash($value, PASSWORD_DEFAULT) : $value; } return parent::create_process($entity); } - public function modify(UserEntity $entity, array $datas): UserEntity + public function modify(UserEntity $entity, array $formDatas): UserEntity { - foreach ($datas as $field => $value) { - if ($entity->$field != $datas[$field]) { - $entity->$field = $field === 'passwd' ? $entity->getEncryptedPassword($value) : $value; + foreach ($formDatas as $field => $value) { + if ($entity->$field != $formDatas[$field]) { + $entity->$field = $field === 'passwd' ? password_hash($value, PASSWORD_DEFAULT) : $value; } } return parent::modify_process($entity); @@ -61,12 +71,4 @@ class UserModel extends CommonModel $this->orderBy("name", "ASC"); parent::setIndexOrderBy($field, $order); } - - public function getList(array $wheres = array(), $temps = array()): array - { - foreach ($this->where($wheres)->findAll() as $user) { - $temps[$user['uid']] = $user['name']; - } - return $temps; - } } diff --git a/app/Models/UserSNSModel.php b/app/Models/UserSNSModel.php index f52da9b..95da6b7 100644 --- a/app/Models/UserSNSModel.php +++ b/app/Models/UserSNSModel.php @@ -11,7 +11,7 @@ class UserSNSModel extends CommonModel // protected $useAutoIncrement = true; protected $allowedFields = ['user_uid', 'site', 'id', 'name', 'email', 'detail', 'status', 'updated_at', 'created_at']; protected $validationRules = [ - 'user_uid' => 'if_exist|number]', + 'user_uid' => 'if_exist|number', 'site' => 'required|string', 'id' => 'required|string', 'name' => 'required|string', @@ -24,27 +24,38 @@ class UserSNSModel extends CommonModel public function getEntityByField($field, $value): ?UserSNSEntity { - return $this->asObject(UserSNSEntity::class)->where($field, $value)->first(); + $entity = $this->asObject(UserSNSEntity::class)->where($field, $value)->first(); + if (is_null($entity)) { + throw new \Exception("해당 데이터가 없습니다.\n {$field}->{$value}"); + } + return $entity; } - public function getEntity(int $uid): ?UserSNSEntity + public function getEntity($uid): ?UserSNSEntity { return $this->getEntityByField($this->primaryKey, $uid); } - public function create(string $site, array $datas): UserSNSEntity + public function getFieldFormOptions(array $wheres = array(), $temps = array()): array + { + foreach ($this->asObject(UserSNSEntity::class)->where($wheres)->findAll() as $entity) { + $temps[$entity->getPrimaryKey()] = $entity->getTitle(); + } + return $temps; + } + public function create(string $site, array $formDatas): UserSNSEntity { $entity = new UserSNSEntity(); $entity->site = $site; - $entity->id = $datas['id']; - $entity->name = $datas['name']; - $entity->email = $datas['email']; - $entity->detail = json_encode($datas); + $entity->id = $formDatas['id']; + $entity->name = $formDatas['name']; + $entity->email = $formDatas['email']; + $entity->detail = json_encode($formDatas); $entity->status = 'standby'; return $this->create_process($entity); } - public function modify(UserSNSEntity $entity, array $datas): UserSNSEntity + public function modify(UserSNSEntity $entity, array $formDatas): UserSNSEntity { - foreach ($datas as $field => $value) { - if ($entity->$field != $datas[$field]) { + foreach ($formDatas as $field => $value) { + if ($entity->$field != $formDatas[$field]) { $entity->$field = $value; } } diff --git a/app/Trait/CommonTrait.php b/app/Trait/CommonTrait.php deleted file mode 100644 index 7b3d797..0000000 --- a/app/Trait/CommonTrait.php +++ /dev/null @@ -1,35 +0,0 @@ - \ No newline at end of file