dbms_init...1
This commit is contained in:
parent
f62fece95e
commit
e870bcf90f
@ -95,19 +95,6 @@ $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'au
|
||||
});
|
||||
});
|
||||
$routes->group('device', ['namespace' => 'App\Controllers\Admin\Device'], function ($routes) {
|
||||
$routes->group('rack', ['namespace' => 'App\Controllers\Admin\Device'], function ($routes) {
|
||||
$routes->get('/', 'RackController::index', []);
|
||||
$routes->get('create', 'RackController::create_form');
|
||||
$routes->post('create', 'RackController::create');
|
||||
$routes->get('modify/(:num)', 'RackController::modify_form/$1');
|
||||
$routes->post('modify/(:num)', 'RackController::modify/$1');
|
||||
$routes->get('view/(:num)', 'RackController::view/$1');
|
||||
$routes->get('delete/(:num)', 'RackController::delete/$1');
|
||||
$routes->get('toggle/(:num)/(:any)', 'RackController::toggle/$1/$2');
|
||||
$routes->post('batchjob', 'RackController::batchjob');
|
||||
$routes->post('batchjob_delete', 'RackController::batchjob_delete');
|
||||
$routes->get('download/(:alpha)', 'RackController::download/$1');
|
||||
});
|
||||
$routes->group('line', ['namespace' => 'App\Controllers\Admin\Device'], function ($routes) {
|
||||
$routes->get('/', 'LineController::index', []);
|
||||
$routes->get('create', 'LineController::create_form');
|
||||
|
||||
@ -58,10 +58,7 @@ class ClientController extends CustomerController
|
||||
|
||||
protected function create_process(): ClientEntity
|
||||
{
|
||||
//데이터 검증
|
||||
$this->formDatas = $this->doValidate($this->action, $this->fields);
|
||||
$entity = $this->getService()->create($this->formDatas);
|
||||
|
||||
$entity = parent::create_process();
|
||||
//Account정보
|
||||
$temps = [];
|
||||
$temps['clientinfo_uid'] = $entity->getPK();
|
||||
|
||||
@ -14,7 +14,10 @@ use App\Services\Customer\PointService;
|
||||
|
||||
abstract class CustomerController extends AdminController
|
||||
{
|
||||
private $_clientService = null;
|
||||
private ?ClientService $_clientService = null;
|
||||
private ?AccountService $_accountService = null;
|
||||
private ?CouponService $_couponService = null;
|
||||
private ?PointService $_pointService = null;
|
||||
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
|
||||
{
|
||||
parent::initController($request, $response, $logger);
|
||||
|
||||
@ -6,11 +6,14 @@ use App\Controllers\Admin\AdminController;
|
||||
use CodeIgniter\HTTP\RequestInterface;
|
||||
use CodeIgniter\HTTP\ResponseInterface;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
use App\Services\Device\LineService;
|
||||
use App\Services\Device\ServerService;
|
||||
|
||||
abstract class DeviceController extends AdminController
|
||||
{
|
||||
private $_serverService = null;
|
||||
private ?ServerService $_serverService = null;
|
||||
private ?LineService $_lineService = null;
|
||||
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
|
||||
{
|
||||
parent::initController($request, $response, $logger);
|
||||
@ -24,6 +27,13 @@ abstract class DeviceController extends AdminController
|
||||
}
|
||||
return $this->_serverService;
|
||||
}
|
||||
final public function getLineService(): LineService
|
||||
{
|
||||
if (!$this->_lineService) {
|
||||
$this->_lineService = new LineService($this->request);
|
||||
}
|
||||
return $this->_lineService;
|
||||
}
|
||||
//Index,FieldForm관련
|
||||
protected function getFormFieldOption(string $field, array $options = []): array
|
||||
{
|
||||
@ -33,6 +43,11 @@ abstract class DeviceController extends AdminController
|
||||
// echo $this->getUserModel()->getLastQuery();
|
||||
// dd($options);
|
||||
break;
|
||||
case 'lineinfo_uid':
|
||||
$options[$field] = $this->getLineService()->getFormFieldOption($field);
|
||||
// echo $this->getUserModel()->getLastQuery();
|
||||
// dd($options);
|
||||
break;
|
||||
default:
|
||||
$options = parent::getFormFieldOption($field, $options);
|
||||
break;
|
||||
|
||||
@ -35,18 +35,4 @@ class IpController extends DeviceController
|
||||
return $this->_helper;
|
||||
}
|
||||
//Index,FieldForm관련
|
||||
protected function setValidation(Validation $validation, string $action, string $field, ?string $rule = null): Validation
|
||||
{
|
||||
switch ($field) {
|
||||
case 'role':
|
||||
//아래 Rule Array는 필드명.* checkbox를 사용
|
||||
$validation->setRule("{$field}.*", $field, $rule);
|
||||
break;
|
||||
default:
|
||||
$validation = parent::setValidation($validation, $action, $field, $rule);
|
||||
break;
|
||||
}
|
||||
return $validation;
|
||||
}
|
||||
//Index,FieldForm관련.
|
||||
}
|
||||
|
||||
@ -4,14 +4,17 @@ namespace App\Controllers\Admin\Device;
|
||||
|
||||
use CodeIgniter\HTTP\RequestInterface;
|
||||
use CodeIgniter\HTTP\ResponseInterface;
|
||||
use CodeIgniter\Validation\Validation;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
use App\Entities\Device\LineEntity;
|
||||
use App\Helpers\Device\LineHelper;
|
||||
use App\Services\Device\LineService;
|
||||
use App\Services\Device\IpService;
|
||||
use App\Entities\Device\IpEntity;
|
||||
|
||||
class LineController extends DeviceController
|
||||
{
|
||||
private ?IpService $_ipService = null;
|
||||
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
|
||||
{
|
||||
parent::initController($request, $response, $logger);
|
||||
@ -34,19 +37,32 @@ class LineController extends DeviceController
|
||||
}
|
||||
return $this->_helper;
|
||||
}
|
||||
//Index,FieldForm관련
|
||||
protected function setValidation(Validation $validation, string $action, string $field, ?string $rule = null): Validation
|
||||
final public function getIpService(): IpService
|
||||
{
|
||||
switch ($field) {
|
||||
case 'role':
|
||||
//아래 Rule Array는 필드명.* checkbox를 사용
|
||||
$validation->setRule("{$field}.*", $field, $rule);
|
||||
break;
|
||||
default:
|
||||
$validation = parent::setValidation($validation, $action, $field, $rule);
|
||||
break;
|
||||
if (!$this->_ipService) {
|
||||
$this->_ipService = new IpService($this->request);
|
||||
}
|
||||
return $validation;
|
||||
return $this->_ipService;
|
||||
}
|
||||
//Index,FieldForm관련
|
||||
|
||||
//생성
|
||||
protected function create_process(): LineEntity
|
||||
{
|
||||
//Line 등록
|
||||
if (!$this->getHelper()->isValidCIDR($this->formDatas['bandwith'])) {
|
||||
throw new \Exception("{$this->formDatas['bandwith']}는 CIDR 형식에 부합되지 않습니다.");
|
||||
}
|
||||
$entity = parent::create_process();
|
||||
// //IP 등록
|
||||
foreach ($this->getHelper()->cidrToIpRange($this->formDatas['bandwith']) as $ip) {
|
||||
$temps = [];
|
||||
$temps['lineinfo_uid'] = $entity->getPK();
|
||||
$temps['ip'] = $ip;
|
||||
$temps['price'] = $this->formDatas['price'] ?? 0;
|
||||
$temps['status'] = lang("{$this->getIpService()->getClassPath()}.DEFAULTS.status");
|
||||
$this->getIpService()->create($temps, new IpEntity());
|
||||
}
|
||||
return $entity;
|
||||
}
|
||||
//Index,FieldForm관련.
|
||||
}
|
||||
|
||||
@ -1,52 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controllers\Admin\Device;
|
||||
|
||||
use CodeIgniter\HTTP\RequestInterface;
|
||||
use CodeIgniter\HTTP\ResponseInterface;
|
||||
use CodeIgniter\Validation\Validation;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
use App\Helpers\Device\RackHelper;
|
||||
use App\Services\Device\RackService;
|
||||
|
||||
class RackController extends DeviceController
|
||||
{
|
||||
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
|
||||
{
|
||||
parent::initController($request, $response, $logger);
|
||||
$this->uri_path .= strtolower($this->getService()->getClassName()) . '/';
|
||||
$this->class_path = $this->getService()->getClassPath();
|
||||
$this->title = lang("{$this->getService()->getClassPath()}.title");
|
||||
$this->helper = $this->getHelper();
|
||||
}
|
||||
public function getService(): RackService
|
||||
{
|
||||
if (!$this->_service) {
|
||||
$this->_service = new RackService($this->request);
|
||||
}
|
||||
return $this->_service;
|
||||
}
|
||||
public function getHelper(): mixed
|
||||
{
|
||||
if (!$this->_helper) {
|
||||
$this->_helper = new RackHelper($this->request);
|
||||
}
|
||||
return $this->_helper;
|
||||
}
|
||||
//Index,FieldForm관련
|
||||
protected function setValidation(Validation $validation, string $action, string $field, ?string $rule = null): Validation
|
||||
{
|
||||
switch ($field) {
|
||||
case 'role':
|
||||
//아래 Rule Array는 필드명.* checkbox를 사용
|
||||
$validation->setRule("{$field}.*", $field, $rule);
|
||||
break;
|
||||
default:
|
||||
$validation = parent::setValidation($validation, $action, $field, $rule);
|
||||
break;
|
||||
}
|
||||
return $validation;
|
||||
}
|
||||
//Index,FieldForm관련.
|
||||
}
|
||||
@ -6,6 +6,7 @@ use CodeIgniter\HTTP\RequestInterface;
|
||||
use CodeIgniter\HTTP\ResponseInterface;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use App\Services\UserService as Service;
|
||||
use App\Helpers\UserHelper as Helper;
|
||||
|
||||
class Home extends AdminController
|
||||
{
|
||||
@ -14,6 +15,7 @@ class Home extends AdminController
|
||||
{
|
||||
parent::initController($request, $response, $logger);
|
||||
$this->title = "관리자페이지 메인";
|
||||
$this->helper = $this->getHelper();
|
||||
}
|
||||
|
||||
final public function getService(): Service
|
||||
@ -23,6 +25,13 @@ class Home extends AdminController
|
||||
}
|
||||
return $this->_service;
|
||||
}
|
||||
public function getHelper(): mixed
|
||||
{
|
||||
if (!$this->_helper) {
|
||||
$this->_helper = new Helper($this->request);
|
||||
}
|
||||
return $this->_helper;
|
||||
}
|
||||
|
||||
//Index,FieldForm관련
|
||||
public function getFields(): array
|
||||
|
||||
@ -47,7 +47,10 @@ abstract class AuthController extends CommonController
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
final public function getFields(): array
|
||||
{
|
||||
return ['id', 'passwd'];
|
||||
}
|
||||
//로그인화면
|
||||
final public function login_form(): RedirectResponse|string
|
||||
{
|
||||
|
||||
@ -191,8 +191,6 @@ abstract class CommonController extends BaseController
|
||||
}
|
||||
protected function create_process(): mixed
|
||||
{
|
||||
//데이터 검증
|
||||
$this->formDatas = $this->doValidate($this->action, $this->fields);
|
||||
return $this->getService()->create($this->formDatas);
|
||||
}
|
||||
final public function create(): RedirectResponse|string
|
||||
@ -201,6 +199,8 @@ abstract class CommonController extends BaseController
|
||||
try {
|
||||
$this->init(__FUNCTION__);
|
||||
helper(['form']);
|
||||
//데이터 검증
|
||||
$this->formDatas = $this->doValidate($this->action, $this->fields);
|
||||
$this->entity = $this->create_process();
|
||||
$this->getService()->getModel()->transCommit();
|
||||
$this->getMyLogService()->save($this->getService(), __FUNCTION__, $this->getMyAuth(), MESSAGES["SUCCESS"]);
|
||||
@ -230,8 +230,6 @@ abstract class CommonController extends BaseController
|
||||
}
|
||||
protected function modify_process(mixed $uid): mixed
|
||||
{
|
||||
//데이터 검증
|
||||
$this->formDatas = $this->doValidate($this->action, $this->fields);
|
||||
//자신정보정의
|
||||
$entity = $this->getService()->getEntity($uid);
|
||||
return $this->getService()->modify($entity, $this->formDatas);
|
||||
@ -243,6 +241,8 @@ abstract class CommonController extends BaseController
|
||||
try {
|
||||
$this->init(__FUNCTION__);
|
||||
helper(['form']);
|
||||
//데이터 검증
|
||||
$this->formDatas = $this->doValidate($this->action, $this->fields);
|
||||
$this->entity = $this->modify_process($uid);
|
||||
$this->getService()->getModel()->transCommit();
|
||||
$this->getMyLogService()->save($this->getService(), __FUNCTION__, $this->getMyAuth(), MESSAGES["SUCCESS"]);
|
||||
@ -256,8 +256,6 @@ abstract class CommonController extends BaseController
|
||||
//단일필드작업
|
||||
protected function toggle_process(mixed $uid): mixed
|
||||
{
|
||||
//데이터 검증
|
||||
$this->formDatas = $this->doValidate($this->action, $this->fields);
|
||||
//자신정보정의
|
||||
$entity = $this->getService()->getEntity($uid);
|
||||
return $this->getService()->modify($entity, $this->formDatas);
|
||||
@ -269,6 +267,8 @@ abstract class CommonController extends BaseController
|
||||
try {
|
||||
$this->action = __FUNCTION__;
|
||||
$this->fields = [$field];
|
||||
//데이터 검증
|
||||
$this->formDatas = $this->doValidate($this->action, $this->fields);
|
||||
$this->entity = $this->toggle_process($uid);
|
||||
$this->getService()->getModel()->transCommit();
|
||||
$this->getMyLogService()->save($this->getService(), __FUNCTION__, $this->getMyAuth(), MESSAGES["SUCCESS"]);
|
||||
@ -282,8 +282,6 @@ abstract class CommonController extends BaseController
|
||||
//일괄처리작업
|
||||
protected function batchjob_process(array $entities): array
|
||||
{
|
||||
//데이터 검증
|
||||
$this->formDatas = $this->doValidate($this->action, $this->fields);
|
||||
$temps = [];
|
||||
foreach ($entities as $entity) {
|
||||
$temps[] = $this->getService()->modify($entity, $this->formDatas);
|
||||
@ -317,6 +315,8 @@ abstract class CommonController extends BaseController
|
||||
$entity = $this->getService()->getEntity($uid);
|
||||
$entities[] = $entity;
|
||||
}
|
||||
//데이터 검증
|
||||
$this->formDatas = $this->doValidate($this->action, $this->fields);
|
||||
$this->entities = $this->batchjob_process($entities);
|
||||
$this->getService()->getModel()->transCommit();
|
||||
$this->getMyLogService()->save($this->getService(), __FUNCTION__, $this->getMyAuth(), MESSAGES["SUCCESS"]);
|
||||
@ -429,23 +429,40 @@ abstract class CommonController extends BaseController
|
||||
//조건절 처리
|
||||
foreach ($filter_fields as $field) {
|
||||
$this->$field = $this->request->getVar($field);
|
||||
if (!is_null($this->$field)) {
|
||||
$this->getService()->getModel()->where($this->getService()->getModel()->getTable() . '.' . $field, $this->$field);
|
||||
if ($this->$field !== null && $this->$field !== '') {
|
||||
if ($field === 'role') {
|
||||
$where = "FIND_IN_SET(" . $this->getService()->getModel()->escape($this->$field) . ", {$this->getService()->getModel()->getTable()}.{$field}) > 0";
|
||||
//FIND_IN_SET()은 MySQL 함수이므로 CodeIgniter가 이를 일반 컬럼명으로 착각하고 escape하게 되면 오류가 발생합니다. 따라서 ->where($sql, null, false)로 명시하여 escape를 꺼줘야 정상 작동
|
||||
$this->getService()->getModel()->where($where, null, false);
|
||||
} else {
|
||||
$this->getService()->getModel()->where("{$this->getService()->getModel()->getTable()}.{$field}", $this->$field);
|
||||
}
|
||||
}
|
||||
}
|
||||
//검색어 처리
|
||||
$this->word = $this->request->getVar('word');
|
||||
if (!is_null($this->word)) {
|
||||
if ($this->word !== null && $this->word !== '') {
|
||||
$this->getService()->getModel()->setList_WordFilter($this->word);
|
||||
}
|
||||
//검색일 처리
|
||||
$this->start = $this->request->getVar('start');
|
||||
$this->end = $this->request->getVar('end');
|
||||
if ($this->start) {
|
||||
$this->getService()->getModel()->where($this->getService()->getModel()->getTable() . ".created_at >= '{$this->start} 00:00:00'");
|
||||
if ($this->start !== null && $this->start !== '') {
|
||||
$this->getService()->getModel()->where(sprintf("%s.created_at >= '%s 00:00:00'", $this->getService()->getModel()->getTable(), $this->start));
|
||||
}
|
||||
if ($this->end) {
|
||||
$this->getService()->getModel()->where($this->getService()->getModel()->getTable() . ".created_at <= '{$this->start} 23:59:59'");
|
||||
$this->end = $this->request->getVar('end');
|
||||
if ($this->end !== null && $this->end !== '') {
|
||||
$this->getService()->getModel()->where(sprintf("%s.created_at <= '%s 23:59:59'", $this->getService()->getModel()->getTable(), $this->end));
|
||||
}
|
||||
}
|
||||
final protected function setOrcerByForList()
|
||||
{
|
||||
//OrderBy 처리
|
||||
$this->order_field = $this->request->getVar('order_field');
|
||||
$this->order_value = $this->request->getVar('order_value');
|
||||
if ($this->order_field !== null && $this->order_field !== '') {
|
||||
$this->getService()->getModel()->orderBy(sprintf("%s.%s %s", $this->getService()->getModel()->getTable(), $this->order_field, $this->order_value ?: "DESC"));
|
||||
} else {
|
||||
$this->getService()->getModel()->orderBy(sprintf("%s.%s %s", $this->getService()->getModel()->getTable(), $this->getService()->getModel()->getPKField(), "DESC"));
|
||||
}
|
||||
}
|
||||
//PageNation 처리
|
||||
@ -483,14 +500,9 @@ abstract class CommonController extends BaseController
|
||||
$this->total_count = intval($this->getService()->getModel()->selectCount('*', 'cnt')->get()->getRow()->cnt);
|
||||
//Pagination 처리
|
||||
$this->pagination = $this->getPaginationForList();
|
||||
//OrderBy 처리
|
||||
$this->order_field = $this->request->getVar('order_field');
|
||||
$this->order_value = $this->request->getVar('order_value');
|
||||
if ($this->order_field && $this->order_value) {
|
||||
$this->getService()->getModel()->orderBy(sprintf("%s.%s %s", $this->getService()->getModel()->getTable(), $this->order_field, $this->order_value));
|
||||
} else {
|
||||
$this->getService()->getModel()->orderBy(sprintf("%s.%s %s", $this->getService()->getModel()->getTable(), $this->getService()->getModel()->getPKField(), "DESC"));
|
||||
}
|
||||
//조건절 , OrcerBy , Limit 처리
|
||||
$this->setConditionForList($this->filter_fields);
|
||||
$this->setOrcerByForList();
|
||||
$this->getService()->getModel()->limit($this->per_page);
|
||||
$this->getService()->getModel()->offset(($this->page - 1) * $this->per_page);
|
||||
return $this->getService()->getEntities();
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -9,8 +9,12 @@ class LineEntity extends DeviceEntity
|
||||
const PK = LineModel::PK;
|
||||
const TITLE = LineModel::TITLE;
|
||||
|
||||
public function getAmount()
|
||||
public function getBandwith()
|
||||
{
|
||||
return $this->attributes['amount'];
|
||||
return $this->attributes['bandwith'];
|
||||
}
|
||||
public function getPrice()
|
||||
{
|
||||
return $this->attributes['price'];
|
||||
}
|
||||
}
|
||||
|
||||
@ -36,6 +36,7 @@ class CommonHelper
|
||||
return $this->_viewDatas[$key];
|
||||
}
|
||||
|
||||
//IP관련련
|
||||
final public function isDomainName(string $domain): bool
|
||||
{
|
||||
$pattern_validation = '/((http|https)\:\/\/)?[a-zA-Z0-9\.\/\?\:@\-_=#]+\.([a-zA-Z0-9\&\.\/\?\:@\-_=#])*/';
|
||||
@ -60,6 +61,24 @@ class CommonHelper
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
final function isValidCIDR(string $cidr, $type = "ipv4"): bool
|
||||
{
|
||||
// 형식: "IP/Prefix" 형태인지 검사
|
||||
if (!preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}\/\d{1,2}$/', $cidr)) {
|
||||
return false;
|
||||
}
|
||||
list($ip, $prefix) = explode('/', $cidr);
|
||||
// IP 유효성 검사
|
||||
if (!$this->isIPAddress($ip, $type)) {
|
||||
return false;
|
||||
}
|
||||
// Prefix는 0~32 사이인지 검사 (IPv4 기준)
|
||||
$prefix = (int) $prefix;
|
||||
if ($prefix < 0 || $prefix > 32) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
final public function isHostName(string $host): bool
|
||||
{
|
||||
$pattern_validation = '/[a-zA-Z0-9\.\/\?\:@\*\-_=#]/';
|
||||
@ -155,16 +174,28 @@ class CommonHelper
|
||||
}
|
||||
|
||||
// (EX:192.168.1.0 -> 192.168.001.000)
|
||||
final public function convertIPV4toCIDR($cidr)
|
||||
final public function cidrToIpRange(string $cidr): array
|
||||
{
|
||||
$temps = explode(".", $cidr);
|
||||
return sprintf("%03d.%03d.%03d.%03d", $temps[0], $temps[1], $temps[2], $temps[3]);
|
||||
}
|
||||
// (EX:192.168.001.0000 -> 192.168.1.0)
|
||||
final public function convertCIDRtoIPV4($ipv4)
|
||||
{
|
||||
$temps = explode(".", $ipv4);
|
||||
return sprintf("%d.%d.%d.%d", $temps[0], $temps[1], $temps[2], $temps[3]);
|
||||
if (!$this->isValidCIDR($cidr)) {
|
||||
return []; // 유효하지 않으면 빈 배열 반환
|
||||
}
|
||||
|
||||
list($ip, $prefix) = explode('/', $cidr);
|
||||
$prefix = (int) $prefix;
|
||||
|
||||
$ipLong = ip2long($ip);
|
||||
$netmask = ~((1 << (32 - $prefix)) - 1);
|
||||
$network = $ipLong & $netmask;
|
||||
$broadcast = $network | ~$netmask;
|
||||
|
||||
$ips = [];
|
||||
|
||||
// 첫 IP부터 마지막 IP까지 반복
|
||||
for ($i = $network; $i <= $broadcast; $i++) {
|
||||
$ips[] = long2ip($i);
|
||||
}
|
||||
|
||||
return $ips;
|
||||
}
|
||||
|
||||
public function getFieldLabel(string $field, array $viewDatas, array $extras = []): string
|
||||
@ -186,16 +217,15 @@ class CommonHelper
|
||||
}
|
||||
switch ($field) {
|
||||
case 'email':
|
||||
$form = form_input($field, $value, ["placeholder" => "예)test@example.com", ...$extras]);
|
||||
$form = form_input($field, $value ?? "", ["placeholder" => "예)test@example.com", ...$extras]);
|
||||
break;
|
||||
case 'mobile':
|
||||
case 'phone':
|
||||
$form = form_input($field, $value, ["placeholder" => "예)010-0010-0010", ...$extras]);
|
||||
$form = form_input($field, $value ?? "", ["placeholder" => "예)010-0010-0010", ...$extras]);
|
||||
break;
|
||||
case 'role':
|
||||
if (!is_array($viewDatas['field_options'][$field])) {
|
||||
echo var_dump($viewDatas['field_options']);
|
||||
exit;
|
||||
throw new \Exception(__METHOD__ . "에서 {$field}의 field_options가 array형태가 아닙니다.");
|
||||
}
|
||||
if (in_array($viewDatas['action'], ['create_form', 'modify_form'])) {
|
||||
$forms = [];
|
||||
@ -215,13 +245,12 @@ class CommonHelper
|
||||
case 'updated_at':
|
||||
case 'created_at':
|
||||
$extra_class = isset($extras['class']) ? $extras['class'] . ' calender' : 'calender';
|
||||
$form = form_input($field, $value, ['class' => $extra_class, ...array_diff_key($extras, ['class' => ''])]);
|
||||
$form = form_input($field, $value ?? "", ['class' => $extra_class, ...array_diff_key($extras, ['class' => ''])]);
|
||||
break;
|
||||
default:
|
||||
if (in_array($field, $viewDatas['filter_fields'])) {
|
||||
if (!is_array($viewDatas['field_options'][$field])) {
|
||||
echo var_dump($viewDatas['field_options']);
|
||||
exit;
|
||||
throw new \Exception(__METHOD__ . "에서 {$field}의 field_options가 array형태가 아닙니다.");
|
||||
}
|
||||
$formOptions = ["" => lang($viewDatas['class_path'] . '.label.' . $field) . ' 선택'];
|
||||
foreach ($viewDatas['field_options'][$field] as $key => $label) {
|
||||
@ -229,7 +258,7 @@ class CommonHelper
|
||||
}
|
||||
$form = form_dropdown($field, $formOptions, $value, $extras);
|
||||
} else {
|
||||
$form = form_input($field, $value, ["autocomplete" => $field, ...$extras]);
|
||||
$form = form_input($field, $value ?? "", ["autocomplete" => $field, ...$extras]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -238,7 +267,7 @@ class CommonHelper
|
||||
|
||||
public function getFieldView(string $field, array $viewDatas, array $extras = []): string
|
||||
{
|
||||
$value = $viewDatas['entity']->$field;
|
||||
$value = $viewDatas['entity']->$field ?? "";
|
||||
switch ($field) {
|
||||
case $this->getTitleField():
|
||||
$value = form_label(
|
||||
@ -272,7 +301,7 @@ class CommonHelper
|
||||
case 'role':
|
||||
$roles = [];
|
||||
foreach (explode(DEFAULTS["DELIMITER_ROLE"], $value) as $key) {
|
||||
$roles[] = $viewDatas['field_options'][$field][$key];
|
||||
$roles[] = $viewDatas['field_options'][$field][$key] ?? "";
|
||||
}
|
||||
$value = implode(" , ", $roles);
|
||||
break;
|
||||
@ -335,15 +364,14 @@ class CommonHelper
|
||||
);
|
||||
break;
|
||||
case 'modify':
|
||||
$pk = $viewDatas['entity']->getPK();
|
||||
$oldBatchJobUids = old("batchjob_uids", null);
|
||||
$oldBatchJobUids = is_array($oldBatchJobUids) ? $oldBatchJobUids : [$oldBatchJobUids];
|
||||
$checkbox = form_checkbox([
|
||||
"id" => "checkbox_uid_{$pk}",
|
||||
"id" => "checkbox_uid_{$viewDatas['entity']->getPK()}",
|
||||
"name" => "batchjob_uids[]",
|
||||
"value" => $pk,
|
||||
"value" => $viewDatas['entity']->getPK(),
|
||||
"class" => "batchjobuids_checkboxs",
|
||||
"checked" => in_array($pk, $oldBatchJobUids)
|
||||
"checked" => in_array($viewDatas['entity']->getPK(), $oldBatchJobUids)
|
||||
]);
|
||||
$action = $checkbox . form_label(
|
||||
$viewDatas['cnt'],
|
||||
|
||||
@ -19,8 +19,7 @@ class DeviceHelper extends CommonHelper
|
||||
switch ($field) {
|
||||
case "serverinfo_uid":
|
||||
if (!is_array($viewDatas['field_options'][$field])) {
|
||||
echo var_dump($viewDatas['field_options']);
|
||||
exit;
|
||||
throw new \Exception(__METHOD__ . "에서 {$field}의 field_options가 array형태가 아닙니다.");
|
||||
}
|
||||
$formOptions = array_merge(
|
||||
["" => lang($viewDatas['class_path'] . '.label.' . $field) . ' 선택'],
|
||||
@ -34,7 +33,7 @@ class DeviceHelper extends CommonHelper
|
||||
}
|
||||
return $form;
|
||||
} //
|
||||
public function getListRowColor(mixed $entity, string $field = 'status', string $value = 'in'): string
|
||||
public function getListRowColor(mixed $entity, string $field = 'status', string $value = 'use'): string
|
||||
{
|
||||
return $entity->isMatched($field, $value) ? "" : 'class="table-danger"';
|
||||
}
|
||||
|
||||
@ -1,16 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Helpers\Device;
|
||||
|
||||
use App\Models\Device\RackModel;
|
||||
use CodeIgniter\HTTP\IncomingRequest;
|
||||
|
||||
class RackHelper extends DeviceHelper
|
||||
{
|
||||
protected ?IncomingRequest $request = null;
|
||||
public function __construct(?IncomingRequest $request = null)
|
||||
{
|
||||
parent::__construct($request);
|
||||
$this->setTitleField(field: RackModel::TITLE);
|
||||
}
|
||||
}
|
||||
21
app/Language/en/Device/Ip.php
Normal file
21
app/Language/en/Device/Ip.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
return [
|
||||
'title' => "IP정보",
|
||||
'label' => [
|
||||
'lineinfo_uid' => '회선정보',
|
||||
'ip' => "IP",
|
||||
'price' => "금액",
|
||||
'status' => "상태",
|
||||
'updated_at' => "수정일",
|
||||
'created_at' => "작성일",
|
||||
],
|
||||
'DEFAULTS' => [
|
||||
'status' => "use"
|
||||
],
|
||||
"STATUS" => [
|
||||
"use" => "사용가능",
|
||||
"pause" => "일시중지",
|
||||
"occupied" => "사용중",
|
||||
"forbidden" => "사용금지됨",
|
||||
],
|
||||
];
|
||||
27
app/Language/en/Device/Line.php
Normal file
27
app/Language/en/Device/Line.php
Normal file
@ -0,0 +1,27 @@
|
||||
<?php
|
||||
return [
|
||||
'title' => "회선정보",
|
||||
'label' => [
|
||||
'title' => "제목",
|
||||
'type' => "종류",
|
||||
'price' => "금액",
|
||||
'bandwith' => "CIDR대역",
|
||||
'status' => "상태",
|
||||
'updated_at' => "수정일",
|
||||
'created_at' => "작성일",
|
||||
],
|
||||
'DEFAULTS' => [
|
||||
'type' => 'general',
|
||||
'status' => "use"
|
||||
],
|
||||
"TYPE" => [
|
||||
"general" => "일반",
|
||||
"dedicated" => "전용",
|
||||
"defence" => "빙아",
|
||||
],
|
||||
"STATUS" => [
|
||||
"use" => "사용",
|
||||
"pause" => "사용정지",
|
||||
"termination" => "해지",
|
||||
],
|
||||
];
|
||||
@ -174,14 +174,13 @@ abstract class CommonModel extends Model
|
||||
return $entity;
|
||||
}
|
||||
|
||||
public function create(array $formDatas, mixed $entity): mixed
|
||||
final function create(array $formDatas, mixed $entity): mixed
|
||||
{
|
||||
// Field에 맞는 Validation Rule 재정의
|
||||
$this->setValidationRules($this->getFieldRules('create', $this->allowedFields));
|
||||
// 저장하기 전에 데이터 값 변경이 필요한 Field
|
||||
$this->setValidationRules($this->getFieldRules(__FUNCTION__, $this->allowedFields));
|
||||
foreach (array_keys($formDatas) as $field) {
|
||||
LogCollector::debug("{$field}:{$formDatas[$field]}");
|
||||
$entity->$field = $this->convertEntityData($field, $formDatas);
|
||||
$value = $this->convertEntityData($field, $formDatas);
|
||||
$entity->$field = $value;
|
||||
}
|
||||
// primaryKey가 자동입력이 아니면
|
||||
if (!$this->useAutoIncrement) {
|
||||
@ -194,19 +193,22 @@ abstract class CommonModel extends Model
|
||||
$pkField = $this->getPKField();
|
||||
$entity->$pkField = $this->getInsertID();
|
||||
}
|
||||
// log_message("debug", $this->getTable() . " => " . __FUNCTION__ . " DB 작업 완료");
|
||||
LogCollector::debug("[{$entity->getTitle()}] 입력내용");
|
||||
LogCollector::debug(var_export($entity->toArray(), true));
|
||||
return $entity;
|
||||
}
|
||||
public function modify(mixed $entity, array $formDatas): mixed
|
||||
final function modify(mixed $entity, array $formDatas): mixed
|
||||
{
|
||||
// Field에 맞는 Validation Rule 재정의
|
||||
$this->setValidationRules($this->getFieldRules('modify', $this->allowedFields));
|
||||
$this->setValidationRules($this->getFieldRules(__FUNCTION__, $this->allowedFields));
|
||||
// 저장하기 전에 데이터 값 변경이 필요한 Field
|
||||
LogCollector::debug("[{$entity->getPK()}/{$entity->getTitle()}] 변경내용");
|
||||
LogCollector::debug("[{$entity->getPK()}/{$entity->getTitle()}] 변경 전 내용");
|
||||
LogCollector::debug(var_export($entity->toArray(), true));
|
||||
foreach (array_keys($formDatas) as $field) {
|
||||
LogCollector::debug("{$field}/{$entity->$field}=>{$formDatas[$field]}");
|
||||
$entity->$field = $this->convertEntityData($field, $formDatas);
|
||||
}
|
||||
LogCollector::debug("[{$entity->getPK()}/{$entity->getTitle()}] 변경 후 내용");
|
||||
LogCollector::debug(var_export($entity->toArray(), true));
|
||||
return $this->save_process($entity);
|
||||
}
|
||||
|
||||
|
||||
@ -8,15 +8,15 @@ class IpModel extends DeviceModel
|
||||
{
|
||||
const TABLE = "ipinfo";
|
||||
const PK = "uid";
|
||||
const TITLE = "title";
|
||||
const TITLE = "ip";
|
||||
protected $table = self::TABLE;
|
||||
protected $primaryKey = self::PK;
|
||||
protected $returnType = IpEntity::class;
|
||||
protected $allowedFields = [
|
||||
"clientinfo_uid",
|
||||
"lineinfo_uid",
|
||||
"ip",
|
||||
"price",
|
||||
"status",
|
||||
"title",
|
||||
"amount",
|
||||
];
|
||||
public function __construct()
|
||||
{
|
||||
@ -24,7 +24,7 @@ class IpModel extends DeviceModel
|
||||
}
|
||||
public function getFilterFields(): array
|
||||
{
|
||||
return ["clientinfo_uid", 'status'];
|
||||
return ["lineinfo_uid", 'status'];
|
||||
}
|
||||
public function getBatchJobFields(): array
|
||||
{
|
||||
@ -36,15 +36,15 @@ class IpModel extends DeviceModel
|
||||
throw new \Exception(__FUNCTION__ . "=> field가 array 입니다.\n" . var_export($field, true));
|
||||
}
|
||||
switch ($field) {
|
||||
case "clientinfo_uid":
|
||||
case "amount":
|
||||
case "lineinfo_uid":
|
||||
case "price":
|
||||
$rule = "required|numeric";
|
||||
break;
|
||||
case "title":
|
||||
$rule = "required|trim|string";
|
||||
case "ip":
|
||||
$rule = "required|trim|valid_ip[both]"; //ipv4 , ipv6 , both(ipv4,ipv6)
|
||||
break;
|
||||
case "status":
|
||||
$rule = "required|in_list[in,out]";
|
||||
$rule = "required|in_list[use,pause,occupied,forbidden]";
|
||||
break;
|
||||
default:
|
||||
$rule = parent::getFieldRule($action, $field);
|
||||
|
||||
@ -13,10 +13,11 @@ class LineModel extends DeviceModel
|
||||
protected $primaryKey = self::PK;
|
||||
protected $returnType = LineEntity::class;
|
||||
protected $allowedFields = [
|
||||
"clientinfo_uid",
|
||||
"status",
|
||||
"type",
|
||||
"title",
|
||||
"amount",
|
||||
"bandwith",
|
||||
"price",
|
||||
"status",
|
||||
];
|
||||
public function __construct()
|
||||
{
|
||||
@ -24,7 +25,7 @@ class LineModel extends DeviceModel
|
||||
}
|
||||
public function getFilterFields(): array
|
||||
{
|
||||
return ["clientinfo_uid", 'status'];
|
||||
return ["type", 'status'];
|
||||
}
|
||||
public function getBatchJobFields(): array
|
||||
{
|
||||
@ -36,15 +37,18 @@ class LineModel extends DeviceModel
|
||||
throw new \Exception(__FUNCTION__ . "=> field가 array 입니다.\n" . var_export($field, true));
|
||||
}
|
||||
switch ($field) {
|
||||
case "clientinfo_uid":
|
||||
case "amount":
|
||||
case "price":
|
||||
$rule = "required|numeric";
|
||||
break;
|
||||
case "title":
|
||||
case "bandwith":
|
||||
$rule = "required|trim|string";
|
||||
break;
|
||||
case "type":
|
||||
$rule = "required|in_list[general,dedicated,defence]";
|
||||
break;
|
||||
case "status":
|
||||
$rule = "required|in_list[in,out]";
|
||||
$rule = "required|in_list[use,pause,termination]";
|
||||
break;
|
||||
default:
|
||||
$rule = parent::getFieldRule($action, $field);
|
||||
|
||||
@ -1,55 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Device;
|
||||
|
||||
use App\Entities\Device\RackEntity;
|
||||
|
||||
class RackModel extends DeviceModel
|
||||
{
|
||||
const TABLE = "rackinfo";
|
||||
const PK = "uid";
|
||||
const TITLE = "title";
|
||||
protected $table = self::TABLE;
|
||||
protected $primaryKey = self::PK;
|
||||
protected $returnType = RackEntity::class;
|
||||
protected $allowedFields = [
|
||||
"clientinfo_uid",
|
||||
"status",
|
||||
"title",
|
||||
"amount",
|
||||
];
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
public function getFilterFields(): array
|
||||
{
|
||||
return ["clientinfo_uid", 'status'];
|
||||
}
|
||||
public function getBatchJobFields(): array
|
||||
{
|
||||
return ['status'];
|
||||
}
|
||||
public function getFieldRule(string $action, string $field): string
|
||||
{
|
||||
if (is_array($field)) {
|
||||
throw new \Exception(__FUNCTION__ . "=> field가 array 입니다.\n" . var_export($field, true));
|
||||
}
|
||||
switch ($field) {
|
||||
case "clientinfo_uid":
|
||||
case "amount":
|
||||
$rule = "required|numeric";
|
||||
break;
|
||||
case "title":
|
||||
$rule = "required|trim|string";
|
||||
break;
|
||||
case "status":
|
||||
$rule = "required|in_list[in,out]";
|
||||
break;
|
||||
default:
|
||||
$rule = parent::getFieldRule($action, $field);
|
||||
break;
|
||||
}
|
||||
return $rule;
|
||||
}
|
||||
}
|
||||
@ -21,11 +21,6 @@ abstract class AuthService extends CommonService
|
||||
return "Auth" . DIRECTORY_SEPARATOR;
|
||||
}
|
||||
//Index,FieldForm관련
|
||||
final public function getFields(): array
|
||||
{
|
||||
return ['id', 'passwd'];
|
||||
}
|
||||
//Index,FieldForm관련
|
||||
|
||||
final public function getSession(): Session
|
||||
{
|
||||
|
||||
@ -74,6 +74,7 @@ abstract class CommonService
|
||||
}
|
||||
if (env('app.debug.index')) {
|
||||
echo $this->getModel()->getLastQuery();
|
||||
// exit;
|
||||
}
|
||||
return $entitys;
|
||||
} //
|
||||
@ -105,7 +106,7 @@ abstract class CommonService
|
||||
|
||||
public function create(array $formDatas, mixed $entity = null): mixed
|
||||
{
|
||||
$entity = $this->getModel()->create($formDatas, $entity);
|
||||
$entity = $this->getModel()->create($formDatas, $entity ?? $this->getEntityClass());
|
||||
LogCollector::info("[{$entity->getTitle()}]" . MESSAGES["CREATED"] . ":");
|
||||
return $entity;
|
||||
}
|
||||
|
||||
@ -1,28 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Device;
|
||||
|
||||
use App\Entities\Device\RackEntity;
|
||||
use App\Models\Device\RackModel;
|
||||
use CodeIgniter\HTTP\IncomingRequest;
|
||||
|
||||
class RackService extends DeviceService
|
||||
{
|
||||
protected ?IncomingRequest $request = null;
|
||||
public function __construct(?IncomingRequest $request = null)
|
||||
{
|
||||
parent::__construct($request);
|
||||
}
|
||||
public function getClassName(): string
|
||||
{
|
||||
return parent::getClassName() . DIRECTORY_SEPARATOR . "Rack";
|
||||
}
|
||||
public function getModelClass(): RackModel
|
||||
{
|
||||
return new RackModel();
|
||||
}
|
||||
public function getEntityClass(): RackEntity
|
||||
{
|
||||
return new RackEntity();
|
||||
}
|
||||
}
|
||||
@ -1,9 +1,6 @@
|
||||
<div class="accordion-item">
|
||||
<a href="/admin/user"><?= ICONS['MEMBER'] ?> 계정 관리</a>
|
||||
</div>
|
||||
<div class="accordion-item">
|
||||
<a href="/admin/usersns"><?= ICONS['GOOGLE'] ?> SNS 계정 관리</a>
|
||||
</div>
|
||||
<div class="accordion-item">
|
||||
<a href="/admin/mylog"><?= ICONS['FLAG'] ?> Log 관리</a>
|
||||
</div>
|
||||
@ -5,9 +5,6 @@
|
||||
</button>
|
||||
</h2>
|
||||
<div id="flush-device" class="accordion-collapse collapse" aria-labelledby="flush-device">
|
||||
<div class="accordion-item">
|
||||
<a href="/admin/device/rack"><?= ICONS['BOXS'] ?>상면정보</a>
|
||||
</div>
|
||||
<div class="accordion-item">
|
||||
<a href="/admin/device/line"><?= ICONS['BOX'] ?>회선정보</a>
|
||||
</div>
|
||||
|
||||
@ -4,12 +4,12 @@
|
||||
<nav class="condition nav">
|
||||
조건:
|
||||
<?php foreach ($viewDatas['filter_fields'] as $field): ?>
|
||||
<?= $viewDatas['helper']->getFieldForm($field, $viewDatas[$field] ?: old($field), $viewDatas) ?>
|
||||
<?= $viewDatas['helper']->getFieldForm($field, $viewDatas[$field] ?? old($field), $viewDatas) ?>
|
||||
<?php endforeach ?>
|
||||
</nav>
|
||||
<nav class="search nav justify-content-center">
|
||||
검색어:<?= form_input('word', $viewDatas['word']) ?>
|
||||
검색일:<?= form_input('start', $viewDatas['start'], ["class" => "calender"]) ?><?= form_input('end', $viewDatas['end'], ["class" => "calender"]) ?>
|
||||
검색어:<?= form_input('word', $viewDatas['word'] ?? "") ?>
|
||||
검색일:<?= form_input('start', $viewDatas['start'] ?? "", ["class" => "calender"]) ?><?= form_input('end', $viewDatas['end'] ?? "", ["class" => "calender"]) ?>
|
||||
<button class="btn btn-outline-primary" type="submit">검색</button>
|
||||
<?= anchor(current_url() . '/download/excel', ICONS['EXCEL'], ["target" => "_self", "class" => "excel"]) ?>
|
||||
</nav>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user