servermgrv2 init...

This commit is contained in:
최준흠 2023-07-25 09:43:46 +09:00
parent eaa3a76677
commit ec13903407
31 changed files with 815 additions and 1383 deletions

View File

@ -168,14 +168,11 @@ define('FORM_OPTIONS', [
//Upload , Download 관련 //Upload , Download 관련
define('PATHS', [ define('PATHS', [
'EXCEL' => getenv('path.excel') ?: "../writable/Excel", 'EXCEL' => "excel/", 'UPLOAD' => "uploads/", 'DOWNLOAD' => "download/", 'API' => "api/",
'UPLOAD' => getenv('path.upload') ?: "../writable/uploads",
'DOWNLOAD' => getenv('path.download') ?: "../writable/download",
'API' => getenv('path.api') ?: "../writable/api",
]); ]);
foreach (PATHS as $key => $path) { foreach (PATHS as $key => $path) {
if (!is_dir(APPPATH . $path)) { if (!is_dir(WRITEPATH . $path)) {
mkdir(APPPATH . $path, 0640); mkdir(WRITEPATH . $path, 0640);
} }
} }
@ -188,6 +185,7 @@ define('ICONS', [
'SETTING' => '<i class="fa fa-cogs" aria-hidden="true"></i>', 'SETTING' => '<i class="fa fa-cogs" aria-hidden="true"></i>',
'FLAG' => '<i class="fa fa-flag" aria-hidden="true"></i>', 'FLAG' => '<i class="fa fa-flag" aria-hidden="true"></i>',
'EXCEL' => '<i class="fa fa-file-excel-o" style="font-size:24px"></i>', 'EXCEL' => '<i class="fa fa-file-excel-o" style="font-size:24px"></i>',
'IMAGE_FILE' => '<i class="fa fa-file-image-o" aria-hidden="true"></i>',
]); ]);
define('AUDIOS', [ define('AUDIOS', [
'Alram_GetEmail' => '<object width=0 height=0 data="/sound/jarvis_email.mp3" type="audio/mpeg"></object>', 'Alram_GetEmail' => '<object width=0 height=0 data="/sound/jarvis_email.mp3" type="audio/mpeg"></object>',

View File

@ -66,11 +66,6 @@ $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'au
$routes->get('delete/(:num)', 'UserSNSController::delete/$1'); $routes->get('delete/(:num)', 'UserSNSController::delete/$1');
$routes->get('toggle/(:num)/(:hash)', 'UserSNSController::toggle/$1/$2'); $routes->get('toggle/(:num)/(:hash)', 'UserSNSController::toggle/$1/$2');
}); });
$routes->group('logger', static function ($routes) {
$routes->get('', 'LoggerController::index');
$routes->get('excel', 'LoggerController::excel');
$routes->get('view/(:num)', 'LoggerController::view/$1');
});
$routes->group('boardconfig', static function ($routes) { $routes->group('boardconfig', static function ($routes) {
$routes->get('', 'BoardConfigController::index'); $routes->get('', 'BoardConfigController::index');
$routes->get('excel', 'BoardConfigController::excel/$1'); $routes->get('excel', 'BoardConfigController::excel/$1');
@ -96,6 +91,22 @@ $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'au
$routes->get('delete/(:num)', 'BoardController::delete/$1', ['filter' => 'authFilter:master']); $routes->get('delete/(:num)', 'BoardController::delete/$1', ['filter' => 'authFilter:master']);
$routes->get('toggle/(:num)/(:hash)', 'BoardController::toggle/$1/$2'); $routes->get('toggle/(:num)/(:hash)', 'BoardController::toggle/$1/$2');
$routes->post('batchjob', 'BoardController::batchjob'); $routes->post('batchjob', 'BoardController::batchjob');
$routes->get('download/(:num)', 'BoardController::download/$1');
});
$routes->group('hpilo', static function ($routes) {
$routes->get('', 'HPILOController::index');
$routes->get('excel', 'HPILOController::excel');
$routes->get('insert', 'HPILOController::insert_form');
$routes->post('insert', 'HPILOController::insert');
$routes->get('update/(:num)', 'HPILOController::update_form/$1');
$routes->post('update/(:num)', 'HPILOController::update/$1');
$routes->get('view/(:num)', 'HPILOController::view/$1');
$routes->get('delete/(:num)', 'HPILOController::delete/$1', ['filter' => 'authFilter:master']);
$routes->get('toggle/(:num)/(:hash)', 'HPILOController::toggle/$1/$2');
$routes->post('batchjob', 'HPILOController::batchjob');
$routes->get('console/(:num)', 'HPILOController::console/$1');
$routes->get('reset/(:num)/(:alpha)', 'HPILOController::reset/$1/$2');
$routes->get('reload/(:num)', 'HPILOController::reset/$1');
}); });
}); });
/* /*

127
app/Config/Routes_HPILO.php Normal file
View File

@ -0,0 +1,127 @@
<?php
namespace Config;
// Create a new instance of our RouteCollection class.
$routes = Services::routes();
/*
* --------------------------------------------------------------------
* Router Setup
* --------------------------------------------------------------------
*/
$routes->setDefaultNamespace('App\Controllers');
$routes->setDefaultController('Home');
$routes->setDefaultMethod('index');
$routes->setTranslateURIDashes(false);
$routes->set404Override();
$routes->setAutoRoute(false);
// The Auto Routing (Legacy) is very dangerous. It is easy to create vulnerable apps
// where controller filters or CSRF protection are bypassed.
// If you don't want to define all routes, please use the Auto Routing (Improved).
// Set `$autoRoutesImproved` to true in `app/Config/Feature.php` and set the following to true.
// $routes->setAutoRoute(false);
/*
* --------------------------------------------------------------------
* Route Definitions
* --------------------------------------------------------------------
*/
// We get a performance increase by specifying the default
// route since we don't have to scan directories.
//추가 RULE UUID형식
$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', '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) {
$routes->get('/', 'FrontController::index');
});
// authGuard는 App\Config\Filters.php의 $aliases에 선언한 이름이어야 함
$routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'authFilter:master,director,cloudflare,manager'], static function ($routes) {
$routes->get('/', 'Home::index');
$routes->group('user', static function ($routes) {
$routes->get('', 'UserController::index');
$routes->get('excel', 'UserController::excel');
$routes->get('insert', 'UserController::insert_form');
$routes->post('insert', 'UserController::insert');
$routes->get('update/(:uuid)', 'UserController::update_form/$1');
$routes->post('update/(:uuid)', 'UserController::update/$1');
$routes->get('view/(:uuid)', 'UserController::view/$1');
$routes->get('delete/(:uuid)', 'UserController::delete/$1', ['filter' => 'authFilter:master']);
$routes->get('toggle/(:uuid)/(:hash)', 'UserController::toggle/$1/$2');
$routes->post('batchjob', 'UserController::batchjob');
});
$routes->group('usersns', static function ($routes) {
$routes->get('', 'UserSNSController::index');
$routes->get('excel', 'UserSNSController::excel');
$routes->get('view/(:num)', 'UserSNSController::view/$1');
$routes->get('delete/(:num)', 'UserSNSController::delete/$1');
$routes->get('toggle/(:num)/(:hash)', 'UserSNSController::toggle/$1/$2');
});
$routes->group('boardconfig', static function ($routes) {
$routes->get('', 'BoardConfigController::index');
$routes->get('excel', 'BoardConfigController::excel/$1');
$routes->get('insert', 'BoardConfigController::insert_form');
$routes->post('insert', 'BoardConfigController::insert');
$routes->get('update/(:uuid)', 'BoardConfigController::update_form/$1');
$routes->post('update/(:uuid)', 'BoardConfigController::update/$1');
$routes->get('view/(:uuid)', 'BoardConfigController::view/$1');
$routes->get('delete/(:uuid)', 'BoardConfigController::delete/$1', ['filter' => 'authFilter:master']);
$routes->get('toggle/(:uuid)/(:hash)', 'BoardConfigController::toggle/$1/$2');
$routes->post('batchjob', 'BoardConfigController::batchjob');
});
$routes->group('board', static function ($routes) {
$routes->get('', 'BoardController::index');
$routes->get('excel', 'BoardController::excel/$1');
$routes->get('insert', 'BoardController::insert_form');
$routes->post('insert', 'BoardController::insert');
$routes->get('update/(:num)', 'BoardController::update_form/$1');
$routes->post('update/(:num)', 'BoardController::update/$1');
$routes->get('view/(:num)', 'BoardController::view/$1');
$routes->get('reply/(:num)', 'BoardController::reply_form/$1');
$routes->post('reply/(:num)', 'BoardController::reply/$1');
$routes->get('delete/(:num)', 'BoardController::delete/$1', ['filter' => 'authFilter:master']);
$routes->get('toggle/(:num)/(:hash)', 'BoardController::toggle/$1/$2');
$routes->post('batchjob', 'BoardController::batchjob');
$routes->get('download/(:num)', 'BoardController::download/$1');
});
$routes->group('hpilo', static function ($routes) {
$routes->get('', 'HPILOController::index');
$routes->get('excel', 'HPILOController::excel');
$routes->get('insert', 'HPILOController::insert_form');
$routes->post('insert', 'HPILOController::insert');
$routes->get('update/(:num)', 'HPILOController::update_form/$1');
$routes->post('update/(:num)', 'HPILOController::update/$1');
$routes->get('view/(:num)', 'HPILOController::view/$1');
$routes->get('delete/(:num)', 'HPILOController::delete/$1', ['filter' => 'authFilter:master']);
$routes->get('toggle/(:num)/(:hash)', 'HPILOController::toggle/$1/$2');
$routes->post('batchjob', 'HPILOController::batchjob');
$routes->get('console/(:num)', 'HPILOController::console/$1');
$routes->get('reset/(:num)/(:alpha)', 'HPILOController::reset/$1/$2');
$routes->get('reload/(:num)', 'HPILOController::reset/$1');
});
});
/*
* --------------------------------------------------------------------
* Additional Routing
* --------------------------------------------------------------------
*
* There will often be times that you need additional routing and you
* need it to be able to override any defaults in this file. Environment
* based routes is one such time. require() additional route files here
* to make that happen.
*
* You will have access to the $routes object within that file without
* needing to reload it.
*/
if (is_file(APPPATH . 'Config/' . ENVIRONMENT . '/Routes.php')) {
require APPPATH . 'Config/' . ENVIRONMENT . '/Routes.php';
}

View File

@ -0,0 +1,64 @@
<?php
namespace App\Controllers\Admin;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
use App\Libraries\Log\Log;
abstract class AdminHierarchyController extends AdminController
{
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
parent::initController($request, $response, $logger);
}
//Reply관련
protected function reply_form_process($entity)
{
return $this->update_form_process($entity);
}
final public function reply_form($uid)
{
try {
$entity = $entity = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]);
$this->_viewDatas['fields'] = $this->_model->getFields('reply');
$this->_viewDatas['fieldRules'] = $this->_model->getFieldRules($this->_viewDatas['fields'], 'reply');
$this->_viewDatas['fieldFilters'] = $this->_model->getFieldFilters();
$this->_viewDatas['entity'] = $this->reply_form_process($entity);
return view($this->_viewPath . '/reply', $this->_viewDatas);
} catch (\Exception $e) {
return alert_CommonHelper($e->getMessage(), 'back');
}
}
protected function reply_validate($entity)
{
return $this->update_validate($entity);
}
protected function reply_process($entity)
{
return $this->_model->reply($entity, $this->_viewDatas['fieldDatas']);
}
public function reply($uid)
{
$message = "";
try {
$entity = $entity = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]);
$this->_viewDatas['fields'] = $this->_model->getFields('reply');
$this->_viewDatas['fieldRules'] = $this->_model->getFieldRules($this->_viewDatas['fields'], 'reply');
$this->_viewDatas['fieldFilters'] = $this->_model->getFieldFilters();
$entity = $this->reply_validate($entity);
$entity = $this->reply_process($entity);
$message = "{$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다.";
log_message("info", "{$this->_viewDatas['title']} {$message}");
return alert_CommonHelper($message, $this->_session->get(SESSION_NAMES['RETURN_URL']));
} catch (\Exception $e) {
$message = __FUNCTION__ . " 실패하였습니다.";
log_message("warning", $e->getMessage());
log_message("warning", var_export($this->_viewDatas['fieldDatas'], true));
log_message("info", "{$this->_viewDatas['title']} {$message}",);
return redirect()->back()->withInput()->with("error", $message . "<br>\n{$e->getMessage()}");
}
}
}

View File

@ -7,97 +7,16 @@ use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
class BoardConfigController extends \App\Controllers\Admin\AdminController class BoardConfigController extends AdminController
{ {
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger) public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{ {
parent::initController($request, $response, $logger); parent::initController($request, $response, $logger);
$this->_className .= '/BoardConfig'; $this->_className .= '/BoardConfig';
$this->_model = new BoardConfigModel(); $this->_model = new BoardConfigModel();
$this->_defines = [
'insert' => [
'fields' => $this->_model->getFields(),
'fieldRules' => $this->_model->getFieldRules($this->_model->getFields()),
'fieldFilters' => $this->_model->getFieldFilters($this->_model->getFields()),
],
'update' => [
'fields' => $this->_model->getFields(),
'fieldRules' => $this->_model->getFieldRules($this->_model->getFields()),
'fieldFilters' => $this->_model->getFieldFilters($this->_model->getFields()),
],
'view' => [
'fields' => $this->_model->getFields(),
'fieldRules' => $this->_model->getFieldRules($this->_model->getFields()),
'fieldFilters' => $this->_model->getFieldFilters($this->_model->getFields()),
],
'index' => [
'fields' => $this->_model->getFields([], ['head', 'tail']),
'fieldFilters' => $this->_model->getFieldFilters($this->_model->getFields()),
'batchjobFilters' => $this->_model->getFieldFilters($this->_model->getFields(), ['isupload', 'isdownload']),
],
'excel' => [
'fields' => $this->_model->getFields(),
'fieldFilters' => $this->_model->getFieldFilters($this->_model->getFields()),
],
];
helper($this->_className); helper($this->_className);
$this->_viewPath = strtolower($this->_className); $this->_viewPath = strtolower($this->_className);
$this->_viewDatas['title'] = lang($this->_className . '.title'); $this->_viewDatas['title'] = lang($this->_className . '.title');
$this->_viewDatas['className'] = $this->_className; $this->_viewDatas['className'] = $this->_className;
} }
//Field별 Form Option용
protected function getFieldFormOption(string $field): array
{
switch ($field) {
default:
return parent::getFieldFormOption($field);
break;
}
}
////Action 모음
//Insert관련
final public function insert()
{
$this->_defines[__FUNCTION__]['fieldRules']['name'] .= '|is_unique[tw_board_config.name]';
return $this->insert_procedure();
}
//Update관련
final public function update($uid)
{
return $this->update_procedure($uid);
}
//Toggle관련
final public function toggle($uid, string $field)
{
return $this->toggle_procedure($uid, $field);
}
//Batchjob 관련
final public function batchjob()
{
return $this->batchjob_procedure();
}
//Delete 관련
final public function delete($uid)
{
return $this->delete_procedure($uid);
}
//View 관련
final public function view($uid)
{
return $this->view_procedure($uid);
}
//Index 관련
final public function index()
{
return $this->index_procedure();
}
//Excel 관련
final public function excel()
{
return $this->excel_procedure();
}
} }

View File

@ -8,7 +8,7 @@ use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
class BoardController extends \App\Controllers\Admin\AdminController class BoardController extends AdminHierarchyController
{ {
private $_boardConfigModel = null; private $_boardConfigModel = null;
private $_board_config_uids = null; private $_board_config_uids = null;
@ -17,34 +17,6 @@ class BoardController extends \App\Controllers\Admin\AdminController
parent::initController($request, $response, $logger); parent::initController($request, $response, $logger);
$this->_className .= '/Board'; $this->_className .= '/Board';
$this->_model = new BoardModel(); $this->_model = new BoardModel();
$this->_defines = [
'insert' => [
'fields' => $this->_model->getFields([], ['user_uid', 'view_cnt']),
'fieldRules' => $this->_model->getFieldRules($this->_model->getFields()),
'fieldFilters' => $this->_model->getFieldFilters($this->_model->getFields()),
],
'update' => [
'fields' => $this->_model->getFields([], ['user_uid', 'view_cnt']),
'fieldRules' => $this->_model->getFieldRules($this->_model->getFields()),
'fieldFilters' => $this->_model->getFieldFilters($this->_model->getFields()),
],
'view' => [
'fields' => $this->_model->getFields(),
'fieldRules' => $this->_model->getFieldRules($this->_model->getFields()),
'fieldFilters' => $this->_model->getFieldFilters($this->_model->getFields()),
],
'index' => [
'fields' => $this->_model->getFields([], ['upload_file', 'passwd', 'content']),
'fieldFilters' => $this->_model->getFieldFilters($this->_model->getFields()),
'batchjobFilters' => $this->_model->getFieldFilters($this->_model->getFields()),
],
'excel' => [
'fields' => $this->_model->getFields([], ['upload_file', 'passwd']),
'fieldFilters' => $this->_model->getFieldFilters($this->_model->getFields()),
],
];
helper($this->_className); helper($this->_className);
$this->_viewPath = strtolower($this->_className); $this->_viewPath = strtolower($this->_className);
$this->_viewDatas['title'] = lang($this->_className . '.title'); $this->_viewDatas['title'] = lang($this->_className . '.title');
@ -65,9 +37,12 @@ class BoardController extends \App\Controllers\Admin\AdminController
$options = $this->_board_config_uids = $this->_board_config_uids ?: $this->getBoardConfigModel()->getFieldFormOptions(['status' => 'use']); $options = $this->_board_config_uids = $this->_board_config_uids ?: $this->getBoardConfigModel()->getFieldFormOptions(['status' => 'use']);
break; break;
default: default:
$options = parent::getFieldFormOption($field); return parent::getFieldFormOption($field);
break; break;
} }
if (!is_array($options)) {
throw new \Exception(__FUNCTION__ . "에서 {$this->_className}의 Field:{$field}의 FormOptionData가 array가 아닙니다.\n" . var_export($options, true));
}
return $options; return $options;
} }
@ -79,7 +54,7 @@ class BoardController extends \App\Controllers\Admin\AdminController
$this->_viewDatas['fieldDatas'][$field] = $this->request->getVar($field); $this->_viewDatas['fieldDatas'][$field] = $this->request->getVar($field);
$this->_viewDatas['fieldDatas']['confirmpassword'] = $this->request->getVar('confirmpassword'); $this->_viewDatas['fieldDatas']['confirmpassword'] = $this->request->getVar('confirmpassword');
break; break;
case 'upload_file': case 'board_file':
$this->_viewDatas['fieldDatas'][$field] = $this->single_upload_procedure($field, $entity); $this->_viewDatas['fieldDatas'][$field] = $this->single_upload_procedure($field, $entity);
break; break;
default: default:
@ -89,41 +64,6 @@ class BoardController extends \App\Controllers\Admin\AdminController
return $this->_viewDatas['fieldDatas']; return $this->_viewDatas['fieldDatas'];
} }
////Action 모음
//Insert관련
final protected function insert_process()
{
return parent::insert_process();
}
final public function insert()
{
return $this->insert_procedure();
}
//Update관련
final public function update($uid)
{
return $this->update_procedure($uid);
}
//Reply 관련
final public function reply($uid)
{
return $this->reply_procedure($uid);
}
//Toggle관련
final public function toggle($uid, string $field)
{
return $this->toggle_procedure($uid, $field);
}
//Batchjob 관련
final public function batchjob()
{
return $this->batchjob_procedure();
}
//Delete 관련
final public function delete($uid)
{
return $this->delete_procedure($uid);
}
//View 관련 //View 관련
protected function view_process($entity) protected function view_process($entity)
{ {
@ -131,18 +71,21 @@ class BoardController extends \App\Controllers\Admin\AdminController
$this->_model->increaseViewCount($entity->getPrimaryKey()); $this->_model->increaseViewCount($entity->getPrimaryKey());
return parent::view_process($entity); return parent::view_process($entity);
} }
final public function view($uid) //File Download관련
public function download($uid)
{ {
return $this->view_procedure($uid); try {
$entity = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]);
if (!$entity->getFile()) {
throw new \Exception("해당게시물은 첨부파일이 확인되지 않습니다.");
} }
//Index 관련 list($origin_filename, $filename) = explode("||", $entity->getFile());
final public function index() if (is_file(WRITEPATH . PATHS['UPLOAD'] . "/" . $origin_filename)) {
{ throw new \Exception("파일이 확인되지 않습니다.");
return $this->index_procedure(); }
return $this->response->download(WRITEPATH . PATHS['UPLOAD'] . "/" . $filename, null)->setFileName(date("YmdHms") . '_' . $origin_filename);
} catch (\Exception $e) {
return alert_CommonHelper($e->getMessage(), 'back');
} }
//Excel 관련
final public function excel()
{
return $this->excel_procedure();
} }
} }

View File

@ -18,44 +18,6 @@ class HPILOController extends \App\Controllers\Admin\AdminController
parent::initController($request, $response, $logger); parent::initController($request, $response, $logger);
$this->_className .= '/HPILO'; $this->_className .= '/HPILO';
$this->_model = new HPILOModel(); $this->_model = new HPILOModel();
$this->_defines = [
'insert' => [
'fields' => ['customer', 'id', 'passwd', 'ip', 'port', 'status'],
'fieldFilters' => ['status'],
'fieldRules' => [
'customer' => 'required|min_length[4]|max_length[100]',
'id' => 'required|min_length[4]|max_length[20]',
'passwd' => 'required|trim|min_length[4]|max_length[150]',
'ip' => 'required|trim|min_length[4]|max_length[50]',
'port' => 'required|min_length[2]|max_length[20]',
]
],
'update' => [
'fields' => ['customer', 'id', 'passwd', 'ip', 'port', 'status'],
'fieldFilters' => ['status'],
'fieldRules' => [
'customer' => 'required|min_length[4]|max_length[100]',
'id' => 'required|min_length[4]|max_length[20]',
'passwd' => 'required|trim|min_length[4]|max_length[150]',
'ip' => 'required|trim|min_length[4]|max_length[50]',
'port' => 'required|min_length[2]|max_length[20]',
]
],
'view' => [
'fields' => ['customer', 'id', 'ip', 'port', 'model', 'processor', 'memory', 'health', 'power', 'detail', 'status', 'updated_at', 'created_at'],
'fieldFilters' => ['status'],
'fieldRules' => [],
],
'index' => [
'fields' => ['customer', 'ip', 'port', 'model', 'processor', 'memory', 'health', 'power', 'status', 'created_at'],
'fieldFilters' => ['power', 'status'],
'batchjobFilters' => [],
],
'excel' => [
'fields' => ['customer', 'ip', 'port', 'model', 'processor', 'memory', 'health', 'power', 'status', 'created_at'],
'fieldFilters' => ['status'],
],
];
helper($this->_className); helper($this->_className);
$this->_viewPath = strtolower($this->_className); $this->_viewPath = strtolower($this->_className);
$this->_viewDatas['title'] = lang($this->_className . '.title'); $this->_viewDatas['title'] = lang($this->_className . '.title');
@ -83,47 +45,6 @@ class HPILOController extends \App\Controllers\Admin\AdminController
} }
} }
////Action 모음
//Insert관련
final public function insert()
{
return $this->insert_procedure();
}
//Update관련
final public function update($uid)
{
return $this->update_procedure($uid);
}
//Toggle관련
final public function toggle($uid, string $field)
{
return $this->toggle_procedure($uid, $field);
}
//Batchjob 관련
final public function batchjob()
{
return $this->batchjob_procedure();
}
//Delete 관련
final public function delete($uid)
{
return $this->delete_procedure($uid);
}
//View 관련
final public function view($uid)
{
return $this->view_procedure($uid);
}
//Index 관련
final public function index()
{
return $this->index_procedure();
}
//Excel 관련
final public function excel()
{
return $this->excel_procedure();
}
////추가 Action ////추가 Action
final public function console(int $uid) final public function console(int $uid)
{ {
@ -143,14 +64,14 @@ class HPILOController extends \App\Controllers\Admin\AdminController
} }
$ilo = new HPILO4($this->getAdapter($entity)); $ilo = new HPILO4($this->getAdapter($entity));
$results = $ilo->reset($type); $results = $ilo->reset($type);
Log::add("warning", var_export($results, true)); log_message("warning", var_export($results, true));
$message = "{$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다."; $message = "{$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다.";
Log::save("{$this->_viewDatas['title']} {$message}"); log_message("info", "{$this->_viewDatas['title']} {$message}");
return alert_CommonHelper($message, $this->_session->get(SESSION_NAMES['RETURN_URL'])); return alert_CommonHelper($message, $this->_session->get(SESSION_NAMES['RETURN_URL']));
} catch (\Exception $e) { } catch (\Exception $e) {
$message = "{$entity->getTitle()} " . __FUNCTION__ . " 실패하였습니다."; $message = "{$entity->getTitle()} " . __FUNCTION__ . " 실패하였습니다.";
Log::add("warning", $message . "<br>\n{$e->getMessage()}"); log_message("warning", $message . "<br>\n{$e->getMessage()}");
Log::save("{$this->_viewDatas['title']} {$message}", false); log_message("info", "{$this->_viewDatas['title']} {$message}");
return alert_CommonHelper($message, 'back'); return alert_CommonHelper($message, 'back');
} }
} }
@ -160,9 +81,9 @@ class HPILOController extends \App\Controllers\Admin\AdminController
$entity = $ilo->refresh($entity); $entity = $ilo->refresh($entity);
if ($entity->hasChanged()) { if ($entity->hasChanged()) {
if (!$this->_model->save($entity)) { if (!$this->_model->save($entity)) {
Log::add("error", __FUNCTION__ . "에서 호출:" . $this->_model->getLastQuery()); log_message("error", __FUNCTION__ . "에서 호출:" . $this->_model->getLastQuery());
Log::add("error", implode("\n", $this->_model->errors())); log_message("error", implode("\n", $this->_model->errors()));
throw new \Exception(__FUNCTION__ . " 오류 발생.\n" . var_export($this->_model->errors(), true)); throw new \Exception(__FUNCTION__ . " 오류 발생.\n" . var_export($this->_model->errors()));
} }
} }
return $entity; return $entity;
@ -175,12 +96,12 @@ class HPILOController extends \App\Controllers\Admin\AdminController
// throw new \Exception(var_export($ilo, true)); // throw new \Exception(var_export($ilo, true));
$entity = $this->refresh($ilo, $entity); $entity = $this->refresh($ilo, $entity);
$message = "{$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다."; $message = "{$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다.";
Log::save("{$this->_viewDatas['title']} {$message}"); log_message("info", "{$this->_viewDatas['title']} {$message}");
return alert_CommonHelper($message, $this->_session->get(SESSION_NAMES['RETURN_URL'])); return alert_CommonHelper($message, $this->_session->get(SESSION_NAMES['RETURN_URL']));
} catch (\Exception $e) { } catch (\Exception $e) {
$message = "{$entity->getTitle()} " . __FUNCTION__ . " 실패하였습니다."; $message = "{$entity->getTitle()} " . __FUNCTION__ . " 실패하였습니다.";
Log::add("warning", $message . "<br>\n{$e->getMessage()}"); log_message("warning", $message . "<br>\n{$e->getMessage()}");
Log::save("{$this->_viewDatas['title']} {$message}", false); log_message("info", "{$this->_viewDatas['title']} {$message}");
return alert_CommonHelper($message, 'back'); return alert_CommonHelper($message, 'back');
} }
} }

View File

@ -1,98 +0,0 @@
<?php
namespace App\Controllers\Admin;
use App\Models\LoggerModel;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
class LoggerController extends \App\Controllers\Admin\AdminController
{
private $_userModel = null;
private $_user_uids = null;
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
parent::initController($request, $response, $logger);
$this->_className .= '/Logger';
$this->_model = new LoggerModel();
$this->_defines = [];
$this->_defines['insert'] = [];
$this->_defines['insert']['fields'] = $this->_model->getFields();
$this->_defines['insert']['fieldRules'] = $this->_model->getFieldRules($this->_defines['insert']['fields']);
$this->_defines['insert']['fieldFilters'] = $this->_model->getFieldFilters();
$this->_defines['update'] = [];
$this->_defines['update']['fields'] = $this->_defines['insert']['fields'];
$this->_defines['update']['fieldRules'] = $this->_model->getFieldRules($this->_defines['update']['fields']);
$this->_defines['update']['fieldFilters'] = $this->_model->getFieldFilters();
$this->_defines['view'] = [];
$this->_defines['view']['fields'] = [...$this->_model->getFields(), 'updated_at', 'created_at'];
$this->_defines['view']['fieldRules'] = $this->_model->getFieldRules($this->_defines['view']['fields']);
$this->_defines['view']['fieldFilters'] = $this->_model->getFieldFilters();
$this->_defines['index'] = [];
$this->_defines['index']['fields'] = [...$this->_model->getFields(), 'created_at'];
$this->_defines['index']['fieldFilters'] = $this->_model->getFieldFilters();
$this->_defines['index']['batchjobFilters'] = ['status'];
$this->_defines['excel'] = [];
$this->_defines['excel']['fields'] = $this->_defines['index']['fields'];
$this->_defines['excel']['fieldFilters'] = $this->_model->getFieldFilters();
helper($this->_className);
$this->_viewPath = strtolower($this->_className);
$this->_viewDatas['title'] = lang($this->_className . '.title');
$this->_viewDatas['className'] = $this->_className;
}
//Field별 Form Option용
protected function getFieldFormOption(string $field): array
{
switch ($field) {
default:
return parent::getFieldFormOption($field);
break;
}
}
////Action 모음
//Insert관련
final public function insert()
{
return $this->insert_procedure();
}
//Update관련
final public function update($uid)
{
return $this->update_procedure($uid);
}
// //Toggle관련
final public function toggle($uid, string $field)
{
return $this->toggle_procedure($uid, $field);
}
//Batchjob 관련
final public function batchjob()
{
return $this->batchjob_procedure();
}
//Delete 관련
final public function delete($uid)
{
return $this->delete_procedure($uid);
}
//View 관련
final public function view($uid)
{
return $this->view_procedure($uid);
}
//Index 관련
final public function index()
{
return $this->index_procedure();
}
//Excel 관련
final public function excel()
{
return $this->excel_procedure();
}
}

View File

@ -7,35 +7,13 @@ use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
class UserController extends \App\Controllers\Admin\AdminController class UserController extends AdminController
{ {
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger) public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{ {
parent::initController($request, $response, $logger); parent::initController($request, $response, $logger);
$this->_className .= '/User'; $this->_className .= '/User';
$this->_model = new UserModel(); $this->_model = new UserModel();
$this->_defines = [];
$this->_defines['insert'] = [];
$this->_defines['insert']['fields'] = ['id', 'passwd', 'confirmpassword', 'name', 'email', 'role', 'status'];
$this->_defines['insert']['fieldRules'] = $this->_model->getFieldRules($this->_defines['insert']['fields']);
$this->_defines['insert']['fieldFilters'] = $this->_model->getFieldFilters();
$this->_defines['update'] = [];
$this->_defines['update']['fields'] = ['passwd', 'confirmpassword', 'name', 'email', 'role', 'status'];
$this->_defines['update']['fieldRules'] = $this->_model->getFieldRules($this->_defines['update']['fields']);
$this->_defines['update']['fieldFilters'] = $this->_model->getFieldFilters();
$this->_defines['view'] = [];
$this->_defines['view']['fields'] = ['updated_at', 'created_at'];
$this->_defines['view']['fieldRules'] = $this->_model->getFieldRules($this->_defines['view']['fields']);
$this->_defines['view']['fieldFilters'] = $this->_model->getFieldFilters();
$this->_defines['index'] = [];
$this->_defines['index']['fields'] = [...$this->_model->getFields(), 'created_at'];
$this->_defines['index']['fieldFilters'] = $this->_model->getFieldFilters();
$this->_defines['index']['batchjobFilters'] = ['status'];
$this->_defines['excel'] = [];
$this->_defines['excel']['fields'] = $this->_defines['index']['fields'];
$this->_defines['excel']['fieldFilters'] = $this->_model->getFieldFilters();
helper($this->_className); helper($this->_className);
$this->_viewPath = strtolower($this->_className); $this->_viewPath = strtolower($this->_className);
$this->_viewDatas['title'] = lang($this->_className . '.title'); $this->_viewDatas['title'] = lang($this->_className . '.title');
@ -56,47 +34,4 @@ class UserController extends \App\Controllers\Admin\AdminController
} }
return $this->_viewDatas['fieldDatas']; return $this->_viewDatas['fieldDatas'];
} }
////Action 모음
//Insert관련
final public function insert()
{
$this->_defines[__FUNCTION__]['fieldRules']['id'] .= '|is_unique[tw_user.id]';
return $this->insert_procedure();
}
//Update관련
final public function update($uid)
{
return $this->update_procedure($uid);
}
//Toggle관련
final public function toggle($uid, string $field)
{
return $this->toggle_procedure($uid, $field);
}
//Batchjob 관련
final public function batchjob()
{
return $this->batchjob_procedure();
}
//Delete 관련
final public function delete($uid)
{
return $this->delete_procedure($uid);
}
//View 관련
final public function view($uid)
{
return $this->view_procedure($uid);
}
//Index 관련
final public function index()
{
return $this->index_procedure();
}
//Excel 관련
final public function excel()
{
return $this->excel_procedure();
}
} }

View File

@ -7,85 +7,16 @@ use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
class UserSNSController extends \App\Controllers\Admin\AdminController class UserSNSController extends AdminController
{ {
private $_user_uids = null;
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger) public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{ {
parent::initController($request, $response, $logger); parent::initController($request, $response, $logger);
$this->_className .= '/UserSNS'; $this->_className .= '/UserSNS';
$this->_model = new UserSNSModel(); $this->_model = new UserSNSModel();
$this->_defines = [
'view' => [
'fields' => ['user_uid', 'site', 'id', 'name', 'email', 'status', 'updated_at', 'created_at', 'detail'],
'fieldFilters' => ['user_uid', 'status'],
'fieldRules' => [],
],
'index' => [
'fields' => ['user_uid', 'site', 'id', 'name', 'email', 'status', 'created_at'],
'fieldFilters' => ['user_uid', 'status'],
'batchjobFilters' => [],
],
'excel' => [
'fields' => ['user_uid', 'site', 'id', 'name', 'email', 'status', 'created_at'],
'fieldFilters' => ['user_uid', 'status'],
],
];
helper($this->_className); helper($this->_className);
$this->_viewPath = strtolower($this->_className); $this->_viewPath = strtolower($this->_className);
$this->_viewDatas['title'] = lang($this->_className . '.title'); $this->_viewDatas['title'] = lang($this->_className . '.title');
$this->_viewDatas['className'] = $this->_className; $this->_viewDatas['className'] = $this->_className;
} }
//Field별 Form Option용
protected function getFieldFormOption(string $field): array
{
switch ($field) {
default:
return parent::getFieldFormOption($field);
break;
}
}
////Action 모음
// Insert관련
final public function insert()
{
return $this->insert_procedure();
}
//Update관련
final public function update($uid)
{
return $this->update_procedure($uid);
}
//Toggle관련
final public function toggle($uid, string $field)
{
return $this->toggle_procedure($uid, $field);
}
//Batchjob 관련
final public function batchjob()
{
return $this->batchjob_procedure();
}
//Delete 관련
final public function delete($uid)
{
return $this->delete_procedure($uid);
}
//View 관련
final public function view($uid)
{
return $this->view_procedure($uid);
}
//Index 관련
final public function index()
{
return $this->index_procedure();
}
//Excel 관련
final public function excel()
{
return $this->excel_procedure();
}
} }

View File

@ -53,7 +53,6 @@ abstract class BaseController extends Controller
private $_user_uids = array(); private $_user_uids = array();
protected $_model = null; protected $_model = null;
protected $_className = ''; protected $_className = '';
protected $_defines = array();
protected $_viewPath = ''; protected $_viewPath = '';
protected $_viewDatas = array(); protected $_viewDatas = array();
protected $_session = null; protected $_session = null;
@ -112,20 +111,6 @@ abstract class BaseController extends Controller
} }
return $fieldFormOptions; 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_string($field)) {
// throw new \Exception(__FUNCTION__ . "에서 {$this->_className}의 Field:{$field}가 string 아닙니다.\n" . var_export($fieldRules, true));
// }
// if (array_key_exists($field, $fieldRules)) {
// $tempRules[$field] = $fieldRules[$field];
// }
// }
// return $tempRules;
// }
//Field별 Form Datas 처리용 //Field별 Form Datas 처리용
protected function getFieldFormData(string $field, $entity = null): array protected function getFieldFormData(string $field, $entity = null): array
@ -141,28 +126,20 @@ abstract class BaseController extends Controller
//Upload FIle관련 //Upload FIle관련
protected function upload_file_process(UploadedFile $upfile) protected function upload_file_process(UploadedFile $upfile)
{ {
$fileName = ""; $fileName = null;
if ($upfile->isValid() && !$upfile->hasMoved()) { if ($upfile->isValid() && !$upfile->hasMoved()) {
$fileName = $upfile->getRandomName(); $originName = $upfile->getName();
$upfile->move(PATHS['UPLOAD'], $fileName); $upfile->move(WRITEPATH . PATHS['UPLOAD'], $upfile->getRandomName());
//move시 중복된파일명이 있다면 파일명이 바뀌므로 여기서 한번더 파일명 확인 필요 //move시 중복된파일명이 있다면 파일명이 바뀌므로 여기서 한번더 파일명 확인 필요
$fileName = $upfile->getRandomName(); $fileName = $originName . "||" . $upfile->getName();
} }
return $fileName; return $fileName;
} }
protected function single_upload_procedure(string $field, $entity = null) protected function single_upload_procedure(string $field, $entity = null)
{ {
$upfile = $this->request->getFile($field); if ($upfile = $this->request->getFile($field)) {
$fileName = $this->upload_file_process($upfile); return $this->upload_file_process($upfile);
// $fileDatas=array(); }
// if ($upfile->isValid() && !$upfile->hasMoved()) {
// $filepath = PATHS['UPLOAD'] . $upfile->store();
// $fileDatas = [
// 'uploaded_fileinfo' => new \CodeIgniter\Files\File($filepath)
// ];
// return $fileDatas;
// }
return $fileName;
} }
protected function multiple_upload_procedure(string $field, $entity = null): array protected function multiple_upload_procedure(string $field, $entity = null): array
{ {
@ -184,27 +161,15 @@ abstract class BaseController extends Controller
} }
//Insert관련 //Insert관련
protected function insert_init()
{
$this->_viewDatas['fields'] = $this->_defines['insert']['fields'];;
$this->_viewDatas['fieldRules'] = $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() final public function insert_form()
{ {
try { try {
$this->insert_init(); $this->_viewDatas['fields'] = $this->_model->getFields('insert');
$this->insert_form_init(); $this->_viewDatas['fieldRules'] = $this->_model->getFieldRules($this->_viewDatas['fields'], 'insert');
$this->insert_form_process(); $this->_viewDatas['fieldFilters'] = $this->_model->getFieldFilters();
$this->_viewDatas['fieldFormOptions'] = $this->getFieldFormOptions($this->_viewDatas['fieldFilters']);
$this->_viewDatas['forms'] = ['attributes' => ['method' => "post",], 'hiddens' => []];
helper(['form']);
return view($this->_viewPath . '/insert', $this->_viewDatas); return view($this->_viewPath . '/insert', $this->_viewDatas);
} catch (\Exception $e) { } catch (\Exception $e) {
return alert_CommonHelper($e->getMessage(), 'back'); return alert_CommonHelper($e->getMessage(), 'back');
@ -213,72 +178,65 @@ abstract class BaseController extends Controller
protected function insert_validate() protected function insert_validate()
{ {
//변경된 값 적용
$this->_viewDatas['fieldDatas'] = array(); $this->_viewDatas['fieldDatas'] = array();
//변경할 값 확인
if (!$this->validate($this->_viewDatas['fieldRules'])) {
throw new \Exception("{$this->_viewDatas['title']}의 검증 오류발생\n" . implode("\n", $this->validator->getErrors()));
}
//변경된 값 적용
foreach ($this->_viewDatas['fields'] as $field) { foreach ($this->_viewDatas['fields'] as $field) {
$this->_viewDatas['fieldDatas'] = $this->getFieldFormData($field); $this->_viewDatas['fieldDatas'] = $this->getFieldFormData($field);
Log::add("info", "{$field} : " . var_export($this->_viewDatas['fieldDatas'][$field], true)); log_message("info", "{$field} : " . var_export($this->_viewDatas['fieldDatas'][$field], true));
} }
// echo var_export($this->_viewDatas['fields'], true); // echo var_export($this->_viewDatas['fields'], true);
// echo "<HR>"; // echo "<HR>";
// echo var_export($this->_viewDatas['fieldDatas'], true); // echo var_export($this->_viewDatas['fieldDatas'], true);
// echo "<HR>"; // echo "<HR>";
// echo var_export($this->_viewDatas['fieldRules'], true); // echo var_export($this->_viewDatas['fieldRules'], true);
// exit; // exit;
//변경할 값 확인
if (!$this->validate($this->_viewDatas['fieldRules'])) {
throw new \Exception("{$this->_viewDatas['title']}의 검증 오류발생\n" . implode("\n", $this->validator->getErrors()));
}
} }
protected function insert_process() protected function insert_process()
{ {
return $this->_model->create($this->_viewDatas['fieldDatas']); return $this->_model->create($this->_viewDatas['fieldDatas']);
} }
protected function insert_procedure() public function insert()
{ {
$message = ""; $message = "";
try { try {
$this->insert_init(); $this->_viewDatas['fields'] = $this->_model->getFields('insert');
$this->_viewDatas['fieldRules'] = $this->_model->getFieldRules($this->_viewDatas['fields'], 'insert');
$this->_viewDatas['fieldFilters'] = $this->_model->getFieldFilters();
$this->insert_validate(); $this->insert_validate();
$this->insert_process(); $this->insert_process();
$message = __FUNCTION__ . " 완료하였습니다."; $message = __FUNCTION__ . " 완료하였습니다.";
Log::save("{$this->_viewDatas['title']} {$message}"); log_message("info", "{$this->_viewDatas['title']} {$message}");
//session->setTempdata의 기능은 3초간 success에 message를 보관후 사라짐 //session->setTempdata의 기능은 3초간 success에 message를 보관후 사라짐
//$this->_session->setTempdata('success', 'Page updated successfully', 3); //$this->_session->setTempdata('success', 'Page updated successfully', 3);
return alert_CommonHelper($message, $this->_session->get(SESSION_NAMES['RETURN_URL'])); return alert_CommonHelper($message, $this->_session->get(SESSION_NAMES['RETURN_URL']));
} catch (\Exception $e) { } catch (\Exception $e) {
$message = __FUNCTION__ . " 실패하였습니다."; $message = __FUNCTION__ . " 실패하였습니다.";
Log::add("warning", $e->getMessage()); log_message("warning", $e->getMessage());
Log::add("warning", var_export($this->_viewDatas['fieldDatas'], true)); log_message("warning", var_export($this->_viewDatas['fieldDatas'], true));
Log::save("{$this->_viewDatas['title']} {$message}", 'error'); log_message("info", "{$this->_viewDatas['title']} {$message}");
return redirect()->back()->withInput()->with("error", $message . "<br>\n{$e->getMessage()}"); return redirect()->back()->withInput()->with("error", $message . "<br>\n{$e->getMessage()}");
} }
} }
//Update관련 //Update관련
protected function update_init() protected function update_form_process($entity)
{ {
$this->_viewDatas['fields'] = $this->_defines['update']['fields'];;
$this->_viewDatas['fieldRules'] = $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['fieldFormOptions'] = $this->getFieldFormOptions($this->_viewDatas['fieldFilters']);
$this->_viewDatas['forms'] = ['attributes' => ['method' => "post",], 'hiddens' => []]; $this->_viewDatas['forms'] = ['attributes' => ['method' => "post",], 'hiddens' => []];
helper(['form']); helper(['form']);
}
protected function update_form_process($entity)
{
return $entity; return $entity;
} }
final public function update_form($uid) final public function update_form($uid)
{ {
try { try {
$entity = $entity = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]); $entity = $entity = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]);
$this->update_init(); $this->_viewDatas['fields'] = $this->_model->getFields('update');
$this->update_form_init(); $this->_viewDatas['fieldRules'] = $this->_model->getFieldRules($this->_viewDatas['fields'], 'update');
$this->_viewDatas['fieldFilters'] = $this->_model->getFieldFilters();
$this->_viewDatas['entity'] = $this->update_form_process($entity); $this->_viewDatas['entity'] = $this->update_form_process($entity);
return view($this->_viewPath . '/update', $this->_viewDatas); return view($this->_viewPath . '/update', $this->_viewDatas);
} catch (\Exception $e) { } catch (\Exception $e) {
@ -289,102 +247,47 @@ abstract class BaseController extends Controller
{ {
//변경된 값 적용 //변경된 값 적용
$this->_viewDatas['fieldDatas'] = array(); $this->_viewDatas['fieldDatas'] = array();
foreach ($this->_viewDatas['fields'] as $field) {
$this->_viewDatas['fieldDatas'] = $this->getFieldFormData($field, $entity);
Log::add(
"info",
"{$field} : {$entity->$field} => " . var_export($this->_viewDatas['fieldDatas'][$field])
);
}
//변경할 값 확인 //변경할 값 확인
if (!$this->validate($this->_viewDatas['fieldRules'])) { if (!$this->validate($this->_viewDatas['fieldRules'])) {
throw new \Exception("{$this->_viewDatas['title']}의 검증 오류발생\n" . implode("\n", $this->validator->getErrors())); throw new \Exception("{$this->_viewDatas['title']}의 검증 오류발생\n" . implode("\n", $this->validator->getErrors()));
} }
foreach ($this->_viewDatas['fields'] as $field) {
$this->_viewDatas['fieldDatas'] = $this->getFieldFormData($field, $entity);
log_message(
"info",
"{$field} : {$entity->$field} => " . var_export($this->_viewDatas['fieldDatas'][$field])
);
}
return $entity; return $entity;
} }
protected function update_process($entity) protected function update_process($entity)
{ {
return $this->_model->modify($entity, $this->_viewDatas['fieldDatas']); return $this->_model->modify($entity, $this->_viewDatas['fieldDatas']);
} }
protected function update_procedure($uid) public function update($uid)
{ {
$message = ""; $message = "";
try { try {
$entity = $entity = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]); $entity = $entity = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]);
$this->update_init(); $this->_viewDatas['fields'] = $this->_model->getFields('update');
$this->_viewDatas['fieldRules'] = $this->_model->getFieldRules($this->_viewDatas['fields'], 'update');
$this->_viewDatas['fieldFilters'] = $this->_model->getFieldFilters();
$entity = $this->update_validate($entity); $entity = $this->update_validate($entity);
$entity = $this->update_process($entity); $entity = $this->update_process($entity);
$message = "{$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다."; $message = "{$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다.";
Log::save("{$this->_viewDatas['title']} {$message}"); log_message("info", "{$this->_viewDatas['title']} {$message}");
return alert_CommonHelper($message, $this->_session->get(SESSION_NAMES['RETURN_URL'])); return alert_CommonHelper($message, $this->_session->get(SESSION_NAMES['RETURN_URL']));
} catch (\Exception $e) { } catch (\Exception $e) {
$message = __FUNCTION__ . " 실패하였습니다."; $message = __FUNCTION__ . " 실패하였습니다.";
Log::add("warning", $e->getMessage()); log_message("warning", $e->getMessage());
Log::add("warning", var_export($this->_viewDatas['fieldDatas'], true)); log_message("warning", var_export($this->_viewDatas['fieldDatas'], true));
Log::save("{$this->_viewDatas['title']} {$message}", 'error'); log_message("info", "{$this->_viewDatas['title']} {$message}");
return redirect()->back()->withInput()->with("error", $message . "<br>\n{$e->getMessage()}"); return redirect()->back()->withInput()->with("error", $message . "<br>\n{$e->getMessage()}");
} }
} }
//Reply관련
protected function reply_init()
{
return $this->update_init();
}
protected function reply_form_init()
{
return $this->update_form_init();
}
protected function reply_form_process($entity)
{
return $this->update_form_process($entity);
}
final public function reply_form($uid)
{
try {
$entity = $entity = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]);
$this->reply_init();
$this->reply_form_init();
$this->_viewDatas['entity'] = $this->reply_form_process($entity);
return view($this->_viewPath . '/reply', $this->_viewDatas);
} catch (\Exception $e) {
return alert_CommonHelper($e->getMessage(), 'back');
}
}
protected function reply_validate($entity)
{
return $this->update_validate($entity);
}
protected function reply_process($entity)
{
return $this->_model->reply($entity, $this->_viewDatas['fieldDatas']);
}
protected function reply_procedure($uid)
{
$message = "";
try {
$entity = $entity = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]);
$this->reply_init();
$entity = $this->reply_validate($entity);
$entity = $this->reply_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}", 'error');
return redirect()->back()->withInput()->with("error", $message . "<br>\n{$e->getMessage()}");
}
}
//Toggle 관련 //Toggle 관련
protected function toggle_init($field)
{
$this->_viewDatas['fields'] = [$field];
$this->_viewDatas['fieldRules'] = $this->_defines['update']['fieldRules'];
}
protected function toggle_validate($entity) protected function toggle_validate($entity)
{ {
return $this->update_validate($entity); return $this->update_validate($entity);
@ -393,31 +296,47 @@ abstract class BaseController extends Controller
{ {
return $this->update_process($entity); return $this->update_process($entity);
} }
protected function toggle_procedure($uid, string $field) public function toggle($uid, string $field)
{ {
$message = ""; $message = "";
try { try {
$entity = $entity = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]); $entity = $entity = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]);
$this->toggle_init($field); $this->_viewDatas['fields'] = [$field];
$this->_viewDatas['fieldRules'] = $this->_model->getFieldRules($this->_viewDatas['fields'], 'toggle');
$this->_viewDatas['fieldFilters'] = $this->_model->getFieldFilters();
$entity = $this->toggle_validate($entity); $entity = $this->toggle_validate($entity);
$entity = $this->toggle_process($entity); $entity = $this->toggle_process($entity);
$message = "{$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다."; $message = "{$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다.";
Log::save("{$this->_viewDatas['title']} {$message}"); log_message("info", "{$this->_viewDatas['title']} {$message}");
return alert_CommonHelper($message, $this->_session->get(SESSION_NAMES['RETURN_URL'])); return alert_CommonHelper($message, $this->_session->get(SESSION_NAMES['RETURN_URL']));
} catch (\Exception $e) { } catch (\Exception $e) {
$message = __FUNCTION__ . " 실패하였습니다."; $message = __FUNCTION__ . " 실패하였습니다.";
Log::add("warning", $e->getMessage()); log_message("warning", $e->getMessage());
Log::add("warning", var_export($this->_viewDatas['fieldDatas'], true)); log_message("warning", var_export($this->_viewDatas['fieldDatas'], true));
Log::save("{$this->_viewDatas['title']} {$message}", 'error'); log_message("info", "{$this->_viewDatas['title']} {$message}");
return alert_CommonHelper($message . "<br>\n{$e->getMessage()}", 'back'); return alert_CommonHelper($message . "<br>\n{$e->getMessage()}", 'back');
} }
} }
//Batchjob 관련 //Batchjob 관련
protected function batchjob_init() protected function batchjob_validate($entity)
{ {
return $this->update_validate($entity);
}
protected function batchjob_process($entity)
{
return $this->update_process($entity);
}
public function batchjob()
{
$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 {
//fields 해당하는 field중 선택된 값이 있는경우만 fields로 정의 //fields 해당하는 field중 선택된 값이 있는경우만 fields로 정의
$fields = array(); $fields = array();
foreach ($this->_defines['index']['batchjobFilters'] as $field) { foreach ($this->_model->getFieldBatchFilters() as $field) {
if ($this->request->getVar($field)) { if ($this->request->getVar($field)) {
array_push($fields, $field); array_push($fields, $field);
} }
@ -427,25 +346,8 @@ abstract class BaseController extends Controller
} }
//Fields,FielRules재정의 //Fields,FielRules재정의
$this->_viewDatas['fields'] = $fields; $this->_viewDatas['fields'] = $fields;
$this->_viewDatas['fieldRules'] = $this->_defines['update']['fieldRules']; $this->_viewDatas['fieldRules'] = $this->_model->getFieldRules($this->_viewDatas['fields'], 'batchjob');
} $this->_viewDatas['fieldFilters'] = $this->_model->getFieldFilters();
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(); $entitys = array();
foreach ($uids as $uid) { foreach ($uids as $uid) {
$entity = $entity = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]); $entity = $entity = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]);
@ -453,17 +355,17 @@ abstract class BaseController extends Controller
$entity = $this->batchjob_validate($entity); $entity = $this->batchjob_validate($entity);
array_push($entitys, $this->batchjob_process($entity)); array_push($entitys, $this->batchjob_process($entity));
} catch (\Exception $e) { } catch (\Exception $e) {
Log::add("warning", "{$entity->getTitle()}는 다음과 같은 이유로 수정되지 않았습니다.\n<br>" . $e->getMessage()); log_message("warning", "{$entity->getTitle()}는 다음과 같은 이유로 수정되지 않았습니다.\n<br>" . $e->getMessage());
} }
} }
$message = "총: " . count($entitys) . "개의 수정(Batchjob)을 완료하였습니다."; $message = "총: " . count($entitys) . "개의 수정(Batchjob)을 완료하였습니다.";
Log::save("{$this->_viewDatas['title']} {$message}"); log_message("info", "{$this->_viewDatas['title']} {$message}");
return alert_CommonHelper($message, $this->_session->get(SESSION_NAMES['RETURN_URL'])); return alert_CommonHelper($message, $this->_session->get(SESSION_NAMES['RETURN_URL']));
} catch (\Exception $e) { } catch (\Exception $e) {
$message = "총: " . count($uids) . "개의 수정(Batchjob)을 실패하였습니다."; $message = "총: " . count($uids) . "개의 수정(Batchjob)을 실패하였습니다.";
Log::add("warning", $e->getMessage()); log_message("warning", $e->getMessage());
Log::add("warning", var_export($this->_viewDatas['fieldDatas'], true)); log_message("warning", var_export($this->_viewDatas['fieldDatas'], true));
Log::save("{$this->_viewDatas['title']} {$message}", 'error'); log_message("info", "{$this->_viewDatas['title']} {$message}");
return alert_CommonHelper($message . "<br>\n{$e->getMessage()}", 'back'); return alert_CommonHelper($message . "<br>\n{$e->getMessage()}", 'back');
} }
} }
@ -472,49 +374,44 @@ abstract class BaseController extends Controller
protected function delete_process($entity) protected function delete_process($entity)
{ {
if (!$this->_model->delete($entity->getPrimaryKey())) { if (!$this->_model->delete($entity->getPrimaryKey())) {
Log::add("error", __FUNCTION__ . "에서 호출:" . $this->_model->getLastQuery()); log_message("error", __FUNCTION__ . "에서 호출:" . $this->_model->getLastQuery());
Log::add("error", implode("\n", $this->_model->errors())); log_message("error", implode("\n", $this->_model->errors()));
throw new \Exception(__FUNCTION__ . " 오류 발생.\n" . var_export($this->_model->errors(), true)); throw new \Exception(__FUNCTION__ . " 오류 발생.\n" . var_export($this->_model->errors(), true));
} }
return $entity; return $entity;
} }
protected function delete_procedure($uid) public function delete($uid)
{ {
$message = ""; $message = "";
try { try {
$entity = $entity = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]); $entity = $entity = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]);
$this->delete_process($entity); $this->delete_process($entity);
$message = "{$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다."; $message = "{$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다.";
Log::save("{$this->_viewDatas['title']} {$message}"); log_message("info", "{$this->_viewDatas['title']} {$message}");
return alert_CommonHelper($message, $this->_session->get(SESSION_NAMES['RETURN_URL'])); return alert_CommonHelper($message, $this->_session->get(SESSION_NAMES['RETURN_URL']));
} catch (\Exception $e) { } catch (\Exception $e) {
$message = __FUNCTION__ . " 실패하였습니다."; $message = __FUNCTION__ . " 실패하였습니다.";
Log::add("warning", $e->getMessage()); log_message("warning", $e->getMessage());
Log::save("{$this->_viewDatas['title']} {$message}", 'error'); log_message("info", "{$this->_viewDatas['title']} {$message}");
return alert_CommonHelper($message . "<br>\n{$e->getMessage()}", 'back'); return alert_CommonHelper($message . "<br>\n{$e->getMessage()}", 'back');
} }
} }
//View 관련 //View 관련
protected function view_init()
{
$this->_viewDatas['fields'] = $this->_defines['view']['fields'];
$this->_viewDatas['fieldFilters'] = $this->_defines['view']['fieldFilters'];
$this->_viewDatas['fieldRules'] = $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) protected function view_process($entity)
{ {
return $entity; return $entity;
} }
protected function view_procedure($uid) public function view($uid)
{ {
try { try {
$entity = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]); $entity = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]);
// dd($entity); $this->_viewDatas['fields'] = $this->_model->getFields('view');
$this->view_init(); $this->_viewDatas['fieldRules'] = $this->_model->getFieldRules($this->_viewDatas['fields'], 'view');
$this->_viewDatas['fieldFilters'] = $this->_model->getFieldFilters();
helper(['form']);
$this->_viewDatas['fieldFormOptions'] = $this->getFieldFormOptions($this->_viewDatas['fieldFilters']);
$this->_viewDatas['forms'] = ['attributes' => ['method' => "post",], 'hiddens' => []];
$this->_viewDatas['entity'] = $this->view_process($entity); $this->_viewDatas['entity'] = $this->view_process($entity);
return view($this->_viewPath . '/view', $this->_viewDatas); return view($this->_viewPath . '/view', $this->_viewDatas);
} catch (\Exception $e) { } catch (\Exception $e) {
@ -523,42 +420,21 @@ abstract class BaseController extends Controller
} }
//Index 관련 //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 모델 전처리 //index 모델 전처리
protected function index_setCondition() protected function index_setCondition()
{ {
foreach ($this->_viewDatas['fieldFilters'] as $field) { foreach ($this->_viewDatas['fieldFilters'] as $field) {
$value = $this->request->getVar($field) ? $this->request->getVar($field) : false; $value = $this->request->getVar($field) ?: false;
if ($value) { if ($value) {
$this->_model->where($field, $value); $this->_model->where($field, $value);
} }
} }
$word = $this->request->getVar('word') ? $this->request->getVar('word') : ''; $word = $this->request->getVar('word') ?: '';
if (isset($word) && $word !== '') { if (isset($word) && $word !== '') {
$this->_model->setIndexWordFilter($word); $this->_model->setIndexWordFilter($word);
} }
$start = $this->request->getVar('start') ? $this->request->getVar('start') : ''; $start = $this->request->getVar('start') ?: '';
$end = $this->request->getVar('end') ? $this->request->getVar('end') : ''; $end = $this->request->getVar('end') ?: '';
if (isset($start) && $start !== '' && isset($end) && $end !== '') { if (isset($start) && $start !== '' && isset($end) && $end !== '') {
$this->_model->setIndexDateFilter($start, $end); $this->_model->setIndexDateFilter($start, $end);
} }
@ -571,8 +447,8 @@ abstract class BaseController extends Controller
//Rows 처리 //Rows 처리
$this->index_setCondition(); $this->index_setCondition();
//OrderBy //OrderBy
$order_field = $this->request->getVar('order_field') ? $this->request->getVar('order_field') : 'uid'; $order_field = $this->request->getVar('order_field') ?: 'uid';
$order_value = $this->request->getVar('order_value') ? $this->request->getVar('order_value') : 'DESC'; $order_value = $this->request->getVar('order_value') ?: 'DESC';
$this->_model->setIndexOrderBy($order_field, $order_value); $this->_model->setIndexOrderBy($order_field, $order_value);
//Limit //Limit
$rows = $per_page ? $this->_model->findAll($per_page, $page * $per_page - $per_page) : $this->_model->findAll(); $rows = $per_page ? $this->_model->findAll($per_page, $page * $per_page - $per_page) : $this->_model->findAll();
@ -610,10 +486,28 @@ abstract class BaseController extends Controller
//pagenation 처리 //pagenation 처리
$this->_viewDatas['pagination'] = $this->index_getPagination(); $this->_viewDatas['pagination'] = $this->index_getPagination();
} }
protected function index_procedure() public function index()
{ {
try { try {
$this->index_init(); $this->_viewDatas['fields'] = $this->_model->getFields('index');
$this->_viewDatas['fieldRules'] = $this->_model->getFieldRules($this->_viewDatas['fields'], 'index');
$this->_viewDatas['fieldFilters'] = $this->_model->getFieldFilters();
$this->_viewDatas['batchjobFilters'] = $this->_model->getFieldBatchFilters();
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) ?: DEFAULTS['EMPTY'];
}
$this->_viewDatas['word'] = $this->request->getVar('word') ?: '';
$this->_viewDatas['start'] = $this->request->getVar('start') ?: '';
$this->_viewDatas['end'] = $this->request->getVar('end') ?: '';
$this->_viewDatas['order_field'] = $this->request->getVar('order_field') ?: 'uid';
$this->_viewDatas['order_value'] = $this->request->getVar('order_value') ?: 'DESC';
$this->_viewDatas['page'] = $this->request->getVar('page') ?: 1;
$this->_viewDatas['per_page'] = $this->request->getVar('per_page') ?: DEFAULTS['PERPAGE'];
$this->_viewDatas['uri'] = $this->request->getUri();
$this->index_process(); $this->index_process();
return view($this->_viewPath . '/index', $this->_viewDatas); return view($this->_viewPath . '/index', $this->_viewDatas);
} catch (\Exception $e) { } catch (\Exception $e) {
@ -622,12 +516,6 @@ abstract class BaseController extends Controller
} }
//Excel 관련 //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']);
}
protected function excel_spreadSheet() protected function excel_spreadSheet()
{ {
//Excepl 초기화 //Excepl 초기화
@ -669,19 +557,17 @@ abstract class BaseController extends Controller
// return readfile(PATHS['EXCEL'] . '/' . $fileName); // return readfile(PATHS['EXCEL'] . '/' . $fileName);
return $writer->save('php://output'); return $writer->save('php://output');
} }
protected function excel_procedure() public function excel()
{ {
try { try {
$this->excel_init(); $this->_viewDatas['fields'] = $this->_model->getFields('excel');
$this->_viewDatas['fieldRules'] = $this->_model->getFieldRules($this->_viewDatas['fields'], 'excel');
$this->_viewDatas['fieldFilters'] = $this->_model->getFieldFilters();
$this->_viewDatas['batchjobFilters'] = $this->_model->getFieldBatchFilters();
$this->_viewDatas['fieldFormOptions'] = $this->getFieldFormOptions($this->_viewDatas['fieldFilters']);
return $this->excel_process(); return $this->excel_process();
} catch (\Exception $e) { } catch (\Exception $e) {
return alert_CommonHelper($e->getMessage(), 'back'); return alert_CommonHelper($e->getMessage(), 'back');
} }
} }
//File Download관련
protected function download_process($path, string $real_filename, string $download_filename = 'download')
{
return $this->response->download($path . "/" . $real_filename, null)->setFileName($download_filename);
}
} }

View File

@ -1,6 +1,6 @@
DROP TABLE IF EXISTS tw_board_config; DROP TABLE IF EXISTS servermgr.tw_board_config;
CREATE TABLE tw_board_config ( CREATE TABLE servermgr.tw_board_config (
uid varchar(36) NOT NULL, uid varchar(36) NOT NULL,
name varchar(255) NOT NULL COMMENT '게시판명', name varchar(255) NOT NULL COMMENT '게시판명',
isaccess varchar(255) NOT NULL DEFAULT 'manager|cloudflare|director|master' COMMENT '접근권한', isaccess varchar(255) NOT NULL DEFAULT 'manager|cloudflare|director|master' COMMENT '접근권한',
@ -17,14 +17,14 @@ CREATE TABLE tw_board_config (
PRIMARY KEY (uid) PRIMARY KEY (uid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT ='게시판 설정정보'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT ='게시판 설정정보';
DROP TABLE IF EXISTS tw_board; DROP TABLE IF EXISTS servermgr.tw_board;
-- 1. 게시물 추가전 grpno에 해당하는 기존게시물의 grpord를 +1씩증가 작업 -- 1. 게시물 추가전 grpno에 해당하는 기존게시물의 grpord를 +1씩증가 작업
-- update tw_board set grporder=grporder+1 where grpno=그룹번호 and grporder > 선택한 grpno -- update tw_board set grporder=grporder+1 where grpno=그룹번호 and grporder > 선택한 grpno
-- 2. 게시물 추가시 작업 -- 2. 게시물 추가시 작업
-- insert tw_board grpno=그룹번호,grporder=grporder+1,grpdepth=grpdepth+1 -- insert tw_board grpno=그룹번호,grporder=grporder+1,grpdepth=grpdepth+1
-- 3. 게시물 조회시 작업 -- 3. 게시물 조회시 작업
-- select * from tw_board order by grpno desc,grporder asc -- select * from tw_board order by grpno desc,grporder asc
CREATE TABLE tw_board ( CREATE TABLE servermgr.tw_board (
uid int(10) unsigned NOT NULL AUTO_INCREMENT, uid int(10) unsigned NOT NULL AUTO_INCREMENT,
grpno int(10) UNSIGNED NOT NULL DEFAULT 1 COMMENT 'Group번호: uid와 Type맞춰야함 , 상위가없을시 기본 uid와 같음', grpno int(10) UNSIGNED NOT NULL DEFAULT 1 COMMENT 'Group번호: uid와 Type맞춰야함 , 상위가없을시 기본 uid와 같음',
grporder int(5) UNSIGNED NOT NULL DEFAULT 1 COMMENT 'Group순서: 최상위시 1부터시작', grporder int(5) UNSIGNED NOT NULL DEFAULT 1 COMMENT 'Group순서: 최상위시 1부터시작',
@ -34,6 +34,7 @@ CREATE TABLE tw_board (
title varchar(255) NOT NULL COMMENT '제목', title varchar(255) NOT NULL COMMENT '제목',
content text NOT NULL COMMENT '내용', content text NOT NULL COMMENT '내용',
passwd varchar(20) NULL COMMENT '작성자 암호', passwd varchar(20) NULL COMMENT '작성자 암호',
board_file varchar(255) NULL COMMENT '파일명',
view_cnt int(5) NOT NULL DEFAULT 0 COMMENT '조회수', view_cnt int(5) NOT NULL DEFAULT 0 COMMENT '조회수',
status varchar(10) NOT NULL DEFAULT 'use' COMMENT 'use: 사용, unuse: 사용않함 등등', status varchar(10) NOT NULL DEFAULT 'use' COMMENT 'use: 사용, unuse: 사용않함 등등',
updated_at timestamp NULL DEFAULT NULL, updated_at timestamp NULL DEFAULT NULL,
@ -43,8 +44,8 @@ CREATE TABLE tw_board (
CONSTRAINT FOREIGN KEY (user_uid) REFERENCES tw_user (uid) CONSTRAINT FOREIGN KEY (user_uid) REFERENCES tw_user (uid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT ='게시물 정보'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT ='게시물 정보';
DROP TABLE IF EXISTS tw_board_file; DROP TABLE IF EXISTS servermgr.tw_board_file;
CREATE TABLE tw_board_file ( CREATE TABLE servermgr.tw_board_file (
uid int(10) unsigned NOT NULL AUTO_INCREMENT, uid int(10) unsigned NOT NULL AUTO_INCREMENT,
board_uid int(10) unsigned NOT NULL COMMENT '게시물 정보', board_uid int(10) unsigned NOT NULL COMMENT '게시물 정보',
mime_type varchar(50) NOT NULL COMMENT 'Mime_Type', mime_type varchar(50) NOT NULL COMMENT 'Mime_Type',

View File

@ -22,6 +22,10 @@ class BoardEntity extends BaseEntity
{ {
return $this->attributes['passwd']; return $this->attributes['passwd'];
} }
public function getFile()
{
return $this->attributes['board_file'];
}
public function getViews() public function getViews()
{ {
return $this->attributes['view_cnt']; return $this->attributes['view_cnt'];

View File

@ -1,21 +0,0 @@
<?php
namespace App\Entities;
use App\Entities\BaseEntity;
class LoggerEntity extends BaseEntity
{
protected $datamap = [];
protected $dates = ['created_at', 'updated_at', 'deleted_at'];
protected $casts = [];
public function getPrimaryKey()
{
return $this->attributes['uid'];
}
public function getTitle()
{
return $this->attributes['title'];
}
}

View File

@ -22,11 +22,11 @@ function getFieldForm_BoardConfigHelper($field, $value, array $fieldFormOptions,
case 'isreply': case 'isreply':
case 'isupload': case 'isupload':
case 'isdownload': case 'isdownload':
foreach ($fieldFormOptions[$field] as $key => $label) { // foreach ($fieldFormOptions[$field] as $key => $label) {
$checkboxs[] = form_checkbox("{$field}[]", $key, in_array($key, is_array($value) ? $value : explode("|", $value)), $attributes) . $label; // $checkboxs[] = form_checkbox("{$field}[]", $key, in_array($key, is_array($value) ? $value : explode("|", $value)), $attributes) . $label;
} // }
return implode("&nbsp;", $checkboxs); // return implode("&nbsp;", $checkboxs);
break; // break;
case 'status': case 'status':
$fieldFormOptions[$field] = [DEFAULTS['EMPTY'] => lang("Admin/BoardConfig.label.{$field}") . " 선택", ...$fieldFormOptions[$field]]; $fieldFormOptions[$field] = [DEFAULTS['EMPTY'] => lang("Admin/BoardConfig.label.{$field}") . " 선택", ...$fieldFormOptions[$field]];
return form_dropdown($field, $fieldFormOptions[$field], $value, $attributes); return form_dropdown($field, $fieldFormOptions[$field], $value, $attributes);
@ -80,15 +80,15 @@ function getFieldFilter_BoardConfigHelper($field, $value, array $fieldFormOption
{ {
$value = $value ?: DEFAULTS['EMPTY']; $value = $value ?: DEFAULTS['EMPTY'];
switch ($field) { switch ($field) {
case 'isaccess': // case 'isaccess':
case 'isread': // case 'isread':
case 'iswrite': // case 'iswrite':
case 'isreply': // case 'isreply':
case 'isupload': // case 'isupload':
case 'isdownload': // case 'isdownload':
$fieldFormOptions[$field] = [DEFAULTS['EMPTY'] => lang("Admin/BoardConfig.label.{$field}") . " 선택", ...$fieldFormOptions[$field]]; // $fieldFormOptions[$field] = [DEFAULTS['EMPTY'] => lang("Admin/BoardConfig.label.{$field}") . " 선택", ...$fieldFormOptions[$field]];
return form_dropdown($field, $fieldFormOptions[$field], $value, $attributes); // return form_dropdown($field, $fieldFormOptions[$field], $value, $attributes);
break; // break;
default: default:
return getFieldForm_BoardConfigHelper($field, $value, $fieldFormOptions, $attributes); return getFieldForm_BoardConfigHelper($field, $value, $fieldFormOptions, $attributes);
break; break;
@ -109,17 +109,17 @@ function getFieldIndex_Row_BoardConfigHelper($field, array $row, array $fieldFil
case 'name': case 'name':
return anchor(current_url() . '/view/' . $row['uid'], $row[$field], [...$attributes, "target" => "_self"]); return anchor(current_url() . '/view/' . $row['uid'], $row[$field], [...$attributes, "target" => "_self"]);
break; break;
case 'isaccess': // case 'isaccess':
case 'isread': // case 'isread':
case 'iswrite': // case 'iswrite':
case 'isreply': // case 'isreply':
case 'isupload': // case 'isupload':
case 'isdownload': // case 'isdownload':
foreach ($fieldFormOptions[$field] as $key => $label) { // foreach ($fieldFormOptions[$field] as $key => $label) {
$checkboxs[] = form_checkbox($field, $key, in_array($key, explode("|", $row[$field])), $attributes) . $label; // $checkboxs[] = form_checkbox($field, $key, in_array($key, explode("|", $row[$field])), $attributes) . $label;
} // }
return '<div style="text-align:left; padding-left:%spx;">' . implode("<BR>", $checkboxs) . '</div>'; // return '<div style="text-align:left; padding-left:%spx;">' . implode("<BR>", $checkboxs) . '</div>';
break; // break;
case 'updated_at': case 'updated_at':
case 'created_at': case 'created_at':
return isset($row[$field]) ? str_split($row[$field], 10)[0] : ""; return isset($row[$field]) ? str_split($row[$field], 10)[0] : "";

View File

@ -37,7 +37,7 @@ function getFieldForm_BoardHelper($field, $value, array $fieldFormOptions, array
case 'content': case 'content':
return form_textarea($field, html_entity_decode($value), [...$attributes, 'class' => 'editor', 'rows' => '20', 'cols' => '100']); return form_textarea($field, html_entity_decode($value), [...$attributes, 'class' => 'editor', 'rows' => '20', 'cols' => '100']);
break; break;
case 'upload_file': case 'board_file':
return form_upload($field); return form_upload($field);
break; break;
default: default:
@ -49,6 +49,13 @@ function getFieldForm_BoardHelper($field, $value, array $fieldFormOptions, array
function getFieldView_BoardHelper($field, $entity, array $fieldFilters, array $fieldFormOptions, array $attributes = array()) function getFieldView_BoardHelper($field, $entity, array $fieldFilters, array $fieldFormOptions, array $attributes = array())
{ {
switch ($field) { switch ($field) {
case 'board_file':
list($origin_filename, $filename) = explode("||", $entity->getFile());
if (is_file(WRITEPATH . PATHS['UPLOAD'] . "/" . $origin_filename)) {
return "파일이 확인되지 않습니다.";
}
return $entity->$field ? anchor(current_url() . '/download/' . $entity->getPrimaryKey(), ICONS['IMAGE_FILE'] . explode("||", $entity->$field)[0], [...$attributes, "target" => "_self"]) : "";
break;
case 'content': case 'content':
return html_entity_decode($entity->$field); return html_entity_decode($entity->$field);
break; break;
@ -90,6 +97,9 @@ function getFieldIndex_Row_BoardHelper($field, array $row, array $fieldFilters,
anchor(current_url() . '/reply/' . $row['uid'], ICONS['REPLY'], [...$attributes, "target" => "_self"]) anchor(current_url() . '/reply/' . $row['uid'], ICONS['REPLY'], [...$attributes, "target" => "_self"])
); );
break; break;
case 'board_file':
return $row[$field] ? anchor(current_url() . '/download/' . $row['uid'], ICONS['IMAGE_FILE'] . explode("||", $row[$field])[0], [...$attributes, "target" => "_self"]) : "";
break;
case 'updated_at': case 'updated_at':
case 'created_at': case 'created_at':
return isset($row[$field]) ? str_split($row[$field], 10)[0] : ""; return isset($row[$field]) ? str_split($row[$field], 10)[0] : "";

View File

@ -1,89 +0,0 @@
<?php
function getFieldLabel_LoggerHelper($field, array $fieldRules, array $attributes = array()): string
{
switch ($field) {
default:
if (strpos($fieldRules[$field], 'required') !== false) {
array_push($attributes, 'style="color:red";');
}
return sprintf("<span %s>%s</span>", implode(" ", $attributes), lang("Admin/Logger.label.{$field}"));
break;
}
}
//header.php에서 getFieldForm_Helper사용
function getFieldForm_LoggerHelper($field, $value, array $fieldFormOptions, array $attributes = array())
{
$value = $value ?: DEFAULTS['EMPTY'];
switch ($field) {
case 'user_uid':
case 'status':
$fieldFormOptions[$field] = [DEFAULTS['EMPTY'] => lang("Admin/Logger.label.{$field}") . " 선택", ...$fieldFormOptions[$field]];
return form_dropdown($field, $fieldFormOptions[$field], $value, $attributes);
break;
case 'updated_at':
case 'created_at':
form_input($field, $value, [...$attributes, 'class' => 'calender']);
break;
default:
return form_input($field, $value, $attributes);
break;
}
} //
function getFieldView_LoggerHelper($field, $entity, array $fieldFilters, array $fieldFormOptions, array $attributes = array())
{
switch ($field) {
case 'content':
return html_entity_decode($entity->$field);
break;
default:
if (in_array($field, $fieldFilters)) {
return getFieldForm_LoggerHelper($field, $entity->$field, $fieldFormOptions, $attributes);
}
return $entity->$field ?: DEFAULTS['EMPTY'];
break;
}
} //
function getFieldFilter_LoggerHelper($field, $value, array $fieldFormOptions, array $attributes = array())
{
$value = $value ?: DEFAULTS['EMPTY'];
switch ($field) {
default:
return getFieldForm_LoggerHelper($field, $value, $fieldFormOptions, $attributes);
break;
}
} //
function getFieldIndex_Column_LoggerHelper($field, $order_field, $order_value, array $attributes = array())
{
$label = lang("Admin/Logger.label.{$field}");
$label = $field == $order_field ? sprintf('%s <i class="fa fa-arrow-%s"></i>', $label, $order_value == 'ASC' ? "up" : "down") : $label;
$order_value = $order_value == 'DESC' ? "ASC" : "DESC";
return anchor(current_url() . "?order_field={$field}&order_value={$order_value}", $label, $attributes);
} //
function getFieldIndex_Row_LoggerHelper($field, array $row, array $fieldFilters, $fieldFormOptions, $attributes = array()): string
{
switch ($field) {
case 'title':
return anchor(current_url() . '/view/' . $row['uid'], $row[$field], [...$attributes, "target" => "_self"]);
break;
case 'user_uid':
case 'status':
return $fieldFormOptions[$field][$row[$field]];
break;
case 'updated_at':
case 'created_at':
return isset($row[$field]) ? str_split($row[$field], 10)[0] : "";
break;
default:
if (in_array($field, $fieldFilters)) {
$attributes["onChange"] = sprintf('location.href="%s/toggle/%s/%s?%s="+this.options[this.selectedIndex].value', current_url(), $row['uid'], $field, $field);
return getFieldFilter_LoggerHelper($field, $row[$field], $fieldFormOptions, $attributes);
}
return $row[$field] ?: DEFAULTS['EMPTY'];
break;
}
} //

View File

@ -17,6 +17,11 @@ function getFieldForm_UserHelper($field, $value, array $fieldFormOptions, array
$value = $value ?: DEFAULTS['EMPTY']; $value = $value ?: DEFAULTS['EMPTY'];
switch ($field) { switch ($field) {
case 'role': case 'role':
// foreach ($fieldFormOptions[$field] as $key => $label) {
// $checkboxs[] = form_checkbox("{$field}[]", $key, in_array($key, is_array($value) ? $value : explode("|", $value)), $attributes) . $label;
// }
// return implode("&nbsp;", $checkboxs);
// break;
case 'status': case 'status':
$fieldFormOptions[$field] = [DEFAULTS['EMPTY'] => lang("Admin/User.label.{$field}") . " 선택", ...$fieldFormOptions[$field]]; $fieldFormOptions[$field] = [DEFAULTS['EMPTY'] => lang("Admin/User.label.{$field}") . " 선택", ...$fieldFormOptions[$field]];
return form_dropdown($field, $fieldFormOptions[$field], $value, $attributes); return form_dropdown($field, $fieldFormOptions[$field], $value, $attributes);
@ -42,6 +47,12 @@ function getFieldForm_UserHelper($field, $value, array $fieldFormOptions, array
function getFieldView_UserHelper($field, $entity, array $fieldFilters, array $fieldFormOptions, array $attributes = array()) function getFieldView_UserHelper($field, $entity, array $fieldFilters, array $fieldFormOptions, array $attributes = array())
{ {
switch ($field) { switch ($field) {
// case 'role':
// foreach ($fieldFormOptions[$field] as $key => $label) {
// $checkboxs[] = form_checkbox("{$field}[]", $key, in_array($key, explode("|", $entity->$field)), $attributes) . $label;
// }
// return implode("&nbsp;", $checkboxs);
// break;
default: default:
if (in_array($field, $fieldFilters)) { if (in_array($field, $fieldFilters)) {
return getFieldForm_UserHelper($field, $entity->$field, $fieldFormOptions, $attributes); return getFieldForm_UserHelper($field, $entity->$field, $fieldFormOptions, $attributes);
@ -55,6 +66,10 @@ function getFieldFilter_UserHelper($field, $value, array $fieldFormOptions, arra
{ {
$value = $value ?: DEFAULTS['EMPTY']; $value = $value ?: DEFAULTS['EMPTY'];
switch ($field) { switch ($field) {
// case 'role':
// $fieldFormOptions[$field] = [DEFAULTS['EMPTY'] => lang("Admin/User.label.{$field}") . " 선택", ...$fieldFormOptions[$field]];
// return form_dropdown($field, $fieldFormOptions[$field], $value, $attributes);
// break;
default: default:
return getFieldForm_UserHelper($field, $value, $fieldFormOptions, $attributes); return getFieldForm_UserHelper($field, $value, $fieldFormOptions, $attributes);
break; break;
@ -75,6 +90,12 @@ function getFieldIndex_Row_UserHelper($field, array $row, array $fieldFilters, $
case 'id': case 'id':
return anchor(current_url() . '/view/' . $row['uid'], $row[$field], [...$attributes, "target" => "_self"]); return anchor(current_url() . '/view/' . $row['uid'], $row[$field], [...$attributes, "target" => "_self"]);
break; break;
// case 'role':
// foreach ($fieldFormOptions[$field] as $key => $label) {
// $checkboxs[] = form_checkbox($field, $key, in_array($key, explode("|", $row[$field])), $attributes) . $label;
// }
// return '<div style="text-align:left; padding-left:%spx;">' . implode("<BR>", $checkboxs) . '</div>';
// break;
case 'updated_at': case 'updated_at':
case 'created_at': case 'created_at':
return isset($row[$field]) ? str_split($row[$field], 10)[0] : ""; return isset($row[$field]) ? str_split($row[$field], 10)[0] : "";

View File

@ -13,7 +13,7 @@ return [
'passwd' => "암호", 'passwd' => "암호",
'confirmpassword' => "암호확인", 'confirmpassword' => "암호확인",
'view_cnt' => "조회수", 'view_cnt' => "조회수",
'upload_file' => "UploadFile", 'board_file' => "첨부파일",
'status' => "상태", 'status' => "상태",
'updated_at' => "수정일", 'updated_at' => "수정일",
'created_at' => "작성일" 'created_at' => "작성일"

View File

@ -1,23 +0,0 @@
<?php
namespace App\Libraries\Log;
use \App\Models\LoggerModel;
class DataBase
{
private $_model = null;
public function __construct()
{
$this->_model = new LoggerModel();
}
public function save(string $title, string $status, array $logs)
{
$datas = array(
'title' => $title,
'status' => $status,
'content' => implode("\n", $logs)
);
return $this->_model->create($datas);
}
}

View File

@ -1,28 +0,0 @@
<?php
namespace App\Libraries\Log;
class Log
{
private static $_logs = array();
private static $_dbInstance = null;
public function __construct()
{
}
final static public function add(string $level, string $content)
{
$content = date("H:i:s") . "-[{$level}]:{$content}";
if ($level !== "debug") {
array_push(self::$_logs, $content);
}
log_message($level, $content);
}
final static public function save(string $title, string $status = 'success')
{
if (self::$_dbInstance === null) {
self::$_dbInstance = new \App\Libraries\Log\DataBase();
}
// self::$_dbInstance->save($title, $status, self::$_logs);
self::$_logs = array();
}
}

View File

@ -10,36 +10,19 @@ abstract class BaseHierarchyModel extends BaseModel
protected function __construct() protected function __construct()
{ {
parent::__construct(); parent::__construct();
$this->allowedFields = [ $this->allowedFields = [...$this->allowedFields, "grpno", "grporder", "grpdepth"];
...$this->allowedFields,
'grpno', 'grporder', 'grpdepth'
];
} }
protected function getFields(array $fields = array(), array $skips = array()): array
{
//allowedFields에서 추가했으므로 Controller에는 적용되지 않게하기위함
$skips = ['grpno', 'grporder', 'grpdepth', ...$skips];
return parent::getFields($fields, $skips);
}
protected function getFieldFilters(array $fields = array(), array $skips = array()): array
{
//allowedFields에서 추가했으므로 Controller에는 적용되지 않게하기위함
$skips = ['grpno', 'grporder', 'grpdepth', ...$skips];
return parent::getFieldFilters($fields, $skips);
}
abstract function reply($parent_entity, array $formDatas): BaseEntity; abstract function reply($parent_entity, array $formDatas): BaseEntity;
protected function getFieldRule(string $field, array $rules, string $action = ""): array
protected function getFieldRule(string $field, array $rules): array
{ {
switch ($field) { switch ($field) {
case 'grpno': case "grpno":
case 'grporder': case "grporder":
case 'grpdepth': case "grpdepth":
$rules[$field] = 'if_exist|numeric'; $rules[$field] = "if_exist|numeric";
break; break;
default: default:
$rules = parent::getFieldRule($field, $rules); $rules = parent::getFieldRule($field, $rules, $action);
break; break;
} }
return $rules; return $rules;
@ -49,7 +32,7 @@ abstract class BaseHierarchyModel extends BaseModel
{ {
$entity = parent::create_process($entity, $formDatas); $entity = parent::create_process($entity, $formDatas);
//생성시는 grpno가 primarykey와 같음 //생성시는 grpno가 primarykey와 같음
$this->builder()->set('grpno', $entity->getPrimaryKey()); $this->builder()->set("grpno", $entity->getPrimaryKey());
$this->builder()->where($this->primaryKey, $entity->getPrimaryKey()); $this->builder()->where($this->primaryKey, $entity->getPrimaryKey());
$this->builder()->update(); $this->builder()->update();
return $entity; return $entity;
@ -59,10 +42,10 @@ abstract class BaseHierarchyModel extends BaseModel
{ {
//부모의 그룹과 grpno가 같고, 부모의 grporder보다 1 큰것을 grporder+1을 해서 update //부모의 그룹과 grpno가 같고, 부모의 grporder보다 1 큰것을 grporder+1을 해서 update
//escape -> false옵션 반드시 있어야함 //escape -> false옵션 반드시 있어야함
$this->builder()->set('grporder', 'grporder+1', false); $this->builder()->set("grporder", "grporder+1", false);
$this->builder()->where([ $this->builder()->where([
'grpno' => $parent_entity->grpno, "grpno" => $parent_entity->grpno,
'grporder >' => $parent_entity->grporder "grporder >" => $parent_entity->grporder
]); ]);
$this->builder()->update(); $this->builder()->update();
//reply용 설정 //reply용 설정

View File

@ -8,22 +8,22 @@ use App\Entities\BaseEntity;
abstract class BaseModel extends Model abstract class BaseModel extends Model
{ {
protected $DBGroup = 'default'; protected $DBGroup = "default";
protected $table = 'default'; protected $table = "default";
protected $primaryKey = 'uid'; protected $primaryKey = "uid";
protected $useAutoIncrement = true; protected $useAutoIncrement = true;
protected $insertID = 0; protected $insertID = 0;
protected $returnType = 'array'; //object,array,entity명::class protected $returnType = "array"; //object,array,entity명::class
protected $useSoftDeletes = false; protected $useSoftDeletes = false;
protected $protectFields = true; protected $protectFields = true;
protected $allowedFields = []; protected $allowedFields = [];
// Dates // Dates
protected $useTimestamps = true; protected $useTimestamps = true;
protected $dateFormat = 'datetime'; protected $dateFormat = "datetime";
protected $createdField = 'created_at'; protected $createdField = "created_at";
protected $updatedField = 'updated_at'; protected $updatedField = "updated_at";
protected $deletedField = 'deleted_at'; protected $deletedField = "deleted_at";
protected $validationRules = []; protected $validationRules = [];
protected $validationMessages = []; protected $validationMessages = [];
@ -44,77 +44,70 @@ abstract class BaseModel extends Model
protected function __construct() protected function __construct()
{ {
parent::__construct(); parent::__construct();
$this->allowedFields = ['updated_at', 'created_at']; $this->allowedFields = ["updated_at", "created_at"];
if (!$this->useAutoIncrement) {
array_push($this->allowedFields, $this->primaryKey);
}
$this->validationRules = []; $this->validationRules = [];
} }
abstract public function getEntity($uid): BaseEntity; abstract public function getEntity($uid): BaseEntity;
abstract public function getEntitys($where): array; abstract public function getEntitys($conditions): array;
protected function getFields(array $fields = array(), array $skips = array()): array abstract public function getFieldFilters(): array;
{ abstract public function getFields(string $action): array;
// echo var_export($fields, true); protected function getFieldRule(string $field, array $rules, string $action = ""): array
// echo "<HR>";
//allowedFields에서 추가했으므로 Controller에는 적용되지 않게하기위함
$skips = ['updated_at', 'created_at', ...$skips];
$tempFields = array();
foreach ($fields as $key => $field) {
in_array($field, $skips) ?: array_push($tempFields, $field);
}
// echo var_export($tempFields, true);
// exit;
return $tempFields;
}
protected function getFieldFilters(array $fields = array(), array $skips = array()): array
{
//allowedFields에서 추가했으므로 Controller에는 적용되지 않게하기위함
$skips = ['updated_at', 'created_at', ...$skips];
$tempFields = array();
foreach ($fields as $field) {
if (!in_array($field, $skips)) {
array_push($tempFields, $field);
}
}
return $tempFields;
}
protected function getFieldRule(string $field, array $rules): array
{ {
switch ($field) { switch ($field) {
case 'user_uid': case "user_uid":
$rules[$field] = 'if_exist|regex_match[/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/]'; $rules[$field] = "if_exist|regex_match[/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/]";
break; break;
case 'passwd': case "passwd":
$rules[$field] = 'if_exist|string'; $rules[$field] = "if_exist|trim|string";
$rules['confirmpassword'] = 'if_exist|string|matches[passwd]'; if (!$action) {
$rules["confirmpassword"] = "if_exist|trim|string|matches[passwd]";
}
break; break;
case 'view_cnt': case "view_cnt":
$rules[$field] = 'if_exist|numeric'; $rules[$field] = "if_exist|numeric";
break; break;
case 'updated_at': case "updated_at":
case 'created_at': case "created_at":
case 'deleted_at': case "deleted_at":
$rules[$field] = 'if_exist|valid_date'; $rules[$field] = "if_exist|valid_date";
break; break;
default: default:
$rules[$field] = 'if_exist|string'; $rules[$field] = "if_exist|string";
break; break;
} }
return $rules; return $rules;
} }
final public function getFieldRules(array $fields, array $rules = array()): array final public function getFieldRules(array $fields, string $action = ""): array
{ {
$rules = array();
foreach ($fields as $field) { foreach ($fields as $field) {
$rules = $this->getFieldRule($field, $rules); $rules = $this->getFieldRule($field, $rules, $action);
} }
return $rules; return $rules;
} }
public function getFieldBatchFilters(array $skips = array()): array
{
//allowedFields에서 추가했으므로 Controller에는 적용되지 않게하기위함
$fields = array();
foreach ($this->getFieldFilters() as $field) {
if (!in_array($field, $skips)) {
array_push($fields, $field);
}
}
return $fields;
}
final public function getPrimaryKey() final public function getPrimaryKey()
{ {
return $this->primaryKey; return $this->primaryKey;
} }
final public function getFieldFormOptions($where, $options = array()): array final public function getFieldFormOptions($conditions, $options = array()): array
{ {
foreach ($this->getEntitys($where) as $entity) { foreach ($this->getEntitys($conditions) as $entity) {
$options[$entity->getPrimaryKey()] = $entity->getTitle(); $options[$entity->getPrimaryKey()] = $entity->getTitle();
} }
return $options; return $options;
@ -134,7 +127,7 @@ abstract class BaseModel extends Model
} }
//View관련 (게시판등의 조회수 증가함수) //View관련 (게시판등의 조회수 증가함수)
final public function increaseViewCount($uid, string $field = 'view_cnt', int $cnt = 1) final public function increaseViewCount($uid, string $field = "view_cnt", int $cnt = 1)
{ {
//escape -> false옵션 반드시 있어야함 //escape -> false옵션 반드시 있어야함
$this->builder()->set($field, "{$field}+{$cnt}", false); $this->builder()->set($field, "{$field}+{$cnt}", false);
@ -153,20 +146,20 @@ abstract class BaseModel extends Model
$entity->$pk = $this->getUUID(); $entity->$pk = $this->getUUID();
} }
break; break;
case 'user_uid': case "user_uid":
if (array_key_exists($field, $formDatas) && $formDatas[$field]) { if (array_key_exists($field, $formDatas) && $formDatas[$field]) {
$entity->$field = $formDatas[$field]; $entity->$field = $formDatas[$field];
} elseif (session()->get(SESSION_NAMES['ISLOGIN'])) { } elseif (session()->get(SESSION_NAMES["ISLOGIN"])) {
$auth = session()->get(SESSION_NAMES['AUTH']); $auth = session()->get(SESSION_NAMES["AUTH"]);
$entity->$field = $auth[AUTH_FIELDS['ID']]; $entity->$field = $auth[AUTH_FIELDS["ID"]];
} }
break; break;
case 'passwd': case "passwd":
if (array_key_exists($field, $formDatas) && $formDatas[$field]) { if (array_key_exists($field, $formDatas) && $formDatas[$field]) {
$entity->$field = password_hash($formDatas[$field], PASSWORD_DEFAULT); $entity->$field = password_hash($formDatas[$field], PASSWORD_DEFAULT);
} }
break; break;
case 'content': case "content":
if (array_key_exists($field, $formDatas) && $formDatas[$field]) { if (array_key_exists($field, $formDatas) && $formDatas[$field]) {
$entity->$field = htmlentities($formDatas[$field]); $entity->$field = htmlentities($formDatas[$field]);
} }
@ -184,8 +177,8 @@ abstract class BaseModel extends Model
{ {
if ($entity->hasChanged()) { if ($entity->hasChanged()) {
if (!$this->save($entity)) { if (!$this->save($entity)) {
Log::add("error", __FUNCTION__ . "에서 호출:" . $this->getLastQuery()); log_message("error", __FUNCTION__ . "에서 호출:" . $this->getLastQuery());
Log::add("error", implode("\n", $this->errors())); log_message("error", implode("\n", $this->errors()));
throw new \Exception(__FUNCTION__ . " 오류 발생.\n" . var_export($this->errors(), true)); throw new \Exception(__FUNCTION__ . " 오류 발생.\n" . var_export($this->errors(), true));
} }
//primaryKey가 자동입력이면 //primaryKey가 자동입력이면
@ -200,14 +193,16 @@ abstract class BaseModel extends Model
} }
protected function create_process($entity, array $formDatas) protected function create_process($entity, array $formDatas)
{ {
// echo var_export($this->allowedFields, true);
// exit;
foreach ($this->allowedFields as $field) { foreach ($this->allowedFields as $field) {
$entity = $this->changeFormData($field, $formDatas, $entity); $entity = $this->changeFormData($field, $formDatas, $entity);
} }
// echo var_export($this->allowedFields);
// echo "<HR>";
// echo var_export($entity);
// exit;
return $this->save_process($entity); return $this->save_process($entity);
} }
protected function modify_process($entity, array $formDatas) final protected function modify_process($entity, array $formDatas)
{ {
foreach ($this->allowedFields as $field) { foreach ($this->allowedFields as $field) {
if ($field != $this->primaryKey) { if ($field != $this->primaryKey) {
@ -219,15 +214,15 @@ abstract class BaseModel extends Model
} }
//Index관련 //Index관련
protected function setIndexWordFilter(string $word) public function setIndexWordFilter(string $word)
{ {
} }
protected function setIndexDateFilterTrit($start, $end) public function setIndexDateFilterTrit($start, $end)
{ {
$this->where('created_at >=', $start); $this->where("created_at >=", $start);
$this->where('created_at <=', $end); $this->where("created_at <=", $end);
} }
protected function setIndexOrderBy($field, $order = 'ASC') public function setIndexOrderBy($field, $order = "ASC")
{ {
$this->orderBy($field, $order); $this->orderBy($field, $order);
} }

View File

@ -6,81 +6,96 @@ use App\Entities\BoardConfigEntity;
class BoardConfigModel extends BaseModel class BoardConfigModel extends BaseModel
{ {
protected $table = "tw_board_config";
protected $useAutoIncrement = false;
public function __construct() public function __construct()
{ {
parent::__construct(); parent::__construct();
$this->table = 'tw_board_config'; $this->allowedFields = [...$this->allowedFields, ...$this->getFields()];
$this->useAutoIncrement = false; $this->validationRules = [...$this->validationRules, ...$this->getFieldRules($this->allowedFields),];
$this->allowedFields = [ }
...$this->allowedFields, public function getFields(string $action = ""): array
'uid', 'name', 'isaccess', 'isread', 'iswrite', {
'isreply', 'isupload', 'isdownload', $fields = [
'status', 'head', 'tail' "name", "isaccess", "isread", "iswrite", "isreply", "isupload", "isdownload",
"status", "head", "tail",
]; ];
$this->validationRules = [ switch ($action) {
...$this->validationRules, case "index":
...$this->getFieldRules($this->getFields()), case "excel":
return [
"name", "isaccess", "isread", "iswrite", "isreply", "isupload", "isdownload",
"status", "created_at"
]; ];
}
public function getFields(array $fields = array(), array $skips = array()): array
{
$fields = [...$this->allowedFields, ...$fields];
return parent::getFields($fields, ['uid', ...$skips]);
}
public function getFieldFilters(array $fields = array(), array $skips = array()): array
{
$skips = ['name', 'head', 'tail', ...$skips];
return parent::getFieldFilters($fields, $skips);
}
protected function getFieldRule(string $field, array $rules): array
{
switch ($field) {
case 'uid':
$rules[$field] = 'required|regex_match[/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/]';
break; break;
case 'name': case "view":
$rules[$field] = 'required|trim|string'; return [...$fields, "updated_at", "created_at"];
break;
case 'isaccess':
case 'isread':
case 'iswrite':
case 'isreply':
case 'isupload':
case 'isdownload':
$rules[$field] = 'required';
break; break;
default: default:
$rules = parent::getFieldRule($field, $rules); return $fields;
break;
}
}
public function getFieldFilters(): array
{
return ["isaccess", "isread", "iswrite", "isreply", "isupload", "isdownload", "status"];
}
public function getFieldBatchFilters(array $skips = array()): array
{
$skips = ["isupload", "isdownload", ...$skips];
return parent::getFieldBatchFilters($skips);
}
protected function getFieldRule(string $field, array $rules, string $action = ""): array
{
switch ($field) {
case "uid":
$rules[$field] = "required|regex_match[/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/]";
$rules[$field] .= $action == "insert" ? "|is_unique[{$this->table}.{$field}]" : "";
break;
case "name":
$rules[$field] = "required|trim|string";
$rules[$field] .= $action == "insert" ? "|is_unique[{$this->table}.{$field}]" : "";
break;
case "isaccess":
case "isread":
case "iswrite":
case "isreply":
case "isupload":
case "isdownload":
$rules[$field] = "required";
break;
default:
$rules = parent::getFieldRule($field, $rules, $action);
break; break;
} }
return $rules; return $rules;
} }
public function getEntity($where): BoardConfigEntity public function getEntity($conditions): BoardConfigEntity
{ {
$entity = $this->asObject(BoardConfigEntity::class)->where($where)->first(); $entity = $this->asObject(BoardConfigEntity::class)->where($conditions)->first();
return $entity ?: throw new \Exception("{$where}의 해당 데이터가 없습니다.\n "); return $entity ?: throw new \Exception("{$conditions}의 해당 데이터가 없습니다.\n ");
} }
public function getEntitys($where): array public function getEntitys($conditions): array
{ {
return $this->asObject(BoardConfigEntity::class)->where($where)->findAll(); return $this->asObject(BoardConfigEntity::class)->where($conditions)->findAll();
} }
protected function changeFormData(string $field, array $formDatas, $entity) protected function changeFormData(string $field, array $formDatas, $entity)
{ {
switch ($field) { switch ($field) {
case 'isaccess': case "isaccess":
case 'isread': case "isread":
case 'iswrite': case "iswrite":
case 'isreply': case "isreply":
case 'isupload': case "isupload":
case 'isdownload': case "isdownload":
case 'isaccess': case "isaccess":
if (array_key_exists($field, $formDatas) && $formDatas[$field]) { if (array_key_exists($field, $formDatas) && $formDatas[$field]) {
$entity->$field = is_array($formDatas[$field]) ? implode("|", $formDatas[$field]) : $formDatas[$field]; $entity->$field = is_array($formDatas[$field]) ? implode("|", $formDatas[$field]) : $formDatas[$field];
} }
break; break;
case 'head': case "head":
case 'tail': case "tail":
if (array_key_exists($field, $formDatas) && $formDatas[$field]) { if (array_key_exists($field, $formDatas) && $formDatas[$field]) {
$entity->$field = htmlentities($formDatas[$field]); $entity->$field = htmlentities($formDatas[$field]);
} }
@ -104,15 +119,15 @@ class BoardConfigModel extends BaseModel
public function setIndexWordFilter(string $word) public function setIndexWordFilter(string $word)
{ {
parent::setIndexWordFilter($word); parent::setIndexWordFilter($word);
$this->orLike('name', $word, 'both'); //befor , after , both $this->orLike("name", $word, "both"); //befor , after , both
$this->orLike('isaccess', $word, 'both'); //befor , after , both $this->orLike("isaccess", $word, "both"); //befor , after , both
$this->orLike('isread', $word, 'both'); //befor , after , both $this->orLike("isread", $word, "both"); //befor , after , both
$this->orLike('iswrite', $word, 'both'); //befor , after , both $this->orLike("iswrite", $word, "both"); //befor , after , both
$this->orLike('isreply', $word, 'both'); //befor , after , both $this->orLike("isreply", $word, "both"); //befor , after , both
$this->orLike('isupload', $word, 'both'); //befor , after , both $this->orLike("isupload", $word, "both"); //befor , after , both
$this->orLike('isdownload', $word, 'both'); //befor , after , both $this->orLike("isdownload", $word, "both"); //befor , after , both
} }
public function setIndexOrderBy($field, $order = 'ASC') public function setIndexOrderBy($field, $order = "ASC")
{ {
$this->orderBy("name", "ASC"); $this->orderBy("name", "ASC");
parent::setIndexOrderBy($field, $order); parent::setIndexOrderBy($field, $order);

View File

@ -6,61 +6,64 @@ use App\Entities\BoardEntity;
class BoardModel extends BaseHierarchyModel class BoardModel extends BaseHierarchyModel
{ {
protected $table = "tw_board";
public function __construct() public function __construct()
{ {
parent::__construct(); parent::__construct();
$this->table = 'tw_board'; $this->allowedFields = [...$this->allowedFields, ...$this->getFields(), "user_uid"];
$this->allowedFields = [ $this->validationRules = [...$this->validationRules, ...$this->getFieldRules($this->allowedFields),];
...$this->allowedFields,
'board_config_uid', 'user_uid', 'title', 'passwd',
'upload_file', 'status', 'view_cnt', 'content',
];
$this->validationRules = [
...$this->validationRules,
...$this->getFieldRules($this->getFields()),
];
} }
public function getFields(array $fields = array(), array $skips = array()): array public function getFields(string $action = ""): array
{ {
$fields = [...$this->allowedFields, ...$fields]; $fields = ["board_config_uid", "title", "board_file", "passwd", "status", "content"];
return parent::getFields($fields, $skips); switch ($action) {
} case "index":
public function getFieldFilters(array $fields = array(), array $skips = array()): array case "excel":
{ return ["board_config_uid", "user_uid", "title", "board_file", "view_cnt", "status", "created_at"];
$skips = ['title', 'passwd', 'upload_file', 'view_cnt', 'content', ...$skips];
return parent::getFieldFilters($fields, $skips);
}
protected function getFieldRule(string $field, array $rules): array
{
switch ($field) {
case 'board_config_uid':
$rules[$field] = 'required|regex_match[/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/]';
break; break;
case 'title': case "view":
case 'content': return ["board_config_uid", "user_uid", "title", "board_file", "view_cnt", "status", "created_at", "content"];
$rules[$field] = 'required|string';
break;
case 'upload_file':
$rules[$field] = 'if_exist|uploaded[upload_file]|is_image[upload_file]|mime_in[upload_file,image/jpg,image/jpeg,image/gif,image/png,image/webp]|max_size[upload_file,100]|max_dims[upload_file,1024,768]';
break;
case 'view_cnt':
$rules[$field] = 'if_exist|numeric';
break; break;
default: default:
$rules = parent::getFieldRule($field, $rules); return $fields;
break;
}
}
public function getFieldFilters(array $fields = array()): array
{
return ["board_config_uid", "user_uid", "status", ...$fields];
}
protected function getFieldRule(string $field, array $rules, string $action = ""): array
{
switch ($field) {
case "board_config_uid":
$rules[$field] = "required|regex_match[/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/]";
break;
case "title":
case "content":
$rules[$field] = "required|string";
break;
case "board_file":
$rules[$field] = !$action ? "if_exist|string" : "if_exist|uploaded[{$field}]|is_image[{$field}]|mime_in[{$field},image/jpg,image/jpeg,image/gif,image/png,image/webp]|max_size[{$field},100]|max_dims[{$field},1024,768]";
break;
case "view_cnt":
$rules[$field] = "if_exist|numeric";
break;
default:
$rules = parent::getFieldRule($field, $rules, $action);
break; break;
} }
return $rules; return $rules;
} }
public function getEntity($where): BoardEntity public function getEntity($conditions): BoardEntity
{ {
$entity = $this->asObject(BoardEntity::class)->where($where)->first(); $entity = $this->asObject(BoardEntity::class)->where($conditions)->first();
return $entity ?: throw new \Exception("{$where}의 해당 데이터가 없습니다.\n "); return $entity ?: throw new \Exception("{$conditions}의 해당 데이터가 없습니다.\n ");
} }
public function getEntitys($where): array public function getEntitys($conditions): array
{ {
return $this->asObject(BoardEntity::class)->where($where)->findAll(); return $this->asObject(BoardEntity::class)->where($conditions)->findAll();
} }
public function create(array $formDatas): BoardEntity public function create(array $formDatas): BoardEntity
{ {
@ -79,10 +82,10 @@ class BoardModel extends BaseHierarchyModel
public function setIndexWordFilter(string $word) public function setIndexWordFilter(string $word)
{ {
parent::setIndexWordFilter($word); parent::setIndexWordFilter($word);
$this->orLike('title', $word, 'both'); $this->orLike("title", $word, "both");
$this->orLike('content', $word, 'both'); //befor , after , both $this->orLike("content", $word, "both"); //befor , after , both
} }
public function setIndexOrderBy($field, $order = 'DESC') public function setIndexOrderBy($field, $order = "DESC")
{ {
$this->orderBy("grpno", "DESC"); $this->orderBy("grpno", "DESC");
$this->orderBy("grporder", "ASC"); $this->orderBy("grporder", "ASC");

View File

@ -6,54 +6,84 @@ use App\Entities\HPILOEntity;
class HPILOModel extends BaseModel class HPILOModel extends BaseModel
{ {
protected $table = 'tw_hpilo'; protected $table = "tw_hpilo";
// protected $primaryKey = 'uid'; public function __construct()
// protected $useAutoIncrement = true;
protected $allowedFields = ['customer', 'ip', 'port', 'id', 'passwd', 'model', 'processor', 'memory', 'health', 'power', 'detail', 'status', 'created_at'];
protected $validationRules = [
'uid' => 'if_exist|numeric',
'customer' => 'if_exist|string',
'id' => 'if_exist|string',
'passwd' => 'if_exist|string',
'ip' => 'if_exist|string',
'port' => 'if_exist|numeric',
'model' => 'if_exist|string',
'processor' => 'if_exist|string',
'memory' => 'if_exist|numeric',
'health' => 'if_exist|string',
'power' => 'if_exist|string',
'detail' => 'if_exist|string',
'status' => 'if_exist|in_list[use,unuse]',
'updated_at' => 'if_exist|valid_date',
'created_at' => 'if_exist|valid_date',
];
public function getEntityByField($field, $value): ?HPILOEntity
{ {
return $this->asObject(HPILOEntity::class)->where($field, $value)->first(); parent::__construct();
$this->allowedFields = [...$this->allowedFields, ...$this->getFields(), 'model', 'processor', 'memory', 'health', 'power', 'detail',];
$this->validationRules = [...$this->validationRules, ...$this->getFieldRules($this->allowedFields),];
} }
public function getEntity($uid): ?HPILOEntity public function getFields(string $action = ""): array
{ {
return $this->getEntityByField($this->primaryKey, $uid); $fields = ['customer', 'id', 'passwd', 'ip', 'port', 'status'];
switch ($action) {
case "index":
case "excel":
return ['customer', 'ip', 'port', 'model', 'processor', 'memory', 'health', 'power', 'status', 'created_at'];
break;
case "view":
return ['customer', 'id', 'ip', 'port', 'model', 'processor', 'memory', 'health', 'power', 'detail', 'status', 'updated_at', 'created_at'];
break;
default:
return $fields;
break;
} }
public function getFieldFormOptions(array $wheres = array(), $temps = array()): array }
public function getFieldFilters(array $fields = array()): array
{ {
foreach ($this->asObject(HPILOEntity::class)->where($wheres)->findAll() as $entity) { return ["status", ...$fields];
$temps[$entity->getPrimaryKey()] = $entity->getTitle();
} }
return $temps; protected function getFieldRule(string $field, array $rules, string $action = ""): array
}
public function create(array $datas): HPILOEntity
{ {
return $this->create_process(new HPILOEntity($datas)); switch ($field) {
case "customer":
$rules[$field] = "required|trim|string";
$rules[$field] .= $action == "insert" ? "|is_unique[{$this->table}.{$field}]" : "";
break;
case "passwd":
$rules[$field] = "required|trim|string";
$rules["confirmpassword"] = "required|trim|string|matches[passwd]";
break;
case "model":
case "processor":
case "memory":
case "health":
case "power":
case "detail":
$rules[$field] = "required|string";
break;
default:
$rules = parent::getFieldRule($field, $rules, $action);
break;
} }
public function modify(HPILOEntity $entity, array $datas): HPILOEntity return $rules;
}
public function getEntity($conditions): HPILOEntity
{ {
foreach ($datas as $field => $value) { $entity = $this->asObject(HPILOEntity::class)->where($conditions)->first();
if ($entity->$field != $datas[$field]) { return $entity ?: throw new \Exception("{$conditions}의 해당 정보가 없습니다.\n ");
$entity->$field = $value;
} }
public function getEntitys($conditions): array
{
return $this->asObject(HPILOEntity::class)->where($conditions)->findAll();
} }
return $this->modify_process($entity);
protected function changeFormData(string $field, array $formDatas, $entity)
{
switch ($field) {
default:
return parent::changeFormData($field, $formDatas, $entity);
break;
}
return $entity;
}
public function create(array $formDatas): HPILOEntity
{
return $this->create_process(new HPILOEntity(), $formDatas);
}
public function modify(HPILOEntity $entity, array $formDatas): HPILOEntity
{
return $this->modify_process($entity, $formDatas);
} }
//Index관련 //Index관련

View File

@ -1,72 +0,0 @@
<?php
namespace App\Models;
use App\Entities\LoggerEntity;
class LoggerModel extends BaseModel
{
public function __construct()
{
parent::__construct();
$this->table = 'tw_logger';
$this->allowedFields = [
...$this->allowedFields,
...$this->getFields(),
];
$this->validationRules = [
...$this->validationRules,
...$this->getFieldRules($this->getFields()),
];
}
public function getFields(array $fields = array(), array $skips = array()): array
{
$fields = ['user_uid', 'title', 'content', 'status', ...$fields];
return parent::getFields($fields, $skips);
}
public function getFieldFilters(array $fields = array(), array $skips = array()): array
{
$fields = ['user_uid', 'status', ...$fields];
return parent::getFieldFilters($fields, $skips);
}
protected function getFieldRule(string $field, array $rules): array
{
switch ($field) {
case 'title':
case 'content':
case 'status':
$rules[$field] = 'required|string';
break;
default:
$rules = parent::getFieldRule($field, $rules);
break;
}
return $rules;
}
public function getEntity($where): LoggerEntity
{
$entity = $this->asObject(LoggerEntity::class)->where($where)->first();
return $entity ?: throw new \Exception("{$where}의 해당 데이터가 없습니다.\n ");
}
public function getEntitys($where): array
{
return $this->asObject(LoggerEntity::class)->where($where)->findAll();
}
public function create(array $formDatas): LoggerEntity
{
return $this->create_process(new LoggerEntity(), $formDatas);
}
public function modify(LoggerEntity $entity, array $formDatas): LoggerEntity
{
return $this->modify_process($entity, $formDatas);
}
//Index관련
public function setIndexWordFilter(string $word)
{
parent::setIndexWordFilter($word);
$this->orLike('title', $word, 'both');
$this->orLike('content', $word, 'both'); //befor , after , both
}
}

View File

@ -6,67 +6,87 @@ use App\Entities\UserEntity;
class UserModel extends BaseModel class UserModel extends BaseModel
{ {
protected $table = "tw_user";
protected $useAutoIncrement = false;
public function __construct() public function __construct()
{ {
parent::__construct(); parent::__construct();
$this->table = 'tw_user'; $this->allowedFields = [...$this->allowedFields, ...$this->getFields()];
$this->useAutoIncrement = false; $this->validationRules = [...$this->validationRules, ...$this->getFieldRules($this->allowedFields),];
$this->allowedFields = [
...$this->allowedFields,
'uid',
...$this->getFields(),
];
$this->validationRules = [
...$this->validationRules,
...$this->getFieldRules($this->getFields()),
];
} }
public function getFields(array $fields = array(), array $skips = array()): array public function getFields(string $action = ""): array
{ {
$fields = ['id', 'email', 'passwd', 'name', 'role', 'status', ...$fields]; $fields = ["id", "passwd", "name", "email", "role", "status"];
return parent::getFields($fields, $skips); switch ($action) {
} case "index":
public function getFieldFilters(array $fields = array(), array $skips = array()): array case "excel":
{ return ["id", "name", "email", "role", "status", 'created_at'];
$fields = ['user_uid', 'status', ...$fields];
return parent::getFieldFilters($fields, $skips);
}
protected function getFieldRule(string $field, array $rules): array
{
switch ($field) {
case 'uid':
$rules[$field] = 'required|regex_match[/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/]';
break; break;
case 'id': case "view":
$rules[$field] = 'required|trim|min_length[4]|max_length[20]'; return ["id", "name", "email", "role", "status", 'updated_at', 'created_at'];
break;
case 'passwd':
$rules[$field] = 'required|string';
$rules['confirmpassword'] = 'if_exist|string|matches[passwd]';
break;
case 'name':
$rules[$field] = 'required|trim|string';
break;
case 'email':
$rules[$field] = 'required|valid_email';
break;
case 'role':
$rules[$field] = 'required|string';
break; break;
default: default:
$rules = parent::getFieldRule($field, $rules); return $fields;
break;
}
}
public function getFieldFilters(array $fields = array()): array
{
return ["role", "status", ...$fields];
}
protected function getFieldRule(string $field, array $rules, string $action = ""): array
{
switch ($field) {
case "uid":
$rules[$field] = "required|regex_match[/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/]";
$rules[$field] .= $action == "insert" ? "|is_unique[{$this->table}.{$field}]" : "";
break;
case "id":
$rules[$field] = "required|trim|min_length[4]|max_length[20]";
$rules[$field] .= $action == "insert" ? "|is_unique[{$this->table}.{$field}]" : "";
break;
case "passwd":
$rules[$field] = "required|trim|string";
$rules["confirmpassword"] = "required|trim|string|matches[passwd]";
break;
case "name":
$rules[$field] = "required|trim|string";
break;
case "email":
$rules[$field] = "required|trim|valid_email";
break;
case "role":
$rules[$field] = "required|string";
break;
default:
$rules = parent::getFieldRule($field, $rules, $action);
break; break;
} }
return $rules; return $rules;
} }
public function getEntity($where): UserEntity public function getEntity($conditions): UserEntity
{ {
$entity = $this->asObject(UserEntity::class)->where($where)->first(); $entity = $this->asObject(UserEntity::class)->where($conditions)->first();
return $entity ?: throw new \Exception("{$where}의 해당 사용자가 없습니다.\n "); return $entity ?: throw new \Exception("{$conditions}의 해당 사용자가 없습니다.\n ");
} }
public function getEntitys($where): array public function getEntitys($conditions): array
{ {
return $this->asObject(UserEntity::class)->where($where)->findAll(); return $this->asObject(UserEntity::class)->where($conditions)->findAll();
}
protected function changeFormData(string $field, array $formDatas, $entity)
{
switch ($field) {
case "role":
if (array_key_exists($field, $formDatas) && $formDatas[$field]) {
$entity->$field = is_array($formDatas[$field]) ? implode("|", $formDatas[$field]) : $formDatas[$field];
}
break;
default:
return parent::changeFormData($field, $formDatas, $entity);
break;
}
return $entity;
} }
public function create(array $formDatas): UserEntity public function create(array $formDatas): UserEntity
{ {
@ -81,10 +101,10 @@ class UserModel extends BaseModel
public function setIndexWordFilter(string $word) public function setIndexWordFilter(string $word)
{ {
parent::setIndexWordFilter($word); parent::setIndexWordFilter($word);
$this->orLike('id', $word, 'both'); $this->orLike("id", $word, "both");
$this->orLike('name', $word, 'both'); //befor , after , both $this->orLike("name", $word, "both"); //befor , after , both
} }
public function setIndexOrderBy($field, $order = 'ASC') public function setIndexOrderBy($field, $order = "ASC")
{ {
$this->orderBy("name", "ASC"); $this->orderBy("name", "ASC");
parent::setIndexOrderBy($field, $order); parent::setIndexOrderBy($field, $order);

View File

@ -6,59 +6,66 @@ use App\Entities\UserSNSEntity;
class UserSNSModel extends BaseModel class UserSNSModel extends BaseModel
{ {
protected $table = "tw_user_sns";
public function __construct() public function __construct()
{ {
parent::__construct(); parent::__construct();
$this->table = 'tw_user_sns'; $this->allowedFields = [...$this->allowedFields, ...$this->getFields(), "user_uid"];
$this->allowedFields = [ $this->validationRules = [...$this->validationRules, ...$this->getFieldRules($this->allowedFields),];
...$this->allowedFields,
...$this->getFields()
];
$this->validationRules = [
...$this->validationRules,
...$this->getFieldRules($this->getFields()),
];
} }
public function getFields(array $fields = array(), array $skips = array()): array public function getFields(string $action = ""): array
{ {
$fields = ['user_uid', 'site', 'id', 'name', 'email', 'detail', 'status', ...$fields]; $fields = ["site", "id", "name", "email", "detail", "status"];
return parent::getFields($fields, $skips); switch ($action) {
} case "index":
public function getFieldFilters(array $fields = array(), array $skips = array()): array case "excel":
{ return ["user_uid", "site", "id", "name", "email", "status", "created_at"];
$fields = ['user_uid', 'status', ...$fields];
return parent::getFieldFilters($fields, $skips);
}
protected function getFieldRule(string $field, array $rules): array
{
switch ($field) {
case 'id':
case 'name':
$rules[$field] = 'required|trim|string';
break; break;
case 'email': case "view":
$rules[$field] = 'required|valid_email'; return [...$fields, "updated_at", "created_at"];
break;
case 'detail':
$rules[$field] = 'if_exist|string';
break;
case 'status':
$rules[$field] = 'required|string';
break; break;
default: default:
$rules = parent::getFieldRule($field, $rules); return $fields;
break;
}
}
public function getFieldFilters(array $fields = array()): array
{
return ["status", ...$fields];
}
protected function getFieldRule(string $field, array $rules, string $action = ""): array
{
switch ($field) {
case "id":
$rules[$field] = "required|trim|string";
$rules[$field] .= $action == "insert" ? "|is_unique[{$this->table}.{$field}]" : "";
break;
case "name":
$rules[$field] = "required|trim|string";
break;
case "email":
$rules[$field] = "required|valid_email";
break;
case "detail":
$rules[$field] = "if_exist|string";
break;
case "status":
$rules[$field] = "required|string";
break;
default:
$rules = parent::getFieldRule($field, $rules, $action);
break; break;
} }
return $rules; return $rules;
} }
public function getEntity($where): UserSNSEntity public function getEntity($conditions): UserSNSEntity
{ {
$entity = $this->asObject(UserSNSEntity::class)->where($where)->first(); $entity = $this->asObject(UserSNSEntity::class)->where($conditions)->first();
return $entity ?: throw new \Exception("{$where}의 해당 데이터가 없습니다.\n "); return $entity ?: throw new \Exception("{$conditions}의 해당 데이터가 없습니다.\n ");
} }
public function getEntitys($where): array public function getEntitys($conditions): array
{ {
return $this->asObject(UserSNSEntity::class)->where($where)->findAll(); return $this->asObject(UserSNSEntity::class)->where($conditions)->findAll();
} }
public function create(array $formDatas): UserSNSEntity public function create(array $formDatas): UserSNSEntity
@ -74,10 +81,10 @@ class UserSNSModel extends BaseModel
public function setIndexWordFilter(string $word) public function setIndexWordFilter(string $word)
{ {
parent::setIndexWordFilter($word); parent::setIndexWordFilter($word);
$this->orLike('name', $word, 'both'); $this->orLike("name", $word, "both");
$this->orLike('email', $word, 'both'); //befor , after , both $this->orLike("email", $word, "both"); //befor , after , both
} }
public function setIndexOrderBy($field, $order = 'ASC') public function setIndexOrderBy($field, $order = "ASC")
{ {
$this->orderBy("name", "ASC"); $this->orderBy("name", "ASC");
parent::setIndexOrderBy($field, $order); parent::setIndexOrderBy($field, $order);

View File

@ -1,46 +0,0 @@
<?= $this->extend('layouts/admin') ?>
<?= $this->section('content') ?>
<?= $this->include('templates/admin/header'); ?>
<div class="indexTable_wrapper">
<div class="indexTable_head">
<?= form_open(current_url(), array("method" => "get")) ?>
<ul class="nav">
조건검색:<?php foreach ($fieldFilters as $field) : ?><li class="nav-item"><?= getFieldFilter_LoggerHelper($field, $$field, $fieldFormOptions) ?></li><?php endforeach; ?>
<?= $this->include('templates/admin/index_head'); ?>
</ul>
<?= form_close(); ?>
</div>
<div class="indexTable_body">
<?= form_open(current_url() . '/batchjob', $forms['attributes'], $forms['hiddens']) ?>
<table class="table table-bordered table-hover table-striped indexTable ">
<tr>
<td>번호</td>
<?php foreach ($fields as $field) : ?><td><?= getFieldIndex_Column_LoggerHelper($field, $order_field, $order_value) ?></td><?php endforeach; ?>
</tr>
<?php $i = 0; ?>
<?php foreach ($rows as $row) : ?>
<tr id="<?= $row['uid'] ?>" onClick="indexRowCheckBoxToggle(this);">
<td>
<?= form_checkbox(["id" => "checkbox_uid_{$row['uid']}", "name" => "batchjob_uids[]", "value" => $row['uid'], "class" => "batchjobuids_checkboxs"]); ?>
<?= $total_count - (($page - 1) * $per_page + $i) ?>
</td>
<?php foreach ($fields as $field) : ?>
<td nowrap><?= getFieldIndex_Row_LoggerHelper($field, $row, $fieldFilters, $fieldFormOptions) ?></td>
<?php endforeach; ?>
</tr>
<?php $i++; ?>
<?php endforeach; ?>
</table>
<ul class="nav justify-content-center">
<li class="nav-item"><?= form_checkbox(array("id" => "batchjobuids_checkbox")) ?>ALL</li>
<?php foreach ($batchjobFilters as $field) : ?><li class="nav-item"><?= getFieldFilter_LoggerHelper($field, DEFAULTS['EMPTY'], $fieldFormOptions) ?></li><?php endforeach; ?>
<li class="nav-item"><?= form_submit('', '일괄처리', array("class" => "btn btn-outline btn-warning")); ?></li>
</ul>
<?= form_close(); ?>
</div>
<div class="indexTable_tail">
<?= $pagination ?>
</div>
</div>
<?= $this->include('templates/admin/footer'); ?>
<?= $this->endSection() ?>

View File

@ -1,15 +0,0 @@
<?= $this->extend('layouts/admin') ?>
<?= $this->section('content') ?>
<?= $this->include('templates/admin/header'); ?>
<table class="table table-bordered table-hover table-striped indexTable ">
<?php foreach ($fields as $field) : ?>
<tr>
<td nowrap style="background-color:#e8ebe9; width:10%; text-align:right; padding-right:20px;">
<?= getFieldLabel_LoggerHelper($field,$fieldRules) ?>
</td>
<td style="text-align:left; padding-left:20px;"><?= getFieldView_LoggerHelper($field,$entity,$fieldFilters,$fieldFormOptions) ?></td>
</tr>
<?php endforeach; ?>
</table>
<?= $this->include('templates/admin/footer'); ?>
<?= $this->endSection() ?>