cfmgrv4 init...10

This commit is contained in:
최준흠 2025-06-06 14:47:59 +09:00
parent 33948d56c1
commit 30839cbc7f
9 changed files with 1 additions and 382 deletions

View File

@ -53,14 +53,6 @@ $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'au
$routes->post('batchjob_delete', 'UserController::batchjob_delete');
$routes->get('download/(:alpha)', 'UserController::download/$1');
});
$routes->group('usersns', ['namespace' => 'App\Controllers\Admin', 'filter' => 'authFilter:master'], function ($routes) {
$routes->get('/', 'UserSNSController::index');
$routes->get('delete/(:num)', 'UserSNSController::delete/$1');
$routes->get('toggle/(:num)/(:any)', 'UserSNSController::toggle/$1/$2');
$routes->post('batchjob', 'UserSNSController::batchjob');
$routes->post('batchjob_delete', 'UserSNSController::batchjob_delete');
$routes->get('download/(:alpha)', 'UserSNSController::download/$1');
});
$routes->group('mapurl', ['namespace' => 'App\Controllers\Admin'], function ($routes) {
$routes->get('/', 'MapurlController::index');
$routes->get('create', 'MapurlController::create_form');

View File

@ -1,62 +0,0 @@
<?php
namespace App\Controllers\Admin;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
use App\Helpers\UserSNSHelper;
use App\Models\UserModel;
use App\Services\UserSNSService;
class UserSNSController extends AdminController
{
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
parent::initController($request, $response, $logger);
$this->title = lang("{$this->getService()->getClassPath()}.title");
$this->helper = new UserSNSHelper();
}
protected function getService(): UserSNSService
{
if ($this->service === null) {
$this->service = new UserSNSService();
$this->class_name = $this->service->getClassName();
$this->class_path = $this->service->getClassPath();
}
return $this->service;
}
protected function getFormFieldOption(string $field, array $options = []): array
{
switch ($field) {
case $this->getService()->getModel()::PARENT:
$userModel = model(UserModel::class);
// $this->getUserModel()->where('status', DEFAULTS['STATUS']);
$options[$field] = $userModel->getFormFieldOption($field);
// echo $this->getUserModel()->getLastQuery();
// dd($options);
break;
default:
$options = parent::getFormFieldOption($field, $options);
break;
}
return $options;
}
//생성
protected function create_init(string $action, $fields = []): void
{
$fields = [
'fields' => [$this->getService()->getModel()::PARENT, 'site', 'id', $this->getService()->getModel()::TITLE, 'email'],
];
parent::create_init($action, fields: $fields);
}
//수정
protected function modify_init(string $action, $fields = []): void
{
$fields = [
'fields' => [$this->getService()->getModel()::PARENT, 'site', 'id', $this->getService()->getModel()::TITLE, 'email', 'status'],
];
parent::modify_init($action, $fields);
}
}

View File

@ -1,43 +0,0 @@
<?php
namespace App\Entities;
use App\Entities\CommonEntity;
use App\Models\UserSNSModel;
class UserSNSEntity extends CommonEntity
{
public function __toString(): string
{
return "{$this->getPK()}|{$this->getID()}|{$this->getTitle()}";
}
public function getPK(): int
{
return $this->attributes[UserSNSModel::PK];
}
public function getTitle(): string
{
return $this->attributes[UserSNSModel::TITLE];
}
public function setTitle(string $title): void
{
$this->attributes[UserSNSModel::TITLE] = $title;
}
//Common Function
public function getParent(): int|null
{
return $this->attributes[UserSNSModel::PARENT];
}
public function getID(): string
{
return $this->attributes['id'];
}
public function getSite(): string
{
return $this->attributes['site'];
}
public function getEmail(): string
{
return $this->attributes['email'];
}
}

View File

@ -1,92 +0,0 @@
<?php
namespace App\Helpers;
use App\Models\UserSNSModel;
class UserSNSHelper extends CommonHelper
{
public function __construct()
{
parent::__construct();
}
public function getFieldForm(string $field, mixed $value, array $viewDatas, array $extras = []): string
{
if (in_array($viewDatas['action'], ['create', 'modify'])) {
$extras = (strpos($viewDatas['field_rules'][$field], 'required') !== false) ? ["class" => "form-control", "required" => "", ...$extras] : ["class" => "form-control", ...$extras];
}
$value = $value ?: DEFAULTS['EMPTY'];
switch ($field) {
case UserSNSModel::PARENT:
$extra_class = isset($extras['class']) ? $extras['class'] . ' select-field' : 'select-field';
$form = form_dropdown($field, [
"" => lang($viewDatas['class_path'] . '.label.' . $field) . ' 선택',
] + $viewDatas['field_options'][$field], $value, ['class' => $extra_class, ...array_diff_key($extras, ['class' => ''])]);
break;
case 'id':
case UserSNSModel::TITLE:
$form = form_input($field, $value, $extras);
break;
case 'email':
$form = form_input($field, $value, ["placeholder" => "예)test@example.com", ...$extras]);
break;
case 'detail':
$form = form_textarea($field, $value == DEFAULTS['EMPTY'] ? "@\n*\nm\nwww" : $value, [
'rows' => '20',
...$extras
]);
break;
default:
$form = parent::getFieldForm($field, $value, $viewDatas, $extras);
break;
}
return $form;
} //
public function getFieldView(string $field, array $viewDatas, array $extras = []): string
{
$value = $viewDatas['entity']->$field ?: DEFAULTS['EMPTY'];
switch ($field) {
case UserSNSModel::TITLE:
$value = form_label(
$value,
'view',
[
"data-src" => current_url() . '/view/' . $viewDatas['entity']->getPK(),
"data-bs-toggle" => "modal",
"data-bs-target" => "#index_action_form",
"style" => "color: blue; cursor: pointer; font-weight:bold;",
...$extras,
]
);
break;
default:
$value = parent::getFieldView($field, $viewDatas, $extras);
break;
}
return $value;
} //
public function getListButton(string $action, array $viewDatas, array $extras = []): string
{
switch ($action) {
case 'create':
$action = "";
break;
case 'modify':
$action = $viewDatas['cnt'];
break;
case 'delete':
$action = "";
break;
case 'batchjob':
$action = "";
break;
case 'batchjob_delete':
$action = "";
break;
default:
$action = parent::getListButton($action, $viewDatas, $extras);
break;
}
return $action;
}
}

View File

@ -1,20 +0,0 @@
<?php
return [
'title' => "SNS 계정정보",
'label' => [
'uid' => "번호",
'user_uid' => "local계정",
'site' => "사이트",
'id' => "계정",
'name' => "이름",
'email' => "메일",
'detail' => "상세정보",
'status' => "상태",
'updated_at' => "수정일",
'created_at' => "작성일",
],
"STATUS" => [
"use" => "사용",
"unuse" => "승인대기",
],
];

View File

@ -1,110 +0,0 @@
<?php
namespace App\Models;
use App\Entities\UserSNSEntity;
use App\Models\CommonModel;
class UserSNSModel extends CommonModel
{
const TABLE = "user_sns";
const PK = "uid";
const TITLE = "name";
const PARENT = "user_uid";
const SITE = "site";
protected $table = self::TABLE;
protected $primaryKey = self::PK;
protected $returnType = UserSNSEntity::class;
protected $allowedFields = [
"site",
"user_uid",
"id",
"name",
"email",
"detail",
"status"
];
public function __construct()
{
parent::__construct();
}
public function getTitleField(): string
{
return self::TITLE;
}
public function getFields(): array
{
return [self::PARENT, 'site', 'id', self::TITLE, 'email'];
}
public function getFilterFields(): array
{
return [self::PARENT, 'status'];
}
public function getBatchJobFields(): array
{
return [];
}
public function getFieldRule(string $action, string $field): string
{
switch ($field) {
case "id":
$rule = "required|trim|min_length[4]|is_unique[{$this->table}.{$field}]";
break;
case $this->getTitleField():
$rule = "required|trim|string";
break;
case "site":
$rule = "required|trim|string";
break;
case "email":
$rule = "required|trim|valid_email";
break;
case "detail":
$rule = "required|trim|string";
break;
default:
$rule = parent::getFieldRule($action, $field);
break;
}
return $rule;
}
protected function convertEntityData(string $field, array $formDatas): mixed
{
switch ($field) {
case "detail": //content등 textarea를 사용한 Field
$value = htmlentities($formDatas[$field], ENT_QUOTES);
break;
default:
$value = parent::convertEntityData($field, $formDatas);
break;
}
return $value;
}
public function getEntityByPK(string $uid): null|UserSNSEntity
{
$this->where($this->getPKField(), intval($uid));
return $this->getEntity();
}
public function getEntityByID(string $id): null|UserSNSEntity
{
$this->where('id', $id);
return $this->getEntity();
}
//create용
public function create(array $formDatas = []): UserSNSEntity
{
return $this->create_process(new UserSNSEntity(), $formDatas);
}
//modify용
public function modify(UserSNSEntity $entity, array $formDatas): UserSNSEntity
{
return $this->modify_process($entity, $formDatas);
}
//List 검색용
public function setList_WordFilter(string $word): void
{
$this->orLike(self::TABLE . '.id', $word, 'both');
$this->orLike(self::TABLE . "." . self::TITLE, $word, 'both');
$this->orLike(self::TABLE . '.email', $word, 'both');
}
}

View File

@ -18,7 +18,7 @@ class ZoneService extends CloudflareService
'ipv6' => 'off',
'security_level' => 'medium',
'ssl' => 'flexible',
'always_use_https' => 'off'
// 'always_use_https' => 'off'
];
public function __construct()

View File

@ -1,43 +0,0 @@
<?php
namespace App\Services;
use App\Models\UserSNSModel;
use App\Entities\UserSNSEntity;
use Google\Service\AndroidEnterprise\Resource\Users;
class UserSNSService extends CommonService
{
private ?UserSNSModel $_model = null;
public function __construct()
{
parent::__construct();
}
final public function getClassName(): string
{
return "UserSNS";
}
final public function getClassPath(): string
{
return $this->getClassName();
}
public function getModel(): UserSNSModel
{
if ($this->_model === null) {
$this->_model = new UserSNSModel();
}
return $this->_model;
}
public function create(array $formDatas): UserSNSEntity
{
return $this->getModel()->create($formDatas);
}
public function modify(UserSNSEntity $entity, array $formDatas): UserSNSEntity
{
return $this->getModel()->modify($entity, $formDatas);
}
public function delete(UserSNSEntity $entity): void
{
$this->getModel()->delete($entity->getPK());
}
}

View File

@ -1,9 +1,6 @@
<div class="accordion-item">
<a href="/admin/user"><?= ICONS['MEMBER'] ?>계정 관리</a>
</div>
<div class="accordion-item">
<a href="/admin/usersns"><?= ICONS['GOOGLE'] ?> SNS 계정 관리</a>
</div>
<div class="accordion-item">
<a href="/admin/mylog"><?= ICONS['FLAG'] ?> Log 관리</a>
</div>