This commit is contained in:
shim
2023-04-17 11:06:08 +09:00
parent d0b393aa97
commit 76264e09ad
4686 changed files with 552713 additions and 0 deletions

27
.gitignore vendored Normal file
View File

@@ -0,0 +1,27 @@
### macOS ###
# General
.DS_Store
.AppleDouble
.LSOverride
.ftpconfig
phpinfo.php
_var/db.info.php
_var/install.txt
_var/php.version.txt
_var/project.key.txt
_var/table.info.php
_var/site/*
_var/bbs/*
_var/update/*
_tmp/widget/*
layouts/bs4-docs/*
modules/comment/action/a.oneline_regis.php
modules/comment/action/a.comment_regis.php
modules/member/admin/point_ori.php
modules/member/admin/point_ori.php
modules/shop/*
.vscode/*
.history/*

160
.htaccess Normal file
View File

@@ -0,0 +1,160 @@
RewriteEngine On
RewriteBase /
#RewriteCond %{ENV:HTTPS} !=on
#RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
#기본사이트
RewriteRule ^(admin)/?$ ./index.php?m=$1&pickmodule=dashboard&panel=Y [L]
RewriteRule ^(logout)/?$ ./index.php?a=logout [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(p)/([a-zA-Z0-9_\-]+)/?$ ./index.php?mod=$2&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(c)/([a-zA-Z0-9_\-\/]+)/?$ ./index.php?c=$2&%1 [L]
RewriteRule ^([0-9]+)/?$ ./index.php?m=bbs&uid=$1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(post)/?$ ./index.php?m=post&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(post)/([0-9_]+)/?$ ./index.php?m=post&mod=view&cid=$2&%1 [L]
RewriteRule ^(post)/(write)/?$ ./index.php?m=post&mod=write [L]
RewriteRule ^(post)/(write)/([0-9_]+)/?$ ./index.php?m=post&mod=write&cid=$3 [L]
RewriteRule ^(post)/(category)/?$ ./index.php?m=post&mod=category [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(post)/(category)/([a-zA-Z0-9_\-]+)/?$ ./index.php?m=post&cat=$3&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(post)/(search)/?$ ./index.php?m=post&mod=keyword&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(list)/?$ ./index.php?m=post&mod=list&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(list)/([a-zA-Z0-9_\-]+)/?$ ./index.php?m=post&mod=list_view&listid=$2&%1 [L]
RewriteRule ^(b)/?$ ./index.php?m=bbs [L]
RewriteRule ^(b)/([a-zA-Z0-9_\-]+)/?$ ./index.php?m=bbs&bid=$2 [L]
RewriteRule ^(b)/([a-zA-Z0-9_\-]+)/([0-9]+)/?$ ./index.php?m=bbs&bid=$2&uid=$3 [L]
RewriteRule ^(b)/([a-zA-Z0-9_\-]+)/write/?$ ./index.php?m=bbs&bid=$2&mod=write [L]
RewriteRule ^(b)/([a-zA-Z0-9_\-]+)/([0-9]+)/s([0-9]+)/?$ ./index.php?m=bbs&bid=$2&uid=$3&s=$4 [L]
RewriteRule ^(b)/([a-zA-Z0-9_\-]+)/([0-9]+)/([0-9]+)/?$ ./index.php?m=bbs&bid=$2&uid=$3&CMT=$4#CMT [L]
RewriteRule ^(b)/([a-zA-Z0-9_\-]+)/([0-9]+)/([0-9]+)/s([0-9]+)/?$ ./index.php?m=bbs&bid=$2&uid=$3&CMT=$4&s=$5#CMT [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(dashboard)/?$ ./index.php?mod=dashboard&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(feed)/?$ ./index.php?mod=feed&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(settings)/?$ ./index.php?mod=settings&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(noti)/?$ ./index.php?mod=noti&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(saved)/?$ ./index.php?mod=saved&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(search)/?$ ./index.php?m=search&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(feed)/?$ ./index.php?mod=feed&%1 [L]
#사이트코드 확장
RewriteRule ^([a-zA-Z0-9_\-]+)/?$ ./index.php?r=$1 [L]
RewriteRule ^([a-zA-Z0-9_\-]+)/(admin)/?$ ./index.php?r=$1&m=$2&mdule=$2 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([a-zA-Z0-9_\-]+)/(p)/([a-zA-Z0-9_\-]+)/?$ ./index.php?r=$1&mod=$3&%1 [L]
RewriteRule ^([a-zA-Z0-9_\-]+)/(c)/([a-zA-Z0-9_\-\/]+)/?$ ./index.php?r=$1&c=$3&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([a-zA-Z0-9_\-]+)/(post)/?$ ./index.php?r=$1&m=post&%1 [L]
RewriteRule ^([a-zA-Z0-9_\-]+)/(post)/(category)/?$ ./index.php?r=$1&m=post&mod=category [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([a-zA-Z0-9_\-]+)/(post)/(category)/([a-zA-Z0-9_\-]+)/?$ ./index.php?r=$1&m=post&cat=$4&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([a-zA-Z0-9_\-]+)/(post)/([0-9_]+)/?$ ./index.php?r=$1&m=post&mod=view&cid=$3&%1 [L]
RewriteRule ^([a-zA-Z0-9_\-]+)/(post)/(write)/?$ ./index.php?r=$1&m=post&mod=write [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([a-zA-Z0-9_\-]+)/(post)/(search)/?$ ./index.php?m=post&mod=keyword&%1 [L]
RewriteRule ^([a-zA-Z0-9_\-]+)/(post)/write/?$ ./index.php?r=$1&m=post&mod=write [L]
RewriteRule ^([a-zA-Z0-9_\-]+)/(post)/(write)/([0-9_]+)/?$ ./index.php?r=$1&m=post&mod=write&cid=$4 [L]
RewriteRule ^([a-zA-Z0-9_\-]+)/(list)/?$ ./index.php?r=$1&m=post&mod=list [L]
RewriteRule ^([a-zA-Z0-9_\-]+)/(list)/([a-zA-Z0-9_\-]+)/?$ ./index.php?r=$1&m=post&mod=list_view&listid=$3 [L]
RewriteRule ^([a-zA-Z0-9_\-]+)/(b)/?$ ./index.php?r=$1&m=bbs [L]
RewriteRule ^([a-zA-Z0-9_\-]+)/(b)/([a-zA-Z0-9_\-]+)/?$ ./index.php?r=$1&m=bbs&bid=$3 [L]
RewriteRule ^([a-zA-Z0-9_\-]+)/(b)/([a-zA-Z0-9_\-]+)/([0-9]+)/?$ ./index.php?r=$1&m=bbs&bid=$3&uid=$4 [L]
RewriteRule ^([a-zA-Z0-9_\-]+)/(b)/([a-zA-Z0-9_\-]+)/write/?$ ./index.php?r=$1&m=bbs&bid=$3&mod=write [L]
RewriteRule ^([a-zA-Z0-9_\-]+)/(b)/([a-zA-Z0-9_\-]+)/([0-9]+)/s([0-9]+)/?$ ./index.php?r=$1&m=bbs&bid=$3&uid=$4&s=$5 [L]
RewriteRule ^([a-zA-Z0-9_\-]+)/(b)/([a-zA-Z0-9_\-]+)/([0-9]+)/([0-9]+)/?$ ./index.php?r=$1&m=bbs&bid=$3&uid=$4&CMT=$5#CMT [L]
RewriteRule ^([a-zA-Z0-9_\-]+)/(b)/([a-zA-Z0-9_\-]+)/([0-9]+)/([0-9]+)/s([0-9]+)/?$ ./index.php?r=$1&m=bbs&bid=$3&uid=$4&CMT=$5&s=$6#CMT [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([a-zA-Z0-9_\-]+)/(dashboard)/?$ ./index.php?r=$1&mod=dashboard&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([a-zA-Z0-9_\-]+)/(feed)/?$ ./index.php?r=$1&mod=feed&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([a-zA-Z0-9_\-]+)/(settings)/?$ ./index.php?r=$1&mod=settings&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([a-zA-Z0-9_\-]+)/(noti)/?$ ./index.php?r=$1&mod=noti&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([a-zA-Z0-9_\-]+)/(saved)/?$ ./index.php?r=$1&mod=saved&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([a-zA-Z0-9_\-]+)/(search)/?$ ./index.php?r=$1&m=search&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([a-zA-Z0-9_\-]+)/(feed)/?$ ./index.php?r=$1&mod=feed&%1 [L]
#외부연결 콜백
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([a-zA-Z0-9_\-]+)/(oauth)/([a-zA-Z]+)/?$ ./index.php?r=$1&m=connect&a=connect&connectReturn=$3&%1 [L]
#회원 본인인증
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([a-zA-Z0-9_\-]+)/(auth)/([a-zA-Z]+)/?$ ./index.php?r=$1&m=member&front=$3&%1 [L]
#다운로드
RewriteRule ^([a-zA-Z0-9_\-]+)/(download)/([a-zA-Z]+)/?$ ./index.php?r=$1&m=mediaset&a=download&uid=$3 [L]
#프로필
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(@)([a-z-A-Z-0-9_]+)/?$ ./index.php?mod=profile&mbrid=$2&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(@)([a-z-A-Z-0-9_]+)/([a-z-A-Z-0-9_]+)/?$ ./index.php?mod=profile&mbrid=$2&page=$3&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(@)([a-z-A-Z-0-9_]+)/(post)/([0-9_]+)/?$ ./index.php?m=post&mod=view&mbrid=$2&cid=$4&%1 [L]
RewriteRule ^(@)([a-z-A-Z-0-9_]+)/(list)/([a-z-A-Z-0-9_]+)/?$ ./index.php?m=post&mod=list_view&mbrid=$2&listid=$4 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([a-zA-Z0-9_\-]+)/(@)([a-z-A-Z-0-9_]+)/?$ ./index.php?r=$1&mod=profile&mbrid=$3&%1 [L]
#채널
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(channel)/([a-z-A-Z-0-9_]+)/?$ ./index.php?mod=channel&mbrid=$2&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(channel)/([a-z-A-Z-0-9_]+)/([a-z-A-Z-0-9_]+)/?$ ./index.php?mod=channel&mbrid=$2&page=$3&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([a-zA-Z0-9_\-]+)/(channel)/([a-z-A-Z-0-9_]+)/?$ ./index.php?r=$1&mod=channel&mbrid=$3&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([a-zA-Z0-9_\-]+)/(channel)/([a-z-A-Z-0-9_]+)/([a-z-A-Z-0-9_]+)/?$ ./index.php?r=$1&mod=channel&mbrid=$3&page=$4&%1 [L]
#검색
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([a-zA-Z0-9_\-]+)/(search)/?$ ./index.php?r=$1&m=search&%1 [L]
#timthumb
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(thumb)/(.*)x(.*)/u/(.*) ./_core/opensrc/timthumb/thumb.php?src=http://$4&h=$3&w=$2&s=1 [NC,L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(thumb-ssl)/(.*)x(.*)/u/(.*) ./_core/opensrc/timthumb/thumb.php?src=https://$4&h=$3&w=$2&s=1 [NC,L]
RewriteRule ^(files)/([a-zA-Z0-9_\-]+)/(.*)_([0-9]+)x([0-9]+)\.(jpg|jpeg|png|gif)$ ./_core/opensrc/timthumb/thumb.php?src=./files/$2/$3.$6&w=$4&h=$5&s=1 [NC,L]
RewriteRule ^(files)/([a-zA-Z0-9_\-]+)/(.*)_s\.(jpg|jpeg|png|gif)$ ./_core/opensrc/timthumb/thumb.php?src=./files/$2/$3.$4&w=75&h=75&s=1 [NC,L]
RewriteRule ^(files)/([a-zA-Z0-9_\-]+)/(.*)_q\.(jpg|jpeg|png|gif)$ ./_core/opensrc/timthumb/thumb.php?src=./files/$2/$3.$4&w=150&h=150&s=1 [NC,L]
RewriteRule ^(files)/([a-zA-Z0-9_\-]+)/(.*)_t\.(jpg|jpeg|png|gif)$ ./_core/opensrc/timthumb/thumb.php?src=./files/$2/$3.$4&w=100&h=67&s=1 [NC,L]
RewriteRule ^(files)/([a-zA-Z0-9_\-]+)/(.*)_m\.(jpg|jpeg|png|gif)$ ./_core/opensrc/timthumb/thumb.php?src=./files/$2/$3.$4&w=240&h=160&s=1 [NC,L]
RewriteRule ^(files)/([a-zA-Z0-9_\-]+)/(.*)_n\.(jpg|jpeg|png|gif)$ ./_core/opensrc/timthumb/thumb.php?src=./files/$2/$3.$4&w=320&h=213&s=1 [NC,L]
RewriteRule ^(files)/([a-zA-Z0-9_\-]+)/(.*)_z\.(jpg|jpeg|png|gif)$ ./_core/opensrc/timthumb/thumb.php?src=./files/$2/$3.$4&w=640&h=427&s=1 [NC,L]
RewriteRule ^(files)/([a-zA-Z0-9_\-]+)/(.*)_c\.(jpg|jpeg|png|gif)$ ./_core/opensrc/timthumb/thumb.php?src=./files/$2/$3.$4&w=800&h=534 [NC,L]
RewriteRule ^(files)/([a-zA-Z0-9_\-]+)/(.*)_b\.(jpg|jpeg|png|gif)$ ./_core/opensrc/timthumb/thumb.php?src=./files/$2/$3.$4&w=1024&h=683 [NC,L]
RewriteRule ^(files)/([a-zA-Z0-9_\-]+)/(.*)_h\.(jpg|jpeg|png|gif)$ ./_core/opensrc/timthumb/thumb.php?src=./files/$2/$3.$4&w=1600&h=1068 [NC,L]
RewriteRule ^(files)/([a-zA-Z0-9_\-]+)/(.*)_k\.(jpg|jpeg|png|gif)$ ./_core/opensrc/timthumb/thumb.php?src=./files/$2/$3.$4&w=2048&h=1367 [NC,L]
RewriteRule ^(files)/(noimage)_([0-9]+)x([0-9]+)\.(png)$ ./_core/opensrc/timthumb/thumb.php?src=./_core/images/noimage.png&w=$3&h=$4&s=1 [NC,L]
RewriteRule ^(_core)/(images)/(touch)/(.*)-([0-9]+)x([0-9]+)\.(jpg|jpeg|png|gif)$ ./_core/opensrc/timthumb/thumb.php?src=./_core/images/touch/$4.$7&w=$5&h=$6&s=1 [NC,L]
RewriteRule ^(_var)/(site)/([a-zA-Z0-9_\-]+)/(.*)-([0-9]+)x([0-9]+)\.(jpg|jpeg|png|gif)$ ./_core/opensrc/timthumb/thumb.php?src=./_var/site/$3/$4.$7&w=$5&h=$6&s=1 [NC,L]
#avatar
RewriteRule ^(avatar)/(.*)_([0-9]+)x([0-9]+)\.(jpg|jpeg|png|gif)$ ./_core/opensrc/timthumb/thumb.php?src=./files/avatar/$2.$5&w=$3&h=$4&s=1 [NC,L]
#cover
RewriteRule ^(cover)/(.*)_([0-9]+)x([0-9]+)\.(jpg|jpeg|png|gif)$ ./_core/opensrc/timthumb/thumb.php?src=./files/cover/$2.$5&w=$3&h=$4&s=1 [NC,L]

62
LICENSE Normal file
View File

@@ -0,0 +1,62 @@
RBL(Redblock License) 사용 동의서
kimsQ Rb 2.2.0 이후 버전(이하 소프트웨어)부터는 파머스코드(이하 회사)의 자체 라이선스인 RBL(이하 사용권)을 적용합니다.
본 소프트웨어는 회사의 자산으로 소프트웨어의 사용을 위해서는 사용권 취득이 필요하며, 사용권 취득이 확인되지 않는 경우 불법사용으로 간주 합니다.
목차
소프트웨어 사용
사용권 종류와 범위
사용권 취득 방법
사용권 취득 여부 확인 방법
사용권 명의 변경
소프트웨어 업그레이드 지원 및 보증
소프트웨어 사용지원
소프트웨어 개작
소프트웨어 소스코드 공개
기타 및 문의사항
소프트웨어의 사용
소프트웨어를 사용하기 위해서는 체험, 개발, 서비스의 목적을 포함하여 킴스큐 포털(kimsq.com, 이하 포털)에 프로젝트 생성으로 시작해야 합니다.
사용권 종류와 범위
스탠다드 사용권 : 소프트웨어 기본 패키지 , 스탠다드 확장 패키지
프리미엄 사용권 : 소프트웨어 기본 패키지 , 스탠다드/프리미엄 확장 패키지
소프트웨어 1카피 대한 사용권을 구매자에게 제공합니다.
사용권 취득 방법
스탠다드 라이선스 : 스탠다드 라이선스 구매
프리미엄 라이선스 : 프리미엄 라이선스 구매
사용권 취득여부 확인방법
포털의 개별 프로젝트의 프로젝트 주요이력과 구매내역을 통해 사용권 취득여부를 확인할 수 있습니다.
사용권 명의 변경
포털에서 제공하는 프로젝트의 소유자를 변경하는 것으로 사용권의 명의 변경을 할 수 있습니다.
소프트웨어 업그레이드 지원 및 보증
회사는 라이선스를 취득한 프로젝트 에게만 소프트웨어 업그레이드 지원 및 보증 의무가 있습니다.
소프트웨어의 업그레이드는 사용자가 직접 수행해야 하며, 회사는 상세한 업그레이드 가이드와 자동 업데이트 기능을 제공해야 합니다.
소프트웨어 사용에 있어 오류가 발견될 경우, 사용자는 포털의 지정된 게시판을 통해 오류사항을 등록해야 하며, 회사는 30일내에 패치를 제공해야 합니다.
소프트웨어 사용지원
회사는 현재 유료 라이선스를 취득 프로젝트의 소속원 에게만 소프트웨어에 대한 사용지원 의무가 있습니다.
회사는 Rb2 사용자 개별지원은 하지않는 것이 원칙 입니다.
오류가 발생한다면 회사에 문제의 원인을 찾을수 있도록 구체적으로 전후상황을 전달해 주어야 합니다. 문제원인을 파악할 수 없는 경우에는 대응하지 않습니다.
오류나 개선사항은 각종 이슈사항이 지식으로서 향후 재활용되고 재참조 될수 있도록 kimsq.com 질문 게시판을 이용 해주세요.
질문 및 개선사항에 대해서 포털의 관련 게시판을 통해서만 지원하며 전화를 통한 답변은 지원하지 않습니다.
사용자의 개별수정으로 발생한 오류 및 개선사항은 지원하지 않습니다.
문제의 원인을 파악하기 위해서 사용자 호스팅 계정이나 관리자 모드 접속정보를 요청할 수 있으며 소스코드 패치는 공식 업데이트를 통해서만 제공 합니다.
회사는 문서 및 동영상을 통해 사용자에게 소프트웨어 사용을 지원해야 합니다.
소프트웨어 개작
포털에서 제공하는 프로젝트 갤러리를 통해 공급된 기본/확장요소에 대하여 포털내에서 자유로운 개작 배포 및 마켓판매를 허용하며, 소스코드에 포함된 저작권 관련 문구는 삭제할 수 없습니다.
소프트웨어 소스코드 공개
소프트웨어의 기본 및 확장패키지의 모든 소스코드는 github.com 전용 저장소에 공개되어 있어 자유롭게 참조하실 수 있습니다.
https://github.com/kimsq/rb2/
기타 및 문의 사항
회사의 허가가 없는 소프트웨어의 재배포를 제한하며, 사용에 대한 기타 문의는 farmerscoding@gmail.com 으로 문의 주시기 바랍니다.

71
README.md Normal file
View File

@@ -0,0 +1,71 @@
# kimsQ Rb2
## 개요
## 설치환경
- PHP 7 이상
- MySQL 5.5 이상 또는 mariadb-10.0.x 이상
- https
### 웹서버 설정
- CGI 사용안함
- htaccess 사용
- [git 설치](https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Git-%EC%84%A4%EC%B9%98)
### PHP 확장모듈
- CURL
- ZEND 2.x
- GD 2.x
- ICONV
- dom/xml
### PHP 설정
- allow_url_fopen : 허용안함
## 설치하기
### 터미널(SSH)을 통한 설치
1. <code>git init</code>
1. <code>git remote add origin https://github.com/kimsQ/rb2.git</code>
1. <code>git pull origin master</code>
1. 브라우저를 통해 index.php 를 호출합니다.
### 인스톨러를 통한 설치
1. rb-installer.zip 을 [다운](https://github.com/kimsQ/rb2/archive/installer.zip) 받습니다.
1. 압축해제 후, rb-installer 폴더 내부의 index.php 를 FTP를 이용하여 서버계정 폴더에 업로드 합니다.
1. 브라우저를 통해 index.php 를 호출합니다.
## 업데이트
원격 업데이트는 킴스큐의 기본 패키지 파일들을 항상 최신의 상태로 유지할 수 있는 시스템입니다.
킴스큐 Rb2 저장소 의 master 브랜치의 최신 코드가 적용됩니다.
수정하거나 추가한 코드가 있을 경우, 수정내역이 삭제되므로 업데이트 실행전 레이아웃 또는 테마를 별도저장 해주세요.
최신패치는 git을 통해 동작하며 명령어 실행을 위해서는 서버에 git이 설치되어 있어야 합니다.
### 관리자모드를 통한 업데이트
- 데스크탑 : 관리자 모드 > 시스템 > 업데이트
- 모바일 : 설정 > 소프트웨어 정보 > 업데이트
### 수동 업데이트
터미널 접속 후 아래의 명령어를 순차적으로 실행합니다.
1. <code>git reset --hard</code>
1. <code>git pull origin master</code>
### 업데이트시 특정 파일 제외 방법
터미널 접속 후 아래의 명령어를 실행합니다.
- 제외목록에 추가 : <code>git update-index --skip-worktree [file]</code>
- 제외목록에서 제외 : <code>git update-index --no-skip-worktree [file]</code>
## 메뉴얼
[메뉴얼 보기](http://kimsq.com/docs)
## 라이센스
- 체험 및 교육과 비영리 목적 으로만 무료사용을 허가 합니다.
- 개인과 기업의 영리목적 사용을 위해서는 도메인 단위로 라이센스를 구매 하셔야 합니다.
- 무단 재배포를 금지 합니다.
- 본 소프트웨어는 권기택에 저작권이 있습니다.
- 기타 문의 farmerscoding@gmail.com

302
_core/css/article.css Normal file
View File

@@ -0,0 +1,302 @@
@charset "UTF-8";
/* title */
.rb-article h2 {
display: block;
margin: -30px 0 0;
padding: 60px 0 36px;
border: 0;
font-size: 36px;
font-weight: 500;
line-height: 53px;
}
.rb-article h2 ~ h2{
margin-top: 0;
}
.rb-article h3 {
display: block;
margin: 50px 0 11px;
padding-top: 60px;
border-top: 1px solid #e6e6e6;
font-size: 30px;
font-weight: 500;
}
.rb-article h4 {
display: block;
margin: 52px 0 11px;
font-size: 24px;
font-weight: 600;
}
.rb-article p + h4 {
margin-top: 47px;
}
.rb-article h5 {
display: block;
margin: 24px 0 20px;
font-size: 18px;
font-weight: 700;
line-height: 25px;
}
.rb-article p + .tit_depth4 {
margin-top: -9px;
}
.rb-article p.styled_tit {
margin-bottom: 18px;
}
.rb-article h4 {
position: relative;
display: block;
margin: 44px 0 23px;
padding-left: 15px;
font-size: 18px;
font-weight: 600;
line-height: 27px;
}
.rb-article h4 span {
font-weight: 600;
color: #314ffe;
}
.rb-article p + h4 {
margin-top: 38px;
}
.rb-article h4:after {
content: '';
position: absolute;
top: 4px;
left: 0;
width: 4px;
height: 20px;
background-color: #007bff;
}
/* link */
.rb-article a {
font-weight: 300;
color: #007bff;
}
/* desc div */
.rb-article p {
margin: 22px 0;
font-weight: 300;
font-size: 16px;
line-height: 26px;
word-break: keep-all;
}
.rb-article p + p {
margin-top: -4px;
}
.rb-article p strong {
font-weight: 600;
}
.rb-article h3 + p {
margin-top: 11px;
}
.rb-article h4 + p {
margin-top: 14px;
}
.rb-article h5 + p {
margin-top: -6px;
}
.rb-article .tit_info + p {
margin-top: -6px;
}
.rb-article ul + p {
margin-top: 15px;
}
.rb-article pre + p {
margin-top: 16px;
}
/* blockquote */
.rb-article blockquote {
padding-left: 20px;
}
/* list */
.rb-article ul {
margin: 14px 0 0;
}
.rb-article ul li {
position: relative;
margin-bottom: 8px;
padding-left: 20px;
line-height: 26px;
font-weight: 300;
font-size: 16px;
}
.rb-article ul li:after {
content: '';
position: absolute;
top: 12px;
left: 0;
width: 3px;
height: 3px;
background-color: #222;
border-radius: 100%;
}
.rb-article ul li:last-child {
margin-bottom: 40px;
}
.rb-article p + ul {
margin-top: -11px;
}
.rb-article p + .list_step {
margin-top: -5px;
}
/* block */
pre {
overflow-x: auto;
margin: 16px 0;
border: 1px solid #e6e6e6;
border-radius: 4px;
font-family: 'Roboto Mono', 'NotoSans Light', monospace, 'Malgun Gothic',
'맑은 고딕', 'Apple SD Gothic Neo', '돋움', dotum, sans-serif;
font-weight: normal;
color: #222;
font-size: 15px;
line-height: 26px;
background-color: #f8f9f9;
}
pre code {
display: block;
padding: 13px 19px;
font-family: inherit;
}
pre + pre {
margin-top: 26px;
}
p + pre {
margin-top: -3px;
}
pre .hljs {
padding-bottom: 15px;
background-color: #222;
}
/* table */
.rb-article figure.table table {
width: 100%;
margin-top: -3px;
border-top: 1px solid #e6e6e6;
}
.rb-article figure.table table caption {
overflow: hidden;
width: 1px;
font-size: 1px;
line-height: 0;
text-indent: -9999px;
}
.rb-article figure.table table th,
.rb-article figure.table table td {
border: 1px solid #e6e6e6;
border-width: 0 0 1px 1px;
vertical-align: top;
letter-spacing: 0;
}
.rb-article figure.table table tr th:first-child,
.rb-article figure.table table tr td:first-child {
border-left: 0;
}
.rb-article figure.table table th {
padding: 11px 0 13px 19px;
text-align: left;
font-weight: 600;
line-height: 26px;
background-color: #f3f5fe;
}
.rb-article figure.table table td {
padding: 15px 20px 16px;
font-weight: 300;
word-break: keep-all;
}
.rb-article figure.table table td a {
font-size: 14px;
letter-spacing: 0;
}
/* img */
.rb-article figure.image img {
display: block;
margin: 25px auto;
}
.rb-article ol {
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -ms-flexbox;
display: flex;
list-style: none;
}
.rb-article ol li {
-webkit-box-flex: 1;
-webkit-flex: 1;
-moz-box-flex: 1;
-ms-flex: 1;
flex: 1;
margin-left: 6px;
background-color: #f8f9f9;
list-style: none;
}
.rb-article ol li:first-child {
margin-left: 0;
}
.rb-article ol strong {
display: block;
height: 60px;
font-weight: 400;
font-weight: normal;
text-align: center;
line-height: 58px;
background-color: #f3f5fe;
}
.rb-article ol img {
display: block;
max-width: 100%;
margin: 25px auto;
}
.rb-article ol p {
margin: 21px 0;
padding: 0 30px;
text-align: center;
font-weight: 600;
font-size: 14px;
line-height: 1.5;
letter-spacing: 0;
}
.rb-article ol img + p {
margin-top: -4px;
}
/* blank */
.rb-article .blank {
display: block;
width: 100%;
height: 12px;
}
/* label */
.rb-article p em,
.rb-article p var {
overflow: hidden;
display: inline-block;
height: 23px;
margin: 0 3px;
padding: 0 5px;
border: 1px solid #e6e6e6;
border-radius: 3px;
font-family: 'Roboto Mono', monospace, 'Malgun Gothic',
'맑은 고딕', 'Apple SD Gothic Neo', '돋움', dotum, sans-serif;
font-weight: normal;
font-size: 14px;
color: #555;
line-height: 22px;
vertical-align: middle;
background-color: #f9fafa;
}
.rb-article p em a,
.rb-article p var a {
color: #007bff;
}

View File

@@ -0,0 +1,700 @@
@font-face {
font-family: octicons-link;
src: url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==) format('woff');
}
.markdown-body {
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
line-height: 1.5;
color: #24292e;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-size: 16px;
line-height: 1.5;
word-wrap: break-word;
}
.markdown-body .pl-c {
color: #6a737d;
}
.markdown-body .pl-c1,
.markdown-body .pl-s .pl-v {
color: #005cc5;
}
.markdown-body .pl-e,
.markdown-body .pl-en {
color: #6f42c1;
}
.markdown-body .pl-smi,
.markdown-body .pl-s .pl-s1 {
color: #24292e;
}
.markdown-body .pl-ent {
color: #22863a;
}
.markdown-body .pl-k {
color: #d73a49;
}
.markdown-body .pl-s,
.markdown-body .pl-pds,
.markdown-body .pl-s .pl-pse .pl-s1,
.markdown-body .pl-sr,
.markdown-body .pl-sr .pl-cce,
.markdown-body .pl-sr .pl-sre,
.markdown-body .pl-sr .pl-sra {
color: #032f62;
}
.markdown-body .pl-v,
.markdown-body .pl-smw {
color: #e36209;
}
.markdown-body .pl-bu {
color: #b31d28;
}
.markdown-body .pl-ii {
color: #fafbfc;
background-color: #b31d28;
}
.markdown-body .pl-c2 {
color: #fafbfc;
background-color: #d73a49;
}
.markdown-body .pl-c2::before {
content: "^M";
}
.markdown-body .pl-sr .pl-cce {
font-weight: bold;
color: #22863a;
}
.markdown-body .pl-ml {
color: #735c0f;
}
.markdown-body .pl-mh,
.markdown-body .pl-mh .pl-en,
.markdown-body .pl-ms {
font-weight: bold;
color: #005cc5;
}
.markdown-body .pl-mi {
font-style: italic;
color: #24292e;
}
.markdown-body .pl-mb {
font-weight: bold;
color: #24292e;
}
.markdown-body .pl-md {
color: #b31d28;
background-color: #ffeef0;
}
.markdown-body .pl-mi1 {
color: #22863a;
background-color: #f0fff4;
}
.markdown-body .pl-mc {
color: #e36209;
background-color: #ffebda;
}
.markdown-body .pl-mi2 {
color: #f6f8fa;
background-color: #005cc5;
}
.markdown-body .pl-mdr {
font-weight: bold;
color: #6f42c1;
}
.markdown-body .pl-ba {
color: #586069;
}
.markdown-body .pl-sg {
color: #959da5;
}
.markdown-body .pl-corl {
text-decoration: underline;
color: #032f62;
}
.markdown-body .octicon {
display: inline-block;
vertical-align: text-top;
fill: currentColor;
}
.markdown-body a {
background-color: transparent;
-webkit-text-decoration-skip: objects;
}
.markdown-body a:active,
.markdown-body a:hover {
outline-width: 0;
}
.markdown-body strong {
font-weight: inherit;
}
.markdown-body strong {
font-weight: bolder;
}
.markdown-body h1 {
font-size: 2em;
margin: 0.67em 0;
}
.markdown-body img {
border-style: none;
}
.markdown-body svg:not(:root) {
overflow: hidden;
}
.markdown-body code,
.markdown-body kbd,
.markdown-body pre {
font-family: monospace, monospace;
font-size: 1em;
}
.markdown-body hr {
box-sizing: content-box;
height: 0;
overflow: visible;
}
.markdown-body input {
font: inherit;
margin: 0;
}
.markdown-body input {
overflow: visible;
}
.markdown-body [type="checkbox"] {
box-sizing: border-box;
padding: 0;
}
.markdown-body * {
box-sizing: border-box;
}
.markdown-body input {
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
.markdown-body a {
color: #0366d6;
text-decoration: none;
}
.markdown-body a:hover {
text-decoration: underline;
}
.markdown-body strong {
font-weight: 600;
}
.markdown-body hr {
height: 0;
margin: 15px 0;
overflow: hidden;
background: transparent;
border: 0;
border-bottom: 1px solid #dfe2e5;
}
.markdown-body hr::before {
display: table;
content: "";
}
.markdown-body hr::after {
display: table;
clear: both;
content: "";
}
.markdown-body table {
border-spacing: 0;
border-collapse: collapse;
}
.markdown-body td,
.markdown-body th {
padding: 0;
}
.markdown-body h1,
.markdown-body h2,
.markdown-body h3,
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
margin-top: 0;
margin-bottom: 0;
}
.markdown-body h1 {
font-size: 32px;
font-weight: 600;
}
.markdown-body h2 {
font-size: 24px;
font-weight: 600;
}
.markdown-body h3 {
font-size: 20px;
font-weight: 600;
}
.markdown-body h4 {
font-size: 16px;
font-weight: 600;
}
.markdown-body h5 {
font-size: 14px;
font-weight: 600;
}
.markdown-body h6 {
font-size: 12px;
font-weight: 600;
}
.markdown-body p {
margin-top: 0;
margin-bottom: 10px;
}
.markdown-body blockquote {
margin: 0;
}
.markdown-body ul,
.markdown-body ol {
padding-left: 0;
margin-top: 0;
margin-bottom: 0;
}
.markdown-body ol ol,
.markdown-body ul ol {
list-style-type: lower-roman;
}
.markdown-body ul ul ol,
.markdown-body ul ol ol,
.markdown-body ol ul ol,
.markdown-body ol ol ol {
list-style-type: lower-alpha;
}
.markdown-body dd {
margin-left: 0;
}
.markdown-body code {
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;
font-size: 12px;
}
.markdown-body pre {
margin-top: 0;
margin-bottom: 0;
font: 12px "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;
}
.markdown-body .octicon {
vertical-align: text-bottom;
}
.markdown-body .pl-0 {
padding-left: 0 !important;
}
.markdown-body .pl-1 {
padding-left: 4px !important;
}
.markdown-body .pl-2 {
padding-left: 8px !important;
}
.markdown-body .pl-3 {
padding-left: 16px !important;
}
.markdown-body .pl-4 {
padding-left: 24px !important;
}
.markdown-body .pl-5 {
padding-left: 32px !important;
}
.markdown-body .pl-6 {
padding-left: 40px !important;
}
.markdown-body::before {
display: table;
content: "";
}
.markdown-body::after {
display: table;
clear: both;
content: "";
}
.markdown-body>*:first-child {
margin-top: 0 !important;
}
.markdown-body>*:last-child {
margin-bottom: 0 !important;
}
.markdown-body a:not([href]) {
color: inherit;
text-decoration: none;
}
.markdown-body .anchor {
float: left;
padding-right: 4px;
margin-left: -20px;
line-height: 1;
}
.markdown-body .anchor:focus {
outline: none;
}
.markdown-body p,
.markdown-body blockquote,
.markdown-body ul,
.markdown-body ol,
.markdown-body dl,
.markdown-body table,
.markdown-body pre {
margin-top: 0;
margin-bottom: 16px;
}
.markdown-body hr {
height: 0.25em;
padding: 0;
margin: 24px 0;
background-color: #e1e4e8;
border: 0;
}
.markdown-body blockquote {
padding: 0 1em;
color: #6a737d;
border-left: 0.25em solid #dfe2e5;
}
.markdown-body blockquote>:first-child {
margin-top: 0;
}
.markdown-body blockquote>:last-child {
margin-bottom: 0;
}
.markdown-body kbd {
display: inline-block;
padding: 3px 5px;
font-size: 11px;
line-height: 10px;
color: #444d56;
vertical-align: middle;
background-color: #fafbfc;
border: solid 1px #c6cbd1;
border-bottom-color: #959da5;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #959da5;
}
.markdown-body h1,
.markdown-body h2,
.markdown-body h3,
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
margin-top: 24px;
margin-bottom: 16px;
font-weight: 600;
line-height: 1.25;
}
.markdown-body h1 .octicon-link,
.markdown-body h2 .octicon-link,
.markdown-body h3 .octicon-link,
.markdown-body h4 .octicon-link,
.markdown-body h5 .octicon-link,
.markdown-body h6 .octicon-link {
color: #1b1f23;
vertical-align: middle;
visibility: hidden;
}
.markdown-body h1:hover .anchor,
.markdown-body h2:hover .anchor,
.markdown-body h3:hover .anchor,
.markdown-body h4:hover .anchor,
.markdown-body h5:hover .anchor,
.markdown-body h6:hover .anchor {
text-decoration: none;
}
.markdown-body h1:hover .anchor .octicon-link,
.markdown-body h2:hover .anchor .octicon-link,
.markdown-body h3:hover .anchor .octicon-link,
.markdown-body h4:hover .anchor .octicon-link,
.markdown-body h5:hover .anchor .octicon-link,
.markdown-body h6:hover .anchor .octicon-link {
visibility: visible;
}
.markdown-body h1 {
padding-bottom: 0.3em;
font-size: 2em;
border-bottom: 1px solid #eaecef;
}
.markdown-body h2 {
padding-bottom: 0.3em;
font-size: 1.5em;
border-bottom: 1px solid #eaecef;
}
.markdown-body h3 {
font-size: 1.25em;
}
.markdown-body h4 {
font-size: 1em;
}
.markdown-body h5 {
font-size: 0.875em;
}
.markdown-body h6 {
font-size: 0.85em;
color: #6a737d;
}
.markdown-body ul,
.markdown-body ol {
padding-left: 2em;
}
.markdown-body ul ul,
.markdown-body ul ol,
.markdown-body ol ol,
.markdown-body ol ul {
margin-top: 0;
margin-bottom: 0;
}
.markdown-body li>p {
margin-top: 16px;
}
.markdown-body li+li {
margin-top: 0.25em;
}
.markdown-body dl {
padding: 0;
}
.markdown-body dl dt {
padding: 0;
margin-top: 16px;
font-size: 1em;
font-style: italic;
font-weight: 600;
}
.markdown-body dl dd {
padding: 0 16px;
margin-bottom: 16px;
}
.markdown-body table {
/* display: block; */
width: 100%;
overflow: auto;
}
.markdown-body table th {
font-weight: 600;
}
.markdown-body table th,
.markdown-body table td {
padding: 6px 13px;
border: 1px solid #dfe2e5;
}
.markdown-body table tr {
background-color: #fff;
border-top: 1px solid #c6cbd1;
}
.markdown-body table tr:nth-child(2n) {
background-color: #f6f8fa;
}
.markdown-body img {
max-width: 100%;
box-sizing: content-box;
background-color: #fff;
}
.markdown-body code {
padding: 0;
padding-top: 0.2em;
padding-bottom: 0.2em;
margin: 0;
font-size: 85%;
background-color: rgba(27,31,35,0.05);
border-radius: 3px;
}
.markdown-body code::before,
.markdown-body code::after {
letter-spacing: -0.2em;
content: "\00a0";
}
.markdown-body pre {
word-wrap: normal;
}
.markdown-body pre>code {
padding: 0;
margin: 0;
font-size: 100%;
word-break: normal;
white-space: pre;
background: transparent;
border: 0;
}
.markdown-body .highlight {
margin-bottom: 16px;
}
.markdown-body .highlight pre {
margin-bottom: 0;
word-break: normal;
}
.markdown-body .highlight pre,
.markdown-body pre {
padding: 16px;
overflow: auto;
font-size: 85%;
line-height: 1.45;
background-color: #f6f8fa;
border-radius: 3px;
}
.markdown-body pre code {
display: inline;
max-width: auto;
padding: 0;
margin: 0;
overflow: visible;
line-height: inherit;
word-wrap: normal;
background-color: transparent;
border: 0;
}
.markdown-body pre code::before,
.markdown-body pre code::after {
content: normal;
}
.markdown-body .full-commit .btn-outline:not(:disabled):hover {
color: #005cc5;
border-color: #005cc5;
}
.markdown-body kbd {
display: inline-block;
padding: 3px 5px;
font: 11px "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;
line-height: 10px;
color: #444d56;
vertical-align: middle;
background-color: #fafbfc;
border: solid 1px #d1d5da;
border-bottom-color: #c6cbd1;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #c6cbd1;
}
.markdown-body :checked+.radio-label {
position: relative;
z-index: 1;
border-color: #0366d6;
}
.markdown-body .task-list-item {
list-style-type: none;
}
.markdown-body .task-list-item+.task-list-item {
margin-top: 3px;
}
.markdown-body .task-list-item input {
margin: 0 0.2em 0.25em -1.6em;
vertical-align: middle;
}
.markdown-body hr {
border-bottom-color: #eee;
}

2569
_core/css/sys.css Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,29 @@
<?php
if(!defined('__KIMS__')) exit;
$g['referer'] = $_SERVER['HTTP_REFERER'];
if (!$g['referer'] || !strpos($g['referer'],'&m=admin&'))
{
$_filterSet = array('nic','name','id');
foreach ($_filterSet as $_ft)
{
${$_ft} = preg_replace("(\.|\;|\\\)",'',strip_tags(${$_ft}));
}
}
if (strpos(',join,',$a))
{
if (!$g['referer'] || !strpos($g['referer'],$_SERVER['HTTP_HOST'])) exit;
}
$g['act_module0'] = $g['dir_module'].$a.'.php';
$g['act_module1'] = $g['dir_module'].'action/'.(strpos($a,'/')?str_replace('/','/a.',$a):'a.'.$a).'.php';
$g['act_module2'] = $g['dir_module'].'action/a.'.$a.'.php';
$g['act_module3'] = $g['referer'] && strpos($g['referer'],'&m=admin&') ? ($_HMD['lang']?$_HMD['lang']:$d['admin']['syslang']) : ($_HS['lang']?$_HS['lang']:$d['admin']['syslang']);
include getLangFile($g['dir_module'].'language/',$g['act_module3'],'/lang.action.php');
if (is_file($g['act_module0'])) include $g['act_module0'];
if (is_file($g['act_module1'])) include $g['act_module1'];
if (is_file($g['act_module2'])) include $g['act_module2'];
?>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

View File

@@ -0,0 +1,658 @@
body {
background-color: #343a40
}
/*************** theme ******************/
.form-control,
.input-group-lg>.form-control {
border-radius: 0
}
.btn-light {
color: #24292e;
user-select: none;
background-color: #eff3f6;
background-image: linear-gradient(-180deg, #fafbfc 0%, #eff3f6 90%);
background-repeat: repeat-x;
background-position: -1px -1px;
background-size: 110% 110%;
border: 1px solid rgba(27, 31, 35, 0.2);
border-radius: 0.25em;
white-space: nowrap;
vertical-align: middle;
cursor: pointer;
}
.btn-light:hover {
text-decoration: none;
background-repeat: repeat-x;
}
.btn-light:hover,
.btn-light.hover {
background-color: #e6ebf1;
background-image: linear-gradient(-180deg, #f0f3f6 0%, #e6ebf1 90%);
background-position: 0 -0.5em;
border-color: rgba(27, 31, 35, 0.35);
}
.btn-light:active,
.btn-light.active,
.btn-light.selected {
background-color: #e9ecef !important;
background-image: none !important;
border-color: rgba(27, 31, 35, 0.35) !important;
}
.btn-light:disabled,
.btn-light.disabled {
color: rgba(36, 41, 46, 0.4);
background-color: #eff3f6;
background-image: none;
border: 1px solid rgba(27, 31, 35, 0.2);
border-color: rgba(27, 31, 35, 0.2);
box-shadow: none;
}
.btn:focus {
outline: 0;
}
.btn-light:focus,
.btn-light.focus {
box-shadow: 0 0 0 0.2em rgba(3, 102, 214, 0.3);
}
.rb-system-site .card-header a {
color: #888;
}
.rb-system-site .card-header.bg-primary a {
color: #fff
}
[data-toggle="buttons"].btn-group .btn-light {
color: #777 !important;
font-weight: normal;
}
[data-toggle="buttons"].btn-group .btn-light.active,
[data-toggle="buttons"].btn-group .btn-light:active {
color: #eee !important;
background-color: rgba(0, 0, 0, .09) !important;
border-color: #222 !important;
-webkit-box-shadow: inset 1px 1px 3px #222;
-moz-box-shadow: inset 1px 1px 3px #222;
box-shadow: inset 1px 1px 3px #222;
}
.btn-sm {
padding: 3px 10px;
font-size: 12px;
line-height: 20px;
}
.btn,
[role="button"] {
cursor: pointer !important;
}
.btn-danger {
color: #cb2431;
border: 1px solid rgba(27, 31, 35, 0.2);
background-color: #fafbfc;
background-image: linear-gradient(-180deg, #fafbfc 0%, #eff3f6 90%);
}
.btn-danger:hover {
color: #fff;
background-color: #cb2431;
background-image: linear-gradient(-180deg, #de4450 0%, #cb2431 90%);
border-color: rgba(27, 31, 35, 0.5);
}
.btn-danger:active,
.btn-danger.active {
color: #fff;
background-color: #b5202c;
background-image: none;
border-color: rgba(27, 31, 35, 0.5);
box-shadow: inset 0 0.15em 0.3em rgba(27, 31, 35, 0.15);
}
.btn-danger:disabled,
.btn-danger.disabled {
color: rgba(203, 36, 49, 0.4);
background-color: #eff3f6;
background-image: none;
border-color: rgba(27, 31, 35, 0.2);
box-shadow: none;
}
/*tooltip*/
.tooltip-inner {
background-color: #0366d6;
}
.tooltip.bs-tooltip-top .arrow::before,
.tooltip.bs-tooltip-auto[x-placement^="top"] .arrow::before {
border-top-color: #0366d6
}
/*************** sidebar-inverse ******************/
.rb-system-sidebar.rb-inverse {
display: block;
background-color: #343a40;
min-height: 100%;
border-right: 1px solid #222;
}
.rb-hidden-system-admin .rb-system-sidebar.rb-inverse,
.rb-minified-sidebar .rb-system-sidebar.rb-inverse {
box-shadow: 1px 0 3px rgba(0, 0, 0, 0.5);
}
.rb-system-admin .btn-toolbar .btn {
color: #A8A8A8
}
.rb-system-admin .btn-toolbar .btn:hover {
color: #fff
}
.rb-system-admin .btn-toolbar .btn:active {
color: #428BCA
}
.rb-system-sidebar.rb-inverse .rb-buttons .rb-content-padded {
border-bottom: 1px solid #1A1817;
}
.rb-system-sidebar.rb-inverse .rb-buttons .rb-inner {
border-bottom: 1px solid #1A1817;
}
.rb-system-sidebar.rb-inverse nav ul li a:focus {
color: #c9c9c9
}
.rb-system-sidebar.rb-inverse nav ul li.active a,
.rb-system-sidebar.rb-inverse nav ul li.active a:hover {
color: #fff
}
.rb-system-sidebar.rb-inverse nav ul li.open>a,
.rb-system-sidebar.rb-inverse nav ul li.open>a b {
color: #fff !important;
}
.rb-system-admin nav>ul li.active ul li.active>a {
background-color: #272c32
}
.rb-system-sidebar.rb-inverse nav ul li:hover,
.rb-system-sidebar.rb-inverse nav ul li:hover .menu-item-parent {
color: #428bca;
}
.rb-system-sidebar.rb-inverse nav ul li.active:hover,
.rb-system-sidebar.rb-inverse nav ul li.active:hover .menu-item-parent {
color: #fff;
}
.rb-system-sidebar.rb-inverse nav ul li a {
color: #a8a8a8;
}
#sidebar-modules .list-group-item.active a {
background-color: #272c32;
color: #fff
}
.rb-system-sidebar.rb-inverse nav ul li .menu-item-parent {
color: #ccc;
}
.rb-system-sidebar.rb-inverse nav ul li a:focus {
color: #c9c9c9
}
.rb-system-sidebar.rb-inverse nav ul ul {
/*background: rgba(69, 69, 69, .7);*/
}
.rb-system-sidebar.rb-inverse nav ul .active ul {
/*background: rgba(69, 69, 69, 1);*/
}
.rb-system-sidebar.rb-inverse nav>ul>li>ul::before {
border-left: 1px dotted #7A7A7A;
}
.rb-system-sidebar.rb-inverse nav>ul li.active>a.collapsed:before {
color: #eee;
}
.rb-system-sidebar.rb-inverse nav>ul li.active ul li.active>a:before {
color: #eee;
}
.rb-system-sidebar.rb-inverse nav ul li a:active {
background: #000 !important
}
.rb-system-sidebar.rb-inverse nav>ul ul li::before {
border-top: 1px dotted #7A7A7A;
}
.rb-system-sidebar.rb-inverse nav>ul>li>a>i>em {
background: #ED1C24;
color: #fff;
border: 1px solid rgba(255, 255, 255, .1);
}
/*login-info*/
.rb-system-sidebar.rb-inverse .login-info a.rb-username {
color: #a8a8a8;
}
.rb-system-sidebar.rb-inverse .login-info>a:hover {
color: #fff
}
.rb-minified-sidebar .rb-system-sidebar.rb-inverse .login-info {
border-bottom: 1px solid #181818
}
@media (max-width: 992px) and (min-width: 768px) {
.rb-system-sidebar.rb-inverse .rb-minify-sidebar {
color: #A8A8A8;
}
}
/* minified-sidebar */
.rb-system-sidebar.rb-inverse .rb-minify-sidebar {
background: transparent;
color: #A8A8A8;
}
.rb-system-sidebar.rb-inverse .rb-minify-sidebar:hover {
/*background: #646464;*/
color: #E4E4E4;
}
.rb-minified-sidebar .rb-system-sidebar.rb-inverse .rb-minify-sidebar {
color: #A8A8A8;
}
.rb-minified-sidebar .rb-system-sidebar.rb-inverse .rb-inbox-badge {
background: #ED1C24;
}
.rb-minified-sidebar .rb-system-sidebar.rb-inverse nav>ul>ul {
background: #ed1c24 !important
}
.rb-minified-sidebar .rb-system-sidebar.rb-inverse nav>ul>li>a>.menu-item-parent {
background-color: #f5f5f5;
color: #333 !important;
text-shadow: none;
-webkit-box-shadow: 2px 1px 2px 0 rgba(0, 0, 0, .2);
-moz-box-shadow: 2px 1px 2px 0 rgba(0, 0, 0, .2);
box-shadow: 2px 1px 2px 0 rgba(0, 0, 0, .2);
border-left: 1px solid #bfbfbf;
border-top: 1px solid #D8D4D4;
border-bottom: 1px solid #fff;
}
.rb-minified-sidebar .rb-system-sidebar.rb-inverse nav>ul>li>ul {
border: 1px solid #bfbfbf;
-webkit-box-shadow: 1px 1px 2px 0 rgba(0, 0, 0, .2);
-moz-box-shadow: 1px 1px 2px 0 rgba(0, 0, 0, .2);
box-shadow: 1px 1px 2px 0 rgba(0, 0, 0, .2);
background: #222222;
}
.rb-minified-sidebar .rb-system-sidebar.rb-inverse nav>ul>li>ul>li {
background-color: rgba(69, 69, 69, .9)
}
.rb-minified-sidebar .rb-system-sidebar.rb-inverse nav>ul>li>ul>li>ul>li {
background-color: #484B50
}
.rb-minified-sidebar .rb-system-sidebar.rb-inverse nav>ul>li {
border-bottom: 1px solid #1A1817;
border-top: 1px solid #525151
}
/* hide-sidebar */
.rb-system-sidebar.rb-inverse .rb-hide-sidebar2 {
border-bottom: 1px solid #302F2F;
background: transparent;
color: #A8A8A8;
}
.rb-hidden-sidebar .rb-system-sidebar.rb-inverse {
-moz-box-shadow: 0 0 6px rgba(3, 3, 3, 0.6);
-webkit-box-shadow: 0 0 6px rgba(3, 3, 3, 0.6);
box-shadow: 0 0 6px rgba(3, 3, 3, 0.6);
}
.rb-hidden-sidebar .rb-system-sidebar.rb-inverse .rb-hide-sidebar {
color: #333;
background-color: #e6e6e6;
border-color: #adadad;
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
}
.rb-system-sidebar.rb-system-site {
background-color: #343a40;
border-left: 1px solid #222;
}
.rb-system-site .rb-panel-top {
background-color: #272c32 !important;
border-bottom: 1px solid #222;
color: #eee
}
.rb-system-site .rb-icon-hide {
color: #eee
}
.rb-hidden-system-site .rb-system-site .rb-icon-hide:hover .rb-icon:before,
.rb-system-site .rb-icon-hide:hover .rb-icon:before {
color: #eee;
}
/* tabs-below */
.rb-system-sidebar.rb-inverse .nav-tabs {
border-bottom: 1px solid #c9c9c9;
}
.rb-system-sidebar.rb-inverse .nav-tabs>li>a {
border: 1px solid #c9c9c9;
background: -moz-linear-gradient(top, #999 0%, #444 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #999), color-stop(100%, #444));
background: -webkit-linear-gradient(top, #999 0%, #444 100%);
background: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background: -ms-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#99999999', endColorstr='#44444444', GradientType=0);
-webkit-box-shadow: inset 0px 1px 0px 0px rgba(255, 255, 255, 1);
box-shadow: inset 0px 1px 0px 0px rgba(255, 255, 255, 1);
color: #333;
}
.rb-system-sidebar.rb-inverse .nav-tabs>li>a.active {
color: #eee;
background: #ffffff;
border: 1px solid #c9c9c9;
border-right: 1px solid transparent;
border-bottom-color: transparent;
}
.rb-system-sidebar.rb-inverse .nav-tabs>li>a:hover {
color: #62aeef;
}
.rb-system-sidebar.rb-inverse .nav-tabs>li:last-child>a,
.rb-system-sidebar.rb-inverse .nav-tabs>li.last-child>a {
border-right: 1px solid #c9c9c9
}
.rb-system-sidebar.rb-inverse .tabs-below>.nav-tabs {
border-color: #c5d0dc;
}
.rb-system-sidebar.rb-inverse .tabs-below>.nav-tabs>li>a,
.rb-system-sidebar.rb-inverse .tabs-below>.nav-tabs>li>a:hover,
.rb-system-sidebar.rb-inverse .tabs-below>.nav-tabs>li>a:focus {
margin-left: -1px
}
.rb-system-sidebar.rb-inverse .tabs-below>.nav-tabs>li>a.active,
.rb-system-sidebar.rb-inverse .tabs-below>.nav-tabs>li>a.active:hover,
.rb-system-sidebar.rb-inverse .tabs-below>.nav-tabs>li>a.active:focus {
box-shadow: 0px 2px 3px 0px rgba(0, 0, 0, 0.15);
background-color: transparent;
border-color: transparent;
border: none;
}
.rb-system-main {
background-color: #343a40
}
.rb-system-site {
color: #999;
}
.rb-system-site .list-group-item {
line-height: 1.2
}
.rb-system-site .custom-control-description {
line-height: 1.9
}
.custom-checkbox,
.custom-radio {
line-height: 1.7rem;
}
.custom-control-label::before {
background-color: #1f2227;
border-radius: .15rem;
}
.rb-system-site .rb-content-padded {
padding: 0;
}
.rb-system-site .nav-tabs .nav-link {
border-radius: 0;
background-color: #272c32;
color: #999
}
.rb-system-sidebar .nav-tabs {
border-bottom: 1px solid transparent;
}
.rb-system-sidebar .nav-tabs .nav-item {
width: 25%
}
.rb-system-sidebar .nav-tabs .nav-link {
padding: .5rem;
border-right: 1px solid #222;
border-bottom: 1px solid #222;
}
.rb-system-sidebar .nav-tabs .nav-link:hover {
border-color: #222;
border-top-color: transparent;
border-left-color: transparent
}
.rb-system-sidebar .nav-tabs .nav-link.active {
color: #eee;
background-color: inherit;
border: 1px solid #222;
border-top: 0;
border-bottom: 0
}
.rb-system-sidebar .nav-tabs .nav-link.active:first-child {
border-left: 0
}
.rb-system-site fieldset[disabled] .btn-light,
.rb-system-site fieldset[disabled] .btn-light.active {
background-image: none;
background-color: inherit
}
.rb-system-site .card {
background-color: inherit;
color: #eee
}
.rb-system-site .form-control {
background-color: #1f2227;
color: #abafb5;
border-color: #272c31
}
.rb-system-site .form-control:focus {
color: #abafb5;
background-color: #1f2227;
border-color: #5792ef;
border-width: 1px;
outline: 0;
box-shadow: none;
}
.bg-light {
background-color: rgba(0, 0, 0, .03) !important;
}
.btn.btn-light {
background-color: #343a40;
background-image: none;
color: #ccc !important;
border-color: #181a1e;
font-weight: normal;
}
.btn.btn-block {
border-radius: 4rem;
}
.btn-outline-primary {
color: #ccc;
border-color: #ccc;
}
.rb-hidden-system-site .rb-system-site .rb-opener {
background-color: inherit;
border-bottom-left-radius: 2px;
border-top-left-radius: 2px;
box-shadow: -1px 0 2px rgba(0, 0, 0, 0.5);
color: #9ea6b3;
display: block;
left: -20px;
padding: 0 5px;
}
.rb-system-site .custom-select {
background-color: #272c32;
display: inline-block;
max-width: 100%;
height: calc(2.25rem + 2px);
padding: 0.375rem 1.75rem 0.375rem 0.75rem;
line-height: 1.5;
/*color: #495057;*/
vertical-align: middle;
background: #272c32 url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='#abafb5' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.75rem center;
background-size: 8px 10px;
border: 1px solid #222;
border-radius: 0.15rem;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
.rb-system-site .table td,
.rb-system-site .table th {
border-top: 1px solid #222;
}
.rb-system-site .table {
color: #999
}
.table thead th {
border-bottom: 1px solid #222;
}
#emuldevices {
left: 0;
}
#emuldevices .table th:first-child,
#emuldevices .table td:first-child {
padding-left: 15px
}
#emuldevices .table tbody tr.active td,
#emuldevices .table tbody tr.active th {
color: #fff;
background-color: #007bff;
}
/*utility*/
/*color*/
.muted-link {
color: #ccc !important;
}
.muted-link:hover {
color: #eee !important;
text-decoration: none;
}
.text-gray {
color: #586069 !important;
}
.text-gray-light {
color: #959da5 !important;
}
.text-gray-dark {
color: #24292e !important;
}
.link-gray {
color: #586069 !important;
}
.link-gray-dark {
color: #24292e !important;
}
.link-gray-dark:hover {
color: #0366d6 !important;
}
.border-top {
border-top: 1px #e1e4e8 solid !important;
}
.border-gray-light {
border-color: #eaecef !important;
}

View File

@@ -0,0 +1,581 @@
body {
background-color: #F4F4F4;
font-family: 'Noto Sans KR', sans-serif, '돋움', dotum, sans-serif;
}
/*************** theme ******************/
.form-control,
.input-group-lg>.form-control {
border-radius: 0
}
.btn-light {
color: #24292e;
user-select: none;
background-color: #F4F4F4;
border: 1px solid rgba(0, 0, 0, .1);
border-radius: 0.25em;
white-space: nowrap;
vertical-align: middle;
cursor: pointer;
}
.btn-light:hover {
text-decoration: none;
background-repeat: repeat-x;
}
.btn-light:hover,
.btn-light.hover {
background-color: #e6ebf1;
}
.btn-light:active,
.btn-light.active,
.btn-light.selected {
background-color: #e9ecef !important;
background-image: none !important;
border-color: rgba(27, 31, 35, 0.35) !important;
}
.btn-light:disabled,
.btn-light.disabled {
color: rgba(36, 41, 46, 0.4);
background-color: #eff3f6;
background-image: none;
border: 1px solid rgba(27, 31, 35, 0.2);
border-color: rgba(27, 31, 35, 0.2);
box-shadow: none;
}
.btn:focus {
outline: 0;
}
.btn-light:focus,
.btn-light.focus {
box-shadow: 0 0 0 0.2em rgba(3, 102, 214, 0.3);
}
.rb-system-site .card-header a {
color: #888;
}
.rb-system-site .card-header.bg-primary a {
color: #fff
}
[data-toggle="buttons"].btn-group .btn-light {
color: #999;
font-weight: normal;
background-color: #fff;
font-weight: 300
}
[data-toggle="buttons"].btn-group .btn-light.active,
[data-toggle="buttons"].btn-group .btn-light:active {
color: #666 !important;
background-color: rgba(0, 0, 0, .05) !important;
border-color: rgba(0, 0, 0, .1) !important;
-webkit-box-shadow: inset 1px 1px 3px rgba(0, 0, 0, .1);
-moz-box-shadow: inset 1px 1px 3px rgba(0, 0, 0, .1);
box-shadow: inset 1px 1px 3px rgba(0, 0, 0, .1);
}
.btn-sm {
padding: 3px 10px;
font-size: 12px;
line-height: 20px;
}
.btn,
[role="button"] {
cursor: pointer !important;
}
.btn-danger {
color: #cb2431;
border: 1px solid rgba(27, 31, 35, 0.2);
background-color: #fafbfc;
background-image: linear-gradient(-180deg, #fafbfc 0%, #eff3f6 90%);
}
.btn-danger:hover {
color: #fff;
background-color: #cb2431;
background-image: linear-gradient(-180deg, #de4450 0%, #cb2431 90%);
border-color: rgba(27, 31, 35, 0.5);
}
.btn-danger:active,
.btn-danger.active {
color: #fff;
background-color: #b5202c;
background-image: none;
border-color: rgba(27, 31, 35, 0.5);
box-shadow: inset 0 0.15em 0.3em rgba(27, 31, 35, 0.15);
}
.btn-danger:disabled,
.btn-danger.disabled {
color: rgba(203, 36, 49, 0.4);
background-color: #eff3f6;
background-image: none;
border-color: rgba(27, 31, 35, 0.2);
box-shadow: none;
}
/*************** sidebar-inverse ******************/
.rb-system-sidebar.rb-inverse {
display: block;
background-color: #F4F4F4;
min-height: 100%;
border-right: 1px solid rgba(0, 0, 0, .1);
}
.rb-hidden-system-admin .rb-system-sidebar.rb-inverse,
.rb-minified-sidebar .rb-system-sidebar.rb-inverse {
box-shadow: 1px 0 3px rgba(0, 0, 0, 0.5);
}
.rb-system-admin .btn-toolbar .btn {
color: #666
}
.rb-system-admin .btn-toolbar .btn:hover {
color: #333
}
.rb-system-admin .btn-toolbar .btn:active {
color: #428BCA
}
.rb-system-sidebar.rb-inverse .rb-buttons .rb-content-padded {
border-bottom: 1px solid #1A1817;
}
.rb-system-sidebar.rb-inverse .rb-buttons .rb-inner {
border-bottom: 1px solid #1A1817;
}
.rb-system-sidebar.rb-inverse nav ul li a:focus {
color: #c9c9c9
}
.rb-system-admin .rb-icon-minify:hover .rb-icon:before {
color: #999;
}
.rb-system-sidebar.rb-inverse nav ul li.active a,
.rb-system-sidebar.rb-inverse nav ul li.active a:hover {
color: #555
}
.rb-system-sidebar.rb-inverse nav ul li.open>a,
.rb-system-sidebar.rb-inverse nav ul li.open>a b {
color: #fff !important;
}
.rb-system-admin nav>ul li.active ul li.active>a {
background-color: #D5D5D5
}
.rb-system-admin #sidebar-sites nav .list-group-item.active {
background-color: #D5D5D5;
}
.rb-system-sidebar.rb-inverse nav ul li:hover,
.rb-system-sidebar.rb-inverse nav ul li:hover .menu-item-parent {
color: #428bca;
}
.rb-system-sidebar.rb-inverse nav ul li.active:hover,
.rb-system-sidebar.rb-inverse nav ul li.active:hover .menu-item-parent {
color: #333;
}
.rb-system-sidebar.rb-inverse nav ul li a {
color: #444;
}
#sidebar-modules .list-group-item.active a {
background-color: #D5D5D5;
}
.rb-system-sidebar.rb-inverse nav ul li .menu-item-parent {
color: #444;
}
.rb-system-sidebar.rb-inverse nav ul li a:focus {
/* color: #c9c9c9 */
}
.rb-system-sidebar.rb-inverse nav ul ul {
/*background: rgba(69, 69, 69, .7);*/
}
.rb-system-sidebar.rb-inverse nav ul .active ul {
/*background: rgba(69, 69, 69, 1);*/
}
.rb-system-sidebar.rb-inverse nav>ul>li>ul::before {
border-left: 1px dotted #7A7A7A;
}
.rb-system-sidebar.rb-inverse nav>ul li.active>a.collapsed:before {
color: #D5D5D5;
}
.rb-system-sidebar.rb-inverse nav>ul li.active ul li.active>a:before {
color: #D5D5D5;
}
.rb-system-sidebar.rb-inverse nav ul li a:active {
background: rgba(0, 0, 0, .04);
!important
}
.rb-system-sidebar.rb-inverse nav>ul ul li::before {
border-top: 1px dotted #7A7A7A;
}
.rb-system-sidebar.rb-inverse nav>ul>li>a>i>em {
background: #ED1C24;
color: #fff;
border: 1px solid rgba(255, 255, 255, .1);
}
/*login-info*/
.rb-system-sidebar.rb-inverse .login-info a.rb-username {
color: #444;
}
.rb-system-sidebar.rb-inverse .login-info>a:hover {
color: #fff
}
.rb-minified-sidebar .rb-system-sidebar.rb-inverse .login-info {
border-bottom: 1px solid rgba(0, 0, 0, .1)
}
@media (max-width: 992px) and (min-width: 768px) {
.rb-system-sidebar.rb-inverse .rb-minify-sidebar {
color: #A8A8A8;
}
}
/* minified-sidebar */
.rb-system-sidebar.rb-inverse .rb-minify-sidebar {
background: transparent;
color: #A8A8A8;
}
.rb-system-sidebar.rb-inverse .rb-minify-sidebar:hover {
/*background: #646464;*/
color: #E4E4E4;
}
.rb-minified-sidebar .rb-system-sidebar.rb-inverse .rb-minify-sidebar {
color: #A8A8A8;
}
.rb-minified-sidebar .rb-system-sidebar.rb-inverse .rb-inbox-badge {
background: #ED1C24;
}
.rb-minified-sidebar .rb-system-sidebar.rb-inverse nav>ul>ul {
background: #ed1c24 !important
}
.rb-minified-sidebar .rb-system-sidebar.rb-inverse nav>ul>li>a>.menu-item-parent {
background-color: #f5f5f5;
color: #333 !important;
text-shadow: none;
-webkit-box-shadow: 2px 1px 2px 0 rgba(0, 0, 0, .2);
-moz-box-shadow: 2px 1px 2px 0 rgba(0, 0, 0, .2);
box-shadow: 2px 1px 2px 0 rgba(0, 0, 0, .2);
border-left: 1px solid #bfbfbf;
border-top: 1px solid #D8D4D4;
border-bottom: 1px solid #fff;
}
.rb-minified-sidebar .rb-system-sidebar.rb-inverse nav>ul>li>ul {
border: 1px solid rgba(0, 0, 0, .1);
-webkit-box-shadow: 1px 1px 2px 0 rgba(0, 0, 0, .2);
-moz-box-shadow: 1px 1px 2px 0 rgba(0, 0, 0, .2);
box-shadow: 1px 1px 2px 0 rgba(0, 0, 0, .2);
background: #fff;
}
.rb-minified-sidebar .rb-system-sidebar.rb-inverse nav>ul>li>ul>li {
background-color: #ffff
}
.rb-minified-sidebar .rb-system-sidebar.rb-inverse nav>ul>li>ul>li>ul>li {
background-color: #fff
}
.rb-minified-sidebar .rb-system-sidebar.rb-inverse nav>ul>li {
border-bottom: 1px solid rgba(0, 0, 0, .1);
border-top: 1px solid rgba(0, 0, 0, .1)
}
/* hide-sidebar */
.rb-system-sidebar.rb-inverse .rb-hide-sidebar2 {
border-bottom: 1px solid #302F2F;
background: transparent;
color: #A8A8A8;
}
.rb-hidden-sidebar .rb-system-sidebar.rb-inverse {
-moz-box-shadow: 0 0 6px rgba(3, 3, 3, 0.6);
-webkit-box-shadow: 0 0 6px rgba(3, 3, 3, 0.6);
box-shadow: 0 0 6px rgba(3, 3, 3, 0.6);
}
.rb-hidden-sidebar .rb-system-sidebar.rb-inverse .rb-hide-sidebar {
color: #333;
background-color: #e6e6e6;
border-color: #adadad;
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
}
.rb-system-sidebar.rb-system-site {
background-color: #fff;
border-left: 1px solid rgba(0, 0, 0, .1);
}
.rb-system-site .rb-panel-top {
background-color: #F4F4F4 !important;
border-bottom: 1px solid rgba(0, 0, 0, .1);
color: #eee
}
.rb-system-site .rb-icon-hide {
color: #999
}
.rb-hidden-system-site .rb-system-site .rb-icon-hide:hover .rb-icon:before,
.rb-system-site .rb-icon-hide:hover .rb-icon:before {
color: #999;
}
/* tabs-below */
.rb-system-sidebar.rb-inverse .nav-tabs {
border-bottom: 1px solid rgba(0, 0, 0, .1);
}
.rb-system-sidebar.rb-inverse .nav-tabs>li>a {
border: 1px solid rgba(0, 0, 0, .1);
color: #777;
background-color: #fff;
}
.rb-system-sidebar.rb-inverse .nav-tabs>li>a.active {
color: #444;
background: #ffffff;
border: 1px solid #c9c9c9;
border-right: 1px solid transparent;
border-bottom-color: transparent;
}
.rb-system-sidebar.rb-inverse .nav-tabs>li>a:hover {
color: #62aeef;
}
.rb-system-sidebar.rb-inverse .nav-tabs>li:last-child>a,
.rb-system-sidebar.rb-inverse .nav-tabs>li.last-child>a {
border-right: 1px solid #c9c9c9
}
.rb-system-sidebar.rb-inverse .tabs-below>.nav-tabs {
border-color: #c5d0dc;
}
.rb-system-sidebar.rb-inverse .tabs-below>.nav-tabs>li>a,
.rb-system-sidebar.rb-inverse .tabs-below>.nav-tabs>li>a:hover,
.rb-system-sidebar.rb-inverse .tabs-below>.nav-tabs>li>a:focus {
margin-left: -1px
}
.rb-system-sidebar.rb-inverse .tabs-below>.nav-tabs>li>a.active,
.rb-system-sidebar.rb-inverse .tabs-below>.nav-tabs>li>a.active:hover,
.rb-system-sidebar.rb-inverse .tabs-below>.nav-tabs>li>a.active:focus {
background-color: transparent;
border-color: transparent;
border: none;
}
.rb-system-main {
background-color: #fff
}
.rb-system-site .list-group-item {
line-height: 1.2
}
.rb-system-site .custom-control-description {
line-height: 1.9
}
.custom-checkbox,
.custom-radio {
line-height: 1.7rem;
}
.custom-control-label::before {
border-radius: .15rem;
}
.rb-system-site .rb-content-padded {
padding: 0;
}
.rb-system-site .nav-tabs .nav-link {
border-radius: 0;
color: #999
}
.rb-system-sidebar .nav-tabs {
border-bottom: 1px solid transparent;
}
.rb-system-sidebar .nav-tabs .nav-item {
width: 25%
}
.rb-system-sidebar .nav-tabs .nav-link {
padding: .5rem;
border-right: 1px solid rgba(0, 0, 0, .1);
border-bottom: 1px solid rgba(0, 0, 0, .1);
}
.rb-system-sidebar .nav-tabs .nav-link:hover {
border-color: rgba(0, 0, 0, .1);
border-top-color: transparent;
border-left-color: transparent
}
.rb-system-sidebar .nav-tabs .nav-link.active {
color: #444;
background-color: inherit;
border: 1px solid rgba(0, 0, 0, .1);
border-top: 0;
border-bottom: 0
}
.rb-system-sidebar .nav-tabs .nav-link.active:first-child {
border-left: 0
}
.rb-system-site fieldset[disabled] .btn-light,
.rb-system-site fieldset[disabled] .btn-light.active {
background-image: none;
background-color: inherit
}
.rb-system-site .card {
background-color: inherit;
color: #555;
}
.btn.btn-block {
border-radius: 4rem;
}
.btn-outline-primary {
color: #555;
border-color: #ccc;
}
.rb-hidden-system-site .rb-system-site .rb-opener {
background-color: inherit;
border-bottom-left-radius: 2px;
border-top-left-radius: 2px;
box-shadow: -1px 0 2px rgba(0, 0, 0, 0.5);
color: #9ea6b3;
display: block;
left: -20px;
padding: 0 5px;
}
.rb-system-site .table td,
.rb-system-site .table th {
border-top: 1px solid rgba(0, 0, 0, .1);
}
.table thead th {
border-bottom: 1px solid rgba(0, 0, 0, .1);
}
#emuldevices {
left: 0;
}
#emuldevices .table th:first-child,
#emuldevices .table td:first-child {
padding-left: 15px
}
#emuldevices .table tbody tr.active td,
#emuldevices .table tbody tr.active th {}
/*utility*/
/*color*/
.muted-link {
color: #ccc !important;
}
.muted-link:hover {
color: #eee !important;
text-decoration: none;
}
.text-gray {
color: #586069 !important;
}
.text-gray-light {
color: #959da5 !important;
}
.text-gray-dark {
color: #24292e !important;
}
.link-gray {
color: #586069 !important;
}
.link-gray-dark {
color: #24292e !important;
}
.link-gray-dark:hover {
color: #0366d6 !important;
}
.border-top {
border-top: 1px #e1e4e8 solid !important;
}
.border-gray-light {
border-color: #eaecef !important;
}

View File

@@ -0,0 +1,79 @@
<?php
if(!defined('__KIMS__')) exit;
if (is_file($g['main']))
{
if (!$system)
{
if(!$g['mobile'] || $_SESSION['pcmode']=='Y')
{
if (!$g['head']['cod'])
{
$g['codhead'] = $g['path_page'].$r.'-menus/'.$_HM['id'].'.header.php';
if(is_file($g['codhead'])) include $g['codhead'];
}
if ($_HM['imghead'])
{
if (strstr($_HM['imghead'],'swf')) echo '<div><embed id="swf_menu_header" src="'.$g['s'].'/_var/menu/'.$_HM['imghead'].'"></embed></div>';
else echo '<div><img id="img_menu_header" src="'.$g['s'].'/_var/menu/'.$_HM['imghead'].'" alt="" /></div>';
}
}
$d['cachetime'] = file_exists($d['page']['cctime']) ? implode('',file($d['page']['cctime'])) : 0;
if ($d['cachetime'] && substr($d['page']['source'],0,8)=='./pages/')
{
$g['cache'] = str_replace('.php','.cache',$d['page']['source']);
$g['recache'] = true;
if(file_exists($g['cache']))
{
if(mktime() - filemtime($g['cache']) > $d['cachetime'] * 60) unlink($g['cache']);
else
{
readfile($g['cache']);
$g['recache'] = false;
}
}
if ($g['recache'])
{
ob_start();
include $g['main'];
$g['buffer'] = ob_get_contents();
ob_end_clean();
echo $g['buffer'];
$fp = fopen($g['cache'],'w');
fwrite($fp,$g['buffer']);
fclose($fp);
@chmod($g['cache'],0707);
}
}
else {
include $g['main'];
}
if(!$g['mobile'] || $_SESSION['pcmode']=='Y')
{
if ($_HM['imgfoot'])
{
if (strstr($_HM['imgfoot'],'swf')) echo '<div><embed id="swf_menu_footer" src="'.$g['s'].'/_var/menu/'.$_HM['imgfoot'].'"></embed></div>';
else echo '<div><img id="img_menu_footer" src="'.$g['s'].'/_var/menu/'.$_HM['imgfoot'].'" alt="" /></div>';
}
if (!$g['foot']['cod'])
{
$g['codfoot'] = $g['path_page'].$r.'-menus/'.$_HM['id'].'.footer.php';
if(is_file($g['codfoot'])) include $g['codfoot'];
}
}
}
else {
include $g['main'];
}
}
else
{
getLink($g['s'].'/?r='.$r,'','','');
}
?>

View File

@@ -0,0 +1,75 @@
<?php
if(!defined('__KIMS__')) exit;
$g['incdir'] = $g['incdir']?$g['incdir']:$g['path_layout'].$d['layout']['dir'].'/_includes/';
$g['wcache'] = $d['admin']['cache_flag']?'?nFlag='.$date[$d['admin']['cache_flag']]:'';
$g['cssset'] = array
(
$g['dir_module'].'_main'=>$g['url_module'].'/_main',
$g['dir_module_skin'].'_main'=>$g['url_module_skin'].'/_main',
$g['dir_module_comm']=>$g['url_module_comm'],
$g['dir_module_mode']=>$g['url_module_mode'],
$g['dir_module_admin']=>$g['url_module_admin'],
);
$NT_DATA = explode('|',$my['noticeconf']);
$nt_web = $NT_DATA[0];
$nt_email = $NT_DATA[1];
$nt_fcm = $NT_DATA[2];
?>
<script>
var rooturl = '<?php echo $g['url_root']?>';
var rootssl = '<?php echo $g['ssl_root']?>';
var raccount= '<?php echo $r?>';
var moduleid= '<?php echo $m?>';
var memberid= '<?php echo $my['id']?>';
var is_admin= '<?php echo $my['admin']?>';
var num_mynoti = '<?php echo $my['num_notice']==0?'':$my['num_notice']?>';
var connect_naver= '<?php echo getConnectUrl('naver',$d['connect']['key_n'],$d['connect']['secret_n'],$g['url_root'].'/'.$r.'/oauth/naver',false)?>';
var connect_kakao= '<?php echo getConnectUrl('kakao',$d['connect']['key_k'],$d['connect']['secret_k'],$g['url_root'].'/'.$r.'/oauth/kakao',false)?>';
var connect_google= '<?php echo getConnectUrl('google',$d['connect']['key_g'],$d['connect']['secret_g'],$g['url_root'].'/'.$r.'/oauth/google',false)?>';
var connect_facebook= '<?php echo getConnectUrl('facebook',$d['connect']['key_f'],$d['connect']['secret_f'],$g['url_root'].'/'.$r.'/oauth/facebook',false)?>';
var connect_instagram= '<?php echo getConnectUrl('instagram',$d['connect']['key_i'],$d['connect']['secret_i'],$g['url_root'].'/'.$r.'/oauth/instagram',false)?>';
var nt_web = '<?php echo $nt_web ?>';
var nt_email = '<?php echo $nt_email ?>';
var nt_fcm = '<?php echo $nt_fcm ?>';
var broswer = '<?php echo $g['broswer'] ?>';
var deviceKind = '<?php echo $g['mobile'] ?>';
var deviceType = '<?php echo $g['deviceType'] ?>';
var kakao_jskey = '<?php echo $d['connect']['jskey_k'] ?>';
var post_skin_main = '<?php echo $d['post']['skin_main'] ?>';
var post_skin_mobile = '<?php echo $d['post']['skin_mobile'] ?>';
var ios_Token = window.localStorage.getItem('setTokenTolocal');
var is_pwa = navigator.share === undefined?1:'';
</script>
<!-- is-loading : https://github.com/hekigan/is-loading-->
<?php getImport('is-loading','jquery.isloading.min','1.0.6','js')?>
<!-- js-cookie : https://github.com/js-cookie/js-cookie -->
<?php getImport('js-cookie','js.cookie.min','2.2.1','js')?>
<?php if (!$g['mobile'] && $_SESSION['pcmode'] == 'Y'): ?>
<!-- bootstrap-notify : https://github.com/mouse0270/bootstrap-notify -->
<?php getImport('bootstrap-notify','bootstrap-notify.min','3.1.3','js')?>
<?php endif; ?>
<link href="<?php echo $g['s']?>/_core/css/sys.css<?php echo $g['wcache']?>" rel="stylesheet">
<script src="<?php echo $g['s']?>/_core/js/sys.js<?php echo $g['wcache']?>"></script>
<?php if ($g['broswer']!='MSIE 10' && $g['broswer']!='MSIE 11'): ?>
<script src="<?php echo $g['s']?>/_core/js/ckeditor5.js<?php echo $g['wcache']?>"></script>
<?php endif; ?>
<?php foreach ($g['cssset'] as $_key => $_val):?>
<?php if (is_file($_key.'.css')):?>
<link href="<?php echo $_val?>.css<?php echo $g['wcache']?>" rel="stylesheet">
<?php endif?>
<?php if (is_file($_key.'.js')):?>
<script src="<?php echo $_val?>.js<?php echo $g['wcache']?>"></script>
<?php endif?>
<?php endforeach?>
<!-- 헤더 스위치 -->
<?php foreach($g['switch_2'] as $_switch) include $_switch ?>

View File

@@ -0,0 +1,96 @@
<!-- 사이트 풋터 코드 -->
<?php echo $_HS['footercode'] ?>
<!-- 푸터 스위치 -->
<?php foreach($g['switch_3'] as $_switch) include $_switch ?>
<?php if($g['mobile']&&$_SESSION['pcmode']=='Y'&&$iframe!='Y'):?>
<div id="pctomobile" class="bg-faded" style="width:100%">
<a href="<?php echo $g['s']?>/?r=<?php echo $r?>&amp;a=mobilemode" class="btn btn-block btn-secondary" style="font-size: 4rem;padding: 3rem">
<i class="fa fa-mobile fa-lg" aria-hidden="true"></i> 모바일 모드 전환
</a>
</div>
<?php endif?>
<div id="_box_layer_"></div>
<div id="_action_layer_"></div>
<div id="_hidden_layer_"></div>
<div id="_overLayer_"></div>
<iframe hidden name="_action_frame_<?php echo $m?>" width="0" height="0" frameborder="0" scrolling="no" title="iframe"></iframe>
<!-- 알림처리 -->
<iframe hidden name="pushframe" src="" title="iframe"></iframe>
<?php
if ($g['mobile']&&$_SESSION['pcmode']!='Y') {
$g['wdgcod'] = $g['path_tmp'].'widget/c'.$_HM['uid'].'.p'.$_HP['uid'].'.mobile.cache';
} else {
$g['wdgcod'] = $g['path_tmp'].'widget/c'.$_HM['uid'].'.p'.$_HP['uid'].'.desktop.cache';
}
if(is_file($g['wdgcod'])) include $g['wdgcod'];
if($g['widget_cssjs']) include $g['path_core'].'engine/widget.cssjs.php';
if($my['uid']) include $g['path_core'].'engine/notification.engine.php';
?>
<script>
$(function() {
Iframely('oembed[url]') // oembed 미디어 변환
// 회원가입 작동중단 처리
<?php if (!$d['member']['join_enable']): ?>
$('#modal-join').on('show.<?php echo ($g['mobile']&&$_SESSION['pcmode']!='Y')?'rc':'bs' ?>.modal', function (e) {
alert('죄송합니다. 지금은 회원가입을 하실 수 없습니다.')
location.reload();
})
<?php endif; ?>
// 알림 기본 셋팅값 정의
<?php if ($g['mobile'] && $_SESSION['pcmode'] != 'Y'): ?>
$.notifyDefaults({
placement: {
from: "bottom",
align: "center"
},
allow_dismiss: false,
offset: 20,
type: "default",
timer: 100,
delay: 1500,
animate: {
enter: "animated fadeInUp",
exit: "animated fadeOutDown"
}
});
<?php else: ?>
$.notifyDefaults({
placement: {
from: "top",
align: "right"
},
allow_dismiss: false,
offset: 20,
type: "success",
timer: 100,
delay: 1500,
animate: {
enter: "animated fadeInDown",
exit: "animated fadeOutUp"
}
});
<?php endif; ?>
});
<?php if($_HS['dtd']):?>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', '<?php echo $_HS['dtd']?>', 'auto');
ga('send', 'pageview');
<?php endif?>
</script>

View File

@@ -0,0 +1,431 @@
<?php
if(!defined('__KIMS__')) exit;
if ($d['admin']['ssl_type'] == 1)
if($_SERVER['HTTPS'] != 'on') getLink($g['ssl_root'].'/?'.$_SERVER['QUERY_STRING'],'','','');
$DB_CONNECT = isConnectedToDB($DB);
$g['mobile']= isMobileConnect($_SERVER['HTTP_USER_AGENT']);
$g['device']= $g['mobile'] && $_SESSION['pcmode'] != 'Y';
$g['broswer'] = getBrowzer($_SERVER['HTTP_USER_AGENT']);
$g['deviceType']=getDeviceKind($_SERVER['HTTP_USER_AGENT'],$g['mobile']);
$my = array();
$my['level'] = 0;
if ($_SESSION['mbr_uid'])
{
$my = array_merge(getUidData($table['s_mbrid'],$_SESSION['mbr_uid']),getDbData($table['s_mbrdata'],"memberuid='".$_SESSION['mbr_uid']."'",'*'));
if (!$my['uid'] || $my['pw'] != $_SESSION['mbr_pw']) { // 로그인 상태에서 관리자 회원삭제 된 경우
$_SESSION['mbr_uid'] = '';
$_SESSION['mbr_pw'] = '';
$_SESSION['mbr_logout'] = '1';
setAccessToken($my['uid'],'logout');
setrawcookie('site_common_result', rawurlencode('로그아웃 되었습니다.|danger'),time() + (60 * 30), '/');
getLink('reload','','','');
}
}
// 로그인 상태 유지 프로세스 추가
if($_COOKIE[$DB['head'].'_token'])
{
$memberuid=getArrayCookie($_COOKIE[$DB['head'].'_token'],'|',0);
$access_token=getArrayCookie($_COOKIE[$DB['head'].'_token'],'|',1);
$_now=time();
$t_que="memberuid='".$memberuid."' and access_token='".$access_token."' and expire > '".$_now."' ";
$is_token=getDbData($DB['head'].'_s_mbrtoken',$t_que,'*');
if($is_token['uid']){
$my = array_merge(getUidData($table['s_mbrid'],$memberuid),getDbData($table['s_mbrdata'],"memberuid='".$memberuid."'",'*'));
}
}
if ($r)
{
$_HS = getDbData($table['s_site'],"id='".$r."'",'*');
$s = $_HS['uid'];
}
if (!$s)
{
if ($g['mobile'])
{
$_HH = getDbData($table['s_mobile'],'','*');
if ($_HH['usemobile'] == 1) $_HS = getUidData($table['s_site'],$_HH['startsite']);
else if($_HH['usemobile'] == 2) if($g['url_host'] != $_HH['startdomain']) getLink($_HH['startdomain'],'','','');
}
if (!$_HS['uid'])
{
$_HD = getDbData($table['s_domain'],"name='".str_replace('www.','',$_SERVER['HTTP_HOST'])."'",'*');
if ($_HD['site']) $_HS = getUidData($table['s_site'],$_HD['site']);
else $_HS = db_fetch_array(getDbArray($table['s_site'],'','*','gid','asc',1,1));
}
$s = $_HS['uid'];
$r = $_HS['id'];
}
else $_HS = getUidData($table['s_site'],$s);
$_SEO = getDbData($table['s_seo'],'rel=0 and parent='.$_HS['uid'],'*');
include getLangFile($g['path_module'].'admin/language/',($_HS['lang']?$_HS['lang']:$d['admin']['syslang']),'/lang.function.php');
include getLangFile($g['path_module'].'admin/language/',($_HS['lang']?$_HS['lang']:$d['admin']['syslang']),'/lang.engine.php');
$_CA = array();
$date = getVDate($_HS['timecal']);
$g['s'] = str_replace('/index.php','',$_SERVER['SCRIPT_NAME']);
$g['r'] = $_HS['rewrite'] ? $g['s'].($_HS['usescode']?'/'.$r:'') : '.';
$g['img_core'] = $g['s'].'/_core/images';
$g['meta_tit'] = $_SEO['title'];
$g['meta_key'] = $_SEO['keywords'];
$g['meta_des'] = $_SEO['description'];
$g['meta_bot'] = $_SEO['classification'];
$g['meta_img'] = $_SEO['image_src']?getMetaImage($_SEO['image_src']):$g['img_core'].'/noimage_kimsq.png';
$g['sys_module'] = $d['admin']['sysmodule'];
$g['sys_action'] = $a && !$c ? true : false;
$m = $m && !strstr($m,'.') ? $m : $g['sys_module'];
$_m = $m;
$_mod = $mod;
if (!$g['sys_action'] && !$system)
{
if ($c)
{
$c=substr($c,-1)=='/'?str_replace('/','',$c):$c;
$_CA = explode('/',$c);
$_tmp['count'] = count($_CA);
$_tmp['id'] = $_CA[$_tmp['count']-1];
$_HM = getDbData($table['s_menu'],"id='".$_tmp['id']."' and site=".$s,'*');
if ($_tmp['count']>1) $_FHM = getDbData($table['s_menu'],"id='".$_CA[0]."' and site=".$s,'*');
else $_FHM = $_HM;
if ($_HM['reject']&&!$my['admin']) getLink('','',_LANG('em001','admin'),'-1');
if ($_HM['site']!=$_HS['uid']) getLink('','',_LANG('em002','admin'),'-1');
if($_HM['menutype']==1)
{
if ($_HM['redirect']) getLink($_HM['joint'],'','','');
$_tmpexp = explode('?',$_HM['joint']);
if ($_tmpexp[1])
{
$_tmparr = explode('&',$_tmpexp[1]);
foreach($_tmparr as $_tmpval)
{
if(!$_tmpval) continue;
$_tmparr = explode('=',$_tmpval);
${$_tmparr[0]} = $_tmparr[1];
}
}
}
if($_HM['menutype']==3)
{
getLink(RW('c='.$_HM['joint']),'','','');
}
}
if (!$c && $m == $g['sys_module'])
{
if (!$mod) $_HP = getUidData($table['s_page'],$g['mobile']&&$_SESSION['pcmode']!='Y'?($_HS['m_startpage']?$_HS['m_startpage']:$_HS['startpage']):$_HS['startpage']);
else $_HP = getDbData($table['s_page'],"id='".$mod."'",'*');
if($_HP['uid']) $_HM['layout'] = $_HP['layout'];
if ($_HP['pagetype']==1)
{
$_HM['layout'] = $_HP['layout'];
$_tmpexp = explode('?',$_HP['joint']);
if ($_tmpexp[1])
{
$_tmparr = explode('&',$_tmpexp[1]);
foreach($_tmparr as $_tmpval)
{
if(!$_tmpval) continue;
$_tmparr = explode('=',$_tmpval);
${$_tmparr[0]} = $_tmparr[1];
}
if ($_m == $g['sys_module']) $_mod = '';
if ($m != $g['sys_module']) $mod = $_mod;
}
}
}
if ($d['admin']['ssl_type'] == 2)
{
if ($_HP['uid'])
{
if (strpos(',,'.$d['admin']['ssl_page'].',',','.$_HP['id'].','))
{
if($_SERVER['HTTPS'] != 'on') getLink($g['ssl_root'].'/?'.$_SERVER['QUERY_STRING'],'','','');
}
else {
if($_SERVER['HTTPS'] == 'on') getLink(str_replace(':'.$d['admin']['ssl_port'],'',str_replace('https://','http://',$g['url_root'])).'/?'.$_SERVER['QUERY_STRING'],'','','');
}
}
else if ($_HM['uid'])
{
if (strpos(',,'.$d['admin']['ssl_menu'].',',','.$_HM['id'].','))
{
if($_SERVER['HTTPS'] != 'on') getLink($g['ssl_root'].'/?'.$_SERVER['QUERY_STRING'],'','','');
}
else {
if($_SERVER['HTTPS'] == 'on') getLink(str_replace(':'.$d['admin']['ssl_port'],'',str_replace('https://','http://',$g['url_root'])).'/?'.$_SERVER['QUERY_STRING'],'','','');
}
}
else {
if (strpos(',,'.$d['admin']['ssl_module'].',',','.$m.','))
{
if($_SERVER['HTTPS'] != 'on') getLink($g['ssl_root'].'/?'.$_SERVER['QUERY_STRING'],'','','');
}
else {
if($_SERVER['HTTPS'] == 'on') getLink(str_replace(':'.$d['admin']['ssl_port'],'',str_replace('https://','http://',$g['url_root'])).'/?'.$_SERVER['QUERY_STRING'],'','','');
}
}
}
}
$_HMD = getDbData($table['s_module'],"id='".$m."'",'*');
$g['switch_1'] = getSwitchInc('top');
$g['switch_2'] = getSwitchInc('head');
$g['switch_3'] = getSwitchInc('foot');
$g['switch_4'] = getSwitchInc('end');
//사이트별 회원설정 변수
$g['memberVarForSite'] = $g['path_var'].'site/'.$r.'/member.var.php'; // 사이트 회원모듈 변수파일
include_once file_exists($g['memberVarForSite']) ? $g['memberVarForSite'] : $g['path_module'].'member/var/var.php';
//사이트별 포스트설정 변수
$g['postVarForSite'] = $g['path_var'].'site/'.$r.'/post.var.php';
include_once file_exists($g['postVarForSite']) ? $g['postVarForSite'] : $g['path_module'].'post/var/var.php';
$d['post']['writeperm'] = true;
$d['post']['categoryperm'] = true;
$d['post']['goodsperm'] = true;
if (!$my['admin']) {
if ($d['post']['perm_l_write'] > $my['level'] || strpos('_'.$d['post']['perm_g_write'],'['.$my['mygroup'].']') || !$my['uid']) {
$d['post']['writeperm'] = false;
}
if ($d['post']['perm_l_category'] > $my['level'] || strpos('_'.$d['post']['perm_g_category'],'['.$my['mygroup'].']') || !$my['uid']) {
$d['post']['categoryperm'] = false;
}
if ($d['post']['perm_l_goods'] > $my['level'] || strpos('_'.$d['post']['perm_g_goods'],'['.$my['mygroup'].']') || !$my['uid']) {
$d['post']['goodsperm'] = false;
}
}
//사이트별 게시판 공통설정 변수
$g['bbsVarForSite'] = $g['path_var'].'site/'.$r.'/bbs.var.php';
include_once file_exists($g['bbsVarForSite']) ? $g['bbsVarForSite'] : $g['path_module'].'bbs/var/var.php';
//사이트별 댓글설정 변수
$g['commentVarForSite'] = $g['path_var'].'site/'.$r.'/comment.var.php';
include_once file_exists($g['commentVarForSite']) ? $g['commentVarForSite'] : $g['path_module'].'comment/var/var.php';
// 회원가입을 위한 이메일/휴대폰 본인인증 후 관련세션 존재유무
if (isset($_SESSION['JOIN']['email']) || isset($_SESSION['JOIN']['phone'])) {
$call_modal_join_site=1; // 인증후,가입 모달 호출
}
//사이트별 외부연결 설정
if (file_exists($g['path_var'].'site/'.$r.'/connect.var.php')) {
include $g['path_var'].'site/'.$r.'/connect.var.php';
}
// 푸시알림 지원여부
if ( $g['mobile']!='ipad' && $g['mobile']!='iphone') {
if ($g['broswer']!='MSIE 11' && $g['broswer']!='MSIE 10' && $g['broswer']!='MSIE 9' && $g['broswer']!='Safari') {
$g['pwa_supported']=1;
if (file_exists($g['path_var'].'fcm.info.js')) {
$g['push_active']=1;
} else {
$g['push_active']=2;
}
}
}
// 포스트 공개관련
$d['displaySet'] = "||비공개,lock||일부공개,how_to_reg||미등록,insert_link||회원공개,people_alt||전체공개,public";
$g['displaySet']['label'] = [];
$g['displaySet']['icon'] = [];
$displaySet=explode('||',$d['displaySet']);
foreach ($displaySet as $displayLine) {
$dis=explode(',',$displayLine);
array_push($g['displaySet']['label'], $dis[0]);
array_push($g['displaySet']['icon'], $dis[1]);
}
//소셜로그인 세션 존재유무
if(isset($_SESSION['SL']['naver'])||isset($_SESSION['SL']['kakao'])||isset($_SESSION['SL']['facebook'])||isset($_SESSION['SL']['google'])||isset($_SESSION['SL']['instagram'])||isset($_SESSION['SL']['twitter'])){
if (is_array($_SESSION['SL']['naver']) || is_array($_SESSION['SL']['kakao']) || is_array($_SESSION['SL']['facebook']) || is_array($_SESSION['SL']['google']) || is_array($_SESSION['SL']['instagram']) || is_array($_SESSION['SL']['twitter'])){
$is_socialUserinfoSession = 1;
}
}
//소셜로그인을 사용할때
if ($d['member']['login_social'] || $d['member']['join_bySocial']) {
if ($is_socialUserinfoSession) {
if (isset($_SESSION['SL']['naver'])) {
$sns_code = 'n';
$sns_name = 'naver';
$sns_name_ko = '네이버';
$sns_access_token = $_SESSION['SL']['naver']['userinfo']['access_token']; //소셜미디어 접근토큰
$sns_refresh_token = $_SESSION['SL']['naver']['userinfo']['refresh_token']; //소셜미디어 갱신토큰
$sns_expires_in = $_SESSION['SL']['naver']['userinfo']['expires_in']; //소셜미디어 접근 토큰 유효기간(초)
$snsuid = $_SESSION['SL']['naver']['userinfo']['uid']; //소셜미디어 고유번호
$name = $_SESSION['SL']['naver']['userinfo']['name'];
$email = $_SESSION['SL']['naver']['userinfo']['email'];
$_photo = $_SESSION['SL']['naver']['userinfo']['photo'];
}
if (isset($_SESSION['SL']['kakao'])) {
$sns_code = 'k';
$sns_name = 'kakao';
$sns_name_ko = '카카오';
$sns_access_token = $_SESSION['SL']['kakao']['userinfo']['access_token']; //소셜미디어 접근토큰
$sns_refresh_token = $_SESSION['SL']['kakao']['userinfo']['refresh_token']; //소셜미디어 갱신토큰
$sns_expires_in = $_SESSION['SL']['kakao']['userinfo']['expires_in']; //소셜미디어 접근 토큰 유효기간(초)
$snsuid = $_SESSION['SL']['kakao']['userinfo']['uid']; //소셜미디어 고유번호
$name = $_SESSION['SL']['kakao']['userinfo']['name'];
$email = $_SESSION['SL']['kakao']['userinfo']['email'];
$_photo = $_SESSION['SL']['kakao']['userinfo']['photo'];
}
if (isset($_SESSION['SL']['facebook'])) {
$sns_code = 'f';
$sns_name = 'facebook';
$sns_name_ko = '페이스북';
$sns_access_token = $_SESSION['SL']['facebook']['userinfo']['access_token']; //소셜미디어 접근토큰
$sns_refresh_token = $_SESSION['SL']['facebook']['userinfo']['refresh_token']; //소셜미디어 갱신토큰
$sns_expires_in = $_SESSION['SL']['facebook']['userinfo']['expires_in']; //소셜미디어 접근 토큰 유효기간(초)
$snsuid = $_SESSION['SL']['facebook']['userinfo']['uid']; //소셜미디어 고유번호
$name = $_SESSION['SL']['facebook']['userinfo']['name'];
$email = $_SESSION['SL']['facebook']['userinfo']['email'];
$_photo = $_SESSION['SL']['facebook']['userinfo']['photo'];
}
if (isset($_SESSION['SL']['google'])) {
$sns_code = 'g';
$sns_name = 'google';
$sns_name_ko = '구글';
$sns_access_token = $_SESSION['SL']['google']['userinfo']['access_token']; //소셜미디어 접근토큰
$sns_refresh_token = $_SESSION['SL']['google']['userinfo']['refresh_token']; //소셜미디어 갱신토큰
$sns_expires_in = $_SESSION['SL']['google']['userinfo']['expires_in']; //소셜미디어 접근 토큰 유효기간(초)
$snsuid = $_SESSION['SL']['google']['userinfo']['uid']; //소셜미디어 고유번호
$name = $_SESSION['SL']['google']['userinfo']['name'];
$email = $_SESSION['SL']['google']['userinfo']['email'];
$_photo = $_SESSION['SL']['google']['userinfo']['photo'];
}
if (isset($_SESSION['SL']['instagram'])) {
$sns_code = 'i';
$sns_name = 'instagram';
$sns_name_ko = '인스타그램';
$sns_access_token = $_SESSION['SL']['instagram']['userinfo']['access_token']; //소셜미디어 접근토큰
$snsuid = $_SESSION['SL']['instagram']['userinfo']['uid']; //소셜미디어 고유번호
$name = $_SESSION['SL']['instagram']['userinfo']['name'];
$_photo = $_SESSION['SL']['instagram']['userinfo']['photo'];
}
$mbr_sns = getDbData($table['s_mbrsns'],'id='.$snsuid.' and sns="'.$sns_name.'"','mbruid');
$mbr_email = getDbData($table['s_mbremail'],"email='".$email."'",'*');
$d_regis = $date['totime'];
if ($my['uid']) {
// 개인정보관리 > 연결계정 > 추가 연결
if ($mbr_sns['mbruid'] && ($mbr_sns['mbruid'] != $my['uid'])) {
setrawcookie('site_common_result', rawurlencode($sns_name_ko.' 계정이 이미 다른계정에 연결되어 있습니다.|danger'),time() + (60 * 30), '/');
$_SESSION['SL'] = ''; // 세션비우기
getLink('reload','','','');
}
if ($mbr_sns['mbruid']) {
$msg = ' 계정이 재인증 되었습니다.'; //개인정보관리 > 개인정보잠금 > 재인증
} else { //신규연결
$msg = ' 계정이 연결 되었습니다.'; // 개인정보관리 > 연결계정 > 추가 연결
getDbInsert($table['s_mbrsns'],'mbruid,sns,id,access_token,refresh_token,expires_in,d_regis',"'".$my['uid']."','".$sns_name."','$snsuid','$sns_access_token','$sns_refresh_token','$sns_expires_in','$d_regis'");
}
getDbUpdate($table['s_mbrdata'],"last_log='".$date['totime']."'",'memberuid='.$my['uid']);
setrawcookie('site_common_result', rawurlencode($sns_name_ko.$msg.'|default'),time() + (60 * 30), '/'); // 알림레이어 출력를 위한 로그인 상태 cookie 저장
$_SESSION['SL'] = ''; // 세션비우기
getLink('reload','','','');
} else { // 비로그인 상태
//결과값 못 받은 경우
if (!$name) {
$_SESSION['SL'] = '';
setrawcookie('site_common_result',rawurlencode($sns_name_ko.' 에서 정보를 수신하지 못했습니다.|danger'),time() + (60 * 30), '/');
getLink('reload','','','');
}
// 정상 소셜로그인 (이미 연결된 소셜미디어 고유번호가 있을 경우, 해당회원 로그인 처리)
if ($mbr_sns['mbruid']) {
$M = getUidData($table['s_mbrid'],$mbr_sns['mbruid']);
getDbUpdate($table['s_mbrdata'],"tmpcode='',now_log=1,last_log='".$date['totime']."',sns='".$sns_name."'",'memberuid='.$M['uid']);
$_SESSION['mbr_uid'] = $M['uid'];
$_SESSION['mbr_pw'] = $M['pw'];
setAccessToken($mbr_sns['mbruid'],'login'); //로그인 유지 기본적용
setrawcookie('site_common_result',rawurlencode($sns_name_ko.' 계정으로 로그인 되었습니다.|default'),time() + (60 * 30), '/'); // 알림레이어 출력를 위한 로그인 상태 cookie 저장
$_SESSION['SL'] = ''; //세션 비우기
getLink('reload','','','');
}
// 소셜미디어에서 획득한 이메일이 기존 회원의 동일한 이메일에 있을 경우,
if ($mbr_email['mbruid']) {
if ($mbr_email['d_verified']) {
// 본인 인증된 메일일 경우, 자동 로그인 및 연결처리 (동일인 중복가입을 막기위해)
$M = getUidData($table['s_mbrid'],$mbr_email['mbruid']);
$d_regis = $date['totime'];
getDbUpdate($table['s_mbrdata'],"tmpcode='',now_log=1,last_log='".$date['totime']."',sns='".$sns_name."'",'memberuid='.$M['uid']);
getDbInsert($table['s_mbrsns'],'mbruid,sns,id,access_token,refresh_token,expires_in,d_regis',"'".$M['uid']."','".$sns_name."','$snsuid','$sns_access_token','$sns_refresh_token','$sns_expires_in','$d_regis'");
$_SESSION['mbr_uid'] = $M['uid'];
$_SESSION['mbr_pw'] = $M['pw'];
setrawcookie('site_common_result', rawurlencode($sns_name_ko.' 계정으로 로그인 되었습니다.|default'),time() + (60 * 30), '/'); // 알림레이어 출력를 위한 로그인 상태 cookie 저장
$_SESSION['SL'] = ''; //세션 비우기
getLink('reload','','','');
} else {
// 계정연결 모달 호출
$is_sns = getDbData($table['s_mbrsns'],'mbruid="'.$mbr_email['mbruid'].'"','sns');
$has_sns = $is_sns['sns'];
if ($is_sns['sns']=='naver') $has_sns_ko = '네이버';
if ($is_sns['sns']=='kakao') $has_sns_ko = '카카오';
if ($is_sns['sns']=='google') $has_sns_ko = '구글';
if ($is_sns['sns']=='facebook') $has_sns_ko = '페이스북';
if ($is_sns['sns']=='instagram') $has_sns_ko = '인스타그램';
setrawcookie('site_common_result', rawurlencode($sns_name_ko.' 사용자 인증 되었습니다. 계정을 연결해 주세요.|default'),time() + (60 * 30), '/'); // 알림레이어 출력를 위한 로그인 상태 cookie 저장
if ($m!='member' || $front!="login") {
$call_modal_combine=1; // 계정통합 모달 호출
}
}
} else {
if ($d['member']['join_enable']) { // 회원가입 작동 중지
setrawcookie('site_common_result', rawurlencode($sns_name_ko.' 사용자 인증 되었습니다.|default'),time() + (60 * 30), '/'); // 알림레이어 출력를 위한 로그인 상태 cookie 저장
if ($m!='member' || $front!="join") {
$call_modal_join_social=1; // 소셜로그인 인증후,가입 모달 호출
}
} else {
$call_modal_join_social=0;
$_SESSION['SL'] = ''; //세션 비우기
setrawcookie('site_common_result', rawurlencode(' 죄송합니다. 지금은 회원가입을 하실 수 없습니다.|danger'),time() + (60 * 30), '/'); // 알림레이어 출력를 위한 로그인 상태 cookie 저장
}
}
}
} //소셜미디어에서 확득한 사용자 정보배열 세션이 있을때 끝
// 연결계정 정보
$my_naver = getDbData($table['s_mbrsns'],"mbruid='".$my['uid']."' and sns='naver'",'*');
$my_kakao = getDbData($table['s_mbrsns'],"mbruid='".$my['uid']."' and sns='kakao'",'*');
$my_google = getDbData($table['s_mbrsns'],"mbruid='".$my['uid']."' and sns='google'",'*');
$my_facebook = getDbData($table['s_mbrsns'],"mbruid='".$my['uid']."' and sns='facebook'",'*');
$my_instagram = getDbData($table['s_mbrsns'],"mbruid='".$my['uid']."' and sns='instagram'",'*');
}
?>

View File

@@ -0,0 +1,58 @@
<?php
if(!defined('__KIMS__')) exit;
$g['notiVarForSite'] = $g['path_var'].'site/'.$r.'/notification.var.php';
include_once file_exists($g['notiVarForSite']) ? $g['notiVarForSite'] : $g['path_module'].'notification/var/var.php';
$NT_DATA = explode('|',$my['noticeconf']);
?>
<script>
$('.rb-notifications-toggle').on('click', function () {
if(getId('rb-notifications-layer'))
{
getId('rb-notifications-layer').innerHTML = getAjaxData('<?php echo $g['s']?>/?r=<?php echo $r?>&m=notification&a=notice_check&noticedata=Y');
setTimeout("loadNotification();",1000);
}
});
$('.rb-notifications-modal').on('click',function() {
modalSetting('modal_window','<?php echo getModalLink('&amp;system=popup.notification')?>');
});
$('.rb-notifications-modal-view').on('click',function() {
modalSetting('modal_window','<?php echo getModalLink('&amp;system=popup.notification&amp;callMod=view')?>');
});
$('.rb-notifications-modal-config').on('click',function() {
modalSetting('modal_window','<?php echo getModalLink('&amp;system=popup.notification&amp;callMod=config')?>');
});
function pushNotification(num)
{
var _num = (num >= <?php echo $d['ntfc']['num']?> ? '+<?php echo $d['ntfc']['num']?>' : num);
if (parent.getId('rb-notification-name'))
{
parent.getId('rb-notification-name').innerHTML = _num;
parent.getId('rb-notification-name').className = 'badge rb-notification-layer rb-notification-active' + (num == 0 ? ' hidden':'');
parent.getId('rb-notification-badge').innerHTML = num;
}
if (getId('rb-notification-badge'))
{
getId('rb-notification-badge').innerHTML = _num;
getId('rb-notification-badge').className = getId('rb-notification-badge').className.replace(' rb-notification-active','') + (num == 0 ? '':' rb-notification-active');
}
if (getId('rb-notification-badge-other'))
{
getId('rb-notification-badge-other').innerHTML = _num;
getId('rb-notification-badge-other').className = getId('rb-notification-badge').className.replace(' rb-notification-active','') + (num == 0 ? '':' rb-notification-active');
}
<?php if($NT_DATA[1] && !$_SESSION['sh_notify_popup']):?>
<?php endif?>
}
function loadNotification()
{
frames._action_frame_<?php echo $m?>.location.href = '<?php echo $g['s']?>/?r=<?php echo $r?>&m=notification&a=notice_check';
}
setTimeout("loadNotification();",<?php echo $d['ntfc']['sec']?>000);
pushNotification(<?php echo $my['num_notice']?>);
</script>

View File

@@ -0,0 +1,30 @@
<?php
if(!defined('__KIMS__')) exit;
$g['notiVarForSite'] = $g['path_var'].'site/'.$r.'/notification.var.php';
include_once file_exists($g['notiVarForSite']) ? $g['notiVarForSite'] : $g['path_module'].'notification/var/var.php';
$N = explode('|',$my['noticeconf']);
$send_email = $N[1]?1:0;
$send_push = $N[2]?1:0;
?>
<?php if ($my['uid'] && $g['push_active']==1): ?>
<!-- FCM -->
<script src="<?php echo $g['s']?>/_var/fcm.info.js"></script>
<script src="https://www.gstatic.com/firebasejs/5.2.0/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/5.2.0/firebase-messaging.js"></script>
<script src="<?php echo $g['url_layout']?>/_js/noti.js"></script>
<div class="token" hidden></div>
<?php if (!$send_push): ?>
<script>
console.log('푸시알림이 비활성화 되어 <?php echo $d['ntfc']['sec']?>초 마다 알림사항을 체크합니다.')
setTimeout(function(){
var src = '<?php echo $g['s']?>/?r=<?php echo $r?>&m=notification&a=get_notiNum&browtitle=<?php echo $g['browtitle']?>'
$("iframe[name=pushframe]").attr('src',src)
}, <?php echo $d['ntfc']['sec']?>000);
</script>
<?php endif; ?>
<?php endif; ?>

View File

@@ -0,0 +1,7 @@
<?php
if(!defined('__KIMS__')) exit;
if ($m != 'admin' && (($_HS['open']==2&&!$my['admin'])||$_HS['open']==3)) $iframe = 'Y';
if ($_HS['open'] == 2) if (!$my['admin'] && $m != 'admin' && $system != 'guide.stopsite') getLink($g['s'].'/?r='.$r.'&system=guide.stopsite','','','');
if ($_HS['open'] == 3) if ($m != 'admin' && $system != 'guide.stopsite') getLink($g['s'].'/?r='.$r.'&system=guide.stopsite','','','');
?>

View File

View File

View File

@@ -0,0 +1,104 @@
<?php
function isConnectedToDB($db)
{
return mysqli_connect($db['host'],$db['user'],$db['pass'],$db['name']);
}
function db_query($sql,$con)
{
mysqli_query($con,'set names utf8mb4');
mysqli_query($con,'set sql_mode=\'\'');
return mysqli_query($con,$sql);
}
function db_fetch_array($que)
{
return @mysqli_fetch_array($que);
}
function db_fetch_assoc($que)
{
return mysqli_fetch_assoc($que);
}
function db_num_rows($que)
{
return mysqli_num_rows($que);
}
function db_info()
{
global $DB_CONNECT;
return mysqli_get_server_info($DB_CONNECT);
}
function db_error()
{
return mysqli_error();
}
function db_close($conn)
{
return mysqli_close($conn);
}
function db_insert_id($conn)
{
return mysqli_insert_id($conn);
}
//DB-UID데이터
function getUidData($table,$uid)
{
return getDbData($table,'uid='.(int)$uid,'*');
}
//DB데이터 1ROW
function getDbData($table,$where,$data)
{
$row = db_fetch_array(getDbSelect($table,getSqlFilter($where),$data));
return $row;
}
//DB데이터 ARRAY
function getDbArray($table,$where,$data,$sort,$orderby,$recnum,$p)
{
global $DB_CONNECT;
$rcd = db_query('select '.$data.' from '.$table.($where?' where '.getSqlFilter($where):'').' order by '.$sort.' '.$orderby.($recnum?' limit '.(($p-1)*$recnum).', '.$recnum:''),$DB_CONNECT);
return $rcd;
}
//DB데이터 NUM
function getDbRows($table,$where)
{
global $DB_CONNECT;
$rows = db_fetch_array(db_query('select count(*) from '.$table.($where?' where '.getSqlFilter($where):''),$DB_CONNECT));
return $rows[0] ? $rows[0] : 0;
}
//DB데이터 MAX
function getDbCnt($table,$type,$where)
{
global $DB_CONNECT;
$cnts = db_fetch_array(db_query('select '.$type.' from '.$table.($where?' where '.getSqlFilter($where):''),$DB_CONNECT));
return $cnts[0] ? $cnts[0] : 0;
}
//DB셀렉트
function getDbSelect($table,$where,$data)
{
global $DB_CONNECT;
$r = db_query('select '.$data.' from '.$table.($where?' where '.getSqlFilter($where):''),$DB_CONNECT);
return $r;
}
//DB삽입
function getDbInsert($table,$key,$val)
{
global $DB_CONNECT;
db_query("insert into ".$table." (".$key.")values(".$val.")",$DB_CONNECT);
}
//DB업데이트
function getDbUpdate($table,$set,$where)
{
global $DB_CONNECT;
db_query("update ".$table." set ".$set.($where?' where '.getSqlFilter($where):''),$DB_CONNECT);
}
//DB삭제
function getDbDelete($table,$where)
{
global $DB_CONNECT;
db_query("delete from ".$table.($where?' where '.getSqlFilter($where):''),$DB_CONNECT);
}
//SQL필터링
function getSqlFilter($sql)
{
return preg_replace("( union| update| insert| delete| drop|\/\*|\*\/|\\\|\;)",'',$sql);
}
?>

114
_core/function/dir.func.php Normal file
View File

@@ -0,0 +1,114 @@
<?php
//디렉토리복사
function DirCopy($dir1 , $dir2)
{
$dirh = opendir($dir1);
while(false !== ($filename = readdir($dirh)))
{
if($filename != '.' && $filename != '..')
{
if(!is_file($dir1.'/'.$filename))
{
@mkdir($dir2.'/'.$filename , 0707);
@chmod($dir2.'/'.$filename , 0707);
DirCopy($dir1.'/'.$filename , $dir2.'/'.$filename);
}
else
{
@copy($dir1.'/'.$filename , $dir2.'/'.$filename);
@chmod($dir2.'/'.$filename , 0707);
}
}
}
closedir($dirh);
}
//디렉토리삭제
function DirDelete($t_dir)
{
$dirh = opendir($t_dir);
while(false !== ($filename = readdir($dirh)))
{
if($filename != '.' && $filename != '..')
{
if(!is_file($t_dir.'/'.$filename))
{
DirDelete($t_dir.'/'.$filename);
}
else {
@unlink($t_dir.'/'.$filename);
}
}
}
closedir($dirh);
@rmdir($t_dir);
}
//디렉토리사이즈/파일갯수
function DirSizeNum($t_dir)
{
$dirh = opendir($t_dir);
while(false !== ($filename = readdir($dirh)))
{
if($filename != '.' && $filename != '..')
{
if(!is_file($t_dir.'/'.$filename)) {
$s = DirSizeNum($t_dir.'/'.$filename);
$d['size'] += $s['size'];
$d['num'] += $s['num'];
}
else {
$d['size'] += filesize($t_dir.'/'.$filename);
$d['num']++;
}
}
}
closedir($dirh);
return $d;
}
//퍼미션변경
function DirChmod($t_dir,$mode)
{
$dirh = opendir($t_dir);
while(false !== ($filename = readdir($dirh)))
{
if($filename != '.' && $filename != '..')
{
if(!is_file($t_dir.'/'.$filename))
{
@chmod($t_dir.'/'.$filename,$mode);
DirChmod($t_dir.'/'.$filename,$mode);
}
else {
@chmod($t_dir.'/'.$filename,$mode);
}
}
}
closedir($dirh);
@chmod($t_dir,$mode);
}
//압축
function DirZip($t_dir,$n_dir,$zipfile)
{
$dirh = opendir($t_dir);
while(false !== ($filename = readdir($dirh)))
{
if($filename != '.' && $filename != '..')
{
if(!is_file($t_dir.'/'.$filename))
{
$zipfile -> add_file('',$n_dir.'/'.$filename.'/');
DirZip($t_dir.'/'.$filename,$n_dir.'/'.$filename,$zipfile);
}
else {
$zipfile -> add_file($t_dir.'/'.$filename,$n_dir.'/'.$filename);
}
}
}
closedir($dirh);
}
//디렉토리생성
function DirMake($dir)
{
@mkdir($dir,0707);
@chmod($dir,0707);
}
?>

View File

@@ -0,0 +1,68 @@
<?php
//이메일전송
include_once $g['path_core'].'opensrc/aws-sdk-php/v3/aws-autoloader.php';
use Aws\Ses\SesClient;
use Aws\Exception\AwsException;
function getSendMail($to,$from,$subject,$content,$html) {
global $g,$d;
if ($html == 'TEXT') $content = nl2br(htmlspecialchars($content));
$to_exp = explode('|', $to);
$from_exp = explode('|', $from);
if ($d['admin']['mailer']=='ses') {
define('SES_KEY', $d['admin']['ses_key']); //발급받은 키.
define('SES_SEC', $d['admin']['ses_sec']); //발급받은 비밀번호.
define('SES_REGION', $d['admin']['ses_region']); //SES 버킷의 리전.
$SesClient = new SesClient([
'credentials' => [
'key' => SES_KEY,
'secret' => SES_SEC,
],
'region' => SES_REGION,
'version' => 'latest'
]);
$To = $to_exp[1] ? "\"".utf8_encode($to_exp[1])."\" <$to_exp[0]>" : $to_exp[0];
$Frm = $from_exp[1] ? "\"".utf8_encode($from_exp[1])."\" <$from_exp[0]>" : $from_exp[0];
$char_set = 'UTF-8';
try {
$result = $SesClient->sendEmail([
'Destination' => [
'ToAddresses' => [$To],
],
'ReplyToAddresses' => [$Frm],
'Source' => $Frm,
'Message' => [
'Body' => [
'Html' => [
'Charset' => $char_set,
'Data' => $content,
],
],
'Subject' => [
'Charset' => $char_set,
'Data' => $subject,
],
],
]);
return true;
} catch (AwsException $e) {
return false;
}
}
else {
$To = $to_exp[1] ? "\"".getUTFtoKR($to_exp[1])."\" <$to_exp[0]>" : $to_exp[0];
$Frm = $from_exp[1] ? "\"".getUTFtoKR($from_exp[1])."\" <$from_exp[0]>" : $from_exp[0];
$Header = "From:$Frm\nReply-To:$frm\nX-Mailer:PHP/".phpversion();
$Header.= "\nContent-Type:text/html;charset=EUC-KR\r\n";
return @mail($To,getUTFtoKR($subject),getUTFtoKR($content),$Header);
}
}
?>

View File

@@ -0,0 +1,53 @@
<?php
// FCM 알림전송
function getSendFCM($token,$title,$message,$avatar,$referer,$tag) {
global $g,$d,$r;
$url = 'https://fcm.googleapis.com/fcm/send';
$g['notiIconForSite'] = $g['path_var'].'site/'.$r.'/homescreen.png';
$g['url_notiIcon'] = $g['s'].'/_var/site/'.$r.'/homescreen-192x192.png';
$site_icon = file_exists($g['notiIconForSite']) ? $g['url_notiIcon'] : $g['img_core'].'/touch/homescreen-192x192.png';
$icon = $avatar?$avatar:$site_icon;
$headers = array(
'Authorization:key ='.$d['admin']['fcm_key'],
'Content-Type: application/json'
);
$fields = array (
'data' => array ("title" => $title),
'notification' => array (
"title" => $title,
"body" => $message,
"icon" => $icon,
"click_action" => $referer,
"tag" => $tag
)
);
if(is_array($token)) {
$fields['registration_ids'] = $token;
} else {
$fields['to'] = $token;
}
$fields['priority'] = "high";
$fields = json_encode ($fields);
$ch = curl_init ();
curl_setopt ($ch, CURLOPT_URL, $url );
curl_setopt ($ch, CURLOPT_POST, true );
curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers );
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt ($ch, CURLOPT_POSTFIELDS, $fields );
$result = curl_exec ($ch);
if ($result === FALSE) {
die('FCM Send Error: ' . curl_error($ch));
}
curl_close ($ch);
return $result;
}
?>

View File

@@ -0,0 +1,106 @@
<?php
// php-htmlpurfier-html5 : https://github.com/kennberg/php-htmlpurfier-html5
function load_htmlpurifier($allowed) {
global $g;
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.Doctype', 'HTML 4.01 Transitional');
$config->set('CSS.AllowTricky', true);
$config->set('Cache.SerializerPath', $g['path_tmp'].'cache/HTMLPurifier');
// Allow iframes from:
// o YouTube.com
// o Vimeo.com
$config->set('HTML.SafeIframe', true);
$config->set('URI.SafeIframeRegexp', '%^(http:|https:)?//(www.youtube(?:-nocookie)?.com/embed/|player.vimeo.com/video/)%');
$config->set('HTML.Allowed', implode(',', $allowed));
// Set some HTML5 properties
$config->set('HTML.DefinitionID', 'html5-definitions'); // unqiue id
$config->set('HTML.DefinitionRev', 1);
if ($def = $config->maybeGetRawHTMLDefinition()) {
// http://developers.whatwg.org/sections.html
$def->addElement('section', 'Block', 'Flow', 'Common');
$def->addElement('nav', 'Block', 'Flow', 'Common');
$def->addElement('article', 'Block', 'Flow', 'Common');
$def->addElement('aside', 'Block', 'Flow', 'Common');
$def->addElement('header', 'Block', 'Flow', 'Common');
$def->addElement('footer', 'Block', 'Flow', 'Common');
$def->addElement('blockquote', 'Block', 'Flow', 'Common');
// Content model actually excludes several tags, not modelled here
$def->addElement('address', 'Block', 'Flow', 'Common');
$def->addElement('hgroup', 'Block', 'Required: h1 | h2 | h3 | h4 | h5 | h6', 'Common');
// http://developers.whatwg.org/grouping-content.html
$def->addElement('figure', 'Block', 'Optional: (figcaption, Flow) | (Flow, figcaption) | Flow', 'Common');
$def->addElement('figcaption', 'Inline', 'Flow', 'Common');
// http://developers.whatwg.org/the-video-element.html#the-video-element
$def->addElement('video', 'Block', 'Optional: (source, Flow) | (Flow, source) | Flow', 'Common', array(
'src' => 'URI',
'type' => 'Text',
'width' => 'Length',
'height' => 'Length',
'poster' => 'URI',
'preload' => 'Enum#auto,metadata,none',
'controls' => 'Bool',
));
$def->addElement('oembed', 'Block', 'Flow', 'Common', array(
'url' => 'URI'
));
$def->addElement('source', 'Block', 'Flow', 'Common', array(
'src' => 'URI',
'type' => 'Text',
));
// http://developers.whatwg.org/text-level-semantics.html
$def->addElement('s', 'Inline', 'Inline', 'Common');
$def->addElement('var', 'Inline', 'Inline', 'Common');
$def->addElement('sub', 'Inline', 'Inline', 'Common');
$def->addElement('sup', 'Inline', 'Inline', 'Common');
$def->addElement('mark', 'Inline', 'Inline', 'Common');
$def->addElement('wbr', 'Inline', 'Empty', 'Core');
// http://developers.whatwg.org/edits.html
$def->addElement('ins', 'Block', 'Flow', 'Common', array('cite' => 'URI', 'datetime' => 'CDATA'));
$def->addElement('del', 'Block', 'Flow', 'Common', array('cite' => 'URI', 'datetime' => 'CDATA'));
// TinyMCE
$def->addAttribute('img', 'data-mce-src', 'Text');
$def->addAttribute('img', 'data-mce-json', 'Text');
// Others
$def->addAttribute('iframe', 'allowfullscreen', 'Bool');
$def->addAttribute('table', 'height', 'Text');
$def->addAttribute('td', 'border', 'Text');
$def->addAttribute('th', 'border', 'Text');
$def->addAttribute('tr', 'width', 'Text');
$def->addAttribute('tr', 'height', 'Text');
$def->addAttribute('tr', 'border', 'Text');
}
return new HTMLPurifier($config);
}
function LIB_getContents($str,$html) {
global $d,$g;
if ($html == 'HTML') {
$_atkParam = $pattern = explode(',',$d['admin']['secu_param']);
foreach($_atkParam as $_prm) $str = str_replace($_prm,'',$str);
// HTMLPurifier
require_once $g['path_core'].'opensrc/HTMLPurifier/4.10.0/HTMLPurifier.safe-includes.php';
$allowed = explode(',',$d['admin']['secu_tags']);
$purifier = load_htmlpurifier($allowed);
$str = $purifier->purify($str);
}
else {
$str = str_replace('<','&lt;',$str);
$str = str_replace('>','&gt;',$str);
$str = str_replace('&nbsp;','&amp;nbsp;',$str);
$str = str_replace("\t",'&nbsp;&nbsp;&nbsp;&nbsp;',$str);
$str = nl2br($str);
}
return $str;
}
function getIframes($str) {
preg_match_all("/<iframe[^>]*?>/si", $str, $mat);
return $mat[0];
}
?>

View File

@@ -0,0 +1,51 @@
<!DOCTYPE html>
<html lang="<?php echo $GLOBALS['lang']['admin']['flag']?>">
<head>
<meta charset="utf-8">
<meta name="robots" content="noindex,nofollow">
<title></title>
<script>
var cHref = <?php if($target) echo $target?>location.href.split('#');
<?php $url = str_replace('&amp;','&',$url)?>
<?php if($alert):?>alert('<?php echo $alert?>');<?php endif?>
<?php if(!strpos($url,'__target')):?>
<?php if($url=='reload'):?>
<?php if($_POST):?>
<?php if($target) echo $target?>location.replace(cHref[0]);
<?php else:?>
<?php if($target) echo $target?>location.reload();
<?php endif?>
<?php endif?>
<?php if($url&&$url!='reload'):?><?php if($target) echo $target?>location.href="<?php echo $url?>";<?php endif?>
<?php endif?>
<?php if($history=='close'):?>window.top.close();<?php endif?>
<?php if($history<0):?>history.go(<?php echo $history?>);<?php endif?>
</script>
</head>
<body>
<?php
if (strpos($url,'__target')) :
$url_exp = explode('?',$url);
$par_exp = explode('&',$url_exp[1]);
?>
<form name="backForm" action="<?php echo $g['s']?>" method="get" target="">
<?php foreach($par_exp as $val):if(trim($val)=='')continue?>
<?php $_prm = explode('=',$val)?>
<?php if($_prm[0]=='__target'){$__target=$_prm[1];continue;}?>
<input type="hidden" name="<?php echo $_prm[0]?>" value="<?php echo $_prm[1]?>" />
<?php endforeach?>
</form>
<script type="text/javascript">
//<![CDATA[
document.backForm.target = '<?php echo $__target?>';
document.backForm.submit();
//]]>
</script>
<?php endif?>
<h1><a href="http://<?php echo $_SERVER['HTTP_HOST'] ?>/"><?php echo $_HS['title'] ?></a></h1>
</body>
</html>
<?php exit?>

View File

@@ -0,0 +1,27 @@
<?php
function LIB_getUploadImage($upfiles,$d,$content,$ext)
{
$imgs = getImgs($content,$ext);
if ($imgs[0])
{
if (!$upfiles) return $imgs[0];
$basename = basename($imgs[0]);
$encname = md5($basename);
$folder = substr($d,0,4).'/'.substr($d,4,2).'/'.substr($d,6,2);
if (is_file($GLOBALS['g']['path_file'].$folder.'/'.$encname)) return str_replace($basename,'',$imgs[0]).$encname;
}
if ($upfiles)
{
$upArray = getArrayString($upfiles);
foreach($upArray['data'] as $_val)
{
$U = getUidData($GLOBALS['table']['s_upload'],$_val);
if (!$U['uid']) continue;
if (strpos('_jpg,gif,png',$U['ext']))
{
return $U['url'].$U['folder'].'/'.$U['thumbname'];
}
}
}
}
?>

View File

@@ -0,0 +1,22 @@
<!DOCTYPE html>
<html lang="<?php echo $GLOBALS['lang']['admin']['flag']?>">
<head>
<meta charset="utf-8">
<meta name="robots" content="noindex,nofollow">
<title></title>
<script>
<?php $url = str_replace('&amp;','&',$url)?>
<?php if($alert):?>alert('<?php echo $alert?>');<?php endif?>
<?php if($url):?>window.open('<?php echo $url?>','','<?php echo $option?>');<?php endif?>
<?php if($backurl=='reload'):?>
<?php if($_POST):?>
<?php if($target) echo $target?>location.replace(<?php if($target) echo $target?>location.href);
<?php else:?>
<?php if($target) echo $target?>location.reload();
<?php endif?>
<?php endif?>
<?php if($backurl&&$backurl!='reload'):?><?php if($target) echo $target?>location.href="<?php echo $backurl?>";<?php endif?>
</script>
</head>
<body></body>
</html>

View File

@@ -0,0 +1,18 @@
<?php
function LIB_getPageLink($lnum,$p,$tpage,$_N)
{
if (!$_N) $_N = $GLOBALS['g']['pagelink'].'&amp;';
$g_q = $p > 1 ? '<li class="page-item"><a class="page-link" href="'.$_N.'p=1" data-toggle="tooltip" title="첫 페이지"><i class="fa fa-angle-double-left"></i></a></li>' : '<li class="page-item disabled"><a class="page-link" href="#." data-toggle="tooltip" title="First page"><i class="fa fa-angle-double-left"></i></a></li>';
if($p < $lnum+1) { $g_q .= '<li class="page-item disabled"><a class="page-link" href="#." data-toggle="tooltip" title="이전 페이지"><i class="fa fa-angle-left"></i></a></li>'; }
else{ $pp = (int)(($p-1)/$lnum)*$lnum; $g_q .= '<li class="page-item"><a class="page-link" href="'.$_N.'page='.$pp.'" data-toggle="tooltip" title="Previous page"><i class="fa fa-angle-left"></i></a></li>';}
$st1 = (int)(($p-1)/$lnum)*$lnum + 1;
$st2 = $st1 + $lnum;
for($jn = $st1; $jn < $st2; $jn++)
if ( $jn <= $tpage)
($jn == $p)? $g_q .= '<li class="page-item active"><span class="page-link">'.$jn.'</span></li>' : $g_q .= '<li class="page-item"><a class="page-link" href="'.$_N.'p='.$jn.'">'.$jn.'</a></li>';
if($tpage < $lnum || $tpage < $jn) { $g_q .= '<li class="page-item disabled"><a class="page-link" href="#." data-toggle="tooltip" title="Next page"><i class="fa fa-angle-right"></i></a></li>'; }
else{$np = $jn; $g_q .= '<li class="page-item"><a class="page-link" href="'.$_N.'p='.$np.'" data-toggle="tooltip" title="다음 페이지"><i class="fa fa-angle-right"></i></a></li>'; }
$g_q .= $tpage > $p ? '<li class="page-item"><a class="page-link" href="'.$_N.'p='.$tpage.'" data-toggle="tooltip" title="마지막 페이지('.$tpage.')"><i class="fa fa-angle-double-right"></i></a></li>' : '<li class="page-item disabled"><a class="page-link" href="#." data-toggle="tooltip" title="Last page('.$tpage.')"><i class="fa fa-angle-double-right"></i></a></li>';
return $g_q;
}
?>

View File

@@ -0,0 +1,55 @@
<?php
//검색sql
function LIB_getSearchSql($w,$k,$ik,$h)
{
if($k==',' || (!$k&&$h=='not')) return '';
$k = $k ? urldecode($k) : '';
$ik= $ik? urldecode($ik) : '';
$h = $h ? $h : 'or';
$k = str_replace(' ', ',',$k);
$karr = explode(',' , $k);
$knm = count($karr);
$result = ' and (';
if ($h == 'not')
{
$h = 'and';
if (strstr($w,'|'))
{
$warr = explode('|' , $w);
$wnm = count($warr);
for ($j = 0; $j < $knm; $j++)
{
if (!$karr[$j]) continue;
for ($i = 0; $i < $wnm; $i++) if (strlen($karr[$j])>2) $result .= $warr[$i]."<>'".$karr[$j]."' ".$h.' ';
}
}
else {
for ($i = 0; $i < $knm; $i++) if (strlen($karr[$i])>2) $result .= $w."<>'".$karr[$i]."' ".$h.' ';
}
}
else {
if (strstr($w,'|'))
{
$warr = explode('|' , $w);
$wnm = count($warr);
for ($j = 0; $j < $knm; $j++)
{
if (!$karr[$j]) continue;
for ($i = 0; $i < $wnm; $i++) if (strlen($karr[$j])>2) $result .= $warr[$i]." like '%".$karr[$j]."%' ".$h.' ';
}
}
else {
for ($i = 0; $i < $knm; $i++) if (strlen($karr[$i])>2) $result .= $w." like '%".$karr[$i]."%' ".$h.' ';
}
}
$result = substr($result,0,strlen($result)-4).')';
if($ik) $result .= getSearchSql($w,$ik,'',$h);
return $result;
}
?>

View File

@@ -0,0 +1,74 @@
<?php
//메뉴출력
function getMenuShow($site,$table,$j,$parent,$depth,$uid,$CXA,$hidden)
{
global $cat,$g;
global $MenuOpen,$numhidden,$checkbox,$headfoot;
static $j;
$CD=getDbSelect($table,($site?'site='.$site.' and ':'').'depth='.($depth+1).' and parent='.$parent.($hidden ? ' and hidden=0':'').' order by gid asc','*');
while($C=db_fetch_array($CD))
{
$j++;
if(@in_array($C['uid'],$CXA)) $MenuOpen .= 'trees[0].tmB('.$j.');';
$numprintx = !$numhidden && $C['num'] ? '&lt;span class="num"&gt;('.$C['num'].')&lt;/span&gt;' : '';
$C['name'] = $headfoot && ($C['imghead']||$C['imgfoot']||$C['codhead']||$C['codfoot']) ? '&lt;b&gt;'.$C['name'].'&lt;b&gt;' : $C['name'];
$name = $C['uid'] != $cat ? addslashes($C['name']): '&lt;span class="on"&gt;'.addslashes($C['name']).'&lt;/span&gt;';
$name = '&lt;span class="ticon tdepth'.$C['depth'].'"&gt;&lt;/span&gt;&lt;span class="name'.($C['hidden']||$C['reject']?' hidden':'').' ndepth'.$C['depth'].'"&gt;'.$name.'&lt;/span&gt;';
if($checkbox) $icon1 = '&lt;input type="checkbox" name="members[]" value="'.$C['uid'].'" /&gt;';
$icon2 = $C['mobile'] ? ' &lt;img src="'.$g['img_core'].'/_public/ico_mobile.gif" class="mobile" alt="" /&gt;' : '';
$icon3 = $C['reject'] ? ' &lt;img src="'.$g['img_core'].'/_public/ico_hidden.gif" alt="" /&gt;' : '';
if ($C['is_child'])
{
echo "['".$icon1.$name.$icon2.$numprintx."','".$C['uid']."',";
getMenuShow($site,$table,$j,$C['uid'],$C['depth'],$uid,$CXA,$hidden);
echo "],\n";
}
else {
echo "['".$icon1.$name.$icon2.$icon3.$numprintx."','".$C['uid']."',''],\n";
}
}
}
//메뉴코드->경로
function getMenuCodeToPath($table,$cat,$j)
{
global $DB_CONNECT;
static $arr;
$R=getUidData($table,$cat);
if($R['parent'])
{
$arr[$j]['uid'] = $R['uid'];
$arr[$j]['id'] = $R['id'];
$arr[$j]['name']= $R['name'];
getMenuCodeToPath($table,$R['parent'],$j+1);
}
else {
$C=getUidData($table,$cat);
$arr[$j]['uid'] = $C['uid'];
$arr[$j]['id'] = $C['id'];
$arr[$j]['name']= $C['name'];
}
sort($arr);
reset($arr);
return $arr;
}
//메뉴코드->SQL
function getMenuCodeToSql($table,$cat,$f)
{
static $sql;
$R=getUidData($table,$cat);
if ($R['uid']) $sql .= $f.'='.$R['uid'].' or ';
if ($R['is_child'])
{
$RDATA=getDbSelect($table,'parent='.$R['uid'],'uid');
while($C=db_fetch_array($RDATA)) getMenuCodeToSql($table,$C['uid'],$f);
}
return substr($sql,0,strlen($sql)-4);
}
?>

View File

@@ -0,0 +1,38 @@
<?php
//카테고리출력
function getMenuShowSelect($site,$table,$j,$parent,$depth,$uid,$hidden,$id)
{
global $cat,$_isUid;
static $j;
$CD=getDbSelect($table,($site?'site='.$site.' and ':'').'depth='.($depth+1).' and parent='.$parent.($hidden ? ' and hidden=0':'').' order by gid asc','*');
while($C=db_fetch_array($CD))
{
$nId = ($id?$id.'/':'').$C[$_isUid.'id'];
$j++;
echo '<option class="selectcat'.$C['depth'].'" value="'.$nId.'"'.($nId==$cat?' selected':'').'>';
for($i=1;$i<$C['depth'];$i++) echo '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
if ($C['depth'] > 1) echo 'ㄴ';
echo $C['name'].($C['num']?' ('.$C['num'].')':'').'</option>';
if ($C['is_child']) getMenuShowSelect($site,$table,$j,$C['uid'],$C['depth'],$uid,$hidden,$nId);
}
}
function getMenuShowSelectCode($site,$table,$j,$parent,$depth,$uid,$hidden,$id)
{
global $cat,$_isUid;
static $j;
$CD=getDbSelect($table,($site?'site='.$site.' and ':'').'depth='.($depth+1).' and parent='.$parent.($hidden ? ' and hidden=0':'').' order by gid asc','*');
while($C=db_fetch_array($CD))
{
$nId = $C[$_isUid.'id'];
$j++;
echo '<option class="selectcat'.$C['depth'].'" value="'.$nId.'"'.($nId==$cat?' selected':'').'>';
for($i=1;$i<$C['depth'];$i++) echo '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
if ($C['depth'] > 1) echo 'ㄴ';
echo $C['name'].($C['num']?' ('.$C['num'].')':'').'</option>';
if ($C['is_child']) getMenuShowSelectCode($site,$table,$j,$C['uid'],$C['depth'],$uid,$hidden,$nId);
}
}
?>

View File

@@ -0,0 +1,82 @@
<?php
function getUrlData($url,$sec)
{
$URL_parsed = parse_url($url);
$host = $URL_parsed['host'];
$port = $URL_parsed['port'];
$path = $URL_parsed['path'];
$query= $URL_parsed['query'];
$scheme= $URL_parsed['scheme'];
if (!$host) $host = $_SERVER['HTTP_HOST'];
$out = "GET ".$path.'?'.$query." HTTP/1.1\r\n";
$out .= "Host: ".$host."\r\n";
$out .= "Connection: Close\r\n\r\n";
if ($scheme == 'https') {
if (!$port) $port = 443;
$fp = fsockopen('ssl://'.$host,$port,$errno,$errstr,$sec);
} else {
if (!$port) $port = 80;
$fp = fsockopen($host,$port,$errno,$errstr,$sec);
}
if (!$fp)
{
return false;
}
else
{
fputs($fp, $out);
$body = false;
while (!feof($fp)) {
$s = fgets($fp, 128);
if ( $body )
$in .= $s;
if ( $s == "\r\n" )
$body = true;
}
fclose($fp);
return $in;
}
}
function getRssArray($url,$tag)
{
return explode('<'.$tag.'>',getUrlData($url,10));
}
function getRssTagValue($str,$tag)
{
$str_exp = explode('<'.$tag.'>' , $str);
$str_exp = explode('</'.$tag.'>' , $str_exp[1]);
$result = getUTFtoUTF($str_exp[0]) == $str_exp[0] ? $str_exp[0] : getKRtoUTF($str_exp[0]);
return trim($result);
}
function getRssPageTitle($str,$tag)
{
return getRssTagValue($str,$tag);
}
function getRssContent($str,$tag)
{
$str = str_replace('&gt;','>',$str);
$str = str_replace('&lt;','<',$str);
$str = str_replace('&quot;','"',$str);
$str = str_replace('&apos;','\'',$str);
$str = getRssTagValue($str,$tag);
$str = str_replace(']]>','',$str);
$str = str_replace('<![CDATA[','',$str);
return $str;
}
function getRssDomain($url)
{
$e = explode('/',str_replace('www.','',str_replace('http://','',$url)));
return $e[0];
}
function getJSONData($data,$f)
{
$arr1 = explode('"'.$f.'":"',str_replace(': "',':"',$data));
$arr2 = explode('"',$arr1[1]);
return $arr2[0];
}
?>

View File

@@ -0,0 +1,41 @@
<?php
function getAgoGrade($SR,$keyword,$d1,$d2)
{
global $date,$table,$DB_CONNECT,$s;
$d_regis1 = date('Ymd',mktime(0,0,0,substr($date['today'],4,2),substr($date['today'],6,2)-$d1,substr($date['today'],0,4)));
$d_regis2 = date('Ymd',mktime(0,0,0,substr($date['today'],4,2),substr($date['today'],6,2)-$d2,substr($date['today'],0,4)));
$WHEREIS = 'where (date between '.$d_regis1.' and '.$d_regis2.") and keyword='".$keyword."' and site=".$s;
$SCOUNT = db_fetch_array(db_query('SELECT sum(hit) FROM '.$table['s_inkey'].' '.$WHEREIS,$DB_CONNECT));
if (!$SCOUNT[0]) return -1;
$len = count($SR);
for($i = 0; $i < $len; $i++)
{
if ($SCOUNT[0] > $SR[$i]) break;
}
return $i;
}
function getGradeArr($d1,$d2)
{
global $date,$table,$DB_CONNECT,$s;
$d_regis1 = date('Ymd',mktime(0,0,0,substr($date['today'],4,2),substr($date['today'],6,2)-$d1,substr($date['today'],0,4)));
$d_regis2 = date('Ymd',mktime(0,0,0,substr($date['today'],4,2),substr($date['today'],6,2)-$d2,substr($date['today'],0,4)));
$WHEREIS = 'where (date between '.$d_regis1.' and '.$d_regis2.') and site='.$s;
$SCOUNT = db_query('SELECT sum(hit) as cnt FROM '.$table['s_inkey'].' '.$WHEREIS.' group by keyword order by cnt desc',$DB_CONNECT);
while($R=db_fetch_array($SCOUNT)) $ARR[] = $R['cnt'];
return $ARR;
}
function getSicon($n1,$n2)
{
if($n1 < 0) return 'new';
if($n1 > $n2) return 'up';
if($n1 < $n2) return 'down';
if($n1 ==$n2) return 'same';
}
function getNumChange($n1,$n2)
{
if($n1 < 0 || $n1 == $n2) return '';
if($n1 > $n2) return $n1 - $n2;
if($n1 < $n2) return $n2 - $n1;
}
?>

View File

@@ -0,0 +1,97 @@
<?php
//SMS 전송
function getSendSMS($to,$from,$subject,$content,$type)
{
global $g,$d;
if ($html == 'TEXT') $content = nl2br(htmlspecialchars($content));
require $g['path_core'].'opensrc/snoopy/Snoopy.class.php';
$snoopy = new Snoopy;
/*======================================================================*\
// MMS일 경우 첨부파일 처리
// 서버&로컬 에 저장된 이미지 파일 읽어올때.
// 웹경로 ,로컬경로 모두 가능 합니다.
\*======================================================================*/
$img_source = 'http://websvc.nesolution.com/sms/MMSAttachFiles/M050085/20180510145947.jpg';
//$img_source = './img/test.jpg';
// $img = file_get_contents($img_source);
// $Base64files = base64_encode($img);
//"," 콤마로 구분 최대 3개.가능합니다.
$files = $Base64files .",".$Base64files .",".$Base64files ;
/*======================================================================*\
// MMS일 경우 첨부파일 처리
// 프론트에서 이미지 파일을 base64로 생성후 post로 받아 올때.
// POST 방식
\*======================================================================*/
/*
$files = $_POST["Base64files"];//MMS 발송시 첨부파일
*/
/*======================================================================*\
// utf-8 인코딩을 사용할 경우
// POST 방식
\*======================================================================*/
$cmd = "SendSms";
$tran_phone = urlencode(iconv('UTF-8', 'EUC-KR', $to)); //받는사람 핸드폰 번호
$tran_callback = urlencode(iconv('UTF-8', 'EUC-KR', $from)); //보내는사람 핸드폰 번호
$tran_date = urlencode(iconv('UTF-8', 'EUC-KR', $date)); //예약전송 일시(생략시 즉시전송)
$tran_msg = urlencode(iconv('UTF-8', 'EUC-KR',$content)); //전송 메시지
$guest_no = urlencode(iconv('UTF-8', 'EUC-KR',$d['admin']['sms_id'])); //SMS 계정 아이디
$guest_key = urlencode(iconv('UTF-8', 'EUC-KR',$d['admin']['sms_key'])); //SMS 계정 인증키
$type = urlencode(iconv('UTF-8', 'EUC-KR',$type)); //발송구분
$subject = urlencode(iconv('UTF-8', 'EUC-KR',$subject)); //LMS / MMS 발송시 제목
$files = $_POST["Base64files"];//MMS 발송시 첨부파일
if($type != "MMS") {
/*======================================================================*\
// GET 으로 호출
이미지 첨부시 에러 발생함니다. post 로 전송하세요.
\*======================================================================*/
$method = "GET";
$url = "http://websvc.nesolution.com/SMS/SMS.aspx?cmd=$cmd&method=$method&";
$url = $url . "guest_no=$guest_no&guest_key=$guest_key&tran_phone=$tran_phone&";
$url = $url . "tran_callback=$tran_callback&tran_date=$tran_date&tran_msg=$tran_msg&";
$url = $url . "type=$type&subject=$subject"; // LMS 또는 MMS 일경우 제목 필수
$snoopy->fetchtext($url);
// 출력 페이지가 euc-kr 일때
//$send_result = $snoopy->results;
// 출력 페이지가 utf-8 일때
$send_result = iconv('EUC-KR', 'UTF-8', $snoopy->results);
}
else
{
/*======================================================================*\
// $snoopy 사용 POST 발송(MMS 파일첨부시)
\*======================================================================*/
$formvars["cmd"] =$cmd;
$formvars["guest_no"] = $guest_no;
$formvars["guest_key"] = $guest_key;
$formvars["tran_phone"] = $tran_phone;
$formvars["tran_callback"] = $tran_callback;
$formvars["tran_date"] = $tran_date;
$formvars["tran_msg"] = $tran_msg;
$formvars["type"] = $type;
$formvars["subject"] = $subject;
$formvars["files"] = $files;
$snoopy->httpmethod = "POST";
$snoopy->submit("http://websvc.nesolution.com/SMS/SMS.aspx",$formvars );
//출력 페이지가 euc-kr 일때
//$send_result = $snoopy->results;
// 출력 페이지가 utf-8 일때
$send_result = iconv('EUC-KR', 'UTF-8', $snoopy->results);
}
return $send_result;
}
?>

View File

@@ -0,0 +1,38 @@
<?php
//문자열형태소추출
function getSiKey($singer)
{
$singer_set1 = "ㄱ,ㄴ,ㄷ,ㄹ,ㅁ,ㅂ,ㅅ,ㅇ,ㅈ,ㅊ,ㅋ,ㅍ,ㅌ,ㅎ";
$singer_set2 = "가,나,다,라,마,바,사,아,자,차,카,타,파,하";
$singer_set3 = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
$singer_arr1 = explode(',' , $singer_set1);
$singer_arr2 = explode(',' , $singer_set2);
$singer_arr3 = explode(',' , $singer_set3);
$singer_sub = substr(strtoupper($singer) , 0 , 2);
$singer_ord = ord($singer_sub);
if ($singer_ord > 64 && $singer_ord < 91)
{ // 영문
for($i = 0; $i < 26; $i++)
{
if($singer_sub >= $singer_arr3[$i])
{
$key = $singer_arr3[$i];
}
}
}
else {
$key = "기타";
for($i = 0; $i < 14; $i++)
{
if ($singer_sub >= $singer_arr2[$i])
{
$key = $singer_arr1[$i];
}
}
}
return $key;
}
?>

View File

@@ -0,0 +1,36 @@
<?php
// 템플릿 파싱 및 데이타 치환
class skin {
var $filename;
public function __construct($filename) {
$this->filename = $filename;
}
public function mk($filename) {
$this->filename = $filename;
return $this->make();
}
public function make() {
global $g,$m,$theme;
$file = sprintf('./modules/'.$m.'/themes/'.$theme.'/_html/%s.html', $this->filename);
$fh_skin = fopen($file, 'r');
$skin = @fread($fh_skin, filesize($file));
fclose($fh_skin);
//return $skin;
return $this->parse($skin);
}
private function parse($skin) {
global $TMPL, $LNG;
$skin = preg_replace_callback('/{\$lng->(.+?)}/i', create_function('$matches', 'global $LNG; return $LNG[$matches[1]];'), $skin);
$skin = preg_replace_callback('/{\$([a-zA-Z0-9_]+)}/', create_function('$matches', 'global $TMPL; return (isset($TMPL[$matches[1]])?$TMPL[$matches[1]]:"");'), $skin);
return $skin;
}
}
?>

1195
_core/function/sys.func.php Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,236 @@
<?php
@ini_set('memory_limit', '128M');
function ResizeWidth($picture,$smallfile,$rewidth)
{
$picsize=getimagesize($picture);
if ($picsize[0] <= $rewidth)
{
copy($picture,$smallfile);
}
else {
$reheight = intval(($rewidth * $picsize[1]) / $picsize[0]);
if($picsize[0]>$rewidth)
{
$width=$picsize[0]-$rewidth;
$aa=$width/$picsize[0];
$picsize[0]=intval($picsize[0]-$picsize[0]*$aa);
$picsize[1]=intval($picsize[1]-$picsize[1]*$aa);
}
if($picsize[1]>$reheight)
{
$height=$picsize[1]-$reheight;
$bb=$heigh/$picsize[1];
$picsize[0]=intval($picsize[0]-$picsize[0]*$bb);
$picsize[1]=intval($picsize[1]-$picsize[1]*$bb);
}
if($picsize[2]==1)
{
//@header("Content-Type: imgage/gif");
$dstimg=ImageCreatetruecolor($rewidth,$reheight);
$srcimg=@ImageCreateFromGIF($picture);
ImageCopyResized($dstimg, $srcimg,0,0,0,0,$rewidth,$reheight,ImageSX($srcimg),ImageSY($srcimg));
Imagegif($dstimg,$smallfile,100);
}
elseif($picsize[2]==2)
{
//@header("Content-Type: images/jpeg");
$dstimg=ImageCreatetruecolor($rewidth,$reheight);
$srcimg=ImageCreateFromJPEG($picture);
imagecopyresampled($dstimg, $srcimg,0,0,0,0,$rewidth,$reheight,ImageSX($srcimg),ImageSY($srcimg));
Imagejpeg($dstimg,$smallfile,100);
}
elseif($picsize[2]==3)
{
//@header("Content-Type: images/png");
$srcimg=ImageCreateFromPNG($picture);
$dstimg = imagecreatetruecolor($rewidth, $reheight);
imagealphablending($dstimg, false);
imagesavealpha($dstimg,true);
$transparent = imagecolorallocatealpha($dstimg, 255, 255, 255, 127);
imagefilledrectangle($dstimg, 0, 0, $rewidth, $reheight, $transparent);
imagecopyresampled($dstimg, $srcimg, 0, 0, 0, 0, $rewidth, $reheight, ImageSX($srcimg),ImageSY($srcimg));
Imagepng($dstimg,$smallfile,0);
}
@ImageDestroy($dstimg);
@ImageDestroy($srcimg);
}
}
function ResizeHeight($picture,$smallfile,$reheight)
{
$picsize=getimagesize($picture);
if ($picsize[1] <= $reheight)
{
copy($picture,$smallfile);
}
else {
$rewidth = intval(($reheight * $picsize[0]) / $picsize[1]);
if($picsize[0]>$rewidth)
{
$width=$picsize[0]-$rewidth;
$aa=$width/$picsize[0];
$picsize[0]=intval($picsize[0]-$picsize[0]*$aa);
$picsize[1]=intval($picsize[1]-$picsize[1]*$aa);
}
if($picsize[1]>$reheight)
{
$height=$picsize[1]-$reheight;
$bb=$heigh/$picsize[1];
$picsize[0]=intval($picsize[0]-$picsize[0]*$bb);
$picsize[1]=intval($picsize[1]-$picsize[1]*$bb);
}
if($picsize[2]==1)
{
//@header("Content-Type: imgage/gif");
$dstimg=ImageCreatetruecolor($rewidth,$reheight);
$srcimg=@ImageCreateFromGIF($picture);
ImageCopyResized($dstimg, $srcimg,0,0,0,0,$rewidth,$reheight,ImageSX($srcimg),ImageSY($srcimg));
Imagegif($dstimg,$smallfile,100);
}
elseif($picsize[2]==2)
{
//@header("Content-Type: images/jpeg");
$dstimg=ImageCreatetruecolor($rewidth,$reheight);
$srcimg=ImageCreateFromJPEG($picture);
imagecopyresampled($dstimg, $srcimg,0,0,0,0,$rewidth,$reheight,ImageSX($srcimg),ImageSY($srcimg));
Imagejpeg($dstimg,$smallfile,100);
}
elseif($picsize[2]==3)
{
//@header("Content-Type: images/png");
$srcimg=ImageCreateFromPNG($picture);
$dstimg=imagecreate($rewidth,$reheight);
$black = imagecolorallocate($dstimg, 0x00, 0x00, 0x00);
$white = imagecolorallocate($dstimg, 0xFF, 0xFF, 0xFF);
$magenta = imagecolorallocate($dstimg, 0xFF, 0x00, 0xFF);
imagecolortransparent($dstimg,$black);
imagecopyresampled($dstimg, $srcimg,0,0,0,0,$rewidth,$reheight,ImageSX($srcimg),ImageSY($srcimg));
Imagepng($dstimg,$smallfile,0);
}
@ImageDestroy($dstimg);
@ImageDestroy($srcimg);
}
}
function ResizeWidthHeight($picture,$smallfile,$rewidth,$reheight)
{
$picsize=getimagesize($picture);
if($picsize[2]==1)
{
//@header("Content-Type: imgage/gif");
$dstimg=ImageCreatetruecolor($rewidth,$reheight);
$srcimg=@ImageCreateFromGIF($picture);
ImageCopyResized($dstimg, $srcimg,0,0,0,0,$rewidth,$reheight,ImageSX($srcimg),ImageSY($srcimg));
Imagegif($dstimg,$smallfile,100);
}
elseif($picsize[2]==2)
{
//@header("Content-Type: images/jpeg");
$dstimg=ImageCreatetruecolor($rewidth,$reheight);
$srcimg=ImageCreateFromJPEG($picture);
imagecopyresampled($dstimg, $srcimg,0,0,0,0,$rewidth,$reheight,ImageSX($srcimg),ImageSY($srcimg));
Imagejpeg($dstimg,$smallfile,100);
}
elseif($picsize[2]==3)
{
//@header("Content-Type: images/png");
$srcimg=ImageCreateFromPNG($picture);
$dstimg=imagecreate($rewidth,$reheight);
$black = imagecolorallocate($dstimg, 0x00, 0x00, 0x00);
$white = imagecolorallocate($dstimg, 0xFF, 0xFF, 0xFF);
$magenta = imagecolorallocate($dstimg, 0xFF, 0x00, 0xFF);
imagecolortransparent($dstimg,$black);
imagecopyresampled($dstimg, $srcimg,0,0,0,0,$rewidth,$reheight,ImageSX($srcimg),ImageSY($srcimg));
Imagepng($dstimg,$smallfile,0);
}
@ImageDestroy($dstimg);
@ImageDestroy($srcimg);
}
function overlay($backpic,$overpic,$x,$y,$w,$h)
{
$backsize=getimagesize($backpic);
$oversize=getimagesize($overpic);
if ($backsize[2] == 1)
{
$dstimg=ImageCreateFromGIF($backpic);
}
elseif ($backsize[2] == 2)
{
$dstimg=ImageCreateFromJPEG($backpic);
}
elseif ($backsize[2] == 3)
{
$dstimg=ImageCreateFromPNG($backpic);
}
if ($oversize[2] == 1)
{
$srcimg=ImageCreateFromGIF($overpic);
}
elseif ($oversize[2] == 2)
{
$srcimg=ImageCreateFromJPEG($overpic);
}
elseif ($oversize[2] == 3)
{
$srcimg=ImageCreateFromPNG($overpic);
}
Imagecopymerge($dstimg, $srcimg, $x, $y, 0, 0, $w, $h, 100);
if ($backsize[2] == 1)
{
Imagegif($dstimg,$backpic,100);
}
elseif ($backsize[2] == 2)
{
Imagejpeg($dstimg,$backpic,100);
}
elseif ($backsize[2] == 3)
{
Imagepng($dstimg,$backpic,0);
}
@ImageDestroy($dstimg);
@ImageDestroy($srcimg);
}
// 이미지 가로/세로 교정
function exifRotate($picture)
{
$exifData = @exif_read_data($picture);
if($exifData['Orientation'] == 6) {
$degree = 270; // 시계방향으로 90도 돌려줘야 정상인데 270도 돌려야 정상적으로 출력됨
}
else if($exifData['Orientation'] == 8) {
$degree = 90; // 반시계방향으로 90도 돌려줘야 정상
}
else if($exifData['Orientation'] == 3) {
$degree = 180;
}
if($degree) {
if($exifData['FileType'] == 1) {
$source = imagecreatefromgif($picture);
$source = imagerotate ($source , $degree, 0);
imagegif($source, $picture);
}
else if($exifData['FileType'] == 2) {
$source = imagecreatefromjpeg($picture);
$source = imagerotate ($source , $degree, 0);
imagejpeg($source, $picture);
}
else if($exifData['FileType'] == 3) {
$source = imagecreatefrompng($picture);
$source = imagerotate ($source , $degree, 0);
imagepng($source, $picture);
}
@ImageDestroy($source);
@ImageDestroy($source);
}
}
?>

View File

@@ -0,0 +1,168 @@
<?php
class ZipFile
{
var $datasec = array();
var $ctrl_dir = array();
var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
var $old_offset = 0;
var $proc_count=0;
var $makeDirCount;
function add_dir($name)
{
$name = str_replace("\\", "/", $name);
$fr = "\x50\x4b\x03\x04";
$fr .= "\x0a\x00";
$fr .= "\x00\x00";
$fr .= "\x00\x00";
$fr .= "\x00\x00\x00\x00";
$fr .= pack("V",0);
$fr .= pack("V",0);
$fr .= pack("V",0);
$fr .= pack("v", strlen($name) );
$fr .= pack("v", 0 );
$fr .= $name;
$fr .= pack("V", 0);
$fr .= pack("V", 0);
$fr .= pack("V", 0);
$this -> datasec[] = $fr;
$new_offset = strlen(implode("", $this->datasec));
$cdrec = "\x50\x4b\x01\x02";
$cdrec .="\x00\x00";
$cdrec .="\x0a\x00";
$cdrec .="\x00\x00";
$cdrec .="\x00\x00";
$cdrec .="\x00\x00\x00\x00";
$cdrec .= pack("V",0);
$cdrec .= pack("V",0);
$cdrec .= pack("V",0);
$cdrec .= pack("v", strlen($name) );
$cdrec .= pack("v", 0 );
$cdrec .= pack("v", 0 );
$cdrec .= pack("v", 0 );
$cdrec .= pack("v", 0 );
$ext = "\x00\x00\x10\x00";
$ext = "\xff\xff\xff\xff";
$cdrec .= pack("V", 16 );
$cdrec .= pack("V", $this -> old_offset );
$cdrec .= $name;
$this -> ctrl_dir[] = $cdrec;
$this -> old_offset = $new_offset;
return;
}
function add_file($data, $name)
{
$fp = fopen($data,"r");
$data = fread($fp,filesize($data));
fclose($fp);
$name = str_replace("\\", "/", $name);
$unc_len = strlen($data);
$crc = crc32($data);
$zdata = gzcompress($data);
$zdata = substr ($zdata, 2, -4);
$c_len = strlen($zdata);
$fr = "\x50\x4b\x03\x04";
$fr .= "\x14\x00";
$fr .= "\x00\x00";
$fr .= "\x08\x00";
$fr .= "\x00\x00\x00\x00";
$fr .= pack("V",$crc);
$fr .= pack("V",$c_len);
$fr .= pack("V",$unc_len);
$fr .= pack("v", strlen($name) );
$fr .= pack("v", 0 );
$fr .= $name;
$fr .= $zdata;
$fr .= pack("V",$crc);
$fr .= pack("V",$c_len);
$fr .= pack("V",$unc_len);
$this -> datasec[] = $fr;
$new_offset = strlen(implode("", $this->datasec));
$cdrec = "\x50\x4b\x01\x02";
$cdrec .="\x00\x00";
$cdrec .="\x14\x00";
$cdrec .="\x00\x00";
$cdrec .="\x08\x00";
$cdrec .="\x00\x00\x00\x00";
$cdrec .= pack("V",$crc);
$cdrec .= pack("V",$c_len);
$cdrec .= pack("V",$unc_len);
$cdrec .= pack("v", strlen($name) );
$cdrec .= pack("v", 0 );
$cdrec .= pack("v", 0 );
$cdrec .= pack("v", 0 );
$cdrec .= pack("v", 0 );
$cdrec .= pack("V", 32 );
$cdrec .= pack("V", $this -> old_offset );
$this -> old_offset = $new_offset;
$cdrec .= $name;
$this -> ctrl_dir[] = $cdrec;
}
function add_files($files)
{
foreach($files as $file)
{
$file = str_replace("//", "/", $file);
if (is_file($file))
{
$this->add_file($file,$file);
}
}
}
function add_dirs($dirs)
{
$files = $this->read_dir($dirs);
$this->add_files($files);
}
function read_dir($dir)
{
$array = array();
$d = dir($dir);
while (false !== ($entry = $d->read()))
{
if($entry!='.' && $entry!='..')
{
$entry = $dir.'/'.$entry;
if(is_dir($entry))
{
$array[] = $entry;
$array = array_merge($array, $this->read_dir($entry));
}
else {
$array[] = $entry;
}
}
}
$d->close();
return $array;
}
function file()
{
$data = implode('', $this -> datasec);
$ctrldir = implode('', $this -> ctrl_dir);
return
$data .
$ctrldir .
$this -> eof_ctrl_dir .
pack("v", sizeof($this -> ctrl_dir)) .
pack("v", sizeof($this -> ctrl_dir)) .
pack("V", strlen($ctrldir)) .
pack("V", strlen($data)) . "\x00\x00";
}
}
?>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
_core/images/blank.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 964 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 943 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1019 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 939 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 971 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 854 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 946 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 941 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 984 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 970 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 999 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 983 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Some files were not shown because too many files have changed in this diff Show More