servermgrv2 init...

This commit is contained in:
최준흠 2023-07-27 17:21:55 +09:00
parent 6f78a6bddd
commit 532b61c40f
41 changed files with 627 additions and 172 deletions

View File

@ -109,8 +109,8 @@ define('LAYOUTS', [
'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 href="//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" media="screen" rel="stylesheet" type="text/css" />',
],
'javascripts' => [
'<script src="//cdn.jsdelivr.net/npm/jquery@3.7.0/dist/jquery.min.js"></script>',
@ -123,8 +123,8 @@ define('LAYOUTS', [
'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 href="//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" media="screen" rel="stylesheet" type="text/css" />',
],
'javascripts' => [
'<script src="//cdn.jsdelivr.net/npm/jquery@3.7.0/dist/jquery.min.js"></script>',
@ -178,14 +178,29 @@ foreach (PATHS as $key => $path) {
//아이콘 및 Sound관련
define('ICONS', [
'NEW' => '<i class="fa fa-paper-plane" aria-hidden="true"></i>',
'REPLY' => '<i class="fa fa-reply"></i>',
'DELETE' => '<i class="fa fa-trash-o"></i>',
'RELOAD' => '<i class="fa fa-refresh" aria-hidden="true"></i>',
'SETTING' => '<i class="fa fa-cogs" aria-hidden="true"></i>',
'FLAG' => '<i class="fa fa-flag" aria-hidden="true"></i>',
'EXCEL' => '<i class="fa fa-file-excel-o" style="font-size:24px"></i>',
'IMAGE_FILE' => '<i class="fa fa-file-image-o" aria-hidden="true"></i>',
'LOGIN' => '<i class="bi bi-shield-check"></i>',
'LOGOUT' => '<i class="bi bi-sign-stop-fill"></i>',
'LOCK' => '<i class="bi bi-shield-lock"></i>',
'NEW' => '<i class="bi bi-database-add"></i>',
'REPLY' => '<i class="bi bi-arrow-return-right"></i>',
'DELETE' => '<i class="bi bi-trash"></i>',
'RELOAD' => '<i class="bi bi-repeat"></i>',
'SETUP' => '<i class="bi bi-gear"></i>',
'FLAG' => '<i class="bi bi-send"></i>',
'SEARCH' => '<i class="bi bi-search"></i>',
'EXCEL' => '<i class="bi bi-file-excel"></i>',
'IMAGE_FILE' => '<i class="bi bi-file-earmark-image"></i>',
]);
define('CLASS_ICONS', [
'USER' => '<i class="bi bi-person-vcard"></i>',
'USERSNS' => '<i class="bi bi-globe"></i>',
'BOARD_CONFIG' => '<i class="bi bi-gear"></i>',
'BOARD' => '<i class="bi bi-pencil-square"></i>',
'CATEGORY' => '<i class="bi bi-boxes"></i>',
'PRODUCT' => '<i class="bi bi-box2"></i>',
'CART' => '<i class="bi bi-cart4"></i>',
'ORDER' => '<i class="bi bi-clipboard-check"></i>',
'BILLING' => '<i class="bi bi-cash-coin"></i>',
]);
define('AUDIOS', [
'Alram_GetEmail' => '<object width=0 height=0 data="/sound/jarvis_email.mp3" type="audio/mpeg"></object>',

View File

@ -41,9 +41,6 @@ $routes->get('/signup/(:alpha)', 'AuthController::signup/$1');
$routes->get('/logout', 'AuthController::logout');
$routes->group('cli', ['namespace' => 'App\Controllers\CLI'], function ($routes) {
});
$routes->group('front', ['namespace' => 'App\Controllers\Front'], function ($routes) {
$routes->get('/', 'FrontController::index');
});
// authGuard는 App\Config\Filters.php의 $aliases에 선언한 이름이어야 함
$routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'authFilter:master,director,cloudflare,manager'], static function ($routes) {
$routes->get('/', 'Home::index');
@ -109,6 +106,34 @@ $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'au
$routes->get('reload/(:num)', 'HPILOController::reload/$1');
});
});
$routes->group('front', ['namespace' => 'App\Controllers\Front'], function ($routes) {
$routes->get('/', 'Home::index');
$routes->group('user', static function ($routes) {
$routes->get('', 'UserController::index');
$routes->get('excel', 'UserController::excel');
$routes->get('insert', 'UserController::insert_form');
$routes->post('insert', 'UserController::insert');
$routes->get('update/(:uuid)', 'UserController::update_form/$1');
$routes->post('update/(:uuid)', 'UserController::update/$1');
$routes->get('view/(:uuid)', 'UserController::view/$1');
$routes->get('delete/(:uuid)', 'UserController::delete/$1', ['filter' => 'authFilter:master']);
$routes->get('toggle/(:uuid)/(:hash)', 'UserController::toggle/$1/$2');
$routes->post('batchjob', 'UserController::batchjob');
});
$routes->group('board', static function ($routes) {
$routes->get('', 'BoardController::index');
$routes->get('excel', 'BoardController::excel/$1');
$routes->get('insert', 'BoardController::insert_form');
$routes->post('insert', 'BoardController::insert');
$routes->get('update/(:num)', 'BoardController::update_form/$1');
$routes->post('update/(:num)', 'BoardController::update/$1');
$routes->get('view/(:num)', 'BoardController::view/$1');
$routes->get('reply/(:num)', 'BoardController::reply_form/$1');
$routes->post('reply/(:num)', 'BoardController::reply/$1');
$routes->get('delete/(:num)', 'BoardController::delete/$1', ['filter' => 'authFilter:master']);
$routes->get('download/(:alpha)/(:num)', 'BoardController::download/$1/$2');
});
});
/*
* --------------------------------------------------------------------
* Additional Routing

View File

@ -12,7 +12,7 @@ class AdminController extends BASEController
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
parent::initController($request, $response, $logger);
$this->_viewPath = strtolower('Admin/');
$this->_viewPath .= strtolower('Admin/');
$this->_viewDatas['layout'] = LAYOUTS['admin'];
$this->_viewDatas['title'] = "관리자페이지";
}

View File

@ -5,6 +5,7 @@ namespace App\Controllers\Admin;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
use App\Libraries\Log\Log;
abstract class AdminHierarchyController extends AdminController
{

View File

@ -0,0 +1,74 @@
<?php
namespace App\Controllers\Front;
use App\Models\BoardConfigModel;
use App\Models\BoardModel;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
class BoardController extends FrontHierarchyController
{
private $_boardConfigModel = null;
private $_board_config_uids = null;
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
parent::initController($request, $response, $logger);
$this->_className .= 'Board';
$this->_model = new BoardModel();
helper($this->_className);
$this->_viewPath .= strtolower($this->_className);
$this->_viewDatas['title'] = lang($this->_className . '.title');
$this->_viewDatas['className'] = $this->_className;
}
//BoardConfig모델
final protected function getBoardConfigModel(): BoardConfigModel
{
return is_null($this->_boardConfigModel) ? new BoardConfigModel() : $this->_boardConfigModel;
}
//Field별 Form Option용
protected function getFieldFormOption(string $field): array
{
switch ($field) {
case 'board_config_uid':
$options = $this->_board_config_uids = $this->_board_config_uids ?: $this->getBoardConfigModel()->getFieldFormOptions(['status' => 'use']);
break;
default:
return parent::getFieldFormOption($field);
break;
}
if (!is_array($options)) {
throw new \Exception(__FUNCTION__ . "에서 {$this->_className}의 Field:{$field}의 FormOptionData가 array가 아닙니다.\n" . var_export($options, true));
}
return $options;
}
//Field별 Form Datas 처리용
protected function getFieldFormData(string $field, $entity = null): array
{
switch ($field) {
case 'passwd':
$this->_viewDatas['fieldDatas'][$field] = $this->request->getVar($field);
$this->_viewDatas['fieldDatas']['confirmpassword'] = $this->request->getVar('confirmpassword');
break;
case 'board_file':
$this->_viewDatas['fieldDatas'][$field] = $this->single_upload_procedure($field, $entity);
break;
default:
return parent::getFieldFormData($field, $entity);
break;
}
return $this->_viewDatas['fieldDatas'];
}
//View 관련
protected function view_process($entity)
{
// view_cnt에 추가하기위함
$this->_model->increaseViewCount($entity->getPrimaryKey());
return parent::view_process($entity);
}
}

View File

@ -12,7 +12,7 @@ class FrontController extends BASEController
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
parent::initController($request, $response, $logger);
$this->_viewPath = strtolower('Front/');
$this->_viewPath .= strtolower('Front/');
$this->_viewDatas['layout'] = LAYOUTS['front'];
$this->_viewDatas['title'] = "사용자페이지";
}

View File

@ -0,0 +1,63 @@
<?php
namespace App\Controllers\Front;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
abstract class FrontHierarchyController extends FrontController
{
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
parent::initController($request, $response, $logger);
}
//Reply관련
protected function reply_form_process($entity)
{
return $this->update_form_process($entity);
}
final public function reply_form($uid)
{
try {
$entity = $entity = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]);
$this->_viewDatas['fields'] = $this->_model->getFields('reply');
$this->_viewDatas['fieldRules'] = $this->_model->getFieldRules($this->_viewDatas['fields'], 'reply');
$this->_viewDatas['fieldFilters'] = $this->_model->getFieldFilters();
$this->_viewDatas['entity'] = $this->reply_form_process($entity);
return view($this->_viewPath . '/reply', $this->_viewDatas);
} catch (\Exception $e) {
return alert_CommonHelper($e->getMessage(), 'back');
}
}
protected function reply_validate($entity)
{
return $this->update_validate($entity);
}
protected function reply_process($entity)
{
return $this->_model->reply($entity, $this->_viewDatas['fieldDatas']);
}
public function reply($uid)
{
$message = "";
try {
$entity = $entity = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]);
$this->_viewDatas['fields'] = $this->_model->getFields('reply');
$this->_viewDatas['fieldRules'] = $this->_model->getFieldRules($this->_viewDatas['fields'], 'reply');
$this->_viewDatas['fieldFilters'] = $this->_model->getFieldFilters();
$entity = $this->reply_validate($entity);
$entity = $this->reply_process($entity);
$message = "{$entity->getTitle()} " . __FUNCTION__ . " 완료하였습니다.";
log_message("info", "{$this->_viewDatas['title']} {$message}");
return alert_CommonHelper($message, $this->_session->get(SESSION_NAMES['RETURN_URL']));
} catch (\Exception $e) {
$message = __FUNCTION__ . " 실패하였습니다.";
log_message("warning", $e->getMessage());
log_message("warning", var_export($this->_viewDatas['fieldDatas'], true));
log_message("info", "{$this->_viewDatas['title']} {$message}",);
return redirect()->back()->withInput()->with("error", $message . "<br>\n{$e->getMessage()}");
}
}
}

View File

@ -0,0 +1,37 @@
<?php
namespace App\Controllers\Front;
use App\Models\UserModel;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
class UserController extends FrontController
{
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
parent::initController($request, $response, $logger);
$this->_className .= 'User';
$this->_model = new UserModel();
helper($this->_className);
$this->_viewPath .= strtolower($this->_className);
$this->_viewDatas['title'] = lang($this->_className . '.title');
$this->_viewDatas['className'] = $this->_className;
}
//Field별 Form Datas 처리용
protected function getFieldFormData(string $field, $entity = null): array
{
switch ($field) {
case 'passwd':
$this->_viewDatas['fieldDatas'][$field] = $this->request->getVar($field);
$this->_viewDatas['fieldDatas']['confirmpassword'] = $this->request->getVar('confirmpassword');
break;
default:
return parent::getFieldFormData($field, $entity);
break;
}
return $this->_viewDatas['fieldDatas'];
}
}

View File

@ -79,7 +79,8 @@ CREATE TABLE servermgr.tw_board (
uid int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
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씩 추가필요', board_config_uid varchar(36) NOT NULL COMMENT '게시판구분',
grpdepth int(3) UNSIGNED NOT NULL DEFAULT 1 COMMENT 'Group깊이: 상위가없을시 1부터시작 , 상위 grpdepth+1씩 추가필요',
board_config_uid varchar(36) NOT NULL COMMENT '게시판구분',
user_uid varchar(36) NULL COMMENT '작성자 정보',
title varchar(255) NOT NULL COMMENT '제목',
content text NOT NULL COMMENT '내용',

View File

@ -110,7 +110,7 @@ function getFieldIndex_Row_BoardHelper($field, $entity, array $fieldFilters, $fi
),
anchor(
current_url() . '/reply/' . $entity->getPrimaryKey(),
ICONS["REPLY"],
ICONS['REPLY'],
["target" => "_self"]
)
);

View File

@ -143,4 +143,4 @@ function alert_CommonHelper($msg, $url = false)
break;
}
return '<script type="text/javascript">' . $msg . '</script>';
}//
} //

View File

@ -1,6 +1,6 @@
<?php
return [
'title' => "게시판 정보",
'title' => "게시판 정보",
'label' => [
'uid' => "번호",
'grpno' => "그룹번호",

View File

@ -1,6 +1,6 @@
<?php
return [
'title' => "게시판설정 정보",
'title' => "게시판설정 정보",
'label' => [
'uid' => "번호",
'name' => "게시판제목",

View File

@ -4,6 +4,7 @@
<?= form_open_multipart(current_url(), $forms['attributes'], $forms['hiddens']) ?>
<table class="table table-bordered table-hover table-striped indexTable ">
<?php foreach ($fields as $field) : ?>
<?= csrf_field() ?>
<tr>
<td nowrap style="background-color:#e8ebe9; width:10%; text-align:right; padding-right:20px;">
<?= getFieldLabel_BoardHelper($field, $fieldRules) ?>

View File

@ -6,10 +6,10 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<?php foreach ($layout['stylesheets'] as $stylesheet) : ?>
<?php echo $stylesheet ?>
<?= $stylesheet ?>
<?php endforeach; ?>
<?php foreach ($layout['javascripts'] as $javascript) : ?>
<?php echo $javascript ?>
<?= $javascript ?>
<?php endforeach; ?>
<link href="/css/admin.css" media="screen" rel="stylesheet" type="text/css" />
@ -20,25 +20,32 @@
<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]-->
<title><?php echo $title ?></title>
<title><?= $title ?></title>
</head>
<body>
<!-- Body Header Start -->
<?php echo $this->include($layout['path'] . '/top_menu'); ?>
<?= $this->include($layout['path'] . '/top_menu'); ?>
<!-- Body Header End -->
<div id="main" class="row g-3">
<div id="left_menu" class="col-1">
<!-- Body Left menu Start -->
<?php echo $this->include($layout['path'] . '/left_menu'); ?>
<!-- Body Left menu End -->
</div>
<div id="content" class="col-11">
<!-- Body Content Start -->
<?php echo $this->renderSection('content') ?>
<!-- Body Content End -->
</div>
</div>
<table id="main">
<tr>
<td width="160" valign="top">
<!-- Body Left menu Start -->
<?= $this->include($layout['path'] . '/left_menu'); ?>
<!-- Body Left menu End -->
</td>
<td width="*" valign="top" style="background-color:white">
<!-- Body Content Start -->
<?= $this->renderSection('content') ?>
<!-- Body Content End -->
</td>
<td width="50" valign="top">
<!-- Body Right menu Start -->
<?= $this->include($layout['path'] . '/right_menu'); ?>
<!-- Body Right menu End -->
</td>
</tr>
</table>
</body>
</html>

View File

@ -1,11 +1,10 @@
<!-- left menu start -->
<link href="/css/admin/left_menu.css" media="screen" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="/js/admin/left_menu.js"></script>
<div id="menu" onMouseOver="sideMenuToggle(this);" onMouseOut="sideMenuToggle(this);">
<div id="menu_button">메뉴열기</div>
<div class="accordion">
<script type="text/javascript" src="/js/side_menu.js"></script>
<div id="left_menu" class="shadow-lg rounded">
<div class="accordion accordion-flush">
<?= $this->include($layout['path'] . '/left_menu/base'); ?>
<?= $this->include($layout['path'] . '/left_menu/hpilo'); ?>
<?= $this->include($layout['path'] . '/left_menu/board'); ?>
<?= $this->include($layout['path'] . '/left_menu/shoppingmall'); ?>
</div>
</div>

View File

@ -2,8 +2,8 @@
<h2><a href=" /admin"><i class="fa fa-home"></i>Main</a></h2>
</div>
<div class="accordion-item">
<h2><a href="/admin/user"><i class="fa fa-users"></i>계정 관리</a></h2>
<h2><a href="/admin/user"><?= CLASS_ICONS['USER'] ?></i>계정 관리</a></h2>
</div>
<div class="accordion-item">
<h2><a href="/admin/usersns"><i class="fa fa-users"></i>SNS 계정 관리</a></h2>
<h2><a href="/admin/usersns"><?= CLASS_ICONS['USERSNS'] ?></i>SNS 계정 관리</a></h2>
</div>

View File

@ -1,13 +1,13 @@
<div class="accordion-item">
<h2 class="accordion-header" id="panelsStayOpen-heading-Board">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapse-Board" aria-expanded="false" aria-controls="panelsStayOpen-collapse-Board"><b>게시판관리</b></button>
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-heading-Board" aria-expanded="false" aria-controls="flush-heading-Board"><b>게시판관리</b></button>
</h2>
<div id="panelsStayOpen-collapse-Board" class="accordion-collapse collapse show" aria-labelledby="panelsStayOpen-heading-Board">
<div id="flush-heading-Board" class="accordion-collapse collapse show" aria-labelledby="flush-heading-Board">
<div class="accordion-item">
<h2><a href="/admin/boardconfig"><i class="fa fa-share-alt"></i>설정 관리</a></h2>
<h2><a href="/admin/boardconfig"><?= CLASS_ICONS['BOARD_CONFIG'] ?>설정 관리</a></h2>
</div>
<div class="accordion-item">
<h2><a href="/admin/board"><i class="fa fa-share-alt"></i>게시글 관리</a></h2>
<h2><a href="/admin/board"><?= CLASS_ICONS['BOARD'] ?>게시글 관리</a></h2>
</div>
</div>
</div>

View File

@ -0,0 +1,22 @@
<div class="accordion-item">
<h2 class="accordion-header">
<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/category"><?= CLASS_ICONS['CATEGORY'] ?>상품분류관리</a></h2>
</div>
<div class="accordion-item">
<h2><a href="/admin/product"><?= CLASS_ICONS['PRODUCT'] ?>상품 관리</a></h2>
</div>
<div class="accordion-item">
<h2><a href="/admin/cart"><?= CLASS_ICONS['CART'] ?>장바구니 관리</a></h2>
</div>
<div class="accordion-item">
<h2><a href="/admin/order"><?= CLASS_ICONS['ORDER'] ?></i>주문 관리</a></h2>
</div>
<div class="accordion-item">
<h2><a href="/admin/billing"><?= CLASS_ICONS['BILLING'] ?></i>결제 관리</a></h2>
</div>
</div>
</div>

View File

@ -0,0 +1,7 @@
<!-- right menu start -->
<link href="/css/admin/right_menu.css" media="screen" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="/js/side_menu.js"></script>
<div id="right_menu" class="shadow-lg rounded">
<div class="accordion accordion-flush">
</div>
</div>

View File

@ -1,14 +1,14 @@
<link href="/css/admin/top_menu.css" media="screen" rel="stylesheet" type="text/css" />
<nav class="top_menu navbar navbar-expand-lg bg-light">
<nav class="navbar navbar-expand-lg bg-light" style="border-bottom:1px solid silver;">
<div class="container-fluid">
<a class="navbar-brand col-xs-12" href="/admin">BaseProject 관리 Site</a>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div class="make_password"><?= $this->include($layout['path'] . '/make_password'); ?></div>
<div class="member_link"><?= $this->include($layout['path'] . '/member_link'); ?></div>
<a href="/admin" class="navbar-brand">BaseProject 관리 Site</a>
<div class="input-group custom-search-form" style="width:270px;">
<?= $this->include($layout['path'] . '/top_menu/search'); ?>
</div>
<div class="input-group custom-search-form" style="width:270px;">
<?= $this->include($layout['path'] . '/top_menu/make_password'); ?>
</div>
<div style="float: right;">
<?= $this->include($layout['path'] . '/top_menu/member_link'); ?>
</div>
</div>
</nav>

View File

@ -0,0 +1,3 @@
<span><?= ICONS['LOCK'] ?></span>
<input type="text" class="form-control" value="<?= getPasswordString_CommonHelper() ?>" id="makePassword">
<span class="input-group-btn" id="mkbutton"><button class="btn btn-default border border-dark" type="button" id="totSearchBtn" onClick="window.location.reload();"><?= ICONS['SEARCH'] ?></button></span>

View File

@ -0,0 +1,16 @@
<ul class="navbar-nav me-auto my-2 my-lg-0 navbar-nav-scroll" style="--bs-scroll-height: 100px;">
<li class="nav-item dropdown">
<?php if ($session->get(SESSION_NAMES['ISLOGIN'])) : ?>
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<?= ICONS['LOGIN'] ?><?= $session->get(SESSION_NAMES['AUTH'])[AUTH_FIELDS['TITLE']] ?>
</a>
<ul class="dropdown-menu dropdown-menu-end">
<li><a class="dropdown-item" href="/admin/user/update/<?= $session->get(SESSION_NAMES['AUTH'])[AUTH_FIELDS['ID']] ?>"><?= ICONS['SETUP'] ?>수정</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li><a class="dropdown-item" href="/logout"><?= ICONS['LOGOUT'] ?>Logout</a></li>
</ul>
<?php else : ?><a class="nav-link dropdown-toggle" href="/login" role="button"><?= ICONS['LOGIN'] ?>Login</a><?php endif ?>
</li>
</ul>

View File

@ -0,0 +1,4 @@
<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>

View File

@ -0,0 +1,19 @@
<!-- Copyright 시작-->
<div style="magin-top:5px; margin-bottom:5px; border:1px solid silver;"></div>
<div id="footer">
<img src="logo_gray.png">
<span style="color:#999; font-size: 11px;">
<a href="/sitecontent/?sitecategory=39">会社紹介 </a>&nbsp;|&nbsp;
<a href="/sitecontent/?sitecategory=40">利用約款</a>&nbsp;|&nbsp;
<a href="/sitecontent/?sitecategory=41">個人情報保護政策</a>&nbsp;|&nbsp;
<a href="mailto:idc@idcjp.jp">eメール</a>
</span>
<div style="font-size: 11px; margin-top: 5px; line-height: 160%;">
社名 : <span class="cpy">TRi-aBility()</span> &nbsp; &nbsp; 代表者 : <span class="cpy"> </span> &nbsp; &nbsp;
住所 : <span class="cpy">東京都 大田区平和島6-5</span><br/>
TEL: <span class="cpy">043-307-5390</span> &nbsp; &nbsp; EMAIL : <span class="cpy"><a href="mailto:idc@idcjp.jp" style="color:darkblue;">idc@idcjp.jp</a></span><br/>
<!-- 事業者登録番号 : <span class="cpy">887-81-00973</span><br/> -->
<!-- Copyright &copy; 2012, YYY, All rights Reserved -->
</div>
</div>
<!-- Copyright -->

View File

@ -0,0 +1,5 @@
<div style="text-align:right; margin-top:10px; margin-bottom:5px;">
<i class="fa fa-plus text-danger" style="padding-left:5px; padding-right:5px;"></i><a href="/">HOME</a>
<i class="fa fa-angle-right" style="padding-left:5px; padding-right:5px;"></i><a href="<?php echo $parentCategory->url ?>"><?php echo $language == LANGUAGE_JAPAN ? $parentCategory->title_japanese:$parentCategory->title ?></a>
<i class="fa fa-angle-right" style="padding-left:5px; padding-right:5px;"></i><span style="font-weight:bold;"><?php echo $language == LANGUAGE_JAPAN ? $currentCategory->title_japanese:$currentCategory->title ?></span>
</div>

View File

@ -0,0 +1,8 @@
<!-- SITEBOARD LEFT BANNER 시작 -->
<script src="/js/ScrollToFixed-master/jquery-scrolltofixed-min.js" type="text/javascript"></script>
<script src="/js/front/subpage_fixed_left_banner.js" type="text/javascript"></script>
<div id="subpage_fixed_left_banner">
<div style="margin-top:30px;"><a href="/sitecontent/?sitecategory=44"><img src="left_banner_1.png"></a></div>
<div style="margin-top:20px;"><a href="javascript://" onclick="window.open('<?php echo CHATTING_URL?>','chat','width=500, height=500')" onfocus="this.blur()"><img src="left_banner_2.png"></a></div>
</div>
<!-- SITEBOARD LEFT BANNER -->

View File

@ -0,0 +1,8 @@
<!-- SITECMS LEFT BANNER 시작 -->
<script src="/js/ScrollToFixed-master/jquery-scrolltofixed-min.js" type="text/javascript"></script>
<script src="/js/front/subpage_fixed_left_banner.js" type="text/javascript"></script>
<div id="subpage_fixed_left_banner">
<div style="margin-top:30px;"><a href="/sitecontent/?sitecategory=44"><img src="left_banner_1.png"></a></div>
<div style="margin-top:20px;"><a href="javascript://" onclick="window.open('<?php echo CHATTING_URL?>','chat','width=500, height=500')" onfocus="this.blur()"><img src="left_banner_2.png"></a></div>
</div>
<!-- SITECMS LEFT BANNER -->

View File

@ -0,0 +1,13 @@
<!-- layout_content Top Logo 시작 -->
<div style="position:relative;">
<a href="/"><img src="logo.png"/></a>
<img src="logo_side.png"/>
<div style="position:absolute; with:700px; top:50px; left:620px;">
<a href="/"><img src="main_link_home.png"/></a>
<a href="mailto:idc@idcjp.jp"><img src="main_link_contact.png"/></a>
<a href="javascript:bookmarksite('IDC-JP', 'http://www.idcjp.jp')"><img src="main_link_bookmark.png"/></a>
<a href="/common/language/locale/korean"><img src="main_link_korea.png"/></a>
<a href="/common/language/locale/japanese"><img src="main_link_japan.png"/></a>
</div>
</div>
<!-- layout_content Top Logo -->

View File

@ -0,0 +1,5 @@
<div id='welcome_left_banner' style="position:absolute; top:150px; left:-215px; text-align:right;">
<img src="side_left_title.png">
<div style="padding-top:15px;"><a href="/sitecontent/?sitecategory=44"><img src="main_banner_1.png"></a></div>
<div style="padding-top:15px;"><a href="javascript://" onclick="window.open('<?php echo CHATTING_URL?>','chat','width=<?php echo SITECHAT_WINDOW_WIDTH ?>, height=<?php echo SITECHAT_WINDOW_HEIGHT?>')" onfocus="this.blur()"><img src="main_banner_2.png"></a></div>
</div>

View File

@ -0,0 +1,16 @@
<div id='partner' style="margin-bottom:5px; padding-top:5px; padding-bottom:5px; border-top:1px solid silver; border-bottom:1px solid silver;">
<img src='main_icon_partner.png'> &nbsp; &nbsp;
<img src='main_icon_softbank.png'> &nbsp;
<img src='main_icon_cisco.png'> &nbsp;
<img src='main_icon_lg.png'> &nbsp;
<img src='main_icon_hp.png'> &nbsp;
<img src='main_icon_dell.png'> &nbsp;
<img src='main_icon_ibm.png'> &nbsp;
<img src='main_icon_slim.png'> &nbsp;
<img src='main_icon_ntt.png'> &nbsp;
<img src='main_icon_jstream.png'> &nbsp;
<img src='main_icon_corel.png'> &nbsp;
<img src='main_icon_kddi.png'> &nbsp;
<img src='main_icon_red.png'> &nbsp;
<img src='main_icon_yahoobb.png'> &nbsp;
</div>

View File

@ -0,0 +1,14 @@
<div id='welcome_right_banner' style="position:absolute; top:150px; left:10px;">
<img src="side_right_title.gif">
<div style='padding-top:15px; text-align:center;'>
<div style='width: 190px;'>
<div style='float: left; width: 90px; height: 73px;'><a href='/sitecontent/?sitecategory=50'><img src='main_icon_1.png' border=0></a></div>
<div style='float: left; width: 100; height: 73px;'><a href='#'><img src='main_icon_2.png' border=0></a></div>
<div style='clear: left;'></div>
<div style='float: left; width: 90px; height: 83px;'><a href='/sitecontent/?sitecategory=52'><img src='main_icon_3.png' border=0></a></div>
<div style='float: left; width: 10px; height:0 83px;'><a href='/sitecontent/?sitecategory=54'><img src='main_icon_4.png' border=0></a></div>
<div style='clear: left;'></div>
<div style='paddint-top:15px;'><img src='main_icon_ns.png' border=0></div>
</div>
</div>
</div>

View File

@ -1,41 +1,39 @@
</div>
<!-- panel-body -->
</div>
<!-- panel panel-default -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2-bootstrap-5-theme@1.3.0/dist/select2-bootstrap-5-theme.min.css" />
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
<script src="/vendors/tinymce/tinymce/tinymce.min.js" referrerpolicy="origin"></script>
<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: "bootstrap-5",
});
//class가 editor인 textarea용
tinymce.init({
selector: '.editor',
theme: 'silver',
height: 500
});
<div class="footer">&nbsp;</div>
<!-- panel panel-default -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2-bootstrap-5-theme@1.3.0/dist/select2-bootstrap-5-theme.min.css" />
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
<script src="/vendors/tinymce/tinymce/tinymce.min.js" referrerpolicy="origin"></script>
<script type="text/javascript">
$(document).ready(function() {
//class가 calender인 inputbox용,날짜field용
$(".calender").datepicker({
changeYear: true,
changeMonth: true,
yearRange: "-10:+0",
dateFormat: "yy-mm-dd"
});
</script>
//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: "bootstrap-5",
});
//class가 editor인 textarea용
tinymce.init({
selector: '.editor',
theme: 'silver',
height: 500
});
});
</script>

View File

@ -1,4 +1,3 @@
<link href="/css/admin/header.css" media="screen" rel="stylesheet" type="text/css" />
<div class="header">
<div class="header-head"><h4><i class="fa fa-desktop"></i><?= $title ?></h4></div>
<div class="header-body">
<div class="head">
<h4><i class="bi bi-cast"></i><?= $title ?></h4>
</div>

View File

@ -1,6 +1,6 @@
<li class="nav-item">검색어:<?= form_input('word', $word) ?></li>
<li class="nav-item">검색일:
<?= form_input('start', $start, array("class" => "calender")) ?><?= form_input('end', $end, array("class" => "calender")) ?>
<?= form_submit('', '검색', array("class" => "btn btn-outline btn-primary")); ?><?= anchor(current_url() . '/excel?' . $uri->getQuery(), ICONS['EXCEL'], ["class" => "btn btn-sm btn-danger btn-circle", "target" => "_self"]) ?>
<?= form_submit('', '검색', array("class" => "btn btn-outline btn-primary")); ?><?= anchor(current_url() . '/excel?' . $uri->getQuery(), '<i class="bi bi-file-excel"></i>', ["class" => "btn btn-sm btn-danger btn-circle", "target" => "_self"]) ?>
</li>
<li class="nav-item">page:<?= $page ?> / total:<?= $total_page ?> <?= form_dropdown('per_page', $pageOptions, $per_page, array('onChange' => 'this.form.submit()')) ?> / 총:<?= $total_count ?></li>

View File

@ -47,24 +47,35 @@ a:visited { text-decoration: none; }
a:hover { text-decoration: underline; }
a:active { text-decoration: underline; }
div#main{
padding-top:10px;
padding-bottom:10px;
#main{
/* border:1px solid blue; */
margin-top:20px;
width:100%;
}
div#main div#content{
padding-top:10px;
padding-left:30px;
/* border:1px solid red; */
width:100%;
#main div.head{
padding:15px;
border-left:1px solid silver;
border-top:1px solid silver;
border-right:1px solid silver;
border-radius: 10px 10px 0px 0px;
background-color:#efefef;
}
#main div.footer{
border-left:1px solid silver;
border-bottom:1px solid silver;
border-right:1px solid silver;
border-radius: 0px 0px 10px 10px;
}
div.indexTable_wrapper{
padding:10px;
border-left:1px solid silver;
border-right:1px solid silver;
width: 100%;
}
div.indexTable_wrapper div.indexTable_head {
/* border:1px solid red; */
padding:5px 0;
}
div.indexTable_wrapper div.indexTable_head ul.nav li.nav-item{
@ -93,7 +104,6 @@ div.indexTable_wrapper div.indexTable_body ul.nav li.nav-item{
margin-left:15px;
}
div.indexTable_wrapper div.indexTable_tail {
text-align:center;
}

View File

@ -1,32 +1,24 @@
div#main div#left_menu{
div#left_menu{
position:fixed;
margin-top:139px;
/* margin-top:139px;
z-index:100;
width:28px;
border:1px solid #e7e7e7;
padding:0px;
padding:0px; */
width: 160px;
border:1px solid silver;
}
div#main div#left_menu div#menu div#menu_button{
float:right;
height: 100px;
width: 20px;
cursor: ew-resize;
border-radius: 0px 5px 5px 0px;
border: 1px solid silver;
background-color: #eaeaea;
padding:0px;
}
div#main div#left_menu div#menu div.accordion {
display:none;
div#left_menu div.accordion {
/* display:none; */
background-color: white;
}
div#main div#left_menu div#menu div.accordion div.accordion-item:hover {
div#left_menu div.accordion div.accordion-item:hover {
background-color: #e7e7e7;
}
div#main div#left_menu div#menu div.accordion div.accordion-item a{
padding-left:20px;
div#left_menu div.accordion div.accordion-item a{
padding-left:10px;
}
div#main div#left_menu div#menu div.accordion div.accordion-collapse a{
padding-left:40px;
div#left_menu div.accordion div.accordion-collapse a{
padding-left:30px;
}

View File

@ -0,0 +1,24 @@
div#right_menu{
position:fixed;
/* margin-top:139px;
z-index:100;
width:28px;
border:1px solid #e7e7e7;
padding:0px; */
width: 100px;
border:1px solid silver;
}
div#right_menu div.accordion {
/* display:none; */
background-color: white;
}
div#right_menu div.accordion div.accordion-item:hover {
background-color: #e7e7e7;
}
div#right_menu div.accordion div.accordion-item a{
padding-left:10px;
}
div#right_menu div.accordion div.accordion-collapse a{
padding-left:30px;
}

View File

@ -1,13 +1,21 @@
/* ------------------------------------------------------------
* Name : default.css
* Desc : GIGSNS Layout
* Created : 2012/07 GIGAKOREA by Donghee,kim
* Updated :
* Name : admin.css
* Desc : Admin StyleSheet
* Created : 2016/9/11 Tri-aBility by Junheum,Choi
* Updated :
------------------------------------------------------------ */
@charset "utf-8";
/*###########################################################################################
#############################공통 레이아웃###################################################
#############################################################################################*/
/* CSS Document */
/*
* * Start Bootstrap - SB Admin 2 Bootstrap Admin Theme (http://startbootstrap.com)
* * Code licensed under the Apache License v2.0.
* * For details, see http://www.apache.org/licenses/LICENSE-2.0.
*/
* {
margin:0px;
@ -17,27 +25,24 @@
}
body {
background-color: white;
background-color: #eee;
}
input[type=text],input[type=password]{
display: inline-block;
width:300px;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
white-space: nowrap;
white-space: nowrap;
}
select,textarea,button {
display: inline-block;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
white-space: nowrap;
}
div.pagination {
text-align:center;
padding-top:5px;
white-space: nowrap;
}
a:link { text-decoration: none; }
a:visited { text-decoration: none; }
a:hover { text-decoration: underline; }
a:active { text-decoration: underline; }

View File

@ -1,5 +1,5 @@
/* ------------------------------------------------------------
* Name : front.css
* Name : admin.css
* Desc : Admin StyleSheet
* Created : 2016/9/11 Tri-aBility by Junheum,Choi
* Updated :
@ -25,39 +25,89 @@
}
body {
background-color: white;
background-color: #eee;
}
input[type=text],input[type=password]{
display: inline-block;
width:100px;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
white-space: nowrap;
white-space: nowrap;
}
select,textarea,button {
display: inline-block;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
white-space: nowrap;
white-space: nowrap;
}
a:link { text-decoration: none; }
a:visited { text-decoration: none; }
a:hover { text-decoration: underline; }
a:active { text-decoration: underline; }
#main{
/* border:1px solid blue; */
margin-top:20px;
width:100%;
}
a:hover, a:visited, a:link, a:active {
text-decoration: none !important;
#main div.head{
padding:15px;
border-left:1px solid silver;
border-top:1px solid silver;
border-right:1px solid silver;
border-radius: 10px 10px 0px 0px;
background-color:#efefef;
}
#main div.footer{
border-left:1px solid silver;
border-bottom:1px solid silver;
border-right:1px solid silver;
border-radius: 0px 0px 10px 10px;
}
div.mainContent{
border:1px solid red;
padding-top:20px;
padding-left:30px;
padding-right:10px;
div.indexTable_wrapper{
padding:10px;
border-left:1px solid silver;
border-right:1px solid silver;
width: 100%;
}
div.indexTable_wrapper div.indexTable_head {
/* border:1px solid red; */
padding:5px 0;
}
div.indexTable_wrapper div.indexTable_head ul.nav li.nav-item{
/* border:1px solid red; */
margin-left:15px;
}
div.indexTable_wrapper div.indexTable_body {
width:100%;
overflow-x: auto;
padding-top:5px;
padding-bottom:5px;
}
div.indexTable_wrapper div.indexTable_body table.indexTable{
white-space: nowrap;
}
div.indexTable_wrapper div.indexTable_body table.indexTable th{
text-align:center;
font-size: 16px;
}
div.indexTable_wrapper div.indexTable_body table.indexTable td{
text-align:center;
}
div.pagination {
border: 1px solid blue;
text-align:center;
padding-top:5px;
div.indexTable_wrapper div.indexTable_body ul.nav li.nav-item{
/* border:1px solid red; */
margin-left:15px;
}
div.indexTable_wrapper div.indexTable_tail {
text-align:center;
}
div.indexTable_wrapper div.indexTable_tail ul.justify-content-center {
/* border:1px solid red; */
margin-top:20px;
}

14
public/js/side_menu.js Normal file
View File

@ -0,0 +1,14 @@
function sideMenuToggle (menu_id){
var accordion = $(".accordion")[0];
alert(accordion.clientWidth);
if (accordion.clientWidth == 0){
accordion.style.display = "block";
$("#"+menu_id).css({ "width": '200px' })
$("#button"+menu_id).html("메뉴닫기");
}
else {
accordion.style.display = "none";
$("#"+menu_id).css({"width":'28px'})
$("#button"+menu_id).html("메뉴열기");
}
}//toggleMenu