From b07ea18f34bba9e176403edf31c1b74cbf263eac Mon Sep 17 00:00:00 2001 From: "choi.jh" Date: Fri, 11 Jul 2025 13:23:26 +0900 Subject: [PATCH] dbms_init...1 --- .../Admin/Customer/ClientController.php | 15 ---- .../Customer/ServicePaymentController.php | 6 -- .../Admin/Equipment/CodeController.php | 6 -- .../Admin/Equipment/Part/CpuController.php | 6 -- .../Equipment/Part/DefenceController.php | 7 -- .../Admin/Equipment/Part/DomainController.php | 6 -- .../Admin/Equipment/Part/IpController.php | 6 -- .../Admin/Equipment/Part/RamController.php | 6 -- .../Equipment/Part/SoftwareController.php | 6 -- .../Admin/Equipment/ServerController.php | 7 -- .../Admin/Equipment/SwitchController.php | 8 +- app/Controllers/Admin/UserController.php | 15 ---- app/Controllers/CommonController.php | 88 ++++++++----------- app/Models/CommonModel.php | 22 +++++ app/Models/Customer/ClientModel.php | 18 ++-- app/Models/Customer/ServicePaymentModel.php | 7 ++ app/Models/Equipment/CodeModel.php | 7 ++ app/Models/Equipment/Part/CpuModel.php | 7 ++ app/Models/Equipment/Part/DefenceModel.php | 7 ++ app/Models/Equipment/Part/DomainModel.php | 7 ++ app/Models/Equipment/Part/IpModel.php | 7 ++ app/Models/Equipment/Part/RamModel.php | 7 ++ app/Models/Equipment/Part/SoftwareModel.php | 7 ++ app/Models/Equipment/ServerModel.php | 7 ++ app/Models/Equipment/SwitchModel.php | 7 ++ app/Models/UserModel.php | 15 ++++ app/Views/admin/create_form.php | 2 +- app/Views/admin/domain/create_form.php | 2 +- .../templates/admin/index_content_top.php | 2 +- 29 files changed, 162 insertions(+), 151 deletions(-) diff --git a/app/Controllers/Admin/Customer/ClientController.php b/app/Controllers/Admin/Customer/ClientController.php index 63d8812..6b18446 100644 --- a/app/Controllers/Admin/Customer/ClientController.php +++ b/app/Controllers/Admin/Customer/ClientController.php @@ -65,19 +65,4 @@ class ClientController extends CustomerController return $validation; } //Index,FieldForm관련. - protected function setFilterConditionForList(): void - { - foreach ($this->getFilterFields() as $field) { - $this->$field = $this->request->getVar($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); - } - } - } - } } diff --git a/app/Controllers/Admin/Customer/ServicePaymentController.php b/app/Controllers/Admin/Customer/ServicePaymentController.php index d2cf14b..abb4553 100644 --- a/app/Controllers/Admin/Customer/ServicePaymentController.php +++ b/app/Controllers/Admin/Customer/ServicePaymentController.php @@ -101,12 +101,6 @@ class ServicePaymentController extends CustomerController parent::view_process($entity); } //List 관련 - protected function setOrderByForList(): void - { - //OrderBy 처리 - $this->getService()->getModel()->orderBy('billing_at', 'ASC', false); - parent::setOrderByForList(); - } protected function index_process(): void { //LINE,IP,SERVER등 추가 FilterOption 셋팅용 diff --git a/app/Controllers/Admin/Equipment/CodeController.php b/app/Controllers/Admin/Equipment/CodeController.php index f08651a..e01df73 100644 --- a/app/Controllers/Admin/Equipment/CodeController.php +++ b/app/Controllers/Admin/Equipment/CodeController.php @@ -35,10 +35,4 @@ class CodeController extends EquipmentController return $this->_helper; } //Index,FieldForm관련 - protected function setOrderByForList(): void - { - //OrderBy 처리 - $this->getService()->getModel()->orderBy('code', 'ASC', false); - parent::setOrderByForList(); - } } diff --git a/app/Controllers/Admin/Equipment/Part/CpuController.php b/app/Controllers/Admin/Equipment/Part/CpuController.php index dc78335..3273b90 100644 --- a/app/Controllers/Admin/Equipment/Part/CpuController.php +++ b/app/Controllers/Admin/Equipment/Part/CpuController.php @@ -35,10 +35,4 @@ class CpuController extends PartController return $this->_helper; } //Index,FieldForm관련 - protected function setOrderByForList(): void - { - //OrderBy 처리 - $this->getService()->getModel()->orderBy('model', 'ASC', false); - parent::setOrderByForList(); - } } diff --git a/app/Controllers/Admin/Equipment/Part/DefenceController.php b/app/Controllers/Admin/Equipment/Part/DefenceController.php index a096a53..40c9cb0 100644 --- a/app/Controllers/Admin/Equipment/Part/DefenceController.php +++ b/app/Controllers/Admin/Equipment/Part/DefenceController.php @@ -35,11 +35,4 @@ class DefenceController extends PartController return $this->_helper; } //Index,FieldForm관련 - - protected function setOrderByForList(): void - { - //OrderBy 처리 - $this->getService()->getModel()->orderBy('INET_ATON(ip)', 'ASC', false); - parent::setOrderByForList(); - } } diff --git a/app/Controllers/Admin/Equipment/Part/DomainController.php b/app/Controllers/Admin/Equipment/Part/DomainController.php index 41ee104..a70f20d 100644 --- a/app/Controllers/Admin/Equipment/Part/DomainController.php +++ b/app/Controllers/Admin/Equipment/Part/DomainController.php @@ -90,10 +90,4 @@ class DomainController extends PartController ->setBody(json_encode(['exists' => false, 'message' => $e->getMessage()])); } } - protected function setOrderByForList(): void - { - //OrderBy 처리 - $this->getService()->getModel()->orderBy('domain', 'ASC', false); - parent::setOrderByForList(); - } } diff --git a/app/Controllers/Admin/Equipment/Part/IpController.php b/app/Controllers/Admin/Equipment/Part/IpController.php index 53752d2..3cf246d 100644 --- a/app/Controllers/Admin/Equipment/Part/IpController.php +++ b/app/Controllers/Admin/Equipment/Part/IpController.php @@ -45,10 +45,4 @@ class IpController extends PartController return $this->_lineService; } //Index,FieldForm관련 - protected function setOrderByForList(): void - { - //OrderBy 처리 - $this->getService()->getModel()->orderBy('INET_ATON(ip)', 'ASC', false); - parent::setOrderByForList(); - } } diff --git a/app/Controllers/Admin/Equipment/Part/RamController.php b/app/Controllers/Admin/Equipment/Part/RamController.php index 50c31f6..8260c12 100644 --- a/app/Controllers/Admin/Equipment/Part/RamController.php +++ b/app/Controllers/Admin/Equipment/Part/RamController.php @@ -35,10 +35,4 @@ class RamController extends PartController return $this->_helper; } //Index,FieldForm관련 - protected function setOrderByForList(): void - { - //OrderBy 처리 - $this->getService()->getModel()->orderBy('model', 'ASC', false); - parent::setOrderByForList(); - } } diff --git a/app/Controllers/Admin/Equipment/Part/SoftwareController.php b/app/Controllers/Admin/Equipment/Part/SoftwareController.php index 1b556bf..c0bb2c0 100644 --- a/app/Controllers/Admin/Equipment/Part/SoftwareController.php +++ b/app/Controllers/Admin/Equipment/Part/SoftwareController.php @@ -36,10 +36,4 @@ class SoftwareController extends PartController return $this->_helper; } //Index,FieldForm관련 - protected function setOrderByForList(): void - { - //OrderBy 처리 - $this->getService()->getModel()->orderBy('model', 'ASC', false); - parent::setOrderByForList(); - } } diff --git a/app/Controllers/Admin/Equipment/ServerController.php b/app/Controllers/Admin/Equipment/ServerController.php index 4112bcd..11cb99f 100644 --- a/app/Controllers/Admin/Equipment/ServerController.php +++ b/app/Controllers/Admin/Equipment/ServerController.php @@ -47,11 +47,4 @@ class ServerController extends EquipmentController //부모처리 parent::view_process($entity); } - //List부분 - protected function setOrderByForList(): void - { - //OrderBy 처리 - $this->getService()->getModel()->orderBy('model', 'ASC', false); - parent::setOrderByForList(); - } } diff --git a/app/Controllers/Admin/Equipment/SwitchController.php b/app/Controllers/Admin/Equipment/SwitchController.php index c519ad1..6633e5c 100644 --- a/app/Controllers/Admin/Equipment/SwitchController.php +++ b/app/Controllers/Admin/Equipment/SwitchController.php @@ -34,11 +34,5 @@ class SwitchController extends EquipmentController } return $this->_helper; } - //Index,FieldForm관련 - protected function setOrderByForList(): void - { - //OrderBy 처리 - $this->getService()->getModel()->orderBy('code', 'ASC', false); - parent::setOrderByForList(); - } + //Index,FieldForm관 } diff --git a/app/Controllers/Admin/UserController.php b/app/Controllers/Admin/UserController.php index a28b208..d423087 100644 --- a/app/Controllers/Admin/UserController.php +++ b/app/Controllers/Admin/UserController.php @@ -148,19 +148,4 @@ class UserController extends AdminController return $this->getResultFail($e->getMessage()); } } - protected function setFilterConditionForList(): void - { - foreach ($this->getFilterFields() as $field) { - $this->$field = $this->request->getVar($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); - } - } - } - } } diff --git a/app/Controllers/CommonController.php b/app/Controllers/CommonController.php index 772faa1..8eff49b 100644 --- a/app/Controllers/CommonController.php +++ b/app/Controllers/CommonController.php @@ -162,9 +162,19 @@ abstract class CommonController extends BaseController } final protected function setFilterValues(): void { - foreach ($this->getFilterFields() as $field) { - $this->_control[$field] = $this->request->getVar($field); + if (!array_key_exists('filter_values', $this->_control)) { + $this->_control['filter_values'] = []; } + foreach ($this->getFilterFields() as $field) { + $this->_control['filter_values'][$field] = $this->request->getVar($field); + } + } + final protected function getFilterValues(?string $field = null): mixed + { + if ($field === null) { + return $this->_control['filter_values'] ?? []; + } + return array_key_exists($field, $this->_control['filter_values']) ? $this->_control['filter_values'][$field] : null; } protected function initAction(string $action, $fields = []): void @@ -561,57 +571,31 @@ abstract class CommonController extends BaseController } //리스트 - //Filter 조건절 처리 - protected function setFilterConditionForList(): void + //조건절 처리 + final protected function setConditionForList(): void { - //filter_fields에 해당하는 값이 있을 경우 정의 $this->setFilterValues(); + //Filter 조건절 처리 foreach ($this->getFilterFields() as $field) { - if ($this->_control[$field] !== null && $this->_control[$field] !== '') { - $this->getService()->getModel()->where("{$this->getService()->getModel()->getTable()}.{$field}", $this->_control[$field]); + $filter_value = $this->getFilterValues($field); + if ($filter_value !== null && $filter_value !== '') { + $this->getService()->getModel()->setList_FormFilter($field, $filter_value); } } - } - //검색어 조건절 처리 - protected function setWordConditionForList(): void - { + //검색어조건절 처리 $this->word = $this->request->getVar('word'); if ($this->word !== null && $this->word !== '') { $this->getService()->getModel()->setList_WordFilter($this->word); } - } - //검색일 조건절 처리 - protected function setDateConditionForList(): void - { + //날자검색 $this->start = $this->request->getVar('start'); - if ($this->start !== null && $this->start !== '') { - $this->getService()->getModel()->where(sprintf("%s.created_at >= '%s 00:00:00'", $this->getService()->getModel()->getTable(), $this->start)); + $this->end = $this->request->getVar('end'); + if ($this->start !== null && $this->start !== '' && $this->end !== null && $this->end !== '') { + $this->getService()->getModel()->setList_DateFilter($this->start, $this->end); } - $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)); - } - } - //OrderBy 처리 - protected function setOrderByForList(): void - { - $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")); - } - } - //조건절 처리 - protected function setConditionForList(): void - { - $this->setFilterConditionForList(); - $this->setWordConditionForList(); - $this->setDateConditionForList(); } //PageNation 처리 - protected function getPageOptiosForList(): array + final protected function getPageOptiosForList(): array { $page_options = ["" => "줄수선택"]; for ($i = $this->per_page; $i <= $this->total_count; $i += $this->per_page) { @@ -620,7 +604,7 @@ abstract class CommonController extends BaseController $page_options[$this->total_count] = $this->total_count; return $page_options; } - protected function getPaginationForList($pager_group = 'default', int $segment = 0, $template = 'bootstrap_full') + final protected function getPaginationForList($pager_group = 'default', int $segment = 0, $template = 'bootstrap_full') { //Page, Per_page필요부분 $this->page = (int) $this->request->getVar('page') ?: 1; @@ -637,17 +621,13 @@ abstract class CommonController extends BaseController } protected function index_process(): void { - //조건절 처리 - $this->setConditionForList(); - //TotalCount (SoftDelete적용이 되려면 countAllResults를 사용해야함) - $this->total_count = $this->getService()->getModel()->selectCount('*', 'cnt')->countAllResults(); - //Pagination 처리 - $this->pagination = $this->getPaginationForList(); - //줄수 처리용 - $this->page_options = $this->getPageOptiosForList(); //조건절 , OrcerBy , Limit 처리 $this->setConditionForList(); - $this->setOrderByForList(); + $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()->setOrderBy($this->order_field, $this->order_value); + } $this->getService()->getModel()->limit($this->per_page); $this->getService()->getModel()->offset(($this->page - 1) * $this->per_page); $this->entities = $this->getService()->getEntities(); @@ -665,6 +645,14 @@ abstract class CommonController extends BaseController } // 현재 URL을 스택에 저장 helper(['form']); + //조건절 처리 + $this->setConditionForList(); + //TotalCount (SoftDelete적용이 되려면 countAllResults를 사용해야함) + $this->total_count = $this->getService()->getModel()->selectCount('*', 'cnt')->countAllResults(); + //Pagination 처리 + $this->pagination = $this->getPaginationForList(); + //줄수 처리용 + $this->page_options = $this->getPageOptiosForList(); $this->index_process(); return $this->getResultSuccess(); } catch (\Exception $e) { diff --git a/app/Models/CommonModel.php b/app/Models/CommonModel.php index a7b5f1c..90a77c2 100644 --- a/app/Models/CommonModel.php +++ b/app/Models/CommonModel.php @@ -212,8 +212,30 @@ abstract class CommonModel extends Model } //List 검색용 + //FormFilter 조건절 처리 + public function setList_FormFilter(string $field, mixed $filter_value): void + { + switch ($field) { + default: + //일반검색 + $this->where("{$this->getTable()}.{$field}", $filter_value); + break; + } + } + //검색어조건절처리 public function setList_WordFilter(string $word): void { $this->orLike($this->getTable() . "." . $this->getTitleField(), $word, 'both'); } + //날자검색 + public function setList_DateFilter(string $start, string $end): void + { + $this->where(sprintf("%s.created_at >= '%s 00:00:00'", $this->getTable(), $start)); + $this->where(sprintf("%s.created_at <= '%s 23:59:59'", $this->getTable(), $end)); + } + //OrderBy 처리 + public function setOrderBy(string $field, $value): void + { + $this->orderBy(sprintf("%s.%s %s", $this->getTable(), $field, $value ?: "DESC")); + } } diff --git a/app/Models/Customer/ClientModel.php b/app/Models/Customer/ClientModel.php index 750209f..acfeb5c 100644 --- a/app/Models/Customer/ClientModel.php +++ b/app/Models/Customer/ClientModel.php @@ -59,13 +59,21 @@ class ClientModel extends CustomerModel return $rule; } //Create용 - protected function create_process(array $formDatas): ClientEntity + //FormFilter 조건절 처리 + public function setList_FormFilter(string $field, mixed $filter_value): void { - $entity = parent::create_process($formDatas); - //고객코드 Code 자동 생성 후 수정 - $code = 'C' . str_pad($entity->getPK(), 4, '0', STR_PAD_LEFT); - return $this->modify($entity, ['code' => $code]); + switch ($field) { + case 'role': + $where = "FIND_IN_SET(" . $this->escape($filter_value) . ", {$this->getTable()}.{$field}) > 0"; + //FIND_IN_SET()은 MySQL 함수이므로 CodeIgniter가 이를 일반 컬럼명으로 착각하고 escape하게 되면 오류가 발생합니다. 따라서 ->where($sql, null, false)로 명시하여 escape를 꺼줘야 정상 작동 + $this->where($where, null, false); + break; + default: + parent::setList_FormFilter($field, $filter_value); + break; + } } + //검색어조건절처리 //List 검색용 public function setList_WordFilter(string $word): void { diff --git a/app/Models/Customer/ServicePaymentModel.php b/app/Models/Customer/ServicePaymentModel.php index 7fa5916..1994124 100644 --- a/app/Models/Customer/ServicePaymentModel.php +++ b/app/Models/Customer/ServicePaymentModel.php @@ -62,4 +62,11 @@ class ServicePaymentModel extends CustomerModel } return $rule; } + //List 검색용 + //OrderBy 처리 + public function setOrderBy(string $field, $value): void + { + $this->orderBy('billing_at', 'ASC', false); + parent::setOrderBy($field, $value); + } } diff --git a/app/Models/Equipment/CodeModel.php b/app/Models/Equipment/CodeModel.php index b3ca413..7172c43 100644 --- a/app/Models/Equipment/CodeModel.php +++ b/app/Models/Equipment/CodeModel.php @@ -40,4 +40,11 @@ class CodeModel extends EquipmentModel } return $rule; } + //List 검색용 + //OrderBy 처리 + public function setOrderBy(string $field, $value): void + { + $this->getModel()->orderBy('code', 'ASC', false); + parent::setOrderBy($field, $value); + } } diff --git a/app/Models/Equipment/Part/CpuModel.php b/app/Models/Equipment/Part/CpuModel.php index 59f4cde..6e34355 100644 --- a/app/Models/Equipment/Part/CpuModel.php +++ b/app/Models/Equipment/Part/CpuModel.php @@ -40,4 +40,11 @@ class CpuModel extends PartModel } return $rule; } + //List 검색용 + //OrderBy 처리 + public function setOrderBy(string $field, $value): void + { + $this->orderBy('model', 'ASC', false); + parent::setOrderBy($field, $value); + } } diff --git a/app/Models/Equipment/Part/DefenceModel.php b/app/Models/Equipment/Part/DefenceModel.php index bd561f2..11f1b1c 100644 --- a/app/Models/Equipment/Part/DefenceModel.php +++ b/app/Models/Equipment/Part/DefenceModel.php @@ -51,4 +51,11 @@ class DefenceModel extends PartModel } return $rule; } + //List 검색용 + //OrderBy 처리 + public function setOrderBy(string $field, $value): void + { + $this->orderBy('INET_ATON(ip)', 'ASC', false); + parent::setOrderBy($field, $value); + } } diff --git a/app/Models/Equipment/Part/DomainModel.php b/app/Models/Equipment/Part/DomainModel.php index da47962..e4514f2 100644 --- a/app/Models/Equipment/Part/DomainModel.php +++ b/app/Models/Equipment/Part/DomainModel.php @@ -40,4 +40,11 @@ class DomainModel extends PartModel } return $rule; } + //List 검색용 + //OrderBy 처리 + public function setOrderBy(string $field, $value): void + { + $this->orderBy('domain', 'ASC', false); + parent::setOrderBy($field, $value); + } } diff --git a/app/Models/Equipment/Part/IpModel.php b/app/Models/Equipment/Part/IpModel.php index 2088b5d..c7bbee5 100644 --- a/app/Models/Equipment/Part/IpModel.php +++ b/app/Models/Equipment/Part/IpModel.php @@ -44,4 +44,11 @@ class IpModel extends PartModel } return $rule; } + //List 검색용 + //OrderBy 처리 + public function setOrderBy(string $field, $value): void + { + $this->orderBy('INET_ATON(ip)', 'ASC', false); + parent::setOrderBy($field, $value); + } } diff --git a/app/Models/Equipment/Part/RamModel.php b/app/Models/Equipment/Part/RamModel.php index 5e0a085..3a7e9f5 100644 --- a/app/Models/Equipment/Part/RamModel.php +++ b/app/Models/Equipment/Part/RamModel.php @@ -41,4 +41,11 @@ class RamModel extends PartModel } return $rule; } + //List 검색용 + //OrderBy 처리 + public function setOrderBy(string $field, $value): void + { + $this->getModel()->orderBy('model', 'ASC', false); + parent::setOrderBy($field, $value); + } } diff --git a/app/Models/Equipment/Part/SoftwareModel.php b/app/Models/Equipment/Part/SoftwareModel.php index f473147..4890fa9 100644 --- a/app/Models/Equipment/Part/SoftwareModel.php +++ b/app/Models/Equipment/Part/SoftwareModel.php @@ -45,4 +45,11 @@ class SoftwareModel extends PartModel } return $rule; } + //List 검색용 + //OrderBy 처리 + public function setOrderBy(string $field, $value): void + { + $this->getModel()->orderBy('model', 'ASC', false); + parent::setOrderBy($field, $value); + } } diff --git a/app/Models/Equipment/ServerModel.php b/app/Models/Equipment/ServerModel.php index 6962fc1..ddb20f2 100644 --- a/app/Models/Equipment/ServerModel.php +++ b/app/Models/Equipment/ServerModel.php @@ -41,4 +41,11 @@ class ServerModel extends EquipmentModel } return $rule; } + //List 검색용 + //OrderBy 처리 + public function setOrderBy(string $field, $value): void + { + $this->getModel()->orderBy('model', 'ASC', false); + parent::setOrderBy($field, $value); + } } diff --git a/app/Models/Equipment/SwitchModel.php b/app/Models/Equipment/SwitchModel.php index ebf8099..8860981 100644 --- a/app/Models/Equipment/SwitchModel.php +++ b/app/Models/Equipment/SwitchModel.php @@ -41,4 +41,11 @@ class SwitchModel extends EquipmentModel } return $rule; } + //List 검색용 + //OrderBy 처리 + public function setOrderBy(string $field, $value): void + { + $this->getModel()->orderBy('code', 'ASC', false); + parent::setOrderBy($field, $value); + } } diff --git a/app/Models/UserModel.php b/app/Models/UserModel.php index db9ac04..fc1d66e 100644 --- a/app/Models/UserModel.php +++ b/app/Models/UserModel.php @@ -71,6 +71,21 @@ class UserModel extends CommonModel return $convertedData; } //List 검색용 + //FormFilter 조건절 처리 + public function setList_FormFilter(string $field, mixed $filter_value): void + { + switch ($field) { + case 'role': + $where = "FIND_IN_SET(" . $this->escape($filter_value) . ", {$this->getTable()}.{$field}) > 0"; + //FIND_IN_SET()은 MySQL 함수이므로 CodeIgniter가 이를 일반 컬럼명으로 착각하고 escape하게 되면 오류가 발생합니다. 따라서 ->where($sql, null, false)로 명시하여 escape를 꺼줘야 정상 작동 + $this->where($where, null, false); + break; + default: + parent::setList_FormFilter($field, $filter_value); + break; + } + } + //검색어조건절처리 public function setList_WordFilter(string $word): void { $this->orLike(self::TABLE . '.id', $word, 'both'); diff --git a/app/Views/admin/create_form.php b/app/Views/admin/create_form.php index 08e3faf..e2b7cec 100644 --- a/app/Views/admin/create_form.php +++ b/app/Views/admin/create_form.php @@ -10,7 +10,7 @@ getFieldLabel($field, lang("{$viewDatas['class_path']}.label.{$field}"), $viewDatas) ?> - getFieldForm($field, old($field) ?? ($viewDatas['control'][$field] ?? null), $viewDatas) ?> + getFieldForm($field, old($field) ?? ($viewDatas['control']['filter_value'][$field] ?? null), $viewDatas) ?> diff --git a/app/Views/admin/domain/create_form.php b/app/Views/admin/domain/create_form.php index 496ca6e..e65b48a 100644 --- a/app/Views/admin/domain/create_form.php +++ b/app/Views/admin/domain/create_form.php @@ -10,7 +10,7 @@ getFieldLabel($field, lang("{$viewDatas['class_path']}.label.{$field}"), $viewDatas) ?> - getFieldForm($field, old($field) ?? ($viewDatas['control'][$field] ?? null), $viewDatas) ?> + getFieldForm($field, old($field) ?? ($viewDatas['control']['filter_value'][$field] ?? null), $viewDatas) ?> diff --git a/app/Views/templates/admin/index_content_top.php b/app/Views/templates/admin/index_content_top.php index 3828d22..aa7083e 100644 --- a/app/Views/templates/admin/index_content_top.php +++ b/app/Views/templates/admin/index_content_top.php @@ -4,7 +4,7 @@