feat: 그누보드5 R2 스토리지 확장 모듈 초기 설정
- Docker 개발 환경 구성 (nginx, php, mariadb) - 그누보드 기본 extend 파일들 추가 - R2 파일 목록 확인 스크립트 추가 - .gitignore 설정 (gnuboard 코어, 테스트 파일 제외) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
10
.gitignore
vendored
Normal file
10
.gitignore
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
|
||||||
|
# Gnuboard core (install separately)
|
||||||
|
gnuboard/
|
||||||
|
|
||||||
|
# Test files
|
||||||
|
*.txt
|
||||||
|
*.png
|
||||||
|
|
||||||
|
# Local data
|
||||||
|
data/
|
||||||
47
docker-compose.yml
Normal file
47
docker-compose.yml
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
nginx:
|
||||||
|
image: nginx:alpine
|
||||||
|
container_name: gnuboard-nginx
|
||||||
|
ports:
|
||||||
|
- "8080:80"
|
||||||
|
volumes:
|
||||||
|
- ./gnuboard:/var/www/html:Z
|
||||||
|
- ./docker/nginx.conf:/etc/nginx/conf.d/default.conf:ro,Z
|
||||||
|
depends_on:
|
||||||
|
- php
|
||||||
|
networks:
|
||||||
|
- gnuboard-net
|
||||||
|
|
||||||
|
php:
|
||||||
|
build:
|
||||||
|
context: ./docker
|
||||||
|
dockerfile: Dockerfile.php
|
||||||
|
container_name: gnuboard-php
|
||||||
|
volumes:
|
||||||
|
- ./gnuboard:/var/www/html:Z
|
||||||
|
- ./extend:/var/www/html/extend:Z
|
||||||
|
working_dir: /var/www/html
|
||||||
|
networks:
|
||||||
|
- gnuboard-net
|
||||||
|
|
||||||
|
mariadb:
|
||||||
|
image: mariadb:10.11
|
||||||
|
container_name: gnuboard-db
|
||||||
|
environment:
|
||||||
|
MYSQL_ROOT_PASSWORD: rootpass
|
||||||
|
MYSQL_DATABASE: gnuboard
|
||||||
|
MYSQL_USER: gnuboard
|
||||||
|
MYSQL_PASSWORD: gnuboard123
|
||||||
|
volumes:
|
||||||
|
- gnuboard-db:/var/lib/mysql:Z
|
||||||
|
networks:
|
||||||
|
- gnuboard-net
|
||||||
|
|
||||||
|
networks:
|
||||||
|
gnuboard-net:
|
||||||
|
driver: bridge
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
gnuboard-db:
|
||||||
38
docker/Dockerfile.php
Normal file
38
docker/Dockerfile.php
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
FROM php:8.1-fpm-alpine
|
||||||
|
|
||||||
|
# 필수 패키지 설치
|
||||||
|
RUN apk add --no-cache \
|
||||||
|
freetype-dev \
|
||||||
|
libjpeg-turbo-dev \
|
||||||
|
libpng-dev \
|
||||||
|
libwebp-dev \
|
||||||
|
libzip-dev \
|
||||||
|
icu-dev \
|
||||||
|
oniguruma-dev \
|
||||||
|
$PHPIZE_DEPS
|
||||||
|
|
||||||
|
# PHP 확장 설치
|
||||||
|
RUN docker-php-ext-configure gd \
|
||||||
|
--with-freetype \
|
||||||
|
--with-jpeg \
|
||||||
|
--with-webp \
|
||||||
|
&& docker-php-ext-install -j$(nproc) \
|
||||||
|
gd \
|
||||||
|
mysqli \
|
||||||
|
pdo_mysql \
|
||||||
|
zip \
|
||||||
|
intl \
|
||||||
|
mbstring \
|
||||||
|
fileinfo \
|
||||||
|
opcache
|
||||||
|
|
||||||
|
# Composer 설치
|
||||||
|
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
|
||||||
|
|
||||||
|
# PHP 설정
|
||||||
|
RUN echo "upload_max_filesize = 50M" > /usr/local/etc/php/conf.d/uploads.ini \
|
||||||
|
&& echo "post_max_size = 50M" >> /usr/local/etc/php/conf.d/uploads.ini \
|
||||||
|
&& echo "memory_limit = 256M" >> /usr/local/etc/php/conf.d/uploads.ini \
|
||||||
|
&& echo "max_execution_time = 300" >> /usr/local/etc/php/conf.d/uploads.ini
|
||||||
|
|
||||||
|
WORKDIR /var/www/html
|
||||||
41
docker/nginx.conf
Normal file
41
docker/nginx.conf
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name localhost;
|
||||||
|
root /var/www/html;
|
||||||
|
index index.php index.html;
|
||||||
|
|
||||||
|
charset utf-8;
|
||||||
|
|
||||||
|
# 그누보드 rewrite 규칙
|
||||||
|
location / {
|
||||||
|
try_files $uri $uri/ /index.php?$query_string;
|
||||||
|
}
|
||||||
|
|
||||||
|
# PHP 처리
|
||||||
|
location ~ \.php$ {
|
||||||
|
fastcgi_pass php:9000;
|
||||||
|
fastcgi_index index.php;
|
||||||
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||||
|
include fastcgi_params;
|
||||||
|
fastcgi_read_timeout 300;
|
||||||
|
}
|
||||||
|
|
||||||
|
# 정적 파일 캐싱
|
||||||
|
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2)$ {
|
||||||
|
expires 30d;
|
||||||
|
add_header Cache-Control "public, immutable";
|
||||||
|
}
|
||||||
|
|
||||||
|
# 보안: 숨김 파일 차단
|
||||||
|
location ~ /\. {
|
||||||
|
deny all;
|
||||||
|
}
|
||||||
|
|
||||||
|
# 보안: data 폴더 PHP 실행 차단
|
||||||
|
location ~* ^/data/.*\.php$ {
|
||||||
|
deny all;
|
||||||
|
}
|
||||||
|
|
||||||
|
# 업로드 크기 제한
|
||||||
|
client_max_body_size 50M;
|
||||||
|
}
|
||||||
1
extend/.htaccess
Normal file
1
extend/.htaccess
Normal file
@@ -0,0 +1 @@
|
|||||||
|
# .htaccess
|
||||||
20
extend/debugbar.extend.php
Normal file
20
extend/debugbar.extend.php
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||||
|
|
||||||
|
add_event('tail_sub', 'show_debug_bar');
|
||||||
|
|
||||||
|
function show_debug_bar() {
|
||||||
|
|
||||||
|
global $g5, $g5_debug, $is_admin;
|
||||||
|
|
||||||
|
if( ! get_permission_debug_show() ) return;
|
||||||
|
|
||||||
|
if ( !($is_admin === 'super' && !is_mobile() ) ){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$memory_usage = function_exists( 'memory_get_peak_usage' ) ? memory_get_peak_usage() : memory_get_usage();
|
||||||
|
$php_run_time = (isset($g5_debug['php']) && isset($g5_debug['php']['begin_time'])) ? ( get_microtime() - $g5_debug['php']['begin_time'] ) : 0;
|
||||||
|
|
||||||
|
include_once( G5_PLUGIN_PATH.'/debugbar/debugbar.php' );
|
||||||
|
}
|
||||||
12
extend/default.config.php
Normal file
12
extend/default.config.php
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||||
|
|
||||||
|
define('KGINICIS_USE_CERT_SEED', isset($config['cf_cert_use_seed']) ? (int) $config['cf_cert_use_seed'] : 1);
|
||||||
|
|
||||||
|
// 유저 사이드뷰에서 아이콘 지정 안했을시 기본 no 프로필 이미지
|
||||||
|
define('G5_NO_PROFILE_IMG', '<span class="profile_img"><img src="'.G5_IMG_URL.'/no_profile.gif" alt="no_profile" width="'.$config['cf_member_icon_width'].'" height="'.$config['cf_member_icon_height'].'"></span>');
|
||||||
|
|
||||||
|
define('G5_USE_MEMBER_IMAGE_FILETIME', TRUE);
|
||||||
|
|
||||||
|
// 썸네일 처리 방식, 비율유지 하지 않고 썸네일을 생성하려면 주석을 풀고 값은 false 입력합니다. ( true 또는 주석으로 된 경우에는 비율 유지합니다. )
|
||||||
|
//define('G5_USE_THUMB_RATIO', false);
|
||||||
69
extend/g5_54version_update.extend.php
Normal file
69
extend/g5_54version_update.extend.php
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
<?php
|
||||||
|
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||||
|
|
||||||
|
add_event('memo_list', 'g54_user_memo_insert', 10, 3);
|
||||||
|
add_event('password_is_wrong', 'g54_check_bbs_password', 10, 3);
|
||||||
|
add_replace('invalid_password', 'g54_return_invalid_password', 10, 3);
|
||||||
|
|
||||||
|
function g54_return_invalid_password($bool, $type, $wr){
|
||||||
|
if($type === 'write' && $bool === false && $wr['wr_password'] && isset($_POST['wr_password'])) {
|
||||||
|
if(G5_STRING_ENCRYPT_FUNCTION === 'create_hash' && (strlen($wr['wr_password']) === G5_MYSQL_PASSWORD_LENGTH || strlen($wr['wr_password']) === 16)) {
|
||||||
|
if( sql_password($_POST['wr_password']) === $wr['wr_password'] ){
|
||||||
|
$bool = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $bool;
|
||||||
|
}
|
||||||
|
|
||||||
|
function g54_check_bbs_password($type, $wr, $qstr=''){
|
||||||
|
if($type === 'bbs' && (isset($wr['wr_password']) && $wr['wr_password']) && isset($_POST['wr_password'])) {
|
||||||
|
|
||||||
|
global $bo_table, $w;
|
||||||
|
|
||||||
|
if(G5_STRING_ENCRYPT_FUNCTION === 'create_hash' && (strlen($wr['wr_password']) === G5_MYSQL_PASSWORD_LENGTH || strlen($wr['wr_password']) === 16)) {
|
||||||
|
if( sql_password($_POST['wr_password']) === $wr['wr_password'] ){
|
||||||
|
if ($w == 's') {
|
||||||
|
$ss_name = 'ss_secret_'.$bo_table.'_'.$wr['wr_num'];
|
||||||
|
set_session($ss_name, TRUE);
|
||||||
|
} else if ($w == 'sc'){
|
||||||
|
$ss_name = 'ss_secret_comment_'.$bo_table.'_'.$wr['wr_id'];
|
||||||
|
set_session($ss_name, TRUE);
|
||||||
|
}
|
||||||
|
goto_url(short_url_clean(G5_HTTP_BBS_URL.'/board.php?'.$qstr));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function g54_user_memo_insert($kind, $unkind, $page=1){
|
||||||
|
global $g5, $is_member, $member;
|
||||||
|
|
||||||
|
if( ! $is_member || $kind !== 'send' ) return;
|
||||||
|
|
||||||
|
$sql = " select count(*) as cnt from {$g5['memo_table']} where me_send_mb_id = '{$member['mb_id']}' and me_type = 'recv' and me_send_ip = '' ";
|
||||||
|
$row = sql_fetch($sql);
|
||||||
|
|
||||||
|
if ( !$row['cnt'] ) return;
|
||||||
|
|
||||||
|
$sql = " select count(*) as cnt from {$g5['memo_table']} where me_send_mb_id = '{$member['mb_id']}' and me_type = 'send' ";
|
||||||
|
$row2 = sql_fetch($sql);
|
||||||
|
|
||||||
|
if( $row['cnt'] && ! $row2['cnt'] ){
|
||||||
|
$sql = " select * from {$g5['memo_table']} where me_send_mb_id = '{$member['mb_id']}' and me_type = 'recv' ";
|
||||||
|
$result = sql_query($sql);
|
||||||
|
|
||||||
|
while ($row = sql_fetch_array($result))
|
||||||
|
{
|
||||||
|
$sql = " insert into {$g5['memo_table']} ( me_recv_mb_id, me_send_mb_id, me_send_datetime, me_read_datetime, me_memo, me_send_id, me_type ) values ( '".addslashes($row['me_recv_mb_id'])."', '".addslashes($row['me_send_mb_id'])."', '".addslashes($row['me_send_datetime'])."', '".addslashes($row['me_read_datetime'])."', '".addslashes($row['me_memo'])."', '".$row['me_id']."', 'send' ) ";
|
||||||
|
|
||||||
|
sql_query($sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = " update {$g5['memo_table']} set me_send_ip = '{$_SERVER['REMOTE_ADDR']}' where me_send_mb_id = '{$member['mb_id']}' and me_type = 'recv' and me_send_ip = '' ";
|
||||||
|
|
||||||
|
sql_query($sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
84
extend/shop.extend.php
Normal file
84
extend/shop.extend.php
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
<?php
|
||||||
|
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||||
|
|
||||||
|
if (!defined('G5_USE_SHOP') || !G5_USE_SHOP) return;
|
||||||
|
|
||||||
|
/*
|
||||||
|
배송업체에 데이터를 추가하는 경우 아래 형식으로 추가하세요.
|
||||||
|
.'(배송업체명^택배조회URL^연락처)'
|
||||||
|
*/
|
||||||
|
define('G5_DELIVERY_COMPANY',
|
||||||
|
'(경동택배^https://kdexp.com/service/delivery/etc/delivery.do?barcode=^1899-5368)'
|
||||||
|
.'(대신택배^https://www.ds3211.co.kr/freight/internalFreightSearch.ht?billno=^043-222-4582)'
|
||||||
|
.'(로젠택배^https://www.ilogen.com/m/personal/trace.pop/^1588-9988)'
|
||||||
|
.'(우체국^https://m.epost.go.kr/postal/mobile/mobile.trace.RetrieveDomRigiTraceList.comm?ems_gubun=E&sid1=^1588-1300)'
|
||||||
|
.'(한진택배^https://www.hanjin.co.kr/kor/CMS/DeliveryMgr/WaybillResult.do?mCode=MN038&schLang=KR&wblnumText2=^1588-0011)'
|
||||||
|
.'(롯데택배^https://www.lotteglogis.com/open/tracking?invno=^1588-2121)'
|
||||||
|
.'(CJ대한통운^https://trace.cjlogistics.com/next/tracking.html?wblNo=^1588-1255)'
|
||||||
|
.'(GS25편의점택배^https://www.cvsnet.co.kr/invoice/tracking.do?invoice_no=^1577-1287)'
|
||||||
|
.'(합동택배^https://hdexp.co.kr/deliverySearch2.hd?barcode=^1899-3392)'
|
||||||
|
.'(CU편의점택배^https://www.cupost.co.kr/postbox/delivery/localResult.cupost?invoice_no=^1577-1287)'
|
||||||
|
.'(천일택배^http://www.chunil.co.kr/HTrace/HTrace.jsp?transNo=^1877-6606)'
|
||||||
|
.'(건영택배^https://www.kunyoung.com/goods/goods_01.php?mulno=^031-460-2700)'
|
||||||
|
.'(우리택배^http://www.honamlogis.co.kr/04estimate/songjang_list.php?c_search1=^031-376-6070)'
|
||||||
|
.'(일양로지스^https://www.ilyanglogis.com/functionality/popup_result.asp?hawb_no=^1588-0002)'
|
||||||
|
.'(EMS^https://service.epost.go.kr/trace.RetrieveEmsRigiTraceList.comm?POST_CODE=^1588-1300)'
|
||||||
|
.'(DHL^https://www.dhl.com/kr-ko/home/tracking.html?tracking-id=^1588-1588-0001)'
|
||||||
|
.'(FedEx^https://www.fedex.com/fedextrack/?trknbr=^02-3496-7777)'
|
||||||
|
.'(UPS^https://www.fedex.com/fedextrack/?trknbr=^02-3496-7777)'
|
||||||
|
);
|
||||||
|
|
||||||
|
include_once(G5_LIB_PATH.'/shop.data.lib.php');
|
||||||
|
include_once(G5_LIB_PATH.'/shop.lib.php');
|
||||||
|
include_once(G5_LIB_PATH.'/thumbnail.lib.php');
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
// 쇼핑몰 미수금 등의 주문정보
|
||||||
|
//==============================================================================
|
||||||
|
/*
|
||||||
|
$info = get_order_info($od_id);
|
||||||
|
|
||||||
|
$info['od_cart_price'] // 장바구니 주문상품 총금액
|
||||||
|
$info['od_send_cost'] // 배송비
|
||||||
|
$info['od_coupon'] // 주문할인 쿠폰금액
|
||||||
|
$info['od_send_coupon'] // 배송할인 쿠폰금액
|
||||||
|
$info['od_cart_coupon'] // 상품할인 쿠폰금액
|
||||||
|
$info['od_tax_mny'] // 과세 공급가액
|
||||||
|
$info['od_vat_mny'] // 부가세액
|
||||||
|
$info['od_free_mny'] // 비과세 공급가액
|
||||||
|
$info['od_cancel_price'] // 주문 취소상품 총금액
|
||||||
|
$info['od_misu'] // 미수금액
|
||||||
|
*/
|
||||||
|
//==============================================================================
|
||||||
|
// 쇼핑몰 미수금 등의 주문정보
|
||||||
|
//==============================================================================
|
||||||
|
|
||||||
|
// 매출전표 url 설정
|
||||||
|
if($default['de_card_test']) {
|
||||||
|
define('G5_BILL_RECEIPT_URL', 'https://testadmin8.kcp.co.kr/assist/bill.BillActionNew.do?cmd=');
|
||||||
|
define('G5_CASH_RECEIPT_URL', 'https://testadmin8.kcp.co.kr/Modules/Service/Cash/Cash_Bill_Common_View.jsp?term_id=PGNW');
|
||||||
|
} else {
|
||||||
|
define('G5_BILL_RECEIPT_URL', 'https://admin8.kcp.co.kr/assist/bill.BillActionNew.do?cmd=');
|
||||||
|
define('G5_CASH_RECEIPT_URL', 'https://admin.kcp.co.kr/Modules/Service/Cash/Cash_Bill_Common_View.jsp?term_id=PGNW');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 상품상세 페이지에서 재고체크 실행 여부 선택
|
||||||
|
// 상품의 옵션이 많아 로딩 속도가 느린 경우 false 로 설정
|
||||||
|
define('G5_SOLDOUT_CHECK', true);
|
||||||
|
|
||||||
|
// 주문폼의 상품이 재고 차감에 포함되는 기준 시간설정
|
||||||
|
// 0 이면 재고 차감에 계속 포함됨
|
||||||
|
define('G5_CART_STOCK_LIMIT', 3);
|
||||||
|
|
||||||
|
// 아이코드 코인 최소금액 설정
|
||||||
|
// 코인 잔액이 설정 금액보다 작을 때는 주문시 SMS 발송 안함
|
||||||
|
define('G5_ICODE_COIN', 100);
|
||||||
|
|
||||||
|
include_once(G5_LIB_PATH.'/shop.uri.lib.php');
|
||||||
|
|
||||||
|
add_replace('get_pretty_url', 'add_pretty_shop_url', 10, 5);
|
||||||
|
add_replace('false_short_url_clean', 'shop_short_url_clean', 10, 4);
|
||||||
|
add_replace('add_nginx_conf_rules', 'add_shop_nginx_conf_rules', 10, 3);
|
||||||
|
add_replace('add_mod_rewrite_rules', 'add_shop_mod_rewrite_rules', 10, 3);
|
||||||
|
add_replace('admin_dbupgrade', 'add_shop_admin_dbupgrade', 10, 3);
|
||||||
|
add_replace('exist_check_seo_title', 'shop_exist_check_seo_title', 10, 4);
|
||||||
10
extend/smarteditor_upload_extend.php
Normal file
10
extend/smarteditor_upload_extend.php
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||||
|
|
||||||
|
//플러그인 폴더 이름 및 스킨 폴더 이름
|
||||||
|
define('SMARTEDITOR_UPLOAD_IMG_CHECK', 1); // 이미지 파일을 썸네일 할수 있는지 여부를 체크합니다. ( 해당 파일이 이미지 파일인지 체크합니다. 1이면 사용, 0이면 사용 안함 )
|
||||||
|
define('SMARTEDITOR_UPLOAD_RESIZE', 0); // 스마트에디터 업로드 이미지파일 JPG, PNG 리사이즈 1이면 사용, 0이면 사용안함
|
||||||
|
define('SMARTEDITOR_UPLOAD_MAX_WIDTH', 1200); // 스마트에디터 업로드 이미지 리사이즈 제한 width
|
||||||
|
define('SMARTEDITOR_UPLOAD_MAX_HEIGHT', 2800); // 스마트에디터 업로드 이미지 리사이즈 제한 height
|
||||||
|
define('SMARTEDITOR_UPLOAD_SIZE_LIMIT', 20); // 스마트에디터 업로드 사이즈 제한 ( 기본 20MB )
|
||||||
|
define('SMARTEDITOR_UPLOAD_IMAGE_QUALITY', 98); // 썸네일 이미지 JPG, PNG 압축률;
|
||||||
47
extend/sms5.extend.php
Normal file
47
extend/sms5.extend.php
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// SMS 상수 모음 시작
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
define('G5_SMS5_DIR', 'sms5');
|
||||||
|
define('G5_SMS5_PATH', G5_PLUGIN_PATH.'/'.G5_SMS5_DIR);
|
||||||
|
define('G5_SMS5_URL', G5_PLUGIN_URL.'/'.G5_SMS5_DIR);
|
||||||
|
|
||||||
|
define('G5_SMS5_ADMIN_DIR', 'sms_admin');
|
||||||
|
define('G5_SMS5_ADMIN_PATH', G5_ADMIN_PATH.'/'.G5_SMS5_ADMIN_DIR);
|
||||||
|
define('G5_SMS5_ADMIN_URL', G5_ADMIN_URL.'/'.G5_SMS5_ADMIN_DIR);
|
||||||
|
|
||||||
|
define('ICODE_JSON_SOCKET_HOST', '211.172.232.124');
|
||||||
|
define('ICODE_JSON_SOCKET_PORT', '9201');
|
||||||
|
|
||||||
|
define('G5_ICODE_LMS_MAX_LENGTH', 1500); // 구버전 LMS 최대길이
|
||||||
|
define('G5_ICODE_JSON_MAX_LENGTH', 2000); // JSON 버전 LMS 최대길이
|
||||||
|
|
||||||
|
// SMS 테이블명
|
||||||
|
$g5['sms5_prefix'] = G5_TABLE_PREFIX.'sms5_';
|
||||||
|
$g5['sms5_config_table'] = $g5['sms5_prefix'] . 'config';
|
||||||
|
$g5['sms5_write_table'] = $g5['sms5_prefix'] . 'write';
|
||||||
|
$g5['sms5_history_table'] = $g5['sms5_prefix'] . 'history';
|
||||||
|
$g5['sms5_book_table'] = $g5['sms5_prefix'] . 'book';
|
||||||
|
$g5['sms5_book_group_table'] = $g5['sms5_prefix'] . 'book_group';
|
||||||
|
$g5['sms5_form_table'] = $g5['sms5_prefix'] . 'form';
|
||||||
|
$g5['sms5_form_group_table'] = $g5['sms5_prefix'] . 'form_group';
|
||||||
|
|
||||||
|
$sms5 = array('cf_skin'=>'', 'cf_datetime'=>'', 'cf_phone'=>'');
|
||||||
|
|
||||||
|
if (!empty($config['cf_sms_use'])) {
|
||||||
|
|
||||||
|
$sms5 = sql_fetch("select * from {$g5['sms5_config_table']} ", false);
|
||||||
|
|
||||||
|
// Demo 설정
|
||||||
|
if (file_exists(G5_PATH.'/DEMO'))
|
||||||
|
{
|
||||||
|
// 받는 번호를 010-000-0000 으로 만듭니다.
|
||||||
|
$g5['sms5_demo'] = true;
|
||||||
|
|
||||||
|
// 아이코드에 실제로 보내지 않고 가상(Random)으로 전송결과를 저장합니다.
|
||||||
|
$g5['sms5_demo_send'] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
47
extend/social_login.extend.php
Normal file
47
extend/social_login.extend.php
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||||
|
|
||||||
|
// 소셜로그인 테이블 정보가 dbconfig에 없으면 소셜 테이블 정의
|
||||||
|
if( !isset($g5['social_profile_table']) ){
|
||||||
|
$g5['social_profile_table'] = G5_TABLE_PREFIX.'member_social_profiles';
|
||||||
|
}
|
||||||
|
|
||||||
|
//플러그인 폴더 이름 및 스킨 폴더 이름
|
||||||
|
define('G5_SOCIAL_LOGIN_DIR', 'social');
|
||||||
|
|
||||||
|
// 소셜로그인 login_start 파라미터 이름입니다. 기본값은 hauth.start
|
||||||
|
define('G5_SOCIAL_LOGIN_START_PARAM', 'hauth.start');
|
||||||
|
|
||||||
|
// 소셜로그인 login_done 파라미터 이름입니다. 기본값은 hauth.done
|
||||||
|
define('G5_SOCIAL_LOGIN_DONE_PARAM', 'hauth.done');
|
||||||
|
|
||||||
|
define('G5_SOCIAL_LOGIN_PATH', G5_PLUGIN_PATH.'/'.G5_SOCIAL_LOGIN_DIR);
|
||||||
|
define('G5_SOCIAL_LOGIN_URL', G5_PLUGIN_URL.'/'.G5_SOCIAL_LOGIN_DIR);
|
||||||
|
|
||||||
|
// 소셜로그인 SOCIAL_LOGIN_BASE_URL 기본값은 G5_SOCIAL_LOGIN_URL.'/'
|
||||||
|
define('G5_SOCIAL_LOGIN_BASE_URL', G5_SOCIAL_LOGIN_URL.'/');
|
||||||
|
|
||||||
|
if(G5_IS_MOBILE) {
|
||||||
|
define('G5_SOCIAL_SKIN_PATH', G5_PATH.'/'.G5_MOBILE_DIR.'/'.G5_SKIN_DIR.'/'.G5_SOCIAL_LOGIN_DIR);
|
||||||
|
define('G5_SOCIAL_SKIN_URL', G5_URL.'/'.G5_MOBILE_DIR.'/'.G5_SKIN_DIR.'/'.G5_SOCIAL_LOGIN_DIR);
|
||||||
|
} else {
|
||||||
|
define('G5_SOCIAL_SKIN_PATH', G5_SKIN_PATH.'/'.G5_SOCIAL_LOGIN_DIR);
|
||||||
|
define('G5_SOCIAL_SKIN_URL', G5_SKIN_URL.'/'.G5_SOCIAL_LOGIN_DIR);
|
||||||
|
}
|
||||||
|
|
||||||
|
//소셜 로그인 팝업을 사용하면 true
|
||||||
|
define('G5_SOCIAL_USE_POPUP', ! is_mobile() ); // 모바일에서는 팝업사용 안함
|
||||||
|
//define('G5_SOCIAL_USE_POPUP', false ); //팝업을 사용하지 않을 경우
|
||||||
|
|
||||||
|
//소셜 db 테이블에 기록된 내용중에 mb_id가 없는 소셜 데이터를 몇일 이후에 삭제합니다.
|
||||||
|
//해당 기간동안 중복 회원가입을 막는 역할을 합니다.
|
||||||
|
//0 이면 체크를 하지 않습니다.
|
||||||
|
define('G5_SOCIAL_DELETE_DAY', 0);
|
||||||
|
|
||||||
|
// 메일 인증관련, false 이면 메일인증을 받지 않고 로그인됩니다. true 이고 기본환경설정에서 메일인증설정이 활성화 되어 있는 경우 메일인증을 받아야만 로그인 됩니다.
|
||||||
|
define('G5_SOCIAL_CERTIFY_MAIL', false);
|
||||||
|
|
||||||
|
// 소셜 DEBUG 관련 설정, 기본값은 false, true 로 설정시 data/tmp/social_anystring.log 파일이 생성됩니다.
|
||||||
|
define('G5_SOCIAL_IS_DEBUG', false);
|
||||||
|
|
||||||
|
include_once(G5_SOCIAL_LOGIN_PATH.'/includes/functions.php');
|
||||||
8
extend/version.extend.php
Normal file
8
extend/version.extend.php
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||||
|
|
||||||
|
// 자바스크립트와 CSS 파일을 새로 다운로드 하도록 파일의 끝에 년월일 지정
|
||||||
|
// 예) https://도메인/css/default.css?ver=220620
|
||||||
|
// 예) https://도메인/js/common.js?ver=220620
|
||||||
|
define('G5_CSS_VER', '2303229');
|
||||||
|
define('G5_JS_VER', '2304171');
|
||||||
30
list_r2_files.php
Normal file
30
list_r2_files.php
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
require_once __DIR__ . "/extend/r2-storage/vendor/autoload.php";
|
||||||
|
require_once __DIR__ . "/extend/r2-storage/r2_config.php";
|
||||||
|
|
||||||
|
try {
|
||||||
|
$client = new Aws\S3\S3Client([
|
||||||
|
"region" => "auto",
|
||||||
|
"version" => "latest",
|
||||||
|
"endpoint" => R2_ENDPOINT,
|
||||||
|
"credentials" => [
|
||||||
|
"key" => R2_ACCESS_KEY_ID,
|
||||||
|
"secret" => R2_SECRET_ACCESS_KEY,
|
||||||
|
],
|
||||||
|
"use_path_style_endpoint" => true,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$result = $client->listObjectsV2([
|
||||||
|
"Bucket" => R2_BUCKET_NAME,
|
||||||
|
"MaxKeys" => 100,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$contents = $result->get("Contents") ?? [];
|
||||||
|
echo "=== R2 버킷 파일 목록 ===\n\n";
|
||||||
|
foreach ($contents as $obj) {
|
||||||
|
echo $obj["Key"] . " (" . number_format($obj["Size"]) . " bytes)\n";
|
||||||
|
}
|
||||||
|
echo "\n총 " . count($contents) . "개 파일\n";
|
||||||
|
} catch (Exception $e) {
|
||||||
|
echo "Error: " . $e->getMessage() . "\n";
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user