servermgrv2 init...
This commit is contained in:
parent
ed26d19c95
commit
0988413e94
@ -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' => '<img src="/images/auth/google_login_button.png"/>',
|
||||
'DEBUG' => getenv("auth.google.debug") ?: false,
|
||||
'ICON' => getenv("auth.google.icon") ?: '<img src="/images/auth/google_login_button.png"/>',
|
||||
'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",
|
||||
]);
|
||||
|
||||
@ -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']);
|
||||
});
|
||||
|
||||
@ -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'] = "관리자페이지";
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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) . ' 선택']
|
||||
);
|
||||
|
||||
@ -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) . ' 선택']
|
||||
);
|
||||
|
||||
@ -1,8 +1,7 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controllers\Common;
|
||||
namespace App\Controllers;
|
||||
|
||||
use App\Controllers\BaseController;
|
||||
use App\Libraries\Adapter\Auth\Adapter;
|
||||
use CodeIgniter\HTTP\RequestInterface;
|
||||
use CodeIgniter\HTTP\ResponseInterface;
|
||||
@ -10,7 +9,6 @@ use Psr\Log\LoggerInterface;
|
||||
|
||||
class AuthController extends BaseController
|
||||
{
|
||||
private $_viewDatas = array();
|
||||
private $_adapters = array();
|
||||
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
|
||||
{
|
||||
@ -19,15 +17,14 @@ class AuthController extends BaseController
|
||||
$this->_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에 Login 정보 삭제
|
||||
if ($this->_session->get(SESSION_NAMES['USER'])) {
|
||||
session_destroy();
|
||||
}
|
||||
return redirect()->route('/');
|
||||
}
|
||||
}
|
||||
@ -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 . "<br>\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 . "<br>\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 . "<br>\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<br>" . $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 . "<br>\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 . "<br>\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<BR>".var_export($this->_fieldFilters,true)."\n<BR>".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');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,505 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controllers\Common;
|
||||
|
||||
use App\Libraries\Log\Log;
|
||||
use App\Controllers\BaseController;
|
||||
use CodeIgniter\HTTP\RequestInterface;
|
||||
use CodeIgniter\HTTP\ResponseInterface;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
class CommonController extends BaseController
|
||||
{
|
||||
protected $_className = '';
|
||||
protected $_model = null;
|
||||
protected $_defines = array();
|
||||
protected $_viewPath = '';
|
||||
protected $_viewDatas = array();
|
||||
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
|
||||
{
|
||||
parent::initController($request, $response, $logger);
|
||||
helper('Common');
|
||||
$this->_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 . "<br>\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 . "<br>\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 . "<br>\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<br>" . $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 . "<br>\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 . "<br>\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<BR>".var_export($this->_fieldFilters,true)."\n<BR>".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');
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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'] = "사용자페이지";
|
||||
}
|
||||
|
||||
@ -22,8 +22,4 @@ class UserEntity extends CommonEntity
|
||||
{
|
||||
return $this->attributes['passwd'];
|
||||
}
|
||||
public function getEncryptedPassword(string $password)
|
||||
{
|
||||
return password_hash($password, PASSWORD_DEFAULT);
|
||||
}
|
||||
}
|
||||
|
||||
@ -25,24 +25,25 @@ 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)) {
|
||||
// 로그인을 했으면
|
||||
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]이 없습니다. ",
|
||||
session()->get(LOGINS['USER']['NAME'])[LOGINS['USER']['FIELDS']['TITLE']],
|
||||
session()->get(LOGINS['USER']['NAME'])[LOGINS['USER']['FIELDS']['ROLE']],
|
||||
$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') ?: '먼저 로그인을하셔야합니다.');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -8,6 +8,7 @@ return [
|
||||
'id' => "SNS ID",
|
||||
'name' => "SNS 이름",
|
||||
'email' => "SNS 메일",
|
||||
'detail' => "SNS 정보",
|
||||
'status' => "상태",
|
||||
'updated_at' => "수정일",
|
||||
'created_at' => "작성일"
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -10,6 +10,7 @@ class LocalAdapter extends Adapter
|
||||
{
|
||||
parent::__construct($site, $debug);
|
||||
}
|
||||
|
||||
public function getAuthButton()
|
||||
{
|
||||
return "";
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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}");
|
||||
}
|
||||
public function getEntity(int $uid): ?LoggerEntity
|
||||
return $entity;
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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}");
|
||||
}
|
||||
public function getEntity(string $uid): ?UserEntity
|
||||
return $entity;
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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}");
|
||||
}
|
||||
public function getEntity(int $uid): ?UserSNSEntity
|
||||
return $entity;
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,35 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Trait;
|
||||
|
||||
trait CommonTrait
|
||||
{
|
||||
//참고:https://www.delftstack.com/howto/php/php-uuid/#create-a-function-to-generate-v5-uuid-in-php
|
||||
// $v5_uuid = getUUIDv5_CommonTrait('8fc990b07418d5826d98de952cfb268dee4a23a3', 'delftstack!');
|
||||
public function getUUIDv5_CommonTrait($name_space = '8fc990b07418d5826d98de952cfb268dee4a23a3', $string = 'delftstack1')
|
||||
{
|
||||
$n_hex = str_replace(array('-', '{', '}'), '', $name_space); // 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 . $string);
|
||||
|
||||
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)
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -1,19 +1,22 @@
|
||||
<link href="/css/admin/member_link.css" media="screen" rel="stylesheet" type="text/css" />
|
||||
<ul class="member-link navbar-nav me-auto mb-2 mb-lg-0">
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false"><i class="fa fa-fast-forward" aria-hidden="true"></i>Quick Link</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="/admin/cloudflare/zone"><i class="fa fa-comment"></i>Zone관리</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false"><i class="fa fa-id-card"></i></i><?= session()->get(LOGINS['USER']['NAME'])[LOGINS['USER']['FIELDS']['TITLE']] ?></a>
|
||||
<?php if (session()->get(SESSION_NAMES['USER'])) : ?>
|
||||
<?php $userSessions = session()->get(SESSION_NAMES['USER']); ?>
|
||||
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<i class="fa fa-id-card"></i> <?= $userSessions[SESSION_USER_FIELDS['TITLE']] ?>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li><a href="/admin/user/update/<?= session()->get(LOGINS['USER']['NAME'])[LOGINS['USER']['FIELDS']['PK']] ?>"><i class="fa fa-cog"></i>내정보수정</a></li>
|
||||
<li><a href="/admin/user/update/<?= $userSessions[SESSION_USER_FIELDS['PK']] ?>"><i class="fa fa-cog"></i>내정보수정</a></li>
|
||||
<li>
|
||||
<hr class="dropdown-divider">
|
||||
</li>
|
||||
<li><a href="/logout"><i class="fa fa-sign-out" aria-hidden="true"></i>Logout</a></li>
|
||||
</ul>
|
||||
<?php else : ?>
|
||||
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<i class="fa fa-id-card"></i> <a href="/login/">LOGIN</a>
|
||||
</a>
|
||||
<?php endif ?>
|
||||
</li>
|
||||
</ul>
|
||||
Loading…
Reference in New Issue
Block a user