From 34c7833132e4872dbdab1be9272d4bf3057dfe64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=B5=9C=EC=A4=80=ED=9D=A0?= Date: Sun, 29 Sep 2024 01:20:38 +0900 Subject: [PATCH] cfmgrv4 init...1 --- .../Admin/Cloudflare/RecordController.php | 8 ++ .../Admin/Cloudflare/ZoneController.php | 30 +++- app/Controllers/CommonController.php | 1 + .../Admin/Cloudflare/Record_helper.php | 4 +- app/Helpers/Admin/Cloudflare/Zone_helper.php | 133 ++++++++++-------- app/Models/Cloudflare/ZoneModel.php | 8 +- app/Views/admin/cloudflare/record/index.php | 2 +- app/Views/admin/cloudflare/zone/index.php | 8 +- 8 files changed, 124 insertions(+), 70 deletions(-) diff --git a/app/Controllers/Admin/Cloudflare/RecordController.php b/app/Controllers/Admin/Cloudflare/RecordController.php index ad50fef..7d52871 100644 --- a/app/Controllers/Admin/Cloudflare/RecordController.php +++ b/app/Controllers/Admin/Cloudflare/RecordController.php @@ -99,6 +99,14 @@ class RecordController extends CloudflareController $this->formDatas = $this->getFormDatas(); //부모데이터 정의 $this->_account_entity = $this->getAccountModel()->getEntityByPK($this->formDatas[$this->getModel()::PARENT]); + $cnt = 1; + foreach ($this->formDatas['hosts'] as $host) { + //호스트명 형식확인 + if (!isHost_CommonHelper($host)) { + throw new \Exception("{$this->_account_entity->getTitle()}의 {$cnt}번째 {$host} 호스트명 형식 오류"); + } + $cnt++; + } return $this->create_procedure(); } //수정 diff --git a/app/Controllers/Admin/Cloudflare/ZoneController.php b/app/Controllers/Admin/Cloudflare/ZoneController.php index 1ea553f..3783407 100644 --- a/app/Controllers/Admin/Cloudflare/ZoneController.php +++ b/app/Controllers/Admin/Cloudflare/ZoneController.php @@ -94,11 +94,13 @@ class ZoneController extends CloudflareController { parent::create_process(); //Zone생성 + $cnt = 1; $zone_entitys = []; foreach ($this->formDatas['domains'] as $domain) { $entity = $this->getMySocket()->create($domain); log_message("debug", "Zone:{$entity->getTitle()} 작업을 완료하였습니다."); $zone_entitys[] = $entity; + $cnt++; } //Record생성 foreach ($zone_entitys as $zone_entity) { @@ -116,6 +118,32 @@ class ZoneController extends CloudflareController $this->formDatas = $this->getFormDatas(); //부모데이터 정의 $this->_account_entity = $this->getAccountModel()->getEntityByPK($this->formDatas[$this->getModel()::PARENT]); + //Type이 A형식일경우 IP형태인지 확인 + if ($this->formDatas['type'] === 'A') { + if (!isIPAddress_CommonHelper($this->formDatas['content'], $this->formDatas['type'])) { + throw new \Exception("{$this->_account_entity->getTitle()}의 {$this->formDatas['type']}, {$this->formDatas['content']} 형식 오류[사설IP 않됨]"); + } + } + $cnt = 1; + foreach ($this->formDatas['domains'] as $domain) { + //도메인명 형식확인 + if (!isDomain_CommonHelper($domain)) { + throw new \Exception("{$this->_account_entity->getTitle()}의 {$cnt}번째 {$domain} 형식 오류"); + } + //도메인명이 해당계정의 유일한 도메인인지 확인 + if (!$this->getModel()->isUniqueDomain($this->_account_entity, $domain)) { + throw new \Exception("{$this->_account_entity->getTitle()}의 {$cnt}번째 {$domain}은 이미 등록된 도메인입니다."); + } + $cnt++; + } + $cnt = 1; + foreach ($this->formDatas['hosts'] as $host) { + //호스트명 형식확인 + if (!isHost_CommonHelper($host)) { + throw new \Exception("{$this->_account_entity->getTitle()}의 {$cnt}번째 {$host} 호스트명 형식 오류"); + } + $cnt++; + } return $this->create_procedure(); } // 리스트 @@ -123,7 +151,7 @@ class ZoneController extends CloudflareController { $this->fields = [$this->getModel()::PARENT, $this->getModel()::TITLE, 'name_servers', 'original_name_servers', 'plan', 'development_mode', 'ipv6', 'security_level', 'status', 'updated_at', 'created_at']; $this->field_rules = $this->getModel()->getFieldRules(__FUNCTION__, $this->fields); - $this->filter_fields = [$this->getModel()::PARENT, 'development_mode', 'ipv6', 'security_level', 'status']; + $this->filter_fields = [$this->getModel()::PARENT, 'development_mode', 'ipv6', 'security_level']; $this->batchjob_fields = ['development_mode', 'ipv6', 'security_level']; $this->field_options = $this->getFormFieldOptions($this->filter_fields); return $this->list_procedure(); diff --git a/app/Controllers/CommonController.php b/app/Controllers/CommonController.php index d4cc336..282d288 100644 --- a/app/Controllers/CommonController.php +++ b/app/Controllers/CommonController.php @@ -13,6 +13,7 @@ abstract class CommonController extends BaseController public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger) { parent::initController($request, $response, $logger); + helper("common"); } final public function __get($name) { diff --git a/app/Helpers/Admin/Cloudflare/Record_helper.php b/app/Helpers/Admin/Cloudflare/Record_helper.php index 7e7e42a..77823f2 100644 --- a/app/Helpers/Admin/Cloudflare/Record_helper.php +++ b/app/Helpers/Admin/Cloudflare/Record_helper.php @@ -63,10 +63,10 @@ function getFieldView_RecordHelper(string $field, mixed $entity, array $viewData current_url() . '/reload/' . $entity->getParent(), ICONS["RELOAD"], [ - "class" => "btn btn-sm btn-primary btn-circle fa fa-refresh", + "class" => "btn btn-sm btn-primary btn-circle", "target" => "_self" ] - ) . "{$viewDatas['field_options'][$field][$value]}"; + ) . " " . "{$viewDatas['field_options'][$field][$value]}"; } break; case RecordModel::TITLE: diff --git a/app/Helpers/Admin/Cloudflare/Zone_helper.php b/app/Helpers/Admin/Cloudflare/Zone_helper.php index 2b73950..616be13 100644 --- a/app/Helpers/Admin/Cloudflare/Zone_helper.php +++ b/app/Helpers/Admin/Cloudflare/Zone_helper.php @@ -2,48 +2,44 @@ use App\Models\Cloudflare\ZoneModel; -function getFieldLabel_ZoneHelper(string $field, array $viewDatas, array $attributes = []): string +function getFieldLabel_ZoneHelper(string $field, array $viewDatas, array $extras = []): string { switch ($field) { + case ZoneModel::PARENT: + $extras = [...$extras, "class" => 'text-danger']; + break; default: if (strpos($viewDatas['field_rules'][$field], 'required') !== false) { - $attributes = ['style="color:red";']; + $extras = [...$extras, "class" => 'text-danger']; } - $label = sprintf( - "%s", - implode(" ", $attributes), - lang("{$viewDatas['class_path']}.label.{$field}") - ); break; } - return $label; + return form_label(lang("{$viewDatas['class_path']}.label.{$field}"), $field, $extras); } //header.php에서 getFieldForm_Helper사용 -function getFieldForm_ZoneHelper(string $field, mixed $value, array $viewDatas, array $attributes = []): string +function getFieldForm_ZoneHelper(string $field, mixed $value, array $viewDatas, array $extras = []): string { $value = $value ?: DEFAULTS['EMPTY']; switch ($field) { case ZoneModel::PARENT: - $form = form_dropdown($field, $viewDatas['field_options'][$field], $value, [...$attributes, 'class' => "select-field"]); - // // return form_multiselect($field, $field_options[$field], is_array($value) ? [...$value] : [$value], [...$attributes]); + $form = form_dropdown($field, $viewDatas['field_options'][$field], $value, [...$extras, 'class' => "select-field"]); + // // return form_multiselect($field, $field_options[$field], is_array($value) ? [...$value] : [$value], [$extras]); // foreach ($viewDatas['field_options'][$field] as $key => $label) { // $checkboxs[] = form_checkbox("{$field}[]", $key, in_array($key, explode(DEFAULTS["DELIMITER_ROLE"], $value))) . $label; // } // return implode(" ", $checkboxs); break; case ZoneModel::TITLE: - $form = form_input($field, $value, ["placeholder" => "예)example.com", "style" => "width:60%; ::placeholder{color:silver; opacity: 1;}"]); + $form = form_input($field, $value, ["placeholder" => "예)exmaple.com", "style" => "width:60%; ::placeholder{color:silver; opacity: 1;}"]); break; - case 'domains': case 'hosts': $form = form_textarea($field, html_entity_decode($value), ['class' => 'editor', 'rows' => '5']); break; - case "proxied": case "development_mode": case "ipv6": case "security_level": - case "status": - $form = form_dropdown($field, $viewDatas['field_options'][$field], $value, $attributes); + case 'status': + $form = form_dropdown($field, $viewDatas['field_options'][$field], $value, $extras); break; case 'updated_at': case 'created_at': @@ -55,11 +51,48 @@ function getFieldForm_ZoneHelper(string $field, mixed $value, array $viewDatas, } return $form; } // - -function getFieldView_ZoneHelper(string $field, mixed $entity, array $viewDatas, array $attributes = []) +function getFieldView_ZoneHelper(string $field, mixed $entity, array $viewDatas, array $extras = []) { $value = $entity->$field ?: DEFAULTS['EMPTY']; switch ($field) { + case ZoneModel::PARENT: + if ($extras['old_account'] === $entity->getParent()) { + $value = ""; + } else { + $value = anchor( + current_url() . '/reload/' . $entity->getParent(), + ICONS["RELOAD"], + [ + "class" => "btn btn-sm btn-primary btn-circle", + "target" => "_self" + ] + ) . " " . + preg_replace("/(\w+)@(.+)/", "$1", $viewDatas['field_options'][$field][$value]) + . ""; + } + break; + case ZoneModel::TITLE: + $value = anchor( + current_url() . '/reload/' . $entity->getParent(), + ICONS["RELOAD"], + [ + "class" => "btn btn-sm btn-primary btn-circle", + "target" => "_self" + ] + ) . " " . + anchor( + current_url() . '/reload/' . $entity->getParent(), + ICONS["FLAG"], + [ + "class" => "btn btn-sm btn-primary btn-circle", + "target" => "_self" + ] + ) . " {$value}"; + break; + case 'name_servers': + case 'original_name_servers': + $value = str_replace(",", "
", $value); + break; case 'category_uid': foreach (array_values($viewDatas['field_options'][$field]) as $category_2depths) { foreach ($category_2depths as $key => $depth) { @@ -74,62 +107,42 @@ function getFieldView_ZoneHelper(string $field, mixed $entity, array $viewDatas, case 'sale': $value = number_format(!$value ? 0 : $value) . "원"; break; - case 'content': - $value = html_entity_decode($value); - break; case 'updated_at': case 'created_at': $value = $value ? date("Y-m-d", strtotime($value)) : ""; break; default: if (in_array($field, $viewDatas['filter_fields']) && $value) { - $value = $viewDatas['field_options'][$field][$value]; - } - break; - } - return $value; -} // - -function getListHeaders_ZoneHelper(string $field, array $viewDatas, array $attributes = []): string -{ - $label = getFieldLabel_ZoneHelper($field, $viewDatas, $attributes); - if ($field == $viewDatas['order_field']) { - $label .= $viewDatas['order_value'] == 'ASC' ? ICONS["UP"] : ICONS["DOWN"]; - } - $order_value = $viewDatas['order_value'] == 'DESC' ? "ASC" : "DESC"; - $viewDatas['uri']->addQuery('order_field', $field); - $viewDatas['uri']->addQuery('order_value', $order_value); - $header = anchor((string)$viewDatas['uri'], $label); - switch ($field) { - case 'title': - $attributes = [...$attributes, "class=\"col-2\""]; - break; - } - return sprintf("%s", implode(" ", $attributes), $header); -} -function getListColumns_ZoneHelper(string $field, mixed $entity, array $viewDatas, array $attributes = []): string -{ - switch ($field) { - case ZoneModel::TITLE: - $value = anchor( - current_url() . '/view/' . $entity->getPK(), - getFieldView_ZoneHelper($field, $entity, $viewDatas), - ["target" => "_self"] - ); - break; - default: - if (in_array($field, $viewDatas['filter_fields'])) { - $attributes["onChange"] = sprintf( + $extras["onChange"] = sprintf( 'location.href="%s/toggle/%s/%s?%s="+this.options[this.selectedIndex].value', current_url(), $entity->getPK(), $field, $field ); - $value = getFieldForm_ZoneHelper($field, $entity, $viewDatas, $attributes); + $value = getFieldForm_ZoneHelper($field, $entity->$field, $viewDatas, $extras); } - $value = getFieldView_ZoneHelper($field, $entity, $viewDatas); break; } return $value; +} // +function getListColumns_ZoneHelper(string $field, array $viewDatas, array $extras = []): string +{ + $label = getFieldLabel_ZoneHelper($field, $viewDatas, $extras); + if ($field == $viewDatas['order_field']) { + $label .= $viewDatas['order_value'] == 'ASC' ? ICONS["UP"] : ICONS["DOWN"]; + } + $order_value = $viewDatas['order_value'] == 'DESC' ? "ASC" : "DESC"; + $viewDatas['uri']->addQuery('order_field', $field); + $viewDatas['uri']->addQuery('order_value', $order_value); + $label = anchor((string)$viewDatas['uri'], $label); + switch ($field) { + case ZoneModel::PARENT: + $label .= "