diff --git a/app/Config/Routes.php b/app/Config/Routes.php index aa379f8..dd4ba91 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -40,6 +40,7 @@ $routes->group('admin/mapurl', ['namespace' => 'App\Controllers\Admin', 'filter' $routes->get('delete/(:num)', 'MapurlController::delete/$1'); $routes->get('toggle/(:num)/(:any)', 'MapurlController::toggle/$1/$2'); $routes->post('batchjob', 'MapurlController::batcjob'); + $routes->post('batchjob_delete', 'MapurlController::batcjob_delete'); $routes->get('download/(:alpha)', 'MapurlController::download/$1'); }); $routes->group('admin/user', ['namespace' => 'App\Controllers\Admin', 'filter' => 'authFilter:master'], function ($routes) { @@ -52,6 +53,7 @@ $routes->group('admin/user', ['namespace' => 'App\Controllers\Admin', 'filter' = $routes->get('delete/(:num)', 'UserController::delete/$1'); $routes->get('toggle/(:num)/(:any)', 'UserController::toggle/$1/$2'); $routes->post('batchjob', 'UserController::batcjob'); + $routes->post('batchjob_delete', 'UserController::batcjob_delete'); $routes->get('download/(:alpha)', 'UserController::download/$1'); }); $routes->group('admin/usersns', ['namespace' => 'App\Controllers\Admin', 'filter' => 'authFilter:master'], function ($routes) { @@ -59,6 +61,7 @@ $routes->group('admin/usersns', ['namespace' => 'App\Controllers\Admin', 'filter $routes->get('delete/(:num)', 'UserSNSController::delete/$1'); $routes->get('toggle/(:num)/(:any)', 'UserSNSController::toggle/$1/$2'); $routes->post('batchjob', 'UserSNSController::batcjob'); + $routes->post('batchjob_delete', 'UserSNSController::batcjob_delete'); $routes->get('download/(:alpha)', 'UserSNSController::download/$1'); }); @@ -72,6 +75,7 @@ $routes->group('admin/cloudflare', ['namespace' => 'App\Controllers\Admin\Cloudf $routes->get('delete/(:num)', 'AuthController::delete/$1'); $routes->get('toggle/(:num)/(:any)', 'AuthController::toggle/$1/$2'); $routes->post('batchjob', 'AuthController::batcjob'); + $routes->post('batchjob_delete', 'AuthController::batcjob_delete'); $routes->get('download/(:alpha)', 'AccountController::download/$1'); }); $routes->group('account', function ($routes) { @@ -88,6 +92,7 @@ $routes->group('admin/cloudflare', ['namespace' => 'App\Controllers\Admin\Cloudf $routes->get('sync/(:alphanum)', 'ZoneController::sync/$1'); $routes->get('toggle/(:alphanum)/(:any)', 'ZoneController::toggle/$1/$2'); $routes->post('batchjob', 'ZoneController::batcjob'); + $routes->post('batchjob_delete', 'ZoneController::batcjob_delete'); $routes->get('reload/(:alphanum)', 'ZoneController::reload/$1'); $routes->get('download/(:alpha)', 'ZoneController::download/$1'); }); @@ -100,6 +105,7 @@ $routes->group('admin/cloudflare', ['namespace' => 'App\Controllers\Admin\Cloudf $routes->get('sync/(:alphanum)', 'RecordController::sync/$1'); $routes->get('toggle/(:alphanum)/(:any)', 'RecordController::toggle/$1/$2'); $routes->post('batchjob', 'RecordController::batcjob'); + $routes->post('batchjob_delete', 'RecordController::batcjob_delete'); $routes->get('reload/(:alphanum)', 'RecordController::reload/$1'); $routes->get('download/(:alpha)', 'RecordController::download/$1'); }); diff --git a/app/Controllers/Admin/Cloudflare/RecordController.php b/app/Controllers/Admin/Cloudflare/RecordController.php index 7ff6b67..c75f680 100644 --- a/app/Controllers/Admin/Cloudflare/RecordController.php +++ b/app/Controllers/Admin/Cloudflare/RecordController.php @@ -148,7 +148,7 @@ class RecordController extends CloudflareController if ($this->entity === null) { throw new \Exception("{$uid} 정보를 찾을수 없습니다."); } - //fixed 필드가 있고 값이 변경되었을때 + //fixed 필드가 있고 값이 변경되었을때(toggle에서 fixed만 설정시사용) if (in_array('fixed', $this->fields)) { // dd($this->formDatas, $this->entity->fixed); if (isset($this->formDatas['fixed']) && $this->formDatas['fixed'] !== $this->entity->fixed) { @@ -165,7 +165,14 @@ class RecordController extends CloudflareController public function batcjob(): RedirectResponse { $this->action = __FUNCTION__; - $this->fields = ['proxied']; + //데이터가 있는경우 Field만 처리하기위해 + $fields = []; + foreach (['content', 'proxied'] as $field) { + if ($this->request->getVar($field)) { + $fields[$field] = $field; + } + } + $this->fields = $fields; $this->field_rules = $this->getModel()->getFieldRules($this->action, $this->fields); return $this->batcjob_procedure(); } diff --git a/app/Controllers/Admin/Cloudflare/ZoneController.php b/app/Controllers/Admin/Cloudflare/ZoneController.php index 8c3a411..7884157 100644 --- a/app/Controllers/Admin/Cloudflare/ZoneController.php +++ b/app/Controllers/Admin/Cloudflare/ZoneController.php @@ -202,7 +202,14 @@ class ZoneController extends CloudflareController public function batcjob(): RedirectResponse { $this->action = __FUNCTION__; - $this->fields = ['development_mode', 'ipv6', 'security_level']; + //데이터가 있는경우 Field만 처리하기위해 + $fields = []; + foreach (['development_mode', 'ipv6', 'security_level'] as $field) { + if ($this->request->getVar($field)) { + $fields[$field] = $field; + } + } + $this->fields = $fields; $this->field_rules = $this->getModel()->getFieldRules($this->action, $this->fields); return $this->batcjob_procedure(); } diff --git a/app/Controllers/MVController.php b/app/Controllers/MVController.php index 666bfa5..a099052 100644 --- a/app/Controllers/MVController.php +++ b/app/Controllers/MVController.php @@ -304,6 +304,32 @@ abstract class MVController extends CommonController return redirect()->back()->with('error', __FUNCTION__ . " 실패하였습니다.\n" . $e->getMessage()); } } + //일괄삭제 + final public function batcjob_delete(): RedirectResponse|string + { + //Transaction Start + $this->getModel()->transStart(); + try { + //변경할 UIDS + $uids = $this->request->getVar('batchjob_uids'); + if (!$uids) { + throw new \Exception("적용할 리스트를 선택하셔야합니다."); + } + foreach (explode(",", $uids) as $uid) { + $this->delete_process($uid); + } + $this->getModel()->transCommit(); + $this->message = "{$this->class_name} : 일괄삭제처리작업이 완료되었습니다."; + log_message("notice", $this->message); + // 이전 URL로 리다이렉트 + return redirect()->to($this->myauth->popPreviousUrl())->with('error', $this->message); + } catch (\Exception $e) { + //Transaction Rollback + $this->getModel()->transRollback(); + log_message("error", $e->getMessage()); + return redirect()->back()->with('error', __FUNCTION__ . " 실패하였습니다.\n" . $e->getMessage()); + } + } // 리스트 protected function list_condition_process(): void { diff --git a/app/Helpers/Cloudflare/AccountHelper.php b/app/Helpers/Cloudflare/AccountHelper.php index 97b8e31..6902fc2 100644 --- a/app/Helpers/Cloudflare/AccountHelper.php +++ b/app/Helpers/Cloudflare/AccountHelper.php @@ -104,6 +104,12 @@ class AccountHelper extends CommonHelper case 'batchjob': $action = ""; break; + case 'batchjob_delete': + $action = ""; + break; + default: + $action = parent::getListButton($action, $viewDatas, $extras); + break; } return $action; } diff --git a/app/Helpers/Cloudflare/AuthHelper.php b/app/Helpers/Cloudflare/AuthHelper.php index be804f0..d3a92c7 100644 --- a/app/Helpers/Cloudflare/AuthHelper.php +++ b/app/Helpers/Cloudflare/AuthHelper.php @@ -52,4 +52,16 @@ class AuthHelper extends CommonHelper } return $value; } // + public function getListButton(string $action, array $viewDatas, array $extras = []): string + { + switch ($action) { + case 'batchjob_delete': + $action = ""; + break; + default: + $action = parent::getListButton($action, $viewDatas, $extras); + break; + } + return $action; + } } diff --git a/app/Helpers/CommonHelper.php b/app/Helpers/CommonHelper.php index 12c6b8d..f0ac864 100644 --- a/app/Helpers/CommonHelper.php +++ b/app/Helpers/CommonHelper.php @@ -4,9 +4,7 @@ namespace App\Helpers; class CommonHelper { - public function __construct() - { - } + public function __construct() {} final public function getRandomString($length = 10, $characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") { return substr(str_shuffle($characters), 0, $length); @@ -265,10 +263,18 @@ class CommonHelper break; case 'batchjob': $action = form_submit("batchjob_submit", '일괄처리', [ + "formaction" => current_url() . '/batchjob', "class" => "btn btn-outline btn-warning", "onclick" => "return submitBatchJob()" ]); break; + case 'batchjob_delete': + $action = form_submit("batchjob_submit", '일괄삭제', [ + "formaction" => current_url() . '/batchjob_delete', + "class" => "btn btn-outline btn-danger", + "onclick" => "return submitBatchJobDelete()" + ]); + break; } return $action; } diff --git a/app/Helpers/UserSNSHelper.php b/app/Helpers/UserSNSHelper.php index 9066828..96d1377 100644 --- a/app/Helpers/UserSNSHelper.php +++ b/app/Helpers/UserSNSHelper.php @@ -54,6 +54,12 @@ class UserSNSHelper extends CommonHelper case 'batchjob': $action = ""; break; + case 'batchjob_delete': + $action = ""; + break; + default: + $action = parent::getListButton($action, $viewDatas, $extras); + break; } return $action; } diff --git a/app/Views/templates/admin/index_content_batchjob.php b/app/Views/templates/admin/index_content_batchjob.php index f363f4a..6284143 100644 --- a/app/Views/templates/admin/index_content_batchjob.php +++ b/app/Views/templates/admin/index_content_batchjob.php @@ -1,5 +1,5 @@
- 'batchjob_form', 'method' => "post"]) ?> + 'batchjob_form', 'method' => "post"]) ?>
@@ -38,4 +39,18 @@ document.getElementById('batchjob_uids').value = batchjobUids.join(','); return true; } + + function submitBatchJobDelete() { + var batchjobUids = []; + var checkboxes = document.querySelectorAll('input[name="batchjob_uids[]"]:checked'); + checkboxes.forEach(function(checkbox) { + batchjobUids.push(checkbox.value); + }); + if (batchjobUids.length === 0) { + alert('적용할 리스트를 선택하셔야합니다.'); + return false; + } + document.getElementById('batchjob_uids').value = batchjobUids.join(','); + return true; + } \ No newline at end of file diff --git a/public/css/admin/index.css b/public/css/admin/index.css index c759c4b..dffd10a 100644 --- a/public/css/admin/index.css +++ b/public/css/admin/index.css @@ -99,6 +99,11 @@ div.index_batchjob { /* border: 1px solid red; */ } +div.index_batchjob ul.nav li.nav-item { + margin-left: 10px; + /* border: 1px solid red; */ +} + div.index_pagination { margin-top: 20px; /* border: 1px solid red; */