Compare commits

..
90 Commits
Author SHA1 Message Date
thisgun 4eba618a82 Merge branch 'master' of github.com:gnuboard/gnuboard5 2023-06-19 17:55:43 +09:00
thisgun accf20044f 버전 5.5.8.3.1 수정 2023-06-19 17:52:34 +09:00
thisgun aaadf1487d 영카트 쿠폰 발행 시 UX 오류 #230 2023-06-19 17:36:14 +09:00
thisgun 44798a4ef5 설치시 자동생성되는 게시판 글읽기 포인트로 인한 문제 수정 #231 2023-06-19 17:20:51 +09:00
thisgun 992641dfad 구글 서치 콘솔에 맞지 않는 게시판xml 수정 #234 2023-06-19 17:00:42 +09:00
thisgunandGitHub 451ece8d8c Merge pull request #238 from kkigomi/feature/html-purifier
Hook - HTMLPurifier 설정을 변경할 수 있는 `html_purifier_config` 이벤트 Hook 추가
2023-06-19 15:10:39 +09:00
thisgun bcda18cbd5 1:1문의 삭제시 hook 이벤트 추가 2023-06-19 15:08:56 +09:00
thisgun 2a8f5f6035 상품 검색 페이지 xss 취약점 수정 2023-06-16 17:20:18 +09:00
thisgun f4821aa49a 비회원으로 상품을 장바구니에 담아두고 후 로그인하면 mb_id가 누락되는 문제 수정 2023-06-15 17:16:47 +09:00
kkigomi 476b06792a 코드 포맷 2023-06-01 18:15:48 +09:00
kkigomi 9489254bbf html_purifier() 함수에 html_purifier_config 이벤트 Hook 추가
리스너에서는 첫번째 인자로 `HTMLPurifier_Config` 객체를 받아 설정을 변경할 수 있다
2023-06-01 18:15:26 +09:00
thisgun 8bcac60bda 버전 5.5.8.3 수정 2023-04-17 14:42:58 +09:00
thisgun fe03163cce XSS 취약점 수정 2023-04-17 14:41:38 +09:00
thisgun 8ecc5ba241 min_wr_num Undefined 경고문이 나올수 있는 코드 수정 2023-04-17 12:29:42 +09:00
thisgun 4204f7970e 안드로이드 chrome 112.0.5615.48에서 상품옵션선택이 안되는 문제 수정 2023-04-17 12:16:12 +09:00
thisgun 9cd2841006 버전 5.5.8.2.9 수정 2023-04-13 20:11:54 +09:00
thisgun 4b92543c61 KG이니시스 TX모듈을 사용하는 코드를 API로 전환 건 2023-04-13 20:10:48 +09:00
thisgun b01adc51c7 버전 5.5.8.2.8 수정 2023-03-23 12:54:34 +09:00
thisgun bfdc48b021 NHN_KCP 애플페이 추가 2023-03-23 12:52:40 +09:00
thisgun 10b3a9c841 Merge branch 'master' of github.com:gnuboard/gnuboard5 2023-03-23 12:25:33 +09:00
thisgunandGitHub 3f27a5e32d Merge pull request #223 from kkigomi/feature/rewrite
rewrite 룰 제안에 Hook 추가
2023-03-23 12:18:59 +09:00
thisgun a904c5c634 Object cache의 데이터를 삭제하지 못하는 버그 수정 2023-03-23 12:00:05 +09:00
thisgun d603f2d5b3 undefined error 경고문에 따른 return_url변수 초기화 2023-03-23 11:19:29 +09:00
thisgun 275f7e5d8a PHP8버전대에서 경고문 나오는 FAQ Undefined variable 수정 2023-03-23 11:10:28 +09:00
thisgun 2595a7a45d 모바일 위시리스트 상품 URL 코드 수정 2023-03-21 19:07:44 +09:00
thisgun cb346b08c1 쇼핑몰 상품 주문시 it_name 에 태그가 포함되어있는 경우 발생되는 오류 수정 2023-03-21 19:00:13 +09:00
kkigomiandGitHub 3db2dc8be3 Merge branch 'gnuboard:master' into feature/rewrite 2023-01-25 19:32:47 +09:00
kkigomi b3451f1cc2 rewrite 설정 코드 보기에서 기존 hook 보다 앞선 출력 위치에 hook 추가
기존 rule 때문에 hook으로 추가해도 접근 차단등의 룰을 적용하지 못하는 문제를 해결하기 위함
- add_nginx_conf_pre_rules
- add_mod_rewrite_pre_rules
2023-01-25 16:58:00 +09:00
kkigomi b557483e1d 코드 포맷. PSR-12 2023-01-25 16:53:10 +09:00
thisgun d28be44108 버전 5.5.8.2.7 수정 2023-01-25 16:52:29 +09:00
thisgun f61d6cc09a SMS관리 휴대폰관리 페이지 PHP특정버전에서 오류나는 문제 수정 2023-01-25 12:30:13 +09:00
thisgun 6fa0f0e704 정렬 기능에 짧은 주소 적용 오류를 다시 수정 2023-01-25 11:06:07 +09:00
thisgun 66039a4b37 PHP8 버전에서 경고문이 나오는 코드 수정 2023-01-20 11:17:50 +09:00
thisgun aca4733b12 쇼핑몰 장바구니에서 재고 이상 주문할수 있는 오류 수정 2023-01-20 11:17:20 +09:00
thisgun 85b97f4b29 버전 5.5.8.2.6 수정 2023-01-13 11:06:48 +09:00
thisgun 724a4e4bf6 [KVE-2023-0046] 그누보드5(gnuboard5) SQL Injection 취약점 2023-01-13 11:00:00 +09:00
thisgun 9cf8804611 Merge branch 'master' of github.com:gnuboard/g5-update 2023-01-12 10:43:41 +09:00
thisgun 8f3893bb43 중복코드 삭제 및 경고문이 나오는 코드 수정 2023-01-12 10:43:25 +09:00
kir rio 7617aba611 cheditor this.URI 추가 2023-01-11 12:06:25 +09:00
kir rio d99641d122 cheditor 5.1.9.4 버전 업데이트 2023-01-11 10:21:44 +09:00
thisgun 7516424989 Merge branch 'master' of github.com:gnuboard/gnuboard5 2023-01-09 16:06:27 +09:00
thisgunandGitHub 1cb12d9f2c Merge pull request #215 from kkigomi/feature/sql_query_fix
#212 PR에서 DB 커넥션 지정 오류 수정 & sql_query_after 이벤트에 누락된 $source 파라메터 추가
2023-01-09 16:00:52 +09:00
thisgunandGitHub dbcb6a2cb6 Merge pull request #218 from kkigomi/feature/sideview
회원 sideview 메뉴에 Replace Hook 추가
2023-01-09 16:00:38 +09:00
thisgunandGitHub 18c42a648e Merge pull request #219 from kkigomi/feature/goto_url
goto_url 함수에 Event Hook 추가
2023-01-09 16:00:06 +09:00
thisgunandGitHub f5e2252997 Merge pull request #220 from kkigomi/feature/html_process_buffer
html_process->run()에 Replace Hook 추가
2023-01-09 15:59:44 +09:00
thisgun 6fd339174e 내용관리 hook 코드 추가 2023-01-09 15:33:03 +09:00
kkigomi 1891b5eb38 회원 sideview 메뉴에 Replace Hook 추가 2023-01-08 03:35:26 +09:00
kkigomi 3fcc1f2d5f html_process->run()에 Replace Hook 추가 2023-01-07 01:32:14 +09:00
kkigomi 4958cc9e35 goto_url 함수에 Event Hook 추가 2023-01-07 01:31:05 +09:00
thisgun 1750e957d2 모바일 상품 페이지 오타 수정 2023-01-03 15:16:33 +09:00
thisgun abfeee5e92 1:1문의 답변 파일첨부 기능 추가 2023-01-03 14:53:08 +09:00
thisgun c3272f9170 게시판, 1:1문의, 쇼핑몰상품 상단내용 하단내용에 hook 적용 2023-01-02 17:58:22 +09:00
thisgun df176c6ad9 NHN_KCP 본인인증 모바일에서 새창열기 방식으로 수정 2022-12-20 17:41:22 +09:00
thisgun 22bfc5e9bb 모바일에서 패스워드 찾기 본인인증시 NHN_KCP 본인인증 스크립트 오류 수정 2022-12-19 14:05:33 +09:00
thisgun 4e0cd0d911 게시판 정렬 기능에 짧은주소 적용 2022-12-19 11:18:28 +09:00
thisgun 25091a201b PHP8 버전에서 경고문이 나올수 있는 코드 수정 2022-12-19 11:13:08 +09:00
kkigomi 3706ef99d3 #212 PR에서 DB 커넥션 지정 오류 수정 & sql_query_after 이벤트에 누락된 $source 파라메터 추가 2022-12-10 17:12:22 +09:00
thisgun 69a4998fce 버전 5.5.8.2.5 수정 2022-12-08 16:19:16 +09:00
thisgun 513976b5a2 [KVE-2022-2037] Gnuboard5 관리자페이지 내 Stored XSS 취약점 수정 2022-12-08 16:12:48 +09:00
thisgun 97a8352117 [KVE-2022-2036] Gnuboard5 관리자페이지 내 Stored XSS 취약점 수정 2022-12-01 15:22:48 +09:00
thisgun 21dc36199f Merge branch 'master' of github.com:gnuboard/gnuboard5 2022-12-01 10:27:52 +09:00
thisgunandGitHub 0a18368759 Merge pull request #212 from kkigomi/feature/sql_query
debugbar 쿼리 오류 표시 추가 및 G5_COLLECT_QUERY 설정 추가
2022-11-28 09:43:01 +09:00
kkigomi 6d9db83789 debugbar 쿼리 오류 표시 추가 및 G5_COLLECT_QUERY 설정 추가
- 210 이슈에서 제안했던 개선안
- debugbar에 오류 등으로 실패한 쿼리가 나오지 않는 문제 수정
- 실패한 쿼리에 오류 메시지 출력
- 쿼리가 실행된 파일, 라인 함수 표시
- G5_COLLECT_QUERY 상수 설정 추가로 디버그 모드(G5_DEBUG)를 켜지 않아도 서드파티 플러그인에서 쿼리 목록을 수집할 수 있도록 개선
2022-11-28 07:20:30 +09:00
thisgun 3e53cd8ff6 회원 탈퇴파일 오타 수정 및 이벤트 추가 #209 2022-11-22 19:36:35 +09:00
thisgun 816a32d5c9 set_cookie 함수의 httponly 인자의 기본값을 true로 수정 #208 2022-11-22 19:27:13 +09:00
thisgun 529b8a1004 html_process 에서 title link 태그가 없을경우 css 파일을 로드 못하는 문제 수정 #207 2022-11-22 17:25:10 +09:00
thisgun 62d0bf5c4e html_process 클래스 싱글톤 적용 #206 2022-11-22 16:29:43 +09:00
thisgun 4c6b833f73 새로운 인증 수단을 위한 패스워드 확인 없는 로그인 처리 지원 #205 2022-11-22 15:08:22 +09:00
thisgun 21532eb9bf Merge branch 'master' of github.com:gnuboard/g5-update into next_55825 2022-11-22 11:56:29 +09:00
kjh cd50af93fd 버전 5.5.8.2.4 수정 2022-11-22 11:30:07 +09:00
thisgun 589b7f4e39 테마설정에서 이미지가 영역을 벗어나는 문제 수정#204 2022-11-21 14:07:06 +09:00
thisgun 9c8f7128f2 css 코드중 오타 수정 2022-11-21 11:54:52 +09:00
thisgun a93008d392 set_http 함수 코드 수정 2022-11-21 11:47:32 +09:00
thisgun d3561623aa 휴대폰번호 입력 필수 입력 오류 수정 2022-11-21 11:41:18 +09:00
thisgun 311e879563 [KVE-2022-1984]관리자 개인결제 Stored XSS 취약점 수정 2022-11-21 10:35:49 +09:00
thisgun 9932b99a51 KG이니시스 가상계좌 노티 전송 IP 추가 2022-10-21 10:04:07 +09:00
thisgun 5c9ed36bf2 kakao cdn에 async 속성 추가 2022-10-17 11:56:41 +09:00
thisgun dbc8e1676a 버전 5.5.8.2.3 수정 2022-10-17 10:59:59 +09:00
thisgun 749345e502 Merge branch 'master' of github.com:gnuboard/g5-update 2022-10-17 10:57:35 +09:00
thisgun 7c8a21ecc0 카카오 우편번호 서비스 url 수정 및 속성에 async 추가 2022-10-17 10:57:00 +09:00
KimTom89andGitHub 8751ab122a Merge pull request #10 from gnuboard/G5-154/search-keyword-trim
[fix] 사이트 내 전체검색 > 검색어 양 끝의 공백 제거
2022-10-05 12:20:50 +09:00
kjh 0f3e6125b5 [fix] 사이트 내 전체검색 > 검색어 양 끝의 공백 제거 2022-10-05 11:50:08 +09:00
kjh a21d02f4c5 버전 5.5.8.2.2 수정 2022-10-04 15:14:35 +09:00
thisgun 2f9fb355e3 [KVE-2022-0992] 취약점 다시 재수정 2022-09-27 17:15:46 +09:00
thisgun 8074bce274 Merge branch 'master' of github.com:gnuboard/g5-update 2022-09-27 10:13:35 +09:00
thisgun 85dbbe946a 비번찾기 후 빈 페이지가 나오는 문제 수정 2022-09-27 10:12:18 +09:00
kjh 1f2e79b188 Merge branch 'master' of github.com:gnuboard/g5-update 2022-09-16 16:59:50 +09:00
thisgun 27434107e8 [KVE-2022-0992] 그누보드5 스크립트 실행 취약점 수정 2022-09-15 11:30:10 +09:00
kjh 45d5404520 Merge branch 'master' of github.com:gnuboard/g5-update 2022-08-05 14:50:01 +09:00
thisgun 281bb5427c 영카트 상품리스트 sort 키에 it_name 추가 2022-07-07 10:04:40 +09:00
165 changed files with 1785 additions and 7281 deletions
+6 -2
View File
@@ -685,5 +685,9 @@ if (isset($_REQUEST) && $_REQUEST) {
}
}
// 관리자에서는 추가 스크립트는 사용하지 않는다.
//$config['cf_add_script'] = '';
// 관리자에서는 추가 스크립트와 추가 매타태그, 방문자분석 스크립트가 실행되지 않게 빈값으로 합니다.
if (run_replace('safe_admin_add_script_boolean', false) === false) {
$config['cf_analytics'] = '';
$config['cf_add_script'] = '';
$config['cf_add_meta'] = '';
}
+7 -5
View File
@@ -8,6 +8,8 @@ if ($is_admin != 'super') {
alert('최고관리자만 접근 가능합니다.');
}
$copy_config = get_config(true);
if (!isset($config['cf_add_script'])) {
sql_query(
" ALTER TABLE `{$g5['config_table']}`
@@ -696,15 +698,15 @@ if ($config['cf_sms_use'] && $config['cf_icode_id'] && $config['cf_icode_pw']) {
<tr>
<th scope="row"><label for="cf_analytics">방문자분석 스크립트</label></th>
<td colspan="3">
<?php echo help('방문자분석 스크립트 코드를 입력합니다. 예) 구글 애널리틱스'); ?>
<textarea name="cf_analytics" id="cf_analytics"><?php echo get_text($config['cf_analytics']); ?></textarea>
<?php echo help('방문자분석 스크립트 코드를 입력합니다. 예) 구글 애널리틱스<br>관리자 페이지에서는 이 코드를 사용하지 않습니다.'); ?>
<textarea name="cf_analytics" id="cf_analytics"><?php echo get_text($copy_config['cf_analytics']); ?></textarea>
</td>
</tr>
<tr>
<th scope="row"><label for="cf_add_meta">추가 메타태그</label></th>
<td colspan="3">
<?php echo help('추가로 사용하실 meta 태그를 입력합니다.'); ?>
<textarea name="cf_add_meta" id="cf_add_meta"><?php echo get_text($config['cf_add_meta']); ?></textarea>
<?php echo help('추가로 사용하실 meta 태그를 입력합니다.<br>관리자 페이지에서는 이 코드를 사용하지 않습니다.'); ?>
<textarea name="cf_add_meta" id="cf_add_meta"><?php echo get_text($copy_config['cf_add_meta']); ?></textarea>
</td>
</tr>
<tr>
@@ -1390,7 +1392,7 @@ if ($config['cf_sms_use'] && $config['cf_icode_id'] && $config['cf_icode_pw']) {
<th scope="row"><label for="cf_add_script">추가 script, css</label></th>
<td>
<?php echo help('HTML의 &lt;/HEAD&gt; 태그위로 추가될 JavaScript와 css 코드를 설정합니다.<br>관리자 페이지에서는 이 코드를 사용하지 않습니다.') ?>
<textarea name="cf_add_script" id="cf_add_script"><?php echo get_text($config['cf_add_script']); ?></textarea>
<textarea name="cf_add_script" id="cf_add_script"><?php echo get_text($copy_config['cf_add_script']); ?></textarea>
</td>
</tr>
</tbody>
+1 -1
View File
@@ -1062,7 +1062,7 @@ box-shadow: 1px 2px 5px rgba(150,150,150,0.5);z-index:1000}
#theme_detail:after{display:block;visibility:hidden;clear:both;content:""}
#theme_detail h2{font-size:1.25em;background:#fff;padding:0 15px;line-height:40px;border-bottom:1px solid #d8d8d8;margin:0}
.theme_dt_img{float:left;padding:20px}
.theme_dt_img img{border:1px solid #aaa;}
.theme_dt_img img{border:1px solid #aaa;max-width:600px;max-height:460px}
.theme_dt_if{float:left;width:235px;padding:20px 0}
.theme_dt_if table{width:100%;border-collapse:collapse;margin:15px 0 0 ;font-size:0.92em}
.theme_dt_if table th{padding:5px;background:#fff;border-bottom:1px solid #f3f3f3;vertical-align:top;color:#3f51b5}
+1 -1
View File
@@ -121,7 +121,7 @@ require_once './admin.head.php';
<?php } ?>
</tbody>
</table>
<textarea name="ma_list" style="display:none"><?php echo $ma_list ?></textarea>
<textarea name="ma_list" style="display:none"><?php echo html_purifier($ma_list); ?></textarea>
</div>
<div class="btn_confirm01 btn_confirm">
+3 -3
View File
@@ -380,15 +380,15 @@ add_javascript(G5_POSTCODE_JS, 0); //다음 주소 js
</tr>
<tr>
<th scope="row"><label for="mb_signature">서명</label></th>
<td colspan="3"><textarea name="mb_signature" id="mb_signature"><?php echo $mb['mb_signature'] ?></textarea></td>
<td colspan="3"><textarea name="mb_signature" id="mb_signature"><?php echo html_purifier($mb['mb_signature']); ?></textarea></td>
</tr>
<tr>
<th scope="row"><label for="mb_profile">자기 소개</label></th>
<td colspan="3"><textarea name="mb_profile" id="mb_profile"><?php echo $mb['mb_profile'] ?></textarea></td>
<td colspan="3"><textarea name="mb_profile" id="mb_profile"><?php echo html_purifier($mb['mb_profile']); ?></textarea></td>
</tr>
<tr>
<th scope="row"><label for="mb_memo">메모</label></th>
<td colspan="3"><textarea name="mb_memo" id="mb_memo"><?php echo $mb['mb_memo'] ?></textarea></td>
<td colspan="3"><textarea name="mb_memo" id="mb_memo"><?php echo html_purifier($mb['mb_memo']); ?></textarea></td>
</tr>
<tr>
<th scope="row"><label for="mb_cert_history">본인인증 내역</label></th>
+2 -2
View File
@@ -108,11 +108,11 @@ require_once './admin.head.php';
</tr>
<tr>
<th scope="row"><label for="po_ips">투표참가 IP</label></th>
<td><textarea name="po_ips" id="po_ips" readonly rows="10"><?php echo preg_replace("/\n/", " / ", $po['po_ips']) ?></textarea></td>
<td><textarea name="po_ips" id="po_ips" readonly rows="10"><?php echo html_purifier(preg_replace("/\n/", " / ", $po['po_ips'])); ?></textarea></td>
</tr>
<tr>
<th scope="row"><label for="mb_ids">투표참가 회원</label></th>
<td><textarea name="mb_ids" id="mb_ids" readonly rows="10"><?php echo preg_replace("/\n/", " / ", $po['mb_ids']) ?></textarea></td>
<td><textarea name="mb_ids" id="mb_ids" readonly rows="10"><?php echo html_purifier(preg_replace("/\n/", " / ", $po['mb_ids'])); ?></textarea></td>
</tr>
<?php } ?>
</tbody>
-1
View File
@@ -12,7 +12,6 @@ $ca = array(
'ca_name'=>'',
'ca_order'=>'',
'ca_mb_id'=>'',
'ca_skin_dir'=>'',
'ca_cert_use'=>0,
'ca_adult_use'=>0,
'ca_sell_email'=>'',
+1 -1
View File
@@ -17,7 +17,7 @@ if ($stx != "") {
$sql_search .= " $where $sfl like '%$stx%' ";
$where = " and ";
}
if ($save_stx && ($save_stx != $stx))
if (isset($save_stx) && $save_stx && ($save_stx != $stx))
$page = 1;
}
+32 -31
View File
@@ -13,8 +13,6 @@ if ($config['cf_sms_use'] && $config['cf_icode_id'] && $config['cf_icode_pw']) {
$userinfo = get_icode_userinfo($config['cf_icode_id'], $config['cf_icode_pw']);
}
check_log_folder(G5_SHOP_PATH.'/inicis/key', false);
$g5['title'] = '쇼핑몰설정';
include_once (G5_ADMIN_PATH.'/admin.head.php');
@@ -68,8 +66,7 @@ if(!isset($default['de_pg_service'])) {
// inicis 필드 추가
if(!isset($default['de_inicis_mid'])) {
sql_query(" ALTER TABLE `{$g5['g5_shop_default_table']}`
ADD `de_inicis_mid` varchar(255) NOT NULL DEFAULT '' AFTER `de_kcp_site_key`,
ADD `de_inicis_admin_key` varchar(255) NOT NULL DEFAULT '' AFTER `de_inicis_mid` ", true);
ADD `de_inicis_mid` varchar(255) NOT NULL DEFAULT '' AFTER `de_kcp_site_key` ", true);
}
// 모바일 초기화면 이미지 줄 수 필드 추가
@@ -137,7 +134,7 @@ if(!isset($default['de_kakaopay_mid'])) {
// 이니시스 웹결제 사인키 필드 추가
if(!isset($default['de_inicis_sign_key'])) {
sql_query(" ALTER TABLE `{$g5['g5_shop_default_table']}`
ADD `de_inicis_sign_key` varchar(255) NOT NULL DEFAULT '' AFTER `de_inicis_admin_key` ", true);
ADD `de_inicis_sign_key` varchar(255) NOT NULL DEFAULT '' ", true);
}
// 네이버페이 필드추가
@@ -202,6 +199,14 @@ if( ! isset($default['de_easy_pay_services']) ){
sql_query($sql, false);
}
// KG 이니시스 iniapi_key 추가
if( ! isset($default['de_inicis_iniapi_key']) ){
$sql = "ALTER TABLE `{$g5['g5_shop_default_table']}`
ADD COLUMN `de_inicis_iniapi_key` VARCHAR(30) NOT NULL DEFAULT '' AFTER `de_inicis_sign_key`,
ADD COLUMN `de_inicis_iniapi_iv` VARCHAR(30) NOT NULL DEFAULT '' AFTER `de_inicis_iniapi_key`; ";
sql_query($sql, false);
}
if( function_exists('pg_setting_check') ){
pg_setting_check(true);
}
@@ -593,7 +598,7 @@ if(!$default['de_kakaopay_cancelpwd']){
<tr>
<th scope="row"><label for="de_bank_account">은행계좌번호</label></th>
<td>
<textarea name="de_bank_account" id="de_bank_account"><?php echo $default['de_bank_account']; ?></textarea>
<textarea name="de_bank_account" id="de_bank_account"><?php echo html_purifier($default['de_bank_account']); ?></textarea>
</td>
</tr>
<tr>
@@ -781,10 +786,11 @@ if(!$default['de_kakaopay_cancelpwd']){
<tr class="pg_info_fld kcp_info_fld">
<th scope="row"><label for="de_kcp_easy_pays">NHN KCP 간편결제</label></th>
<td>
<?php echo help("체크시 NHN KCP 간편결제들을 활성화 합니다.\nNHN_KCP > 네이버페이, 카카오페이는 테스트결제가 되지 않습니다."); ?>
<?php echo help("체크시 NHN KCP 간편결제들을 활성화 합니다.\nNHN_KCP > 네이버페이, 카카오페이는 테스트결제가 되지 않습니다.\n애플페이는 IOS 기기에 모바일결제만 가능합니다."); ?>
<input type="checkbox" id="de_easy_nhnkcp_payco" name="de_easy_pays[]" value="nhnkcp_payco" <?php if(stripos($default['de_easy_pay_services'], 'nhnkcp_payco') !== false){ echo 'checked="checked"'; } ?> > <label for="de_easy_nhnkcp_payco" disabled>PAYCO (페이코)</label><br>
<input type="checkbox" id="de_easy_nhnkcp_naverpay" name="de_easy_pays[]" value="nhnkcp_naverpay" <?php if(stripos($default['de_easy_pay_services'], 'nhnkcp_naverpay') !== false){ echo 'checked="checked"'; } ?> > <label for="de_easy_nhnkcp_naverpay">NAVERPAY (네이버페이)</label><br>
<input type="checkbox" id="de_easy_nhnkcp_kakaopay" name="de_easy_pays[]" value="nhnkcp_kakaopay" <?php if(stripos($default['de_easy_pay_services'], 'nhnkcp_kakaopay') !== false){ echo 'checked="checked"'; } ?> > <label for="de_easy_nhnkcp_kakaopay">KAKAOPAY (카카오페이)</label>
<input type="checkbox" id="de_easy_nhnkcp_kakaopay" name="de_easy_pays[]" value="nhnkcp_kakaopay" <?php if(stripos($default['de_easy_pay_services'], 'nhnkcp_kakaopay') !== false){ echo 'checked="checked"'; } ?> > <label for="de_easy_nhnkcp_kakaopay">KAKAOPAY (카카오페이)</label><br>
<input type="checkbox" id="de_easy_nhnkcp_applepay" name="de_easy_pays[]" value="nhnkcp_applepay" <?php if(stripos($default['de_easy_pay_services'], 'nhnkcp_applepay') !== false){ echo 'checked="checked"'; } ?> > <label for="de_easy_nhnkcp_applepay">APPLEPAY (애플페이)</label>
</td>
</tr>
<tr class="pg_info_fld kcp_info_fld">
@@ -829,17 +835,24 @@ if(!$default['de_kakaopay_cancelpwd']){
</td>
</tr>
<tr class="pg_info_fld inicis_info_fld">
<th scope="row"><label for="de_inicis_admin_key">KG이니시스 키패스워드</label></th>
<th scope="row"><label for="de_inicis_sign_key">KG이니시스 웹결제 사인키</label></th>
<td>
<?php echo help("KG이니시스에서 발급받은 4자리 상점 키패스워드를 입력합니다.\nKG이니시스 상점관리자 패스워드와 관련이 없습니다.\n키패스워드 값을 확인하시려면 상점측에 발급된 키파일 안의 readme.txt 파일을 참조해 주십시오"); ?>
<input type="text" name="de_inicis_admin_key" value="<?php echo get_sanitize_input($default['de_inicis_admin_key']); ?>" id="de_inicis_admin_key" class="frm_input" size="5" maxlength="4">
<?php echo help("KG이니시스에서 발급받은 웹결제 사인키를 입력합니다.\n<a href='https://iniweb.inicis.com/' target='_blank'>KG이니시스 가맹점관리자</a> > 상점정보 > 계약정보 > 부가정보의 웹결제 signkey생성 조회 버튼 클릭, 팝업창에서 생성 버튼 클릭 후 해당 값을 입력합니다."); ?>
<input type="text" name="de_inicis_sign_key" value="<?php echo get_sanitize_input($default['de_inicis_sign_key']); ?>" id="de_inicis_sign_key" class="frm_input" size="40" maxlength="50">
</td>
</tr>
<tr class="pg_info_fld inicis_info_fld">
<th scope="row"><label for="de_inicis_sign_key">KG이니시스 웹결제 사인키</label></th>
<th scope="row"><label for="de_inicis_iniapi_key">KG이니시스 INIAPI KEY</label></th>
<td>
<?php echo help("KG이니시스에서 발급받은 웹결제 사인키를 입력합니다.\nKG이니시스 상점관리자 > 상점정보 > 계약정보 > 부가정보의 웹결제 signkey생성 조회 버튼 클릭, 팝업창에서 생성 버튼 클릭 후 해당 값을 입력합니다."); ?>
<input type="text" name="de_inicis_sign_key" value="<?php echo get_sanitize_input($default['de_inicis_sign_key']); ?>" id="de_inicis_sign_key" class="frm_input" size="40" maxlength="50">
<?php echo help("<a href='https://iniweb.inicis.com/' target='_blank'>KG이니시스 가맹점관리자</a> > 상점정보 > 계약정보 > 부가정보 > INIAPI key 생성 조회 하여 KEY를 여기에 입력합니다.\n이 항목은 영카트 주문에서 kg이니시스 PG 결제 취소, 부분취소, 에스크로 배송등록, 현금영수증 발급에 필요합니다."); ?>
<input type="text" name="de_inicis_iniapi_key" value="<?php echo get_sanitize_input($default['de_inicis_iniapi_key']); ?>" id="de_inicis_iniapi_key" class="frm_input" size="30" maxlength="30">
</td>
</tr>
<tr class="pg_info_fld inicis_info_fld">
<th scope="row"><label for="de_inicis_iniapi_iv">KG이니시스 INIAPI IV</label></th>
<td>
<?php echo help("<a href='https://iniweb.inicis.com/' target='_blank'>KG이니시스 가맹점관리자</a> > 상점정보 > 계약정보 > 부가정보 > INIAPI IV 생성 조회 하여 KEY를 여기에 입력합니다.\n이 항목은 영카트 주문에서 kg이니시스 현금영수증 발급에 필요합니다."); ?>
<input type="text" name="de_inicis_iniapi_iv" value="<?php echo get_sanitize_input($default['de_inicis_iniapi_iv']); ?>" id="de_inicis_iniapi_iv" class="frm_input" size="30" maxlength="30">
</td>
</tr>
<tr class="pg_info_fld inicis_info_fld">
@@ -848,7 +861,7 @@ if(!$default['de_kakaopay_cancelpwd']){
<a href="http://sir.kr/main/service/samsungpay.php" target="_blank" class="kg_btn">삼성페이 서비스신청하기</a>
</th>
<td>
<?php echo help("KG이니시스와 별도로 <strong>삼성페이 사용 계약을 하신 경우</strong>에만 체크해주세요. (모바일 주문서 결제수단에 삼성페이가 노출됩니다.) <br >실결제시 반드시 결제대행사 KG이니시스 항목에 상점 아이디와 키패스워드를 입력해 주세요.", 50); ?>
<?php echo help("KG이니시스와 별도로 <strong>삼성페이 사용 계약을 하신 경우</strong>에만 체크해주세요. (모바일 주문서 결제수단에 삼성페이가 노출됩니다.) <br >실결제시 반드시 결제대행사 KG이니시스 항목에 상점 아이디와 웹결제 사인키를 입력해 주세요.", 50); ?>
<input type="checkbox" name="de_samsung_pay_use" value="1" id="de_samsung_pay_use"<?php echo $default['de_samsung_pay_use']?' checked':''; ?>> <label for="de_samsung_pay_use">사용</label>
</td>
</tr>
@@ -857,7 +870,7 @@ if(!$default['de_kakaopay_cancelpwd']){
<label for="de_inicis_lpay_use">KG이니시스 L.pay 사용</label>
</th>
<td>
<?php echo help("체크시 KG이니시스 L.pay를 사용합니다. <br >실결제시 반드시 결제대행사 KG이니시스 항목의 상점 정보( 아이디, 키패스워드, 웹결제 사인키 )를 입력해 주세요.", 50); ?>
<?php echo help("체크시 KG이니시스 L.pay를 사용합니다. <br >실결제시 반드시 결제대행사 KG이니시스 항목의 상점 정보( 아이디, 웹결제 사인키 )를 입력해 주세요.", 50); ?>
<input type="checkbox" name="de_inicis_lpay_use" value="1" id="de_inicis_lpay_use"<?php echo $default['de_inicis_lpay_use']?' checked':''; ?>> <label for="de_inicis_lpay_use">사용</label>
</td>
</tr>
@@ -866,7 +879,7 @@ if(!$default['de_kakaopay_cancelpwd']){
<label for="de_inicis_kakaopay_use">KG이니시스 카카오페이 사용</label>
</th>
<td>
<?php echo help("체크시 KG이니시스 결제의 카카오페이를 사용합니다. 주문서 결제수단에 카카오페이가 노출됩니다. <br>실결제시 반드시 결제대행사 KG이니시스 항목의 상점 정보( 아이디, 키패스워드, 웹결제 사인키 )를 입력해 주세요.", 50); ?>
<?php echo help("체크시 KG이니시스 결제의 카카오페이를 사용합니다. 주문서 결제수단에 카카오페이가 노출됩니다. <br>실결제시 반드시 결제대행사 KG이니시스 항목의 상점 정보( 아이디, 웹결제 사인키 )를 입력해 주세요.", 50); ?>
<input type="checkbox" name="de_inicis_kakaopay_use" value="1" id="de_inicis_kakaopay_use"<?php echo $default['de_inicis_kakaopay_use']?' checked':''; ?>> <label for="de_inicis_kakaopay_use">사용</label>
</td>
</tr>
@@ -2011,20 +2024,8 @@ if($default['de_iche_use'] || $default['de_vbank_use'] || $default['de_hp_use']
} catch(Exception $e) {
}
if(!is_dir($log_path)) {
echo '<script>'.PHP_EOL;
echo 'alert("'.str_replace(G5_PATH.'/', '', G5_SHOP_PATH).'/inicis 폴더 안에 log 폴더를 생성하신 후 쓰기권한을 부여해 주십시오.\n> mkdir log\n> chmod 707 log");'.PHP_EOL;
echo '</script>'.PHP_EOL;
} else {
if(!is_writable($log_path)) {
echo '<script>'.PHP_EOL;
echo 'alert("'.str_replace(G5_PATH.'/', '',$log_path).' 폴더에 쓰기권한을 부여해 주십시오.\n> chmod 707 log");'.PHP_EOL;
echo '</script>'.PHP_EOL;
} else {
if( function_exists('check_log_folder') && is_writable($log_path) ){
check_log_folder($log_path);
}
}
if( function_exists('check_log_folder') && is_writable($log_path) ){
check_log_folder($log_path);
}
}
+4 -2
View File
@@ -160,7 +160,8 @@ $check_sanitize_keys = array(
'cf_lg_mid', //LG유플러스 상점아이디
'cf_lg_mert_key', //LG유플러스 MERT KEY
'de_inicis_mid', //KG이니시스 상점아이디
'de_inicis_admin_key', //KG이니시스 키패스워드
'de_inicis_iniapi_key', //KG이니시스 INIAPI KEY
'de_inicis_iniapi_iv', //KG이니시스 INIAPI IV
'de_inicis_sign_key', //KG이니시스 웹결제 사인키
'de_samsung_pay_use', //KG이니시스 삼성페이 사용
'de_inicis_lpay_use', //KG이니시스 Lpay 사용
@@ -399,7 +400,8 @@ $sql = " update {$g5['g5_shop_default_table']}
de_kcp_mid = '{$de_kcp_mid}',
de_kcp_site_key = '{$de_kcp_site_key}',
de_inicis_mid = '{$de_inicis_mid}',
de_inicis_admin_key = '{$de_inicis_admin_key}',
de_inicis_iniapi_key = '{$de_inicis_iniapi_key}',
de_inicis_iniapi_iv = '{$de_inicis_iniapi_iv}',
de_inicis_sign_key = '{$de_inicis_sign_key}',
de_iche_use = '{$de_iche_use}',
de_sms_cont1 = '{$_POST['de_sms_cont1']}',
+1 -1
View File
@@ -45,7 +45,7 @@ $qstr1 = 'mb_name='.urlencode($mb_name);
<form name="fmember" method="get">
<div id="scp_list_find">
<label for="mb_name">회원이름</label>
<input type="text" name="mb_name" id="mb_name" value="<?php echo get_text($mb_name); ?>" class="frm_input required" required size="20">
<input type="text" name="mb_name" id="mb_name" value="<?php echo get_text($mb_name); ?>" class="frm_input" size="20">
<input type="submit" value="검색" class="btn_frmline">
</div>
<div class="tbl_head01 tbl_wrap new_win_con">
+18 -37
View File
@@ -222,46 +222,27 @@ if (in_array($_POST['ct_status'], $status_cancel)) {
break;
case 'inicis':
include_once(G5_SHOP_PATH.'/settle_inicis.inc.php');
$cancel_msg = iconv_euckr('쇼핑몰 운영자 승인 취소');
$cancel_msg = '쇼핑몰 운영자 승인 취소';
$args = array(
'paymethod' => get_type_inicis_paymethod($od['od_settle_case']),
'tid' => $od['od_tno'],
'msg' => $cancel_msg
);
/*********************
* 3. 취소 정보 설정 *
*********************/
$inipay->SetField("type", "cancel"); // 고정 (절대 수정 불가)
$inipay->SetField("mid", $default['de_inicis_mid']); // 상점아이디
/**************************************************************************************************
* admin 은 키패스워드 변수명입니다. 수정하시면 안됩니다. 1111의 부분만 수정해서 사용하시기 바랍니다.
* 키패스워드는 상점관리자 페이지(https://iniweb.inicis.com)의 비밀번호가 아닙니다. 주의해 주시기 바랍니다.
* 키패스워드는 숫자 4자리로만 구성됩니다. 이 값은 키파일 발급시 결정됩니다.
* 키패스워드 값을 확인하시려면 상점측에 발급된 키파일 안의 readme.txt 파일을 참조해 주십시오.
**************************************************************************************************/
$inipay->SetField("admin", $default['de_inicis_admin_key']); //비대칭 사용키 키패스워드
$inipay->SetField("tid", $od['od_tno']); // 취소할 거래의 거래아이디
$inipay->SetField("cancelmsg", $cancel_msg); // 취소사유
$response = inicis_tid_cancel($args);
$result = json_decode($response, true);
/****************
* 4. 취소 요청 *
****************/
$inipay->startAction();
/****************************************************************
* 5. 취소 결과 *
* *
* 결과코드 : $inipay->getResult('ResultCode') ("00"이면 취소 성공) *
* 결과내용 : $inipay->getResult('ResultMsg') (취소결과에 대한 설명) *
* 취소날짜 : $inipay->getResult('CancelDate') (YYYYMMDD) *
* 취소시각 : $inipay->getResult('CancelTime') (HHMMSS) *
* 현금영수증 취소 승인번호 : $inipay->getResult('CSHR_CancelNum') *
* (현금영수증 발급 취소시에만 리턴됨) *
****************************************************************/
$res_cd = $inipay->getResult('ResultCode');
$res_msg = $inipay->getResult('ResultMsg');
if($res_cd != '00') {
$pg_res_cd = $res_cd;
$pg_res_msg = iconv_utf8($res_msg);
if (isset($result['resultCode'])) {
if ($result['resultCode'] != '00') {
$pg_res_cd = $result['resultCode'];
$pg_res_msg = $result['resultMsg'];
}
} else {
$pg_res_cd = '';
$pg_res_msg = 'curl 로 데이터를 받지 못했습니다.';
}
break;
case 'KAKAOPAY':
include_once(G5_SHOP_PATH.'/settle_kakaopay.inc.php');
+1 -1
View File
@@ -222,7 +222,7 @@ if( function_exists('pg_setting_check') ){
<input type="radio" name="od_settle_case" value="신용카드" id="od_settle_case06" <?php echo get_checked($od_settle_case, '신용카드'); ?>>
<label for="od_settle_case06">신용카드</label>
<input type="radio" name="od_settle_case" value="간편결제" id="od_settle_case07" <?php echo get_checked($od_settle_case, '간편결제'); ?>>
<label for="od_settle_case07" data-tooltip-text="NHN_KCP 간편결제 : PAYCO, 네이버페이, 카카오페이(NHN_KCP) &#xa;LG유플러스 간편결제 : PAYNOW &#xa;KG 이니시스 간편결제 : KPAY, 삼성페이, LPAY, 카카오페이(KG이니시스)">PG간편결제</label>
<label for="od_settle_case07" data-tooltip-text="NHN_KCP 간편결제 : PAYCO, 네이버페이, 카카오페이(NHN_KCP), 애플페이(NHN_KCP) &#xa;LG유플러스 간편결제 : PAYNOW &#xa;KG 이니시스 간편결제 : KPAY, 삼성페이, LPAY, 카카오페이(KG이니시스)">PG간편결제</label>
<input type="radio" name="od_settle_case" value="KAKAOPAY" id="od_settle_case08" <?php echo get_checked($od_settle_case, 'KAKAOPAY'); ?>>
<label for="od_settle_case08">KAKAOPAY</label>
</div>
+1 -1
View File
@@ -227,7 +227,7 @@ if(!sql_query(" select pp_cash from {$g5['g5_shop_personalpay_table']} limit 1 "
<?php } ?>
<tr>
<th scope="row"><label for="pp_shop_memo">상점메모</label></th>
<td><textarea name="pp_shop_memo" id="pp_shop_memo" rows="8"><?php echo $pp['pp_shop_memo']; ?></textarea></td>
<td><textarea name="pp_shop_memo" id="pp_shop_memo" rows="8"><?php echo html_purifier($pp['pp_shop_memo']); ?></textarea></td>
</tr>
<tr>
<th scope="row"><label for="pp_use">사용</label></th>
+2
View File
@@ -66,6 +66,8 @@ while($res = sql_fetch_array($qry))
$group_name = '미분류';
else
$group_name = $tmp['fg_name'];
$res['fo_content'] = html_purifier($res['fo_content']);
$list_text .="
<li class=\"screen_list sms5_box\">
<span class=\"box_ico\"></span>
+1 -1
View File
@@ -174,7 +174,7 @@ function multi_update(sel)
<input type="checkbox" name="fo_no[]" value="<?php echo $res['fo_no']?>" id="fo_no_<?php echo $i; ?>">
</div>
<div class="li_preview">
<textarea readonly class="box_txt box_square"><?php echo $res['fo_content']?></textarea>
<textarea readonly class="box_txt box_square"><?php echo html_purifier($res['fo_content']); ?></textarea>
</div>
<div class="li_info">
<span class="sound_only">그룹 </span><b><?php echo $group_name?></b><br>
+1 -1
View File
@@ -67,7 +67,7 @@ include_once(G5_ADMIN_PATH.'/admin.head.php');
<div class="sms5_box write_wrap">
<span class="box_ico"></span>
<label for="sms_contents" id="wr_message_lbl">내용</label>
<textarea name="fo_content" id="sms_contents" class="box_txt box_square" onkeyup="byte_check('sms_contents', 'sms_bytes');" accesskey="m"><?php echo $write['fo_content']?></textarea>
<textarea name="fo_content" id="sms_contents" class="box_txt box_square" onkeyup="byte_check('sms_contents', 'sms_bytes');" accesskey="m"><?php echo html_purifier($write['fo_content']); ?></textarea>
<div id="sms_byte"><span id="sms_bytes">0</span> / 80 byte</div>
+1 -1
View File
@@ -109,7 +109,7 @@ function all_send()
<div id="con_sms" class="sms5_box">
<span class="box_ico"></span>
<textarea class="box_txt is_overview" readonly><?php echo $write['wr_message'];?></textarea>
<textarea class="box_txt is_overview" readonly><?php echo html_purifier($write['wr_message']); ?></textarea>
</div>
<?php if ($write['wr_re_total'] && !$wr_renum) { ?>
+10 -1
View File
@@ -33,7 +33,16 @@ if ($w == 'u' && is_numeric($bk_no)) {
$g5['title'] .= '수정';
}
else {
$write = array('bg_no' => (int) $bg_no);
$write = array(
'bg_no' => (int) $bg_no,
'bk_no' => 0,
'mb_id' => '',
'bk_name' => '',
'bk_hp' => '',
'bk_memo' => '',
'bk_receipt' => 1,
'bk_datetime' => ''
);
$g5['title'] .= '추가';
}
+6 -8
View File
@@ -71,18 +71,16 @@ if( count($save_group) ){ //그룹테이블 업데이트
$msg = '해당 번호를 선택한 그룹으로 '.$act.' 하였습니다.';
$opener_href = './num_book.php?page='.$page;
echo <<<HEREDOC
?>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script>
alert("$msg");
opener.document.location.href = "$opener_href";
alert("<?php echo $msg; ?>");
opener.document.location.href = "<?php echo $opener_href; ?>";
window.close();
</script>
<noscript>
<p>
"$msg"
<?php echo $msg; ?>
</p>
<a href="$opener_href">돌아가기</a>
</noscript>
HEREDOC;
<a href="<?php echo $opener_href; ?>">돌아가기</a>
</noscript>
+11 -1
View File
@@ -17,7 +17,17 @@ if($error) {
<script>
alert("<?php echo $msg; ?>");
window.close();
try {
window.close();
} catch(error) {
history.back();
}
setTimeout(function() {
if (window.history.length) {
window.history.back();
}
}, 500);
</script>
<noscript>
+2 -2
View File
@@ -5,7 +5,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
if (G5_IS_MOBILE) {
// 모바일의 경우 설정을 따르지 않는다.
include_once(G5_BBS_PATH.'/_head.php');
echo html_purifier(stripslashes($board['bo_mobile_content_head']));
echo run_replace('board_mobile_content_head', html_purifier(stripslashes($board['bo_mobile_content_head'])), $board);
} else {
// 상단 파일 경로를 입력하지 않았다면 기본 상단 파일도 include 하지 않음
if (trim($board['bo_include_head'])) {
@@ -15,5 +15,5 @@ if (G5_IS_MOBILE) {
include_once(G5_BBS_PATH.'/_head.php');
}
}
echo html_purifier(stripslashes($board['bo_content_head']));
echo run_replace('board_content_head', html_purifier(stripslashes($board['bo_content_head'])), $board);
}
+2 -2
View File
@@ -3,11 +3,11 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
// 게시판 관리의 하단 파일 경로
if (G5_IS_MOBILE) {
echo html_purifier(stripslashes($board['bo_mobile_content_tail']));
echo run_replace('board_mobile_content_tail', html_purifier(stripslashes($board['bo_mobile_content_tail'])), $board);
// 모바일의 경우 설정을 따르지 않는다.
include_once(G5_BBS_PATH.'/_tail.php');
} else {
echo html_purifier(stripslashes($board['bo_content_tail']));
echo run_replace('board_content_tail', html_purifier(stripslashes($board['bo_content_tail'])), $board);
// 하단 파일 경로를 입력하지 않았다면 기본 하단 파일도 include 하지 않음
if (trim($board['bo_include_tail'])) {
if (is_include_path_check($board['bo_include_tail'])) { //파일경로 체크
+3 -3
View File
@@ -81,20 +81,20 @@ $content_skin_url = get_skin_url('content', $co['co_skin']);
$skin_file = $content_skin_path.'/content.skin.php';
if ($is_admin)
echo '<div class="ctt_admin"><a href="'.G5_ADMIN_URL.'/contentform.php?w=u&amp;co_id='.$co_id.'" class="btn_admin btn"><span class="sound_only">내용 수정</span><i class="fa fa-cog fa-spin fa-fw"></i></a></div>';
echo run_replace('content_admin_button_html', '<div class="ctt_admin"><a href="'.G5_ADMIN_URL.'/contentform.php?w=u&amp;co_id='.$co_id.'" class="btn_admin btn"><span class="sound_only">내용 수정</span><i class="fa fa-cog fa-spin fa-fw"></i></a></div>', $co);
?>
<?php
if(is_file($skin_file)) {
$himg = G5_DATA_PATH.'/content/'.$co_id.'_h';
if (file_exists($himg)) // 상단 이미지
echo '<div id="ctt_himg" class="ctt_img"><img src="'.G5_DATA_URL.'/content/'.$co_id.'_h" alt=""></div>';
echo run_replace('content_head_image_html', '<div id="ctt_himg" class="ctt_img"><img src="'.G5_DATA_URL.'/content/'.$co_id.'_h" alt=""></div>', $co);
include($skin_file);
$timg = G5_DATA_PATH.'/content/'.$co_id.'_t';
if (file_exists($timg)) // 하단 이미지
echo '<div id="ctt_timg" class="ctt_img"><img src="'.G5_DATA_URL.'/content/'.$co_id.'_t" alt=""></div>';
echo run_replace('content_tail_image_html', '<div id="ctt_timg" class="ctt_img"><img src="'.G5_DATA_URL.'/content/'.$co_id.'_t" alt=""></div>', $co);
} else {
echo '<p>'.str_replace(G5_PATH.'/', '', $skin_file).'이 존재하지 않습니다.</p>';
}
+8
View File
@@ -22,6 +22,14 @@ $file = sql_fetch($sql);
if (!$file['bf_file'])
alert_close('파일 정보가 존재하지 않습니다.');
$nonce = isset($_REQUEST['nonce']) ? preg_replace('/[^0-9a-z\|]/i', '', $_REQUEST['nonce']) : '';
if (function_exists('download_file_nonce_is_valid') && !defined('G5_DOWNLOAD_NONCE_CHECK')){
if(! download_file_nonce_is_valid($nonce, $bo_table, $wr_id)){
alert('토큰 유효시간이 지났거나 토큰이 유효하지 않습니다.\\n브라우저를 새로고침 후 다시 시도해 주세요.', G5_URL);
}
}
// JavaScript 불가일 때
$js = (isset($_GET['js'])) ? $_GET['js'] : '';
if($js != 'on' && $board['bo_download_point'] < 0) {
+4 -2
View File
@@ -17,13 +17,15 @@ while ($row=sql_fetch_array($result))
$faq_master_list[$key] = $row;
}
$fm = array();
if (isset($fm_id) && $fm_id){
$fm_id = (int) $fm_id;
$qstr .= '&amp;fm_id=' . $fm_id; // 마스터faq key_id
$fm = $faq_master_list[$fm_id];
}
$fm = $faq_master_list[$fm_id];
if (!$fm['fm_id'])
if (! (isset($fm['fm_id']) && $fm['fm_id']))
alert('등록된 내용이 없습니다.');
$g5['title'] = $fm['fm_subject'];
+2 -2
View File
@@ -62,7 +62,7 @@ if(isset($_POST['js']) && $_POST['js'] === "on") {
and mb_id = '{$member['mb_id']}'
and bg_flag in ('good', 'nogood') ";
$row = sql_fetch($sql);
if ($row['bg_flag'])
if (isset($row['bg_flag']) && $row['bg_flag'])
{
if ($row['bg_flag'] == 'good')
$status = '추천';
@@ -127,7 +127,7 @@ if(isset($_POST['js']) && $_POST['js'] === "on") {
and mb_id = '{$member['mb_id']}'
and bg_flag in ('good', 'nogood') ";
$row = sql_fetch($sql);
if ($row['bg_flag'])
if (isset($row['bg_flag']) && $row['bg_flag'])
{
if ($row['bg_flag'] == 'good')
$status = '추천';
+5 -3
View File
@@ -8,7 +8,7 @@ $mb_password = isset($_POST['mb_password']) ? trim($_POST['mb_password']) : '';
run_event('member_login_check_before', $mb_id);
if (!$mb_id || !$mb_password)
if (!$mb_id || run_replace('check_empty_member_login_password', !$mb_password, $mb_id))
alert('회원아이디나 비밀번호가 공백이면 안됩니다.');
$mb = get_member($mb_id);
@@ -27,11 +27,13 @@ if(function_exists('social_is_login_check')){
$is_social_password_check = social_is_login_password_check($mb_id);
}
//소셜 로그인이 맞다면 패스워드를 체크하지 않습니다.
$is_need_not_password = run_replace('login_check_need_not_password', $is_social_password_check, $mb_id, $mb_password, $mb, $is_social_login);
// $is_need_not_password 변수가 true 이면 패스워드를 체크하지 않습니다.
// 가입된 회원이 아니다. 비밀번호가 틀리다. 라는 메세지를 따로 보여주지 않는 이유는
// 회원아이디를 입력해 보고 맞으면 또 비밀번호를 입력해보는 경우를 방지하기 위해서입니다.
// 불법사용자의 경우 회원아이디가 틀린지, 비밀번호가 틀린지를 알기까지는 많은 시간이 소요되기 때문입니다.
if (!$is_social_password_check && (! (isset($mb['mb_id']) && $mb['mb_id']) || !login_password_check($mb, $mb_password, $mb['mb_password'])) ) {
if (!$is_need_not_password && (! (isset($mb['mb_id']) && $mb['mb_id']) || !login_password_check($mb, $mb_password, $mb['mb_password'])) ) {
run_event('password_is_wrong', 'login', $mb);
+2 -1
View File
@@ -17,6 +17,8 @@ if( function_exists('social_member_comfirm_redirect') && (! $url || $url === 're
social_member_comfirm_redirect();
}
$url = run_replace('member_confirm_next_url', $url);
$g5['title'] = '회원 비밀번호 확인';
include_once('./_head.sub.php');
@@ -31,7 +33,6 @@ if($url){
}
}
$url = get_text($url);
include_once($member_skin_path.'/member_confirm.skin.php');
+3 -1
View File
@@ -14,9 +14,11 @@ if (!($post_mb_password && check_password($post_mb_password, $member['mb_passwor
// 회원탈퇴일을 저장
$date = date("Ymd");
$sql = " update {$g5['member_table']} set mb_leave_date = '{$date}', mb_memo = '".date('Ymd', G5_SERVER_TIME)." 탈퇴함\n".sql_real_escape_string($mb['mb_memo'])."', mb_certify = '', mb_adult = 0, mb_dupinfo = '' where mb_id = '{$member['mb_id']}' ";
$sql = " update {$g5['member_table']} set mb_leave_date = '{$date}', mb_memo = '".date('Ymd', G5_SERVER_TIME)." 탈퇴함\n".sql_real_escape_string($member['mb_memo'])."', mb_certify = '', mb_adult = 0, mb_dupinfo = '' where mb_id = '{$member['mb_id']}' ";
sql_query($sql);
run_event('member_leave', $member);
// 3.09 수정 (로그아웃)
unset($_SESSION['ss_mb_id']);
+2
View File
@@ -82,4 +82,6 @@ for($i=0; $i<$count; $i++) {
sql_query(" delete from {$g5['qa_content_table']} where qa_id = '$qa_id' ");
}
run_event('qa_delete', $tmp_array);
goto_url(G5_BBS_URL.'/qalist.php'.preg_replace('/^&amp;/', '?', $qstr));
+2 -2
View File
@@ -7,11 +7,11 @@ $qa_skin_url = get_skin_url('qa', (G5_IS_MOBILE ? $qaconfig['qa_mobile_skin'] :
if (G5_IS_MOBILE) {
// 모바일의 경우 설정을 따르지 않는다.
include_once('./_head.php');
echo conv_content($qaconfig['qa_mobile_content_head'], 1);
echo run_replace('qa_mobile_content_head', conv_content($qaconfig['qa_mobile_content_head'], 1), $qaconfig);
} else {
if($qaconfig['qa_include_head'] && is_include_path_check($qaconfig['qa_include_head']))
@include ($qaconfig['qa_include_head']);
else
include ('./_head.php');
echo conv_content($qaconfig['qa_content_head'], 1);
echo run_replace('qa_content_head', conv_content($qaconfig['qa_content_head'], 1), $qaconfig);
}
+2 -2
View File
@@ -2,11 +2,11 @@
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
if (G5_IS_MOBILE) {
echo conv_content($qaconfig['qa_mobile_content_tail'], 1);
echo run_replace('qa_mobile_content_tail', conv_content($qaconfig['qa_mobile_content_tail'], 1), $qaconfig);
// 모바일의 경우 설정을 따르지 않는다.
include_once('./_tail.php');
} else {
echo conv_content($qaconfig['qa_content_tail'], 1);
echo run_replace('qa_content_tail', conv_content($qaconfig['qa_content_tail'], 1), $qaconfig);
if($qaconfig['qa_include_tail'] && is_include_path_check($qaconfig['qa_include_tail']))
@include ($qaconfig['qa_include_tail']);
else
+26
View File
@@ -135,6 +135,32 @@ if(is_file($skin_file)) {
$answer_update_href = G5_BBS_URL.'/qawrite.php?w=u&amp;qa_id='.$answer['qa_id'].$qstr;
$answer_delete_href = G5_BBS_URL.'/qadelete.php?qa_id='.$answer['qa_id'].'&amp;token='.$token.$qstr;
}
$ss_name = 'ss_qa_view_'.$answer['qa_id'];
if(!get_session($ss_name))
set_session($ss_name, TRUE);
// 답변 첨부파일
$answer['img_file'] = array();
$answer['download_href'] = array();
$answer['download_source'] = array();
$answer['img_count'] = 0;
$answer['download_count'] = 0;
for ($i=1; $i<=2; $i++) {
if(preg_match("/\.({$config['cf_image_extension']})$/i", $answer['qa_file'.$i])) {
$attr_href = run_replace('thumb_view_image_href', G5_BBS_URL.'/view_image.php?fn='.urlencode('/'.G5_DATA_DIR.'/qa/'.$answer['qa_file'.$i]), '/'.G5_DATA_DIR.'/qa/'.$answer['qa_file'.$i], '', '', '', '');
$answer['img_file'][] = '<a href="'.$attr_href.'" target="_blank" class="view_image"><img src="'.G5_DATA_URL.'/qa/'.$answer['qa_file'.$i].'"></a>';
$answer['img_count']++;
continue;
}
if ($answer['qa_file'.$i]) {
$answer['download_href'][] = G5_BBS_URL.'/qadownload.php?qa_id='.$answer['qa_id'].'&amp;no='.$i;
$answer['download_source'][] = $answer['qa_source'.$i];
$answer['download_count']++;
}
}
}
$stx = get_text(stripslashes($stx));
+11 -6
View File
@@ -17,7 +17,7 @@ if ($w == 'u' && $is_admin == 'super') {
alert('데모 화면에서는 하실(보실) 수 없는 작업입니다.');
}
if (!chk_captcha()) {
if (run_replace('register_member_chk_captcha', !chk_captcha(), $w)) {
alert('자동등록방지 숫자가 틀렸습니다.');
}
@@ -94,10 +94,15 @@ if ($w == '' || $w == 'u') {
alert('닉네임을 올바르게 입력해 주십시오.');
}
if ($w == '' && !$mb_password)
alert('비밀번호가 넘어오지 않았습니다.');
if($w == '' && $mb_password != $mb_password_re)
alert('비밀번호가 일치하지 않습니다.');
// 비밀번호를 체크하는 상태의 기본값은 true이며, 비밀번호를 체크하지 않으려면 hook 을 통해 false 값으로 바꿔야 합니다.
$is_check_password = run_replace('register_member_password_check', true, $mb_id, $mb_nick, $mb_email, $w);
if ($is_check_password){
if ($w == '' && !$mb_password)
alert('비밀번호가 넘어오지 않았습니다.');
if ($w == '' && $mb_password != $mb_password_re)
alert('비밀번호가 일치하지 않습니다.');
}
if ($msg = empty_mb_name($mb_name)) alert($msg, "", true, true);
if ($msg = empty_mb_nick($mb_nick)) alert($msg, "", true, true);
@@ -111,7 +116,7 @@ if ($w == '' || $w == 'u') {
if ($msg = prohibit_mb_email($mb_email))alert($msg, "", true, true);
// 휴대폰 필수입력일 경우 휴대폰번호 유효성 체크
if ($config['cf_use_hp'] || ($config['cf_cert_hp'] || $config['cf_cert_simple']) && $config['cf_req_hp']) {
if (($config['cf_use_hp'] || $config['cf_cert_hp'] || $config['cf_cert_simple']) && $config['cf_req_hp']) {
if ($msg = valid_mb_hp($mb_hp)) alert($msg, "", true, true);
}
+6 -4
View File
@@ -49,9 +49,7 @@ echo '<?xml version="1.0" encoding="utf-8" ?>'."\n";
<channel>
<title><?php echo specialchars_replace($config['cf_title'].' &gt; '.$subj1.' &gt; '.$subj2); ?></title>
<link><?php echo specialchars_replace(get_pretty_url($bo_table)); ?></link>
<description>테스트 버전 0.2 (2004-04-26)</description>
<language>ko</language>
<?php
$sql = " select wr_id, wr_subject, wr_content, wr_name, wr_datetime, wr_option
from {$g5['write_prefix']}$bo_table
@@ -66,6 +64,10 @@ for ($i=0; $row=sql_fetch_array($result); $i++) {
$html = 1;
else
$html = 0;
if ($i === 0) {
echo '<description>'. specialchars_replace($subj2). ' ('. $row['wr_datetime'] .')</description>'.PHP_EOL;
}
?>
<item>
@@ -76,8 +78,8 @@ for ($i=0; $row=sql_fetch_array($result); $i++) {
<?php
$date = $row['wr_datetime'];
// rss 리더 스킨으로 호출하면 날짜가 제대로 표시되지 않음
//$date = substr($date,0,10) . "T" . substr($date,11,8) . "+09:00";
$date = date('r', strtotime($date));
$date = substr($date,0,10) . "T" . substr($date,11,8) . "+09:00";
//$date = date('r', strtotime($date)); // 구글 서치 콘솔에서 오류가 난다
?>
<dc:date><?php echo $date ?></dc:date>
</item>
+1 -1
View File
@@ -25,7 +25,7 @@ if ($stx) {
$sql = " select gr_id, bo_table, bo_read_level from {$g5['board_table']} where bo_use_search = 1 and bo_list_level <= '{$member['mb_level']}' ";
if ($gr_id)
$sql .= " and gr_id = '{$gr_id}' ";
$onetable = isset($onetable) ? $onetable : "";
$onetable = isset($onetable) ? preg_replace('/[^a-z0-9_]/i', '', $onetable) : '';
if ($onetable) // 하나의 게시판만 검색한다면
$sql .= " and bo_table = '{$onetable}' ";
$sql .= " order by bo_order, gr_id, bo_table ";
+1 -2
View File
@@ -502,6 +502,7 @@ if (isset($_REQUEST['url'])) {
$urlencode = urlencode($_SERVER['REQUEST_URI']);
if (G5_DOMAIN) {
$p = @parse_url(G5_DOMAIN);
$p['path'] = isset($p['path']) ? $p['path'] : '/';
$urlencode = G5_DOMAIN.urldecode(preg_replace("/^".urlencode($p['path'])."/", "", $urlencode));
}
}
@@ -841,5 +842,3 @@ header('Cache-Control: pre-check=0, post-check=0, max-age=0'); // HTTP/1.1
header('Pragma: no-cache'); // HTTP/1.0
run_event('common_header');
$html_process = new html_process();
+3 -6
View File
@@ -28,6 +28,7 @@ define('G5_HTTPS_DOMAIN', '');
// 그누보드 디버그바 설정입니다, 실제 서버운영시 false 로 설정해 주세요.
define('G5_DEBUG', false);
define('G5_COLLECT_QUERY', false);
// Set Database table default engine is Database default_storage_engine, If you want to use MyISAM or InnoDB, change to MyISAM or InnoDB.
// DB에 테이블 생성 시 테이블의 기본 스토리지 엔진을 설정할 수 있습니다.
@@ -233,9 +234,5 @@ define('G5_VISIT_BROWSCAP_USE', false);
*/
define('G5_IP_DISPLAY', '\\1.♡.\\3.\\4');
if ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on') ||
(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO']==='https')) { //https 통신일때 daum 주소 js
define('G5_POSTCODE_JS', '<script src="https://spi.maps.daum.net/imap/map_js_init/postcode.v2.js"></script>');
} else { //http 통신일때 daum 주소 js
define('G5_POSTCODE_JS', '<script src="http://dmaps.daum.net/map_js_init/postcode.v2.js"></script>');
}
// KAKAO 우편번호 서비스 CDN
define('G5_POSTCODE_JS', '<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js" async></script>');
+1
View File
@@ -1148,6 +1148,7 @@ box-shadow: 1px 2px 2px #eee;}
.sod_frm_mobile #m_sod_frm_paysel .inicis_lpay{background:url(../img/lpay_logo.png) no-repeat;width:35px;height:12px;overflow:hidden;text-indent:-999px;display:inline-block;background-size:100%}
.sod_frm_mobile #m_sod_frm_paysel .inicis_kakaopay{background:url(../img/kakao.png) no-repeat 50% 50% #f4dc34;border-radius:30px;height:22px;width:74px;display:inline-block;overflow:hidden;text-indent:-999px;background-size:35px auto}
.sod_frm_mobile #m_sod_frm_paysel .kakaopay_icon{background:url(../img/kakao.png) no-repeat 50% 50% #f4dc34;border-radius:30px;height:22px;width:74px;display:inline-block;overflow:hidden;text-indent:-999px;background-size:35px auto}
.sod_frm_mobile #m_sod_frm_paysel .applepay_icon{background:url(../img/ico-mobile-applepay.png) no-repeat 50% 50% #fff;border-radius:30px;height:23px;width:50px;display:inline-block;overflow:hidden;text-indent:-999px;background-size:35px auto}
.sod_frm_mobile #m_sod_frm_paysel .samsung_pay{margin-left:-23px;background:url(../img/samsungpay.png) no-repeat 24px 3px;height:25px;width:106px;display:inline-block;overflow:hidden;text-indent:-999px}
.sod_frm_mobile #sod_frm_pay{border-top:1px solid #f3f3f3}
.sod_frm_mobile #sod_frm_pay h2{margin:10px 0;font-size:1.25em}
+8 -7
View File
@@ -83,7 +83,7 @@ input[type=radio] {-webkit-appearance: radio}
/*카테고리*/
.menu {display:none;position:fixed;top:0;height:100%;z-index:99999;-webkit-backface-visibility:hidden;width:100%;background:#efefef}
.menu .menu_wr{;width:100%;height:100%;overflow-y:auto;background:#eee;position:relative;z-index:199919;
.menu .menu_wr{width:100%;height:100%;overflow-y:auto;background:#eee;position:relative;z-index:199919;
-webkit-box-shadow: 0 0 5px rgba(55,55,5,0.4));
-moz-box-shadow: 0 0 5px rgba(55,55,5,0.4));
box-shadow: 0 0 5px rgba(55,55,5,0.4);}
@@ -220,14 +220,15 @@ box-shadow: 0 0 6px rgba(0,0,0,0.2);}
#m_sod_frm_paysel h3{background:#fff;padding:15px 10px ;border:1px solid #e3e5e8;border-bottom:0}
#m_sod_frm_paysel ul {margin:0 0 ;background:#fff;padding:10px;border:1px solid #e3e5e8}
#m_sod_frm_paysel ul:after {display:block;visibility:hidden;clear:both;content:""}
#m_sod_frm_paysel li {float:left;padding:5px ;width:46%;height:25px}
#m_sod_frm_paysel li {float:left;padding:5px;width:46%;height:35px}
#m_sod_frm_paysel .KPAY{background:url('../img/kpay.png') no-repeat;width:37px;height:15px;overflow:hidden;text-indent:-999px;display:inline-block;background-size:100%}
#m_sod_frm_paysel .PAYNOW{background:url('../img/paynow.png') no-repeat;width:46px;height:15px;overflow:hidden;text-indent:-999px;display:inline-block;background-size:100%;}
#m_sod_frm_paysel .PAYCO{background:url('../img/payco.png') no-repeat 1px;width:46px;height:15px;overflow:hidden;text-indent:-999px;display:inline-block;background-size:100%;}
#m_sod_frm_paysel .PAYCO{background:url('../img/payco.png') no-repeat 1px;width:50px;height:15px;overflow:hidden;text-indent:-999px;display:inline-block;background-size:100%}
#m_sod_frm_paysel .inicis_lpay{background:url('../img/lpay_logo.png') no-repeat;width:35px;height:12px;overflow:hidden;text-indent:-999px;display:inline-block;background-size:100%;}
#m_sod_frm_paysel .inicis_kakaopay{background:url('../img/kakao.png') no-repeat 50% 50% #ffeb00;border-radius:30px;height:22px;width:74px;display:inline-block;overflow:hidden;text-indent:-999px;background-size:35px auto}
#m_sod_frm_paysel .kakaopay_icon{background:url('../img/ico-mobile-kakaopay.png') no-repeat #fff;height:15px;width:43px;display:inline-block;overflow:hidden;text-indent:-999px;background-size:35px auto}
#m_sod_frm_paysel .naverpay_icon{background:url('../img/ico-mobile-naverpay.png') no-repeat #fff;height:15px;width:40px;display:inline-block;overflow:hidden;text-indent:-999px;background-size:35px auto}
#m_sod_frm_paysel .inicis_kakaopay{background:url('../img/kakao.png') no-repeat 50% 50% #ffeb00;border-radius:30px;height:26px;width:74px;display:inline-block;overflow:hidden;text-indent:-999px;background-size:36px auto}
#m_sod_frm_paysel .kakaopay_icon{background:url('../img/ico-mobile-kakaopay.png') no-repeat #fff;height:23px;width:63px;display:inline-block;overflow:hidden;text-indent:-999px;background-size:45px auto;background-position: 10% 40%}
#m_sod_frm_paysel .naverpay_icon{background:url('../img/ico-mobile-naverpay.png') no-repeat #fff;height:23px;width:60px;display:inline-block;overflow:hidden;text-indent:-999px;background-size:45px auto;background-position: 0% 30%}
#m_sod_frm_paysel .applepay_icon{background:url('../img/ico-mobile-applepay.png') no-repeat #fff;height:30px;width:60px;display:inline-block;overflow:hidden;text-indent:-999px;background-size:43px auto}
#m_sod_frm_paysel .samsung_pay{margin-left:-23px;background:url('../img/samsungpay.png') no-repeat 24px 3px;height:25px;width:106px;display:inline-block;overflow:hidden;text-indent:-999px}
#sod_frm_pay{padding:10px;;border-top:1px solid #f3f3f3}
@@ -318,7 +319,7 @@ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
}
#sod_frm .sod_ta_wr{background: #fff}
#sod_frm .btn_confirm{;margin:0 10px 10px}
#sod_frm .btn_confirm{margin:0 10px 10px}
#sod_frm .btn_submit{width:100%;height:45px;font-size: 1.167em;font-weight: bold;margin:5px 0;border-radius:4px}
#sod_frm .btn_cancel,#sod_frm .btn01{width:100%;height:45px;line-height:43px;font-size:1.167em;font-weight: bold;padding:0;border-radius:4px}
+2 -2
View File
@@ -4,5 +4,5 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
// 자바스크립트와 CSS 파일을 새로 다운로드 하도록 파일의 끝에 년월일 지정
// 예) https://도메인/css/default.css?ver=220620
// 예) https://도메인/js/common.js?ver=220620
define('G5_CSS_VER', '220620');
define('G5_JS_VER', '220620');
define('G5_CSS_VER', '2303229');
define('G5_JS_VER', '2304171');
+5 -3
View File
@@ -71,7 +71,8 @@ include_once(G5_LIB_PATH.'/popular.lib.php');
<script>
function fsearchbox_submit(f)
{
if (f.stx.value.length < 2) {
var stx = f.stx.value.trim();
if (stx.length < 2) {
alert("검색어는 두글자 이상 입력하십시오.");
f.stx.select();
f.stx.focus();
@@ -80,8 +81,8 @@ include_once(G5_LIB_PATH.'/popular.lib.php');
// 검색에 많은 부하가 걸리는 경우 이 주석을 제거하세요.
var cnt = 0;
for (var i=0; i<f.stx.value.length; i++) {
if (f.stx.value.charAt(i) == ' ')
for (var i = 0; i < stx.length; i++) {
if (stx.charAt(i) == ' ')
cnt++;
}
@@ -91,6 +92,7 @@ include_once(G5_LIB_PATH.'/popular.lib.php');
f.stx.focus();
return false;
}
f.stx.value = stx;
return true;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

+2 -1
View File
@@ -349,7 +349,8 @@ CREATE TABLE IF NOT EXISTS `g5_shop_default` (
`de_kcp_mid` varchar(255) NOT NULL DEFAULT '',
`de_kcp_site_key` varchar(255) NOT NULL DEFAULT '',
`de_inicis_mid` varchar(255) NOT NULL DEFAULT '',
`de_inicis_admin_key` varchar(255) NOT NULL DEFAULT '',
`de_inicis_iniapi_key` varchar(30) NOT NULL DEFAULT '',
`de_inicis_iniapi_iv` varchar(30) NOT NULL DEFAULT '',
`de_inicis_sign_key` varchar(255) NOT NULL DEFAULT '',
`de_iche_use` tinyint(4) NOT NULL DEFAULT '0',
`de_easy_pay_use` tinyint(4) NOT NULL DEFAULT '0',
+16 -4
View File
@@ -268,6 +268,18 @@ if ($g5_install || $is_install === false) {
$bo_skin = ($tmp_bo_table[$i] === 'gallery') ? 'gallery' : 'basic';
if (in_array($tmp_bo_table[$i], array('gallery', 'qa'))) {
$read_bo_point = -1;
$write_bo_point = 5;
$comment_bo_point = 1;
$download_bo_point = -20;
} else {
$read_bo_point = $read_point;
$write_bo_point = $write_point;
$comment_bo_point = $comment_point;
$download_bo_point = $download_point;
}
$sql = " insert into `{$table_prefix}board`
set bo_table = '$tmp_bo_table[$i]',
gr_id = '$tmp_gr_id',
@@ -285,10 +297,10 @@ if ($g5_install || $is_install === false) {
bo_count_delete = '1',
bo_upload_level = '1',
bo_download_level = '1',
bo_read_point = '-1',
bo_write_point = '5',
bo_comment_point = '1',
bo_download_point = '-20',
bo_read_point = '$read_bo_point',
bo_write_point = '$write_bo_point',
bo_comment_point = '$comment_bo_point',
bo_download_point = '$download_bo_point',
bo_use_category = '0',
bo_category_list = '',
bo_use_sideview = '0',
+10 -2
View File
@@ -19,9 +19,17 @@ function certify_win_open(type, url, event) {
if($("input[name=veri_up_hash]").length < 1)
$("input[name=cert_no]").after('<input type="hidden" name="veri_up_hash" value="">');
if( navigator.userAgent.indexOf("Android") > - 1 || navigator.userAgent.indexOf("iPhone") > - 1 )
// iframe에서 세션공유 문제가 있어서 더 이상 iframe 을 사용하지 않습니다.
var use_iframe = false;
if(use_iframe && (navigator.userAgent.indexOf("Android") > - 1 || navigator.userAgent.indexOf("iPhone") > - 1))
{
var $frm = $(event.target.form);
if($frm.length < 1){
$frm = $(event.target).parent();
}
if($("#kcp_cert").length < 1) {
$frm.wrap('<div id="cert_info"></div>');
@@ -31,7 +39,7 @@ function certify_win_open(type, url, event) {
}
$("#cert_info")
.after('<iframe id="kcp_cert" name="kcp_cert" width="100%" height="700" frameborder="0" scrolling="no" style="display:none"></iframe>');
.after('<iframe id="kcp_cert" name="kcp_cert" width="100%" height="700" frameborder="0" scrolling="yes" style="display:none"></iframe>');
var temp_form = document.form_temp;
temp_form.target = "kcp_cert";
+3 -3
View File
@@ -355,8 +355,8 @@ var win_homepage = function(href) {
* 우편번호 창
**/
var win_zip = function(frm_name, frm_zip, frm_addr1, frm_addr2, frm_addr3, frm_jibeon) {
if(typeof daum === 'undefined'){
alert("다음 우편번호 postcode.v2.js 파일이 로드되지 않았습니다.");
if(typeof daum === "undefined"){
alert("KAKAO 우편번호 서비스 postcode.v2.js 파일이 로드되지 않았습니다.");
return false;
}
@@ -423,7 +423,7 @@ var win_zip = function(frm_name, frm_zip, frm_addr1, frm_addr2, frm_addr3, frm_j
element_wrap = document.createElement("div");
element_wrap.setAttribute("id", daum_pape_id);
element_wrap.style.cssText = 'display:none;border:1px solid;left:0;width:100%;height:300px;margin:5px 0;position:relative;-webkit-overflow-scrolling:touch;';
element_wrap.innerHTML = '<img src="//i1.daumcdn.net/localimg/localimages/07/postcode/320/close.png" id="btnFoldWrap" style="cursor:pointer;position:absolute;right:0px;top:-21px;z-index:1" class="close_daum_juso" alt="접기 버튼">';
element_wrap.innerHTML = '<img src="//t1.daumcdn.net/postcode/resource/images/close.png" id="btnFoldWrap" style="cursor:pointer;position:absolute;right:0px;top:-21px;z-index:1" class="close_daum_juso" alt="접기 버튼">';
jQuery('form[name="'+frm_name+'"]').find('input[name="'+frm_addr1+'"]').before(element_wrap);
jQuery("#"+daum_pape_id).off("click", ".close_daum_juso").on("click", ".close_daum_juso", function(e){
e.preventDefault();
+2 -2
View File
@@ -40,7 +40,7 @@ $(function() {
});
if(isAndroid) {
$(document).on("touchend", "select.it_option", function() {
$(document).on("touchend mouseup", "select.it_option", function() {
option_add = true;
});
} else {
@@ -151,7 +151,7 @@ $(function() {
});
if(isAndroid) {
$(document).on("touchend", "select.it_supply", function() {
$(document).on("touchend mouseup", "select.it_supply", function() {
supply_add = true;
});
} else {
+20 -10
View File
@@ -61,29 +61,39 @@ Class G5_object_cache {
$this->contents[$group][$key] = $data;
break;
default :
$datas = $this->etcs[$group][$key] = $data;
$this->etcs[$group][$key] = $data;
break;
}
}
/**
* cache 데이터 제거
* @param string $type
* @param string $key
* @param string $group
* @return bool
* kkigomi 님이 고쳐주심
*/
function delete($type, $key, $group = 'default')
{
if (!$this->exists($type, $key, $group)) {
return false;
}
function delete($key, $group='default') {
switch ($key) {
switch ($type) {
case 'bbs':
$datas = $this->writes;
$datas = &$this->writes;
break;
case 'content':
$datas = $this->contents;
$datas = &$this->contents;
break;
default :
$datas = $this->etcs;
default:
$datas = &$this->etcs;
break;
}
if ( ! $this->exists('bbs', $key, $group) )
return false;
unset($datas[$group][$key]);
unset( $datas[$group][$key] );
return true;
}
+299 -104
View File
@@ -23,6 +23,7 @@ function get_paging($write_pages, $cur_page, $total_page, $url, $add="")
//$url = preg_replace('#&amp;page=[0-9]*(&amp;page=)$#', '$1', $url);
$url = preg_replace('#(&amp;)?page=[0-9]*#', '', $url);
$url .= substr($url, -1) === '?' ? 'page=' : '&amp;page=';
$url = preg_replace('|[^\w\-~+_.?#=!&;,/:%@$\|*\'()\[\]\\x80-\\xff]|i', '', clean_xss_tags($url));
$str = '';
if ($cur_page > 1) {
@@ -96,6 +97,8 @@ function print_r2($var)
// header("location:URL") 을 대체
function goto_url($url)
{
run_event('goto_url', $url);
$url = str_replace("&amp;", "&", $url);
//echo "<script> location.replace('$url'); </script>";
@@ -144,11 +147,13 @@ function get_session($session_name)
// 쿠키변수 생성
function set_cookie($cookie_name, $value, $expire)
function set_cookie($cookie_name, $value, $expire, $path='/', $domain=G5_COOKIE_DOMAIN, $secure=false, $httponly=true)
{
global $g5;
$c = run_replace('set_cookie_params', array('path'=>$path, 'domain'=>$domain, 'secure'=>$secure, 'httponly'=>$httponly), $cookie_name);
setcookie(md5($cookie_name), base64_encode($value), G5_SERVER_TIME + $expire, '/', G5_COOKIE_DOMAIN);
setcookie(md5($cookie_name), base64_encode($value), G5_SERVER_TIME + $expire, $c['path'], $c['domain'], $c['secure'], $c['httponly']);
}
@@ -269,12 +274,12 @@ function url_auto_link($str)
// url에 http:// 를 붙인다
function set_http($url)
function set_http($url, $protocol="http://")
{
if (!trim($url)) return;
if (!preg_match("/^(http|https|ftp|telnet|news|mms)\:\/\//i", $url))
$url = "http://" . $url;
$url = $protocol. $url;
return $url;
}
@@ -295,6 +300,30 @@ function get_filesize($size)
return $size;
}
// 파일다운로드 링크 생성시 nonce 키 추가, 7200은 2시간동안 유효
function download_file_nonce_key($bo_table, $wr_id, $timeoutSeconds=7200)
{
$secret = get_token_encryption_key(sha1($bo_table.session_id().$wr_id));
$salt = get_random_token_string(10);
$maxTime = G5_SERVER_TIME + $timeoutSeconds;
$nonce = $salt . '|' . $maxTime . '|' . sha1($salt . $secret . $maxTime);
return $nonce;
}
// 파일다운로드시 nonce key를 체크한다.
function download_file_nonce_is_valid($nonce, $bo_table, $wr_id)
{
if (! is_string($nonce)) return false;
$secret = get_token_encryption_key(sha1($bo_table.session_id().$wr_id));
$a = explode('|', $nonce);
if (count($a) !== 3) return false;
list($salt, $maxTime, $hash) = $a;
if (sha1($salt . $secret . $maxTime) !== $hash) return false;
if (G5_SERVER_TIME > (int) $maxTime) return false;
return true;
}
// 게시글에 첨부된 파일을 얻는다. (배열로 반환)
function get_file($bo_table, $wr_id)
@@ -304,11 +333,12 @@ function get_file($bo_table, $wr_id)
$file['count'] = 0;
$sql = " select * from {$g5['board_file_table']} where bo_table = '$bo_table' and wr_id = '$wr_id' order by bf_no ";
$result = sql_query($sql);
$nonce = download_file_nonce_key($bo_table, $wr_id);
while ($row = sql_fetch_array($result))
{
$no = (int) $row['bf_no'];
$bf_content = $row['bf_content'] ? html_purifier($row['bf_content']) : '';
$file[$no]['href'] = G5_BBS_URL."/download.php?bo_table=$bo_table&amp;wr_id=$wr_id&amp;no=$no" . $qstr;
$file[$no]['href'] = G5_BBS_URL."/download.php?bo_table=$bo_table&amp;wr_id=$wr_id&amp;no=$no&amp;nonce=$nonce" . $qstr;
$file[$no]['download'] = $row['bf_download'];
// 4.00.11 - 파일 path 추가
$file[$no]['path'] = G5_DATA_URL.'/file/'.$bo_table;
@@ -572,44 +602,70 @@ function check_html_link_nofollow($type=''){
return true;
}
// http://htmlpurifier.org/
// Standards-Compliant HTML Filtering
// Safe : HTML Purifier defeats XSS with an audited whitelist
// Clean : HTML Purifier ensures standards-compliant output
// Open : HTML Purifier is open-source and highly customizable
/**
* HTMLPurifier 필터를 거친 HTML 코드를 반환
*
* http://htmlpurifier.org/
* Standards-Compliant HTML Filtering
* Safe : HTML Purifier defeats XSS with an audited whitelist
* Clean : HTML Purifier ensures standards-compliant output
* Open : HTML Purifier is open-source and highly customizable
*
* @param string $html
* @return string
*/
function html_purifier($html)
{
$f = file(G5_PLUGIN_PATH.'/htmlpurifier/safeiframe.txt');
global $is_admin, $write;
$f = file(G5_PLUGIN_PATH . '/htmlpurifier/safeiframe.txt');
$domains = array();
foreach($f as $domain){
foreach ($f as $domain) {
// 첫행이 # 이면 주석 처리
if (!preg_match("/^#/", $domain)) {
$domain = trim($domain);
if ($domain)
if ($domain) {
array_push($domains, $domain);
}
}
}
// 내 도메인도 추가
array_push($domains, $_SERVER['HTTP_HOST'].'/');
$safeiframe = implode('|', $domains);
// 글쓴이가 관리자인 경우에만 현재 사이트 도메인을 허용
if (isset($write['mb_id']) && $write['mb_id'] && is_admin($write['mb_id'])) {
array_push($domains, $_SERVER['HTTP_HOST'] . '/');
}
$safeiframe = implode('|', run_replace('html_purifier_safeiframes', $domains, $html));
include_once(G5_PLUGIN_PATH . '/htmlpurifier/HTMLPurifier.standalone.php');
include_once(G5_PLUGIN_PATH . '/htmlpurifier/extend.video.php');
include_once(G5_PLUGIN_PATH.'/htmlpurifier/HTMLPurifier.standalone.php');
include_once(G5_PLUGIN_PATH.'/htmlpurifier/extend.video.php');
$config = HTMLPurifier_Config::createDefault();
// data/cache 디렉토리에 CSS, HTML, URI 디렉토리 등을 만든다.
$config->set('Cache.SerializerPath', G5_DATA_PATH.'/cache');
$config->set('Cache.SerializerPath', G5_DATA_PATH . '/cache');
$config->set('HTML.SafeEmbed', false);
$config->set('HTML.SafeObject', false);
$config->set('Output.FlashCompat', false);
$config->set('HTML.SafeIframe', true);
if( (function_exists('check_html_link_nofollow') && check_html_link_nofollow('html_purifier')) ){
$config->set('HTML.Nofollow', true); // rel=nofollow 으로 스팸유입을 줄임
if ((function_exists('check_html_link_nofollow') && check_html_link_nofollow('html_purifier'))) {
$config->set('HTML.Nofollow', true); // rel=nofollow 으로 스팸유입을 줄임
}
$config->set('URI.SafeIframeRegexp','%^(https?:)?//('.$safeiframe.')%');
$config->set('URI.SafeIframeRegexp', '%^(https?:)?//(' . $safeiframe . ')%');
$config->set('Attr.AllowedFrameTargets', array('_blank'));
//유튜브, 비메오 전체화면 가능하게 하기
$config->set('Filter.Custom', array(new HTMLPurifier_Filter_Iframevideo()));
/*
* HTMLPurifier 설정을 변경할 수 있는 Event hook
* 리스너에서는 첫번째 인자($config)로 `HTMLPurifier_Config` 객체를 받을 수 있다
*/
run_event('html_purifier_config', $config, array(
'html' => $html,
'write' => $write,
'is_admin' => $is_admin
)
);
$purifier = new HTMLPurifier($config);
return run_replace('html_purifier_result', $purifier->purify($html), $purifier, $html);
}
@@ -737,7 +793,7 @@ function get_next_num($table)
$sql = " select min(wr_num) as min_wr_num from $table ";
$row = sql_fetch($sql);
// 가장 작은 번호에 1을 빼서 넘겨줌
return (int)($row['min_wr_num'] - 1);
return isset($row['min_wr_num']) ? (int)($row['min_wr_num'] - 1) : -1;
}
@@ -834,7 +890,10 @@ function subject_sort_link($col, $query_string='', $flag='asc')
$arr_query[] = 'page='.$page;
$qstr = implode("&amp;", $arr_query);
return "<a href=\"{$_SERVER['SCRIPT_NAME']}?{$qstr}\">";
parse_str(html_entity_decode($qstr), $qstr_array);
$url = short_url_clean(get_params_merge_url($qstr_array));
return '<a href="'.$url.'">';
}
@@ -1298,87 +1357,138 @@ function get_sideview($mb_id, $name='', $email='', $homepage='')
global $g5;
global $bo_table, $sca, $is_admin, $member;
$email = get_string_encrypt($email);
$homepage = set_http(clean_xss_tags($homepage));
static $cache = array();
$name = get_text($name, 0, true);
$email = get_text($email);
$name = get_text($name, 0, true);
if (isset($cache['id:' . $mb_id]) && $cache['id:' . $mb_id]) {
return $cache['id:' . $mb_id];
} else if (
isset($name)
&& isset($cache['name:' . $name])
&& $cache['name:' . $name]
) {
return $cache['name:' . $name];
}
$email = get_string_encrypt($email);
$email = get_text($email);
$homepage = set_http(clean_xss_tags($homepage));
$homepage = get_text($homepage);
$tmp_name = "";
$en_mb_id = $mb_id;
$name_tag = array();
$menus = array();
if ($mb_id) {
//$tmp_name = "<a href=\"".G5_BBS_URL."/profile.php?mb_id=".$mb_id."\" class=\"sv_member\" title=\"$name 자기소개\" rel="nofollow" target=\"_blank\" onclick=\"return false;\">$name</a>";
$tmp_name = '<a href="'.G5_BBS_URL.'/profile.php?mb_id='.$mb_id.'" class="sv_member" title="'.$name.' 자기소개" target="_blank" rel="nofollow" onclick="return false;">';
// $tmp_name = "<a href=\"".G5_BBS_URL."/profile.php?mb_id=".$mb_id."\" class=\"sv_member\" title=\"$name 자기소개\" rel="nofollow" target=\"_blank\" onclick=\"return false;\">$name</a>";
$name_tag_open = '<a href="' . G5_BBS_URL . '/profile.php?mb_id=' . $mb_id . '" class="sv_member" title="' . $name . ' 자기소개" target="_blank" rel="nofollow" onclick="return false;">';
if ($config['cf_use_member_icon']) {
$mb_dir = substr($mb_id,0,2);
$icon_file = G5_DATA_PATH.'/member/'.$mb_dir.'/'.get_mb_icon_name($mb_id).'.gif';
$mb_dir = substr($mb_id, 0, 2);
$icon_file = G5_DATA_PATH . '/member/' . $mb_dir . '/' . get_mb_icon_name($mb_id) . '.gif';
if (file_exists($icon_file)) {
$icon_filemtile = (defined('G5_USE_MEMBER_IMAGE_FILETIME') && G5_USE_MEMBER_IMAGE_FILETIME) ? '?'.filemtime($icon_file) : '';
$icon_filemtile = (defined('G5_USE_MEMBER_IMAGE_FILETIME') && G5_USE_MEMBER_IMAGE_FILETIME) ? '?' . filemtime($icon_file) : '';
$width = $config['cf_member_icon_width'];
$height = $config['cf_member_icon_height'];
$icon_file_url = G5_DATA_URL.'/member/'.$mb_dir.'/'.get_mb_icon_name($mb_id).'.gif'.$icon_filemtile;
$tmp_name .= '<span class="profile_img"><img src="'.$icon_file_url.'" width="'.$width.'" height="'.$height.'" alt=""></span>';
$icon_file_url = G5_DATA_URL . '/member/' . $mb_dir . '/' . get_mb_icon_name($mb_id) . '.gif' . $icon_filemtile;
$name_tag['profile_image'] = '<span class="profile_img"><img src="' . $icon_file_url . '" width="' . $width . '" height="' . $height . '" alt=""></span>';
if ($config['cf_use_member_icon'] == 2) // 회원아이콘+이름
$tmp_name = $tmp_name.' '.$name;
// 회원아이콘+이름
if ($config['cf_use_member_icon'] == 2) {
$name_tag['name'] = $name;
}
} else {
if( defined('G5_THEME_NO_PROFILE_IMG') ){
$tmp_name .= G5_THEME_NO_PROFILE_IMG;
} else if( defined('G5_NO_PROFILE_IMG') ){
$tmp_name .= G5_NO_PROFILE_IMG;
if (defined('G5_THEME_NO_PROFILE_IMG')) {
$name_tag['profile_image'] = G5_THEME_NO_PROFILE_IMG;
} else if (defined('G5_NO_PROFILE_IMG')) {
$name_tag['profile_image'] = G5_NO_PROFILE_IMG;
}
// 회원아이콘+이름
if ($config['cf_use_member_icon'] == 2) {
$name_tag['name'] = $name;
}
if ($config['cf_use_member_icon'] == 2) // 회원아이콘+이름
$tmp_name = $tmp_name.' '.$name;
}
} else {
$tmp_name = $tmp_name.' '.$name;
$name_tag['name'] = $name;
}
$tmp_name .= '</a>';
$title_mb_id = '['.$mb_id.']';
} else {
if(!$bo_table)
if (!$bo_table) {
return $name;
}
$tmp_name = '<a href="'.get_pretty_url($bo_table, '', 'sca='.$sca.'&amp;sfl=wr_name,1&amp;stx='.$name).'" title="'.$name.' 이름으로 검색" class="sv_guest" rel="nofollow" onclick="return false;">'.$name.'</a>';
$title_mb_id = '[비회원]';
$name_tag_open = '<a href="' . get_pretty_url($bo_table, '', 'sca=' . $sca . '&amp;sfl=wr_name,1&amp;stx=' . $name) . '" title="' . $name . ' 이름으로 검색" class="sv_guest" rel="nofollow" onclick="return false;">';
$name_tag['name'] = $name;
}
$str = "<span class=\"sv_wrap\">\n";
$str .= $tmp_name."\n";
if ($mb_id) {
$menus['memo'] = '<a href="' . G5_BBS_URL . '/memo_form.php?me_recv_mb_id=' . $mb_id . '" rel="nofollow" onclick="win_memo(this.href); return false;">쪽지보내기</a>';
}
$str2 = "<span class=\"sv\">\n";
if($mb_id)
$str2 .= "<a href=\"".G5_BBS_URL."/memo_form.php?me_recv_mb_id=".$mb_id."\" onclick=\"win_memo(this.href); return false;\">쪽지보내기</a>\n";
if($email)
$str2 .= "<a href=\"".G5_BBS_URL."/formmail.php?mb_id=".$mb_id."&amp;name=".urlencode($name)."&amp;email=".$email."\" onclick=\"win_email(this.href); return false;\">메일보내기</a>\n";
if($homepage)
$str2 .= "<a href=\"".$homepage."\" target=\"_blank\">홈페이지</a>\n";
if($mb_id)
$str2 .= "<a href=\"".G5_BBS_URL."/profile.php?mb_id=".$mb_id."\" onclick=\"win_profile(this.href); return false;\">자기소개</a>\n";
if($bo_table) {
if($mb_id) {
$str2 .= "<a href=\"".get_pretty_url($bo_table, '', "sca=".$sca."&amp;sfl=mb_id,1&amp;stx=".$en_mb_id)."\">아이디로 검색</a>\n";
if ($email) {
$menus['email'] = '<a href="' . G5_BBS_URL . '/formmail.php?mb_id=' . $mb_id . '&amp;name=' . urlencode($name) . '&amp;email=' . $email . '" onclick="win_email(this.href); return false;" rel="nofollow">메일보내기</a>';
}
if ($homepage) {
$menus['homepage'] = '<a href="' . $homepage . '" rel="nofollow noopener" target="_blank">홈페이지</a>';
}
if ($mb_id) {
$menus['profile'] = '<a href="' . G5_BBS_URL . '/profile.php?mb_id=' . $mb_id . '" onclick="win_profile(this.href); return false;" rel="nofollow">자기소개</a>';
}
if ($bo_table) {
if ($mb_id) {
$menus['search_id'] = '<a href="' . get_pretty_url($bo_table, '', 'sca=' . $sca . '&amp;sfl=mb_id,1&amp;stx=' . $en_mb_id) . '" rel="nofollow">아이디로 검색</a>';
} else {
$str2 .= "<a href=\"".get_pretty_url($bo_table, '', "sca=".$sca."&amp;sfl=wr_name,1&amp;stx=".$name)."\">이름으로 검색</a>\n";
$menus['search_name'] = '<a href="' . get_pretty_url($bo_table, '', 'sca=' . $sca . '&amp;sfl=wr_name,1&amp;stx=' . $name) . '" rel="nofollow">이름으로 검색</a>';
}
}
if($mb_id)
$str2 .= "<a href=\"".G5_BBS_URL."/new.php?mb_id=".$mb_id."\" class=\"link_new_page\" onclick=\"check_goto_new(this.href, event);\">전체게시물</a>\n";
if($is_admin == "super" && $mb_id) {
$str2 .= "<a href=\"".G5_ADMIN_URL."/member_form.php?w=u&amp;mb_id=".$mb_id."\" target=\"_blank\">회원정보변경</a>\n";
$str2 .= "<a href=\"".G5_ADMIN_URL."/point_list.php?sfl=mb_id&amp;stx=".$mb_id."\" target=\"_blank\">포인트내역</a>\n";
}
$str2 .= "</span>\n";
$str .= $str2;
$str .= "\n<noscript class=\"sv_nojs\">".$str2."</noscript>";
if ($mb_id) {
$menus['search_all'] = '<a href="' . G5_BBS_URL . '/new.php?mb_id=' . $mb_id . '" class="link_new_page" onclick="check_goto_new(this.href, event);" rel="nofollow">전체게시물</a>';
if ($is_admin == 'super') {
$menus['admin_member_modify'] = '<a href="' . G5_ADMIN_URL . '/member_form.php?w=u&amp;mb_id=' . $mb_id . '" target="_blank" rel="nofollow">회원정보변경</a>';
$menus['admin_member_point'] = '<a href="' . G5_ADMIN_URL . '/point_list.php?sfl=mb_id&amp;stx=' . $mb_id . '" target="_blank" rel="nofollow">포인트내역</a>';
}
}
$name_tag_close = '</a>';
$items = run_replace('member_sideview_items', array(
'name_tag_open' => $name_tag_open,
'name_tag_close' => $name_tag_close,
'name_tag' => $name_tag,
'menus' => $menus
), array(
'mb_id' => $mb_id,
'name' => $name,
'bo_table' => $bo_table,
)
);
$str = '<span class="sv_wrap">';
$str .= $items['name_tag_open'] . implode(' ', $items['name_tag']) . $items['name_tag_close'];
$str2 = '<span class="sv">';
$str2 .= implode("\n", $items['menus']);
$str2 .= '</span>';
$str .= $str2;
$str .= '<noscript class="sv_nojs">' . $str2 . '</noscript>';
$str .= "</span>";
if ($mb_id) {
$cache['id:' . $mb_id] = $str;
} else {
$cache['name:' . $name] = $str;
}
return $str;
}
@@ -1596,7 +1706,7 @@ function sql_query($sql, $error=G5_DISPLAY_SQL_ERROR, $link=null)
$is_debug = get_permission_debug_show();
$start_time = $is_debug ? get_microtime() : 0;
$start_time = ($is_debug || G5_COLLECT_QUERY) ? get_microtime() : 0;
if(function_exists('mysqli_query') && G5_MYSQLI_USE) {
if ($error) {
@@ -1616,18 +1726,68 @@ function sql_query($sql, $error=G5_DISPLAY_SQL_ERROR, $link=null)
}
}
$end_time = $is_debug ? get_microtime() : 0;
$end_time = ($is_debug || G5_COLLECT_QUERY) ? get_microtime() : 0;
$error = null;
$source = array();
if ($is_debug || G5_COLLECT_QUERY) {
if(function_exists('mysqli_error') && G5_MYSQLI_USE) {
$error = array(
'error_code' => mysqli_errno($link),
'error_message' => mysqli_error($link),
);
} else {
$error = array(
'error_code' => mysql_errno($link),
'error_message' => mysql_error($link),
);
}
$stack = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
$found = false;
foreach ($stack as $index => $trace) {
if ($trace['function'] === 'sql_query') {
$found = true;
}
if (isset($stack[$index + 1]) && $stack[$index + 1]['function'] === 'sql_fetch') {
continue;
}
if ($found) {
$trace['file'] = str_replace($_SERVER['DOCUMENT_ROOT'], '', $trace['file']);
$source['file'] = $trace['file'];
$source['line'] = $trace['line'];
$parent = (isset($stack[$index + 1])) ? $stack[$index + 1] : array();
if (isset($parent['function'])) {
if (in_array($trace['function'], array('sql_query', 'sql_fetch')) && (isset($parent['function']) && !in_array($parent['function'], array('sql_fetch', 'include', 'include_once', 'require', 'require_once')))) {
if (isset($parent['class']) && $parent['class']) {
$source['class'] = $parent['class'];
$source['function'] = $parent['function'];
$source['type'] = $parent['type'];
} else {
$source['function'] = $parent['function'];
}
}
}
break;
}
}
if($result && $is_debug) {
// 여기에 실행한 sql문을 화면에 표시하는 로직 넣기
$g5_debug['sql'][] = array(
'sql' => $sql,
'result' => $result,
'success' => !!$result,
'source' => $source,
'error_code' => $error['error_code'],
'error_message' => $error['error_message'],
'start_time' => $start_time,
'end_time' => $end_time,
);
);
}
run_event('sql_query_after', $result, $sql, $start_time, $end_time);
run_event('sql_query_after', $result, $sql, $start_time, $end_time, $error, $source);
return $result;
}
@@ -2484,37 +2644,61 @@ function get_skin_javascript($skin_path, $dir='')
return $str;
}
if (!function_exists('get_called_class')) {
function get_called_class() {
$bt = debug_backtrace();
$lines = file($bt[1]['file']);
preg_match(
'/([a-zA-Z0-9\_]+)::'.$bt[1]['function'].'/',
$lines[$bt[1]['line']-1],
$matches
);
return $matches[1];
}
}
function get_html_process_cls() {
return html_process::getInstance();
}
// HTML 마지막 처리
function html_end()
{
global $html_process;
return $html_process->run();
return get_html_process_cls()->run();
}
function add_stylesheet($stylesheet, $order=0)
{
global $html_process;
if(trim($stylesheet) && method_exists($html_process, 'merge_stylesheet') )
$html_process->merge_stylesheet($stylesheet, $order);
if(trim($stylesheet))
get_html_process_cls()->merge_stylesheet($stylesheet, $order);
}
function add_javascript($javascript, $order=0)
{
global $html_process;
if(trim($javascript) && method_exists($html_process, 'merge_javascript') )
$html_process->merge_javascript($javascript, $order);
if(trim($javascript))
get_html_process_cls()->merge_javascript($javascript, $order);
}
class html_process {
protected $css = array();
protected $js = array();
protected static $id = '0';
private static $instances = array();
protected static $is_end = '0';
protected static $css = array();
protected static $js = array();
function merge_stylesheet($stylesheet, $order)
public static function getInstance($id = '0')
{
$links = $this->css;
self::$id = $id;
if (isset(self::$instances[self::$id])) {
return self::$instances[self::$id];
}
$calledClass = get_called_class();
return self::$instances[self::$id] = new $calledClass;
}
public static function merge_stylesheet($stylesheet, $order)
{
$links = self::$css;
$is_merge = true;
foreach($links as $link) {
@@ -2525,12 +2709,12 @@ class html_process {
}
if($is_merge)
$this->css[] = array($order, $stylesheet);
self::$css[] = array($order, $stylesheet);
}
function merge_javascript($javascript, $order)
public static function merge_javascript($javascript, $order)
{
$scripts = $this->js;
$scripts = self::$js;
$is_merge = true;
foreach($scripts as $script) {
@@ -2541,13 +2725,17 @@ class html_process {
}
if($is_merge)
$this->js[] = array($order, $javascript);
self::$js[] = array($order, $javascript);
}
function run()
public static function run()
{
global $config, $g5, $member;
if (self::$is_end) return; // 여러번 호출해도 한번만 실행되게 합니다.
self::$is_end = 1;
// 현재접속자 처리
$tmp_sql = " select count(*) as cnt from {$g5['login_table']} where lo_ip = '{$_SERVER['REMOTE_ADDR']}' ";
$tmp_row = sql_fetch($tmp_sql);
@@ -2572,7 +2760,7 @@ class html_process {
ob_end_clean();
$stylesheet = '';
$links = $this->css;
$links = self::$css;
if(!empty($links)) {
foreach ($links as $key => $row) {
@@ -2596,7 +2784,7 @@ class html_process {
}
$javascript = '';
$scripts = $this->js;
$scripts = self::$js;
$php_eol = '';
unset($order);
@@ -2630,7 +2818,12 @@ class html_process {
<link rel="stylesheet" href="default.css">
밑으로 스킨의 스타일시트가 위치하도록 하게 한다.
*/
$buffer = preg_replace('#(</title>[^<]*<link[^>]+>)#', "$1$stylesheet", $buffer);
$title_find_pattern = '#(</title>[^<]*<link[^>]+>)#';
if (preg_match($title_find_pattern, $buffer)) {
$buffer = preg_replace($title_find_pattern, "$1$stylesheet", $buffer);
} else { // 패턴이 없다면 자바스크립트 코드 위에 위치하게 합니다.
$javascript = $stylesheet. PHP_EOL. $javascript;
}
/*
</head>
@@ -2653,6 +2846,8 @@ class html_process {
$buffer = preg_replace('#(<title[^>]*>.*?</title>)#', "$meta_tag{$nl}$1", $buffer);
}
$buffer = run_replace('html_process_buffer', $buffer);
return $buffer;
}
}
+2 -2
View File
@@ -195,6 +195,7 @@ class LMS {
foreach($this->Data as $puts) {
fputs($fsocket, $puts);
$gets = '';
while(!$gets) { $gets = fgets($fsocket,32); }
$json = json_decode(substr($puts,6), true);
@@ -206,7 +207,6 @@ class LMS {
$this->Result[$dest] = $dest.":Error(".substr($gets,6,2).")";
if(substr($gets,6,2) >= "80") break;
}
$gets = "";
}
fclose($fsocket);
@@ -217,6 +217,7 @@ class LMS {
foreach($this->Data as $puts) {
fputs($fsocket, $puts);
$gets = '';
while(!$gets) { $gets = fgets($fsocket,30); }
$dest = substr($puts,26,11);
if (substr($gets,0,19) == "0223 00".$dest) {
@@ -224,7 +225,6 @@ class LMS {
} else {
$this->Result[$dest] = $dest.":Error(".substr($gets,6,2).")";
}
$gets = "";
}
fclose($fsocket);
+2 -2
View File
@@ -198,6 +198,7 @@ class SMS {
foreach($this->Data as $puts) {
fputs($fsocket, $puts);
$gets = '';
while(!$gets) { $gets = fgets($fsocket,32); }
$json = json_decode(substr($puts,6), true);
@@ -209,7 +210,6 @@ class SMS {
$this->Result[$dest] = $dest.":Error(".substr($gets,6,2).")";
if(substr($gets,6,2) >= "80") break;
}
$gets = "";
}
fclose($fsocket);
@@ -226,10 +226,10 @@ class SMS {
foreach($this->Data as $puts) {
$dest = substr($puts,26,11);
fputs($fp,$puts);
$gets = '';
while(!$gets) { $gets=fgets($fp,30); }
if (substr($gets,0,19)=="0223 00".$dest) $this->Result[]=$dest.":".substr($gets,19,10);
else $this->Result[$dest]=$dest.":Error";
$gets="";
}
fclose($fp);
}
+4 -2
View File
@@ -2625,10 +2625,10 @@ function make_order_field($data, $exclude)
if(is_array($value)) {
foreach($value as $k=>$v) {
$field .= '<input type="hidden" name="'.$key.'['.$k.']" value="'.$v.'">'.PHP_EOL;
$field .= '<input type="hidden" name="'.$key.'['.$k.']" value="'.get_text($v).'">'.PHP_EOL;
}
} else {
$field .= '<input type="hidden" name="'.$key.'" value="'.$value.'">'.PHP_EOL;
$field .= '<input type="hidden" name="'.$key.'" value="'.get_text($value).'">'.PHP_EOL;
}
}
@@ -2769,6 +2769,8 @@ function check_pay_name_replace($payname, $od=array(), $is_client=0){
return '네이버페이_NHNKCP'.$add_str;
} else if( isset($od['od_other_pay_type']) && ($od['od_other_pay_type'] === 'OT13' || $od['od_other_pay_type'] === 'NHNKCP_KAKAOMONEY') ){
return '카카오페이_NHNKCP'.$add_str;
} else if( isset($od['od_other_pay_type']) && $od['od_other_pay_type'] === 'OT21' ){
return '애플페이_NHNKCP'.$add_str;
}
return 'PAYCO'.$add_str;
+1
View File
@@ -142,6 +142,7 @@ function shop_short_url_clean($string_url, $url, $page_name, $array_page_names){
$add_param .= $add_param ? '&amp;'.$add_qry : '?'.$add_qry;
}
$return_url = '';
foreach($s as $k => $v) { $return_url .= '/'.$v; }
return $host.$return_url.$add_param.$fragment;
+38 -32
View File
@@ -298,63 +298,69 @@ function seo_title_update($db_table, $pk_id, $type='bbs'){
}
}
function get_nginx_conf_rules($return_string=false){
function get_nginx_conf_rules($return_string = false)
{
$get_path_url = parse_url(G5_URL);
$base_path = isset($get_path_url['path']) ? $get_path_url['path'].'/' : '/';
$base_path = isset($get_path_url['path']) ? $get_path_url['path'] . '/' : '/';
$rules = array();
$rules[] = '#### '.G5_VERSION.' nginx rules BEGIN #####';
$rules[] = 'if (!-e $request_filename){';
$rules[] = '#### ' . G5_VERSION . ' nginx rules BEGIN #####';
if( $add_rules = run_replace('add_nginx_conf_rules', '', $get_path_url, $base_path, $return_string) ){
if ($add_rules = run_replace('add_nginx_conf_pre_rules', '', $get_path_url, $base_path, $return_string)) {
$rules[] = $add_rules;
}
$rules[] = "rewrite ^{$base_path}content/([0-9a-zA-Z_]+)$ {$base_path}".G5_BBS_DIR."/content.php?co_id=$1&rewrite=1 break;";
$rules[] = "rewrite ^{$base_path}content/([^/]+)/$ {$base_path}".G5_BBS_DIR."/content.php?co_seo_title=$1&rewrite=1 break;";
$rules[] = "rewrite ^{$base_path}rss/([0-9a-zA-Z_]+)$ {$base_path}".G5_BBS_DIR."/rss.php?bo_table=$1 break;";
$rules[] = "rewrite ^{$base_path}([0-9a-zA-Z_]+)$ {$base_path}".G5_BBS_DIR."/board.php?bo_table=$1&rewrite=1 break;";
$rules[] = "rewrite ^{$base_path}([0-9a-zA-Z_]+)/write$ {$base_path}".G5_BBS_DIR."/write.php?bo_table=$1&rewrite=1 break;";
$rules[] = "rewrite ^{$base_path}([0-9a-zA-Z_]+)/([^/]+)/$ {$base_path}".G5_BBS_DIR."/board.php?bo_table=$1&wr_seo_title=$2&rewrite=1 break;";
$rules[] = "rewrite ^{$base_path}([0-9a-zA-Z_]+)/([0-9]+)$ {$base_path}".G5_BBS_DIR."/board.php?bo_table=$1&wr_id=$2&rewrite=1 break;";
$rules[] = 'if (!-e $request_filename) {';
if ($add_rules = run_replace('add_nginx_conf_rules', '', $get_path_url, $base_path, $return_string)) {
$rules[] = $add_rules;
}
$rules[] = "rewrite ^{$base_path}content/([0-9a-zA-Z_]+)$ {$base_path}" . G5_BBS_DIR . "/content.php?co_id=$1&rewrite=1 break;";
$rules[] = "rewrite ^{$base_path}content/([^/]+)/$ {$base_path}" . G5_BBS_DIR . "/content.php?co_seo_title=$1&rewrite=1 break;";
$rules[] = "rewrite ^{$base_path}rss/([0-9a-zA-Z_]+)$ {$base_path}" . G5_BBS_DIR . "/rss.php?bo_table=$1 break;";
$rules[] = "rewrite ^{$base_path}([0-9a-zA-Z_]+)$ {$base_path}" . G5_BBS_DIR . "/board.php?bo_table=$1&rewrite=1 break;";
$rules[] = "rewrite ^{$base_path}([0-9a-zA-Z_]+)/write$ {$base_path}" . G5_BBS_DIR . "/write.php?bo_table=$1&rewrite=1 break;";
$rules[] = "rewrite ^{$base_path}([0-9a-zA-Z_]+)/([^/]+)/$ {$base_path}" . G5_BBS_DIR . "/board.php?bo_table=$1&wr_seo_title=$2&rewrite=1 break;";
$rules[] = "rewrite ^{$base_path}([0-9a-zA-Z_]+)/([0-9]+)$ {$base_path}" . G5_BBS_DIR . "/board.php?bo_table=$1&wr_id=$2&rewrite=1 break;";
$rules[] = '}';
$rules[] = '#### '.G5_VERSION.' nginx rules END #####';
$rules[] = '#### ' . G5_VERSION . ' nginx rules END #####';
return $return_string ? implode("\n", $rules) : $rules;
}
function get_mod_rewrite_rules($return_string=false){
function get_mod_rewrite_rules($return_string = false)
{
$get_path_url = parse_url(G5_URL);
$base_path = isset($get_path_url['path']) ? $get_path_url['path'].'/' : '/';
$base_path = isset($get_path_url['path']) ? $get_path_url['path'] . '/' : '/';
$rules = array();
$rules[] = '#### '.G5_VERSION.' rewrite BEGIN #####';
$rules[] = '#### ' . G5_VERSION . ' rewrite BEGIN #####';
$rules[] = '<IfModule mod_rewrite.c>';
$rules[] = 'RewriteEngine On';
$rules[] = 'RewriteBase '.$base_path;
$rules[] = 'RewriteBase ' . $base_path;
if ($add_rules = run_replace('add_mod_rewrite_pre_rules', '', $get_path_url, $base_path, $return_string)) {
$rules[] = $add_rules;
}
$rules[] = 'RewriteCond %{REQUEST_FILENAME} -f [OR]';
$rules[] = 'RewriteCond %{REQUEST_FILENAME} -d';
$rules[] = 'RewriteRule ^ - [L]';
if( $add_rules = run_replace('add_mod_rewrite_rules', '', $get_path_url, $base_path, $return_string) ){
if ($add_rules = run_replace('add_mod_rewrite_rules', '', $get_path_url, $base_path, $return_string)) {
$rules[] = $add_rules;
}
$rules[] = 'RewriteRule ^content/([0-9a-zA-Z_]+)$ '.G5_BBS_DIR.'/content.php?co_id=$1&rewrite=1 [QSA,L]';
$rules[] = 'RewriteRule ^content/([^/]+)/$ '.G5_BBS_DIR.'/content.php?co_seo_title=$1&rewrite=1 [QSA,L]';
$rules[] = 'RewriteRule ^rss/([0-9a-zA-Z_]+)$ '.G5_BBS_DIR.'/rss.php?bo_table=$1 [QSA,L]';
$rules[] = 'RewriteRule ^([0-9a-zA-Z_]+)$ '.G5_BBS_DIR.'/board.php?bo_table=$1&rewrite=1 [QSA,L]';
$rules[] = 'RewriteRule ^([0-9a-zA-Z_]+)/([^/]+)/$ '.G5_BBS_DIR.'/board.php?bo_table=$1&wr_seo_title=$2&rewrite=1 [QSA,L]';
$rules[] = 'RewriteRule ^([0-9a-zA-Z_]+)/write$ '.G5_BBS_DIR.'/write.php?bo_table=$1&rewrite=1 [QSA,L]';
$rules[] = 'RewriteRule ^([0-9a-zA-Z_]+)/([0-9]+)$ '.G5_BBS_DIR.'/board.php?bo_table=$1&wr_id=$2&rewrite=1 [QSA,L]';
$rules[] = 'RewriteRule ^content/([0-9a-zA-Z_]+)$ ' . G5_BBS_DIR . '/content.php?co_id=$1&rewrite=1 [QSA,L]';
$rules[] = 'RewriteRule ^content/([^/]+)/$ ' . G5_BBS_DIR . '/content.php?co_seo_title=$1&rewrite=1 [QSA,L]';
$rules[] = 'RewriteRule ^rss/([0-9a-zA-Z_]+)$ ' . G5_BBS_DIR . '/rss.php?bo_table=$1 [QSA,L]';
$rules[] = 'RewriteRule ^([0-9a-zA-Z_]+)$ ' . G5_BBS_DIR . '/board.php?bo_table=$1&rewrite=1 [QSA,L]';
$rules[] = 'RewriteRule ^([0-9a-zA-Z_]+)/([^/]+)/$ ' . G5_BBS_DIR . '/board.php?bo_table=$1&wr_seo_title=$2&rewrite=1 [QSA,L]';
$rules[] = 'RewriteRule ^([0-9a-zA-Z_]+)/write$ ' . G5_BBS_DIR . '/write.php?bo_table=$1&rewrite=1 [QSA,L]';
$rules[] = 'RewriteRule ^([0-9a-zA-Z_]+)/([0-9]+)$ ' . G5_BBS_DIR . '/board.php?bo_table=$1&wr_id=$2&rewrite=1 [QSA,L]';
$rules[] = '</IfModule>';
$rules[] = '#### '.G5_VERSION.' rewrite END #####';
$rules[] = '#### ' . G5_VERSION . ' rewrite END #####';
return $return_string ? implode("\n", $rules) : $rules;
}
+5 -3
View File
@@ -95,7 +95,8 @@ include_once(G5_LIB_PATH.'/popular.lib.php');
<script>
function fsearchbox_submit(f)
{
if (f.stx.value.length < 2) {
var stx = f.stx.value.trim();
if (stx.length < 2) {
alert("검색어는 두글자 이상 입력하십시오.");
f.stx.select();
f.stx.focus();
@@ -104,8 +105,8 @@ include_once(G5_LIB_PATH.'/popular.lib.php');
// 검색에 많은 부하가 걸리는 경우 이 주석을 제거하세요.
var cnt = 0;
for (var i=0; i<f.stx.value.length; i++) {
if (f.stx.value.charAt(i) == ' ')
for (var i = 0; i < stx.length; i++) {
if (stx.charAt(i) == ' ')
cnt++;
}
@@ -115,6 +116,7 @@ include_once(G5_LIB_PATH.'/popular.lib.php');
f.stx.focus();
return false;
}
f.stx.value = stx;
return true;
}
+2 -2
View File
@@ -36,8 +36,8 @@ $result = sql_query($sql);
$cart_count = sql_num_rows($result);
?>
<script src="<?php echo G5_JS_URL; ?>/shop.js"></script>
<script src="<?php echo G5_JS_URL; ?>/shop.override.js"></script>
<script src="<?php echo G5_JS_URL; ?>/shop.js?ver=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo G5_JS_URL; ?>/shop.override.js?ver=<?php echo G5_JS_VER; ?>"></script>
<div id="sod_bsk">
+4 -4
View File
@@ -87,7 +87,7 @@ $sql = " select it_id, it_name from {$g5['g5_shop_item_table']}
limit 1 ";
$row = sql_fetch($sql);
if (isset($row['it_id']) && $row['it_id']) {
$next_title = '다음 상품 <span>'.$row['it_name'].'</span>';
$next_title = '다음상품 <span>'.$row['it_name'].'</span>';
$next_href = '<a href="'.shop_item_url($row['it_id']).'" id="siblings_next">';
$next_href2 = '</a>';
} else {
@@ -197,11 +197,11 @@ include_once(G5_MSHOP_PATH.'/_head.php');
include_once(G5_SHOP_PATH.'/settle_naverpay.inc.php');
// 상단 HTML
echo '<div id="sit_hhtml">'.conv_content($it['it_mobile_head_html'], 1).'</div>';
echo run_replace('shop_it_mobile_head_html', '<div id="sit_hhtml">'.conv_content($it['it_mobile_head_html'], 1).'</div>', $it);
?>
<?php if($is_orderable) { ?>
<script src="<?php echo G5_JS_URL; ?>/shop.js"></script>
<script src="<?php echo G5_JS_URL; ?>/shop.js?ver=<?php echo G5_JS_VER; ?>"></script>
<?php } ?>
<?php
@@ -222,6 +222,6 @@ else
<?php
// 하단 HTML
echo conv_content($it['it_mobile_tail_html'], 1);
echo run_replace('shop_it_mobile_tail_html', conv_content($it['it_mobile_tail_html'], 1), $it);
include_once(G5_MSHOP_PATH.'/_tail.php');
+1
View File
@@ -29,6 +29,7 @@ $param_opt_3 = isset($_REQUEST['param_opt_3']) ? clean_xss_tags($_REQUEST['param
<input type="hidden" name="naverpay_point_direct" value="Y"> <!-- 네이버페이 포인트 결제를 하려면 naverpay_point_direct 를 Y -->
<?php } ?>
<input type="hidden" name="kakaopay_direct" value="A" > <!-- KAKAOPAY 결제창 호출 -->
<input type="hidden" name="applepay_direct" value="A" > <!-- APPLEPAY 결제창 호출 -->
<!-- 주문번호 -->
<input type="hidden" name="ordr_idxx" value="<?php echo $od_id; ?>">
<!-- 인증수단(영문 소문자) * 반드시 대소문자 구분 -->
+17 -7
View File
@@ -67,6 +67,7 @@ include_once('./_common.php');
$payco_direct = isset($_POST["payco_direct"]) ? $_POST["payco_direct"] : ''; // PAYCO 결제창 호출
$naverpay_direct = isset($_POST["naverpay_direct"]) ? $_POST["naverpay_direct"] : ''; // NAVERPAY 결제창 호출
$kakaopay_direct = isset($_POST["kakaopay_direct"]) ? $_POST["kakaopay_direct"] : ''; // KAKAOPAY 결제창 호출
$applepay_direct = isset($_POST["applepay_direct"]) ? $_POST["applepay_direct"] : ''; // APPLEPAY 결제창 호출
/*
* 기타 파라메터 추가 부분 - Start -
@@ -157,7 +158,7 @@ include_once('./_common.php');
{
var v_frm = document.sm_form;
layer_cont_obj = document.getElementById("content");
layer_receipt_obj = document.getElementById("layer_receipt");
@@ -165,9 +166,16 @@ include_once('./_common.php');
layer_receipt_obj.style.display = "block";
v_frm.target = "frm_receipt";
// IOS 환경의 경우 iframe에서 네이버페이와 애플페이의 cors 문제가 일어나므로 iframe으로 열지 않는다.
var isIOS = /iPad|iPhone|iPod/.test(navigator.platform) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);
// 네이버페이면 반드시 페이지전환 방식이어야 하며, 그 외에는 iframe 방식으로 한다.
if(typeof v_frm.naverpay_direct !== "undefined" && v_frm.naverpay_direct.value == "Y") {
if (isIOS) {
v_frm.target = "";
}
// 네이버페이 또는 애플페이의 경우 반드시 페이지전환 방식이어야 하며, 그 외에는 iframe 방식으로 한다.
if((typeof v_frm.naverpay_direct !== "undefined" && v_frm.naverpay_direct.value == "Y") || (typeof v_frm.applepay_direct !== "undefined" && v_frm.applepay_direct.value == "Y")) {
v_frm.target = "";
}
@@ -267,18 +275,20 @@ if($enc_data != '' && $enc_info != '' && $tran_cd != '') {
?>
<?php if($payco_direct){ ?>
<input type="hidden" name="payco_direct" value="<?php echo $payco_direct; ?>"> <!-- PAYCO 결제창 호출 -->
<input type="hidden" name="payco_direct" value="<?php echo get_text($payco_direct); ?>"> <!-- PAYCO 결제창 호출 -->
<?php } ?>
<?php if($naverpay_direct){ ?>
<input type="hidden" name="naverpay_direct" value="<?php echo $naverpay_direct; ?>"> <!-- 네이버페이 결제창 호출 -->
<input type="hidden" name="naverpay_direct" value="<?php echo get_text($naverpay_direct); ?>"> <!-- 네이버페이 결제창 호출 -->
<?php if(isset($default['de_easy_pay_services']) && in_array('used_nhnkcp_naverpay_point', explode(',', $default['de_easy_pay_services'])) ){ // 네이버페이 포인트 결제 옵션 ?>
<input type="hidden" name="naverpay_point_direct" value="Y"> <!-- 네이버페이 포인트 결제를 하려면 naverpay_point_direct 를 Y -->
<?php } ?>
<?php } ?>
<?php if($applepay_direct === "Y"){ ?>
<input type="hidden" name="applepay_direct" value="<?php echo get_text($applepay_direct); ?>"> <!-- 애플페이 결제창 호출 -->
<?php } ?>
<?php if($kakaopay_direct){ ?>
<input type="hidden" name="kakaopay_direct" value="<?php echo $kakaopay_direct; ?>"> <!-- 카카오페이 결제창 호출 -->
<input type="hidden" name="kakaopay_direct" value="<?php echo get_text($kakaopay_direct); ?>"> <!-- 카카오페이 결제창 호출 -->
<?php } ?>
<!-- 필수 사항 -->
<!-- 요청 구분 -->
+1
View File
@@ -24,6 +24,7 @@ $param_opt_3 = isset($_REQUEST['param_opt_3']) ? clean_xss_tags($_REQUEST['param
<input type="hidden" name="payco_direct" value=""> <!-- PAYCO 결제창 호출 -->
<input type="hidden" name="naverpay_direct" value="A" > <!-- NAVERPAY 결제창 호출 -->
<input type="hidden" name="kakaopay_direct" value="A" > <!-- KAKAOPAY 결제창 호출 -->
<input type="hidden" name="applepay_direct" value="A" > <!-- APPLEPAY 결제창 호출 -->
<!-- 주문번호 -->
<input type="hidden" name="ordr_idxx" value="<?php echo $od_id; ?>">
<!-- 인증수단(영문 소문자) * 반드시 대소문자 구분 -->
+6 -6
View File
@@ -1,12 +1,12 @@
<?php
include_once('./_common.php');
$type = isset($_REQUEST['type']) ? preg_replace("/[\<\>\'\"\\\'\\\"\%\=\(\)\s]/", "", $_REQUEST['type']) : '';
if ($type == 1) $g5['title'] = '히트상품';
else if ($type == 2) $g5['title'] = '추천상품';
else if ($type == 3) $g5['title'] = '최신상품';
else if ($type == 4) $g5['title'] = '인기상품';
else if ($type == 5) $g5['title'] = '세일상품';
$type = isset($_REQUEST['type']) ? (int) preg_replace("/[^0-9]/", "", $_REQUEST['type']) : 1;
if ($type === 1) $g5['title'] = '히트상품';
else if ($type === 2) $g5['title'] = '추천상품';
else if ($type === 3) $g5['title'] = '최신상품';
else if ($type === 4) $g5['title'] = '인기상품';
else if ($type === 5) $g5['title'] = '세일상품';
else
alert('상품유형이 아닙니다.');
+1 -1
View File
@@ -111,7 +111,7 @@ $cp_count = get_shop_member_coupon_count($member['mb_id'], true);
<li>
<div class="wish_img"><?php echo $image; ?></div>
<div class="wish_info">
<a href="<?php echo get_shop_item($row['it_id'], true); ?>" class="info_link"><?php echo stripslashes($row['it_name']); ?></a>
<a href="<?php echo shop_item_url($row['it_id']); ?>" class="info_link"><?php echo stripslashes($row['it_name']); ?></a>
<span class="info_date"><?php echo substr($row['wi_time'], 2, 8); ?></span>
</div>
</li>
+19
View File
@@ -624,6 +624,9 @@ if($is_kakaopay_use) {
if( in_array('nhnkcp_kakaopay', $de_easy_pay_service_array) ){
$easypay_prints['nhnkcp_kakaopay'] = '<li><input type="radio" id="od_settle_nhnkcp_kakaopay" name="od_settle_case" data-pay="kakaopay" value="간편결제" > <label for="od_settle_nhnkcp_kakaopay" class="kakaopay_icon nhnkcp_kakaopay lb_icon" title="NHN_KCP - 카카오페이">카카오페이</label></li>';
}
if( in_array('nhnkcp_applepay', $de_easy_pay_service_array) && preg_match('~^(?:(?:(?:Mozilla/\d\.\d\s*\()+|Mobile\s*Safari\s*\d+\.\d+(\.\d+)?\s*)(?:iPhone(?:\s+Simulator)?|iPad|iPod);\s*(?:U;\s*)?(?:[a-z]+(?:-[a-z]+)?;\s*)?CPU\s*(?:iPhone\s*)?(?:OS\s*\d+_\d+(?:_\d+)?\s*)?(?:like|comme)\s*Mac\s*O?S?\s*X(?:;\s*[a-z]+(?:-[a-z]+)?)?\)\s*)?(?:AppleWebKit/\d+(?:\.\d+(?:\.\d+)?|\s*\+)?\s*)?(?:\(KHTML,\s*(?:like|comme)\s*Gecko\s*\)\s*)?(?:Version/\d+\.\d+(?:\.\d+)?\s*)?(?:Mobile/\w+\s*)?(?:Safari/\d+\.\d+(?:\.\d+)?.*)?$~', $_SERVER['HTTP_USER_AGENT']) ){
$easypay_prints['nhnkcp_applepay'] = '<li><input type="radio" id="od_settle_nhnkcp_applepay" name="od_settle_case" data-pay="applepay" value="간편결제" > <label for="od_settle_nhnkcp_applepay" class="applepay_icon nhnkcp_applepay lb_icon" title="NHN_KCP - 애플페이">애플페이</label></li>';
}
} else {
$easypay_prints[strtolower($pg_easy_pay_name)] = '<li><input type="radio" id="od_settle_easy_pay" name="od_settle_case" value="간편결제" '.$checked.'> <label for="od_settle_easy_pay" class="'.$pg_easy_pay_name.' lb_icon">'.$pg_easy_pay_name.'</label></li>';
}
@@ -1233,6 +1236,7 @@ var temp_point = 0;
function pay_approval()
{
// 무통장 아닌 가상계좌, 계좌이체, 휴대폰, 신용카드, 기타 등등 을 처리한다.
// 재고체크
var stock_msg = order_stock_check();
if(stock_msg != "") {
@@ -1299,6 +1303,7 @@ function pay_approval()
if(typeof f.payco_direct !== "undefined") f.payco_direct.value = "";
if(typeof f.naverpay_direct !== "undefined") f.naverpay_direct.value = "A";
if(typeof f.kakaopay_direct !== "undefined") f.kakaopay_direct.value = "A";
if(typeof f.applepay_direct !== "undefined") f.applepay_direct.value = "A";
if(typeof f.ActionResult !== "undefined") f.ActionResult.value = "";
if(typeof f.pay_method !== "undefined") f.pay_method.value = "";
@@ -1311,6 +1316,8 @@ function pay_approval()
}
} else if(nhnkcp_easy_pay === "kakaopay"){
if(typeof f.kakaopay_direct !== "undefined") f.kakaopay_direct.value = "Y";
} else if(nhnkcp_easy_pay === "applepay"){
if(typeof f.applepay_direct !== "undefined") f.applepay_direct.value = "Y";
} else {
if(typeof f.payco_direct !== "undefined") f.payco_direct.value = "Y";
}
@@ -1318,6 +1325,10 @@ function pay_approval()
if(typeof f.ActionResult !== "undefined") f.ActionResult.value = "CARD"; // 대소문자 구분
if(typeof f.pay_method !== "undefined") f.pay_method.value = "card"; // 대소문자 구분
//if(nhnkcp_easy_pay === "applepay"){
// if(typeof f.ActionResult !== "undefined") f.ActionResult.value = "card";
// if(typeof f.pay_method !== "undefined") f.pay_method.value = "CARD";
//}
}
<?php } else if($default['de_pg_service'] == 'lg') { ?>
@@ -1435,6 +1446,14 @@ function pay_approval()
function forderform_check()
{
// 무통장만 여기에처 처리한다.
// 재고체크
var stock_msg = order_stock_check();
if(stock_msg != "") {
alert(stock_msg);
return false;
}
var f = document.forderform;
// 필드체크
+8
View File
@@ -705,10 +705,18 @@ $sql_card_point = "";
if ($od_receipt_price > 0 && !$default['de_card_point']) {
$sql_card_point = " , ct_point = '0' ";
}
// 회원 아이디 값 변경
$sql_mb_id = "";
if ($is_member) {
$sql_mb_id = " , mb_id = '{$member['mb_id']}' ";
}
$sql = "update {$g5['g5_shop_cart_table']}
set od_id = '$od_id',
ct_status = '$cart_status'
$sql_card_point
$sql_mb_id
where od_id = '$tmp_cart_id'
and ct_select = '1' ";
$result = sql_query($sql, false);
+4 -4
View File
@@ -17,10 +17,10 @@ if (isset($_GET['qname']) || isset($_GET['qexplan']) || isset($_GET['qid']) || i
$search_all = false;
$q = utf8_strcut(get_search_string(trim($_GET['q'])), 30, "");
$qname = isset($_GET['qname']) ? trim($_GET['qname']) : '';
$qexplan = isset($_GET['qexplan']) ? trim($_GET['qexplan']) : '';
$qid = isset($_GET['qid']) ? trim($_GET['qid']) : '';
$qbasic = isset($_GET['qbasic']) ? trim($_GET['qbasic']) : '';
$qname = isset($_GET['qname']) ? trim(clean_xss_tags($_GET['qname'])) : '';
$qexplan = isset($_GET['qexplan']) ? trim(clean_xss_tags($_GET['qexplan'])) : '';
$qid = isset($_GET['qid']) ? trim(clean_xss_tags($_GET['qid'])) : '';
$qbasic = isset($_GET['qbasic']) ? trim(clean_xss_tags($_GET['qbasic'])) : '';
$qcaid = isset($_GET['qcaid']) ? preg_replace('#[^a-z0-9]#i', '', trim($_GET['qcaid'])) : '';
$qfrom = isset($_GET['qfrom']) ? preg_replace('/[^0-9]/', '', trim($_GET['qfrom'])) : '';
$qto = isset($_GET['qto']) ? preg_replace('/[^0-9]/', '', trim($_GET['qto'])) : '';
+2 -2
View File
@@ -14,12 +14,10 @@ if ($default['de_card_test']) {
if ($default['de_escrow_use'] == 1) {
// 에스크로결제 테스트
$default['de_inicis_mid'] = 'iniescrow0';
$default['de_inicis_admin_key'] = '1111';
}
else {
// 일반결제 테스트
$default['de_inicis_mid'] = 'INIpayTest';
$default['de_inicis_admin_key'] = '1111';
}
}
else {
@@ -109,6 +107,8 @@ $inicis_cardpoint = $default['de_inicis_cartpoint_use'] ? '&cp_yn=Y' : '';
// 예) BC 2,3,6개월, 국민 3,6개월, 삼성 6,9개월 무이자 : 11-2:3:6^06-3:6^12-3:6:4
//$inicis_cardpoint .= ''; // &merc_noint=Y&noint_quota=카드사코드-개월:개월^추가카드사코드-개월:개월:개월 형식으로 설정
require_once(G5_SHOP_PATH.'/inicis/libs/inicis_youngcart_fn.php');
$noti_url = G5_MSHOP_URL.'/inicis/settle_common.php';
$next_url = G5_MSHOP_URL.'/inicis/pay_approval.php';
$return_url = G5_MSHOP_URL.'/inicis/pay_return.php?oid=';
@@ -12,6 +12,7 @@ if($config['cf_cert_use'] && ($config['cf_cert_simple'] || $config['cf_cert_ipin
<div id="find_info" class="new_win<?php if($config['cf_cert_use'] != 0 && $config['cf_cert_find'] != 0) { ?> cert<?php } ?>">
<div class="new_win_con">
<form name="fpasswordlost" action="<?php echo $action_url ?>" onsubmit="return fpasswordlost_submit(this);" method="post" autocomplete="off">
<input type="hidden" name="cert_no" value="">
<h3>이메일로 찾기</h3>
<fieldset id="info_fs">
<p>
+3 -3
View File
@@ -149,9 +149,9 @@
#bo_w .bo_w_select select {border:1px solid #d0d3db;background:#fff;width:100%}
#bo_w .bo_w_link label {position:absolute;top:1px;left:1px;border-radius:3px 0 0 3px;width:45px;height:43px;line-height:43px;font-size:1.2em;text-align:center;color:#b2b2b2}
#bo_w .bo_w_link .frm_input {padding-left:50px}
#bo_w .bo_w_flie .lb_icon {position:absolute;top:0px;left:0px;border-radius:3px 0 0 3px;width:45px;height:43px;line-height:43px;font-size:1.2em;text-align:center;color:#b2b2b2}
#bo_w .bo_w_flie .frm_file {padding-left:50px}
#bo_w .bo_w_flie .file_wr {position:relative;color:#000;vertical-align:middle;margin:0}
#bo_w .bo_w_flie .lb_icon, .form_01 .bo_w_flie .lb_icon {position:absolute;top:0px;left:0px;border-radius:3px 0 0 3px;width:45px;height:43px;line-height:43px;font-size:1.2em;text-align:center;color:#b2b2b2}
#bo_w .bo_w_flie .frm_file, .form_01 .bo_w_flie .frm_file {padding-left:50px}
#bo_w .bo_w_flie .file_wr, .form_01 .bo_w_flie .file_wr {position:relative;color:#000;vertical-align:middle;margin:0}
#bo_w .bo_w_flie .frm_input {margin:5px 0 0}
.filebox .btn_file {display:inline-block;position:absolute;right:8px;top:8px;border:1px solid #3a8afd;border-radius:3px;width:60px;height:30px;color:#3a8afd;font-size:1em;line-height:30px;font-weight:bold;background:#fff;text-align:center;vertical-align:middle;cursor:pointer}
+36
View File
@@ -11,7 +11,43 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
</div>
</h2>
<div id="ans_con">
<?php
// 파일 출력
if(isset($answer['img_count']) && $answer['img_count']) {
echo "<div id=\"bo_v_img\">\n";
for ($i=0; $i<$answer['img_count']; $i++) {
echo get_view_thumbnail($answer['img_file'][$i], $qaconfig['qa_image_width']);
}
echo "</div>\n";
}
?>
<?php echo get_view_thumbnail(conv_content($answer['qa_content'], $answer['qa_html']), $qaconfig['qa_image_width']); ?>
<?php if(isset($answer['download_count']) && $answer['download_count']) { ?>
<!-- 첨부파일 시작 { -->
<section id="bo_v_file">
<h2>첨부파일</h2>
<ul>
<?php
// 가변 파일
for ($i=0; $i<$answer['download_count']; $i++) {
?>
<li>
<i class="fa fa-download" aria-hidden="true"></i>
<a href="<?php echo $answer['download_href'][$i]; ?>" class="view_file_download" download>
<strong><?php echo $answer['download_source'][$i] ?></strong>
</a>
</li>
<?php
}
?>
</ul>
</section>
<!-- } 첨부파일 끝 -->
<?php } ?>
</div>
<button id="btn_ans_btn" class="btn_b03 btn"><i class="fa fa-ellipsis-v" aria-hidden="true"></i><span class="sound_only">게시판 리스트 옵션</span></button>
+16 -1
View File
@@ -9,7 +9,7 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
?>
<h2>답변등록</h2>
<form name="fanswer" method="post" action="./qawrite_update.php" onsubmit="return fwrite_submit(this);" autocomplete="off">
<form name="fanswer" method="post" action="./qawrite_update.php" onsubmit="return fwrite_submit(this);" enctype="multipart/form-data" autocomplete="off">
<input type="hidden" name="qa_id" value="<?php echo $view['qa_id']; ?>">
<input type="hidden" name="w" value="a">
<input type="hidden" name="sca" value="<?php echo $sca ?>">
@@ -46,6 +46,21 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
<label for="qa_content" class="sound_only">내용<strong>필수</strong></label>
<?php echo $editor_html; // 에디터 사용시는 에디터로, 아니면 textarea 로 노출 ?>
</li>
<li class="bo_w_flie">
<div class="file_wr filebox">
<input type="text" class="fileName" readonly="readonly" placeholder="파일을 첨부하세요">
<label for="bf_file[1]"><i class="fa fa-download lb_icon" aria-hidden="true"></i><span class="sound_only">파일 #1</span><span class="btn_file">파일첨부</span></label>
<input type="file" name="bf_file[1]" id="bf_file[1]" title="파일첨부 1 : 용량 <?php echo $upload_max_filesize; ?> 이하만 업로드 가능" class="frm_file uploadBtn">
</div>
<br>
<div class="file_wr filebox">
<input type="text" class="fileName" readonly="readonly" placeholder="파일을 첨부하세요">
<label for="bf_file[2]"><i class="fa fa-download lb_icon" aria-hidden="true"></i><span class="sound_only">파일 #2</span><span class="btn_file">파일첨부</span></label>
<input type="file" name="bf_file[2]" id="bf_file[2]" title="파일첨부 2 : 용량 <?php echo $upload_max_filesize; ?> 이하만 업로드 가능" class="frm_file uploadBtn">
</div>
</li>
</ul>
</div>
+5 -3
View File
@@ -45,7 +45,8 @@ if ($stx) {
<script>
function fsearch_submit(f)
{
if (f.stx.value.length < 2) {
var stx = f.stx.value.trim();
if (stx.length < 2) {
alert("검색어는 두글자 이상 입력하십시오.");
f.stx.select();
f.stx.focus();
@@ -54,8 +55,8 @@ if ($stx) {
// 검색에 많은 부하가 걸리는 경우 이 주석을 제거하세요.
var cnt = 0;
for (var i=0; i<f.stx.value.length; i++) {
if (f.stx.value.charAt(i) == ' ')
for (var i = 0; i < stx.length; i++) {
if (stx.charAt(i) == ' ')
cnt++;
}
@@ -65,6 +66,7 @@ if ($stx) {
f.stx.focus();
return false;
}
f.stx.value = stx;
f.action = "";
return true;
+1 -1
View File
@@ -7,7 +7,7 @@ add_javascript('<script src="'.G5_JS_URL.'/jquery.bxslider.js"></script>', 10);
?>
<?php if($config['cf_kakao_js_apikey']) { ?>
<script src="https://developers.kakao.com/sdk/js/kakao.min.js"></script>
<script src="https://developers.kakao.com/sdk/js/kakao.min.js" async></script>
<script src="<?php echo G5_JS_URL; ?>/kakaolink.js"></script>
<script>
// 사용할 앱의 Javascript 키를 설정해 주세요.
+1 -1
View File
@@ -9,7 +9,7 @@ add_javascript('<script src="'.G5_JS_URL.'/shop.list.action.js"></script>', 10);
?>
<?php if(!defined('G5_IS_SHOP_AJAX_LIST') && $config['cf_kakao_js_apikey']) { ?>
<script src="https://developers.kakao.com/sdk/js/kakao.min.js"></script>
<script src="https://developers.kakao.com/sdk/js/kakao.min.js" async></script>
<script src="<?php echo G5_JS_URL; ?>/kakaolink.js"></script>
<script>
// 사용할 앱의 Javascript 키를 설정해 주세요.
+1 -1
View File
@@ -9,7 +9,7 @@ add_javascript('<script src="'.G5_JS_URL.'/shop.list.action.js"></script>', 10);
?>
<?php if($config['cf_kakao_js_apikey']) { ?>
<script src="https://developers.kakao.com/sdk/js/kakao.min.js"></script>
<script src="https://developers.kakao.com/sdk/js/kakao.min.js" async></script>
<script src="<?php echo G5_JS_URL; ?>/kakaolink.js"></script>
<script>
// 사용할 앱의 Javascript 키를 설정해 주세요.
+1 -1
View File
@@ -10,7 +10,7 @@ add_javascript('<script src="'.G5_JS_URL.'/shop.list.action.js"></script>', 10);
<script src="<?php echo G5_JS_URL ?>/jquery.fancylist.js"></script>
<?php if($config['cf_kakao_js_apikey']) { ?>
<script src="https://developers.kakao.com/sdk/js/kakao.min.js"></script>
<script src="https://developers.kakao.com/sdk/js/kakao.min.js" async></script>
<script src="<?php echo G5_JS_URL; ?>/kakaolink.js"></script>
<script>
// 사용할 앱의 Javascript 키를 설정해 주세요.
+1 -1
View File
@@ -10,7 +10,7 @@ add_javascript('<script src="'.G5_JS_URL.'/shop.list.action.js"></script>', 10);
?>
<?php if($config['cf_kakao_js_apikey']) { ?>
<script src="https://developers.kakao.com/sdk/js/kakao.min.js"></script>
<script src="https://developers.kakao.com/sdk/js/kakao.min.js" async></script>
<script src="<?php echo G5_JS_URL; ?>/kakaolink.js"></script>
<script>
// 사용할 앱의 Javascript 키를 설정해 주세요.
+1 -1
View File
@@ -7,7 +7,7 @@ add_stylesheet('<link rel="stylesheet" href="'.G5_MSHOP_SKIN_URL.'/style.css">',
<script src="<?php echo G5_JS_URL ?>/jquery.fancylist.js"></script>
<?php if($config['cf_kakao_js_apikey']) { ?>
<script src="https://developers.kakao.com/sdk/js/kakao.min.js"></script>
<script src="https://developers.kakao.com/sdk/js/kakao.min.js" async></script>
<script src="<?php echo G5_JS_URL; ?>/kakaolink.js"></script>
<script>
// 사용할 앱의 Javascript 키를 설정해 주세요.
+21 -1
View File
@@ -54,7 +54,27 @@ add_stylesheet('<link rel="stylesheet" href="'.G5_PLUGIN_URL.'/debugbar/style.cs
?>
<tr>
<td scope="row" data-label="실행순서"><?php echo $key; ?></td>
<td class="left" data-label="쿼리문"><?php echo $query['sql']; ?></td>
<td class="left" data-label="쿼리문">
<?php
if(isset($query['source']['class'])) {
$function = "{$query['source']['class']}{$query['source']['type']}{$query['source']['function']}()";
} else if (isset($query['source']['function'])) {
$function = "{$query['source']['function']}()";
} else {
$function = null;
}
?>
<p class="query_source">
<em><?php echo "{$query['source']['file']}:{$query['source']['line']}" ?></em><br>
<?php if($function) { echo "<em>{$function}</em><br>"; } ?>
</p>
<?php
echo "<p class=\"query_sql\">{$query['sql']}</p>";
if(!$query['success']) {
echo '<p class="query_error_message">오류: [' . $query['error_code'] . '] ' . $query['error_message'] . '</p>';
}
?>
</td>
<td data-label="실행시간"><?php echo $show_excuted_time.' ms'; ?></td>
</tr>
<?php } ?>
+4 -2
View File
@@ -23,12 +23,14 @@
.debug_table{border:1px solid #ccc;border-collapse:collapse;margin:0;padding:0;width:100%}
.debug_table caption{display:none}
.debug_table tr{background:#f8f8f8;border:1px solid #ddd;padding:.35em}
.debug_table th,.debug_table td{padding:.625em;text-align:center}
.debug_table th,.debug_table td{padding:.625em;text-align:center;white-space:nowrap;}
.debug_table tbody tr:hover td{background:#c7d4dd!important}
.debug_table tbody tr:nth-child(even){background-color:#fff}
.debug_table td.left{text-align:left}
.debug_table td.left{text-align:left;font-family:monospace;white-space:initial}
.debug_table th{font-size:.85em;letter-spacing:.1em;text-transform:uppercase}
.debug_table td img{text-align:center}
.debug_table .query_sql {font-weight:bold;margin:.5em 0}
.debug_table .query_error_message {color:red;margin:.5em 0}
.debug_table.hook_table th, .debug_table.hook_table td {text-align:left;border:1px solid #ddd;}
.hook_table .hook_count{margin-left:3px;font-size:0.9em;color:#7cbc0a}
+3 -2
View File
@@ -1,9 +1,9 @@
// ================================================================
// CHEditor 5.1.9.3-p4
// CHEditor 5.1.9.4
// ----------------------------------------------------------------
// Homepage: http://www.chcode.com
// EMail: support@chcode.com
// Copyright (c) 1997-2020 CHSOFT
// Copyright (c) 1997-2021 CHSOFT
// ================================================================
var GB = {
colors: ['#000000','#313131','#434343','#535353','#666666','#999999','#a0a0a0','#b5b5b5','#c0c0c0','#dcdcdc','#eeeeee','#ffffff',
@@ -568,6 +568,7 @@ function setConfig() {
this.cheditor.tabSpaces = '';
this.cheditor.modifyState = false;
this.cheditor.tabSpaces = new Array(this.config.tabIndent + 1).join(' ');
this.URI = URI;
}
function cheditor() {
Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

@@ -1,15 +1,15 @@
<?php
include_once("_common.php");
define("CHE_UPLOAD_IMG_CHECK", 1); // 이미지 파일을 썸네일 할수 있는지 여부를 체크합니다. ( 해당 파일이 이미지 파일인지 체크합니다. 1이면 사용, 0이면 사용 안함 )
define("CHE_UPLOAD_IMG_CHECK", 1); // 이미지 파일을 썸네일 할수 있는지 여부를 체크합니다. ( 해당 파일이 이미지 파일인지 체크합니다. 1이면 사용, 0이면 사용 안함 )
// ---------------------------------------------------------------------------
# 이미지가 저장될 디렉토리의 전체 경로를 설정합니다.
# 끝에 슬래쉬(/)는 붙이지 않습니다.
# 주의: 이 경로의 접근 권한은 쓰기, 읽기가 가능하도록 설정해 주십시오.
# 이미지가 저장될 디렉토리의 전체 경로를 설정합니다.
# 끝에 슬래쉬(/)는 붙이지 않습니다.
# 주의: 이 경로의 접근 권한은 쓰기, 읽기가 가능하도록 설정해 주십시오.
# data/editor 디렉토리가 없는 경우가 있을수 있으므로 디렉토리를 생성하는 코드를 추가함. kagla 140305
# data/editor 디렉토리가 없는 경우가 있을수 있으므로 디렉토리를 생성하는 코드를 추가함. kagla 140305
@mkdir(G5_DATA_PATH.'/'.G5_EDITOR_DIR, G5_DIR_PERMISSION);
@chmod(G5_DATA_PATH.'/'.G5_EDITOR_DIR, G5_DIR_PERMISSION);
@@ -24,8 +24,8 @@ define("SAVE_DIR", $data_dir);
@mkdir(SAVE_DIR, G5_DIR_PERMISSION);
@chmod(SAVE_DIR, G5_DIR_PERMISSION);
# 위에서 설정한 'SAVE_DIR'의 URL을 설정합니다.
# 끝에 슬래쉬(/)는 붙이지 않습니다.
# 위에서 설정한 'SAVE_DIR'의 URL을 설정합니다.
# 끝에 슬래쉬(/)는 붙이지 않습니다.
define("SAVE_URL", $data_url);
@@ -93,9 +93,9 @@ if ($found != true || $filename_len != 23) {
exit;
}
// 저장 파일 이름: 년월일시분초_렌덤문자8자
// 저장 파일 이름: 년월일시분초_렌덤문자8자
// 20140327125959_abcdefghi.jpg
// 원본 파일 이름: $_POST["origname"]
// 원본 파일 이름: $_POST["origname"]
$filename = che_replace_filename($filename);
$savefile = SAVE_DIR . '/' . $filename;
+6 -6
View File
@@ -1,9 +1,9 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!DOCTYPE html>
<html lang="ko">
<head>
<title>CHEditor</title>
<meta name="robots" content="noindex, nofollow" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="../css/dialog.css" />
<script src="js/dialog.js" type="text/javascript"></script>
<script src="js/flash.js" type="text/javascript"></script>
@@ -11,12 +11,12 @@
<body>
<div class="flash-movie-source">
<div style="margin-bottom: 10px;width: 562px">
<span class="font-normal">&lt;동영상 소스 코드&gt; iframe 또는 object 태그를 입력하세요.</span>
<span class="font-normal">동영상 링크 URL 또는 IFRAME이나 EMBED 소스 코드를 붙여 넣거나 입력하세요.</span>
</div>
<textarea name="embed" id="fm_embed" style="height:40px;width:99%"></textarea>
<textarea name="source" id="fm_source" style="height:40px;width:99%"></textarea>
</div>
<div class="spacer"></div>
<div class="flash-player-wrapper" id="fm_player"></div>
<div class="bottom-status" id="buttonWrapper"></div>
</body>
</html>
</html>
@@ -6,13 +6,13 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="../css/dialog.css" />
<script src="js/dialog.js" type="text/javascript"></script>
<script src="https://maps.google.com/maps/api/js?V=3&language=ko&region=KR" type="text/javascript"></script>
<script src="https://maps.google.com/maps/api/js?V=3&language=ko&region=KR&key=JS_MAPS_API_KEY" type="text/javascript"></script>
<script src="js/google_map.js" type="text/javascript"></script>
</head>
<body onload="initMap(5)">
<div style="padding-left:10px">
<span class="font-normal">찾을 주소: </span>
<input type="text" name="address" id="fm_address" value="서울" />
<input type="text" name="address" id="fm_address" title="찾을 주소" value="서울" />
<span id="map_search"></span>
<div class="font-normal" style="margin: 5px 0px 0px 58px;color:#666">찾으실 도로명 주소, 지번 또는 건물명을 입력하세요.</div>
</div>
@@ -64,6 +64,7 @@
<div style="margin-top:5px;font-size: 12px">
<input type="checkbox" name="use_spacer" value="1" checked="checked" />사진 여백 넣기
</div>
<div id="webgl_logo_wrapper" class="webgl_logo_wrapper" style="text-align: center;"></div>
</form>
</div>
</div>
+133 -29
View File
@@ -1,5 +1,5 @@
// ================================================================
// CHEditor 5
// Movie
// ================================================================
var button = [
{ alt : '', img : 'play.gif', cmd : doPlay },
@@ -7,7 +7,10 @@ var button = [
{ alt : '', img : 'cancel.gif', cmd : popupClose }
],
oEditor = null,
iframeSource = false;
iframeSource = null,
showMovie = false,
defaultMovieWidth = 640,
defaultMovieHeight = 360;
function init(dialog) {
var dlg = new Dialog(this);
@@ -17,52 +20,65 @@ function init(dialog) {
dlg.setDialogHeight();
}
function doPlay()
{
var elem = oEditor.trimSpace(document.getElementById("fm_embed").value),
embed = null, div = document.createElement('div'),
pos, str, object, child, movieHeight, movieWidth, i, params = [];
function getSource() {
return oEditor.trimSpace(document.getElementById("fm_source").value);
}
elem = oEditor.trimSpace(elem);
if (elem == '') {
function doPlay() {
var embed = null,
div = document.createElement('div'),
pos, str, object, child, movieHeight, movieWidth, params = [], showWrapper,
source = getSource(), iframe;
showMovie = true;
if (source === '') {
return;
}
if (elem.toLowerCase().indexOf("iframe") !== -1) {
document.getElementById('fm_player').innerHTML = elem;
iframeSource = true;
showWrapper = document.getElementById('fm_player');
if (source.toLowerCase().indexOf("iframe") !== -1) {
showWrapper.innerHTML = source;
iframeSource = source;
return;
}
pos = elem.toLowerCase().indexOf("embed");
if (/https?:\/\//.test(source)) {
iframe = createIframeElement(defaultMovieWidth, defaultMovieHeight, source);
if (iframe) {
showWrapper.innerHTML = '';
showWrapper.appendChild(iframe);
iframeSource = iframe;
}
return;
}
pos = source.toLowerCase().indexOf("embed");
if (pos !== -1) {
str = elem.substr(pos);
str = source.substr(pos);
pos = str.indexOf(">");
div.innerHTML = "<" + str.substr(0, pos) + ">";
embed = div.firstChild;
} else {
div.innerHTML = elem;
div.innerHTML = source;
object = div.getElementsByTagName('OBJECT')[0];
if (object && object.hasChildNodes()) {
child = object.firstChild;
movieWidth = (isNaN(object.width) !== true) ? object.width : 320;
movieHeight = (isNaN(object.height) !== true) ? object.height : 240;
movieWidth = (isNaN(object.width) !== true) ? object.width : defaultMovieWidth;
movieHeight = (isNaN(object.height) !== true) ? object.height : defaultMovieHeight;
do {
if ((child.nodeName === 'PARAM') && (typeof child.name !== 'undefined') && (typeof child.value !== 'undefined')) {
params.push({key: (child.name == 'movie') ? 'src' : child.name, val: child.value});
if (child.nodeName === 'PARAM' && typeof child.name !== 'undefined' && typeof child.value !== 'undefined')
{
params.push({
key: child.name === 'movie' ? 'src' : child.name,
val: child.value
});
}
child = child.nextSibling;
} while (child);
if (params.length > 0) {
embed = document.createElement('embed');
embed.setAttribute("width", movieWidth);
embed.setAttribute("height", movieHeight);
for (i = 0; i < params.length; i++) {
embed.setAttribute(params[i].key, params[i].val);
}
embed.setAttribute("type", "application/x-shockwave-flash");
embed = createEmbedElement(movieWidth, movieHeight, params, null);
}
}
}
@@ -72,6 +88,89 @@ function doPlay()
}
}
function createIframeElement(width, height, src) {
var iframe = document.createElement('iframe'), uri, query, id, movie = null;
uri = new oEditor.URI(src);
if (uri.path && uri.path.charAt(0) !== '/') {
uri.path = '/' + uri.path;
}
switch (uri.authority) {
case 'youtu.be' :
case 'youtube.com':
case 'www.youtube.com':
if (uri.path === '/watch' && uri.query) {
query = uri.query.split('=');
if (query[0] === 'v') {
movie = '/' + query[1];
}
}
if (!movie && uri.path) {
movie = uri.path;
if (uri.query) {
movie += '?' + uri.query;
}
}
if (movie) {
movie = 'https://www.youtube.com/embed' + movie;
}
break;
case 'vimeo.com' :
if (uri.path) {
movie = 'https://player.vimeo.com/video' + uri.path;
}
break;
case 'afree.ca' :
if (uri.path) {
movie = 'http://play.afreecatv.com' + uri.path + '/embed';
}
break;
case 'tv.naver.com' :
if (uri.path) {
id = uri.path.substring(uri.path.lastIndexOf('/'));
movie = 'https://tv.naver.com/embed' + id + '?autoPlay=true';
}
break;
case 'tv.kakao.com' :
if (uri.path) {
id = uri.path.substring(uri.path.lastIndexOf('/'));
movie = 'https://tv.kakao.com/embed/player/cliplink' + id;
}
break;
default :
movie = null;
}
if (!movie) {
return null;
}
iframe.setAttribute('width', width);
iframe.setAttribute('height', height);
iframe.setAttribute('frameborder', "0");
iframe.setAttribute('allowfullscreen', "true");
iframe.setAttribute('src', movie);
return iframe;
}
function createEmbedElement(width, height, params, src) {
var embed = document.createElement('embed'), i;
embed.setAttribute("type", "application/x-shockwave-flash");
embed.setAttribute('width', width);
embed.setAttribute('height', height);
if (src) {
embed.setAttribute('src', src);
}
for (i = 0; i < params.length; i++) {
embed.setAttribute(params[i].key, params[i].val);
}
return embed;
}
function popupClose() {
document.getElementById('fm_player').innerHTML = '';
oEditor.popupWinCancel();
@@ -79,13 +178,17 @@ function popupClose() {
function doSubmit()
{
var source = String(oEditor.trimSpace(document.getElementById("fm_embed").value));
var source = getSource();
if (source === '') {
popupClose();
}
if (!showMovie) {
document.getElementById('fm_player').style.visibility = 'hidden';
doPlay();
}
if (iframeSource || source.indexOf("iframe") !== -1) {
oEditor.insertHtmlPopup(source);
if (iframeSource) {
oEditor.insertHtmlPopup(iframeSource);
} else {
oEditor.insertFlash(source);
}
@@ -93,3 +196,4 @@ function doSubmit()
document.getElementById('fm_player').innerHTML = '';
oEditor.popupWinClose();
}
+25 -20
View File
@@ -13,7 +13,9 @@ var oEditor = null,
mapWidth = 512,
mapHeight = 320,
panorama,
panoramaVisible = false;
panoramaVisible = false,
marker,
staticMapsAPI = 'STATIC_MAPS_API_KEY';
function doSubmit() {
var mapImg = document.createElement("img"),
@@ -29,10 +31,9 @@ function doSubmit() {
mapImg.style.width = mapWidth + 'px';
mapImg.style.height = mapHeight + 'px';
mapImg.style.border = '1px #000 solid';
mapImg.setAttribute("alt", "Google Map");
mapImg.setAttribute('alt', 'Google Map');
mapImg.onload = function () {
oEditor.insertHtmlPopup(mapImg);
oEditor.setImageEvent(true);
oEditor.popupWinClose();
};
@@ -41,42 +42,46 @@ function doSubmit() {
panoramaHeading = panorama.getPov().heading;
panoramaZoom = panorama.getPov().zoom;
panoramaPosition = panorama.getPosition();
mapImg.src = "http://maps.googleapis.com/maps/api/streetview?location=" + panoramaPosition +
mapImg.src = "http://maps.googleapis.com/maps/api/streetview?" +
"location=" + panoramaPosition.lat() + ',' + panoramaPosition.lng() +
"&pitch=" + panoramaPitch +
"&heading=" + panoramaHeading +
"&size=" + mapWidth + 'x' + mapHeight +
"&zoom=" + panoramaZoom +
"&sensor=false" +
"&region=KR";
"&region=KR" +
"&key=" + staticMapsAPI;
} else {
mapImg.src = "http://maps.google.com/maps/api/staticmap?center=" + centerLat + ',' + centerLng +
mapImg.src = "http://maps.google.com/maps/api/staticmap?" +
"center=" + centerLat + ',' + centerLng +
"&zoom=" + setZoom +
"&size=" + mapWidth + 'x' + mapHeight +
"&maptype=" + mapType +
//"&markers=" + marker_lat + ',' + marker_lng +
"&markers=" + marker_lat + ',' + marker_lng +
"&sensor=false" +
"&language=ko" +
"&region=KR";
"&region=KR" +
"&key=" + staticMapsAPI;
}
}
function searchAddress() {
var address = document.getElementById('fm_address').value,
geocoder = new google.maps.Geocoder();
//var results, status;
//var marker = new google.maps.Marker({ 'map': map, 'draggable': true });
geocoder.geocode({'address' : address},
function (results, status) {
if (status === google.maps.GeocoderStatus.OK) {
centerLat = results[0].geometry.location.lat();
centerLng = results[0].geometry.location.lng();
latlng = new google.maps.LatLng(centerLat, centerLng);
map.setCenter(latlng);
map.setZoom(setZoom);
}
});
function (results, status) {
if (status === google.maps.GeocoderStatus.OK) {
centerLat = results[0].geometry.location.lat();
centerLng = results[0].geometry.location.lng();
latlng = new google.maps.LatLng(centerLat, centerLng);
map.setCenter(latlng);
map.setZoom(setZoom);
marker = new google.maps.Marker({ 'map': map, 'draggable': true, 'position': latlng,
animation: google.maps.Animation.DROP});
marker.setMap(map);
}
});
}
function initMap(zoom) {
+62 -59
View File
@@ -36,7 +36,8 @@ var activeImage = null,
uploadImagePath = '',
uploadMaxNumber = 12,
uploadScript,
useWebGL = false;
useWebGL = false,
supportImageOrientation;
if (ArrayBuffer && !ArrayBuffer.prototype.slice) {
ArrayBuffer.prototype.slice = function (start, end) {
@@ -437,11 +438,6 @@ function fileFilterError(file) {
"gif, png, jpg, webp 사진 파일만 전송할 수 있습니다.");
}
function explorerFileFilterError(file) {
alert("선택하신 '" + file + "' 파일은 전송할 수 없습니다.\n" +
"익스플로러 환경에서는 gif, png, jpg 사진 파일만 \n전송할 수 있습니다.");
}
function imgComplete(img, imgSize, boxId) {
var resizeW, resizeH, M, elem;
img.setAttribute("border", '0');
@@ -929,7 +925,7 @@ function DoUpload() {
blob = new Blob();
for (key in blob) {
if (blob.hasOwnProperty(key)) {
if ({}.hasOwnProperty.call(blob, key)) {
(function (key) {
Object.defineProperty(MYBLOB.prototype,
key,
@@ -967,13 +963,7 @@ DoUpload.prototype = {
file = files[i];
if (!file.type.match(fileTypeRe)) {
// 엣지를 제외한 ie브라우저인지 체크
var agent = navigator.userAgent.toLowerCase();
if (agent.indexOf('trident') != -1 || agent.indexOf("msie") != -1) {
explorerFileFilterError(file.name);
} else {
FileFilterError(file.name);
}
fileFilterError(file.name);
continue;
}
this.list.push(file);
@@ -1032,15 +1022,22 @@ DoUpload.prototype = {
offset = 2,
marker, little, tags, i;
// JPEG가 아닌 경우, 알 수 없음
if (view.getUint16(0, false) !== 0xffd8) {
return -2;
}
while (offset < length) {
// 알 수 없음
if (view.getUint16(offset + 2, false) <= 8) {
return -1;
}
marker = view.getUint16(offset, false);
offset += 2;
if (marker === 0xffe1) {
// 알 수 없음
if (view.getUint32(offset += 2, false) !== 0x45786966) {
return -1;
}
@@ -1061,7 +1058,7 @@ DoUpload.prototype = {
offset += view.getUint16(offset, false);
}
}
// 알 수 없음
return -1;
},
@@ -1076,7 +1073,7 @@ DoUpload.prototype = {
|| window.MSBlobBuilder;
if (e.name === 'TypeError' && window.BlobBuilder) {
blobb = new BlobBuilder();
// eslint-disable-next-line no-undef
blobb.append(data);
blob = blobb.getBlob(datatype);
console.log("TypeError");
@@ -1089,50 +1086,46 @@ DoUpload.prototype = {
return blob;
},
imageResize : function (image, filetype, resizeWidth, orientation, addWaterMark) {
var canvas, source_w = image.width, source_h = image.height,
resize_h, resize_w, ratio_w, ratio_h, ratio_w_half, ratio_h_half,
imageResize : function (image, filetype, resize_w, orientation, addWaterMark) {
var canvas = document.createElement("canvas"),
ctx = canvas.getContext("2d"),
source_w = image.width,
source_h = image.height,
resize_h, ratio_w, ratio_h, ratio_w_half, ratio_h_half,
source_img, resize_img, source_data, resize_data, j, i,
x2, weight, weights, weights_alpha, gx_a, gx_b, gx_g, gx_r, center_x, center_y, x_start, x_stop,
y_start, y_stop, y, dy, part_w, x, dx, w, pos_x,
ctx, gl, imageData = null;
x2, weight, weights, weights_alpha, gx_a, gx_b, gx_g, gx_r,
center_x, center_y, x_start, x_stop,
y_start, y_stop, y, dy, part_w, x, dx, w, pos_x, gl, imageData = null;
// 카메라 로테이션 보정
if (orientation > 0) {
canvas = document.createElement("canvas");
canvas.width = source_w;
canvas.height = source_h;
ctx = canvas.getContext("2d");
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.save();
if (orientation > 0 && !supportImageOrientation) {
if ([5,6,7,8].indexOf(orientation) > -1) {
canvas.width = source_h;
canvas.height = source_w;
} else {
canvas.width = source_w;
canvas.height = source_h;
}
switch (orientation) {
case 2 :
ctx.translate(-1, 0, 0, 1, canvas.width, 0); break;
case 3 :
ctx.translate(-1, 0, 0, -1, canvas.width, canvas.height); break;
case 4 :
ctx.translate(1, 0, 0, -1, 0, canvas.height); break;
case 5 :
ctx.translate(0, 1, 1, 0, 0, 0); break;
case 6 :
ctx.translate(0, 1, -1, 0, canvas.height, 0); break;
case 7 :
ctx.translate(0, -1, -1, 0, canvas.height, canvas.width); break;
case 8 :
ctx.translate(0, -1, 1, 0, 0, canvas.width); break;
case 2 : ctx.transform(-1, 0, 0, 1, source_w, 0); break;
case 3 : ctx.transform(-1, 0, 0, -1, source_w, source_h); break;
case 4 : ctx.transform(1, 0, 0, -1, 0, source_h); break;
case 5 : ctx.transform(0, 1, 1, 0, 0, 0); break;
case 6 : ctx.transform(0, 1, -1, 0, source_h, 0); break;
case 7 : ctx.transform(0, -1, -1, 0, source_h, source_w); break;
case 8 : ctx.transform(0, -1, 1, 0, 0, source_w); break;
default: break;
}
ctx.drawImage(image, 0, 0);
ctx.drawImage(image, 0, 0, source_w, source_h);
imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
ctx.restore();
source_w = canvas.width;
source_h = canvas.height;
}
if (source_w > resizeWidth) {
resize_w = resizeWidth;
if (source_w > resize_w) {
resize_h = Math.ceil(resize_w / source_w * source_h);
try {
@@ -1143,8 +1136,6 @@ DoUpload.prototype = {
canvas = gl_canvas;
});
} catch (ignore) {
canvas = document.createElement("canvas");
ctx = canvas.getContext("2d");
canvas.width = source_w;
canvas.height = source_h;
@@ -1216,14 +1207,10 @@ DoUpload.prototype = {
canvas.height = resize_h;
ctx.putImageData(resize_img, 0, 0);
}
} else {
canvas = document.createElement("canvas"),
canvas.width = source_w; canvas.height = source_h;
ctx = canvas.getContext("2d");
canvas.width = source_w;
canvas.height = source_h;
ctx.drawImage(image, 0, 0);
resize_h = source_h;
resize_w = source_w;
}
if (this.reader.watermark && addWaterMark) {
@@ -1276,7 +1263,8 @@ DoUpload.prototype = {
filename = evt.target.file.name,
filetype = evt.target.file.type,
file = evt.target.file,
blob, image, orientation = 1, slice = 64 * 1024;
blob, image, orientation = 1,
slice = 64 * 1024;
if (slice > file.size - 1) {
slice = file.size;
@@ -1298,12 +1286,12 @@ DoUpload.prototype = {
xhr.open('POST', uploadScript, true);
if (imageResizeWidth > 0) {
fileFormat = filename.substring(filename.lastIndexOf('.'));
if (imageResizeWidth > 0 && fileFormat !== '.gif') {
bitmapData = self.imageResize(this, filetype, imageResizeWidth, orientation, true);
file = self.canvasToBlob(bitmapData, filetype);
}
fileFormat = filename.substring(filename.lastIndexOf('.'));
randomName = self.makeFilename(fileFormat);
data.append('origname', filename);
@@ -1375,7 +1363,6 @@ DoUpload.prototype = {
blob = null;
xhr.send(data);
};
image.src = blob.getURL();
}
},
@@ -1484,7 +1471,7 @@ function setResizeWidth() {
}
function init(dialog) {
var dlg, i, elem, input, select, value, name, xhr_f, xhr_v, tmpcanvas, glicon;
var dlg, i, elem, input, select, value, name, xhr_f, xhr_v, tmpcanvas, glicon, testImg;
oEditor = this;
oEditor.dialog = dialog;
@@ -1588,8 +1575,24 @@ function init(dialog) {
xhr_f.send();
xhr_v.send();
}
glicon = new Image();
glicon.className = 'webgl_logo';
glicon.src = uploadImagePath + (useWebGL ? "/webgl.png" : "/webgl-off.png");
document.getElementById('webgl_logo_wrapper').appendChild(glicon);
// 브라우저가 사진 Orientation 보정을 자동으로 지원하지는지 확인
testImg = new Image();
testImg.onload = function () {
supportImageOrientation = testImg.width === 2 && testImg.height === 3;
};
testImg.src =
'data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAA' +
'AAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA' +
'QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE' +
'BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAIAAwMBEQACEQEDEQH/x' +
'ABRAAEAAAAAAAAAAAAAAAAAAAAKEAEBAQADAQEAAAAAAAAAAAAGBQQDCAkCBwEBAAAAAAA' +
'AAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AG8T9NfSMEVMhQ' +
'voP3fFiRZ+MTHDifa/95OFSZU5OzRzxkyejv8ciEfhSceSXGjS8eSdLnZc2HDm4M3BxcXw' +
'H/9k=';
}
@@ -35,8 +35,9 @@ var activeImage = null,
tmpTop = 0,
uploadImagePath = '',
uploadMaxNumber = 12,
uploadScript;
useWebGL = false;
uploadScript,
useWebGL = false,
supportImageOrientation;
if (ArrayBuffer && !ArrayBuffer.prototype.slice) {
ArrayBuffer.prototype.slice = function (start, end) {
@@ -434,12 +435,7 @@ function startUpload(list) {
function fileFilterError(file) {
alert("선택하신 '" + file + "' 파일은 전송할 수 없습니다.\n" +
"gif, png, jpg, webp 사진 파일만 전송할 수 있습니다.");
}
function explorerFileFilterError(file) {
alert("선택하신 '" + file + "' 파일은 전송할 수 없습니다.\n" +
"익스플로러 환경에서는 gif, png, jpg 사진 파일만 \n전송할 수 있습니다.");
"gif, png, jpg 사진 파일만 전송할 수 있습니다.");
}
function imgComplete(img, imgSize, boxId) {
@@ -967,16 +963,10 @@ DoUpload.prototype = {
file = files[i];
if (!file.type.match(fileTypeRe)) {
// 엣지를 제외한 ie브라우저인지 체크
var agent = navigator.userAgent.toLowerCase();
if (agent.indexOf('trident') != -1 || agent.indexOf("msie") != -1) {
explorerFileFilterError(file.name);
} else {
FileFilterError(file.name);
}
fileFilterError(file.name);
continue;
}
this.list.push(file);
this.list.push(file);
}
if (this.list.length < 1) {
@@ -1089,50 +1079,46 @@ DoUpload.prototype = {
return blob;
},
imageResize : function (image, filetype, resizeWidth, orientation, addWaterMark) {
var canvas, source_w = image.width, source_h = image.height,
resize_h, resize_w, ratio_w, ratio_h, ratio_w_half, ratio_h_half,
imageResize : function (image, filetype, resize_w, orientation, addWaterMark) {
var canvas = document.createElement("canvas"),
ctx = canvas.getContext("2d"),
source_w = image.width,
source_h = image.height,
resize_h, ratio_w, ratio_h, ratio_w_half, ratio_h_half,
source_img, resize_img, source_data, resize_data, j, i,
x2, weight, weights, weights_alpha, gx_a, gx_b, gx_g, gx_r, center_x, center_y, x_start, x_stop,
y_start, y_stop, y, dy, part_w, x, dx, w, pos_x,
ctx, gl, imageData = null;
x2, weight, weights, weights_alpha, gx_a, gx_b, gx_g, gx_r,
center_x, center_y, x_start, x_stop,
y_start, y_stop, y, dy, part_w, x, dx, w, pos_x, gl, imageData = null;
// 카메라 로테이션 보정
if (orientation > 0) {
canvas = document.createElement("canvas");
canvas.width = source_w;
canvas.height = source_h;
ctx = canvas.getContext("2d");
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.save();
if (orientation > 0 && !supportImageOrientation) {
if ([5,6,7,8].indexOf(orientation) > -1) {
canvas.width = source_h;
canvas.height = source_w;
} else {
canvas.width = source_w;
canvas.height = source_h;
}
switch (orientation) {
case 2 :
ctx.translate(-1, 0, 0, 1, canvas.width, 0); break;
case 3 :
ctx.translate(-1, 0, 0, -1, canvas.width, canvas.height); break;
case 4 :
ctx.translate(1, 0, 0, -1, 0, canvas.height); break;
case 5 :
ctx.translate(0, 1, 1, 0, 0, 0); break;
case 6 :
ctx.translate(0, 1, -1, 0, canvas.height, 0); break;
case 7 :
ctx.translate(0, -1, -1, 0, canvas.height, canvas.width); break;
case 8 :
ctx.translate(0, -1, 1, 0, 0, canvas.width); break;
case 2 : ctx.transform(-1, 0, 0, 1, source_w, 0); break;
case 3 : ctx.transform(-1, 0, 0, -1, source_w, source_h); break;
case 4 : ctx.transform(1, 0, 0, -1, 0, source_h); break;
case 5 : ctx.transform(0, 1, 1, 0, 0, 0); break;
case 6 : ctx.transform(0, 1, -1, 0, source_h, 0); break;
case 7 : ctx.transform(0, -1, -1, 0, source_h, source_w); break;
case 8 : ctx.transform(0, -1, 1, 0, 0, source_w); break;
default: break;
}
ctx.drawImage(image, 0, 0);
ctx.drawImage(image, 0, 0, source_w, source_h);
imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
ctx.restore();
source_w = canvas.width;
source_h = canvas.height;
}
if (source_w > resizeWidth) {
resize_w = resizeWidth;
if (source_w > resize_w) {
resize_h = Math.ceil(resize_w / source_w * source_h);
try {
@@ -1143,8 +1129,6 @@ DoUpload.prototype = {
canvas = gl_canvas;
});
} catch (ignore) {
canvas = document.createElement("canvas");
ctx = canvas.getContext("2d");
canvas.width = source_w;
canvas.height = source_h;
@@ -1216,14 +1200,10 @@ DoUpload.prototype = {
canvas.height = resize_h;
ctx.putImageData(resize_img, 0, 0);
}
} else {
canvas = document.createElement("canvas"),
canvas.width = source_w; canvas.height = source_h;
ctx = canvas.getContext("2d");
canvas.width = source_w;
canvas.height = source_h;
ctx.drawImage(image, 0, 0);
resize_h = source_h;
resize_w = source_w;
}
if (this.reader.watermark && addWaterMark) {
@@ -1484,7 +1464,7 @@ function setResizeWidth() {
}
function init(dialog) {
var dlg, i, elem, input, select, value, name, xhr_f, xhr_v, tmpcanvas, glicon;
var dlg, i, elem, input, select, value, name, xhr_f, xhr_v, tmpcanvas, glicon, testImg;
oEditor = this;
oEditor.dialog = dialog;
@@ -1556,11 +1536,6 @@ function init(dialog) {
}
}
if (browser.mobile) {
input = document.getElementById('inputImageUpload');
input.setAttribute('capture', 'filesystem');
}
tmpcanvas = document.createElement('canvas');
if (tmpcanvas.getContext('webgl', {preserveDrawingBuffer: true}) ||
tmpcanvas.getContext('experimental-webgl', {preserveDrawingBuffer: true}))
@@ -1588,8 +1563,24 @@ function init(dialog) {
xhr_f.send();
xhr_v.send();
}
glicon = new Image();
glicon.className = 'webgl_logo';
glicon.src = uploadImagePath + (useWebGL ? "/webgl.png" : "/webgl-off.png");
document.getElementById('webgl_logo_wrapper').appendChild(glicon);
// 브라우저가 사진 Orientation 보정을 자동으로 지원하지는지 확인
testImg = new Image();
testImg.onload = function () {
supportImageOrientation = testImg.width === 2 && testImg.height === 3;
};
testImg.src =
'data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAA' +
'AAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA' +
'QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE' +
'BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAIAAwMBEQACEQEDEQH/x' +
'ABRAAEAAAAAAAAAAAAAAAAAAAAKEAEBAQADAQEAAAAAAAAAAAAGBQQDCAkCBwEBAAAAAAA' +
'AAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AG8T9NfSMEVMhQ' +
'voP3fFiRZ+MTHDifa/95OFSZU5OzRzxkyejv8ciEfhSceSXGjS8eSdLnZc2HDm4M3BxcXw' +
'H/9k=';
}
+43
View File
@@ -0,0 +1,43 @@
<?xml version='1.0' encoding='UTF-8'?>
<!ELEMENT Template (Container|PopupWindow|Toolbar)*>
<!ELEMENT Container (Html)*>
<!ELEMENT Html (#PCDATA)>
<!ELEMENT PopupWindow (Html)*>
<!ELEMENT Toolbar (Image|Group)*>
<!ELEMENT Image EMPTY>
<!ATTLIST Image
file CDATA #IMPLIED
>
<!ELEMENT Group (Button)*>
<!ATTLIST Group
name CDATA #IMPLIED
>
<!ELEMENT Button (Attribute)*>
<!ATTLIST Button
name CDATA #IMPLIED
tooltip CDATA #IMPLIED
>
<!ELEMENT Attribute (Icon|Execution)*>
<!ATTLIST Attribute
class CDATA #IMPLIED
width CDATA #IMPLIED
height CDATA #IMPLIED
check CDATA #IMPLIED
default CDATA #IMPLIED
use CDATA #IMPLIED
type CDATA #IMPLIED
node CDATA #IMPLIED
>
<!ELEMENT Icon EMPTY>
<!ATTLIST Icon
position CDATA #IMPLIED
width CDATA #IMPLIED
class CDATA #IMPLIED
margin CDATA #IMPLIED
alt CDATA #IMPLIED
>
<!ELEMENT Execution EMPTY>
<!ATTLIST Execution
method CDATA #IMPLIED
value CDATA #IMPLIED
>
+4 -1
View File
@@ -211,14 +211,17 @@ $ct_cert->mf_clear();
var $opener = window.opener;
var is_mobile = false;
$opener.name="parentPage";
$opener.name="parentPage";
// 안드로이드 웹뷰에서 거의 다 새창을 지원하므로 더 이상 iframe 을 사용하지 않습니다.
/*
if (typeof g5_is_mobile != "undefined" && g5_is_mobile ) {
$opener = window.parent;
is_mobile = true;
} else {
$opener = window.opener;
}
*/
// up_hash 검증
if( document.mbFindForm.up_hash.value != $opener.$("input[name=veri_up_hash]").val() ) {
+5 -5
View File
@@ -116,17 +116,17 @@ window.onload = function() {
function cert_page()
{
var frm = document.form_auth;
// iframe에서 세션공유 문제가 있어서 더 이상 iframe 을 사용하지 않습니다.
var use_iframe = false;
if ( ( frm.req_tx.value == "auth" || frm.req_tx.value == "otp_auth" ) )
{
frm.action=".<?php echo $resultPage; ?>";
// MOBILE
if( ( navigator.userAgent.indexOf("Android") > - 1 || navigator.userAgent.indexOf("iPhone") > - 1 ) )
if(use_iframe && ( navigator.userAgent.indexOf("Android") > - 1 || navigator.userAgent.indexOf("iPhone") > - 1 ) )
{
self.name="kcp_cert";
}
// PC
else
{
frm.target="kcp_cert";
@@ -139,12 +139,12 @@ function cert_page()
else if ( frm.req_tx.value == "cert" )
{
if( ( navigator.userAgent.indexOf("Android") > - 1 || navigator.userAgent.indexOf("iPhone") > - 1 ) ) // 스마트폰인 경우
if(use_iframe && ( navigator.userAgent.indexOf("Android") > - 1 || navigator.userAgent.indexOf("iPhone") > - 1 ) )
{
window.parent.$("input[name=veri_up_hash]").val(frm.up_hash.value); // up_hash 데이터 검증을 위한 필드
self.name="auth_popup";
}
else // 스마트폰 아닐때
else
{
window.opener.$("input[name=veri_up_hash]").val(frm.up_hash.value); // up_hash 데이터 검증을 위한 필드
frm.target = "auth_popup";
+3 -1
View File
@@ -211,8 +211,10 @@ $ct_cert->mf_clear();
$(function() {
var $opener;
var is_mobile = false;
// iframe에서 세션공유 문제가 있어서 더 이상 iframe 을 사용하지 않습니다.
var use_iframe = false;
if( ( navigator.userAgent.indexOf("Android") > - 1 || navigator.userAgent.indexOf("iPhone") > - 1 ) ) { // 스마트폰인 경우
if(use_iframe && ( navigator.userAgent.indexOf("Android") > - 1 || navigator.userAgent.indexOf("iPhone") > - 1 ) ) {
$opener = window.parent;
is_mobile = true;
} else {
+1 -1
View File
@@ -24,7 +24,7 @@ $bo_v_sns_class = $config['cf_kakao_js_apikey'] ? 'show_kakao' : '';
?>
<?php if($config['cf_kakao_js_apikey']) { ?>
<script src="//developers.kakao.com/sdk/js/kakao.min.js" charset="utf-8"></script>
<script src="//developers.kakao.com/sdk/js/kakao.min.js" async charset="utf-8"></script>
<script src="<?php echo G5_JS_URL; ?>/kakaolink.js" charset="utf-8"></script>
<script type='text/javascript'>
//<![CDATA[
+3 -3
View File
@@ -42,15 +42,15 @@ if (function_exists('before_check_cart_price')) {
}
// 재고체크
$sql = " select *
$sql = " select *, sum(ct_qty) as sum_ct_qty
from {$g5['g5_shop_cart_table']}
where od_id = '$tmp_cart_id'
and ct_select = '1'
and ct_status = '쇼핑' ";
and ct_status = '쇼핑' GROUP BY od_id, it_id, it_name, ct_option, io_id, io_type ";
$result = sql_query($sql);
for($i=0; $row=sql_fetch_array($result); $i++) {
$ct_qty = $row['ct_qty'];
$ct_qty = $row['sum_ct_qty'];
// 해당 상품이 품절 또는 판매중지 상태인지 체크합니다.
$sql = " select it_soldout, it_use, ca_id, ca_id2, ca_id3 from {$g5['g5_shop_item_table']} where it_id = '".$row['it_id']."' ";
+2 -2
View File
@@ -42,8 +42,8 @@ include_once('./_head.php');
?>
<!-- 장바구니 시작 { -->
<script src="<?php echo G5_JS_URL; ?>/shop.js"></script>
<script src="<?php echo G5_JS_URL; ?>/shop.override.js"></script>
<script src="<?php echo G5_JS_URL; ?>/shop.js?ver=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo G5_JS_URL; ?>/shop.override.js?ver=<?php echo G5_JS_VER; ?>"></script>
<div id="sod_bsk" class="od_prd_list">
+7 -2
View File
@@ -58,10 +58,14 @@ if($act == "buy")
}
// 주문 상품의 재고체크
$sql = " select ct_qty, it_name, ct_option, io_id, io_type
// 동일 상품 옵션이 레코드에 있는 경우 재고를 제대로 체크하지 못하는 오류가 있음
// $sql = " select ct_qty, it_name, ct_option, io_id, io_type from {$g5['g5_shop_cart_table']} where od_id = '$tmp_cart_id' and it_id = '$it_id' ";
$sql = " select sum(ct_qty) as ct_qty, it_name, ct_option, io_id, io_type
from {$g5['g5_shop_cart_table']}
where od_id = '$tmp_cart_id'
and it_id = '$it_id' ";
and it_id = '$it_id' GROUP BY od_id, it_id, it_name, ct_option, io_id, io_type ";
$result = sql_query($sql);
for($k=0; $row=sql_fetch_array($result); $k++) {
@@ -73,6 +77,7 @@ if($act == "buy")
and ct_stock_use = 0
and ct_status = '쇼핑'
and ct_select = '1' ";
$sum = sql_fetch($sql);
// $sum['cnt'] 가 null 일때 재고 반영이 제대로 안되는 오류 수정 (그누위즈님,210614)
// $sum_qty = $sum['cnt'];

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