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:
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');
|
||||
Reference in New Issue
Block a user