vhost init...3
This commit is contained in:
parent
e54d0b72af
commit
f2457ea0e8
@ -18,7 +18,7 @@ class BoardCell extends BaseCell
|
||||
$viewDatas['currentCategory'] = $this->getCategoryModel()->getEntity([$this->getCategoryModel()->getPrimaryKey() => __FUNCTION__]);
|
||||
$viewDatas['cellDatas'] = array();
|
||||
$viewDatas['cellDatas']['entitys'] = $this->getBoardModel()->getEntitys([
|
||||
'category_uid' => __FUNCTION__
|
||||
'category' => __FUNCTION__
|
||||
]);
|
||||
return view(
|
||||
'Views/front/board/cell/' . __FUNCTION__,
|
||||
|
||||
@ -238,6 +238,7 @@ define('CLASS_ICONS', [
|
||||
'SITEPAGE' => '<i class="bi bi-body-text"></i>',
|
||||
'CATEGORY' => '<i class="bi bi-boxes"></i>',
|
||||
'PRODUCT' => '<i class="bi bi-box2"></i>',
|
||||
'DEVICE' => '<i class="bi bi-gear"></i>',
|
||||
'ORDER' => '<i class="bi bi-clipboard-check"></i>',
|
||||
'BILLING' => '<i class="bi bi-clipboard-check"></i>',
|
||||
'CART' => '<i class="bi bi-cart4"></i>',
|
||||
|
||||
@ -103,6 +103,18 @@ $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'au
|
||||
$routes->get('toggle/(:num)/(:hash)', 'SitepageController::toggle/$1/$2');
|
||||
$routes->post('batchjob', 'SitepageController::batchjob');
|
||||
});
|
||||
$routes->group('device', static function ($routes) {
|
||||
$routes->get('', 'DeviceController::index');
|
||||
$routes->get('excel', 'DeviceController::excel');
|
||||
$routes->get('insert', 'DeviceController::insert_form');
|
||||
$routes->post('insert', 'DeviceController::insert');
|
||||
$routes->get('update/(:uuid)', 'DeviceController::update_form/$1');
|
||||
$routes->post('update/(:uuid)', 'DeviceController::update/$1');
|
||||
$routes->get('view/(:uuid)', 'DeviceController::view/$1');
|
||||
$routes->get('delete/(:uuid)', 'DeviceController::delete/$1', ['filter' => 'authFilter:master']);
|
||||
$routes->get('toggle/(:uuid)/(:hash)', 'DeviceController::toggle/$1/$2');
|
||||
$routes->post('batchjob', 'DeviceController::batchjob');
|
||||
});
|
||||
$routes->group('product', static function ($routes) {
|
||||
$routes->get('', 'ProductController::index');
|
||||
$routes->get('excel', 'ProductController::excel');
|
||||
|
||||
@ -25,14 +25,14 @@ class BoardController extends AdminController
|
||||
|
||||
public function getFields(string $action = ""): array
|
||||
{
|
||||
$fields = ["category_uid", 'title', "board_file", "passwd", "status", "content"];
|
||||
$fields = ["category", 'title', "board_file", "passwd", "status", "content"];
|
||||
switch ($action) {
|
||||
case "index":
|
||||
case "excel":
|
||||
return ["category_uid", "user_uid", 'title', "board_file", "view_cnt", "status", "created_at"];
|
||||
return ["category", "user_uid", 'title', "board_file", "view_cnt", "status", "created_at"];
|
||||
break;
|
||||
case "view":
|
||||
return ["category_uid", "user_uid", 'title', "board_file", "view_cnt", "status", "created_at", "content"];
|
||||
return ["category", "user_uid", 'title', "board_file", "view_cnt", "status", "created_at", "content"];
|
||||
break;
|
||||
default:
|
||||
return $fields;
|
||||
@ -41,7 +41,7 @@ class BoardController extends AdminController
|
||||
}
|
||||
public function getFieldFilters(): array
|
||||
{
|
||||
return ["category_uid", "user_uid", "status"];
|
||||
return ["category", "user_uid", "status"];
|
||||
}
|
||||
public function getFieldBatchFilters(): array
|
||||
{
|
||||
@ -66,7 +66,7 @@ class BoardController extends AdminController
|
||||
|
||||
private function build_notice()
|
||||
{
|
||||
$entitys = $this->_model->getEntitys(['category_uid' => $this->_category_notice, 'status' => DEFAULTS['STATUS']]);
|
||||
$entitys = $this->_model->getEntitys(['category' => $this->_category_notice, 'status' => DEFAULTS['STATUS']]);
|
||||
$temps = array("<ul>");
|
||||
foreach ($entitys as $entity) {
|
||||
array_push($temps, sprintf(
|
||||
@ -86,7 +86,7 @@ class BoardController extends AdminController
|
||||
protected function insert_process()
|
||||
{
|
||||
$entity = parent::insert_process();
|
||||
if ($entity->category_uid == $this->_category_notice) {
|
||||
if ($entity->category == $this->_category_notice) {
|
||||
$this->build_notice();
|
||||
}
|
||||
return $entity;
|
||||
@ -95,7 +95,7 @@ class BoardController extends AdminController
|
||||
protected function update_process($entity)
|
||||
{
|
||||
$entity = parent::update_process($entity);
|
||||
if ($entity->category_uid == $this->_category_notice) {
|
||||
if ($entity->category == $this->_category_notice) {
|
||||
$this->build_notice();
|
||||
}
|
||||
return $entity;
|
||||
@ -104,7 +104,7 @@ class BoardController extends AdminController
|
||||
protected function toggle_process($entity)
|
||||
{
|
||||
$entity = parent::toggle_process($entity);
|
||||
if ($entity->category_uid == $this->_category_notice) {
|
||||
if ($entity->category == $this->_category_notice) {
|
||||
$this->build_notice();
|
||||
}
|
||||
return $entity;
|
||||
@ -113,7 +113,7 @@ class BoardController extends AdminController
|
||||
protected function delete_process($entity)
|
||||
{
|
||||
$entity = parent::delete_process($entity);
|
||||
if ($entity->category_uid->$this->_category_notice) {
|
||||
if ($entity->category->$this->_category_notice) {
|
||||
$this->build_notice();
|
||||
}
|
||||
return $entity;
|
||||
|
||||
47
app/Controllers/Admin/DeviceController.php
Normal file
47
app/Controllers/Admin/DeviceController.php
Normal file
@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controllers\Admin;
|
||||
|
||||
use App\Models\DeviceModel;
|
||||
use CodeIgniter\HTTP\RequestInterface;
|
||||
use CodeIgniter\HTTP\ResponseInterface;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
class DeviceController extends AdminController
|
||||
{
|
||||
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
|
||||
{
|
||||
parent::initController($request, $response, $logger);
|
||||
$this->_model = new DeviceModel();
|
||||
$this->_viewDatas["className"] = "Device";
|
||||
$this->_viewPath .= strtolower($this->_viewDatas["className"]);
|
||||
$this->_viewDatas["title"] = lang($this->_viewDatas["className"] . ".title");
|
||||
$this->_viewDatas["class_icon"] = CLASS_ICONS[strtoupper($this->_viewDatas["className"])];
|
||||
helper($this->_viewDatas["className"]);
|
||||
}
|
||||
|
||||
public function getFields(string $action = ""): array
|
||||
{
|
||||
$fields = ["type", "name", "cost", "price", "sale", "stock", "status", "content",];
|
||||
switch ($action) {
|
||||
case "index":
|
||||
case "excel":
|
||||
return ["type", "name", "cost", "price", "sale", "stock", "status", "created_at"];
|
||||
break;
|
||||
case "view":
|
||||
return [...$fields, "created_at"];
|
||||
break;
|
||||
default:
|
||||
return $fields;
|
||||
break;
|
||||
}
|
||||
}
|
||||
public function getFieldFilters(): array
|
||||
{
|
||||
return ["type", "status"];
|
||||
}
|
||||
public function getFieldBatchFilters(): array
|
||||
{
|
||||
return parent::getFieldBatchFilters();
|
||||
}
|
||||
}
|
||||
@ -22,14 +22,14 @@ class SitepageController extends AdminController
|
||||
|
||||
public function getFields(string $action = ""): array
|
||||
{
|
||||
$fields = ["category_uid", 'title', "status", "content"];
|
||||
$fields = ["category", 'title', "status", "content"];
|
||||
switch ($action) {
|
||||
case "index":
|
||||
case "excel":
|
||||
return ["category_uid", "user_uid", 'title', "status", "created_at"];
|
||||
return ["category", "user_uid", 'title', "status", "created_at"];
|
||||
break;
|
||||
case "view":
|
||||
return ["category_uid", "user_uid", 'title', "status", "created_at", "content"];
|
||||
return ["category", "user_uid", 'title', "status", "created_at", "content"];
|
||||
break;
|
||||
default:
|
||||
return $fields;
|
||||
@ -38,7 +38,7 @@ class SitepageController extends AdminController
|
||||
}
|
||||
public function getFieldFilters(): array
|
||||
{
|
||||
return ["category_uid", "user_uid", "status"];
|
||||
return ["category", "user_uid", "status"];
|
||||
}
|
||||
public function getFieldBatchFilters(): array
|
||||
{
|
||||
|
||||
@ -42,7 +42,6 @@ DROP TABLE IF EXISTS vhost.tw_category;
|
||||
|
||||
CREATE TABLE vhost.tw_category (
|
||||
uid varchar(50) NOT NULL,
|
||||
classname varchar(50) NOT NULL DEFAULT 'Sitepage',
|
||||
grpno int(10) unsigned NOT NULL DEFAULT 1 COMMENT 'Group번호: 상위가없을시 기본 uid와 같음,항상 숫자여야함',
|
||||
grporder int(5) unsigned NOT NULL DEFAULT 1 COMMENT 'Group순서: 상위가없을시 1부터시작',
|
||||
grpdepth int(3) unsigned NOT NULL DEFAULT 1 COMMENT 'Group깊이: 상위가없을시 1부터시작 , 상위 grpdepth+1씩 추가필요',
|
||||
@ -77,7 +76,7 @@ CREATE TABLE vhost.tw_board (
|
||||
grporder int(5) UNSIGNED NOT NULL DEFAULT 1 COMMENT 'Group순서: 상위가없을시 1부터시작',
|
||||
grpdepth int(3) UNSIGNED NOT NULL DEFAULT 1 COMMENT 'Group깊이: 상위가없을시 1부터시작 , 상위 grpdepth+1씩 추가필요',
|
||||
parent int(10) UNSIGNED NULL COMMENT '부모UID',
|
||||
category_uid varchar(50) NOT NULL COMMENT '범주_UID',
|
||||
category varchar(20) NOT NULL COMMENT '구분',
|
||||
user_uid varchar(36) NULL COMMENT '작성자 정보',
|
||||
title varchar(255) NOT NULL COMMENT '제목',
|
||||
content text NOT NULL COMMENT '내용',
|
||||
@ -89,15 +88,14 @@ CREATE TABLE vhost.tw_board (
|
||||
created_at timestamp NOT NULL DEFAULT current_timestamp(),
|
||||
deleted_at timestamp NULL DEFAULT NULL,
|
||||
PRIMARY KEY (uid),
|
||||
CONSTRAINT FOREIGN KEY (category_uid) REFERENCES tw_category (uid),
|
||||
CONSTRAINT FOREIGN KEY (user_uid) REFERENCES tw_user (uid)
|
||||
CONSTRAINT tw_board_ibfk_1 FOREIGN KEY (user_uid) REFERENCES tw_user (uid)
|
||||
) ENGINE = InnoDB CHARSET = utf8 COLLATE = utf8_general_ci COMMENT = '게시물 정보';
|
||||
|
||||
DROP TABLE IF EXISTS vhost.tw_sitepage;
|
||||
|
||||
CREATE TABLE vhost.tw_sitepage (
|
||||
uid int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
category_uid varchar(50) NOT NULL COMMENT '범주_UID',
|
||||
category varchar(20) NOT NULL COMMENT '구분',
|
||||
user_uid varchar(36) DEFAULT NULL COMMENT '작성자 정보',
|
||||
title varchar(255) NOT NULL COMMENT '제목',
|
||||
content text NOT NULL COMMENT '내용',
|
||||
@ -108,8 +106,7 @@ CREATE TABLE vhost.tw_sitepage (
|
||||
PRIMARY KEY (uid),
|
||||
KEY category_uid (category_uid),
|
||||
KEY user_uid (user_uid),
|
||||
CONSTRAINT tw_sitepage_ibfk_1 FOREIGN KEY (category_uid) REFERENCES tw_category (uid),
|
||||
CONSTRAINT tw_sitepage_ibfk_2 FOREIGN KEY (user_uid) REFERENCES tw_user (uid)
|
||||
CONSTRAINT tw_sitepage_ibfk_1 FOREIGN KEY (user_uid) REFERENCES tw_user (uid)
|
||||
) ENGINE = InnoDB CHARSET = utf8 COLLATE = utf8_general_ci COMMENT '사이트페이지';
|
||||
|
||||
DROP TABLE IF EXISTS vhost.tw_product;
|
||||
@ -127,7 +124,7 @@ CREATE TABLE vhost.tw_product (
|
||||
stock int(5) unsigned NOT NULL DEFAULT 1 COMMENT '재고수량',
|
||||
view_cnt int(4) unsigned NOT NULL DEFAULT 1 COMMENT '조회수',
|
||||
content text NOT NULL COMMENT '상품내용',
|
||||
status varchar(10) NOT NULL DEFAULT 'use' COMMENT 'use: 판매, unuse: 판매않함, soldout:상품부족 등등',
|
||||
status varchar(10) NOT NULL DEFAULT 'use' COMMENT 'use: 판매, unuse: 판매중지, soldout:매진, outofstock:재고부족 등등',
|
||||
updated_at timestamp NULL DEFAULT NULL,
|
||||
created_at timestamp NOT NULL DEFAULT current_timestamp(),
|
||||
deleted_at timestamp NULL DEFAULT NULL,
|
||||
@ -148,8 +145,8 @@ CREATE TABLE vhost.tw_device (
|
||||
price int(10) unsigned NOT NULL DEFAULT 0 COMMENT '판매가',
|
||||
sale int(10) unsigned NOT NULL DEFAULT 0 COMMENT '할인가',
|
||||
stock int(5) unsigned NOT NULL DEFAULT 1 COMMENT '재고수량',
|
||||
status varchar(10) NOT NULL DEFAULT 'use' COMMENT 'use: 판매중 unuse: 판매않함, soldout:상품부족 등등',
|
||||
content text NOT NULL COMMENT '장비내용',
|
||||
status varchar(10) NOT NULL DEFAULT 'use' COMMENT 'use: 판매중 unuse: 판매중지, soldout:매진, outofstock:재고부족 등등',
|
||||
updated_at timestamp NULL DEFAULT NULL,
|
||||
created_at timestamp NOT NULL DEFAULT current_timestamp(),
|
||||
deleted_at timestamp NULL DEFAULT NULL,
|
||||
|
||||
BIN
app/Database/vhost-20240515.sql
Normal file
BIN
app/Database/vhost-20240515.sql
Normal file
Binary file not shown.
17
app/Entities/DeviceEntity.php
Normal file
17
app/Entities/DeviceEntity.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace App\Entities;
|
||||
|
||||
class DeviceEntity extends BaseEntity
|
||||
{
|
||||
protected $datamap = [];
|
||||
protected $dates = ['created_at', 'updated_at', 'deleted_at'];
|
||||
protected $casts = [];
|
||||
|
||||
//기본기능
|
||||
public function getTitle(): string
|
||||
{
|
||||
return $this->attributes['name'];
|
||||
}
|
||||
//추가기능
|
||||
}
|
||||
@ -45,6 +45,7 @@ function getFieldForm_BoardHelper($field, $value, array $viewDatas, array $attri
|
||||
case 'view_cnt':
|
||||
return form_input($field, $value, ['type' => 'number']);
|
||||
break;
|
||||
case "category":
|
||||
case "status":
|
||||
$viewDatas['fieldFormOptions'][$field] = [DEFAULTS['EMPTY'] => lang("{$viewDatas['className']}.label.{$field}") . " 선택", ...$viewDatas['fieldFormOptions'][$field]];
|
||||
return form_dropdown($field, $viewDatas['fieldFormOptions'][$field], $value, $attributes);
|
||||
|
||||
163
app/Helpers/Device_helper.php
Normal file
163
app/Helpers/Device_helper.php
Normal file
@ -0,0 +1,163 @@
|
||||
<?php
|
||||
function getFieldLabel_DeviceHelper($field, array $viewDatas): string
|
||||
{
|
||||
$attributes = [];
|
||||
switch ($field) {
|
||||
default:
|
||||
if (strpos($viewDatas['fieldRules'][$field], 'required') !== false) {
|
||||
$attributes = ['style="color:red";'];
|
||||
}
|
||||
return sprintf("<span %s>%s</span>", implode(" ", $attributes), lang("{$viewDatas['className']}.label.{$field}"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
//header.php에서 getFieldForm_Helper사용
|
||||
function getFieldForm_DeviceHelper($field, $value, array $viewDatas, array $attributes = array())
|
||||
{
|
||||
$value = $value ?: DEFAULTS['EMPTY'];
|
||||
switch ($field) {
|
||||
case 'category_uid':
|
||||
case 'user_uid':
|
||||
$viewDatas['fieldFormOptions'][$field] = [DEFAULTS['EMPTY'] => lang("{$viewDatas['className']}.label.{$field}") . " 선택", ...$viewDatas['fieldFormOptions'][$field]];
|
||||
return form_dropdown($field, $viewDatas['fieldFormOptions'][$field], $value, [...$attributes, 'class' => "select-field"]);
|
||||
// // return form_multiselect($field, $fieldFormOptions[$field], is_array($value) ? [...$value] : [$value], [...$attributes]);
|
||||
// foreach ($viewDatas['fieldFormOptions'][$field] as $key => $label) {
|
||||
// $checkboxs[] = form_checkbox("{$field}[]", $key, in_array($key, explode(DEFAULTS["DELIMITER_ROLE"], $value))) . $label;
|
||||
// }
|
||||
// return implode(" ", $checkboxs);
|
||||
break;
|
||||
case 'title':
|
||||
case 'name':
|
||||
return form_input($field, $value, ["placeholder" => "예)", "style" => "width:60%; ::placeholder{ color:silver; opacity: 1; }"]);
|
||||
break;
|
||||
case 'content':
|
||||
case 'head':
|
||||
case 'tail':
|
||||
return form_textarea($field, html_entity_decode($value), ['class' => 'editor', 'rows' => '20', 'cols' => '100']);
|
||||
break;
|
||||
case "status":
|
||||
case "type":
|
||||
$viewDatas['fieldFormOptions'][$field] = [DEFAULTS['EMPTY'] => lang("{$viewDatas['className']}.label.{$field}") . " 선택", ...$viewDatas['fieldFormOptions'][$field]];
|
||||
return form_dropdown($field, $viewDatas['fieldFormOptions'][$field], $value, $attributes);
|
||||
break;
|
||||
case 'updated_at':
|
||||
case 'created_at':
|
||||
return form_input($field, $value, ['class' => 'calender']);
|
||||
break;
|
||||
default:
|
||||
return form_input($field, $value);
|
||||
break;
|
||||
}
|
||||
} //
|
||||
|
||||
function getFieldView_DeviceHelper($field, $entity, array $viewDatas)
|
||||
{
|
||||
$value = $entity->$field ?: DEFAULTS['EMPTY'];
|
||||
switch ($field) {
|
||||
case 'category_uid':
|
||||
foreach (array_values($viewDatas['fieldFormOptions'][$field]) as $category_2depths) {
|
||||
foreach ($category_2depths as $key => $label) {
|
||||
if ($key == $value) {
|
||||
return $label;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $value;
|
||||
break;
|
||||
case 'cost':
|
||||
case 'price':
|
||||
case 'sale':
|
||||
return number_format(!$value ? 0 : $value) . "원";
|
||||
break;
|
||||
case 'stock':
|
||||
case 'view_cnt':
|
||||
return number_format(!$value ? 0 : $value);
|
||||
break;
|
||||
case 'content':
|
||||
return html_entity_decode($value);
|
||||
break;
|
||||
case 'updated_at':
|
||||
case 'created_at':
|
||||
return $value ? str_split($value, 10)[0] : "";
|
||||
break;
|
||||
default:
|
||||
return in_array($field, $viewDatas['fieldFilters']) && $value ? $viewDatas['fieldFormOptions'][$field][$value] : $value;
|
||||
break;
|
||||
}
|
||||
} //
|
||||
|
||||
function getFieldFilter_DeviceHelper($field, $value, array $viewDatas)
|
||||
{
|
||||
$viewDatas['fieldFormOptions'][$field] = [DEFAULTS['EMPTY'] => lang("{$viewDatas['className']}.label.{$field}") . " 선택", ...$viewDatas['fieldFormOptions'][$field]];
|
||||
return form_dropdown($field, $viewDatas['fieldFormOptions'][$field], $value, ['class' => "select-field"]);
|
||||
} //
|
||||
|
||||
function getFieldIndex_Column_DeviceHelper($field, array $viewDatas)
|
||||
{
|
||||
$label = lang("{$viewDatas['className']}.label.{$field}");
|
||||
if ($field == $viewDatas['order_field']) {
|
||||
$label .= $viewDatas['order_value'] == 'ASC' ? ICONS['UP'] : ICONS['DOWN'];
|
||||
}
|
||||
$value = $viewDatas['order_value'] == 'DESC' ? "ASC" : "DESC";
|
||||
$viewDatas['uri']->addQuery('order_field', $field);
|
||||
$viewDatas['uri']->addQuery('order_value', $value);
|
||||
$columnData = anchor((string)$viewDatas['uri'], $label);
|
||||
switch ($field) {
|
||||
case 'title':
|
||||
case 'name':
|
||||
return sprintf("<th class='col-4'>%s</th>", $columnData);
|
||||
break;
|
||||
default:
|
||||
return sprintf("<th>%s</th>", $columnData);
|
||||
break;
|
||||
}
|
||||
} //
|
||||
|
||||
//Front용
|
||||
function getFieldIndex_Row_DeviceHelper($field, $entity, array $viewDatas): string
|
||||
{
|
||||
$value = $entity->$field ?: DEFAULTS['EMPTY'];
|
||||
//front는 table을 사용하지 않는 점 주의
|
||||
switch ($field) {
|
||||
case 'title':
|
||||
case 'name':
|
||||
return anchor(
|
||||
current_url() . '/view/' . $entity->getPrimaryKey() . '?category=' . $viewDatas['currentCategory']->getPrimaryKey(),
|
||||
$value,
|
||||
["target" => "_self"]
|
||||
);
|
||||
break;
|
||||
default:
|
||||
return getFieldView_DeviceHelper($field, $entity, $viewDatas);
|
||||
break;
|
||||
}
|
||||
} //
|
||||
//Admin용
|
||||
function getFieldIndex_Row_DeviceHelper_Admin($field, $entity, array $viewDatas): string
|
||||
{
|
||||
$value = $entity->$field ?: DEFAULTS['EMPTY'];
|
||||
switch ($field) {
|
||||
case 'title':
|
||||
case 'name':
|
||||
return anchor(
|
||||
current_url() . '/view/' . $entity->getPrimaryKey(),
|
||||
$value,
|
||||
["target" => "_self"]
|
||||
);
|
||||
break;
|
||||
default:
|
||||
if (in_array($field, $viewDatas['fieldFilters'])) {
|
||||
$attributes["onChange"] = sprintf(
|
||||
'location.href="%s/toggle/%s/%s?%s="+this.options[this.selectedIndex].value',
|
||||
current_url(),
|
||||
$entity->getPrimaryKey(),
|
||||
$field,
|
||||
$field
|
||||
);
|
||||
return getFieldForm_DeviceHelper($field, $entity->$field, $viewDatas, $attributes);
|
||||
}
|
||||
//front는 table을 사용하지 않는 점 주의
|
||||
return getFieldIndex_Row_DeviceHelper($field, $entity, $viewDatas);
|
||||
break;
|
||||
}
|
||||
} //
|
||||
@ -45,6 +45,7 @@ function getFieldForm_SitepageHelper($field, $value, array $viewDatas, array $at
|
||||
case 'view_cnt':
|
||||
return form_input($field, $value, ['type' => 'number']);
|
||||
break;
|
||||
case "category":
|
||||
case "status":
|
||||
$viewDatas['fieldFormOptions'][$field] = [DEFAULTS['EMPTY'] => lang("{$viewDatas['className']}.label.{$field}") . " 선택", ...$viewDatas['fieldFormOptions'][$field]];
|
||||
return form_dropdown($field, $viewDatas['fieldFormOptions'][$field], $value, $attributes);
|
||||
|
||||
@ -6,7 +6,7 @@ return [
|
||||
'grpno' => "그룹번호",
|
||||
'grpord' => "부모번호",
|
||||
'grpdpt' => "그룸Depth",
|
||||
'category_uid' => "분류",
|
||||
'category' => "분류",
|
||||
'user_uid' => "작성자",
|
||||
'title' => "제목",
|
||||
'content' => "내용",
|
||||
@ -18,5 +18,9 @@ return [
|
||||
'updated_at' => "수정일",
|
||||
'created_at' => "작성일"
|
||||
],
|
||||
"CATEGORY" => [
|
||||
'information' => '공지사항',
|
||||
'reference' => '자료실'
|
||||
],
|
||||
'STATUS' => ['use' => '사용', 'unuse' => '사용않함'],
|
||||
];
|
||||
|
||||
36
app/Language/ko/Device.php
Normal file
36
app/Language/ko/Device.php
Normal file
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
return [
|
||||
'title' => "장비 정보",
|
||||
'label' => [
|
||||
'uid' => "번호",
|
||||
'type' => '형식',
|
||||
'name' => "모델명",
|
||||
'cost' => "판매원가",
|
||||
'price' => "판매금액",
|
||||
'sale' => "할인금액",
|
||||
'stock' => "재고",
|
||||
'content' => "장비정보",
|
||||
'status' => "상태",
|
||||
'updated_at' => "수정일",
|
||||
'created_at' => "생성일"
|
||||
],
|
||||
"TYPE" => [
|
||||
'beremetal' => '실서버',
|
||||
'kvm' => '가상서버',
|
||||
'container' => '콘테이너',
|
||||
'cpu' => 'CPU',
|
||||
'memory' => 'Memory',
|
||||
'ssd' => 'SSD',
|
||||
'nvme' => 'NVME',
|
||||
'nic' => 'LANCARD',
|
||||
'windows' => 'Windows',
|
||||
'linux' => 'Linux',
|
||||
'publicip' => '공인IP'
|
||||
],
|
||||
"STATUS" => [
|
||||
"use" => "판매중",
|
||||
"unuse" => "판매중지",
|
||||
"soldout" => "매진",
|
||||
"outofstock" => "재고부족",
|
||||
]
|
||||
];
|
||||
@ -24,7 +24,8 @@ return [
|
||||
],
|
||||
"STATUS" => [
|
||||
"use" => "판매중",
|
||||
"unuse" => "판매일시중지",
|
||||
"unuse" => "판매중지",
|
||||
"soldout" => "매진",
|
||||
"outofstock" => "재고부족",
|
||||
]
|
||||
];
|
||||
|
||||
@ -3,7 +3,7 @@ return [
|
||||
'title' => "사이트페이지 정보",
|
||||
'label' => [
|
||||
'uid' => "번호",
|
||||
'category_uid' => "분류",
|
||||
'category' => "분류",
|
||||
'user_uid' => "작성자",
|
||||
'title' => "제목",
|
||||
'content' => "내용",
|
||||
@ -11,5 +11,12 @@ return [
|
||||
'updated_at' => "수정일",
|
||||
'created_at' => "작성일"
|
||||
],
|
||||
"CATEGORY" => [
|
||||
'greeting' => '인사말',
|
||||
'companyinfo' => '회사소개',
|
||||
'beremetal' => '단독서버',
|
||||
'line' => '회선',
|
||||
'vpn' => '기타서비스'
|
||||
],
|
||||
'STATUS' => ['use' => '사용', 'unuse' => '사용않함'],
|
||||
];
|
||||
|
||||
@ -13,7 +13,7 @@ class BoardModel extends BaseHierarchyModel
|
||||
parent::__construct('Board');
|
||||
$this->allowedFields = [
|
||||
...$this->allowedFields,
|
||||
"category_uid",
|
||||
"category",
|
||||
"user_uid", 'title', "content",
|
||||
"passwd", "board_file", "view_cnt", "status"
|
||||
];
|
||||
@ -30,7 +30,7 @@ class BoardModel extends BaseHierarchyModel
|
||||
public function getFieldRule(string $field, array $rules, string $action = ""): array
|
||||
{
|
||||
switch ($field) {
|
||||
case "category_uid":
|
||||
case "category":
|
||||
$rules[$field] = "required|string";
|
||||
break;
|
||||
case "user_uid":
|
||||
|
||||
82
app/Models/DeviceModel.php
Normal file
82
app/Models/DeviceModel.php
Normal file
@ -0,0 +1,82 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use App\Entities\DeviceEntity;
|
||||
|
||||
class DeviceModel extends BaseModel
|
||||
{
|
||||
const STATUS_OUTOFSTOCK = "outofstock";
|
||||
const STATUS_SOLDOUT = "soldout";
|
||||
protected $table = "tw_device";
|
||||
protected $useAutoIncrement = false;
|
||||
protected $returnType = DeviceEntity::class;
|
||||
protected $useSoftDeletes = true;
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct('Device');
|
||||
$this->allowedFields = [
|
||||
...$this->allowedFields,
|
||||
'type', 'name', "photo", "cost", "price", "sale",
|
||||
"stock", "content", "status"
|
||||
];
|
||||
$this->validationRules = [...$this->validationRules, ...$this->getFieldRules($this->allowedFields),];
|
||||
}
|
||||
public function getTitleField(): string
|
||||
{
|
||||
return 'name';
|
||||
}
|
||||
|
||||
public function getFieldRule(string $field, array $rules, string $action = ""): array
|
||||
{
|
||||
switch ($field) {
|
||||
case $this->getTitleField():
|
||||
$rules[$field] = "required|trim|string";
|
||||
break;
|
||||
case 'type':
|
||||
$rules[$field] = "required|string";
|
||||
break;
|
||||
case 'photo':
|
||||
$rules[$field] = !$action ? "if_exist|string" : "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;
|
||||
case 'cost':
|
||||
case 'price':
|
||||
case 'stock':
|
||||
$rules[$field] = "required|numeric";
|
||||
break;
|
||||
case 'sale':
|
||||
$rules[$field] = "if_exist|numeric";
|
||||
break;
|
||||
case "content":
|
||||
$rules[$field] = "required|string";
|
||||
break;
|
||||
default:
|
||||
$rules = parent::getFieldRule($field, $rules, $action);
|
||||
break;
|
||||
}
|
||||
return $rules;
|
||||
}
|
||||
|
||||
public function getEntity($conditions): DeviceEntity
|
||||
{
|
||||
return $this->where($conditions)->first() ?: throw new \Exception(__FUNCTION__ . "에서 {$this->getClassName()}의 해당 데이터가 없습니다.");
|
||||
}
|
||||
public function create(array $formDatas): DeviceEntity
|
||||
{
|
||||
return $this->create_process(new DeviceEntity(), $formDatas);
|
||||
}
|
||||
public function modify(DeviceEntity $entity, array $formDatas): DeviceEntity
|
||||
{
|
||||
return $this->modify_process($entity, $formDatas);
|
||||
}
|
||||
|
||||
//Index관련
|
||||
public function setIndexWordFilter(string $word)
|
||||
{
|
||||
if ($word !== DEFAULTS['EMPTY']) {
|
||||
parent::setIndexWordFilter($word);
|
||||
$this->orLike($this->getTitleField(), $word, "both");
|
||||
$this->orLike("content", $word, "both"); //befor , after , both
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -7,6 +7,7 @@ use App\Entities\ProductEntity;
|
||||
class ProductModel extends BaseModel
|
||||
{
|
||||
const STATUS_OUTOFSTOCK = "outofstock";
|
||||
const STATUS_SOLDOUT = "soldout";
|
||||
protected $table = "tw_product";
|
||||
protected $useAutoIncrement = false;
|
||||
protected $returnType = ProductEntity::class;
|
||||
|
||||
@ -13,7 +13,7 @@ class SitepageModel extends BaseModel
|
||||
parent::__construct('Sitepage');
|
||||
$this->allowedFields = [
|
||||
...$this->allowedFields,
|
||||
"category_uid",
|
||||
"category",
|
||||
"user_uid", 'title', "content",
|
||||
"status"
|
||||
];
|
||||
@ -30,7 +30,7 @@ class SitepageModel extends BaseModel
|
||||
public function getFieldRule(string $field, array $rules, string $action = ""): array
|
||||
{
|
||||
switch ($field) {
|
||||
case "category_uid":
|
||||
case "category":
|
||||
$rules[$field] = "required|string";
|
||||
break;
|
||||
case "user_uid":
|
||||
|
||||
48
app/Views/admin/device/index.php
Normal file
48
app/Views/admin/device/index.php
Normal file
@ -0,0 +1,48 @@
|
||||
<?= $this->extend('layouts/admin') ?>
|
||||
<?= $this->section('content') ?>
|
||||
<link href="/css/admin/content.css" media="screen" rel="stylesheet" type="text/css" />
|
||||
<div id="content">
|
||||
<div class="top container-fluid">
|
||||
<nav class="nav">
|
||||
조건검색:<?php foreach ($viewDatas['fieldFilters'] as $field) : ?><?= getFieldFilter_DeviceHelper($field, $viewDatas[$field], $viewDatas) ?><?php endforeach ?>
|
||||
</nav>
|
||||
<?= $this->include('templates/admin/index_head') ?>
|
||||
</div>
|
||||
<?= form_open(current_url() . '/batchjob', $viewDatas['forms']['attributes'], $viewDatas['forms']['hiddens']) ?>
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<?php foreach ($viewDatas['fields'] as $field) : ?><?= getFieldIndex_Column_DeviceHelper($field, $viewDatas) ?><?php endforeach ?>
|
||||
<th>@</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php $cnt = 0 ?>
|
||||
<?php foreach ($viewDatas['entitys'] as $entity) : ?>
|
||||
<tr id="<?= $entity->getPrimaryKey() ?>" <?= $entity->status != DEFAULTS['STATUS'] ? 'class="table-danger" rowcolor="red"' : 'rowcolor="red"' ?> onClick="indexRowCheckBoxToggle(this)">
|
||||
<td nowarp>
|
||||
<?= form_checkbox(["id" => "checkbox_uid_{$entity->getPrimaryKey()}", "name" => "batchjob_uids[]", "value" => $entity->getPrimaryKey(), "class" => "batchjobuids_checkboxs"]); ?>
|
||||
<?= anchor(current_url() . '/update/' . $entity->getPrimaryKey(), $viewDatas['total_count'] - (($viewDatas['page'] - 1) * $viewDatas['per_page'] + $cnt), ["target" => "_self"]) ?>
|
||||
</td>
|
||||
<?php foreach ($viewDatas['fields'] as $field) : ?>
|
||||
<td><?= getFieldIndex_Row_DeviceHelper_Admin($field, $entity, $viewDatas) ?></td>
|
||||
<?php endforeach ?>
|
||||
<td><?= anchor(current_url() . '/delete/' . $entity->getPrimaryKey(), ICONS['DELETE'], ["class" => "btn btn-sm btn-danger btn-circle", "target" => "_self"]) ?></td>
|
||||
</tr>
|
||||
<?php $cnt++ ?>
|
||||
<?php endforeach ?>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="bottom">
|
||||
<ul class="nav justify-content-center">
|
||||
<li class="nav-item"><?= form_checkbox(array("id" => "batchjobuids_checkbox")) ?>ALL</li>
|
||||
<?php foreach ($viewDatas['batchjobFilters'] as $field) : ?><?= getFieldFilter_DeviceHelper($field, DEFAULTS['EMPTY'], $viewDatas) ?><?php endforeach ?>
|
||||
<li class="nav-item"><?= form_submit('', '일괄처리', array("class" => "btn btn-outline btn-warning")) ?></li>
|
||||
<li class="nav-item"><?= anchor(current_url() . '/insert', '입력', ["class" => "btn btn-sm btn-primary btn-circle", "target" => "_self"]) ?></li>
|
||||
</ul>
|
||||
<?= $viewDatas['pagination'] ?>
|
||||
</div>
|
||||
<?= form_close() ?>
|
||||
</div>
|
||||
<?= $this->endSection() ?>
|
||||
24
app/Views/admin/device/insert.php
Normal file
24
app/Views/admin/device/insert.php
Normal file
@ -0,0 +1,24 @@
|
||||
<?= $this->extend('layouts/admin') ?>
|
||||
<?= $this->section('content') ?>
|
||||
<link href="/css/admin/content.css" media="screen" rel="stylesheet" type="text/css" />
|
||||
<div id="content">
|
||||
<?= form_open_multipart(current_url(), $viewDatas['forms']['attributes'], $viewDatas['forms']['hiddens']) ?>
|
||||
<table class="form table table-bordered table-striped">
|
||||
<tbody>
|
||||
<?php foreach ($viewDatas['fields'] as $field) : ?>
|
||||
<tr>
|
||||
<td class="label"><?= getFieldLabel_DeviceHelper($field, $viewDatas) ?></td>
|
||||
<td class="column">
|
||||
<?= getFieldForm_DeviceHelper($field, DEFAULTS['EMPTY'], $viewDatas) ?>
|
||||
<?= validation_show_error($field); ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
<tr>
|
||||
<td valign="bottom" colspan="2"><?= form_submit('', '입력', array("class" => "btn btn-outline btn-primary")); ?></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<?= form_close(); ?>
|
||||
</table>
|
||||
</div>
|
||||
<?= $this->endSection() ?>
|
||||
24
app/Views/admin/device/update.php
Normal file
24
app/Views/admin/device/update.php
Normal file
@ -0,0 +1,24 @@
|
||||
<?= $this->extend('layouts/admin') ?>
|
||||
<?= $this->section('content') ?>
|
||||
<link href="/css/admin/content.css" media="screen" rel="stylesheet" type="text/css" />
|
||||
<div id="content">
|
||||
<?= form_open_multipart(current_url(), $viewDatas['forms']['attributes'], $viewDatas['forms']['hiddens']) ?>
|
||||
<table class="form table table-bordered table-striped">
|
||||
<tbody>
|
||||
<?php foreach ($viewDatas['fields'] as $field) : ?>
|
||||
<tr>
|
||||
<td class="label"><?= getFieldLabel_DeviceHelper($field, $viewDatas) ?></td>
|
||||
<td class="column">
|
||||
<?= getFieldForm_DeviceHelper($field, $viewDatas['entity']->$field ?: DEFAULTS['EMPTY'], $viewDatas) ?>
|
||||
<?= validation_show_error($field); ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
<tr>
|
||||
<td valign="bottom" colspan="2"><?= form_submit('', '수정', array("class" => "btn btn-outline btn-primary")); ?></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<?= form_close(); ?>
|
||||
</table>
|
||||
</div>
|
||||
<?= $this->endSection() ?>
|
||||
19
app/Views/admin/device/view.php
Normal file
19
app/Views/admin/device/view.php
Normal file
@ -0,0 +1,19 @@
|
||||
<?= $this->extend('layouts/admin') ?>
|
||||
<?= $this->section('content') ?>
|
||||
<link href="/css/admin/content.css" media="screen" rel="stylesheet" type="text/css" />
|
||||
<div id="content">
|
||||
<table class="form table table-bordered table-striped">
|
||||
<tbody>
|
||||
<?php foreach ($viewDatas['fields'] as $field) : ?>
|
||||
<tr>
|
||||
<td class="label"><?= getFieldLabel_DeviceHelper($field, $viewDatas) ?></td>
|
||||
<td class="column">
|
||||
<?= getFieldView_DeviceHelper($field, $viewDatas['entity'], $viewDatas) ?>
|
||||
<?= validation_show_error($field); ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?= $this->endSection() ?>
|
||||
@ -3,6 +3,9 @@
|
||||
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-heading-Shoppingmall" aria-expanded="false" aria-controls="flush-heading-Shoppingmall"><b>상점관리</b></button>
|
||||
</h2>
|
||||
<div id="flush-heading-Shoppingmall" class="accordion-collapse collapse show" aria-labelledby="panelsStayOpen-heading-Shoppingmall">
|
||||
<div class="accordion-item">
|
||||
<h2><a href="/admin/device"><?= CLASS_ICONS['DEVICE'] ?>장비 관리</a></h2>
|
||||
</div>
|
||||
<div class="accordion-item">
|
||||
<h2><a href="/admin/product"><?= CLASS_ICONS['PRODUCT'] ?>상품 관리</a></h2>
|
||||
</div>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user