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("