cfmgrv4 init...2
This commit is contained in:
parent
9e3ea123ff
commit
e8257f3813
@ -61,7 +61,7 @@ class AccountController extends CloudflareController
|
||||
$this->field_rules = $this->getModel()->getFieldRules($this->action, $this->fields);
|
||||
$this->filter_fields = [$this->getModel()::PARENT, 'type', 'status'];
|
||||
$this->field_options = $this->getFormFieldOptions($this->filter_fields);
|
||||
$this->batchjob_fields = ['type', 'status'];
|
||||
$this->batchjob_fields = [];
|
||||
return $this->list_procedure();
|
||||
}
|
||||
// Download
|
||||
|
||||
@ -71,7 +71,7 @@ class UserController extends AdminController
|
||||
private function init(string $action): void
|
||||
{
|
||||
$this->action = $action;
|
||||
$this->fields = ['id', 'passwd', $this->getModel()::TITLE, 'email', 'mobile', 'role'];
|
||||
$this->fields = ['id', 'passwd', 'confirmpassword', $this->getModel()::TITLE, 'email', 'mobile', 'role'];
|
||||
$this->field_rules = $this->getModel()->getFieldRules($this->action, $this->fields);
|
||||
$this->filter_fields = ['role', 'status'];
|
||||
$this->field_options = $this->getFormFieldOptions($this->filter_fields);
|
||||
|
||||
@ -88,6 +88,10 @@ class AccountHelper extends CommonHelper
|
||||
]
|
||||
) . " <span class=\"label_Accounts\">{$value}</span>";
|
||||
break;
|
||||
case 'type':
|
||||
case 'status':
|
||||
$value = $viewDatas['field_options'][$field][$value];
|
||||
break;
|
||||
default:
|
||||
$value = parent::getFieldView($field, $viewDatas, $extras);
|
||||
break;
|
||||
@ -106,6 +110,9 @@ class AccountHelper extends CommonHelper
|
||||
case 'delete':
|
||||
$action = "";
|
||||
break;
|
||||
case 'batchjob':
|
||||
$action = "";
|
||||
break;
|
||||
}
|
||||
return $action;
|
||||
}
|
||||
|
||||
@ -266,7 +266,7 @@ abstract class CommonHelper
|
||||
"name" => "batchjob_uids[]",
|
||||
"value" => $pk,
|
||||
"class" => "batchjobuids_checkboxs",
|
||||
"checked" => in_array($pk, old("batchjob_uids", []))
|
||||
"checked" => in_array($pk, old("batchjob_uids[]", []))
|
||||
]);
|
||||
$action = $checkbox . $this->getListButtonLink(
|
||||
current_url() . '/' . $action . '/' . $viewDatas['entity']->getPK(),
|
||||
@ -283,6 +283,12 @@ abstract class CommonHelper
|
||||
$extras
|
||||
);
|
||||
break;
|
||||
case 'batchjob':
|
||||
$action = form_submit("batchjob_submit", '일괄처리', [
|
||||
"class" => "btn btn-outline btn-warning",
|
||||
"onclick" => "return submitBatchJob()"
|
||||
]);
|
||||
break;
|
||||
}
|
||||
return $action;
|
||||
}
|
||||
|
||||
@ -2,9 +2,9 @@
|
||||
|
||||
namespace App\Models\Cloudflare;
|
||||
|
||||
use App\Models\CommonModel;
|
||||
use App\Entities\Cloudflare\ZoneEntity;
|
||||
use App\Entities\Cloudflare\AccountEntity;
|
||||
use App\Entities\Cloudflare\ZoneEntity;
|
||||
use App\Models\CommonModel;
|
||||
|
||||
class ZoneModel extends CommonModel
|
||||
{
|
||||
@ -103,7 +103,9 @@ class ZoneModel extends CommonModel
|
||||
//List 검색용
|
||||
public function setList_WordFilter(string $word, $field = null): void
|
||||
{
|
||||
//Join을 해서 Record의 content(IP검색)을 하기위함
|
||||
//Record의 content(IP검색)을 하기위함
|
||||
//Join 방식사용
|
||||
$this->select(self::TABLE . '.*')->distinct();
|
||||
$this->join(RecordModel::TABLE, sprintf(
|
||||
"%s.%s=%s.%s",
|
||||
self::TABLE,
|
||||
@ -113,8 +115,12 @@ class ZoneModel extends CommonModel
|
||||
));
|
||||
parent::setList_WordFilter($word, $field);
|
||||
$this->orLike(RecordModel::TABLE . '.content', $word, 'both');
|
||||
// $subquery = $this->db->table(RecordModel::TABLE)->select(RecordModel::PARENT)->like('content', $word, 'both');
|
||||
// $this->orWhereIn(self::PK, $subquery);
|
||||
//Subquery 방식사용
|
||||
// $recordModel = new RecordModel();
|
||||
// $recordModel->like(RecordModel::TABLE . '.content', $word, 'both');
|
||||
// $zone_uids = $recordModel->select(RecordModel::PARENT)->findAll();
|
||||
// $zone_uids = array_column($zone_uids, RecordModel::PARENT);
|
||||
// $this->orWhereIn(self::TABLE . '.' . self::PK, array_values($zone_uids));
|
||||
}
|
||||
public function setList_OrderBy(string $order = ""): void
|
||||
{
|
||||
|
||||
@ -80,15 +80,6 @@ abstract class CommonModel extends Model
|
||||
case $this->getTitleField():
|
||||
$rule = "required|string";
|
||||
break;
|
||||
case "passwd":
|
||||
$rule = $action == "create" ? "required" : "if_exist" . "|trim|string";
|
||||
break;
|
||||
case "confirmpassword":
|
||||
$rule = $action == "create" ? "required" : "if_exist" . "|trim|string|matches[passwd]";
|
||||
break;
|
||||
case "email":
|
||||
$rule = "if_exist|trim|valid_email";
|
||||
break;
|
||||
case 'image':
|
||||
$rule = "is_image[{$field}]|mime_in[{$field},image/jpg,image/jpeg,image/gif,image/png,image/webp]|max_size[{$field},300]|max_dims[{$field},2048,768]";
|
||||
break;
|
||||
@ -135,7 +126,7 @@ abstract class CommonModel extends Model
|
||||
return $this->asObject($this->returnType)->findAll();
|
||||
}
|
||||
//create , modify 직전 작업용 작업
|
||||
final protected function convertEntityData(string $field, array $formDatas): mixed
|
||||
protected function convertEntityData(string $field, array $formDatas): mixed
|
||||
{
|
||||
switch ($field) {
|
||||
case $this->getPKField():
|
||||
@ -154,13 +145,7 @@ abstract class CommonModel extends Model
|
||||
$value = $formDatas[$field];
|
||||
}
|
||||
break;
|
||||
case "passwd":
|
||||
$value = password_hash($formDatas[$field], PASSWORD_DEFAULT);
|
||||
break;
|
||||
case "confirmpassword":
|
||||
$value = password_hash($formDatas[$field], PASSWORD_DEFAULT);
|
||||
break;
|
||||
case "content":
|
||||
case "editor": //content등 textarea를 사용한 Field
|
||||
$value = htmlentities($formDatas[$field], ENT_QUOTES);
|
||||
break;
|
||||
default:
|
||||
@ -192,7 +177,7 @@ abstract class CommonModel extends Model
|
||||
{
|
||||
//Field에 맞는 Validation Rule 재정의
|
||||
$this->setValidationRules($this->getFieldRules('create', $this->allowedFields));
|
||||
//저장하기 전에 데이터 값 변경이 필요한 Field
|
||||
//저장하기 전에 데이터 값 변경이 필요한 Field
|
||||
foreach (array_keys($formDatas) as $field) {
|
||||
$entity->$field = $this->convertEntityData($field, $formDatas);
|
||||
}
|
||||
@ -209,7 +194,7 @@ abstract class CommonModel extends Model
|
||||
{
|
||||
//Field에 맞는 Validation Rule 재정의
|
||||
$this->setValidationRules($this->getFieldRules('modify', $this->allowedFields));
|
||||
//저장하기 전에 데이터 값 변경이 필요한 Field
|
||||
//저장하기 전에 데이터 값 변경이 필요한 Field
|
||||
foreach (array_keys($formDatas) as $field) {
|
||||
$entity->$field = $this->convertEntityData($field, $formDatas);
|
||||
}
|
||||
|
||||
@ -40,19 +40,39 @@ class UserModel extends CommonModel
|
||||
$rule = "required|trim|min_length[4]|max_length[20]";
|
||||
$rule .= $action == "create" ? "|is_unique[{$this->table}.{$field}]" : "";
|
||||
break;
|
||||
case "passwd":
|
||||
$rule = "required|trim|string";
|
||||
break;
|
||||
case "confirmpassword":
|
||||
$rule = "required|trim|string|matches[passwd]";
|
||||
break;
|
||||
case "email":
|
||||
$rule = "if_exist|trim|valid_email";
|
||||
$rule = "required|trim|valid_email";
|
||||
break;
|
||||
case "role":
|
||||
$rule = "required|trim|string";
|
||||
break;
|
||||
case "passwd":
|
||||
default:
|
||||
$rule = parent::getFieldRule($action, $field);
|
||||
break;
|
||||
}
|
||||
return $rule;
|
||||
}
|
||||
protected function convertEntityData(string $field, array $formDatas): mixed
|
||||
{
|
||||
switch ($field) {
|
||||
case "passwd":
|
||||
$value = password_hash($formDatas[$field], PASSWORD_DEFAULT);
|
||||
break;
|
||||
case "confirmpassword":
|
||||
$value = password_hash($formDatas[$field], PASSWORD_DEFAULT);
|
||||
break;
|
||||
default:
|
||||
$value = parent::convertEntityData($field, $formDatas);
|
||||
break;
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
public function getEntityByPK(string $uid): null|UserEntity
|
||||
{
|
||||
|
||||
@ -1,24 +1,26 @@
|
||||
<?= $this->extend("layouts/{$viewDatas['layout']}/{$viewDatas['action_form']}") ?>
|
||||
<?= $this->section('content') ?>
|
||||
<link href="/css/<?= $viewDatas['layout'] ?>/content.css" media="screen" rel="stylesheet" type="text/css" />
|
||||
<link href="/css/<?= $viewDatas['layout'] ?>/form.css" media="screen" rel="stylesheet" type="text/css" />
|
||||
<?= form_open(current_url(), $viewDatas['forms']['attributes'], $viewDatas['forms']['hiddens']) ?>
|
||||
<table class="action_form table table-bordered">
|
||||
<?php $cnt = 1 ?>
|
||||
<?php foreach ($viewDatas['fields'] as $field): ?>
|
||||
<div class="action_form">
|
||||
<table class=" table table-bordered">
|
||||
<?php $cnt = 1 ?>
|
||||
<?php foreach ($viewDatas['fields'] as $field): ?>
|
||||
<tr>
|
||||
<th nowrap class="text-end"><?= $viewDatas['helper']->getFieldLabel($field, $viewDatas) ?></th>
|
||||
<td nowrap class="text-start">
|
||||
<?= $viewDatas['helper']->getFieldForm($field, old($field), $viewDatas) ?>
|
||||
<div><?= validation_show_error($field); ?></div>
|
||||
</td>
|
||||
<?php $cnt++ ?>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
<tr>
|
||||
<th nowrap class="text-end"><?= $viewDatas['helper']->getFieldLabel($field, $viewDatas) ?></th>
|
||||
<td nowrap class="text-start">
|
||||
<?= $viewDatas['helper']->getFieldForm($field, old($field), $viewDatas) ?>
|
||||
<div><?= validation_show_error($field); ?></div>
|
||||
<td colspan="<?= $cnt * 2 ?>" class="text-center">
|
||||
<?= form_submit('', '입력', array("class" => "btn btn-outline btn-primary")); ?>
|
||||
</td>
|
||||
<?php $cnt++ ?>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
<tr>
|
||||
<td valign=" bottom" colspan="<?= $cnt * 2 ?>">
|
||||
<?= form_submit('', '입력', array("class" => "btn btn-outline btn-primary")); ?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<?= form_close(); ?>
|
||||
</table>
|
||||
<?= form_close(); ?>
|
||||
</div>
|
||||
<?= $this->endSection() ?>
|
||||
@ -1,7 +1,7 @@
|
||||
<?= $this->extend("layouts/{$viewDatas['layout']}") ?>
|
||||
<?= $this->section('content') ?>
|
||||
<link href="/css/<?= $viewDatas['layout'] ?>/index.css" media="screen" rel="stylesheet" type="text/css" />
|
||||
<script type="text/javascript" src="/js/<?= $viewDatas['layout'] ?>/index.js"></script>
|
||||
<link href="/css/common/resizeTable.css" media="screen" rel="stylesheet" type="text/css" />
|
||||
<?= form_open(current_url(), array("method" => "get")) ?>
|
||||
<nav class="index_top navbar navbar-expand-lg">
|
||||
<div class="container-fluid">
|
||||
@ -62,9 +62,9 @@
|
||||
<ul class="nav justify-content-center">
|
||||
<li class="nav-item"><?= form_checkbox(array("id" => "batchjobuids_checkbox")) ?>ALL</li>
|
||||
<?php foreach ($viewDatas['batchjob_fields'] as $field): ?>
|
||||
<?= $viewDatas['helper']->getFieldForm($field, DEFAULTS['EMPTY'], $viewDatas) ?>
|
||||
<?= $viewDatas['helper']->getFieldForm($field, DEFAULTS['EMPTY'], $viewDatas, ["id" => $field]) ?>
|
||||
<?php endforeach ?>
|
||||
<li class="nav-item"><?= form_submit("", '일괄처리', ["class" => "btn btn-outline btn-warning"]) ?></li>
|
||||
<li class="nav-item"><?= $viewDatas['helper']->getListButton('batchjob', $viewDatas) ?></li>
|
||||
<li class="nav-item"><?= $viewDatas['helper']->getListButton('create', $viewDatas) ?></li>
|
||||
</ul>
|
||||
<?= form_close() ?>
|
||||
@ -75,6 +75,29 @@
|
||||
<?= $this->include('templates/' . $viewDatas['layout'] . '/' . $viewDatas['action_form']); ?>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
<link href="/css/common/resizeTable.css" media="screen" rel="stylesheet" type="text/css" />
|
||||
<script>
|
||||
function submitBatchJob() {
|
||||
var validate = false;
|
||||
//batchjob용 선택사항 검증
|
||||
<?php foreach ($viewDatas['batchjob_fields'] as $field): ?>
|
||||
var element = document.getElementById('<?= $field ?>');
|
||||
if (element.options[element.selectedIndex].value != "") {
|
||||
validate = true;
|
||||
}
|
||||
<?php endforeach ?>
|
||||
if (!validate) {
|
||||
alert('변경항목은 하나 이상을 선택하셔야합니다.');
|
||||
return false;
|
||||
}
|
||||
//적용받는 uids가 한개라도 선택되었다면 true
|
||||
var checkboxes = document.querySelectorAll('input[name="batchjob_uids[]"]:checked');
|
||||
if (checkboxes.length === 0) {
|
||||
alert('적용할 리스트를 선택해주세요.');
|
||||
validate = false;
|
||||
}
|
||||
return validate;
|
||||
}
|
||||
</script>
|
||||
<script type="text/javascript" src="/js/common/resizeTable.js"></script>
|
||||
<script type="text/javascript" src="/js/<?= $viewDatas['layout'] ?>/index.js"></script>
|
||||
<?= $this->endSection() ?>
|
||||
@ -1,24 +1,26 @@
|
||||
<?= $this->extend("layouts/{$viewDatas['layout']}/{$viewDatas['action_form']}") ?>
|
||||
<?= $this->section('content') ?>
|
||||
<link href="/css/<?= $viewDatas['layout'] ?>/content.css" media="screen" rel="stylesheet" type="text/css" />
|
||||
<link href="/css/<?= $viewDatas['layout'] ?>/form.css" media="screen" rel="stylesheet" type="text/css" />
|
||||
<?= form_open(current_url(), $viewDatas['forms']['attributes'], $viewDatas['forms']['hiddens']) ?>
|
||||
<table class="action_form table table-bordered">
|
||||
<?php $cnt = 1 ?>
|
||||
<?php foreach ($viewDatas['fields'] as $field): ?>
|
||||
<div class="action_form">
|
||||
<table class="table table-bordered">
|
||||
<?php $cnt = 1 ?>
|
||||
<?php foreach ($viewDatas['fields'] as $field): ?>
|
||||
<tr>
|
||||
<th nowrap class="text-end"><?= $viewDatas['helper']->getFieldLabel($field, $viewDatas) ?></th>
|
||||
<td nowrap class="text-start">
|
||||
<?= $viewDatas['helper']->getFieldForm($field, old($field) ?? $viewDatas['entity']->$field, $viewDatas) ?>
|
||||
<div><?= validation_show_error($field); ?></div>
|
||||
</td>
|
||||
<?php $cnt++ ?>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
<tr>
|
||||
<th nowrap class="text-end"><?= $viewDatas['helper']->getFieldLabel($field, $viewDatas) ?></th>
|
||||
<td nowrap class="text-start">
|
||||
<?= $viewDatas['helper']->getFieldForm($field, old($field) ?? $viewDatas['entity']->$field, $viewDatas) ?>
|
||||
<div><?= validation_show_error($field); ?></div>
|
||||
<td colspan="<?= $cnt * 2 ?>" class="text-center">
|
||||
<?= form_submit('', '수정', array("class" => "btn btn-outline btn-primary")); ?>
|
||||
</td>
|
||||
<?php $cnt++ ?>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
<tr>
|
||||
<td valign=" bottom" colspan="<?= $cnt * 2 ?>">
|
||||
<?= form_submit('', '수정', array("class" => "btn btn-outline btn-primary")); ?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<?= form_close(); ?>
|
||||
</table>
|
||||
<?= form_close(); ?>
|
||||
</div>
|
||||
<?= $this->endSection() ?>
|
||||
@ -27,8 +27,7 @@
|
||||
<b><?= ICONS['LOGIN'] . $viewDatas['session']->get(SESSION_NAMES['AUTH'])['name'] ?></b>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<?php $viewDatas['list_action_url'] = "/admin/user/modify/" . $viewDatas['session']->get(SESSION_NAMES['AUTH'])['uid'] ?>
|
||||
<li><?= $viewDatas['helper']->getListButtonLink("modify", ICONS['SETUP'] . "정보수정", $viewDatas, ["class" => "dropdown-item"]) ?></li>
|
||||
<li><?= $viewDatas['helper']->getListButtonLink("/admin/user/modify/" . $viewDatas['session']->get(SESSION_NAMES['AUTH'])['uid'], ICONS['SETUP'] . "정보수정", $viewDatas, ["class" => "dropdown-item"]) ?></li>
|
||||
<li>
|
||||
<hr class="dropdown-divider">
|
||||
</li>
|
||||
|
||||
@ -27,8 +27,7 @@
|
||||
<b><?= ICONS['LOGIN'] . $viewDatas['session']->get(SESSION_NAMES['AUTH'])['name'] ?></b>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<?php $viewDatas['list_action_url'] = "/admin/user/modify/" . $viewDatas['session']->get(SESSION_NAMES['AUTH'])['uid'] ?>
|
||||
<li><?= $viewDatas['helper']->getListButtonLink("modify", ICONS['SETUP'] . "정보수정", $viewDatas, ["class" => "dropdown-item"]) ?></li>
|
||||
<li><?= $viewDatas['helper']->getListButtonLink("/user/modify/" . $viewDatas['session']->get(SESSION_NAMES['AUTH'])['uid'], ICONS['SETUP'] . "정보수정", $viewDatas, ["class" => "dropdown-item"]) ?></li>
|
||||
<li>
|
||||
<hr class="dropdown-divider">
|
||||
</li>
|
||||
|
||||
28
public/css/admin/form.css
Normal file
28
public/css/admin/form.css
Normal file
@ -0,0 +1,28 @@
|
||||
/* create,modify,view 페이지용 */
|
||||
div.action_form {
|
||||
/* 블록 요소로 변경 */
|
||||
margin-left: auto;
|
||||
/* 자동 여백을 이용한 가로 가운데 정렬 */
|
||||
margin-right: auto;
|
||||
/* 자동 여백을 이용한 가로 가운데 정렬 */
|
||||
/* border: 1px solid blue; */
|
||||
/* table-layout: fixed; 고정 레이아웃 */
|
||||
border-collapse: collapse;
|
||||
/* 테두리 결합 */
|
||||
}
|
||||
|
||||
div.action_form table {}
|
||||
|
||||
div.action_form table th {
|
||||
background-color: #f0f0f0;
|
||||
}
|
||||
|
||||
div.action_form table td {
|
||||
text-align: center;
|
||||
word-wrap: break-word;
|
||||
/* 긴 단어 강제 줄바꿈 */
|
||||
white-space: normal;
|
||||
/* 자동 줄바꿈 */
|
||||
}
|
||||
|
||||
/* create,modify,view 페이지용 */
|
||||
28
public/css/front/form.css
Normal file
28
public/css/front/form.css
Normal file
@ -0,0 +1,28 @@
|
||||
/* create,modify,view 페이지용 */
|
||||
div.action_form {
|
||||
/* 블록 요소로 변경 */
|
||||
margin-left: auto;
|
||||
/* 자동 여백을 이용한 가로 가운데 정렬 */
|
||||
margin-right: auto;
|
||||
/* 자동 여백을 이용한 가로 가운데 정렬 */
|
||||
/* border: 1px solid blue; */
|
||||
/* table-layout: fixed; 고정 레이아웃 */
|
||||
border-collapse: collapse;
|
||||
/* 테두리 결합 */
|
||||
}
|
||||
|
||||
div.action_form table {}
|
||||
|
||||
div.action_form table th {
|
||||
background-color: #f0f0f0;
|
||||
}
|
||||
|
||||
div.action_form table td {
|
||||
text-align: center;
|
||||
word-wrap: break-word;
|
||||
/* 긴 단어 강제 줄바꿈 */
|
||||
white-space: normal;
|
||||
/* 자동 줄바꿈 */
|
||||
}
|
||||
|
||||
/* create,modify,view 페이지용 */
|
||||
Loading…
Reference in New Issue
Block a user