cfmgrv4 init...1
This commit is contained in:
parent
8f596fc223
commit
36806b0c12
@ -130,12 +130,6 @@ define('SESSION_NAMES', [
|
||||
'ISLOGIN' => "islogined",
|
||||
'AUTH' => 'auth',
|
||||
]);
|
||||
//인증 관련
|
||||
define('AUTH_FIELDS', [
|
||||
'ID' => 'id',
|
||||
'TITLE' => 'title',
|
||||
'ROLE' => 'role',
|
||||
]);
|
||||
//메신저 관련
|
||||
define("MESSENGERS", [
|
||||
"skype" => [
|
||||
@ -214,7 +208,19 @@ define('AUDIOS', [
|
||||
define('KEYWORD', '일본IDC 일본서버 일본 서버 일본호스팅 서버호스팅 디도스 공격 해외 호스팅 DDOS 방어 ddos 의뢰 디도스 보안 일본 단독서버 가상서버');
|
||||
define('LAYOUTS', [
|
||||
'empty' => [
|
||||
'title' => KEYWORD,
|
||||
'path' => 'layouts' . DIRECTORY_SEPARATOR . 'empty',
|
||||
'metas' => [
|
||||
'<meta charset="UTF-8">',
|
||||
'<meta name="viewport" content="width=device-width, initial-scale=1.0">',
|
||||
'<meta http-equiv="X-UA-Compatible" content="IE=Edge">',
|
||||
'<meta name="subject" content="Daemon IDC">',
|
||||
'<meta name="description" content="' . KEYWORD . '">',
|
||||
'<meta name="keywords" content="' . KEYWORD . '">',
|
||||
'<meta property="og:type" content="website">',
|
||||
'<meta property="og:title" content="Daemon IDC">',
|
||||
'<meta property="og:description" content="' . KEYWORD . '">',
|
||||
],
|
||||
'stylesheets' => [
|
||||
'<link rel="icon" href="/favicon.ico">',
|
||||
'<link href="//cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">',
|
||||
@ -227,12 +233,11 @@ define('LAYOUTS', [
|
||||
'front' => [
|
||||
'title' => KEYWORD,
|
||||
'path' => 'layouts' . DIRECTORY_SEPARATOR . 'front',
|
||||
//'topmenus' => ['aboutus', 'hosting', 'serverdevice', 'service', 'support'],
|
||||
'topmenus' => ['aboutus', 'hosting', 'service', 'support'],
|
||||
'metas' => [
|
||||
'<meta charset="utf-8">',
|
||||
'<meta charset="UTF-8">',
|
||||
'<meta name="viewport" content="width=device-width, initial-scale=1.0">',
|
||||
'<meta http-equiv="X-UA-Compatible" content="IE=Edge">',
|
||||
'<meta name="viewport" id="viewport" content="width=1280">',
|
||||
'<meta name="subject" content="Daemon IDC">',
|
||||
'<meta name="description" content="' . KEYWORD . '">',
|
||||
'<meta name="keywords" content="' . KEYWORD . '">',
|
||||
@ -245,7 +250,7 @@ define('LAYOUTS', [
|
||||
'<link rel="icon" href="/favicon.ico">',
|
||||
'<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">',
|
||||
'<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.css">',
|
||||
'<link href="//cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">',
|
||||
'<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">',
|
||||
'<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css">',
|
||||
'<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/select2-bootstrap-5-theme@1.3.0/dist/select2-bootstrap-5-theme.min.css" />',
|
||||
'<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/boxicons@latest/css/boxicons.min.css" />',
|
||||
@ -254,7 +259,7 @@ define('LAYOUTS', [
|
||||
'javascripts' => [
|
||||
'<script src="//cdn.jsdelivr.net/npm/jquery@3.7.0/dist/jquery.min.js"></script>',
|
||||
'<script src="//code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>',
|
||||
'<script src="//cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>',
|
||||
'<script src="//cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>',
|
||||
'<script src="//cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>',
|
||||
'<script src="/vendors/tinymce/tinymce/tinymce.js" referrerpolicy="origin"></script>',
|
||||
],
|
||||
@ -262,11 +267,22 @@ define('LAYOUTS', [
|
||||
'admin' => [
|
||||
'title' => '관리자화면',
|
||||
'path' => 'layouts' . DIRECTORY_SEPARATOR . 'admin',
|
||||
'metas' => [
|
||||
'<meta charset="UTF-8">',
|
||||
'<meta name="viewport" content="width=device-width, initial-scale=1.0">',
|
||||
'<meta http-equiv="X-UA-Compatible" content="IE=Edge">',
|
||||
'<meta name="subject" content="Daemon IDC">',
|
||||
'<meta name="description" content="' . KEYWORD . '">',
|
||||
'<meta name="keywords" content="' . KEYWORD . '">',
|
||||
'<meta property="og:type" content="website">',
|
||||
'<meta property="og:title" content="Daemon IDC">',
|
||||
'<meta property="og:description" content="' . KEYWORD . '">',
|
||||
],
|
||||
'stylesheets' => [
|
||||
'<link rel="icon" href="/favicon.ico">',
|
||||
'<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">',
|
||||
'<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.css">',
|
||||
'<link href="//cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">',
|
||||
'<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">',
|
||||
'<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css">',
|
||||
'<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/select2-bootstrap-5-theme@1.3.0/dist/select2-bootstrap-5-theme.min.css" />',
|
||||
'<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/boxicons@latest/css/boxicons.min.css" />',
|
||||
@ -276,7 +292,7 @@ define('LAYOUTS', [
|
||||
'javascripts' => [
|
||||
'<script src="//cdn.jsdelivr.net/npm/jquery@3.7.0/dist/jquery.min.js"></script>',
|
||||
'<script src="//code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>',
|
||||
'<script src="//cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>',
|
||||
'<script src="//cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>',
|
||||
'<script src="//cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>',
|
||||
'<script src="/vendors/tinymce/tinymce/tinymce.js" referrerpolicy="origin"></script>',
|
||||
],
|
||||
|
||||
@ -11,23 +11,20 @@ $routes->addPlaceholder('uuid', '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}
|
||||
//authFilter는 추가적인 작업이 필요
|
||||
//1. app/Filters/AuthFilter.php
|
||||
//2. Config/Filters.php -> $aliases = ['authFilter' => AuthFilter::class]
|
||||
$routes->group('', ['namespace' => 'App\Controllers'], function ($routes) {
|
||||
$routes->get('/', 'Home::index');
|
||||
$routes->group('user', function ($routes) {
|
||||
$routes->get('login', 'UserController::create_form');
|
||||
$routes->get('signup', 'UserController::create');
|
||||
$routes->get('logout', 'UserController::logout', ['filter' => 'authFilter:user']);
|
||||
});
|
||||
$routes->get('/', 'Home::index');
|
||||
$routes->group('/user', function ($routes) {
|
||||
$routes->get('login', 'UserController::create_form');
|
||||
$routes->post('login', 'UserController::create');
|
||||
$routes->get('logout', 'UserController::logout', ['filter' => 'authFilter:user']);
|
||||
});
|
||||
$routes->group('cli', ['namespace' => 'App\CLI'], function ($routes) {
|
||||
$routes->group('cloudflare', ['namespace' => 'App\CLI\Cloudflare'], function ($routes) {
|
||||
$routes->cli('reload', 'Cloudflare::reload');
|
||||
});
|
||||
});
|
||||
// $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'authFilter:manager'], function ($routes) {
|
||||
$routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'authFilter:manager'], function ($routes) {
|
||||
$routes->group('admin', ['namespace' => 'App\Controllers\Admin'], function ($routes) {
|
||||
$routes->get('/', 'Home::index');
|
||||
$routes->group('user', ['filter' => 'authFilter:master'], function ($routes) {
|
||||
$routes->group('user', function ($routes) {
|
||||
$routes->get('/', 'UserController::index');
|
||||
$routes->get('create', 'UserController::create_form');
|
||||
$routes->post('create', 'UserController::create');
|
||||
|
||||
@ -17,7 +17,7 @@ class UserController extends AdminController
|
||||
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
|
||||
{
|
||||
parent::initController($request, $response, $logger);
|
||||
$this->class_name .= "User";
|
||||
$this->class_name = "User";
|
||||
$this->class_path .= $this->class_name;
|
||||
$this->view_path = strtolower($this->view_root . $this->class_name);
|
||||
$this->title = lang("{$this->class_path}.title");
|
||||
|
||||
19
app/Controllers/FrontController.php
Normal file
19
app/Controllers/FrontController.php
Normal file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controllers;
|
||||
|
||||
use App\Controllers\MVController;
|
||||
use CodeIgniter\HTTP\RequestInterface;
|
||||
use CodeIgniter\HTTP\ResponseInterface;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
abstract class FrontController extends MVController
|
||||
{
|
||||
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
|
||||
{
|
||||
parent::initController($request, $response, $logger);
|
||||
$this->layout = "front";
|
||||
$this->view_root .= "front/";
|
||||
$this->action_form = FORMS['MODAL'];
|
||||
}
|
||||
}
|
||||
@ -14,10 +14,6 @@ use Psr\Log\LoggerInterface;
|
||||
|
||||
abstract class MVController extends CommonController
|
||||
{
|
||||
protected $class_name = "";
|
||||
protected $class_path = "";
|
||||
protected $view_root = "";
|
||||
protected $view_path = "";
|
||||
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
|
||||
{
|
||||
parent::initController($request, $response, $logger);
|
||||
@ -115,6 +111,7 @@ abstract class MVController extends CommonController
|
||||
$this->create_validate($this->action, $this->fields);
|
||||
$this->formDatas = $this->getFormDatas();
|
||||
$this->entity = $this->getModel()->create(formDatas: $this->formDatas);
|
||||
$this->message = "입력작업이 완료되었습니다.";
|
||||
}
|
||||
final protected function create_procedure(string $action_form = "default"): RedirectResponse|string
|
||||
{
|
||||
@ -123,13 +120,12 @@ abstract class MVController extends CommonController
|
||||
try {
|
||||
$this->create_process();
|
||||
$this->getModel()->transCommit();
|
||||
$this->message = "입력작업이 완료되었습니다.";
|
||||
log_message("notice", __FUNCTION__ . $this->message);
|
||||
switch ($action_form) {
|
||||
case FORMS['MODAL']:
|
||||
$result = view("templates/{$this->layout}/{$action_form}_close", data: ['viewDatas' => $this->getViewDatas()]);
|
||||
break;
|
||||
case FORMS['IFRAM']:
|
||||
case FORMS['IFRAME']:
|
||||
$result = view("templates/{$this->layout}/{$action_form}_close", data: ['viewDatas' => $this->getViewDatas()]);
|
||||
break;
|
||||
default:
|
||||
@ -192,6 +188,7 @@ abstract class MVController extends CommonController
|
||||
throw new \Exception(__FUNCTION__, " => {$uid} 정보를 찾을수 없습니다.");
|
||||
}
|
||||
$this->entity = $this->getModel()->modify($this->entity, $this->formDatas);
|
||||
$this->message = "수정작업이 완료되었습니다.";
|
||||
}
|
||||
final protected function modify_procedure(string $uid, string $action_form = "default"): RedirectResponse|string
|
||||
{
|
||||
@ -200,13 +197,12 @@ abstract class MVController extends CommonController
|
||||
try {
|
||||
$this->modify_process($uid);
|
||||
$this->getModel()->transCommit();
|
||||
$this->message = "수정작업이 완료되었습니다.";
|
||||
log_message("notice", __FUNCTION__ . $this->message);
|
||||
switch ($action_form) {
|
||||
case FORMS['MODAL']:
|
||||
$result = view("templates/{$this->layout}/{$action_form}_close", data: ['viewDatas' => $this->getViewDatas()]);
|
||||
break;
|
||||
case FORMS['IFRAME']:
|
||||
case FORMS['IFRAMEE']:
|
||||
$result = view("templates/{$this->layout}/{$action_form}_close", data: ['viewDatas' => $this->getViewDatas()]);
|
||||
break;
|
||||
default:
|
||||
@ -268,6 +264,7 @@ abstract class MVController extends CommonController
|
||||
throw new \Exception("{$uid} 정보를 찾을수 없습니다.");
|
||||
}
|
||||
$this->entity = $this->getModel()->delete($this->entity->getPK());
|
||||
$this->message = "삭제작업을 완료하였습니다.";
|
||||
}
|
||||
final public function delete(string $uid): RedirectResponse
|
||||
{
|
||||
@ -276,9 +273,8 @@ abstract class MVController extends CommonController
|
||||
try {
|
||||
$this->delete_process($uid);
|
||||
$this->getModel()->transCommit();
|
||||
$message = "삭제작업을 완료하였습니다.";
|
||||
log_message("notice", $message);
|
||||
$this->session->setFlashdata(SESSION_NAMES['RETURN_MSG'], $message);
|
||||
log_message("notice", $this->message);
|
||||
$this->session->setFlashdata(SESSION_NAMES['RETURN_MSG'], $this->message);
|
||||
return redirect()->to($this->session->getFlashdata(SESSION_NAMES['RETURN_URL']) ?: "/");
|
||||
} catch (\Exception $e) {
|
||||
//Transaction Rollback
|
||||
|
||||
@ -9,9 +9,8 @@ use CodeIgniter\Validation\Validation;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
use App\Models\UserModel;
|
||||
use App\Entities\UserEntity;
|
||||
|
||||
class UserController extends MVController
|
||||
class UserController extends FrontController
|
||||
{
|
||||
private $_model = null;
|
||||
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
|
||||
@ -81,40 +80,40 @@ class UserController extends MVController
|
||||
return $this->create_form_procedure();
|
||||
}
|
||||
//로그인처리
|
||||
protected function create_process(): void
|
||||
{
|
||||
// $this->create_validate($this->action, $this->fields);
|
||||
$this->formDatas = $this->getFormDatas();
|
||||
if (!isset($this->formDatas['id']) || !$this->formDatas['id']) {
|
||||
throw new \Exception("사용자ID를 입력해주세요!");
|
||||
}
|
||||
if (!isset($this->formDatas['passwd']) || !$this->formDatas['passwd']) {
|
||||
throw new \Exception("암호를 입력해주세요!");
|
||||
}
|
||||
$entity = $this->getModel()->getEntityByID($this->formDatas['id']);
|
||||
if (is_null($entity) || !isset($entity->passwd)) {
|
||||
throw new \Exception("사용자ID: {$this->formDatas['id']}가 존재하지 않습니다.");
|
||||
}
|
||||
if (password_verify($this->formDatas['passwd'], $entity->passwd)) {
|
||||
//Session에 Login 정보전달
|
||||
$this->session->set([
|
||||
SESSION_NAMES['AUTH'] => [
|
||||
'uid' => $entity->getPK(),
|
||||
'name' => $entity->getTitle(),
|
||||
'email' => $entity->email,
|
||||
'role' => $entity->role
|
||||
],
|
||||
SESSION_NAMES['ISLOGIN'] => true
|
||||
]);
|
||||
$this->message = "로그인 성공";
|
||||
} else {
|
||||
throw new \Exception("로그인 실패");
|
||||
}
|
||||
}
|
||||
public function create(): RedirectResponse|string
|
||||
{
|
||||
$this->init(__FUNCTION__);
|
||||
$this->formDatas = $this->getFormDatas();
|
||||
$id = $this->request->getVar('id');
|
||||
$passwd = $this->request->getVar('passwd');
|
||||
if (!$id) {
|
||||
session()->setFlashdata('error', "사용자ID를 입력해주세요!");
|
||||
return redirect()->back()->withInput();
|
||||
}
|
||||
if (!$passwd) {
|
||||
session()->setFlashdata('error', "암호를 입력해주세요!");
|
||||
return redirect()->back()->withInput();
|
||||
}
|
||||
$entity = $this->getModel()->getEntityByID($id);
|
||||
if (is_null($entity) || !isset($entity->passwd)) {
|
||||
session()->setFlashdata('error', "사용자ID: {$id}가 존재하지 않습니다.");
|
||||
return redirect()->back()->withInput();
|
||||
}
|
||||
if (password_verify($passwd, $entity->passwd)) {
|
||||
//Session에 Login 정보전달
|
||||
$authData = [
|
||||
'uid' => $entity->getPK(),
|
||||
'name' => $entity->getTitle(),
|
||||
'email' => $entity->email,
|
||||
'role' => $entity->role,
|
||||
SESSION_NAMES['ISLOGIN'] => true
|
||||
];
|
||||
session()->set($authData);
|
||||
return redirect()->to($this->request->getVar(SESSION_NAMES['RETURN_URL']) ? $this->request->getVar(SESSION_NAMES['RETURN_URL']) : "/");
|
||||
} else {
|
||||
session()->setFlashdata('error', '암호가 맞지 않습니다.');
|
||||
return redirect()->back()->withInput();
|
||||
}
|
||||
return $this->create_procedure();
|
||||
}
|
||||
//로그아웃
|
||||
public function logout(): RedirectResponse
|
||||
|
||||
@ -29,18 +29,19 @@ class AuthFilter implements FilterInterface
|
||||
if (session()->get(SESSION_NAMES['ISLOGIN'])) {
|
||||
$auth = session()->get(SESSION_NAMES['AUTH']);
|
||||
// 회원 ROLES이 필요ROLE($arguments[0]) 목록에 존재하지 않으면(ACL)
|
||||
if (!in_array($arguments[0], explode(DEFAULTS['DELIMITER_ROLE'], $auth[AUTH_FIELDS['ROLE']]))) {
|
||||
if (!in_array($arguments[0], explode(DEFAULTS['DELIMITER_ROLE'], $auth['role']))) {
|
||||
return redirect()->to(URLS['LOGIN'])->with(
|
||||
'return_message',
|
||||
sprintf(
|
||||
"%s,%s회원님은 접속에 필요한 권한[%s]이 없습니다. ",
|
||||
$auth[AUTH_FIELDS['ROLE']],
|
||||
$auth[AUTH_FIELDS['TITLE']],
|
||||
$auth['role'],
|
||||
$auth['name'],
|
||||
implode(",", $arguments)
|
||||
)
|
||||
);
|
||||
}
|
||||
} else {
|
||||
dd(session()->get(SESSION_NAMES['AUTH']));
|
||||
session()->setFlashdata(SESSION_NAMES['RETURN_URL'], $request->getUri()->getPath() . '?' . $request->getUri()->getQuery());
|
||||
return redirect()->to(URLS['LOGIN'])->with('return_message', '로그인을하셔야합니다.');
|
||||
}
|
||||
|
||||
@ -33,7 +33,13 @@ function getFieldForm_AccountHelper(string $field, mixed $value, array $viewData
|
||||
// return implode(" ", $checkboxs);
|
||||
break;
|
||||
case AccountModel::TITLE:
|
||||
$form = form_input($field, $value, ["placeholder" => "예)test@exmaple.com", "style" => "width:100%; ::placeholder{color:silver; opacity: 1;}"]);
|
||||
$form = form_input($field, $value, [
|
||||
"placeholder" => "예)test@exmaple.com",
|
||||
"style" =>
|
||||
"width:100%; ::placeholder{color:silver; opacity: 1;}",
|
||||
"class" => "form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
case 'type':
|
||||
case 'status':
|
||||
@ -44,10 +50,17 @@ function getFieldForm_AccountHelper(string $field, mixed $value, array $viewData
|
||||
break;
|
||||
case 'updated_at':
|
||||
case 'created_at':
|
||||
$form = form_input($field, $value, ['class' => 'calender']);
|
||||
$form = form_input($field, $value, [
|
||||
"class" => "calener form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
default:
|
||||
$form = form_input($field, $value, ["style" => "width:100%;"]);
|
||||
$form = form_input($field, $value, [
|
||||
"style" => "width:100%;",
|
||||
"class" => "form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
}
|
||||
return $form;
|
||||
|
||||
@ -19,7 +19,12 @@ function getFieldForm_AuthHelper(string $field, mixed $value, array $viewDatas,
|
||||
$value = $value ?: DEFAULTS['EMPTY'];
|
||||
switch ($field) {
|
||||
case AuthModel::TITLE:
|
||||
$form = form_input($field, $value, ["placeholder" => "예)test@example.com", "style" => "width:100%; ::placeholder{color:silver; opacity: 1;}"]);
|
||||
$form = form_input($field, $value, [
|
||||
"placeholder" => "예)test@example.com",
|
||||
"style" => "width:100%; ::placeholder{color:silver; opacity: 1;}",
|
||||
"class" => "form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
case 'status':
|
||||
$form = form_dropdown($field, [
|
||||
@ -29,10 +34,17 @@ function getFieldForm_AuthHelper(string $field, mixed $value, array $viewDatas,
|
||||
break;
|
||||
case 'updated_at':
|
||||
case 'created_at':
|
||||
$form = form_input($field, $value, ['class' => 'calender']);
|
||||
$form = form_input($field, $value, [
|
||||
"class" => "calender form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
default:
|
||||
$form = form_input($field, $value, ["style" => "width:100%;"]);
|
||||
$form = form_input($field, $value, [
|
||||
"style" => "width:100%;",
|
||||
"class" => "form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
}
|
||||
return $form;
|
||||
|
||||
@ -39,13 +39,29 @@ function getFieldForm_RecordHelper(string $field, mixed $value, array $viewDatas
|
||||
// return implode(" ", $checkboxs);
|
||||
break;
|
||||
case RecordModel::TITLE: //host
|
||||
$form = form_input($field, $value, ["placeholder" => "예)www.example.com", "style" => "width:200px; ::placeholder{color:silver; opacity: 1;}"]);
|
||||
$form = form_input($field, $value, [
|
||||
"placeholder" => "예)www.example.com",
|
||||
"style" =>
|
||||
"width:200px; ::placeholder{color:silver; opacity: 1;}",
|
||||
"class" => "form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
case 'hosts':
|
||||
$form = form_textarea($field, html_entity_decode($value), ['class' => 'editor', 'rows' => '5']);
|
||||
$form = form_textarea($field, html_entity_decode($value), [
|
||||
'rows' => '5',
|
||||
"class" => "form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
case 'content':
|
||||
$form = form_input($field, $value, ["placeholder" => "예)123.123.123.123", "style" => "width:200px; ::placeholder{color:silver; opacity: 1;}"]);
|
||||
$form = form_input($field, $value, [
|
||||
"placeholder" => "예)123.123.123.123",
|
||||
"style" =>
|
||||
"width:200px; ::placeholder{color:silver; opacity: 1;}",
|
||||
"class" => "form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
case "type":
|
||||
case "fixed":
|
||||
@ -59,10 +75,17 @@ function getFieldForm_RecordHelper(string $field, mixed $value, array $viewDatas
|
||||
break;
|
||||
case 'updated_at':
|
||||
case 'created_at':
|
||||
$form = form_input($field, $value, ['class' => 'calender']);
|
||||
$form = form_input($field, $value, [
|
||||
"class" => "calender form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
default:
|
||||
$form = form_input($field, $value, ["style" => "width:100%;"]);
|
||||
$form = form_input($field, $value, [
|
||||
"style" => "width:100%;",
|
||||
"class" => "form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
}
|
||||
return $form;
|
||||
|
||||
@ -33,16 +33,36 @@ function getFieldForm_ZoneHelper(string $field, mixed $value, array $viewDatas,
|
||||
// return implode(" ", $checkboxs);
|
||||
break;
|
||||
case ZoneModel::TITLE:
|
||||
$form = form_input($field, $value, ["placeholder" => "예)exmaple.com", "style" => "width:100%; ::placeholder{color:silver; opacity: 1;}"]);
|
||||
$form = form_input($field, $value, [
|
||||
"placeholder" => "예)exmaple.com",
|
||||
"style" =>
|
||||
"width:100%; ::placeholder{color:silver; opacity: 1;}",
|
||||
"class" => "form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
case 'domains':
|
||||
$form = form_textarea($field, $value, ['class' => 'editor', 'rows' => '5']);
|
||||
$form = form_textarea($field, $value, [
|
||||
'rows' => '5',
|
||||
"class" => "form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
case 'hosts':
|
||||
$form = form_textarea($field, $value == DEFAULTS['EMPTY'] ? "@\n*\nm\nwww" : $value, ['class' => 'editor', 'rows' => '5']);
|
||||
$form = form_textarea($field, $value == DEFAULTS['EMPTY'] ? "@\n*\nm\nwww" : $value, [
|
||||
'rows' => '5',
|
||||
"class" => "form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
case 'content':
|
||||
$form = form_input($field, $value, ["placeholder" => "예)123.123.123.123", "style" => "width:200px; ::placeholder{color:silver; opacity: 1;}"]);
|
||||
$form = form_input($field, $value, [
|
||||
"placeholder" => "예)123.123.123.123",
|
||||
"style" =>
|
||||
"width:200px; ::placeholder{color:silver; opacity: 1;}",
|
||||
"class" => "form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
case "development_mode":
|
||||
case "ipv6":
|
||||
@ -62,10 +82,18 @@ function getFieldForm_ZoneHelper(string $field, mixed $value, array $viewDatas,
|
||||
break;
|
||||
case 'updated_at':
|
||||
case 'created_at':
|
||||
$form = form_input($field, $value, ['class' => 'calender']);
|
||||
$form = form_input($field, $value, [
|
||||
"class" => "calender form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
default:
|
||||
$form = form_input($field, $value, ["style" => "width:100%;"]);
|
||||
$form = form_input($field, $value, [
|
||||
"style" =>
|
||||
"width:100%;",
|
||||
"class" => "form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
}
|
||||
return $form;
|
||||
|
||||
@ -19,10 +19,21 @@ function getFieldForm_MapurlHelper(string $field, mixed $value, array $viewDatas
|
||||
$value = $value ?: DEFAULTS['EMPTY'];
|
||||
switch ($field) {
|
||||
case MapurlModel::TITLE:
|
||||
$form = form_input($field, $value, ["placeholder" => "예)http://old.example.com", "style" => "width:100%; ::placeholder{color:silver; opacity: 1;}"]);
|
||||
$form = form_input($field, $value, [
|
||||
"placeholder" => "예)http://old.example.com",
|
||||
"style" => "width:100%; ::placeholder{color:silver; opacity: 1;}",
|
||||
"class" => "form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
case 'newurl':
|
||||
$form = form_input($field, $value, ["placeholder" => "예)https://new.example.com", "style" => "width:100%; ::placeholder{color:silver; opacity: 1;}"]);
|
||||
$form = form_input($field, $value, [
|
||||
"placeholder" => "예)https://new.example.com",
|
||||
"style" =>
|
||||
"width:100%; ::placeholder{color:silver; opacity: 1;}",
|
||||
"class" => "form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
case 'status':
|
||||
$form = form_dropdown($field, [
|
||||
@ -32,10 +43,18 @@ function getFieldForm_MapurlHelper(string $field, mixed $value, array $viewDatas
|
||||
break;
|
||||
case 'updated_at':
|
||||
case 'created_at':
|
||||
$form = form_input($field, $value, ['class' => 'calender']);
|
||||
$form = form_input($field, $value, [
|
||||
"class" => "calender form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
default:
|
||||
$form = form_input($field, $value, ["style" => "width:100%;"]);
|
||||
$form = form_input($field, $value, [
|
||||
"style" =>
|
||||
"width:100%;",
|
||||
"class" => "form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
}
|
||||
return $form;
|
||||
|
||||
@ -19,7 +19,12 @@ function getFieldForm_UserHelper(string $field, mixed $value, array $viewDatas,
|
||||
$value = $value ?: DEFAULTS['EMPTY'];
|
||||
switch ($field) {
|
||||
case UserModel::TITLE:
|
||||
$form = form_input($field, $value, ["placeholder" => "예)", "style" => "width:100%; ::placeholder{color:silver; opacity: 1;}"]);
|
||||
$form = form_input($field, $value, [
|
||||
"placeholder" => "예)",
|
||||
"style" => "width:100%; ::placeholder{color:silver; opacity: 1;}",
|
||||
"class" => "form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
case 'role':
|
||||
if (in_array($viewDatas['action'], ['create', 'modify'])) {
|
||||
@ -43,20 +48,41 @@ function getFieldForm_UserHelper(string $field, mixed $value, array $viewDatas,
|
||||
], $value, $extras);
|
||||
break;
|
||||
case 'passwd':
|
||||
$form = form_password($field, "", ["style" => "width:100%;"]);
|
||||
$form = form_password($field, "", [
|
||||
"style" => "width:100%;",
|
||||
"class" => "form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
case 'email':
|
||||
$form = form_input($field, $value, ["placeholder" => "예)test@example.com", "style" => "width:100%; ::placeholder{color:silver; opacity: 1;}"]);
|
||||
$form = form_input($field, $value, [
|
||||
"placeholder" => "예)test@example.com",
|
||||
"style" => "width:100%; ::placeholder{color:silver; opacity: 1;}",
|
||||
"class" => "form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
case 'mobile':
|
||||
$form = form_input($field, $value, ["placeholder" => "예)010-0010-0010", "style" => "width:100%; ::placeholder{color:silver; opacity: 1;}"]);
|
||||
$form = form_input($field, $value, [
|
||||
"placeholder" => "예)010-0010-0010",
|
||||
"style" => "width:100%; ::placeholder{color:silver; opacity: 1;}",
|
||||
"class" => "form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
case 'updated_at':
|
||||
case 'created_at':
|
||||
$form = form_input($field, $value, ['class' => 'calender']);
|
||||
$form = form_input($field, $value, [
|
||||
"class" => "calender form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
default:
|
||||
$form = form_input($field, $value, ["style" => "width:100%;"]);
|
||||
$form = form_input($field, $value, [
|
||||
"style" => "width:100%;",
|
||||
"class" => "form-control",
|
||||
(strpos($viewDatas['field_rules'][$field], 'required') !== false) ? "required" : ""
|
||||
]);
|
||||
break;
|
||||
}
|
||||
return $form;
|
||||
|
||||
@ -38,21 +38,11 @@ abstract class MyAuth
|
||||
protected function setSession_process(UserEntity $entity): UserEntity
|
||||
{
|
||||
$this->_session->set(SESSION_NAMES['ISLOGIN'], true);
|
||||
$auths = [];
|
||||
foreach (array_values(AUTH_FIELDS) as $field) {
|
||||
switch ($field) {
|
||||
case 'id':
|
||||
$auths[$field] = $entity->getPK();
|
||||
break;
|
||||
case 'title':
|
||||
$auths[$field] = $entity->getTitle();
|
||||
break;
|
||||
case 'role':
|
||||
$auths[$field] = $entity->$field;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$this->_session->set(SESSION_NAMES['AUTH'], $auths);
|
||||
$this->_session->set(SESSION_NAMES['AUTH'], [
|
||||
'uid' => $entity->getPK(),
|
||||
'name' => $entity->getTitle(),
|
||||
'role' => $entity->role
|
||||
]);
|
||||
return $entity;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,8 +2,6 @@
|
||||
|
||||
namespace App\Libraries\MySocket;
|
||||
|
||||
use GuzzleHttp\Client;
|
||||
|
||||
class GoogleSocket extends Google_Client
|
||||
{
|
||||
private $_session = null;
|
||||
|
||||
@ -9,7 +9,6 @@ trait AuthTrait
|
||||
final protected function session_AuthTrait(): Session
|
||||
{
|
||||
$session = \Config\Services::session();
|
||||
$session->set(SESSION_NAMES['ISLOGIN'], false);
|
||||
$session->set('currentRoles', [DEFAULTS["ROLE"]]);
|
||||
if ($session->get(SESSION_NAMES['ISLOGIN'])) {
|
||||
$session->set(SESSION_NAMES['ISLOGIN'], true);
|
||||
@ -17,7 +16,7 @@ trait AuthTrait
|
||||
'currentRoles',
|
||||
explode(
|
||||
DEFAULTS['DELIMITER_ROLE'],
|
||||
$session->get(SESSION_NAMES['AUTH'])[AUTH_FIELDS['ROLE']]
|
||||
$session->get(SESSION_NAMES['AUTH'])['role']
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
25
app/Views/front/user/create.php
Normal file
25
app/Views/front/user/create.php
Normal file
@ -0,0 +1,25 @@
|
||||
<?= $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" />
|
||||
<div class="login-container border rounded p-4 shadow">
|
||||
<?= form_open(current_url(), $viewDatas['forms']['attributes'], $viewDatas['forms']['hiddens']) ?>
|
||||
<h2 class="text-center mb-4">로그인</h2>
|
||||
<div class="mb-3">
|
||||
<label for="userId" class="form-label">아이디</label>
|
||||
<input type="text" class="form-control" id="userId" name="id" value="<?= set_value('id') ?>" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="userPassword" class="form-label">비밀번호</label>
|
||||
<input type="password" class="form-control" id="userPassword" name="passwd" required>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<button type="submit" class="btn btn-primary">로그인</button>
|
||||
<button type="button" class="btn btn-outline-primary">회원가입</button>
|
||||
<button type="button" class="btn btn-primary">
|
||||
<img src="https://www.google.com/favicon.ico" alt="Google" width="20" height="20" class="me-2">
|
||||
Google 로그인
|
||||
</button>
|
||||
</div>
|
||||
<?= form_close(); ?>
|
||||
</div>
|
||||
<?= $this->endSection() ?>
|
||||
@ -2,10 +2,10 @@
|
||||
<html lang="ko">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
|
||||
<title><?= $viewDatas['title'] ?></title>
|
||||
<title><?= LAYOUTS[$viewDatas['layout']]['title'] ?></title>
|
||||
<?php foreach (LAYOUTS[$viewDatas['layout']]['metas'] as $meta): ?>
|
||||
<?= $meta ?>
|
||||
<?php endforeach; ?>
|
||||
<?php foreach (LAYOUTS[$viewDatas['layout']]['stylesheets'] as $stylesheet): ?>
|
||||
<?= $stylesheet ?>
|
||||
<?php endforeach; ?>
|
||||
@ -28,7 +28,7 @@
|
||||
</div>
|
||||
<div class="middle">
|
||||
<div class="left"><?= $this->include(LAYOUTS[$viewDatas['layout']]['path'] . '/left_menu'); ?></div>
|
||||
<div class="center">
|
||||
<div class="right">
|
||||
<div class="header"><?= $this->include("templates/{$viewDatas['layout']}/header"); ?></div>
|
||||
<div class="content"><?= $this->renderSection('content') ?></div>
|
||||
<div class="footer"><?= $this->include("templates/{$viewDatas['layout']}/footer"); ?></div>
|
||||
|
||||
@ -23,19 +23,18 @@
|
||||
<li class="nav-item">
|
||||
<?php if ($viewDatas['session']->get(SESSION_NAMES['ISLOGIN'])): ?>
|
||||
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<?= ICONS['LOGIN'] ?> <?= $viewDatas['session']->get(SESSION_NAMES['AUTH'])[AUTH_FIELDS['TITLE']] ?>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li><a class="dropdown-item"
|
||||
href="/front/user/update/<?= $viewDatas['session']->get(SESSION_NAMES['AUTH'])[AUTH_FIELDS['ID']] ?>"><?= ICONS['SETUP'] ?>수정</a>
|
||||
</li>
|
||||
<li>
|
||||
<hr class="dropdown-divider">
|
||||
</li>
|
||||
<li><a class="dropdown-item" href="<?= URLS['LOGOUT'] ?>"><?= ICONS['LOGOUT'] ?>Logout</a></li>
|
||||
</ul>
|
||||
<?php else: ?><a class="nav-link dropdown-toggle" href="<?= URLS['LOGIN'] ?>"
|
||||
role="button"><?= ICONS['LOGIN'] ?>Login</a><?php endif ?>
|
||||
<?= ICONS['LOGIN'] . $viewDatas['session']->get(SESSION_NAMES['AUTH'])['name'] ?>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li><a class="dropdown-item"
|
||||
href="/user/modify/<?= $viewDatas['session']->get(SESSION_NAMES['AUTH'])['uid'] ?>"><?= ICONS['SETUP'] ?>수정</a>
|
||||
</li>
|
||||
<li>
|
||||
<hr class="dropdown-divider">
|
||||
</li>
|
||||
<li><a class="dropdown-item" href="<?= URLS['LOGOUT'] ?>"><?= ICONS['LOGOUT'] ?>Logout</a></li>
|
||||
</ul>
|
||||
<?php else: ?><a class="nav-link dropdown-toggle" href="<?= URLS['LOGIN'] ?>"
|
||||
role="button"><?= ICONS['LOGIN'] ?>Login</a><?php endif ?>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@ -2,10 +2,10 @@
|
||||
<html lang="ko">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
|
||||
<title><?= $viewDatas['title'] ?></title>
|
||||
<title><?= LAYOUTS[$viewDatas['layout']]['title'] ?></title>
|
||||
<?php foreach (LAYOUTS[$viewDatas['layout']]['metas'] as $meta): ?>
|
||||
<?= $meta ?>
|
||||
<?php endforeach; ?>
|
||||
<?php foreach (LAYOUTS[$viewDatas['layout']]['stylesheets'] as $stylesheet): ?>
|
||||
<?= $stylesheet ?>
|
||||
<?php endforeach; ?>
|
||||
|
||||
@ -2,10 +2,10 @@
|
||||
<html lang="ko">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
|
||||
<title><?= $viewDatas['title'] ?></title>
|
||||
<title><?= LAYOUTS[$viewDatas['layout']]['title'] ?></title>
|
||||
<?php foreach (LAYOUTS[$viewDatas['layout']]['metas'] as $meta): ?>
|
||||
<?= $meta ?>
|
||||
<?php endforeach; ?>
|
||||
<?php foreach (LAYOUTS[$viewDatas['layout']]['stylesheets'] as $stylesheet): ?>
|
||||
<?= $stylesheet ?>
|
||||
<?php endforeach; ?>
|
||||
@ -27,12 +27,9 @@
|
||||
<?= $this->include(LAYOUTS[$viewDatas['layout']]['path'] . '/top'); ?>
|
||||
</div>
|
||||
<div class="middle">
|
||||
<div class="left"><?= $this->include(LAYOUTS[$viewDatas['layout']]['path'] . '/left_menu'); ?></div>
|
||||
<div class="center">
|
||||
<div class="header"><?= $this->include("templates/{$viewDatas['layout']}/header"); ?></div>
|
||||
<div class="content"><?= $this->renderSection('content') ?></div>
|
||||
<div class="footer"><?= $this->include("templates/{$viewDatas['layout']}/footer"); ?></div>
|
||||
</div>
|
||||
<div class="header"><?= $this->include("templates/{$viewDatas['layout']}/header"); ?></div>
|
||||
<div class="content"><?= $this->renderSection('content') ?></div>
|
||||
<div class="footer"><?= $this->include("templates/{$viewDatas['layout']}/footer"); ?></div>
|
||||
</div>
|
||||
<div class="bottom">
|
||||
<?= $this->include(LAYOUTS[$viewDatas['layout']]['path'] . '/bottom'); ?>
|
||||
|
||||
3
app/Views/layouts/front/bottom.php
Normal file
3
app/Views/layouts/front/bottom.php
Normal file
@ -0,0 +1,3 @@
|
||||
<nav class="tail navbar navbar-expand-lg">
|
||||
|
||||
</nav>
|
||||
42
app/Views/layouts/front/direct_form.php
Normal file
42
app/Views/layouts/front/direct_form.php
Normal file
@ -0,0 +1,42 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
|
||||
<title><?= $viewDatas['title'] ?></title>
|
||||
<?php foreach (LAYOUTS[$viewDatas['layout']]['stylesheets'] as $stylesheet): ?>
|
||||
<?= $stylesheet ?>
|
||||
<?php endforeach; ?>
|
||||
<?php foreach (LAYOUTS[$viewDatas['layout']]['javascripts'] as $javascript): ?>
|
||||
<?= $javascript ?>
|
||||
<?php endforeach; ?>
|
||||
<link href="/css/<?= $viewDatas['layout'] ?>.css" media="screen" rel="stylesheet" type="text/css" />
|
||||
<script type="text/javascript" src="/js/<?= $viewDatas['layout'] ?>.js"></script>
|
||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!-- WARNING: Respond.js doesn' t work if you view the page via file:// -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
|
||||
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="top">
|
||||
<?= $this->include(LAYOUTS[$viewDatas['layout']]['path'] . '/top'); ?>
|
||||
</div>
|
||||
<div class="middle">
|
||||
<div class="left"><?= $this->include(LAYOUTS[$viewDatas['layout']]['path'] . '/left_menu'); ?></div>
|
||||
<div class="center">
|
||||
<div class="header"><?= $this->include("templates/{$viewDatas['layout']}/header"); ?></div>
|
||||
<div class="content"><?= $this->renderSection('content') ?></div>
|
||||
<div class="footer"><?= $this->include("templates/{$viewDatas['layout']}/footer"); ?></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bottom">
|
||||
<?= $this->include(LAYOUTS[$viewDatas['layout']]['path'] . '/bottom'); ?>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
30
app/Views/layouts/front/iframe_form.php
Normal file
30
app/Views/layouts/front/iframe_form.php
Normal file
@ -0,0 +1,30 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
|
||||
<title><?= $viewDatas['title'] ?></title>
|
||||
<?php foreach (LAYOUTS[$viewDatas['layout']]['stylesheets'] as $stylesheet): ?>
|
||||
<?= $stylesheet ?>
|
||||
<?php endforeach; ?>
|
||||
<?php foreach (LAYOUTS[$viewDatas['layout']]['javascripts'] as $javascript): ?>
|
||||
<?= $javascript ?>
|
||||
<?php endforeach; ?>
|
||||
<link href="/css/<?= $viewDatas['layout'] ?>.css" media="screen" rel="stylesheet" type="text/css" />
|
||||
<script type="text/javascript" src="/js/<?= $viewDatas['layout'] ?>.js"></script>
|
||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!-- WARNING: Respond.js doesn' t work if you view the page via file:// -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
|
||||
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="content"><?= $this->renderSection('content') ?></div>
|
||||
<div class="footer"><?= $this->include("templates/{$viewDatas['layout']}/footer"); ?></div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
30
app/Views/layouts/front/modal_form.php
Normal file
30
app/Views/layouts/front/modal_form.php
Normal file
@ -0,0 +1,30 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
|
||||
<title><?= $viewDatas['title'] ?></title>
|
||||
<?php foreach (LAYOUTS[$viewDatas['layout']]['stylesheets'] as $stylesheet): ?>
|
||||
<?= $stylesheet ?>
|
||||
<?php endforeach; ?>
|
||||
<?php foreach (LAYOUTS[$viewDatas['layout']]['javascripts'] as $javascript): ?>
|
||||
<?= $javascript ?>
|
||||
<?php endforeach; ?>
|
||||
<link href="/css/<?= $viewDatas['layout'] ?>.css" media="screen" rel="stylesheet" type="text/css" />
|
||||
<script type="text/javascript" src="/js/<?= $viewDatas['layout'] ?>.js"></script>
|
||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!-- WARNING: Respond.js doesn' t work if you view the page via file:// -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
|
||||
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="content"><?= $this->renderSection('content') ?></div>
|
||||
<div class="footer"><?= $this->include("templates/{$viewDatas['layout']}/footer"); ?></div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
42
app/Views/layouts/front/top.php
Normal file
42
app/Views/layouts/front/top.php
Normal file
@ -0,0 +1,42 @@
|
||||
<nav class="navbar navbar-expand-lg">
|
||||
<div class="container-fluid">
|
||||
<nav class="nav"><a class="navbar-brand" href="#">관리페이지</a></nav>
|
||||
<ul class="nav justify-content-center">
|
||||
<li class="nav-item">
|
||||
<?= ICONS['LOCK'] ?>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<input type="text" class="form-control" value="<?= getPasswordString_CommonHelper() ?>" id="makePassword">
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<button class="btn btn-default border border-dark" type="button" id="totSearchBtn"
|
||||
onClick="window.location.reload();"><?= ICONS['SEARCH'] ?></button>
|
||||
</li>
|
||||
<!-- <li class="nav-item">
|
||||
<form class="d-flex me-20" role="search">
|
||||
<input class="form-control" type="search" placeholder="Search" aria-label="Search">
|
||||
<button class="btn btn-outline-success" type="submit">Search</button>
|
||||
</form>
|
||||
</li> -->
|
||||
</ul>
|
||||
<ul class="nav justify-content-end">
|
||||
<li class="nav-item">
|
||||
<?php if ($viewDatas['session']->get(SESSION_NAMES['ISLOGIN'])): ?>
|
||||
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<?= ICONS['LOGIN'] . $viewDatas['session']->get(SESSION_NAMES['AUTH'])['name'] ?>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li><a class="dropdown-item"
|
||||
href="/user/modify/<?= $viewDatas['session']->get(SESSION_NAMES['AUTH'])['uid'] ?>"><?= ICONS['SETUP'] ?>수정</a>
|
||||
</li>
|
||||
<li>
|
||||
<hr class="dropdown-divider">
|
||||
</li>
|
||||
<li><a class="dropdown-item" href="<?= URLS['LOGOUT'] ?>"><?= ICONS['LOGOUT'] ?>Logout</a></li>
|
||||
</ul>
|
||||
<?php else: ?><a class="nav-link dropdown-toggle" href="<?= URLS['LOGIN'] ?>"
|
||||
role="button"><?= ICONS['LOGIN'] ?>Login</a><?php endif ?>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
@ -5,7 +5,7 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
|
||||
<title><?= $viewDatas['title'] ?></title>
|
||||
<title><?= LAYOUTS[$viewDatas['layout']]['title'] ?></title>
|
||||
<?php foreach (LAYOUTS[$viewDatas['layout']]['stylesheets'] as $stylesheet): ?>
|
||||
<?= $stylesheet ?>
|
||||
<?php endforeach; ?>
|
||||
|
||||
64
app/Views/templates/front/footer.php
Normal file
64
app/Views/templates/front/footer.php
Normal file
@ -0,0 +1,64 @@
|
||||
<?= $viewDatas['session']->getFlashdata(SESSION_NAMES['RETURN_MSG']) ? alert_CommonHelper($viewDatas['session']->getFlashdata(SESSION_NAMES['RETURN_MSG'])) : "" ?>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
//class가 calender인 inputbox용,날짜field용
|
||||
$(".calender").datepicker({
|
||||
changeYear: true,
|
||||
changeMonth: true,
|
||||
yearRange: "-10:+0",
|
||||
dateFormat: "yy-mm-dd"
|
||||
});
|
||||
//id가 batchjobuids_checkbox인 버튼을 클릭시 class가 batchjobuids_checkboxs인 checkbox용
|
||||
$('#batchjobuids_checkbox').click(function(event) {
|
||||
if (this.checked) {
|
||||
$('.batchjobuids_checkboxs').each(function() { //loop checkbox
|
||||
$(this).prop('checked', true); //check
|
||||
});
|
||||
} else {
|
||||
$('.batchjobuids_checkboxs').each(function() { //loop checkbox
|
||||
$(this).prop('checked', false); //uncheck
|
||||
});
|
||||
}
|
||||
});
|
||||
//class가 select-field인 SelectBox용
|
||||
$(".select-field").select2({
|
||||
theme: "classic",
|
||||
width: 'style',
|
||||
dropdownAutoWidth: true
|
||||
});
|
||||
// text editor 초기화
|
||||
//참고: https://phppot.com/menu/php/learn-php/
|
||||
// class가 editor인 textarea용
|
||||
tinymce.init({
|
||||
selector: 'textarea.tinymce',
|
||||
plugins: ['code', 'image', 'preview', 'table', 'emoticons', 'autoresize'],
|
||||
height: 600,
|
||||
// content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:16px }'
|
||||
automatic_uploads: false,
|
||||
images_upload_url: '/tinymce_upload.php',
|
||||
// images_upload_base_path: '/upload_images',
|
||||
images_upload_handler: function(blobInfo, success, failure) {
|
||||
var xhr, formData;
|
||||
xhr = new XMLHttpRequest();
|
||||
xhr.withCredentials = false;
|
||||
xhr.open('POST', '/tinymce_upload.php');
|
||||
xhr.onload = function() {
|
||||
var json;
|
||||
if (xhr.status != 200) {
|
||||
failure('HTTP Error: ' + xhr.status);
|
||||
return;
|
||||
}
|
||||
json = JSON.parse(xhr.responseText);
|
||||
if (!json || typeof json.file_path != 'string') {
|
||||
failure('Invalid JSON: ' + xhr.responseText);
|
||||
return;
|
||||
}
|
||||
success(json.file_path);
|
||||
};
|
||||
formData = new FormData();
|
||||
formData.append('file', blobInfo.blob(), blobInfo.filename());
|
||||
xhr.send(formData);
|
||||
},
|
||||
});
|
||||
});
|
||||
</script>
|
||||
87
app/Views/templates/front/header.php
Normal file
87
app/Views/templates/front/header.php
Normal file
@ -0,0 +1,87 @@
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="nav-item">
|
||||
<span class="nav-item navbar-brand" aria-current="page">
|
||||
<h4> <?= ICONS['DESKTOP'] ?> <?= $viewDatas['title'] ?> </h4>
|
||||
</span>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<span class="nav-link active" aria-current="page" data-bs-toggle="modal" data-bs-target="#DNSModal" style="cursor:pointer;">Cloudflare DNS</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="modal fade" id="DNSModal" tabindex="-1" aria-labelledby="CloudflareDNSModal" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg modal-dialog-centered modal-dialog-scrollable">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5" id="CloudflareDNSModal">Cloudflare DNS</h1>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<style>
|
||||
table.cloudflare {
|
||||
width: 100%;
|
||||
border: thin solid;
|
||||
}
|
||||
|
||||
table.cloudflare th {
|
||||
border: thin solid;
|
||||
text-align: center;
|
||||
padding: 0px 5px 0px 5px;
|
||||
background-color: #e8e9ea;
|
||||
}
|
||||
|
||||
table.cloudflare td {
|
||||
border: thin solid;
|
||||
text-align: center;
|
||||
padding: 0px 5px 0px 5px;
|
||||
}
|
||||
|
||||
table.cloudflare td.dnsname:hover {
|
||||
cursor: pointer;
|
||||
background-color: #fde9bf;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
function copyToClipboard(element, domain) {
|
||||
navigator.clipboard.writeText(domain);
|
||||
element.style.backgroundColor = '#fde9bf';
|
||||
}
|
||||
</script>
|
||||
<table class="cloudflare">
|
||||
<tr>
|
||||
<th>cloudprime001@idcjp.jp(영,숫자)</th>
|
||||
<td class="dnsname" onclick="copyToClipboard(this,'felicity.ns.cloudflare.com')">felicity.ns.cloudflare.com</td>
|
||||
<td class="dnsname" onclick="copyToClipboard(this,'tara.ns.cloudflare.com')">tara.ns.cloudflare.com</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>cloudjp002@idcjp.jp(ㄱ~ㅅ)</th>
|
||||
<td class="dnsname" onclick="copyToClipboard(this,'aida.ns.cloudflare.com');">aida.ns.cloudflare.com</td>
|
||||
<td class="dnsname" onclick="copyToClipboard(this,'kurt.ns.cloudflare.com');">kurt.ns.cloudflare.com</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>jpcf003@gmail.com(ㅇ~ㅎ)</th>
|
||||
<td class="dnsname" onclick="copyToClipboard(this,'natasha.ns.cloudflare.com');">natasha.ns.cloudflare.com</td>
|
||||
<td class="dnsname" onclick="copyToClipboard(this,'plato.ns.cloudflare.com');">plato.ns.cloudflare.com</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>cloudwin001@idcjp.jp(영,숫자)</th>
|
||||
<td class="dnsname" onclick="copyToClipboard(this,'alina.ns.cloudflare.com');">alina.ns.cloudflare.com</td>
|
||||
<td class="dnsname" onclick="copyToClipboard(this,'rick.ns.cloudflare.com');">rick.ns.cloudflare.com</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>cloudwin002@idcjp.jp(ㄱ~ㅅ)</th>
|
||||
<td class="dnsname" onclick="copyToClipboard(this,'hope.ns.cloudflare.com');">hope.ns.cloudflare.com</td>
|
||||
<td class="dnsname" onclick="copyToClipboard(this,'piotr.ns.cloudflare.com');">piotr.ns.cloudflare.com</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>cloudwin003@idcjp.jp(ㅇ~ㅎ)</th>
|
||||
<td class="dnsname" onclick="copyToClipboard(this,'tani.ns.cloudflare.com');">tani.ns.cloudflare.com</td>
|
||||
<td class="dnsname" onclick="copyToClipboard(this,'woz.ns.cloudflare.com');">woz.ns.cloudflare.com</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
29
app/Views/templates/front/iframe_form.php
Normal file
29
app/Views/templates/front/iframe_form.php
Normal file
@ -0,0 +1,29 @@
|
||||
<!-- 처음 호출할때 사용법
|
||||
$this->include('templates/' . $viewDatas['layout'] . '/actionform');
|
||||
-->
|
||||
<!-- 동적으로 ifram src 바꾸고싶을때
|
||||
<span onClick="changeIframe_src('신규URL')" style="cursor:pointer;"></span>
|
||||
-->
|
||||
<div class="index_action_form">
|
||||
<iframe id="index_iframe" src=" <?= current_url() . "/create" ?>" scrolling="no">
|
||||
<p>사용 중인 브라우저는 iframe을 지원하지 않습니다.</p>
|
||||
</iframe>
|
||||
</div>
|
||||
<script>
|
||||
function resizeIframe() {
|
||||
var iframe = document.getElementById('index_iframe');
|
||||
iframe.style.height = iframe.contentWindow.document.body.scrollHeight + 'px';
|
||||
}
|
||||
|
||||
function changeIframe_src(target_url) {
|
||||
var iframe = document.getElementById('index_iframe');
|
||||
var newIframe = iframe.cloneNode();
|
||||
newIframe.src = target_url;
|
||||
iframe.parentNode.replaceChild(newIframe, iframe); // 기존 iframe을 새 iframe으로 교체
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var iframe = document.getElementById('index_iframe');
|
||||
iframe.onload = resizeIframe; // iframe이 로드된 후 높이를 조정
|
||||
});
|
||||
</script>
|
||||
8
app/Views/templates/front/iframe_form_close.php
Normal file
8
app/Views/templates/front/iframe_form_close.php
Normal file
@ -0,0 +1,8 @@
|
||||
<?= $this->extend("layouts/empty") ?>
|
||||
<?= $this->section('content') ?>
|
||||
<div class="text-center">
|
||||
<div><?= $viewDatas['message'] ?></div>
|
||||
<p>작업 완료 후 아래 버튼을 클릭하면 모달이 닫힙니다.</p>
|
||||
<button onclick="parent.window.location.reload()">작업 완료</button>
|
||||
</div>
|
||||
<?= $this->endSection() ?>
|
||||
24
app/Views/templates/front/index_top.php
Normal file
24
app/Views/templates/front/index_top.php
Normal file
@ -0,0 +1,24 @@
|
||||
<?= form_open(current_url(), array("method" => "get")) ?>
|
||||
<nav class="index_top navbar navbar-expand-lg">
|
||||
<div class="container-fluid">
|
||||
<nav class="condition nav">
|
||||
조건검색:
|
||||
<?php $fieldform_function = "getFieldForm_{$viewDatas['class_name']}Helper" ?>
|
||||
<?php foreach ($viewDatas['filter_fields'] as $field): ?>
|
||||
<?= $fieldform_function($field, $viewDatas[$field] ?: old($field), $viewDatas) ?>
|
||||
<?php endforeach ?>
|
||||
</nav>
|
||||
<nav class="search nav justify-content-center">
|
||||
검색어:<?= form_input('word', $viewDatas['word']) ?>
|
||||
검색일:<?= form_input('start', $viewDatas['start'], ["class" => "calender"]) ?><?= form_input('end', $viewDatas['end'], ["class" => "calender"]) ?>
|
||||
<?= form_submit('', '검색하기') ?>
|
||||
<?= anchor(current_url() . '/download/excel', ICONS['EXCEL'], ["target" => "_self", "class" => "excel"]) ?>
|
||||
</nav>
|
||||
<nav class="pageinfo nav justify-content-end">
|
||||
페이지 : <?= $viewDatas['page'] ?>/<?= $viewDatas['total_page'] ?>
|
||||
<?= form_dropdown('per_page', $viewDatas['page_options'], $viewDatas['per_page'], array('onChange' => 'this.form.submit()')) ?>
|
||||
/ 총:<?= $viewDatas['total_count'] ?>
|
||||
</nav>
|
||||
</div>
|
||||
</nav>
|
||||
<?= form_close() ?>
|
||||
61
app/Views/templates/front/modal_form.php
Normal file
61
app/Views/templates/front/modal_form.php
Normal file
@ -0,0 +1,61 @@
|
||||
<!-- 처음 호출할때 사용법
|
||||
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#iframeInModal" data-src="시작URL">시작</button>
|
||||
-->
|
||||
<!-- 동적으로 ifram src 바꾸고싶을때
|
||||
<span data-bs-toggle="modal" data-bs-target="#iframeInModal" data-src="바꾸고싶은URL" style="cursor:pointer;">바꾸기</span>
|
||||
-->
|
||||
<div id="index_action_form" class="index_action_form modal fade" tabindex="-1" aria-labelledby="iframeModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg modal-dialog-centered modal-dialog-scrollable"> <!-- modal-lg는 모달 크기를 크게 설정 -->
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="iframeModalLabel">
|
||||
<h4> <?= ICONS['DESKTOP'] ?> <?= $viewDatas['title'] ?> </h4>
|
||||
</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<iframe id="iframeInModal" src="about:blank" width="100%" height="400" frameborder="0" allowfullscreen></iframe>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Modal이 열릴 때 iframe의 src를 설정 -->
|
||||
<script>
|
||||
function resizeIframe() {
|
||||
var iframe = document.getElementById('iframeInModal');
|
||||
iframe.style.height = iframe.contentWindow.document.body.scrollHeight + 'px';
|
||||
}
|
||||
|
||||
function closeBootstrapModal() {
|
||||
var modalElement = document.getElementById('index_action_form'); // 모달의 실제 DOM 요소 가져오기
|
||||
var modalInstance = bootstrap.Modal.getInstance(modalElement); // 모달 인스턴스 가져오기
|
||||
if (modalInstance) {
|
||||
// 먼저 모달을 호출한 페이지를 리로드
|
||||
window.location.reload();
|
||||
modalInstance.hide(); // 모달 닫기 (hide() 메서드 사용)
|
||||
} else {
|
||||
console.error("Modal instance not found.");
|
||||
}
|
||||
}
|
||||
|
||||
var index_action_form = document.getElementById('index_action_form');
|
||||
index_action_form.addEventListener('show.bs.modal', function(event) {
|
||||
// 버튼이 클릭된 이벤트를 가져옴
|
||||
var button = event.relatedTarget;
|
||||
// console.log(button.getAttribute('data-src'));
|
||||
var iframeSrc = button.getAttribute('data-src'); // data-src 값을 가져옴
|
||||
var iframe = document.getElementById('iframeInModal');
|
||||
// console.log(iframe.getAttribute('src'));
|
||||
iframe.src = iframeSrc; // 가져온 data-src 값을 iframe에 설정
|
||||
// iframe.onload = resizeIframe; // iframe이 로드된 후 높이를 조정
|
||||
});
|
||||
|
||||
// 모달이 닫힐 때 iframe src를 초기화하여 종료 처리
|
||||
index_action_form.addEventListener('hidden.bs.modal', function() {
|
||||
var iframe = document.getElementById('iframeInModal');
|
||||
iframe.src = "about:blank"; // 모달 닫힐 때 iframe 초기화
|
||||
});
|
||||
</script>
|
||||
8
app/Views/templates/front/modal_form_close.php
Normal file
8
app/Views/templates/front/modal_form_close.php
Normal file
@ -0,0 +1,8 @@
|
||||
<?= $this->extend("layouts/empty") ?>
|
||||
<?= $this->section('content') ?>
|
||||
<div class="text-center">
|
||||
<div><?= $viewDatas['message'] ?></div>
|
||||
<p>작업 완료 후 아래 버튼을 클릭하면 모달이 닫힙니다.</p>
|
||||
<button onclick="parent.closeBootstrapModal()">작업 완료</button>
|
||||
</div>
|
||||
<?= $this->endSection() ?>
|
||||
@ -11,8 +11,9 @@
|
||||
/* font-size: 15px; */
|
||||
}
|
||||
|
||||
html,
|
||||
body {
|
||||
background-color: #efefef;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
div.top {
|
||||
@ -24,23 +25,20 @@ div.top {
|
||||
}
|
||||
|
||||
div.middle {
|
||||
/* height: 100%; */
|
||||
/* display: flex; */
|
||||
/* border: 1px solid blue; */
|
||||
}
|
||||
|
||||
div.middle div.left {
|
||||
width: 217px;
|
||||
/* overflow: auto; */
|
||||
/* border: 1px solid red; */
|
||||
}
|
||||
/* div.middle div.left {
|
||||
border: 1px solid red;
|
||||
} */
|
||||
|
||||
div.middle div.center {
|
||||
div.middle div.right {
|
||||
width: 100%;
|
||||
/* overflow: auto; */
|
||||
/* border: 1px solid blue; */
|
||||
}
|
||||
|
||||
div.middle div.center div.header {
|
||||
div.middle div.right div.header {
|
||||
/*content 헤더라인*/
|
||||
height: 55px;
|
||||
padding-top: 15px;
|
||||
@ -51,11 +49,11 @@ div.middle div.center div.header {
|
||||
border-radius: 15px 15px 0px 0px;
|
||||
}
|
||||
|
||||
div.middle div.center div.header li.nav-item {
|
||||
div.middle div.right div.header li.nav-item {
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
div.middle div.center div.content {
|
||||
div.middle div.right div.content {
|
||||
/*content 부분*/
|
||||
padding-top: 15px;
|
||||
padding-left: 23px;
|
||||
@ -66,7 +64,7 @@ div.middle div.center div.content {
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
div.middle div.center div.footer {
|
||||
div.middle div.right div.footer {
|
||||
/*content 하단라인*/
|
||||
height: 20px;
|
||||
border-left: 1px solid gray;
|
||||
|
||||
@ -1,60 +0,0 @@
|
||||
div#left_menu{
|
||||
/* position:fixed;
|
||||
z-index:100; */
|
||||
width:200px;
|
||||
background-color:white;
|
||||
}
|
||||
|
||||
div#left_menu div.parent {
|
||||
font-size:1.5rem;
|
||||
font-weight:bold;
|
||||
height:170px;
|
||||
padding-top:30px;
|
||||
background-color: #eeeeee;
|
||||
border:1px solid silver;
|
||||
text-align:center;
|
||||
}
|
||||
div#left_menu div.parent div.title{
|
||||
color:#26417D;
|
||||
}
|
||||
div#left_menu div.parent div{
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
/* leftmenu bar */
|
||||
div#left_menu div.sibling {
|
||||
padding-top:15px;
|
||||
text-align:left;
|
||||
padding-left:20px;
|
||||
height:60px;
|
||||
border-bottom:1px solid silver;
|
||||
}
|
||||
div#left_menu div.active {
|
||||
background-color:#26417D;
|
||||
}
|
||||
div#left_menu div.sibling a{
|
||||
text-decoration: none;
|
||||
color:black;
|
||||
font-size: 1.3rem;
|
||||
}
|
||||
div#left_menu div.sibling span.play{
|
||||
float:right;
|
||||
color:white;
|
||||
padding-top:5px;
|
||||
padding-right:15px;
|
||||
}
|
||||
div#left_menu div.active {
|
||||
background-color:#26417D;
|
||||
}
|
||||
div#left_menu div.active a{
|
||||
color:white;
|
||||
}
|
||||
div#left_menu div.sibling:hover {
|
||||
background-color:#26417D;
|
||||
}
|
||||
div#left_menu div.sibling:hover a,div.active{
|
||||
color:white;
|
||||
}
|
||||
div#left_menu div.sibling:hover span.play{
|
||||
color:white;
|
||||
}
|
||||
@ -1,46 +0,0 @@
|
||||
/* ------------------------------------------------------------
|
||||
* Name : admin.css
|
||||
* Desc : Admin StyleSheet
|
||||
* Created : 2016/9/11 Tri-aBility by Junheum,Choi
|
||||
* Updated :
|
||||
------------------------------------------------------------ */
|
||||
div.login{
|
||||
width: 799px;
|
||||
height: 283px;
|
||||
margin-top:30px;
|
||||
margin-left:120px;
|
||||
padding-top:155px;
|
||||
background-image: url('/images/common/adminbg.png');
|
||||
}
|
||||
div.login form{
|
||||
margin-left:300px;
|
||||
/* border: 1px solid red; */
|
||||
}
|
||||
|
||||
div.login form table {
|
||||
width:300px;
|
||||
/* border: 1px solid red; */
|
||||
}
|
||||
|
||||
div.login form table td {
|
||||
text-align: center;
|
||||
color:white;
|
||||
padding-right:5px;
|
||||
/* border: 1px solid blue; */
|
||||
}
|
||||
div.login form table td.column {
|
||||
height: 27px;
|
||||
}
|
||||
|
||||
div.login form table td.login_bottom{
|
||||
padding-top:20px;
|
||||
}
|
||||
div.login form table td.login_bottom a{
|
||||
color:white;
|
||||
}
|
||||
|
||||
/* div.login form table input[type=submit]{
|
||||
width: 57px;
|
||||
height: 60px;
|
||||
background: url('/images/common/btn_login.png');
|
||||
} */
|
||||
@ -1,50 +0,0 @@
|
||||
/* ------------------------------------------------------------
|
||||
* Name : admin.css
|
||||
* Desc : Admin StyleSheet
|
||||
* Created : 2016/9/11 Tri-aBility by Junheum,Choi
|
||||
* Updated :
|
||||
------------------------------------------------------------ */
|
||||
|
||||
div#content a {
|
||||
color:black;
|
||||
}
|
||||
|
||||
div#content div.login{
|
||||
width: 509px;
|
||||
margin-top:30px;
|
||||
}
|
||||
|
||||
div#content div.login form {
|
||||
padding-top:20px;
|
||||
border:1px solid silver;
|
||||
}
|
||||
|
||||
div#content div.login form div.label_column{
|
||||
text-align:right;
|
||||
/* border:1px solid red; */
|
||||
}
|
||||
|
||||
div#content div.login form label.col-form-label{
|
||||
font-size: 1.5rem;
|
||||
font-weight:bold;
|
||||
/* border:1px solid red; */
|
||||
}
|
||||
|
||||
div#content div.login form input[type=text],input[type=password]{
|
||||
text-align:left;
|
||||
height:35px;
|
||||
width:250px;
|
||||
border:1px solid silver;
|
||||
}
|
||||
|
||||
div#content div.login_bottom{
|
||||
padding-top:20px;
|
||||
padding-bottom:20px;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
/* div#content div.login form table input[type=submit]{
|
||||
width: 57px;
|
||||
height: 60px;
|
||||
background: url('/images/common/btn_login.png');
|
||||
} */
|
||||
@ -1,74 +0,0 @@
|
||||
|
||||
#top_menu{
|
||||
width:1280px;
|
||||
/* border:1px solid red; */
|
||||
}
|
||||
#top_menu a:hover{
|
||||
text-decoration:none;
|
||||
}
|
||||
/* #top_menu nav.nav,ul.nav{
|
||||
border:1px solid red;
|
||||
} */
|
||||
#top_menu a.navbar-brand{
|
||||
font-size: 1.5rem;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
/* 메뉴바그룹 상단글자*/
|
||||
#top_menu div.dropdown-center ul.navbar-nav a#navbarDarkDropdownMenuLink{
|
||||
font-size: 1.3rem;
|
||||
font-weight:bold;
|
||||
/* border:1px solid silver; */
|
||||
}
|
||||
|
||||
/* 메뉴바그룹 */
|
||||
#top_menu div.dropdown-center ul.navbar-nav li.dropdown {
|
||||
width:150px;
|
||||
text-align:center;
|
||||
/* border:1px solid red; */
|
||||
}
|
||||
/* 메뉴바그룹 hover했을시 */
|
||||
#top_menu div.dropdown-center ul.navbar-nav li.dropdown:hover a#navbarDarkDropdownMenuLink{
|
||||
color:#26417D;
|
||||
}
|
||||
#top_menu div.dropdown-center ul.navbar-nav li.dropdown:hover ul.dropdown-menu{
|
||||
/* margin-top:15px; */
|
||||
display: block;
|
||||
/* 라운드없애기 */
|
||||
border-radius:0px !important;
|
||||
padding-bottom:0px;
|
||||
border:0px;
|
||||
/* border:1px solid silver; */
|
||||
}
|
||||
|
||||
/* 메뉴바 */
|
||||
#top_menu div.dropdown-center ul.navbar-nav li.dropdown ul.dropdown-menu li{
|
||||
height:60px;
|
||||
padding-top:15px;
|
||||
border-bottom:1px solid silver;
|
||||
}
|
||||
#top_menu div.dropdown-center ul.navbar-nav li.dropdown ul.dropdown-menu li a{
|
||||
width:150px;
|
||||
font-size: 1.2rem;
|
||||
font-weight:bold;
|
||||
text-align:center;
|
||||
text-decoration:none;
|
||||
}
|
||||
#top_menu div.dropdown-center ul.navbar-nav li.dropdown ul.dropdown-menu li.active{
|
||||
background-color:#26417D;
|
||||
/* border:1px solid red; */
|
||||
}
|
||||
#top_menu div.dropdown-center ul.navbar-nav li.dropdown ul.dropdown-menu li.active a{
|
||||
color:white;
|
||||
background-color:#26417D;
|
||||
/* border:1px solid red; */
|
||||
}
|
||||
/* 메뉴바 over했을시*/
|
||||
#top_menu div.dropdown-center ul.navbar-nav li.dropdown ul.dropdown-menu li:hover{
|
||||
background-color:#26417D;
|
||||
/* border:1px solid red; */
|
||||
}
|
||||
#top_menu div.dropdown-center ul.navbar-nav li.dropdown ul.dropdown-menu li:hover a{
|
||||
color:white;
|
||||
background-color:#26417D;
|
||||
}
|
||||
@ -1,24 +0,0 @@
|
||||
#top_navigator{
|
||||
padding-top:20px;
|
||||
padding-bottom:20px;
|
||||
background-color:#eeeeee
|
||||
}
|
||||
|
||||
#top_navigator ul.justify-content-center div.navigator_center span{
|
||||
padding-left:5px;
|
||||
padding-right:5px;
|
||||
}
|
||||
#top_navigator ul.justify-content-center div.navigator_center span strong{
|
||||
color:#26417D;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#top_navigator ul.justify-content-center div.navigator_center span strong{
|
||||
color:#26417D;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#top_navigator ul.justify-content-end li.cart a{
|
||||
font-size: 1.5rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
@ -7,45 +7,68 @@
|
||||
* {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
font-size: 14px;
|
||||
}
|
||||
/* #head{
|
||||
border:1px solid blue;
|
||||
} */
|
||||
#tail{
|
||||
text-align:center;
|
||||
/* border:1px solid green; */
|
||||
}
|
||||
#layout {
|
||||
width:1280px;
|
||||
/* border:1px solid blue; */
|
||||
border: 0px;
|
||||
/* font-size: 15px; */
|
||||
}
|
||||
|
||||
#layout #body{
|
||||
padding-left:10px;
|
||||
/* border:1px solid red; */
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#layout #body nav.header{
|
||||
/*content 상단라인*/
|
||||
padding-top:40px;
|
||||
margin-left:30px;
|
||||
border-bottom:1px solid silver;
|
||||
div.top {
|
||||
height: 51px;
|
||||
margin-bottom: 10px;
|
||||
border-top: 1px solid gray;
|
||||
border-bottom: 1px solid gray;
|
||||
background-color: #e8e9ea;
|
||||
}
|
||||
#layout #body nav.header nav h4.title{
|
||||
font-size:2rem;
|
||||
font-weight:bold;
|
||||
|
||||
div.middle {
|
||||
/* border: 1px solid red; */
|
||||
}
|
||||
#layout #body nav.header nav span.flow{
|
||||
color: gray;
|
||||
|
||||
div.middle div.header {
|
||||
/*content 헤더라인*/
|
||||
height: 55px;
|
||||
padding-top: 15px;
|
||||
background-color: #e7e7e7;
|
||||
border-top: 1px solid gray;
|
||||
border-left: 1px solid gray;
|
||||
border-right: 1px solid gray;
|
||||
border-radius: 15px 15px 0px 0px;
|
||||
}
|
||||
#layout #body div.footer
|
||||
/*content 하단라인*/{
|
||||
height:20px;
|
||||
/* border-top:0px;
|
||||
border-left:1px solid silver;
|
||||
border-bottom:1px solid silver;
|
||||
border-right:1px solid silver;
|
||||
border-radius: 0px 0px 10px 10px;
|
||||
background-color:white; */
|
||||
|
||||
div.middle div.header li.nav-item {
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
div.middle div.content {
|
||||
/*content 부분*/
|
||||
padding-top: 15px;
|
||||
padding-left: 23px;
|
||||
padding-right: 15px;
|
||||
padding-bottom: 15px;
|
||||
border-left: 1px solid gray;
|
||||
border-right: 1px solid gray;
|
||||
background-color: white;
|
||||
border: 1px solid red;
|
||||
}
|
||||
|
||||
div.middle div.footer {
|
||||
/*content 하단라인*/
|
||||
height: 20px;
|
||||
border-left: 1px solid gray;
|
||||
border-right: 1px solid gray;
|
||||
border-bottom: 1px solid gray;
|
||||
border-radius: 0px 0px 15px 15px;
|
||||
}
|
||||
|
||||
div.bottom {
|
||||
height: 51px;
|
||||
margin-top: 10px;
|
||||
border-top: 1px solid gray;
|
||||
border-bottom: 1px solid gray;
|
||||
background-color: #efefef;
|
||||
background-color: #e8e9ea;
|
||||
}
|
||||
@ -1,18 +0,0 @@
|
||||
/* ------------------------------------------------------------
|
||||
* Name : admin.css
|
||||
* Desc : Admin StyleSheet
|
||||
* Created : 2016/9/11 Tri-aBility by Junheum,Choi
|
||||
* Updated :
|
||||
------------------------------------------------------------ */
|
||||
table#billing td {
|
||||
text-align: center;
|
||||
color:white;
|
||||
padding-right:5px;
|
||||
/* border: 1px solid blue; */
|
||||
}
|
||||
table#billing td {
|
||||
height: 27px;
|
||||
}
|
||||
table#billing td.label {
|
||||
width: 15%;
|
||||
}
|
||||
@ -1,96 +1,156 @@
|
||||
div#content{
|
||||
color:black;
|
||||
padding-top:20px;
|
||||
padding-left:30px;
|
||||
margin-bottom:40px;
|
||||
/* border-left:1px solid silver;
|
||||
border-right:1px solid silver; */
|
||||
/*조건검색*/
|
||||
nav.index_top nav.condition {
|
||||
border-color: 1px solid red;
|
||||
}
|
||||
|
||||
/*검색*/
|
||||
nav.index_top nav.search {
|
||||
position: relative;
|
||||
height: 30px;
|
||||
border-color: 1px solid red;
|
||||
}
|
||||
|
||||
nav.index_top nav.search input[type="text"] {
|
||||
width: 200px;
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
/*검색submit*/
|
||||
nav.index_top nav.search input[type="submit"] {
|
||||
font-weight: bold;
|
||||
width: 80px;
|
||||
height: 30px;
|
||||
color: white;
|
||||
background-color: #555555;
|
||||
}
|
||||
|
||||
/*검색submit*/
|
||||
nav.index_top nav.search a.excel {
|
||||
position: absolute;
|
||||
top: -9px;
|
||||
right: -45px;
|
||||
/* border-color: 1px solid red; */
|
||||
}
|
||||
/* div#content div.top{
|
||||
border:1px solid red;
|
||||
} */
|
||||
|
||||
/*페이지정보*/
|
||||
div#content div.top nav span.pageinfo{
|
||||
font-weight:bold;
|
||||
}
|
||||
/*검색*/
|
||||
div#content div.top nav input[type=text]{
|
||||
width:200px;
|
||||
height:40px;
|
||||
border-radius:0px !important;
|
||||
/* border:1px solid red; */
|
||||
}
|
||||
/*검색submit*/
|
||||
div#content div.top nav input[type=submit]{
|
||||
font-size: 1.5rem;
|
||||
font-weight:bold;
|
||||
width:80px;
|
||||
height:40px;
|
||||
color:white;
|
||||
border-radius:0px !important;
|
||||
background-color:#555555;
|
||||
/* border:1px solid red; */
|
||||
}
|
||||
/*Excel Icon*/
|
||||
div#content div.top nav a{
|
||||
border-radius:0px !important;
|
||||
/* border:1px solid red; */
|
||||
nav.index_top nav.pageinfo {
|
||||
font-weight: bold;
|
||||
/* border-color: 1px solid red; */
|
||||
}
|
||||
|
||||
/* Table 부분 */
|
||||
div#content table {
|
||||
width:100%;
|
||||
/* overflow-x: auto;
|
||||
padding-top:5px;
|
||||
padding-bottom:5px; */
|
||||
table.index_table {
|
||||
width: 100%;
|
||||
/* table-layout: fixed; 고정 레이아웃 */
|
||||
border-collapse: collapse;
|
||||
/* 테두리 결합 */
|
||||
}
|
||||
|
||||
/* insert,update,reply,view Form Page 관련 전용*/
|
||||
div#content table.form tbody tr td.label{
|
||||
width:10%;
|
||||
text-align:right;
|
||||
padding-right:20px;
|
||||
background-color:#e8ebe9;
|
||||
}
|
||||
div#content table.form tbody tr td.column{
|
||||
height:27px;
|
||||
text-align:left;
|
||||
padding-left:20px;
|
||||
}
|
||||
/* insert,update,reply,view Form Page 관련 전용*/
|
||||
|
||||
/* 상품 리스트 전용 */
|
||||
div#content table.product tr:first-child {
|
||||
border-top:2px solid black;
|
||||
border-bottom:1px solid silver;
|
||||
}
|
||||
/* 상품 리스트 전용 */
|
||||
|
||||
div#content table thead th{
|
||||
white-space: nowrap;
|
||||
padding-top:15px;
|
||||
padding-bottom:15px;
|
||||
font-size: 1.5rem;
|
||||
font-weight:bold;
|
||||
border-top:2px solid black;
|
||||
border-bottom:1px solid silver;
|
||||
background-color:#F5F5F5;
|
||||
/* border:1px solid silver; */
|
||||
table.index_table thead th {
|
||||
white-space: nowrap;
|
||||
padding-top: 15px;
|
||||
padding-bottom: 15px;
|
||||
font-weight: bold;
|
||||
border-top: 2px solid black;
|
||||
border-bottom: 1px solid silver;
|
||||
background-color: #f5f5f5;
|
||||
text-align: center;
|
||||
/* border:1px solid silver; */
|
||||
}
|
||||
|
||||
div#content div.bottom {
|
||||
padding-top:15px;
|
||||
text-align:center;
|
||||
div.index_bottom {
|
||||
padding-top: 15px;
|
||||
text-align: center;
|
||||
word-wrap: break-word;
|
||||
/* 긴 단어 강제 줄바꿈 */
|
||||
white-space: normal;
|
||||
/* 자동 줄바꿈 */
|
||||
/* border: 1px solid red; */
|
||||
}
|
||||
div#content div.bottom ul.pagination {
|
||||
margin-top:20px;
|
||||
|
||||
div.index_pagination nav {
|
||||
margin-top: 20px;
|
||||
/* border: 1px solid red; */
|
||||
}
|
||||
div#content div.bottom ul.pagination li.page-item a{
|
||||
border:0px;
|
||||
border-radius:0px !important;
|
||||
background-color:#e8ebe9;
|
||||
|
||||
div.index_pagination nav ul.pagination {
|
||||
/* border: 1px solid green; */
|
||||
width: fit-content;
|
||||
/* UL의 너비를 내용에 맞춤 */
|
||||
margin: 0 auto;
|
||||
/* 좌우 마진을 자동으로 설정하여 중앙 배치 */
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
/* 기본 점 스타일 제거 (옵션) */
|
||||
}
|
||||
div#content div.bottom ul.pagination li.active a{
|
||||
background-color:gray;
|
||||
|
||||
div.index_pagination nav ul.pagination li {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
div.index_pagination nav ul.pagination li a {
|
||||
padding: 5px 10px 5px 10px;
|
||||
font-size: 1.5rem;
|
||||
color: white;
|
||||
background-color: #808080;
|
||||
}
|
||||
|
||||
div.index_pagination nav ul.pagination li.active a {
|
||||
color: black;
|
||||
border: 1px solid #808080;
|
||||
}
|
||||
|
||||
div.index_pagination nav ul.pagination li a:hover {
|
||||
border: 1px solid black;
|
||||
}
|
||||
|
||||
div.index_action_form {
|
||||
margin-top: 20px;
|
||||
/* border: 1px solid red; */
|
||||
}
|
||||
|
||||
div.index_action_form iframe {
|
||||
width: 100%;
|
||||
border: none;
|
||||
/* border: 1px solid blue; */
|
||||
}
|
||||
|
||||
/* create,modify,view 페이지용 */
|
||||
table.action_form {
|
||||
/* 블록 요소로 변경 */
|
||||
margin-left: auto;
|
||||
/* 자동 여백을 이용한 가로 가운데 정렬 */
|
||||
margin-right: auto;
|
||||
/* 자동 여백을 이용한 가로 가운데 정렬 */
|
||||
/* border: 1px solid blue; */
|
||||
/* table-layout: fixed; 고정 레이아웃 */
|
||||
border-collapse: collapse;
|
||||
/* 테두리 결합 */
|
||||
}
|
||||
|
||||
table.action_form th {
|
||||
text-align: center;
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
table.action_form td {
|
||||
text-align: center;
|
||||
word-wrap: break-word;
|
||||
/* 긴 단어 강제 줄바꿈 */
|
||||
white-space: normal;
|
||||
/* 자동 줄바꿈 */
|
||||
}
|
||||
|
||||
/* create,modify,view 페이지용 */
|
||||
div.login-container {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
width: 400px;
|
||||
height: 380px;
|
||||
margin: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
}
|
||||
56
public/css/front/left_menu.css
Normal file
56
public/css/front/left_menu.css
Normal file
@ -0,0 +1,56 @@
|
||||
div#left_menu {
|
||||
position: fixed;
|
||||
margin-top: 60px;
|
||||
z-index: 100;
|
||||
border: 1px solid silver;
|
||||
}
|
||||
|
||||
div#left_menu div#menu_button {
|
||||
position: absolute;
|
||||
top: -1px;
|
||||
right: -21px;
|
||||
width: 20px;
|
||||
height: 160px;
|
||||
cursor: pointer;
|
||||
writing-mode: vertical-rl;
|
||||
/* 세로로 글자를 출력 */
|
||||
text-orientation: upright;
|
||||
/* 글자가 직립되도록 설정 */
|
||||
border-top: 1px solid silver;
|
||||
border-right: 1px solid silver;
|
||||
border-bottom: 1px solid silver;
|
||||
border-radius: 0px 5px 5px 0px;
|
||||
background-color: #e8e9ea;
|
||||
}
|
||||
|
||||
div#left_menu div.accordion {
|
||||
display: none;
|
||||
width: 20px;
|
||||
}
|
||||
|
||||
div#left_menu div.accordion div.main {
|
||||
height: 50px;
|
||||
padding-top: 15px;
|
||||
padding-left: 10px;
|
||||
background-color: white;
|
||||
border-bottom: 1px solid silver;
|
||||
}
|
||||
|
||||
div#left_menu div.accordion div.accordion-item {
|
||||
height: 50px;
|
||||
padding-top: 15px;
|
||||
background-color: #eeeeee;
|
||||
border-bottom: 1px solid silver;
|
||||
}
|
||||
|
||||
div#left_menu div.accordion div.accordion-item:hover {
|
||||
background-color: silver;
|
||||
}
|
||||
|
||||
div#left_menu div.accordion div.accordion-item a {
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
div#left_menu div.accordion div.accordion-collapse a {
|
||||
padding-left: 30px;
|
||||
}
|
||||
17
public/css/front/member_link.css
Normal file
17
public/css/front/member_link.css
Normal file
@ -0,0 +1,17 @@
|
||||
nav.top_menu ul.member-link{
|
||||
/* border:1px solid red; */
|
||||
color:#3a37f3;
|
||||
padding-right:20px;
|
||||
}
|
||||
|
||||
nav.top_menu ul.member-link a{
|
||||
color:#3a37f3;
|
||||
}
|
||||
|
||||
nav.top_menu ul.member-link ul.dropdown-menu li:hover{
|
||||
background-color: #eaeaea;
|
||||
}
|
||||
|
||||
nav.top_menu ul.member-link ul.dropdown-menu li a{
|
||||
padding-left:10px;
|
||||
}
|
||||
@ -1,50 +0,0 @@
|
||||
/* ------------------------------------------------------------
|
||||
* Name : admin.css
|
||||
* Desc : Admin StyleSheet
|
||||
* Created : 2016/9/11 Tri-aBility by Junheum,Choi
|
||||
* Updated :
|
||||
------------------------------------------------------------ */
|
||||
div#order {
|
||||
position:relative;
|
||||
margin:0px;
|
||||
padding:0px;
|
||||
/* border:1px solid red; */
|
||||
}
|
||||
div#order div.orderbox {
|
||||
/* position:fixed; */
|
||||
width:200px;
|
||||
padding:5px;
|
||||
border:1px solid gray;
|
||||
}
|
||||
div#order div.orderbox div.title{
|
||||
font-size: 1.5rem;
|
||||
font-weight: 600;
|
||||
border-bottom:2px solid gray;
|
||||
}
|
||||
|
||||
div#order div.orderbox div.item{
|
||||
padding-bottom:5px;
|
||||
/* border:1px solid red; */
|
||||
}
|
||||
div#order div.orderbox div.item span.label{
|
||||
color: gray;
|
||||
}
|
||||
div#order div.orderbox div.item span.value{
|
||||
float:right;
|
||||
}
|
||||
div#order div.orderbox div.total{
|
||||
padding-top:10px;
|
||||
border-top:2px solid gray;
|
||||
}
|
||||
div#order div.orderbox div.total span.label{
|
||||
color: gray;
|
||||
}
|
||||
div#order div.orderbox div.total span.value{
|
||||
float:right;
|
||||
font-size: 1.5rem;
|
||||
font-weight: 800;
|
||||
}
|
||||
div#order div.orderbox div.submit{
|
||||
padding-top:10px;
|
||||
text-align:center;
|
||||
}
|
||||
@ -1,69 +0,0 @@
|
||||
@charset "utf-8";
|
||||
/* doc.css는 디자인페이지 스타일을 정의합니다. */
|
||||
|
||||
.greeting {margin:0 -25px;}
|
||||
.greeting:after {content:"";display:block;clear:both;}
|
||||
.greeting .col {float:left; width:50%; padding:0 25px; box-sizing:border-box; text-align:justify; letter-spacing:-.40px;}
|
||||
|
||||
|
||||
.company {position:relative; text-align:center; font-size:22px; line-height:1.4em; color:#2c2c2c; font-weight:300; padding-bottom:75px; margin-bottom:10px;}
|
||||
.company strong {color:#30539f; font-weight:500}
|
||||
.company:after {content:"";position:absolute; bottom:10px; left:50%; width:1px; height:46px; background:#ddd;}
|
||||
|
||||
.com-cnt {border:1px solid #ededed;}
|
||||
.com-cnt:after {content:" "; display:block; clear:both;}
|
||||
.com-cnt .col {float:left; width:33.333%; height:278px; position:relative;}
|
||||
.com-cnt .col.bg1 {background:url('/images/sub/com_icon1.png') 50% 41px no-repeat;}
|
||||
.com-cnt .col.bg2 {background:#f8f9fb url('/images/sub/com_icon2.png') 50% 31px no-repeat;}
|
||||
.com-cnt .col.bg3 {background:url('/images/sub/com_icon3.png') 50% 33px no-repeat;}
|
||||
.com-cnt .col:first-child:after {display:none;}
|
||||
.com-cnt .col:after {content:"";position:absolute; top:0; left:0; width:1px; height:100%; background:#ededed;}
|
||||
.com-cnt .col dl {padding-top:145px; text-align:center;}
|
||||
.com-cnt .col dl dt {color:#284685; font-size:18px; line-height:1.4em; font-weight:500; margin-bottom:10px;}
|
||||
.com-cnt .col dl dd {font-size:15px; line-height:1.4em; text-align:left; padding-left:76px;}
|
||||
|
||||
|
||||
.app-cnt:after {content:" "; display:block; clear:both;}
|
||||
.app-cnt .col {float:left; width:275px; height:130px; position:relative; box-sizing:border-box;}
|
||||
.app-cnt .col.inquiry {width:345px}
|
||||
.app-cnt .col:first-child:after {display:none;}
|
||||
.app-cnt .col:after {content:"";position:absolute; top:0; left:0; width:1px; height:100%; background:#ededed;}
|
||||
.app-cnt .col .box {width:100%; height:130px;position:relative; display:table;}
|
||||
.app-cnt .col .icon {position:absolute; top:0; left:0; width:107px; height:107px; background:url('../images/sub/sub2_1_icon.gif') 0 50% no-repeat;}
|
||||
.app-cnt .col .info {padding-left:130px; font-size:15px; line-height:1.6em; height:130px;position:relative; vertical-align:middle; display:table-cell; letter-spacing:-.30px;}
|
||||
.app-cnt .col.type2 .info {padding-left:48px; font-size:16px;}
|
||||
.app-cnt .col.type2 dl dt {color:#284685; font-size:18px; line-height:1.4em; font-weight:500; margin-bottom:5px;}
|
||||
.app-cnt .col.type2 dl dt img {vertical-align:middle; padding-left:5px;}
|
||||
|
||||
.product-cnt {margin-bottom:70px; text-align:center;}
|
||||
.product-cnt:last-child {margin-bottom:0}
|
||||
.product-cnt p {line-height:0}
|
||||
.product-cnt .col {position:relative; vertical-align:top; display:inline-block; width:420px; margin:-61px 10px 0 10px;}
|
||||
.pro-title.type1 {background-color:#41adde}
|
||||
.pro-title.type2 {background-color:#0280c9}
|
||||
.pro-title.type3 {background-color:#284685}
|
||||
.pro-title {font-size:20px; line-height:61px;color:#fff; font-weight:500; text-align:center;background-image:url('../images/sub/sub2_2_tit.png'); background-repeat:no-repeat; background-position:100% 0;}
|
||||
.table01 table {width:100%; border-collapse:collapse; border-spacing:0px;}
|
||||
.table01 table tbody th {padding:12px 10px; height:35px; font-size:16px; font-weight:500; line-height:22px; color:#4d4d4d; border-bottom:1px dotted #d6d6d6; background:#f6fafc;}
|
||||
.table01 table tbody td {padding:12px 20px; color:#2c2c2c; font-size:16px; line-height:22px; border-bottom:1px dotted #d6d6d6;}
|
||||
.table01 strong {font-weight:500}
|
||||
|
||||
.box-cnt {border:1px solid #e0e0e0; border-radius:10px; padding:38px 27px; margin-bottom:50px;}
|
||||
.box-cnt:last-child {margin-bottom:0}
|
||||
.box-cnt .title {background:#f6f6f6; font-size:20px; line-height:1.4em; color:#2c2c2c; padding:5px 0 5px 18px; font-weight:500; margin-bottom:15px;}
|
||||
.box-cnt .cnt {padding-left:18px; font-size:17px; line-height:1.6em; font-weight:200}
|
||||
.box-cnt .cnt dl dt {position:relative; color:#2e3192; font-size:18px; line-height:1.4em; font-weight:500; padding-left:18px;}
|
||||
.box-cnt .cnt dl dt:after {content:"";position:absolute;top:50%; margin-top:-2px; left:0; width:10px; height:5px; background:#2e3192; border-radius:2px;}
|
||||
.box-cnt .cnt dl dd {text-indent:-10px; padding-left:10px; letter-spacing:-.30px;}
|
||||
|
||||
/*
|
||||
.sitemap:after {content:" "; display:block; clear:both;}
|
||||
.sitemap dl {float:left; display:inline; width:225px; margin:0 0 30px 80px;}
|
||||
.sitemap dl.first {margin-left:0}
|
||||
.sitemap dl dt {padding:10px 0; text-align:center; font-size:16px; font-weight:500; color:#fff; margin:0 0 5px 0; background:#737373;border-top-left-radius:20px; border-bottom-right-radius:20px;}
|
||||
.sitemap dl dd {line-height:40px; border-bottom:1px solid #eee; font-weight:300; text-indent:-12px; padding-left:13px;}
|
||||
.sitemap dl dd a {display:block; padding:8px 0 8px 15px; font-size:15px; line-height:20px;}
|
||||
.sitemap dl dd a:hover {color:#f1592a}
|
||||
.sitemap dl dd ul {padding:2px 0 20px;}
|
||||
.sitemap dl dd ul li a {background:none; color:#f1592a; font-size:12px; line-height:20px; padding:0 0 0 20px;}
|
||||
*/
|
||||
@ -7,23 +7,49 @@
|
||||
@charset "utf-8";
|
||||
|
||||
/* user class */
|
||||
h1,h2,h3,h4,h5,h6,strong,th,.bold{font-weight:500;}
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
strong,
|
||||
th,
|
||||
.bold {
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
input[type=text],input[type=password]{
|
||||
input[type=text],
|
||||
input[type=password] {
|
||||
display: inline-block;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 4px;
|
||||
box-sizing: border-box;
|
||||
white-space: nowrap;
|
||||
}
|
||||
select,textarea,button {
|
||||
|
||||
select,
|
||||
textarea,
|
||||
button {
|
||||
display: inline-block;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 4px;
|
||||
box-sizing: border-box;
|
||||
white-space: nowrap;
|
||||
}
|
||||
a:link { text-decoration: none; }
|
||||
a:visited { text-decoration: none; }
|
||||
a:hover { text-decoration: underline; }
|
||||
a:active { text-decoration: underline; }
|
||||
|
||||
a:link {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
a:active {
|
||||
text-decoration: underline;
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>403 Forbidden</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<p>Directory access is forbidden.</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Reference in New Issue
Block a user