Compare commits

...
12 Commits
Author SHA1 Message Date
섭웨이bandGitHub c91b74d991 Merge pull request #383 from gnuboard/promote/v5.6.36
release: 그누보드 5.6.36 배포
2026-09-01 11:41:35 +09:00
whitedot 7ec4d3a66c chore: 그누보드 배포 버전을 5.6.36으로 변경 2026-09-01 11:40:16 +09:00
whitedot 05fe1b0cdb fix: JS와 CSS 캐시 버전을 파일 수정시간으로 자동 갱신
정적 자산 URL의 캐시 키를 파일 수정시간으로 생성하고 요청 내에서 같은 파일의 조회 결과를 재사용한다.
2026-09-01 11:40:15 +09:00
whitedot 0242e8f1a3 security: SVG 및 SVGZ 파일 업로드 차단
게시판, 1:1문의, 폼메일 및 쇼핑몰 설정의 클라이언트와 서버 검증에서 SVG 계열 파일 업로드를 거부한다.
2026-09-01 11:40:15 +09:00
whitedot 4e8474f231 chore: 제거된 알림톡 기능의 잔여 참조 정리
관리자 회원 내보내기와 결제 공통 파일에 남은 알림톡 관련 코드 및 스타일을 제거한다.
2026-09-01 11:40:15 +09:00
whitedot 71209fc7c9 security: KVE-2026-1899 KVE-2026-1900 KVE-2026-1909 입력 및 권한 검증 강화
상품 정렬값을 허용 목록으로 검증하고 관리자 권한 컨텍스트를 명확히 구분한다.

모바일 KCP의 Windows 명령 인자를 안전하게 조립하고 검증한다.
2026-09-01 11:40:15 +09:00
섭웨이bandGitHub 375a8336e8 Merge pull request #380 from gnuboard/promote/readme-public-pr-test
docs: 프로젝트 안내와 설치·보안·커밋 규칙 문서 추가
2026-08-25 15:30:14 +09:00
whitedot 120d2960f2 docs: 압축파일 설치에 GitHub Releases 다운로드 경로 추가 2026-08-25 15:28:04 +09:00
whitedot 9659cceae6 docs: README에 PHP·DB와 기능별 설치 요구사항 명시 2026-08-25 15:28:04 +09:00
whitedot 7e42eb78e4 docs: 한국어 문서와 커밋 메시지 작성 규칙 추가 2026-08-25 15:28:04 +09:00
whitedot e475219115 docs: expand installation and security guidance 2026-08-25 15:28:04 +09:00
whitedot c70260c8cf docs: add project README 2026-08-25 14:37:07 +09:00
95 changed files with 614 additions and 277 deletions
+50
View File
@@ -0,0 +1,50 @@
# 저장소 작업 지침
## 적용 범위
이 문서는 저장소 루트와 모든 하위 디렉터리에 적용한다.
## 문서 작성 언어
- README, 보안 정책, 설치 안내, 개발 가이드 등 저장소 문서는 원칙적으로 한국어로 작성한다.
- 파일명, 코드 식별자, 명령어, API 명칭, 설정값과 외부 서비스의 고유 명칭은 원문을 유지한다.
- 영문 문서나 번역본이 별도로 필요한 경우에는 해당 작업에서 명시적으로 요청된 범위에 한해 추가한다.
## 커밋 메시지
- 커밋 메시지는 한국어로 작성한다.
- 제목은 `<접두어>: <변경 내용>` 형식을 사용한다.
- 접두어는 아래 권장 목록에서 변경 목적에 가장 가까운 항목을 선택한다.
- 변경 대상을 포함해 무엇을 왜 변경했는지 알 수 있도록 구체적으로 작성한다.
- `수정`, `업데이트`, `작업`처럼 변경 내용을 식별하기 어려운 표현만 사용하지 않는다.
- 하나의 커밋에는 가능한 한 하나의 목적에 해당하는 변경만 포함한다.
- 제목만으로 설명이 부족하면 본문에 변경 이유, 영향 범위와 검증 방법을 추가한다.
- 관련 이슈가 있으면 커밋 본문이나 꼬리말에 이슈 번호를 기록한다.
### 권장 접두어
- `feat`: 새로운 기능 추가
- `fix`: 버그 또는 잘못된 동작 수정
- `security`: 보안 취약점 수정이나 보안 강화
- `docs`: 문서 추가 또는 변경
- `refactor`: 동작 변경 없는 코드 구조 개선
- `perf`: 성능 개선
- `test`: 테스트 추가 또는 변경
- `build`: 빌드 시스템이나 의존성 변경
- `ci`: CI/CD 설정이나 자동화 변경
- `chore`: 기능과 직접 관련 없는 유지보수 작업
- `revert`: 이전 변경 되돌리기
### 보안 이슈 식별자
- KVE, CVE 등 식별자가 부여된 보안 이슈를 조치하는 커밋은 제목에 관련 식별자를 반드시 병기한다.
- 식별자는 `security:` 접두어 바로 뒤에 원문 그대로 작성한다.
- 하나의 커밋이 여러 보안 이슈를 함께 조치하면 관련 식별자를 모두 병기한다.
- 예: `security: KVE-2026-1909 모바일 KCP Windows 명령 인자 주입 차단`
### 작성 예시
- `docs: Git과 압축파일 설치 절차를 구분해 README에 안내`
- `fix: 품목 일부 취소 시 PG 취소금액 불일치 수정`
- `security: KVE-2026-1899 상품 정렬값 화이트리스트 검증으로 SQL 삽입 차단`
- `refactor: 객체 캐시의 유형별 저장 키 생성 로직 분리`
+78
View File
@@ -0,0 +1,78 @@
# 그누보드5
그누보드5는 PHP와 MySQL 또는 MariaDB 기반의 오픈소스 CMS입니다. 게시판과 회원 관리 기능을 제공하며 쇼핑몰 솔루션 영카트를 포함합니다.
## 버전 확인
현재 소스 코드의 버전은 [`version.php`](version.php)에서 확인할 수 있습니다.
## 다운로드 및 설치
### 설치 환경
#### 기본 요구사항
- PHP 5.2.17 이상
- 최소 요구 버전은 PHP 5.2.17이며 PHP 7.2 이상을 권장합니다.
- MySQL 5.0 이상 또는 MySQL 5.0 이상의 기능을 지원하는 MariaDB
- Linux 호환 운영체제
#### 필수 라이브러리
- GD Library 2.0 이상
- iconv
#### 추가로 필요한 모듈 및 프로그램
- 글을 SNS로 복사하는 기능 사용 시
- cURL
- JSON
- 영카트5 모바일 결제 사용 시
- SOAP
- OpenSSL
> SIR에서 직접 제작한 그누보드5 및 호환 프로그램은 Linux에서만 개발하고 테스트했습니다. 다른 운영체제에서의 정상 동작은 보장하지 않습니다.
설치 환경에 관한 자세한 내용은 [그누보드5 공식 매뉴얼](https://sir.kr/manuals/g5/1)을 확인하십시오.
### Git을 이용하는 방법
Git을 사용할 수 있는 서버에서는 [GitHub 저장소](https://github.com/gnuboard/gnuboard5)를 복제하여 설치할 수 있습니다.
```bash
git clone https://github.com/gnuboard/gnuboard5.git
cd gnuboard5
```
복제한 `gnuboard5` 디렉터리를 웹 서버의 서비스 경로로 사용하거나, 서비스 경로 안에 소스 전체를 배치합니다. 이후 아래의 공통 설치 절차를 진행합니다.
### 압축파일을 이용하는 방법
1. 다음 중 한 곳에서 설치할 버전의 압축파일을 내려받습니다.
- [GitHub Releases](https://github.com/gnuboard/gnuboard5/releases)에서 원하는 버전을 선택하고 `Source code (zip)`을 내려받습니다. `*.patch.zip` 파일은 기존 설치본을 업데이트하기 위한 패치이므로 신규 설치에는 사용하지 않습니다.
- [SIR 그누보드5 다운로드](https://sir.kr/boards/g5_pds)에서 원하는 버전의 배포본을 내려받습니다.
2. 내려받은 압축파일을 풉니다.
3. 압축을 푼 디렉터리의 파일과 하위 디렉터리를 FTP, SFTP 등의 방법으로 웹 서버의 서비스 경로에 업로드합니다.
4. 업로드가 끝나면 아래의 공통 설치 절차를 진행합니다.
### 공통 설치 절차
1. 브라우저에서 소스를 배치한 주소로 접속하여 설치 화면을 엽니다.
2. `data` 디렉터리를 만들라는 안내가 표시되면 `config.php`가 있는 디렉터리에 `data`를 만들고 웹 서버가 쓸 수 있도록 권한을 설정합니다. 공식 매뉴얼에서는 `707` 권한을 예시로 사용합니다.
3. 라이선스 내용을 확인하고 동의한 뒤 설치를 계속합니다.
4. MySQL 또는 MariaDB 접속 정보와 최고관리자 정보를 입력합니다.
5. 설치 완료 화면을 확인한 뒤 생성한 최고관리자 계정으로 로그인합니다.
> 기존 사이트에 재설치하면 데이터가 삭제될 수 있습니다. 진행하기 전에 파일과 데이터베이스를 백업하십시오.
## 문서 및 지원
- [그누보드5 공식 페이지](https://sir.kr/main/g5/)
- [그누보드5 공식 매뉴얼](https://sir.kr/manuals/g5/1)
- [그누보드5 Q&A](https://sir.kr/questions?s_tag=%EA%B7%B8%EB%88%84%EB%B3%B4%EB%93%9C5)
보안 취약점 신고 방법은 [`SECURITY.md`](SECURITY.md)를 확인하십시오.
## 라이선스
라이선스 전문과 적용 조건은 [`LICENSE.txt`](LICENSE.txt)를 확인하십시오.
+4 -2
View File
@@ -1,3 +1,5 @@
# Gnuboard5 Security Policy
# 그누보드5 보안 정책
Please ask [https://sir.kr/security/.](https://sir.kr/co_qa)
그누보드5에서 보안 취약점을 발견한 경우 악용 가능한 상세 내용을 공개 GitHub 이슈에 게시하지 마십시오.
취약점 정보와 재현 방법은 [SIR 보안 취약점 신고 게시판](https://sir.kr/boards/co_qa)을 통해 제보해 주십시오.
+2 -2
View File
@@ -52,8 +52,8 @@ $print_version = ($is_admin == 'super') ? 'Version ' . G5_GNUBOARD_VER : '';
<!-- <p>실행시간 : <?php echo get_microtime() - $begin_time; ?> -->
<script src="<?php echo G5_ADMIN_URL ?>/admin.js?ver=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo G5_JS_URL ?>/jquery.anchorScroll.js?ver=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_ADMIN_URL.'/admin.js'); ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/jquery.anchorScroll.js'); ?>"></script>
<script>
$(function() {
+1 -1
View File
@@ -14,7 +14,7 @@ if (empty($bo_table)) {
<script>
var g5_admin_csrf_token_key = "<?php echo (function_exists('admin_csrf_token_key')) ? admin_csrf_token_key() : ''; ?>";
</script>
<script src="<?php echo G5_ADMIN_URL ?>/admin.js?ver=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_ADMIN_URL.'/admin.js'); ?>"></script>
<div class="new_win">
<h1><?php echo $g5['title']; ?></h1>
+2 -11
View File
@@ -354,16 +354,7 @@ border-bottom: 5px solid black;}
.excel-download-progress .progress-download-box a:hover { border-color: #6f809a; box-shadow: 0 2px 4px rgba(111, 128, 154, 0.15); }
.excel-download-progress .progress-download-box a:active { box-shadow: inset 0 1px 2px rgba(0,0,0,0.1); }
.field-select-form { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); margin-top: 15px; gap: 0px 10px; padding: 10px; background-color: #f9fafb; border: 1px solid #e5e7eb; border-radius: 8px; color: #374151; }
.field-select-form label { display: flex; align-items: center; cursor: pointer; padding: 6px 10px; border-radius: 4px; }
.field-select-form label:hover { background-color: #f3f4f6; }
.field-select-form input[type="checkbox"] { margin-right: 8px; transform: scale(1.2); }
.field-separator { grid-column: 1 / -1; border-top: 1px solid #d1d5db; margin: 8px 0; }
.selected-fields-preview { padding: 8px; background-color: #eef2f7; border: 1px solid #d1d5db; border-radius: 6px; margin: 10px 0px; color: #1f2937; display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
.selected-fields-preview strong { padding: 4px 8px; }
.selected-fields-preview .field-tag { background-color: #dbeafe; color: #1e40af; padding: 4px 8px; border-radius: 4px; }
/* 페이지 내 실행 */
/* 페이지 내 실행 */
.local_cmd {min-width:960px}
.local_cmd01 {margin:0 0 10px;padding:0 }
.local_cmd01 .cmd_tit {font-weight:bold}
@@ -1217,4 +1208,4 @@ input[type="text"]{max-width:200px}
@media only screen and (max-device-width : 480px) and (orientation : portrait){
/* Styles */
input[type="text"]{max-width:200px}
}
}
-11
View File
@@ -59,18 +59,8 @@ function get_export_config($type = null)
*/
function get_member_export_params()
{
// 친구톡 양식 - 엑셀 양식에 포함할 항목
$fieldArray = array_map('trim', explode(',', isset($_GET['fields']) ? $_GET['fields'] : ''));
$vars = array();
foreach ($fieldArray as $index => $field) {
if(!empty($field)){
$vars['var' . ($index + 1)] = $field;
}
}
$params = array(
'page' => 1,
'formatType' => (int)(isset($_GET['formatType']) ? $_GET['formatType'] : 1),
'use_stx' => isset($_GET['use_stx']) ? $_GET['use_stx'] : 0,
'stx_cond' => clean_xss_tags(isset($_GET['stx_cond']) ? $_GET['stx_cond'] : 'like'),
'sfl' => clean_xss_tags(isset($_GET['sfl']) ? $_GET['sfl'] : ''),
@@ -93,7 +83,6 @@ function get_member_export_params()
'agree_date_end' => clean_xss_tags(isset($_GET['agree_date_end']) ? $_GET['agree_date_end'] : ''),
'use_intercept' => isset($_GET['use_intercept']) ? $_GET['use_intercept'] : 0,
'intercept' => clean_xss_tags(isset($_GET['intercept']) ? $_GET['intercept'] : 'exclude'),
'vars' => $vars,
);
// 레벨 범위 검증
+3 -29
View File
@@ -271,7 +271,7 @@ function closePreviousEventSource() {
}
// 2. FormData QueryString 변환
function buildDownloadParams(selectedFields = []) {
function buildDownloadParams() {
const formData = new FormData(document.getElementById('fsearch'));
const params = new URLSearchParams(formData);
@@ -281,10 +281,10 @@ function buildDownloadParams(selectedFields = []) {
}
// 3. 메인 함수
function startExcelDownload(selectedFields = []) {
function startExcelDownload() {
closePreviousEventSource();
const query = buildDownloadParams(selectedFields);
const query = buildDownloadParams();
showDownloadPopup();
eventSource = new EventSource(`member_list_exel_export.php?${query}`);
@@ -340,32 +340,6 @@ function handlePopupCloseWithConfirm(e) {
PopupManager.close('popupOverlay');
}
// 체크박스 선택 시 최대 3개 제한 및 선택된 항목 미리보기 표시
function bindFieldSelectEvents() {
const fieldSelectForm = document.getElementById('fieldSelectForm');
if (!fieldSelectForm) return;
fieldSelectForm.addEventListener('change', function (e) {
if (e.target.name === 'fields') {
const selected = fieldSelectForm.querySelectorAll('input[name="fields"]:checked');
if (selected.length > 3) {
alert("최대 3개까지 선택 가능합니다.");
e.target.checked = false;
return;
}
// 선택된 항목 표시
const previewContainer = document.getElementById('selectedFieldsPreview');
let spans = '<strong>선택된 항목:</strong>';
selected.forEach(field => {
const label = field.parentElement.textContent.trim();
spans += `<span class="field-tag">${label}</span>`;
});
previewContainer.innerHTML = spans;
}
});
}
// 엑셀 생성 및 다운로드 실행
function handleProgressUpdate() {
return function(e) {
+10
View File
@@ -15,6 +15,16 @@ if(! (isset($_POST['de_admin_company_tel']) && check_vaild_callback($_POST['de_a
// 로그인을 바로 이 주소로 하는 경우 쇼핑몰설정값이 사라지는 현상을 방지
if (!$_POST['de_admin_company_owner']) goto_url("./configform.php");
$logo_img_fields = array('logo_img', 'logo_img2', 'mobile_logo_img', 'mobile_logo_img2');
foreach ($logo_img_fields as $logo_img_field) {
if (isset($_FILES[$logo_img_field]['name']) && $_FILES[$logo_img_field]['name']) {
$filename = get_safe_filename($_FILES[$logo_img_field]['name']);
if (is_disallowed_svg_filename($filename)) {
alert('허용되지 않는 파일 확장자입니다. (svg, svgz)');
}
}
}
if (! empty($_POST['logo_img_del'])) @unlink(G5_DATA_PATH."/common/logo_img");
if (! empty($_POST['logo_img_del2'])) @unlink(G5_DATA_PATH."/common/logo_img2");
if (! empty($_POST['mobile_logo_img_del'])) @unlink(G5_DATA_PATH."/common/mobile_logo_img");
+16 -3
View File
@@ -28,9 +28,22 @@ if (!preg_match("/([0-9a-zA-Z_-]+)@([0-9a-zA-Z_-]+)\.([0-9a-zA-Z_-]+)/", $to)){
}
$file = array();
// 첨부파일을 이동하기 전에 모든 파일명을 먼저 확인한다.
for ($i=1; $i<=$attach; $i++) {
if ($_FILES['file'.$i]['name'])
$file[] = attach_file($_FILES['file'.$i]['name'], $_FILES['file'.$i]['tmp_name']);
$file_key = 'file'.$i;
if (isset($_FILES[$file_key]['name']) && $_FILES[$file_key]['name']) {
$filename = get_safe_filename($_FILES[$file_key]['name']);
if (is_disallowed_svg_filename($filename)) {
alert_close('허용되지 않는 파일 확장자입니다. (svg, svgz)');
}
}
}
for ($i=1; $i<=$attach; $i++) {
$file_key = 'file'.$i;
if (isset($_FILES[$file_key]['name']) && $_FILES[$file_key]['name'])
$file[] = attach_file($_FILES[$file_key]['name'], $_FILES[$file_key]['tmp_name']);
}
$content = stripslashes($content);
@@ -78,4 +91,4 @@ include_once(G5_PATH.'/head.sub.php');
alert_close('메일을 정상적으로 발송하였습니다.');
include_once(G5_PATH.'/tail.sub.php');
include_once(G5_PATH.'/tail.sub.php');
+3 -1
View File
@@ -1,6 +1,8 @@
<?php
include_once('./_common.php');
$is_admin = get_super_admin_type($is_admin);
if($is_guest)
alert('회원이시라면 로그인 후 이용해 주십시오.', G5_URL);
@@ -93,4 +95,4 @@ for($i=0; $i<$count; $i++) {
*/
run_event('qa_delete', $tmp_array, $deleted);
goto_url(G5_BBS_URL.'/qalist.php'.preg_replace('/^&amp;/', '?', $qstr));
goto_url(G5_BBS_URL.'/qalist.php'.preg_replace('/^&amp;/', '?', $qstr));
+3 -1
View File
@@ -1,6 +1,8 @@
<?php
include_once('./_common.php');
$is_admin = get_super_admin_type($is_admin);
// clean the output buffer
ob_end_clean();
@@ -85,4 +87,4 @@ while(!feof($fp)) {
usleep(1000);
}
fclose ($fp);
flush();
flush();
+6 -4
View File
@@ -1,13 +1,15 @@
<?php
include_once('./_common.php');
$is_admin = get_super_admin_type($is_admin);
if($is_guest)
alert('회원이시라면 로그인 후 이용해 보십시오.', './login.php?url='.urlencode(G5_BBS_URL.'/qalist.php'));
$qaconfig = get_qa_config();
$token = '';
if( $is_admin ){
if($is_admin === 'super') {
$token = _token();
set_session('ss_qa_delete_token', $token);
}
@@ -16,7 +18,7 @@ $g5['title'] = $qaconfig['qa_title'];
include_once('./qahead.php');
$skin_file = $qa_skin_path.'/list.skin.php';
$is_auth = $is_admin ? true : false;
$is_auth = ($is_admin === 'super');
$category_option = '';
@@ -132,7 +134,7 @@ if(is_file($skin_file)) {
$is_checkbox = false;
$admin_href = '';
if($is_admin) {
if($is_admin === 'super') {
$is_checkbox = true;
$admin_href = G5_ADMIN_URL.'/qa_config.php';
}
@@ -148,4 +150,4 @@ if(is_file($skin_file)) {
echo '<div>'.str_replace(G5_PATH.'/', '', $skin_file).'이 존재하지 않습니다.</div>';
}
include_once('./qatail.php');
include_once('./qatail.php');
+5 -3
View File
@@ -2,6 +2,8 @@
include_once('./_common.php');
include_once(G5_EDITOR_LIB);
$is_admin = get_super_admin_type($is_admin);
$qa_id = isset($_REQUEST['qa_id']) ? (int) $_REQUEST['qa_id'] : 0;
if($is_guest)
@@ -115,7 +117,7 @@ if(is_file($skin_file)) {
}
*/
if(($view['qa_type'] && $is_admin) || (!$view['qa_type'] && $view['qa_status'] == 0)) {
if(($view['qa_type'] && $is_admin === 'super') || (!$view['qa_type'] && $view['qa_status'] == 0)) {
$update_href = G5_BBS_URL.'/qawrite.php?w=u&amp;qa_id='.$view['qa_id'].$qstr;
$delete_href = G5_BBS_URL.'/qadelete.php?qa_id='.$view['qa_id'].'&amp;token='.$token.$qstr;
}
@@ -131,7 +133,7 @@ if(is_file($skin_file)) {
and qa_parent = '{$view['qa_id']}' ";
$answer = sql_fetch($sql);
if($is_admin) {
if($is_admin === 'super') {
$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;
}
@@ -216,4 +218,4 @@ if(is_file($skin_file)) {
echo '<div>'.str_replace(G5_PATH.'/', '', $skin_file).'이 존재하지 않습니다.</div>';
}
include_once('./qatail.php');
include_once('./qatail.php');
+7 -5
View File
@@ -2,6 +2,8 @@
include_once('./_common.php');
include_once(G5_EDITOR_LIB);
$is_admin = get_super_admin_type($is_admin);
if($w != '' && $w != 'u' && $w != 'r') {
alert('올바른 방법으로 이용해 주십시오.');
}
@@ -30,7 +32,7 @@ if(is_file($skin_file)) {
if($w == 'u' || $w == 'r') {
$sql = " select * from {$g5['qa_content_table']} where qa_id = '$qa_id' ";
if(!$is_admin) {
if($is_admin !== 'super') {
$sql .= " and mb_id = '{$member['mb_id']}' ";
}
@@ -40,7 +42,7 @@ if(is_file($skin_file)) {
if(!$write['qa_id'])
alert('게시글이 존재하지 않습니다.\\n삭제되었거나 자신의 글이 아닌 경우입니다.');
if(!$is_admin) {
if($is_admin !== 'super') {
if($write['qa_type'] == 0 && $write['qa_status'] == 1)
alert('답변이 등록된 문의글은 수정할 수 없습니다.');
@@ -117,7 +119,7 @@ if(is_file($skin_file)) {
if($w == '' || $w == 'r')
$write['qa_email'] = $member['mb_email'];
if($w == 'u' && $is_admin && $write['qa_type'])
if($w == 'u' && $is_admin === 'super' && $write['qa_type'])
$is_email = false;
}
@@ -132,7 +134,7 @@ if(is_file($skin_file)) {
if($w == '' || $w == 'r')
$write['qa_hp'] = $member['mb_hp'];
if($w == 'u' && $is_admin && $write['qa_type'])
if($w == 'u' && $is_admin === 'super' && $write['qa_type'])
$is_hp = false;
}
@@ -145,4 +147,4 @@ if(is_file($skin_file)) {
echo '<div>'.str_replace(G5_PATH.'/', '', $skin_file).'이 존재하지 않습니다.</div>';
}
include_once('./qatail.php');
include_once('./qatail.php');
+13 -2
View File
@@ -1,6 +1,8 @@
<?php
include_once('./_common.php');
$is_admin = get_super_admin_type($is_admin);
/*==========================
$w == a : 답변
$w == r : 추가질문
@@ -131,6 +133,15 @@ if($w == 'u' || $w == 'a' || $w == 'r') {
}
}
if (isset($_FILES['bf_file']['name']) && is_array($_FILES['bf_file']['name'])) {
foreach ($_FILES['bf_file']['name'] as $filename) {
$filename = get_safe_filename($filename);
if (is_disallowed_svg_filename($filename)) {
alert('허용되지 않는 파일 확장자입니다. (svg, svgz)');
}
}
}
// 파일개수 체크
$file_count = 0;
$upload_count = isset($_FILES['bf_file']['name']) ? count($_FILES['bf_file']['name']) : 0;
@@ -185,8 +196,8 @@ for ($i=1; $i<=$upload_count; $i++) {
}
if (is_uploaded_file($tmp_file)) {
// 관리자가 아니면서 설정한 업로드 사이즈보다 크다면 건너뜀
if (!$is_admin && $filesize > $qaconfig['qa_upload_size']) {
// 최고관리자가 아니면서 설정한 업로드 사이즈보다 크다면 건너뜀
if ($is_admin !== 'super' && $filesize > $qaconfig['qa_upload_size']) {
$file_upload_msg .= '"'.$filename.'" 파일의 용량('.number_format($filesize).' 바이트)이 게시판에 설정('.number_format($qaconfig['qa_upload_size']).' 바이트)된 값보다 크므로 업로드 하지 않습니다.\\n';
continue;
}
+9
View File
@@ -137,6 +137,15 @@ for ($i=1; $i<=10; $i++) {
}
}
if (isset($_FILES['bf_file']['name']) && is_array($_FILES['bf_file']['name'])) {
foreach ($_FILES['bf_file']['name'] as $filename) {
$filename = get_safe_filename($filename);
if (is_disallowed_svg_filename($filename)) {
alert('허용되지 않는 파일 확장자입니다. (svg, svgz)');
}
}
}
@include_once($board_skin_path.'/write_update.head.skin.php');
run_event('write_update_before', $board, $wr_id, $w, $qstr);
-8
View File
@@ -1,8 +0,0 @@
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
// 자바스크립트와 CSS 파일을 새로 다운로드 하도록 파일의 끝에 년월일 지정
// 예) https://도메인/css/default.css?ver=220620
// 예) https://도메인/js/common.js?ver=220620
define('G5_CSS_VER', '2303229');
define('G5_JS_VER', '2605291');
+6 -6
View File
@@ -58,11 +58,11 @@ if($config['cf_add_meta'])
<?php
if (defined('G5_IS_ADMIN')) {
if(!defined('_THEME_PREVIEW_'))
echo '<link rel="stylesheet" href="'.run_replace('head_css_url', G5_ADMIN_URL.'/css/admin.css?ver='.G5_CSS_VER, G5_URL).'">'.PHP_EOL;
echo '<link rel="stylesheet" href="'.get_versioned_asset_url(run_replace('head_css_url', G5_ADMIN_URL.'/css/admin.css', G5_URL)).'">'.PHP_EOL;
} else {
$shop_css = '';
if (defined('_SHOP_')) $shop_css = '_shop';
echo '<link rel="stylesheet" href="'.run_replace('head_css_url', G5_CSS_URL.'/'.(G5_IS_MOBILE?'mobile':'default').$shop_css.'.css?ver='.G5_CSS_VER, G5_URL).'">'.PHP_EOL;
echo '<link rel="stylesheet" href="'.get_versioned_asset_url(run_replace('head_css_url', G5_CSS_URL.'/'.(G5_IS_MOBILE?'mobile':'default').$shop_css.'.css', G5_URL)).'">'.PHP_EOL;
}
?>
<!--[if lte IE 8]>
@@ -91,13 +91,13 @@ add_javascript('<script src="'.G5_JS_URL.'/jquery-1.12.4.min.js"></script>', 0);
add_javascript('<script src="'.G5_JS_URL.'/jquery-migrate-1.4.1.min.js"></script>', 0);
if (defined('_SHOP_')) {
if(!G5_IS_MOBILE) {
add_javascript('<script src="'.G5_JS_URL.'/jquery.shop.menu.js?ver='.G5_JS_VER.'"></script>', 0);
add_javascript('<script src="'.G5_JS_URL.'/jquery.shop.menu.js"></script>', 0);
}
} else {
add_javascript('<script src="'.G5_JS_URL.'/jquery.menu.js?ver='.G5_JS_VER.'"></script>', 0);
add_javascript('<script src="'.G5_JS_URL.'/jquery.menu.js"></script>', 0);
}
add_javascript('<script src="'.G5_JS_URL.'/common.js?ver='.G5_JS_VER.'"></script>', 0);
add_javascript('<script src="'.G5_JS_URL.'/wrest.js?ver='.G5_JS_VER.'"></script>', 0);
add_javascript('<script src="'.G5_JS_URL.'/common.js"></script>', 0);
add_javascript('<script src="'.G5_JS_URL.'/wrest.js"></script>', 0);
add_javascript('<script src="'.G5_JS_URL.'/placeholders.min.js"></script>', 0);
add_stylesheet('<link rel="stylesheet" href="'.G5_JS_URL.'/font-awesome/css/font-awesome.min.css">', 0);
+91 -1
View File
@@ -59,6 +59,72 @@ function trim(s)
return t;
}
// SVG/SVGZ 업로드 파일 차단
function is_disallowed_svg_filename(filename)
{
// 서버의 파일명 정규화와 동일하게 특수문자를 제거
filename = (filename || "").replace(/[\0"'<>=#&!%\\()*+?]/g, "");
filename = filename.substring(filename.lastIndexOf("/") + 1);
filename = filename.replace(/[ .\t\n\r\v]+$/, "");
return /\.(svg|svgz)$/i.test(filename);
}
function is_svg_upload_target(input)
{
var name = input.name || "";
if (name.indexOf("bf_file[") === 0) {
return true;
}
if (input.form && input.form.name == "fformmail" && (name == "file1" || name == "file2")) {
return true;
}
return input.form && input.form.name == "fconfig" &&
(name == "logo_img" || name == "logo_img2" || name == "mobile_logo_img" || name == "mobile_logo_img2");
}
function has_disallowed_svg_file(input)
{
var i;
if (input.files && input.files.length) {
for (i=0; i<input.files.length; i++) {
if (is_disallowed_svg_filename(input.files[i].name)) {
return true;
}
}
return false;
}
return is_disallowed_svg_filename(input.value);
}
function check_disallowed_svg_upload(form)
{
var invalid_file = null;
$(form).find("input[type=file]").each(function() {
if (is_svg_upload_target(this) && has_disallowed_svg_file(this)) {
invalid_file = this;
return false;
}
});
if (!invalid_file) {
return true;
}
alert("허용되지 않는 파일 확장자입니다. (svg, svgz)");
$(form).find("input:submit, button:submit, input:image").prop("disabled", false);
invalid_file.focus();
return false;
}
// 자바스크립트로 PHP의 number_format 흉내를 냄
// 숫자에 , 를 출력
function number_format(data)
@@ -728,6 +794,30 @@ function get_write_token(bo_table)
}
$(function() {
$(document).on("change", "input[type=file]", function() {
if (!is_svg_upload_target(this) || !has_disallowed_svg_file(this)) {
return true;
}
alert("허용되지 않는 파일 확장자입니다. (svg, svgz)");
this.value = "";
return false;
});
if (document.addEventListener) {
document.addEventListener("submit", function(event) {
if (!check_disallowed_svg_upload(event.target)) {
event.preventDefault();
event.stopPropagation();
}
}, true);
} else {
$(document).on("submit", "form", function() {
return check_disallowed_svg_upload(this);
});
}
$(document).on("click", "form[name=fwrite] input:submit, form[name=fwrite] button:submit, form[name=fwrite] input:image", function() {
var f = this.form;
@@ -752,4 +842,4 @@ $(function() {
return true;
});
});
});
+114 -6
View File
@@ -20,6 +20,13 @@ function get_microtime()
}
// 게시판/그룹 관리자 문맥을 제외하고 최고관리자 권한만 반환
function get_super_admin_type($admin_type)
{
return $admin_type === 'super' ? 'super' : '';
}
// 한페이지에 보여줄 행, 현재페이지, 총페이지수, URL
function get_paging($write_pages, $cur_page, $total_page, $url, $add="")
{
@@ -3241,6 +3248,90 @@ function add_javascript($javascript, $order=0)
get_html_process_cls()->merge_javascript($javascript, $order);
}
// 로컬 정적 자산 URL에 파일 수정시간을 버전으로 추가
function get_versioned_asset_url($url)
{
if (!is_string($url) || $url === '' || !defined('G5_PATH') || G5_PATH === '') {
return $url;
}
$asset_url = preg_replace('/[?#].*$/', '', $url);
$g5_url = defined('G5_URL') ? rtrim(G5_URL, '/') : '';
$relative_path = '';
if ($g5_url !== '' && strpos($asset_url, $g5_url.'/') === 0) {
$relative_path = substr($asset_url, strlen($g5_url) + 1);
} else {
if (preg_match('#^[a-z][a-z0-9+.-]*://#i', $asset_url) || strpos($asset_url, '//') === 0 || substr($asset_url, 0, 1) !== '/') {
return $url;
}
$g5_url_path = $g5_url !== '' ? parse_url($g5_url, PHP_URL_PATH) : '';
$g5_url_path = rtrim((string) $g5_url_path, '/');
if ($g5_url_path !== '') {
if (strpos($asset_url, $g5_url_path.'/') !== 0) {
return $url;
}
$relative_path = substr($asset_url, strlen($g5_url_path) + 1);
} else {
$relative_path = ltrim($asset_url, '/');
}
}
$relative_path = str_replace('\\', '/', rawurldecode($relative_path));
if ($relative_path === '' || strpos($relative_path, "\0") !== false) {
return $url;
}
$root_path = @realpath(G5_PATH);
$file_path = @realpath(G5_PATH.'/'.$relative_path);
if ($root_path === false || $file_path === false || !is_file($file_path)) {
return $url;
}
$root_path = rtrim(str_replace('\\', '/', $root_path), '/');
$file_path = str_replace('\\', '/', $file_path);
if (strpos($file_path, $root_path.'/') !== 0) {
return $url;
}
$filetime = @filemtime($file_path);
if ($filetime === false) {
return $url;
}
$fragment = '';
$fragment_pos = strpos($url, '#');
if ($fragment_pos !== false) {
$fragment = substr($url, $fragment_pos);
$url = substr($url, 0, $fragment_pos);
}
if (preg_match('/([?&](?:amp;)?)ver=[^&#]*/i', $url)) {
$url = preg_replace('/([?&](?:amp;)?)ver=[^&#]*/i', '${1}ver='.$filetime, $url, 1);
} else {
$url .= (strpos($url, '?') === false ? '?' : '&').'ver='.$filetime;
}
return $url.$fragment;
}
function _callback_version_asset_url($matches)
{
return $matches[1].get_versioned_asset_url($matches[2]).$matches[3];
}
function add_filetime_version_to_html($html)
{
return preg_replace_callback(
'~(<(?:script|link)\b[^>]*\b(?:src|href)\s*=\s*[\'"])([^\'"]+?\.(?:js|css)(?:[?#][^\'"]*)?)([\'"])~i',
'_callback_version_asset_url',
$html
);
}
class html_process {
protected static $id = '0';
private static $instances = array();
@@ -3300,8 +3391,6 @@ class html_process {
// 현재접속자 처리
$tmp_sql = " select count(*) as cnt from {$g5['login_table']} where lo_ip = '{$_SERVER['REMOTE_ADDR']}' ";
$tmp_row = sql_fetch($tmp_sql);
$http_host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'];
if (!isset($member['mb_id'])) {
$member['mb_id'] = '';
}
@@ -3342,7 +3431,7 @@ class html_process {
if(!trim($link[1]))
continue;
$link[1] = preg_replace('#\.css([\'\"]?>)$#i', '.css?ver='.G5_CSS_VER.'$1', $link[1]);
$link[1] = add_filetime_version_to_html($link[1]);
$stylesheet .= PHP_EOL.$link[1];
}
@@ -3369,9 +3458,8 @@ class html_process {
foreach($scripts as $js) {
if(!trim($js[1]))
continue;
$add_version_str = (stripos($js[1], $http_host) !== false) ? '?ver='.G5_JS_VER : '';
$js[1] = preg_replace('#\.js([\'\"]?>)<\/script>$#i', '.js'.$add_version_str.'$1</script>', $js[1]);
$js[1] = add_filetime_version_to_html($js[1]);
$javascript .= $php_eol.$js[1];
$php_eol = PHP_EOL;
@@ -4004,6 +4092,26 @@ function get_safe_filename($name)
return $name;
}
// 업로드 파일명이 SVG 또는 SVGZ 확장자인지 확인
function is_disallowed_svg_filename($filename)
{
if (!is_string($filename) || $filename === '') {
return false;
}
$filename = str_replace(array("\0", '\\'), array('', '/'), $filename);
$filename = basename($filename);
$filename = rtrim($filename, " .\t\n\r\0\x0B");
if ($filename === '') {
return false;
}
$extension = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
return in_array($extension, array('svg', 'svgz'), true);
}
// 파일명 치환
function replace_filename($name)
{
+41 -1
View File
@@ -26,6 +26,46 @@ function get_shop_uid($type, $id, $time, $ip)
return hash_hmac('sha256', $payload, $key);
}
/**
* 상품 목록 정렬 요청을 허용된 DB 컬럼과 방향으로 변환한다.
*
* @param mixed $sort 외부 정렬 키
* @param mixed $sortodr 외부 정렬 방향
* @return array 검증된 정렬 컬럼과 방향. 잘못된 입력이면 모두 빈 문자열
*/
function get_shop_item_sort($sort, $sortodr)
{
$sort_columns = array(
'it_name' => 'it_name',
'it_sum_qty' => 'it_sum_qty',
'it_price' => 'it_price',
'it_use_avg' => 'it_use_avg',
'it_use_cnt' => 'it_use_cnt',
'it_update_time' => 'it_update_time',
);
if (!is_string($sort) || !isset($sort_columns[$sort])) {
return array('', '');
}
if (!is_string($sortodr)) {
return array('', '');
}
$sortodr = strtolower($sortodr);
if (!in_array($sortodr, array('asc', 'desc'), true)) {
return array('', '');
}
return array($sort_columns[$sort], $sortodr);
}
// 쇼핑몰 리소스 소유자 또는 최고관리자인지 확인
function is_shop_resource_owner_or_super_admin($owner_id, $member_id, $admin_type)
{
return $admin_type === 'super' || ($member_id !== '' && $owner_id === $member_id);
}
/**
* 현금영수증 발급 또는 조회에 대한 검증
*
@@ -2094,7 +2134,7 @@ function check_itemuse_write($it_id, $mb_id, $close=true)
{
global $g5, $default, $is_admin;
if(!$is_admin && $default['de_item_use_write'])
if($is_admin !== 'super' && $default['de_item_use_write'])
{
$sql = " select count(*) as cnt
from {$g5['g5_shop_cart_table']}
+9 -15
View File
@@ -1,20 +1,14 @@
<?php
include_once('../../common.php');
// SQL 주석 토큰 차단 추가 — 데스크톱 shop/_common.php 와 동일 패턴
if (isset($_REQUEST['sort']) && !preg_match("/(--|#|\/\*|\*\/)/", $_REQUEST['sort'])) {
$sort = trim($_REQUEST['sort']);
$sort = preg_replace("/[\<\>\'\"\\\'\\\"\%\=\(\)\s]/", "", $sort);
} else {
$sort = '';
}
if (isset($_REQUEST['sortodr'])) {
$sortodr = preg_match("/^(asc|desc)$/i", $sortodr) ? $sortodr : '';
} else {
$sortodr = '';
}
if (!defined('G5_USE_SHOP') || !G5_USE_SHOP)
die('<p>쇼핑몰 설치 후 이용해 주십시오.</p>');
define('_SHOP_', true);
$is_admin = get_super_admin_type($is_admin);
$request_sort = (isset($_REQUEST['sort']) && is_string($_REQUEST['sort'])) ? $_REQUEST['sort'] : '';
$request_sortodr = (isset($_REQUEST['sortodr']) && is_string($_REQUEST['sortodr'])) ? $_REQUEST['sortodr'] : '';
list($sort, $sortodr) = get_shop_item_sort($request_sort, $request_sortodr);
unset($request_sort, $request_sortodr);
define('_SHOP_', 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?ver=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo G5_JS_URL; ?>/shop.override.js?ver=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/shop.js'); ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/shop.override.js'); ?>"></script>
<div id="sod_bsk">
+1 -1
View File
@@ -93,4 +93,4 @@ echo '<div id="sev_thtml">'.conv_content($ev['ev_tail_html'], 1).'</div>';
</div>
<?php
include_once(G5_MSHOP_PATH.'/_tail.php');
include_once(G5_MSHOP_PATH.'/_tail.php');
+1 -1
View File
@@ -203,7 +203,7 @@ echo run_replace('shop_it_mobile_head_html', '<div id="sit_hhtml">'.conv_content
?>
<?php if($is_orderable) { ?>
<script src="<?php echo G5_JS_URL; ?>/shop.js?ver=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/shop.js'); ?>"></script>
<?php } ?>
<?php
+2 -2
View File
@@ -31,7 +31,7 @@ if ($w == "u")
$it_id = $qa['it_id'];
if (!$is_admin && $qa['mb_id'] != $member['mb_id']) {
if (!is_shop_resource_owner_or_super_admin($qa['mb_id'], $member['mb_id'], $is_admin)) {
alert_close("자신의 상품문의만 수정이 가능합니다.");
}
@@ -59,4 +59,4 @@ if(!file_exists($itemqaform_skin)) {
include_once($itemqaform_skin);
}
include_once(G5_PATH.'/tail.sub.php');
include_once(G5_PATH.'/tail.sub.php');
+2 -2
View File
@@ -29,7 +29,7 @@ if ($w == "") {
$it_id = $use['it_id'];
$is_score = $use['is_score'];
if (!$is_admin && $use['mb_id'] != $member['mb_id']) {
if (!is_shop_resource_owner_or_super_admin($use['mb_id'], $member['mb_id'], $is_admin)) {
alert_close("자신의 사용후기만 수정이 가능합니다.");
}
}
@@ -54,4 +54,4 @@ if(!file_exists($itemuseform_skin)) {
include_once($itemuseform_skin);
}
include_once(G5_PATH.'/tail.sub.php');
include_once(G5_PATH.'/tail.sub.php');
+15 -9
View File
@@ -168,9 +168,10 @@
{
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN')
{
$bin_exe = $home_dir.'/bin/pp_cli_exe ';
// 실행 파일 경로와 인자를 분리하여 mf_exec 호출 → escapeshellarg 자동 적용
$bin_exe = $home_dir.'/bin/pp_cli_exe';
$res_data = $this->mf_exec($bin_exe . "\"".
$res_data = $this->mf_exec($bin_exe,
"site_cd=" . $site_cd . "," .
"site_key=" . $site_key . "," .
"tx_cd=" . $tx_cd . "," .
@@ -188,8 +189,7 @@
$ordr_data .
$rcvr_data .
$escw_data .
$modx_data .
"\"") ;
$modx_data) ;
}
else
{
@@ -276,21 +276,27 @@
return $my_data;
}
function mf_exec()
function mf_build_exec_cmd( $arg )
{
$arg = func_get_args();
if ( is_array( $arg[0] ) ) $arg = $arg[0];
$exec_cmd = array_shift( $arg );
foreach($arg as $i)
foreach((array) $arg as $key=>$i)
{
$exec_cmd .= " " . escapeshellarg( $i );
}
return $exec_cmd;
}
function mf_exec()
{
$arg = func_get_args();
$exec_cmd = $this->mf_build_exec_cmd( $arg );
$rt = exec( $exec_cmd );
return $rt;
}
}
}
+1 -6
View File
@@ -11,11 +11,6 @@ if(defined('G5_THEME_MSHOP_PATH')) {
unset($theme_list_file);
}
// 상품 리스트에서 다른 필드로 정렬을 하려면 아래의 배열 코드에서 해당 필드를 추가하세요.
if( isset($sort) && ! in_array($sort, array('it_name', 'it_sum_qty', 'it_price', 'it_use_avg', 'it_use_cnt', 'it_update_time')) ){
$sort='';
}
$sql = " select *
from {$g5['g5_shop_category_table']}
where ca_id = '$ca_id'
@@ -200,4 +195,4 @@ var g5_shop_url = "<?php echo G5_SHOP_URL; ?>";
<?php
include_once(G5_MSHOP_PATH.'/_tail.php');
echo "\n<!-- {$ca['ca_mobile_skin']} -->\n";
echo "\n<!-- {$ca['ca_mobile_skin']} -->\n";
+1 -4
View File
@@ -1,9 +1,6 @@
<?php
include_once('./_common.php');
// 상품 정렬 컬럼 화이트리스트 — 데스크톱 shop/listtype.php 와 동일 패턴
$sort = (isset($_REQUEST['sort']) && in_array($_REQUEST['sort'], array('it_name', 'it_sum_qty', 'it_price', 'it_use_avg', 'it_use_cnt', 'it_update_time'))) ? $_REQUEST['sort'] : '';
$type = isset($_REQUEST['type']) ? (int) preg_replace("/[^0-9]/", "", $_REQUEST['type']) : 1;
if ($type === 1) $g5['title'] = '히트상품';
else if ($type === 2) $g5['title'] = '추천상품';
@@ -78,4 +75,4 @@ echo get_paging($config['cf_mobile_pages'], $page, $total_page, "{$_SERVER['SCRI
?>
<?php
include_once(G5_MSHOP_PATH.'/_tail.php');
include_once(G5_MSHOP_PATH.'/_tail.php');
@@ -4,7 +4,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
add_stylesheet('<link rel="stylesheet" href="' . $member_skin_url . '/style.css">', 0);
if ($config['cf_cert_use'] && ($config['cf_cert_simple'] || $config['cf_cert_ipin'] || $config['cf_cert_hp']))
add_javascript('<script src="'.G5_JS_URL.'/certify.js?v='.G5_JS_VER.'"></script>', 0);
add_javascript('<script src="'.G5_JS_URL.'/certify.js"></script>', 0);
?>
<!-- 기존 회원 본인인증 시작 { -->
<div class="member_cert_refresh">
@@ -5,7 +5,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
add_stylesheet('<link rel="stylesheet" href="'.$member_skin_url.'/style.css">', 0);
if($config['cf_cert_use'] && ($config['cf_cert_simple'] || $config['cf_cert_ipin'] || $config['cf_cert_hp'])) { ?>
<script src="<?php echo G5_JS_URL ?>/certify.js?v=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/certify.js'); ?>"></script>
<?php } ?>
<!-- 회원정보 찾기 시작 { -->
@@ -5,7 +5,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
add_stylesheet('<link rel="stylesheet" href="'.$member_skin_url.'/style.css">', 0);
add_javascript('<script src="'.G5_JS_URL.'/jquery.register_form.js"></script>', 0);
if ($config['cf_cert_use'] && ($config['cf_cert_simple'] || $config['cf_cert_ipin'] || $config['cf_cert_hp']))
add_javascript('<script src="'.G5_JS_URL.'/certify.js?v='.G5_JS_VER.'"></script>', 0);
add_javascript('<script src="'.G5_JS_URL.'/certify.js"></script>', 0);
?>
<div class="register">
@@ -4,7 +4,7 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
<section id="bo_v_ans">
<?php
if($is_admin) // 관리자이면 답변등록
if($is_admin === 'super') // 최고관리자이면 답변등록
{
?>
<h2>답변등록</h2>
@@ -151,4 +151,4 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
<?php
}
?>
</section>
</section>
+1 -1
View File
@@ -11,7 +11,7 @@ add_javascript('<script src="'.G5_JS_URL.'/jquery.bxslider.js"></script>', 10);
<script>
var kakao_javascript_apikey = "<?php echo $config['cf_kakao_js_apikey']; ?>";
</script>
<script src="<?php echo G5_JS_URL; ?>/kakaolink.js?ver=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/kakaolink.js'); ?>"></script>
<?php } ?>
<form name="fitem" action="<?php echo $action_url; ?>" method="post" onsubmit="return fitem_submit(this);">
+3 -3
View File
@@ -27,7 +27,7 @@ add_stylesheet('<link rel="stylesheet" href="'.G5_MSHOP_SKIN_URL.'/style.css">',
if($row['iq_secret']) {
$iq_subject .= ' <img src="'.G5_MSHOP_SKIN_URL.'/img/icon_secret.gif" alt="비밀글">';
if($is_admin || $member['mb_id' ] == $row['mb_id']) {
if(is_shop_resource_owner_or_super_admin($row['mb_id'], $member['mb_id'], $is_admin)) {
$iq_question = get_view_thumbnail(conv_content($row['iq_question'], 1), $thumbnail_width);
} else {
$iq_question = '비밀글로 보호된 문의입니다.';
@@ -87,7 +87,7 @@ add_stylesheet('<link rel="stylesheet" href="'.G5_MSHOP_SKIN_URL.'/style.css">',
<?php } ?>
</div>
<?php if ($is_admin || ($row['mb_id'] == $member['mb_id'] && !$is_answer)) { ?>
<?php if ($is_admin === 'super' || ($row['mb_id'] == $member['mb_id'] && !$is_answer)) { ?>
<div class="sit_qa_cmd">
<a href="<?php echo $itemqa_form."&amp;iq_id={$row['iq_id']}&amp;w=u"; ?>" class="itemqa_form btn01" onclick="return false;">수정</a>
<a href="<?php echo $itemqa_formupdate."&amp;iq_id={$row['iq_id']}&amp;w=d&amp;hash={$hash}"; ?>" class="itemqa_delete btn01">삭제</a>
@@ -148,4 +148,4 @@ $(function(){
});
});
</script>
<!-- } 상품문의 목록 끝 -->
<!-- } 상품문의 목록 끝 -->
+2 -2
View File
@@ -46,7 +46,7 @@ add_stylesheet('<link rel="stylesheet" href="'.G5_MSHOP_SKIN_URL.'/style.css">',
if($row['iq_secret']) {
$iq_subject .= ' <i class="fa fa-lock" aria-hidden="true"></i>';
if($is_admin || $member['mb_id' ] == $row['mb_id']) {
if(is_shop_resource_owner_or_super_admin($row['mb_id'], $member['mb_id'], $is_admin)) {
$iq_question = get_view_thumbnail(conv_content($row['iq_question'], 1), $thumbnail_width);
} else {
$iq_question = '비밀글로 보호된 문의입니다.';
@@ -141,4 +141,4 @@ $(function(){
});
});
</script>
<!-- } 전체 상품 사용후기 목록 끝 -->
<!-- } 전체 상품 사용후기 목록 끝 -->
+2 -2
View File
@@ -52,7 +52,7 @@ add_stylesheet('<link rel="stylesheet" href="'.G5_MSHOP_SKIN_URL.'/style.css">',
<?php echo $is_content; // 사용후기 내용 ?>
</div>
<?php if ($is_admin || $row['mb_id'] == $member['mb_id']) { ?>
<?php if (is_shop_resource_owner_or_super_admin($row['mb_id'], $member['mb_id'], $is_admin)) { ?>
<div class="sit_use_cmd">
<a href="<?php echo $itemuse_form."&amp;is_id={$row['is_id']}&amp;w=u"; ?>" class="itemuse_form btn01" onclick="return false;">수정</a>
<a href="<?php echo $itemuse_formupdate."&amp;is_id={$row['is_id']}&amp;w=d&amp;hash={$hash}"; ?>" class="itemuse_delete btn01">삭제</a>
@@ -130,4 +130,4 @@ $(function(){
});
});
</script>
<!-- } 상품 사용후기 끝 -->
<!-- } 상품 사용후기 끝 -->
+1 -1
View File
@@ -13,7 +13,7 @@ add_javascript('<script src="'.G5_JS_URL.'/shop.list.action.js"></script>', 10);
<script>
var kakao_javascript_apikey = "<?php echo $config['cf_kakao_js_apikey']; ?>";
</script>
<script src="<?php echo G5_JS_URL; ?>/kakaolink.js?ver=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/kakaolink.js'); ?>"></script>
<?php } ?>
<!-- 메인상품진열 10 시작 { -->
+1 -1
View File
@@ -13,7 +13,7 @@ add_javascript('<script src="'.G5_JS_URL.'/shop.list.action.js"></script>', 10);
<script>
var kakao_javascript_apikey = "<?php echo $config['cf_kakao_js_apikey']; ?>";
</script>
<script src="<?php echo G5_JS_URL; ?>/kakaolink.js?ver=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/kakaolink.js'); ?>"></script>
<?php } ?>
<!-- 메인상품진열 10 시작 { -->
+1 -1
View File
@@ -14,7 +14,7 @@ add_javascript('<script src="'.G5_JS_URL.'/shop.list.action.js"></script>', 10);
<script>
var kakao_javascript_apikey = "<?php echo $config['cf_kakao_js_apikey']; ?>";
</script>
<script src="<?php echo G5_JS_URL; ?>/kakaolink.js?ver=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/kakaolink.js'); ?>"></script>
<?php } ?>
<!-- 메인상품진열 20 시작 { -->
+1 -1
View File
@@ -14,7 +14,7 @@ add_javascript('<script src="'.G5_JS_URL.'/shop.list.action.js"></script>', 10);
<script>
var kakao_javascript_apikey = "<?php echo $config['cf_kakao_js_apikey']; ?>";
</script>
<script src="<?php echo G5_JS_URL; ?>/kakaolink.js?ver=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/kakaolink.js'); ?>"></script>
<?php } ?>
<div class="st_30_wr">
<!-- 메인상품진열 30 시작 { -->
+1 -1
View File
@@ -11,7 +11,7 @@ add_stylesheet('<link rel="stylesheet" href="'.G5_MSHOP_SKIN_URL.'/style.css">',
<script>
var kakao_javascript_apikey = "<?php echo $config['cf_kakao_js_apikey']; ?>";
</script>
<script src="<?php echo G5_JS_URL; ?>/kakaolink.js?ver=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/kakaolink.js'); ?>"></script>
<?php } ?>
<!-- 상품진열 10 시작 { -->
+1 -1
View File
@@ -14,7 +14,7 @@ if( G5_SOCIAL_USE_POPUP ) {
$self_url = G5_SOCIAL_LOGIN_URL.'/popup.php';
}
add_stylesheet('<link rel="stylesheet" href="'.get_social_skin_url().'/style.css?ver='.G5_CSS_VER.'">', 10);
add_stylesheet('<link rel="stylesheet" href="'.get_social_skin_url().'/style.css">', 10);
?>
<div class="login-sns sns-wrap-32 sns-wrap-over" id="sns_login">
@@ -14,7 +14,7 @@ if( G5_SOCIAL_USE_POPUP ) {
$self_url = G5_SOCIAL_LOGIN_URL.'/popup.php';
}
add_stylesheet('<link rel="stylesheet" href="'.get_social_skin_url().'/style.css?ver='.G5_CSS_VER.'">', 10);
add_stylesheet('<link rel="stylesheet" href="'.get_social_skin_url().'/style.css">', 10);
?>
<div class="login-sns sns-wrap-32 sns-wrap-over" id="sns_outlogin">
+1 -1
View File
@@ -15,7 +15,7 @@ if( G5_SOCIAL_USE_POPUP ) {
}
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
add_stylesheet('<link rel="stylesheet" href="'.get_social_skin_url().'/style.css?ver='.G5_CSS_VER.'">', 10);
add_stylesheet('<link rel="stylesheet" href="'.get_social_skin_url().'/style.css">', 10);
?>
<div>
<div class="login-sns sns-wrap-32 sns-wrap-over" id="sns_register">
@@ -8,11 +8,11 @@ if (!$config['cf_social_login_use']) { //소셜 로그인을 사용하지
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
add_stylesheet('<link rel="stylesheet" href="'.G5_JS_URL.'/remodal/remodal.css">', 11);
add_stylesheet('<link rel="stylesheet" href="'.G5_JS_URL.'/remodal/remodal-default-theme.css">', 12);
add_stylesheet('<link rel="stylesheet" href="'.get_social_skin_url().'/style.css?ver='.G5_CSS_VER.'">', 13);
add_stylesheet('<link rel="stylesheet" href="'.get_social_skin_url().'/style.css">', 13);
add_javascript('<script src="'.G5_JS_URL.'/remodal/remodal.js"></script>', 10);
add_javascript('<script src="<?php echo G5_JS_URL ?>/jquery.register_form.js"></script>', 14);
if ($config['cf_cert_use'] && ($config['cf_cert_simple'] || $config['cf_cert_ipin'] || $config['cf_cert_hp']))
add_javascript('<script src="'.G5_JS_URL.'/certify.js?v='.G5_JS_VER.'"></script>', 15);
add_javascript('<script src="'.G5_JS_URL.'/certify.js"></script>', 15);
$email_msg = $is_exists_email ? '등록할 이메일이 중복되었습니다.다른 이메일을 입력해 주세요.' : '';
?>
@@ -9,7 +9,7 @@ $socials = social_get_provider_service_name('', 'all');
$session_id = session_id();
add_stylesheet('<link rel="stylesheet" href="'.get_social_skin_url().'/style.css?ver='.G5_CSS_VER.'">', 10);
add_stylesheet('<link rel="stylesheet" href="'.get_social_skin_url().'/style.css">', 10);
?>
<li>
+1 -1
View File
@@ -25,7 +25,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" async charset="utf-8"></script>
<script src="<?php echo G5_JS_URL; ?>/kakaolink.js?ver=<?php echo G5_JS_VER; ?>" charset="utf-8"></script>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/kakaolink.js'); ?>" charset="utf-8"></script>
<script type='text/javascript'>
//<![CDATA[
var kakao_javascript_apikey = "<?php echo $config['cf_kakao_js_apikey']; ?>";
+8 -14
View File
@@ -1,22 +1,16 @@
<?php
include_once('../common.php');
if (isset($_REQUEST['sort']) && !preg_match("/(--|#|\/\*|\*\/)/", $_REQUEST['sort'])) {
$sort = trim($_REQUEST['sort']);
$sort = preg_replace("/[\<\>\'\"\\\'\\\"\%\=\(\)\s]/", "", $sort);
} else {
$sort = '';
}
if (isset($_REQUEST['sortodr'])) {
$sortodr = preg_match("/^(asc|desc)$/i", $sortodr) ? $sortodr : '';
} else {
$sortodr = '';
}
if (!defined('G5_USE_SHOP') || !G5_USE_SHOP)
die('<p>쇼핑몰 설치 후 이용해 주십시오.</p>');
$is_admin = get_super_admin_type($is_admin);
$request_sort = (isset($_REQUEST['sort']) && is_string($_REQUEST['sort'])) ? $_REQUEST['sort'] : '';
$request_sortodr = (isset($_REQUEST['sortodr']) && is_string($_REQUEST['sortodr'])) ? $_REQUEST['sortodr'] : '';
list($sort, $sortodr) = get_shop_item_sort($request_sort, $request_sortodr);
unset($request_sort, $request_sortodr);
define('_SHOP_', true);
define('_SHOP_COMMON_', true); // 모바일 페이지의 직접 접근을 막는 경우에 사용
?>
?>
+2 -2
View File
@@ -42,8 +42,8 @@ include_once('./_head.php');
?>
<!-- 장바구니 시작 { -->
<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>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/shop.js'); ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/shop.override.js'); ?>"></script>
<div id="sod_bsk" class="od_prd_list">
+1 -6
View File
@@ -5,11 +5,6 @@ $ev_id = isset($_GET['ev_id']) ? (int) $_GET['ev_id'] : 0;
$skin = isset($_GET['skin']) ? clean_xss_tags($_GET['skin'], 1, 1) : '';
$ca_id = isset($_GET['ca_id']) ? clean_xss_tags($_GET['ca_id'], 1, 1) : '';
// 상품 리스트에서 다른 필드로 정렬을 하려면 아래의 배열 코드에서 해당 필드를 추가하세요.
if( isset($sort) && ! in_array($sort, array('it_name', 'it_sum_qty', 'it_price', 'it_use_avg', 'it_use_cnt', 'it_update_time')) ){
$sort='';
}
if (G5_IS_MOBILE) {
include_once(G5_MSHOP_PATH.'/event.php');
return;
@@ -117,4 +112,4 @@ if (file_exists($timg))
<!-- } 이벤트 끝 -->
<?php
include_once('./_tail.php');
include_once('./_tail.php');
+1 -1
View File
@@ -255,7 +255,7 @@ include_once(G5_SHOP_PATH.'/settle_naverpay.inc.php');
?>
<?php if($is_orderable) { ?>
<script src="<?php echo G5_JS_URL; ?>/shop.js?ver=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/shop.js'); ?>"></script>
<?php } ?>
<div id="sit">
+2 -2
View File
@@ -38,7 +38,7 @@ if ($w == "u")
$it_id = $qa['it_id'];
if (!$is_admin && $qa['mb_id'] != $member['mb_id']) {
if (!is_shop_resource_owner_or_super_admin($qa['mb_id'], $member['mb_id'], $is_admin)) {
alert_close("자신의 상품문의만 수정이 가능합니다.");
}
@@ -66,4 +66,4 @@ if(!file_exists($itemqaform_skin)) {
include_once($itemqaform_skin);
}
include_once(G5_PATH.'/tail.sub.php');
include_once(G5_PATH.'/tail.sub.php');
+2 -2
View File
@@ -37,7 +37,7 @@ if ($w == "") {
$it_id = $use['it_id'];
$is_score = $use['is_score'];
if (!$is_admin && $use['mb_id'] != $member['mb_id']) {
if (!is_shop_resource_owner_or_super_admin($use['mb_id'], $member['mb_id'], $is_admin)) {
alert_close("자신의 사용후기만 수정이 가능합니다.");
}
}
@@ -62,4 +62,4 @@ if(!file_exists($itemuseform_skin)) {
include_once($itemuseform_skin);
}
include_once(G5_PATH.'/tail.sub.php');
include_once(G5_PATH.'/tail.sub.php');
+11 -5
View File
@@ -168,7 +168,7 @@
{
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN')
{
// 실행 파일 경로와 인자를 분리하여 mf_exec 호출 → escapeshellarg 자동 적용 (KVE-2026-0859)
// 실행 파일 경로와 인자를 분리하여 mf_exec 호출 → escapeshellarg 자동 적용
$bin_exe = $home_dir.'/bin/pp_cli_exe';
$res_data = $this->mf_exec($bin_exe,
@@ -276,10 +276,8 @@
return $my_data;
}
function mf_exec()
function mf_build_exec_cmd( $arg )
{
$arg = func_get_args();
if ( is_array( $arg[0] ) ) $arg = $arg[0];
$exec_cmd = array_shift( $arg );
@@ -289,8 +287,16 @@
$exec_cmd .= " " . escapeshellarg( $i );
}
return $exec_cmd;
}
function mf_exec()
{
$arg = func_get_args();
$exec_cmd = $this->mf_build_exec_cmd( $arg );
$rt = exec( $exec_cmd );
return $rt;
}
}
}
+1 -9
View File
@@ -4,14 +4,6 @@ include_once('./_common.php');
$ca_id = isset($_REQUEST['ca_id']) ? safe_replace_regex($_REQUEST['ca_id'], 'ca_id') : '';
$skin = isset($_REQUEST['skin']) ? safe_replace_regex($_REQUEST['skin'], 'skin') : '';
// 상품 리스트에서 다른 필드로 정렬을 하려면 아래의 배열 코드에서 해당 필드를 추가하세요.
if( isset($sort) && ! in_array($sort, array('it_name', 'it_sum_qty', 'it_price', 'it_use_avg', 'it_use_cnt', 'it_update_time')) ){
$sort='';
}
if( !isset($sortodr) || !in_array(strtolower($sortodr), array('asc', 'desc')) ){
$sortodr='';
}
if (G5_IS_MOBILE) {
include_once(G5_MSHOP_PATH.'/list.php');
return;
@@ -181,4 +173,4 @@ if ($ca['ca_include_tail'] && is_include_path_check($ca['ca_include_tail'])
else
include_once(G5_SHOP_PATH.'/_tail.php');
echo "\n<!-- {$ca['ca_skin']} -->\n";
echo "\n<!-- {$ca['ca_skin']} -->\n";
+1 -3
View File
@@ -1,8 +1,6 @@
<?php
include_once('./_common.php');
// 상품 리스트에서 다른 필드로 정렬을 하려면 아래의 배열 코드에서 해당 필드를 추가하세요.
$sort = (isset($_REQUEST['sort']) && in_array($_REQUEST['sort'], array('it_name', 'it_sum_qty', 'it_price', 'it_use_avg', 'it_use_cnt', 'it_update_time'))) ? $_REQUEST['sort'] : '';
$type = isset($_REQUEST['type']) ? (int) preg_replace("/[^0-9]/", "", $_REQUEST['type']) : 1;
if (G5_IS_MOBILE) {
@@ -83,4 +81,4 @@ else
$qstr .= '&amp;type='.$type.'&amp;sort='.$sort;
echo get_paging($config['cf_write_pages'], $page, $total_page, "{$_SERVER['SCRIPT_NAME']}?$qstr&amp;page=");
include_once('./_tail.php');
include_once('./_tail.php');
-1
View File
@@ -1,6 +1,5 @@
<?php
include_once('./_common.php');
include_once(G5_KAKAO5_PATH.'/kakao5.lib.php'); // 카카오톡 알림톡 설정
require_once(G5_SHOP_PATH.'/toss/toss.inc.php'); // 토스페이먼츠 v2 공통 설정
/*************************************************************************
@@ -4,7 +4,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
add_stylesheet('<link rel="stylesheet" href="' . $member_skin_url . '/style.css">', 0);
if ($config['cf_cert_use'] && ($config['cf_cert_simple'] || $config['cf_cert_ipin'] || $config['cf_cert_hp']))
add_javascript('<script src="'.G5_JS_URL.'/certify.js?v='.G5_JS_VER.'"></script>', 0);
add_javascript('<script src="'.G5_JS_URL.'/certify.js"></script>', 0);
?>
<!-- 기존 회원 본인인증 시작 { -->
<div class="member_cert_refresh">
+1 -1
View File
@@ -5,7 +5,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
add_stylesheet('<link rel="stylesheet" href="'.$member_skin_url.'/style.css">', 0);
if($config['cf_cert_use'] && ($config['cf_cert_simple'] || $config['cf_cert_ipin'] || $config['cf_cert_hp'])) { ?>
<script src="<?php echo G5_JS_URL ?>/certify.js?v=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/certify.js'); ?>"></script>
<?php } ?>
<!-- 회원정보 찾기 시작 { -->
+1 -1
View File
@@ -5,7 +5,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
add_stylesheet('<link rel="stylesheet" href="'.$member_skin_url.'/style.css">', 0);
add_javascript('<script src="'.G5_JS_URL.'/jquery.register_form.js"></script>', 0);
if ($config['cf_cert_use'] && ($config['cf_cert_simple'] || $config['cf_cert_ipin'] || $config['cf_cert_hp']))
add_javascript('<script src="'.G5_JS_URL.'/certify.js?v='.G5_JS_VER.'"></script>', 0);
add_javascript('<script src="'.G5_JS_URL.'/certify.js"></script>', 0);
?>
<!-- 회원정보 입력/수정 시작 { -->
+2 -2
View File
@@ -4,7 +4,7 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
<section id="bo_v_ans_form">
<?php
if($is_admin) // 관리자이면 답변등록
if($is_admin === 'super') // 최고관리자이면 답변등록
{
?>
<h2>답변등록</h2>
@@ -152,4 +152,4 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
<?php
}
?>
</section>
</section>
+3 -3
View File
@@ -29,7 +29,7 @@ add_stylesheet('<link rel="stylesheet" href="'.G5_SHOP_SKIN_URL.'/style.css">',
if($row['iq_secret']) {
$iq_subject .= ' <img src="'.G5_SHOP_SKIN_URL.'/img/icon_secret.gif" alt="비밀글">';
if($is_admin || $member['mb_id' ] == $row['mb_id']) {
if(is_shop_resource_owner_or_super_admin($row['mb_id'], $member['mb_id'], $is_admin)) {
$iq_question = get_view_thumbnail(conv_content($row['iq_question'], 1), $thumbnail_width);
} else {
$iq_question = '비밀글로 보호된 문의입니다.';
@@ -85,7 +85,7 @@ add_stylesheet('<link rel="stylesheet" href="'.G5_SHOP_SKIN_URL.'/style.css">',
<?php } ?>
</div>
<?php if ($is_admin || ($row['mb_id'] == $member['mb_id'] && !$is_answer)) { ?>
<?php if ($is_admin === 'super' || ($row['mb_id'] == $member['mb_id'] && !$is_answer)) { ?>
<div class="sit_qa_cmd">
<a href="<?php echo $itemqa_form."&amp;iq_id={$row['iq_id']}&amp;w=u"; ?>" class="itemqa_form btn01" onclick="return false;">수정</a>
<a href="<?php echo $itemqa_formupdate."&amp;iq_id={$row['iq_id']}&amp;w=d&amp;hash={$hash}"; ?>" class="itemqa_delete btn01">삭제</a>
@@ -140,4 +140,4 @@ $(function(){
});
});
</script>
<!-- } 상품문의 목록 끝 -->
<!-- } 상품문의 목록 끝 -->
+2 -2
View File
@@ -44,7 +44,7 @@ add_stylesheet('<link rel="stylesheet" href="'.G5_SHOP_SKIN_URL.'/style.css">',
if($row['iq_secret']) {
$iq_subject .= ' <i class="fa fa-lock" aria-hidden="true"></i>';
if($is_admin || $member['mb_id' ] == $row['mb_id']) {
if(is_shop_resource_owner_or_super_admin($row['mb_id'], $member['mb_id'], $is_admin)) {
$iq_question = get_view_thumbnail(conv_content($row['iq_question'], 1), $thumbnail_width);
} else {
$iq_question = '비밀글로 보호된 문의입니다.';
@@ -141,4 +141,4 @@ $(function(){
});
});
</script>
<!-- } 전체 상품 사용후기 목록 끝 -->
<!-- } 전체 상품 사용후기 목록 끝 -->
+2 -2
View File
@@ -59,7 +59,7 @@ add_stylesheet('<link rel="stylesheet" href="'.G5_SHOP_SKIN_URL.'/style.css">',
<?php echo $is_content; // 사용후기 내용 ?>
</div>
<?php if ($is_admin || $row['mb_id'] == $member['mb_id']) { ?>
<?php if (is_shop_resource_owner_or_super_admin($row['mb_id'], $member['mb_id'], $is_admin)) { ?>
<div class="sit_use_cmd">
<a href="<?php echo $itemuse_form."&amp;is_id={$row['is_id']}&amp;w=u"; ?>" class="itemuse_form btn01" onclick="return false;">수정</a>
<a href="<?php echo $itemuse_formupdate."&amp;is_id={$row['is_id']}&amp;w=d&amp;hash={$hash}"; ?>" class="itemuse_delete btn01">삭제</a>
@@ -131,4 +131,4 @@ $(function(){
});
});
</script>
<!-- } 상품 사용후기 끝 -->
<!-- } 상품 사용후기 끝 -->
+1 -1
View File
@@ -14,7 +14,7 @@ if( G5_SOCIAL_USE_POPUP ) {
$self_url = G5_SOCIAL_LOGIN_URL.'/popup.php';
}
add_stylesheet('<link rel="stylesheet" href="'.get_social_skin_url().'/style.css?ver='.G5_CSS_VER.'">', 10);
add_stylesheet('<link rel="stylesheet" href="'.get_social_skin_url().'/style.css">', 10);
?>
<div id="sns_login" class="login-sns sns-wrap-32 sns-wrap-over">
+1 -1
View File
@@ -14,7 +14,7 @@ if( G5_SOCIAL_USE_POPUP ) {
$self_url = G5_SOCIAL_LOGIN_URL.'/popup.php';
}
add_stylesheet('<link rel="stylesheet" href="'.get_social_skin_url().'/style.css?ver='.G5_CSS_VER.'">', 10);
add_stylesheet('<link rel="stylesheet" href="'.get_social_skin_url().'/style.css">', 10);
?>
<div class="login-sns sns-wrap-32 sns-wrap-over" id="sns_outlogin">
+1 -1
View File
@@ -15,7 +15,7 @@ if( G5_SOCIAL_USE_POPUP ) {
}
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
add_stylesheet('<link rel="stylesheet" href="'.get_social_skin_url().'/style.css?ver='.G5_CSS_VER.'">', 10);
add_stylesheet('<link rel="stylesheet" href="'.get_social_skin_url().'/style.css">', 10);
?>
<div>
+2 -2
View File
@@ -8,11 +8,11 @@ if (!$config['cf_social_login_use']) { //소셜 로그인을 사용하지
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
add_stylesheet('<link rel="stylesheet" href="'.G5_JS_URL.'/remodal/remodal.css">', 11);
add_stylesheet('<link rel="stylesheet" href="'.G5_JS_URL.'/remodal/remodal-default-theme.css">', 12);
add_stylesheet('<link rel="stylesheet" href="'.get_social_skin_url().'/style.css?ver='.G5_CSS_VER.'">', 13);
add_stylesheet('<link rel="stylesheet" href="'.get_social_skin_url().'/style.css">', 13);
add_javascript('<script src="'.G5_JS_URL.'/remodal/remodal.js"></script>', 10);
add_javascript('<script src="'.G5_JS_URL.'/jquery.register_form.js"></script>', 14);
if ($config['cf_cert_use'] && ($config['cf_cert_simple'] || $config['cf_cert_ipin'] || $config['cf_cert_hp']))
add_javascript('<script src="'.G5_JS_URL.'/certify.js?v='.G5_JS_VER.'"></script>', 15);
add_javascript('<script src="'.G5_JS_URL.'/certify.js"></script>', 15);
$email_msg = $is_exists_email ? '등록할 이메일이 중복되었습니다.다른 이메일을 입력해 주세요.' : '';
?>
+1 -1
View File
@@ -9,7 +9,7 @@ $socials = social_get_provider_service_name('', 'all');
$session_id = session_id();
add_stylesheet('<link rel="stylesheet" href="'.get_social_skin_url().'/style.css?ver='.G5_CSS_VER.'">', 10);
add_stylesheet('<link rel="stylesheet" href="'.get_social_skin_url().'/style.css">', 10);
?>
<li>
+5 -5
View File
@@ -52,7 +52,7 @@ if($config['cf_add_meta'])
<?php
$shop_css = '';
if (defined('_SHOP_')) $shop_css = '_shop';
echo '<link rel="stylesheet" href="'.run_replace('head_css_url', G5_THEME_CSS_URL.'/'.(G5_IS_MOBILE?'mobile':'default').$shop_css.'.css?ver='.G5_CSS_VER, G5_THEME_URL).'">'.PHP_EOL;
echo '<link rel="stylesheet" href="'.get_versioned_asset_url(run_replace('head_css_url', G5_THEME_CSS_URL.'/'.(G5_IS_MOBILE?'mobile':'default').$shop_css.'.css', G5_THEME_URL)).'">'.PHP_EOL;
?>
<!--[if lte IE 8]>
<script src="<?php echo G5_JS_URL ?>/html5.js"></script>
@@ -81,13 +81,13 @@ add_javascript('<script src="'.G5_JS_URL.'/jquery-1.12.4.min.js"></script>', 0);
add_javascript('<script src="'.G5_JS_URL.'/jquery-migrate-1.4.1.min.js"></script>', 0);
if (defined('_SHOP_')) {
if(!G5_IS_MOBILE) {
add_javascript('<script src="'.G5_JS_URL.'/jquery.shop.menu.js?ver='.G5_JS_VER.'"></script>', 0);
add_javascript('<script src="'.G5_JS_URL.'/jquery.shop.menu.js"></script>', 0);
}
} else {
add_javascript('<script src="'.G5_JS_URL.'/jquery.menu.js?ver='.G5_JS_VER.'"></script>', 0);
add_javascript('<script src="'.G5_JS_URL.'/jquery.menu.js"></script>', 0);
}
add_javascript('<script src="'.G5_JS_URL.'/common.js?ver='.G5_JS_VER.'"></script>', 0);
add_javascript('<script src="'.G5_JS_URL.'/wrest.js?ver='.G5_JS_VER.'"></script>', 0);
add_javascript('<script src="'.G5_JS_URL.'/common.js"></script>', 0);
add_javascript('<script src="'.G5_JS_URL.'/wrest.js"></script>', 0);
add_javascript('<script src="'.G5_JS_URL.'/placeholders.min.js"></script>', 0);
add_stylesheet('<link rel="stylesheet" href="'.G5_JS_URL.'/font-awesome/css/font-awesome.min.css">', 0);
@@ -4,7 +4,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
add_stylesheet('<link rel="stylesheet" href="' . $member_skin_url . '/style.css">', 0);
if ($config['cf_cert_use'] && ($config['cf_cert_simple'] || $config['cf_cert_ipin'] || $config['cf_cert_hp']))
add_javascript('<script src="'.G5_JS_URL.'/certify.js?v='.G5_JS_VER.'"></script>', 0);
add_javascript('<script src="'.G5_JS_URL.'/certify.js"></script>', 0);
?>
<!-- 기존 회원 본인인증 시작 { -->
<div class="member_cert_refresh">
@@ -5,7 +5,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
add_stylesheet('<link rel="stylesheet" href="'.$member_skin_url.'/style.css">', 0);
if($config['cf_cert_use'] && ($config['cf_cert_simple'] || $config['cf_cert_ipin'] || $config['cf_cert_hp'])) { ?>
<script src="<?php echo G5_JS_URL ?>/certify.js?v=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/certify.js'); ?>"></script>
<?php } ?>
<!-- 회원정보 찾기 시작 { -->
@@ -5,7 +5,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
add_stylesheet('<link rel="stylesheet" href="'.$member_skin_url.'/style.css">', 0);
add_javascript('<script src="'.G5_JS_URL.'/jquery.register_form.js"></script>', 0);
if ($config['cf_cert_use'] && ($config['cf_cert_simple'] || $config['cf_cert_ipin'] || $config['cf_cert_hp']))
add_javascript('<script src="'.G5_JS_URL.'/certify.js?v='.G5_JS_VER.'"></script>', 0);
add_javascript('<script src="'.G5_JS_URL.'/certify.js"></script>', 0);
?>
<div class="register">
@@ -4,7 +4,7 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
<section id="bo_v_ans">
<?php
if($is_admin) // 관리자이면 답변등록
if($is_admin === 'super') // 최고관리자이면 답변등록
{
?>
<h2>답변등록</h2>
@@ -151,4 +151,4 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
<?php
}
?>
</section>
</section>
@@ -11,7 +11,7 @@ add_javascript('<script src="'.G5_JS_URL.'/jquery.bxslider.js"></script>', 10);
<script>
var kakao_javascript_apikey = "<?php echo $config['cf_kakao_js_apikey']; ?>";
</script>
<script src="<?php echo G5_JS_URL; ?>/kakaolink.js?ver=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/kakaolink.js'); ?>"></script>
<?php } ?>
<form name="fitem" action="<?php echo $action_url; ?>" method="post" onsubmit="return fitem_submit(this);">
@@ -27,7 +27,7 @@ add_stylesheet('<link rel="stylesheet" href="'.G5_MSHOP_SKIN_URL.'/style.css">',
if($row['iq_secret']) {
$iq_subject .= ' <img src="'.G5_MSHOP_SKIN_URL.'/img/icon_secret.gif" alt="비밀글">';
if($is_admin || $member['mb_id' ] == $row['mb_id']) {
if(is_shop_resource_owner_or_super_admin($row['mb_id'], $member['mb_id'], $is_admin)) {
$iq_question = get_view_thumbnail(conv_content($row['iq_question'], 1), $thumbnail_width);
} else {
$iq_question = '비밀글로 보호된 문의입니다.';
@@ -87,7 +87,7 @@ add_stylesheet('<link rel="stylesheet" href="'.G5_MSHOP_SKIN_URL.'/style.css">',
<?php } ?>
</div>
<?php if ($is_admin || ($row['mb_id'] == $member['mb_id'] && !$is_answer)) { ?>
<?php if ($is_admin === 'super' || ($row['mb_id'] == $member['mb_id'] && !$is_answer)) { ?>
<div class="sit_qa_cmd">
<a href="<?php echo $itemqa_form."&amp;iq_id={$row['iq_id']}&amp;w=u"; ?>" class="itemqa_form btn01" onclick="return false;">수정</a>
<a href="<?php echo $itemqa_formupdate."&amp;iq_id={$row['iq_id']}&amp;w=d&amp;hash={$hash}"; ?>" class="itemqa_delete btn01">삭제</a>
@@ -148,4 +148,4 @@ $(function(){
});
});
</script>
<!-- } 상품문의 목록 끝 -->
<!-- } 상품문의 목록 끝 -->
@@ -46,7 +46,7 @@ add_stylesheet('<link rel="stylesheet" href="'.G5_MSHOP_SKIN_URL.'/style.css">',
if($row['iq_secret']) {
$iq_subject .= ' <i class="fa fa-lock" aria-hidden="true"></i>';
if($is_admin || $member['mb_id' ] == $row['mb_id']) {
if(is_shop_resource_owner_or_super_admin($row['mb_id'], $member['mb_id'], $is_admin)) {
$iq_question = get_view_thumbnail(conv_content($row['iq_question'], 1), $thumbnail_width);
} else {
$iq_question = '비밀글로 보호된 문의입니다.';
@@ -141,4 +141,4 @@ $(function(){
});
});
</script>
<!-- } 전체 상품 사용후기 목록 끝 -->
<!-- } 전체 상품 사용후기 목록 끝 -->
@@ -52,7 +52,7 @@ add_stylesheet('<link rel="stylesheet" href="'.G5_MSHOP_SKIN_URL.'/style.css">',
<?php echo $is_content; // 사용후기 내용 ?>
</div>
<?php if ($is_admin || $row['mb_id'] == $member['mb_id']) { ?>
<?php if (is_shop_resource_owner_or_super_admin($row['mb_id'], $member['mb_id'], $is_admin)) { ?>
<div class="sit_use_cmd">
<a href="<?php echo $itemuse_form."&amp;is_id={$row['is_id']}&amp;w=u"; ?>" class="itemuse_form btn01" onclick="return false;">수정</a>
<a href="<?php echo $itemuse_formupdate."&amp;is_id={$row['is_id']}&amp;w=d&amp;hash={$hash}"; ?>" class="itemuse_delete btn01">삭제</a>
@@ -130,4 +130,4 @@ $(function(){
});
});
</script>
<!-- } 상품 사용후기 끝 -->
<!-- } 상품 사용후기 끝 -->
@@ -13,7 +13,7 @@ add_javascript('<script src="'.G5_THEME_JS_URL.'/theme.shop.list.js"></script>',
<script>
var kakao_javascript_apikey = "<?php echo $config['cf_kakao_js_apikey']; ?>";
</script>
<script src="<?php echo G5_JS_URL; ?>/kakaolink.js?ver=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/kakaolink.js'); ?>"></script>
<?php } ?>
<!-- 메인상품진열 10 시작 { -->
@@ -13,7 +13,7 @@ add_javascript('<script src="'.G5_THEME_JS_URL.'/theme.shop.list.js"></script>',
<script>
var kakao_javascript_apikey = "<?php echo $config['cf_kakao_js_apikey']; ?>";
</script>
<script src="<?php echo G5_JS_URL; ?>/kakaolink.js?ver=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/kakaolink.js'); ?>"></script>
<?php } ?>
<!-- 메인상품진열 10 시작 { -->
@@ -14,7 +14,7 @@ add_javascript('<script src="'.G5_THEME_JS_URL.'/theme.shop.list.js"></script>',
<script>
var kakao_javascript_apikey = "<?php echo $config['cf_kakao_js_apikey']; ?>";
</script>
<script src="<?php echo G5_JS_URL; ?>/kakaolink.js?ver=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/kakaolink.js'); ?>"></script>
<?php } ?>
<!-- 메인상품진열 20 시작 { -->
@@ -14,7 +14,7 @@ add_javascript('<script src="'.G5_THEME_JS_URL.'/theme.shop.list.js"></script>',
<script>
var kakao_javascript_apikey = "<?php echo $config['cf_kakao_js_apikey']; ?>";
</script>
<script src="<?php echo G5_JS_URL; ?>/kakaolink.js?ver=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/kakaolink.js'); ?>"></script>
<?php } ?>
<div class="st_30_wr">
<!-- 메인상품진열 30 시작 { -->
@@ -11,7 +11,7 @@ add_stylesheet('<link rel="stylesheet" href="'.G5_MSHOP_SKIN_URL.'/style.css">',
<script>
var kakao_javascript_apikey = "<?php echo $config['cf_kakao_js_apikey']; ?>";
</script>
<script src="<?php echo G5_JS_URL; ?>/kakaolink.js?ver=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/kakaolink.js'); ?>"></script>
<?php } ?>
<!-- 상품진열 10 시작 { -->
+8 -14
View File
@@ -1,20 +1,14 @@
<?php
include_once('../../../common.php');
if (isset($_REQUEST['sort']) && !preg_match("/(--|#|\/\*|\*\/)/", $_REQUEST['sort'])) {
$sort = trim($_REQUEST['sort']);
$sort = preg_replace("/[\<\>\'\"\\\'\\\"\%\=\(\)\s]/", "", $sort);
} else {
$sort = '';
}
if (isset($_REQUEST['sortodr'])) {
$sortodr = preg_match("/^(asc|desc)$/i", $sortodr) ? $sortodr : '';
} else {
$sortodr = '';
}
if (!defined('G5_USE_SHOP') || !G5_USE_SHOP)
die('<p>쇼핑몰 설치 후 이용해 주십시오.</p>');
define('_SHOP_', true);
$is_admin = get_super_admin_type($is_admin);
$request_sort = (isset($_REQUEST['sort']) && is_string($_REQUEST['sort'])) ? $_REQUEST['sort'] : '';
$request_sortodr = (isset($_REQUEST['sortodr']) && is_string($_REQUEST['sortodr'])) ? $_REQUEST['sortodr'] : '';
list($sort, $sortodr) = get_shop_item_sort($request_sort, $request_sortodr);
unset($request_sort, $request_sortodr);
define('_SHOP_', true);
@@ -4,7 +4,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
add_stylesheet('<link rel="stylesheet" href="' . $member_skin_url . '/style.css">', 0);
if ($config['cf_cert_use'] && ($config['cf_cert_simple'] || $config['cf_cert_ipin'] || $config['cf_cert_hp']))
add_javascript('<script src="'.G5_JS_URL.'/certify.js?v='.G5_JS_VER.'"></script>', 0);
add_javascript('<script src="'.G5_JS_URL.'/certify.js"></script>', 0);
?>
<!-- 기존 회원 본인인증 시작 { -->
<div class="member_cert_refresh">
@@ -5,7 +5,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
add_stylesheet('<link rel="stylesheet" href="'.$member_skin_url.'/style.css">', 0);
if($config['cf_cert_use'] && ($config['cf_cert_simple'] || $config['cf_cert_ipin'] || $config['cf_cert_hp'])) { ?>
<script src="<?php echo G5_JS_URL ?>/certify.js?v=<?php echo G5_JS_VER; ?>"></script>
<script src="<?php echo get_versioned_asset_url(G5_JS_URL.'/certify.js'); ?>"></script>
<?php } ?>
<!-- 회원정보 찾기 시작 { -->
@@ -5,7 +5,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
add_stylesheet('<link rel="stylesheet" href="'.$member_skin_url.'/style.css">', 0);
add_javascript('<script src="'.G5_JS_URL.'/jquery.register_form.js"></script>', 0);
if ($config['cf_cert_use'] && ($config['cf_cert_simple'] || $config['cf_cert_ipin'] || $config['cf_cert_hp']))
add_javascript('<script src="'.G5_JS_URL.'/certify.js?v='.G5_JS_VER.'"></script>', 0);
add_javascript('<script src="'.G5_JS_URL.'/certify.js"></script>', 0);
?>
<!-- 회원정보 입력/수정 시작 { -->
@@ -4,7 +4,7 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
<section id="bo_v_ans_form">
<?php
if($is_admin) // 관리자이면 답변등록
if($is_admin === 'super') // 최고관리자이면 답변등록
{
?>
<h2>답변등록</h2>
@@ -152,4 +152,4 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
<?php
}
?>
</section>
</section>
+3 -3
View File
@@ -29,7 +29,7 @@ add_stylesheet('<link rel="stylesheet" href="'.G5_SHOP_SKIN_URL.'/style.css">',
if($row['iq_secret']) {
$iq_subject .= ' <img src="'.G5_SHOP_SKIN_URL.'/img/icon_secret.gif" alt="비밀글">';
if($is_admin || $member['mb_id' ] == $row['mb_id']) {
if(is_shop_resource_owner_or_super_admin($row['mb_id'], $member['mb_id'], $is_admin)) {
$iq_question = get_view_thumbnail(conv_content($row['iq_question'], 1), $thumbnail_width);
} else {
$iq_question = '비밀글로 보호된 문의입니다.';
@@ -85,7 +85,7 @@ add_stylesheet('<link rel="stylesheet" href="'.G5_SHOP_SKIN_URL.'/style.css">',
<?php } ?>
</div>
<?php if ($is_admin || ($row['mb_id'] == $member['mb_id'] && !$is_answer)) { ?>
<?php if ($is_admin === 'super' || ($row['mb_id'] == $member['mb_id'] && !$is_answer)) { ?>
<div class="sit_qa_cmd">
<a href="<?php echo $itemqa_form."&amp;iq_id={$row['iq_id']}&amp;w=u"; ?>" class="itemqa_form btn01" onclick="return false;">수정</a>
<a href="<?php echo $itemqa_formupdate."&amp;iq_id={$row['iq_id']}&amp;w=d&amp;hash={$hash}"; ?>" class="itemqa_delete btn01">삭제</a>
@@ -140,4 +140,4 @@ $(function(){
});
});
</script>
<!-- } 상품문의 목록 끝 -->
<!-- } 상품문의 목록 끝 -->
@@ -44,7 +44,7 @@ add_stylesheet('<link rel="stylesheet" href="'.G5_SHOP_SKIN_URL.'/style.css">',
if($row['iq_secret']) {
$iq_subject .= ' <i class="fa fa-lock" aria-hidden="true"></i>';
if($is_admin || $member['mb_id' ] == $row['mb_id']) {
if(is_shop_resource_owner_or_super_admin($row['mb_id'], $member['mb_id'], $is_admin)) {
$iq_question = get_view_thumbnail(conv_content($row['iq_question'], 1), $thumbnail_width);
} else {
$iq_question = '비밀글로 보호된 문의입니다.';
@@ -141,4 +141,4 @@ $(function(){
});
});
</script>
<!-- } 전체 상품 사용후기 목록 끝 -->
<!-- } 전체 상품 사용후기 목록 끝 -->
+2 -2
View File
@@ -59,7 +59,7 @@ add_stylesheet('<link rel="stylesheet" href="'.G5_SHOP_SKIN_URL.'/style.css">',
<?php echo $is_content; // 사용후기 내용 ?>
</div>
<?php if ($is_admin || $row['mb_id'] == $member['mb_id']) { ?>
<?php if (is_shop_resource_owner_or_super_admin($row['mb_id'], $member['mb_id'], $is_admin)) { ?>
<div class="sit_use_cmd">
<a href="<?php echo $itemuse_form."&amp;is_id={$row['is_id']}&amp;w=u"; ?>" class="itemuse_form btn01" onclick="return false;">수정</a>
<a href="<?php echo $itemuse_formupdate."&amp;is_id={$row['is_id']}&amp;w=d&amp;hash={$hash}"; ?>" class="itemuse_delete btn01">삭제</a>
@@ -131,4 +131,4 @@ $(function(){
});
});
</script>
<!-- } 상품 사용후기 끝 -->
<!-- } 상품 사용후기 끝 -->
+1 -1
View File
@@ -2,7 +2,7 @@
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
define('G5_VERSION', '그누보드5');
define('G5_GNUBOARD_VER', '5.6.35');
define('G5_GNUBOARD_VER', '5.6.36');
// 그누보드5.4.5.5 버전과 영카트5.4.5.5.1 버전을 합쳐서 그누보드5.4.6 버전에서 시작함 (kagla-210617)
// G5_YOUNGCART_VER 이 상수를 사용하는 곳이 있으므로 주석 처리 해제함
// 그누보드5.4.6 이상 버전 부터는 영카트를 그누보드에 포함하여 배포하므로 영카트5의 버전은 의미가 없습니다.