diff --git a/.gitignore b/.gitignore
index c5535ee..0b851ff 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,8 @@
#codeigniter4
composer.lock
/vendor/
+public/vendors/
+public/tinymce_uploads
.env
writable/caceh/*
@@ -13,3 +15,5 @@ writable/uploads/*
!writable/uploads/index.html
writable/debugbar/*
!writable/debugbar/index.html
+writable/excel/*
+!writable/excel/index.html
\ No newline at end of file
diff --git a/app/Config/Constants.php b/app/Config/Constants.php
index fc99b67..973884e 100644
--- a/app/Config/Constants.php
+++ b/app/Config/Constants.php
@@ -95,12 +95,12 @@ define('EVENT_PRIORITY_HIGH', 10);
//Default값 정의
define('DEFAULTS', [
- 'ROLE' => getenv('default.role') ?: "guest",
- 'STATUS' => getenv('default.status') ?: "use",
- 'EMPTY' => getenv('default.empty') ?: "",
- 'PERPAGE' => getenv('default.perpage') ?: 20,
- 'DELIMITER_FILE' => getenv('default.delimiter.file') ?: "||",
- 'DELIMITER_ROLE' => getenv('default.delimiter.role') ?: ",",
+ 'ROLE' => "guest",
+ 'STATUS' => "use",
+ 'EMPTY' => "",
+ 'PERPAGE' => 20,
+ 'DELIMITER_FILE' => "||",
+ 'DELIMITER_ROLE' => ",",
]);
//URL
define('URLS', [
@@ -108,25 +108,160 @@ define('URLS', [
'SIGNUP' => '/user/signup',
'LOGOUT' => '/user/logout',
]);
+//회원ROLE
+define('ROLES', [
+ 'guest',
+ 'user',
+ 'vip',
+ 'manager',
+ 'cloudflare',
+ 'director',
+ 'master',
+]);
//SESSION 관련
-define('SESSION', [
- 'NAMES' => ['RETURN_URL' => "return_url", 'ISLOGIN' => "islogined", 'AUTH' => 'auth', 'CART' => 'cart'],
+define('SESSION_NAMES', [
+ 'RETURN_URL' => "return_url",
+ 'ISLOGIN' => "islogined",
+ 'AUTH' => 'auth',
]);
//인증 관련
-define('AUTH', [
- 'ROLES' => ['guest', 'user', 'vip', 'manager', 'cloudflare', 'director', 'master'],
- 'FIELDS' => ['ID' => 'id', 'TITLE' => 'title', 'ROLE' => 'role'],
- 'AUTH_ADAPTERS' => [
- 'Local' => [
- 'DEBUG' => getenv("auth.loca.debug") ?: false,
- ],
- 'Google' => [
- 'DEBUG' => getenv("auth.google.debug") ?: false,
- 'ICON' => getenv("auth.google.icon") ?: '
',
- 'CLIENT_ID' => getenv("auth.google.client.id"),
- 'CLIENT_KEY' => getenv("auth.google.client.key"),
- 'CALLBACK_URL' => getenv("auth.google.client.callback_url"),
- 'TOKEN_NAME' => getenv('auth.google.client.token_name') ?: "access_token",
- ],
+define('AUTH_FIELDS', [
+ 'ID' => 'id',
+ 'TITLE' => 'title',
+ 'ROLE' => 'role'
+]);
+
+define("MESSENGERS", [
+ "skype" => [
+ "url" => "https://join.skype.com/invite/uKUgXfZThSQC",
+ "icon" => '
',
+ "id" => ''
+ ],
+ "discord" => [
+ "url" => "https://discord.gg/k6nQg84N",
+ "icon" => '
',
+ "id" => ''
+ ],
+ "telegram" => [
+ "url" => "https://t.me/daemonidc",
+ "icon" => '
',
+ "id" => '@daemonidc'
+ ],
+ "kakaotalk" => [
+ "url" => "https://t.me/daemonidc",
+ "icon" => '
',
+ "id" => ''
]
]);
+
+//아이콘 및 Sound관련
+define('ICONS', [
+ 'LOGO' => '
',
+ 'LOGIN' => '',
+ 'LOGOUT' => '',
+ 'LOCK' => '',
+ 'NEW' => '',
+ 'REPLY' => '',
+ 'DELETE' => '',
+ 'RELOAD' => '',
+ 'SETUP' => '',
+ 'FLAG' => '',
+ 'SEARCH' => '',
+ 'EXCEL' => '
',
+ 'HOME' => '',
+ 'PLAY' => '',
+ 'CART' => '',
+ 'CARD' => '',
+ 'DEPOSIT' => '',
+ 'UP' => '',
+ 'DOWN' => '',
+ 'LEFT' => '',
+ 'RIGHT' => '',
+ 'IMAGE_FILE' => '',
+ 'GOOGLE' => '',
+]);
+
+define('TOP_BANNER', [
+ 'default' => '
',
+ 'aboutus' => '
',
+ 'member' => '
',
+ 'hosting' => '
',
+ 'serverdevice' => '
',
+ 'service' => '
',
+ 'support' => '
',
+]);
+
+define('AUDIOS', [
+ 'Alram_GetEmail' => '',
+]);
+
+define('KEYWORD', '일본IDC 일본서버 일본 서버 일본호스팅 서버호스팅 디도스 공격 해외 호스팅 DDOS 방어 ddos 의뢰 디도스 보안 일본 단독서버 가상서버');
+define('LAYOUTS', [
+ 'empty' => [
+ 'path' => 'layouts' . DIRECTORY_SEPARATOR . 'empty',
+ 'stylesheets' => [
+ '',
+ '',
+ '',
+ ],
+ 'javascripts' => [
+ '',
+ ]
+ ],
+ 'front' => [
+ 'title' => KEYWORD,
+ 'path' => 'layouts' . DIRECTORY_SEPARATOR . 'front',
+ //'topmenus' => ['aboutus', 'hosting', 'serverdevice', 'service', 'support'],
+ 'topmenus' => ['aboutus', 'hosting', 'service', 'support'],
+ 'metas' => [
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ ],
+ 'stylesheets' => [
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ ],
+ 'javascripts' => [
+ '',
+ '',
+ '',
+ '',
+ '',
+ ],
+ ],
+ 'admin' => [
+ 'title' => '관리자화면',
+ 'path' => 'layouts' . DIRECTORY_SEPARATOR . 'admin',
+ 'stylesheets' => [
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ ],
+ 'javascripts' => [
+ '',
+ '',
+ '',
+ '',
+ '',
+ ]
+ ],
+]);
diff --git a/app/Controllers/Mangboard/Admin/UserController.php b/app/Controllers/Mangboard/Admin/UserController.php
index eb83a32..880c432 100644
--- a/app/Controllers/Mangboard/Admin/UserController.php
+++ b/app/Controllers/Mangboard/Admin/UserController.php
@@ -15,10 +15,7 @@ class UserController extends CommonController
use AuthTrait;
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
- // Do Not Edit This Line
parent::initController($request, $response, $logger);
- // Preload any models, libraries, etc, here.
- // E.g.: $this->session = \Config\Services::session();
$this->session = $this->login_check();
}
diff --git a/app/Entities/SNSUserEntity.php b/app/Entities/SNSUserEntity.php
new file mode 100644
index 0000000..0771c09
--- /dev/null
+++ b/app/Entities/SNSUserEntity.php
@@ -0,0 +1,49 @@
+getPK()}:{$this->getID()}:{$this->getTitle()},{$this->getLevel()}/{$this->getPoint()}";
+ }
+ public function getTitle(): string
+ {
+ return $this->attributes['_name'];
+ }
+ public function setTitle(string $title): void
+ {
+ $this->attributes['name'] = $title;
+ }
+ //Common Function
+
+ public function getPK(): int
+ {
+ return $this->attributes['uid'];
+ }
+ public function getID(): string
+ {
+ return $this->attributes['id'];
+ }
+ public function getPoint(): int
+ {
+ return $this->attributes['point'];
+ }
+ public function setPoint(int $point): void
+ {
+
+ $this->attributes['point'] = $point;
+ }
+
+ public function getLevel(): int
+ {
+ return $this->attributes['level'];
+ }
+ public function setLevel(int $value): void
+ {
+ $this->attributes['level'] = $value;
+ }
+}
diff --git a/app/Entities/UserEntity.php b/app/Entities/UserEntity.php
new file mode 100644
index 0000000..6db8108
--- /dev/null
+++ b/app/Entities/UserEntity.php
@@ -0,0 +1,49 @@
+getPK()}:{$this->getID()}:{$this->getTitle()},{$this->getLevel()}/{$this->getPoint()}";
+ }
+ public function getTitle(): string
+ {
+ return $this->attributes['_name'];
+ }
+ public function setTitle(string $title): void
+ {
+ $this->attributes['name'] = $title;
+ }
+ //Common Function
+
+ public function getPK(): int
+ {
+ return $this->attributes['uid'];
+ }
+ public function getID(): string
+ {
+ return $this->attributes['id'];
+ }
+ public function getPoint(): int
+ {
+ return $this->attributes['point'];
+ }
+ public function setPoint(int $point): void
+ {
+
+ $this->attributes['point'] = $point;
+ }
+
+ public function getLevel(): int
+ {
+ return $this->attributes['level'];
+ }
+ public function setLevel(int $value): void
+ {
+ $this->attributes['level'] = $value;
+ }
+}
diff --git a/app/Libraries/Auth/AuthLibrary.php b/app/Libraries/Auth/AuthLibrary.php
new file mode 100644
index 0000000..ffbeda2
--- /dev/null
+++ b/app/Libraries/Auth/AuthLibrary.php
@@ -0,0 +1,58 @@
+_session = \Config\Services::session();
+ }
+ abstract public function getAuthButton();
+ abstract public function execute(): UserEntity;
+
+ final protected function getUserModel(): UserModel
+ {
+ if (is_null($this->_userModel)) {
+ $this->_userModel = new UserModel();
+ }
+ return $this->_userModel;
+ }
+
+ final protected function getUserSNSModel(): SNSUSerModel
+ {
+ if (is_null($this->_snsUserModel)) {
+ $this->_snsUserModel = new SNSUserModel();
+ }
+ return $this->_snsUserModel;
+ }
+
+ 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);
+ return $entity;
+ }
+}
diff --git a/app/Libraries/Auth/GoogleLibrary.php b/app/Libraries/Auth/GoogleLibrary.php
new file mode 100644
index 0000000..5609a11
--- /dev/null
+++ b/app/Libraries/Auth/GoogleLibrary.php
@@ -0,0 +1,111 @@
+_mySocket === null) {
+ $this->_mySocket = new MySocketLibrary(getenv('yamap.host.url'));
+ }
+ return $this->_mySocket;
+ }
+
+ public function getAuthButton()
+ {
+ $button = "";
+ if (!$this->getMySocket()->getAccessToken()) {
+ $button = anchor(
+ $this->getMySocket()->getClient()->createAuthUrl(),
+ ICONS['GOOGLE'],
+ ["target" => "_self"]
+ );
+ }
+ return $button;
+ }
+ public function execute(): UserEntity
+ {
+ return new UserEntity();
+ // try {
+ // //Google 접근 권한 설정.
+ // $this->getMySocket()->setAccessToken();
+ // //Google 서비스 설정
+ // //$service = new \Google\Service\Oauth2($this->getMySocket());
+ // $service = new \Google\Service\Oauth2($this->getMySocket());
+ // $result = $service->userinfo->get();
+ // log_message("debug", var_export($result, true));
+ // // throw new \Exception(__METHOD__ . "에서 데이터 처리 필요");
+ // // DEBUG - 2023-07-13 12:54:51 --> \Google\Service\Oauth2\Userinfo::__set_state(array(
+ // // 'internal_gapi_mappings' =>
+ // // array (
+ // // 'familyName' => 'family_name',
+ // // 'givenName' => 'given_name',
+ // // 'verifiedEmail' => 'verified_email',
+ // // ),
+ // // 'modelData' =>
+ // // array (
+ // // 'verified_email' => true,
+ // // 'given_name' => '이름',
+ // // 'family_name' => '성',
+ // // ),
+ // // 'processed' =>
+ // // array (
+ // // ),
+ // // 'email' => 'twsdfsew342s@gmail.com',
+ // // 'familyName' => '성',
+ // // 'gender' => NULL,
+ // // 'givenName' => '이름',
+ // // 'hd' => NULL,
+ // // 'id' => '103667492432234234236838324',
+ // // 'link' => NULL,
+ // // 'locale' => 'ko',
+ // // 'name' => '성이름',
+ // // 'picture' => 'https://lh3.googleusercontent.com/a/AAcHTteFSgefsdfsdRJBkJA2tBEmg4PQrvI1Ta_5IXu5=s96-c',
+ // // 'verifiedEmail' => true,
+ // // ))
+ // //조건에 해당하는 이미 등록된 사용자가 있는지 검사
+ // $snsEntity = null;
+ // try {
+ // $snsEntity = $this->getUserSNSModel()->asObject(SNSUSerEntity::class)->where(
+ // array("site" => $this->_site, "id" => $result['id'])
+ // )->first();
+ // } catch (\Exception $e) {
+ // $snsEntity = new SNSUSerEntity([
+ // 'site' => $this->_site,
+ // 'id' => $result['id'],
+ // 'name' => $result['name'],
+ // 'email' => $result['email'],
+ // 'detail' => json_encode($result),
+ // 'status' => 'standby',
+ // ]);
+ // $snsEntity = $this->getUserSNSModel()->create($snsEntity);
+ // }
+ // //상태가 use(승인완료)가 아니라면
+ // if ($snsEntity->status !== DEFAULTS['STATUS']) {
+ // throw new \Exception("{$this->_site}}의{$result['email']}:{$result['name']}님은 " . $snsEntity->status . "입니다");
+ // }
+ // //user_id가 연결되어있지 않았다면
+ // if (!$snsEntity->getID()) {
+ // throw new \Exception("{$this->_site}의{$result['email']}:{$result['name']}님은 아직 사용자 지정이 되지 않았습니다. ");
+ // }
+ // //인증된 사용자 정보를 가져온후 로그인처리
+ // $entity = $this->getUserModel()->getEntityByID($snsEntity->getID());
+ // return $this->setSession_process($entity);;
+ // } catch (\Exception $e) {
+ // throw new \Exception("관리자에게 문의하시기 바랍니다.
{$e->getMessage()}");
+ // }
+ }
+}
diff --git a/app/Libraries/Auth/LocalLibrary.php b/app/Libraries/Auth/LocalLibrary.php
new file mode 100644
index 0000000..c423a81
--- /dev/null
+++ b/app/Libraries/Auth/LocalLibrary.php
@@ -0,0 +1,34 @@
+getFormDatas();
+ // if (!isset($formDatas['id']) || !$formDatas['id'] || !isset($formDatas['passwd']) || !$formDatas['passwd']) {
+ // throw new \Exception("ID 나 암호의 값이 없습니다.");
+ // }
+ // $entity = $this->getUserModel()->getEntity(['id' => $formDatas['id'], 'status' => DEFAULTS['STATUS']]);
+ // if (!password_verify($formDatas['passwd'], $entity->passwd)) {
+ // throw new \Exception("암호가 맞지않습니다.");
+ // }
+ // //Session에 인증정보 설정
+ // return $this->setSession_process($entity);;
+ }
+}
diff --git a/app/Libraries/MySocket/GoogleLibrary.php b/app/Libraries/MySocket/GoogleLibrary.php
new file mode 100644
index 0000000..0a77b3b
--- /dev/null
+++ b/app/Libraries/MySocket/GoogleLibrary.php
@@ -0,0 +1,59 @@
+_session = \Config\Services::session();
+ }
+
+ public function getClient()
+ {
+ if (is_null($this->_client)) {
+ // $this->_client = new \Google_Client();
+ $this->_client = new \GuzzleHttp\Client();
+ $this->_client->setClientId(getenv("google.client.id"));
+ $this->_client->setClientSecret(getenv("google.client.key"));
+ $this->_client->setRedirectUri(base_url() . getenv("google.client.callback_url"));
+ $this->_client->addScope('email');
+ $this->_client->addScope('profile');
+ }
+ return $this->_client;
+ }
+
+ public function getAccessCode(): string
+ {
+ if ($this->_access_code === "") {
+ throw new \Exception("access_code가 지정되지 않았습니다.");
+ }
+ return $this->_access_code;
+ }
+ public function setAccessCode(string $access_code)
+ {
+ $this->_access_code = $access_code;
+ }
+
+ public function setAccessToken()
+ {
+ //2.토큰정보 가져오기
+ $tokenInfo = $this->getClient()->fetchAccessTokenWithAuthCode($this->getAccessCode());
+ if (isset($tokenInfo['error'])) {
+ throw new \Exception($tokenInfo['error']);
+ }
+ $token = $tokenInfo[getenv("google.client.token_name")];
+ //3. Google Service에 접근하기위해 Access Token을 설정
+ $this->getClient()->setAccessToken($token);
+ //4. Google에 로그인이 했으므로 세션에 Token값 설정
+ $this->_session->set(getenv("google.client.token_name"), $token);
+ }
+ public function getAccessToken(): ?string
+ {
+ return $this->_session->get(getenv("google.client.token_name"));
+ }
+}
diff --git a/app/Libraries/MySocket/MySocketLibrary.php b/app/Libraries/MySocket/MySocketLibrary.php
index 9dbe570..fdb2311 100644
--- a/app/Libraries/MySocket/MySocketLibrary.php
+++ b/app/Libraries/MySocket/MySocketLibrary.php
@@ -4,10 +4,17 @@ namespace App\Libraries\MySocket;
use App\Libraries\CommonLibrary;
-class MySocketLibrary extends CommonLibrary
+abstract class MySocketLibrary extends CommonLibrary
{
- public function __construct()
+ private $_host = null;
+ protected function __construct(string $host)
{
parent::__construct();
+ $this->_host = $host;
+ }
+ abstract public function getClient();
+ final protected function getHost(): string
+ {
+ return $this->_host;
}
}
diff --git a/app/Libraries/MySocket/WebLibrary.php b/app/Libraries/MySocket/WebLibrary.php
index 281e600..77563a2 100644
--- a/app/Libraries/MySocket/WebLibrary.php
+++ b/app/Libraries/MySocket/WebLibrary.php
@@ -9,22 +9,17 @@ class WebLibrary extends MySocketLibrary
{
private $_client = null;
private $_cookieJar = null;
- private $_host = null;
+
public function __construct(string $host)
{
- parent::__construct();
- $this->_host = $host;
+ parent::__construct($host);
}
- final protected function getHost(): string
- {
- return $this->_host;
- }
- final protected function getClient(): Client
+ public function getClient()
{
if ($this->_client === null) {
- $this->_client = new Client(['verify' => false]);
+ $this->_client = new Client(['verify' => getenv("socket.web.ssl.verify") == "true" ? true : false]);
}
return $this->_client;
}
diff --git a/app/Libraries/MyStorage/FileLibrary.php b/app/Libraries/MyStorage/FileLibrary.php
index 7dee383..82df807 100644
--- a/app/Libraries/MyStorage/FileLibrary.php
+++ b/app/Libraries/MyStorage/FileLibrary.php
@@ -33,8 +33,8 @@ class FileLibrary extends MyStorageLibrary
case "video":
$mediaTag = sprintf(
"",
$entity->getTitle(),
$this->getUploadPath(),
diff --git a/app/Models/SNSUserModel.php b/app/Models/SNSUserModel.php
new file mode 100644
index 0000000..611b487
--- /dev/null
+++ b/app/Models/SNSUserModel.php
@@ -0,0 +1,74 @@
+getTitleField():
+ $rules[$field] = "required|trim|string";
+ break;
+ case "status":
+ $rules[$field] = "if_exist|trim|string";
+ break;
+ case "email":
+ $rules[$field] = "if_exist|trim|valid_email";
+ break;
+ case "level":
+ case "point":
+ $rules[$field] = "if_exist|numeric";
+ break;
+ default:
+ $rules = parent::getFieldRule($field, $rules);
+ break;
+ }
+ return $rules;
+ }
+
+ public function getEntityByPK(int $uid): null|SNSUSerEntity
+ {
+ $this->where($this->getPKField(), $uid);
+ return $this->getEntity();
+ }
+ public function getEntityByID(string $id): null|SNSUSerEntity
+ {
+ $this->where('user_id', $id);
+ return $this->getEntity();
+ }
+
+ //create용
+ public function create(SNSUSerEntity $entity): SNSUSerEntity
+ {
+ $entity = $this->create_process($entity);
+ //GID값이 PK랑 같은 값 전달 후 Entity 수정
+ $entity->gid = $entity->getPK();
+ $this->setFields(["gid"]);
+ return $this->modify_process($entity);
+ }
+
+ //modify용
+ public function modify(SNSUSerEntity $entity): SNSUSerEntity
+ {
+ return $this->modify_process($entity);
+ }
+}
diff --git a/app/Models/UserModel.php b/app/Models/UserModel.php
new file mode 100644
index 0000000..483caed
--- /dev/null
+++ b/app/Models/UserModel.php
@@ -0,0 +1,74 @@
+getTitleField():
+ $rules[$field] = "required|trim|string";
+ break;
+ case "status":
+ $rules[$field] = "if_exist|trim|string";
+ break;
+ case "email":
+ $rules[$field] = "if_exist|trim|valid_email";
+ break;
+ case "level":
+ case "point":
+ $rules[$field] = "if_exist|numeric";
+ break;
+ default:
+ $rules = parent::getFieldRule($field, $rules);
+ break;
+ }
+ return $rules;
+ }
+
+ public function getEntityByPK(int $uid): null|UserEntity
+ {
+ $this->where($this->getPKField(), $uid);
+ return $this->getEntity();
+ }
+ public function getEntityByID(string $id): null|UserEntity
+ {
+ $this->where('user_id', $id);
+ return $this->getEntity();
+ }
+
+ //create용
+ public function create(UserEntity $entity): UserEntity
+ {
+ $entity = $this->create_process($entity);
+ //GID값이 PK랑 같은 값 전달 후 Entity 수정
+ $entity->gid = $entity->getPK();
+ $this->setFields(["gid"]);
+ return $this->modify_process($entity);
+ }
+
+ //modify용
+ public function modify(UserEntity $entity): UserEntity
+ {
+ return $this->modify_process($entity);
+ }
+}
diff --git a/app/Traits/AuthTrait.php b/app/Traits/AuthTrait.php
index dbad88f..3bd6d2a 100644
--- a/app/Traits/AuthTrait.php
+++ b/app/Traits/AuthTrait.php
@@ -7,12 +7,12 @@ trait AuthTrait
public function login_check(): array
{
//사용자 기본 Role 지정
- $session[SESSION['NAMES']['ISLOGIN']] = false;
+ $session[SESSION_NAMES['ISLOGIN']] = false;
$session['currentRoles'] = [DEFAULTS["ROLE"]];
- if (\Config\Services::session()->get(SESSION['NAMES']['ISLOGIN'])) {
- $session[SESSION['NAMES']['ISLOGIN']] = true;
- $session['auth'] = $this->_session->get(SESSION['NAMES']['AUTH']);
- $currentRoles = explode(DEFAULTS['DELIMITER_ROLE'], $session['auth'][AUTH['FIELDS']['ROLE']]);
+ if (\Config\Services::session()->get(SESSION_NAMES['ISLOGIN'])) {
+ $session[SESSION_NAMES['ISLOGIN']] = true;
+ $session['auth'] = $this->_session->get(SESSION_NAMES['AUTH']);
+ $currentRoles = explode(DEFAULTS['DELIMITER_ROLE'], $session['auth'][AUTH_FIELDS['ROLE']]);
$session['currentRoles'] = is_array($currentRoles) ? $currentRoles : [DEFAULTS["ROLE"]];
}
return $session;
diff --git a/public/css/admin.css b/public/css/admin.css
new file mode 100644
index 0000000..8080efb
--- /dev/null
+++ b/public/css/admin.css
@@ -0,0 +1,53 @@
+/* ------------------------------------------------------------
+ * Name : admin.css
+ * Desc : Admin StyleSheet
+ * Created : 2016/9/11 Tri-aBility by Junheum,Choi
+ * Updated :
+ ------------------------------------------------------------ */
+ * {
+ margin:0px;
+ padding:0px;
+ border:0px;
+ font-size:14px;
+ font: Arial;
+}
+
+/* #head{
+ border:1px solid blue;
+} */
+#tail{
+ text-align:center;
+ /* border:1px solid green; */
+}
+#layout {
+ width:100%;
+ /* border:1px solid blue; */
+}
+
+#layout #body{
+ padding-left:10px;
+ /* border:1px solid red; */
+}
+
+#layout #body nav.header{
+ /*content 상단라인*/
+ padding-top:40px;
+ border-bottom:1px solid silver;
+}
+#layout #body nav.header nav h4.title{
+ font-size:26px;
+ font-weight:bold;
+}
+#layout #body nav.header nav span.flow{
+ color: gray;
+}
+#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; */
+}
\ No newline at end of file
diff --git a/public/css/admin/content.css b/public/css/admin/content.css
new file mode 100644
index 0000000..71fa4f9
--- /dev/null
+++ b/public/css/admin/content.css
@@ -0,0 +1,95 @@
+div#content{
+ color:black;
+ padding-top:20px;
+ margin-bottom:40px;
+ /* border-left:1px solid silver;
+ border-right:1px solid silver; */
+}
+/* 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:12px;
+ 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; */
+}
+
+/* Table 부분 */
+div#content table {
+ width:100%;
+ /* overflow-x: auto;
+ padding-top:5px;
+ padding-bottom:5px; */
+}
+
+/* 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: 16px;
+ font-weight:bold;
+ border-top:2px solid black;
+ border-bottom:1px solid silver;
+ background-color:#F5F5F5;
+ /* border:1px solid silver; */
+}
+
+div#content div.bottom {
+ padding-top:15px;
+ text-align:center;
+}
+div#content div.bottom ul.pagination {
+ margin-top:20px;
+}
+div#content div.bottom ul.pagination li.page-item a{
+ border:0px;
+ border-radius:0px !important;
+ background-color:#e8ebe9;
+}
+div#content div.bottom ul.pagination li.active a{
+ background-color:gray;
+}
\ No newline at end of file
diff --git a/public/css/admin/left_menu.css b/public/css/admin/left_menu.css
new file mode 100644
index 0000000..3b75ace
--- /dev/null
+++ b/public/css/admin/left_menu.css
@@ -0,0 +1,20 @@
+div#left_menu{
+ position:fixed;
+ z-index:100;
+ width:160px;
+ border:1px solid silver;
+}
+
+div#left_menu div.accordion {
+ /* display:none; */
+ background-color: white;
+}
+div#left_menu div.accordion div.accordion-item:hover {
+ background-color: #e7e7e7;
+}
+div#left_menu div.accordion div.accordion-item a{
+ padding-left:10px;
+}
+div#left_menu div.accordion div.accordion-collapse a{
+ padding-left:30px;
+}
\ No newline at end of file
diff --git a/public/css/admin/member_link.css b/public/css/admin/member_link.css
new file mode 100644
index 0000000..38ed839
--- /dev/null
+++ b/public/css/admin/member_link.css
@@ -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;
+}
\ No newline at end of file
diff --git a/public/css/common/copyright.css b/public/css/common/copyright.css
new file mode 100644
index 0000000..45a4a77
--- /dev/null
+++ b/public/css/common/copyright.css
@@ -0,0 +1,29 @@
+div#copyright{
+ width:100%;
+ height:300px;
+ padding-top:30px;
+ padding-bottom:30px;
+ background-color:#2d2e2e;
+ color:white;
+}
+
+div#copyright div#content_bottom{
+ color:white;
+ text-align:left;
+ /* border-left:1px solid silver;
+ border-right:1px solid silver; */
+}
+
+div#copyright div#content_bottom .item{
+ padding-top:5px;
+ padding-left:5px;
+ padding-right:5px;
+ border-top:1px solid silver;
+ border-left:1px solid silver;
+ border-right:1px solid silver;
+}
+
+div#copyright div#content_bottom div.company_info{
+ padding:10px;
+ border:1px solid silver;
+}
diff --git a/public/css/common/left_menu.css b/public/css/common/left_menu.css
new file mode 100644
index 0000000..30bb035
--- /dev/null
+++ b/public/css/common/left_menu.css
@@ -0,0 +1,60 @@
+div#left_menu{
+ /* position:fixed;
+ z-index:100; */
+ width:200px;
+ background-color:white;
+}
+
+div#left_menu div.parent {
+ font-size:24px;
+ 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:24px;
+}
+
+/* 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:18px;
+}
+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;
+}
\ No newline at end of file
diff --git a/public/css/common/login.css b/public/css/common/login.css
new file mode 100644
index 0000000..c35ee0d
--- /dev/null
+++ b/public/css/common/login.css
@@ -0,0 +1,46 @@
+/* ------------------------------------------------------------
+* 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');
+} */
\ No newline at end of file
diff --git a/public/css/common/login_v1.css b/public/css/common/login_v1.css
new file mode 100644
index 0000000..8eb0668
--- /dev/null
+++ b/public/css/common/login_v1.css
@@ -0,0 +1,50 @@
+/* ------------------------------------------------------------
+* 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:18px;
+ 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');
+} */
\ No newline at end of file
diff --git a/public/css/common/top_menu.css b/public/css/common/top_menu.css
new file mode 100644
index 0000000..de2808b
--- /dev/null
+++ b/public/css/common/top_menu.css
@@ -0,0 +1,74 @@
+
+#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:24px;
+ font-weight:bold;
+}
+
+/* 메뉴바그룹 상단글자*/
+#top_menu div.dropdown-center ul.navbar-nav a#navbarDarkDropdownMenuLink{
+ font-size:18px;
+ 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:16px;
+ 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;
+}
\ No newline at end of file
diff --git a/public/css/common/top_navigator.css b/public/css/common/top_navigator.css
new file mode 100644
index 0000000..ab9cd34
--- /dev/null
+++ b/public/css/common/top_navigator.css
@@ -0,0 +1,24 @@
+#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:18px;
+ font-weight: 500;
+}
diff --git a/public/css/empty.css b/public/css/empty.css
new file mode 100644
index 0000000..2decc0b
--- /dev/null
+++ b/public/css/empty.css
@@ -0,0 +1,14 @@
+/* ------------------------------------------------------------
+ * Name : admin.css
+ * Desc : Admin StyleSheet
+ * Created : 2016/9/11 Tri-aBility by Junheum,Choi
+ * Updated :
+ ------------------------------------------------------------ */
+
+ * {
+ margin:0px;
+ padding:0px;
+ border:0px;
+ font-size:14px;
+ font: Arial;
+}
diff --git a/public/css/front.css b/public/css/front.css
new file mode 100644
index 0000000..469f91a
--- /dev/null
+++ b/public/css/front.css
@@ -0,0 +1,54 @@
+/* ------------------------------------------------------------
+ * Name : admin.css
+ * Desc : Admin StyleSheet
+ * Created : 2016/9/11 Tri-aBility by Junheum,Choi
+ * Updated :
+ ------------------------------------------------------------ */
+ * {
+ margin:0px;
+ padding:0px;
+ border:0px;
+ font-size:14px;
+ font: Arial;
+}
+
+/* #head{
+ border:1px solid blue;
+} */
+#tail{
+ text-align:center;
+ /* border:1px solid green; */
+}
+#layout {
+ width:1280px;
+ /* border:1px solid blue; */
+}
+
+#layout #body{
+ padding-left:10px;
+ /* border:1px solid red; */
+}
+
+#layout #body nav.header{
+ /*content 상단라인*/
+ padding-top:40px;
+ margin-left:30px;
+ border-bottom:1px solid silver;
+}
+#layout #body nav.header nav h4.title{
+ font-size:26px;
+ font-weight:bold;
+}
+#layout #body nav.header nav span.flow{
+ color: gray;
+}
+#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; */
+}
\ No newline at end of file
diff --git a/public/css/front/billing.css b/public/css/front/billing.css
new file mode 100644
index 0000000..b796a9d
--- /dev/null
+++ b/public/css/front/billing.css
@@ -0,0 +1,18 @@
+/* ------------------------------------------------------------
+* 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%;
+}
\ No newline at end of file
diff --git a/public/css/front/content.css b/public/css/front/content.css
new file mode 100644
index 0000000..6c6f850
--- /dev/null
+++ b/public/css/front/content.css
@@ -0,0 +1,96 @@
+div#content{
+ color:black;
+ padding-top:20px;
+ padding-left:30px;
+ margin-bottom:40px;
+ /* border-left:1px solid silver;
+ border-right:1px solid silver; */
+}
+/* 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:12px;
+ 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; */
+}
+
+/* Table 부분 */
+div#content table {
+ width:100%;
+ /* overflow-x: auto;
+ padding-top:5px;
+ padding-bottom:5px; */
+}
+
+/* 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: 16px;
+ font-weight:bold;
+ border-top:2px solid black;
+ border-bottom:1px solid silver;
+ background-color:#F5F5F5;
+ /* border:1px solid silver; */
+}
+
+div#content div.bottom {
+ padding-top:15px;
+ text-align:center;
+}
+div#content div.bottom ul.pagination {
+ margin-top:20px;
+}
+div#content div.bottom ul.pagination li.page-item a{
+ border:0px;
+ border-radius:0px !important;
+ background-color:#e8ebe9;
+}
+div#content div.bottom ul.pagination li.active a{
+ background-color:gray;
+}
\ No newline at end of file
diff --git a/public/css/front/order.css b/public/css/front/order.css
new file mode 100644
index 0000000..7a72ab8
--- /dev/null
+++ b/public/css/front/order.css
@@ -0,0 +1,50 @@
+/* ------------------------------------------------------------
+* 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:18px;
+ 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:18px;
+ font-weight: 800;
+}
+div#order div.orderbox div.submit{
+ padding-top:10px;
+ text-align:center;
+}
\ No newline at end of file
diff --git a/public/css/front/sitepage.css b/public/css/front/sitepage.css
new file mode 100644
index 0000000..73df0c5
--- /dev/null
+++ b/public/css/front/sitepage.css
@@ -0,0 +1,69 @@
+@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;}
+*/
diff --git a/public/css/main.css b/public/css/main.css
new file mode 100644
index 0000000..e583aed
--- /dev/null
+++ b/public/css/main.css
@@ -0,0 +1,209 @@
+/* ------------------------------------------------------------
+ * Name : admin.css
+ * Desc : Admin StyleSheet
+ * Created : 2016/9/11 Tri-aBility by Junheum,Choi
+ * Updated :
+ ------------------------------------------------------------ */
+ * {
+ margin:0px;
+ padding:0px;
+ border:0px;
+ font-size:14px;
+ font: Arial;
+}
+
+/* #head{
+ border:1px solid blue;
+} */
+#tail{
+ text-align:center;
+ /* border:1px solid green; */
+}
+#layout {
+ width:1280px;
+ /* border:1px solid blue; */
+}
+
+#layout #body{
+ padding-left:10px;
+ /* border:1px solid red; */
+}
+
+#layout #body nav.header{
+ /*content 상단라인*/
+ padding-top:40px;
+ margin-left:30px;
+ border-bottom:1px solid silver;
+}
+#layout #body nav.header nav h4.title{
+ font-size:26px;
+ font-weight:bold;
+}
+#layout #body nav.header nav span.flow{
+ color: gray;
+}
+#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; */
+}
+
+/* reset */
+html {overflow-y:scroll;}
+body,p,h1,h2,h3,h4,h5,h6,ul,ol,li,dl,dt,dd,table,th,td,form,fieldset,legend,input,textarea,button,select,figure,figcaption{margin:0;padding:0}
+body,input,textarea,select,button,table{font-family:'Noto Sans KR', helvetica,sans-serif;font-size:16px;letter-spacing:-0.2px;line-height:1.7em;color:#505050;word-break:keep-all; -webkit-text-size-adjust:none;}
+img{border:0}
+ul,ol{list-style:none}
+fieldset{border:none}
+fieldset legend {position:absolute;visibility:hidden;overflow:hidden;width:0;height:0;margin:0;padding:0;font:0/0 Arial;}
+button{cursor:pointer}
+header,hgroup,article,nav,footer,figure,figcaption,canvas,section,time{display:block}
+hr {clear:both;display:none;}
+li img, dd img {vertical-align:top;}
+*html body img {margin:none; padding:none;} /*for IE 6*/
+* {max-height: 1000000px;}
+
+a{
+ color:#5d5d5d;
+ text-decoration:none;
+ -webkit-transition: all 0.2s ease-in-out;
+ -moz-transition: all 0.2s ease-in-out;
+ -ms-transition: all 0.2s ease-in-out;
+ -o-transition: all 0.2s ease-in-out;
+ transition: all 0.2s ease-in-out;
+}
+a:hover,
+a:active{
+ color:#000;
+ text-decoration:none;
+ -webkit-transition: all 0.2s ease-in-out;
+ -moz-transition: all 0.2s ease-in-out;
+ -ms-transition: all 0.2s ease-in-out;
+ -o-transition: all 0.2s ease-in-out;
+ transition: all 0.2s ease-in-out;
+}
+
+::-webkit-input-placeholder {color:#999;}
+:-moz-placeholder {color:#999;}
+::-moz-placeholder {color:#999;}
+:-ms-input-placeholder {color:#999;}
+:placeholder-shown {color:#999;}
+
+table caption {visibility:hidden; overflow:hidden; width:0; height:0; margin:0; padding:0; font:0/0 Arial;}
+input[type="radio"], input[type="checkbox"] {vertical-align:middle !important; margin:-2px 3px 0 0 !important; background:transparent;}
+input,select {vertical-align:middle; background:#fff;}
+
+
+/* user class */
+h1,h2,h3,h4,h5,h6,strong,th,.bold{font-weight:500;}
+.clear{clear:both;}
+.clearfix:after {content:" "; display:block; clear:both;}
+.hide {position:absolute;visibility:hidden;overflow:hidden;width:0;height:0;margin:0;padding:0;font:0/0 Arial;}
+.pointer {cursor:pointer;}
+.input {height:35px; padding:0 0 0 10px; font-size:15px; line-height:33px; border:1px solid #ddd; box-sizing:border-box;}
+.textarea {padding:10px; font-size:15px; line-height:33px; border:1px solid #ddd; resize:none; overflow:auto; box-sizing:border-box;}
+.select {height:35px; padding:0 0 0 10px; font-size:15px; border:1px solid #ddd; box-sizing:border-box;}
+
+.mgb2 {margin-bottom:2px !important;}
+.mgb3 {margin-bottom:3px !important;}
+.mgb4 {margin-bottom:4px !important;}
+.mgb5 {margin-bottom:5px !important;}
+.mgb6 {margin-bottom:6px !important;}
+.mgb7 {margin-bottom:7px !important;}
+.mgb8 {margin-bottom:8px !important;}
+.mgb9 {margin-bottom:9px !important;}
+.mgb10 {margin-bottom:10px !important;}
+.mgb15 {margin-bottom:15px !important;}
+.mgb20 {margin-bottom:20px !important;}
+.mgb25 {margin-bottom:25px !important;}
+.mgb30 {margin-bottom:30px !important;}
+.mgb35 {margin-bottom:35px !important;}
+.mgb40 {margin-bottom:40px !important;}
+.mgb45 {margin-bottom:45px !important;}
+.mgb50 {margin-bottom:50px !important;}
+.mgb60 {margin-bottom:60px !important;}
+.mgb70 {margin-bottom:70px !important;}
+.mgb75 {margin-bottom:75px !important;}
+.mgb90 {margin-bottom:90px !important;}
+
+.fl {float:left;}
+.fr {float:right;}
+
+.space-center {text-align:center !important;}
+.space-right {text-align:right !important;}
+.space-left {text-align:left !important;}
+
+.text-blue {color:#284685}
+.text-red {color:#b4260b}
+.text-gray {color:#999}
+.text-black {color:#000}
+
+
+.line-through {text-decoration:line-through;}
+
+.main-bnr {width:1200px; position:relative; margin:-120px auto 60px; z-index:12}
+.main-bnr ul:after {content:" "; display:block; clear:both;}
+.main-bnr ul li {float:left; width:33.333%; height:180px; background-repeat:no-repeat; background-position:40px 50%;}
+.main-bnr ul li.bg1 {background-color:#41adde; background-image:url('/images/main/icon1.png');}
+.main-bnr ul li.bg2 {background-color:#0280c9; background-image:url('/images/main/icon2.png');}
+.main-bnr ul li.bg3 {background-color:#30539f; background-image:url('/images/main/icon3.png');}
+.main-bnr ul li .info {padding-left:180px; display:table; height:180px; color:#fff}
+.main-bnr ul li .info dl {width:100%; display:table-cell; vertical-align:middle;}
+.main-bnr ul li .info dl dt {font-size:18px; line-height:1.7em; font-weight:500; margin-bottom:10px;}
+.main-bnr ul li .info dl dd {font-size:15px; line-height:1.7em;}
+
+.main-bnr2 {width:1200px; position:relative; margin:20px auto 60px; z-index:12;}
+.main-bnr2 ul:after {content:" "; display:block; clear:both;}
+.main-bnr2 ul li {float:left; width:33.333%; height:180px; background-repeat:no-repeat; background-position:40px 50%;}
+.main-bnr2 ul li.bg1 {background-color:#41adde; background-image:url('/images/main/icon1.png');}
+.main-bnr2 ul li.bg2 {background-color:#0280c9; background-image:url('/images/main/icon2.png');}
+.main-bnr2 ul li.bg3 {background-color:#30539f; background-image:url('/images/main/icon3.png');}
+.main-bnr2 ul li .info {padding-left:180px; display:table; width:100%; height:180px; color:#fff;}
+.main-bnr2 ul li .info dl {width:100%; display:table-cell; vertical-align:middle;}
+.main-bnr2 ul li .info dl dt {font-size:24px; line-height:1.7em; font-weight:500; margin-bottom:10px;}
+.main-bnr2 ul li .info dl dd {font-size:15px; line-height:1.7em;}
+.main-bnr2 ul li .info dl dd a{color:white;}
+.main-bnr2 ul li .info dl dd span{float:right; padding-right:20px;}
+
+.main-title {text-align:center; margin-bottom:40px;}
+.main-title h2 {font-size:28px; line-height:1.6em; font-weight:700; color:#333;}
+.main-title p {color:#656565; font-size:17px;line-height:1.6em;}
+
+.main-price {margin:0 -10px 80px; overflow:hidden;}
+.main-price:after{content:"";display:block;clear:both;}
+.main-price .col {float:left; width:50%; padding:0 10px; box-sizing:border-box; margin-bottom:20px;}
+.main-price .col:nth-child(2n+1) {clear:left;}
+.main-table.type2 table thead th {background:#0280c9}
+.main-table table {width:100%; border-collapse:collapse; border-spacing:0px;}
+.main-table table thead th {padding:9px 10px; height:35px; font-size:22px; font-weight:500; line-height:22px; color:#fff; background:#30539f}
+.main-table table tbody th {padding:9px 10px; height:35px; font-size:16px; font-weight:500; line-height:22px; color:#333; border-bottom:1px solid #d6d6d6; background:#eaeef4;}
+.main-table table tbody td {padding:9px 20px; color:#2c2c2c; font-size:16px; line-height:22px; border-bottom:1px solid #d6d6d6; background:#f8f8f8}
+.main-table table tbody th.none,.main-table table tbody td.none {border-bottom:0}
+.main-table .f-back {background-color:#e62b2b; color:#fff; }
+.main-table strong {font-weight:500}
+
+.main-service {background:url('/images/main/bg_bnr.jpg') 50% 0 no-repeat; width:100%; height:330px;}
+.main-service .col {float:left; width:50%; height:330px; display:table; text-align:center;}
+.main-service .col .link {width:600px; height:330px; display:table-cell; vertical-align:middle; color:#fff;}
+.main-service .col .link dl dt {font-size:30px; line-height:1.4em; font-weight:500; margin-bottom:5px;}
+.main-service .col .link dl dd {font-size:17px; line-height:1.4em; margin-bottom:20px;}
+.main-service .col .link .more {font-size:15px; line-height:1.4em; opacity:.8}
+.main-service .col .link .more .arrow {margin:0 3px;position:relative;border: solid #ddd;border-width: 0 2px 2px 0;transform: rotate(-45deg);display: inline-block;padding: 3px;}
+.main-service .col a {display:block;}
+
+.main-notice {background:#f5f5f5; padding:60px 0;}
+.main-notice .title {float:left; width:511px; height:276px; color:#fff; background:url('/images/main/bg_notice.gif') 0 0 no-repeat;}
+.main-notice .title dl {padding:50px}
+.main-notice .title dl dt {font-size:32px; line-height:1.4em; font-weight:500; margin-bottom:5px;}
+.main-notice .title dl dd {font-size:16px; line-height:1.4em; color:#cbcfd9;}
+.main-notice .list {float:left; width:688px; height:276px; background:#fff; border:1px solid #ddd; border-left:0; box-sizing:border-box;}
+.main-notice .list ul {padding:15px 40px 0;}
+.main-notice .list ul li {line-height:49px; height:49px; border-bottom:1px solid silver; position:relative;}
+.main-notice .list ul li:last-child {border-bottom:0}
+.main-notice .list ul li a {display:inline-block; font-size:16px; font-weight:bold; width:500px; height:49px; white-space:nowrap;overflow:hidden;text-overflow:ellipsis; }
+.main-notice .list span {position:absolute; top:0; right:0; font-size:14px; color:#959595;}
\ No newline at end of file
diff --git a/public/css/main/content.css b/public/css/main/content.css
new file mode 100644
index 0000000..6c6f850
--- /dev/null
+++ b/public/css/main/content.css
@@ -0,0 +1,96 @@
+div#content{
+ color:black;
+ padding-top:20px;
+ padding-left:30px;
+ margin-bottom:40px;
+ /* border-left:1px solid silver;
+ border-right:1px solid silver; */
+}
+/* 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:12px;
+ 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; */
+}
+
+/* Table 부분 */
+div#content table {
+ width:100%;
+ /* overflow-x: auto;
+ padding-top:5px;
+ padding-bottom:5px; */
+}
+
+/* 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: 16px;
+ font-weight:bold;
+ border-top:2px solid black;
+ border-bottom:1px solid silver;
+ background-color:#F5F5F5;
+ /* border:1px solid silver; */
+}
+
+div#content div.bottom {
+ padding-top:15px;
+ text-align:center;
+}
+div#content div.bottom ul.pagination {
+ margin-top:20px;
+}
+div#content div.bottom ul.pagination li.page-item a{
+ border:0px;
+ border-radius:0px !important;
+ background-color:#e8ebe9;
+}
+div#content div.bottom ul.pagination li.active a{
+ background-color:gray;
+}
\ No newline at end of file
diff --git a/public/css/style.css b/public/css/style.css
new file mode 100644
index 0000000..8b0ccdd
--- /dev/null
+++ b/public/css/style.css
@@ -0,0 +1,33 @@
+/* ------------------------------------------------------------
+ * Name : admin.css
+ * Desc : Admin StyleSheet
+ * Created : 2016/9/11 Tri-aBility by Junheum,Choi
+ * Updated :
+ ------------------------------------------------------------ */
+@charset "utf-8";
+
+body {
+ background-color: white;
+}
+
+/* user class */
+h1,h2,h3,h4,h5,h6,strong,th,.bold{font-weight:500;}
+
+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 {
+ 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; }
\ No newline at end of file
diff --git a/public/js/admin.js b/public/js/admin.js
new file mode 100644
index 0000000..ec32e90
--- /dev/null
+++ b/public/js/admin.js
@@ -0,0 +1,104 @@
+/* ------------------------------------------------------------
+ * Name : admin.js
+ * Desc : Admin Javascrip
+ * Created : 2016/9/11 Tri-aBility by Junheum,Choi
+ * Updated :
+ ------------------------------------------------------------ */
+function trim(str){
+ return this.replace(/(^\s*)|(\s*$)/gi, "");
+}
+
+//오른쪽에 위 화살표 방향버튼용
+/*$(document).ready(function(){
+ $('body').append('
Directory access is forbidden.
+ + +