From 66f6a75a10126cba969cc9c7ed419ec422b92cd7 Mon Sep 17 00:00:00 2001 From: chym1217 Date: Thu, 4 Sep 2025 12:32:31 +0900 Subject: [PATCH] =?UTF-8?q?=ED=8C=9D=EB=B9=8C=20=EC=95=8C=EB=A6=BC?= =?UTF-8?q?=ED=86=A1=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- adm/admin.js | 114 ++- adm/admin.menu100.php | 2 + adm/admin.menu200.php | 1 + adm/admin.menu500.shop_2of2.php | 2 +- adm/admin.tail.php | 20 +- adm/alimtalkpreset.php | 57 ++ adm/alimtalkpreset_popbill.php | 300 ++++++ adm/alimtalkpresetupdate.php | 37 + adm/board_copy_update.php | 1 + adm/board_form.php | 18 + adm/board_form_update.php | 4 + adm/config_form.php | 187 +++- adm/config_form_update.php | 16 +- adm/css/admin.css | 126 ++- adm/dbupgrade.php | 160 +++ adm/img/svc_btn_07.jpg | Bin 0 -> 6137 bytes adm/member_form.php | 112 ++- adm/member_form_update.php | 93 +- adm/member_list.php | 12 +- adm/member_list_exel.lib.php | 289 ++++++ adm/member_list_exel.php | 578 +++++++++++ adm/member_list_exel_export.php | 559 +++++++++++ adm/member_list_file_delete.php | 72 ++ adm/member_list_update.php | 27 + adm/service.php | 10 + adm/shop_admin/itemform.php | 4 +- adm/shop_admin/itemstocksms.php | 37 +- adm/shop_admin/itemstocksmsupdate.php | 49 +- adm/shop_admin/orderalimtalk.inc.php | 22 + adm/shop_admin/orderdeliveryupdate.php | 9 + adm/shop_admin/orderform.php | 25 + adm/shop_admin/orderformcartupdate.php | 27 +- adm/shop_admin/orderformreceiptupdate.php | 3 + adm/shop_admin/orderlistupdate.php | 25 + bbs/poll_etc_update.php | 6 + bbs/qawrite_update.php | 19 + bbs/register_form_update.php | 113 ++- bbs/write_comment_update.php | 50 + bbs/write_update.php | 39 + css/default.css | 12 + extend/kakao5.extend.php | 329 +++++++ install/gnuboard5.sql | 108 +- install/install_db.php | 1 + js/kakao5.js | 26 + mobile/shop/orderformupdate.php | 17 + .../skin/member/basic/consent_modal.inc.php | 85 ++ mobile/skin/member/basic/register.skin.php | 4 +- .../skin/member/basic/register_form.skin.php | 227 ++++- mobile/skin/member/basic/style.css | 14 +- mobile/skin/shop/basic/item.form.skin.php | 4 +- mobile/skin/social/consent_modal.inc.php | 85 ++ .../social/social_register_member.skin.php | 128 +++ mobile/skin/social/style.css | 3 + plugin/kakao5/Popbill/LICENSE.md | 9 + plugin/kakao5/Popbill/Linkhub/LICENSE.md | 9 + plugin/kakao5/Popbill/Linkhub/README.md | 4 + plugin/kakao5/Popbill/Linkhub/example.php | 49 + .../kakao5/Popbill/Linkhub/linkhub.auth.php | 337 +++++++ plugin/kakao5/Popbill/PopbillKakao.php | 679 +++++++++++++ plugin/kakao5/Popbill/PopbillMessaging.php | 619 ++++++++++++ plugin/kakao5/Popbill/README.md | 2 + plugin/kakao5/Popbill/crypto.php | 44 + plugin/kakao5/Popbill/popbill.php | 930 ++++++++++++++++++ plugin/kakao5/_common.php | 7 + plugin/kakao5/ajax.check_popbill.php | 14 + plugin/kakao5/ajax.get_url.php | 38 + plugin/kakao5/kakao5.lib.php | 449 +++++++++ plugin/kakao5/kakao5_popbill.lib.php | 238 +++++ plugin/social/register_member_update.php | 57 +- shop/itemstocksms.php | 9 +- shop/itemstocksmsupdate.php | 4 +- shop/orderformupdate.php | 19 +- shop/orderinquirycancel.php | 13 + shop/settle_inicis_common.php | 14 + shop/settle_kcp_common.php | 14 + shop/settle_lg_common.php | 14 + shop/settle_nicepay_common.php | 15 +- skin/member/basic/consent_modal.inc.php | 85 ++ skin/member/basic/register.skin.php | 6 +- skin/member/basic/register_form.skin.php | 237 ++++- skin/member/basic/style.css | 23 +- skin/outlogin/basic/style.css | 2 +- skin/shop/basic/item.form.skin.php | 4 +- skin/social/consent_modal.inc.php | 85 ++ skin/social/social_register_member.skin.php | 128 ++- skin/social/style.css | 16 +- theme/basic/css/default.css | 12 + theme/basic/css/mobile.css | 12 + .../skin/member/basic/consent_modal.inc.php | 85 ++ .../skin/member/basic/register.skin.php | 4 +- .../skin/member/basic/register_form.skin.php | 225 ++++- .../basic/mobile/skin/member/basic/style.css | 4 + .../mobile/skin/shop/basic/item.form.skin.php | 4 +- .../skin/member/basic/consent_modal.inc.php | 85 ++ .../basic/skin/member/basic/register.skin.php | 6 +- .../skin/member/basic/register_form.skin.php | 236 ++++- theme/basic/skin/member/basic/style.css | 16 +- theme/basic/skin/outlogin/basic/style.css | 2 +- .../basic/skin/shop/basic/item.form.skin.php | 4 +- 99 files changed, 8876 insertions(+), 260 deletions(-) create mode 100644 adm/alimtalkpreset.php create mode 100644 adm/alimtalkpreset_popbill.php create mode 100644 adm/alimtalkpresetupdate.php create mode 100644 adm/img/svc_btn_07.jpg create mode 100644 adm/member_list_exel.lib.php create mode 100644 adm/member_list_exel.php create mode 100644 adm/member_list_exel_export.php create mode 100644 adm/member_list_file_delete.php create mode 100644 adm/shop_admin/orderalimtalk.inc.php create mode 100644 extend/kakao5.extend.php create mode 100644 js/kakao5.js create mode 100644 mobile/skin/member/basic/consent_modal.inc.php create mode 100644 mobile/skin/social/consent_modal.inc.php create mode 100644 plugin/kakao5/Popbill/LICENSE.md create mode 100644 plugin/kakao5/Popbill/Linkhub/LICENSE.md create mode 100644 plugin/kakao5/Popbill/Linkhub/README.md create mode 100644 plugin/kakao5/Popbill/Linkhub/example.php create mode 100644 plugin/kakao5/Popbill/Linkhub/linkhub.auth.php create mode 100644 plugin/kakao5/Popbill/PopbillKakao.php create mode 100644 plugin/kakao5/Popbill/PopbillMessaging.php create mode 100644 plugin/kakao5/Popbill/README.md create mode 100644 plugin/kakao5/Popbill/crypto.php create mode 100644 plugin/kakao5/Popbill/popbill.php create mode 100644 plugin/kakao5/_common.php create mode 100644 plugin/kakao5/ajax.check_popbill.php create mode 100644 plugin/kakao5/ajax.get_url.php create mode 100644 plugin/kakao5/kakao5.lib.php create mode 100644 plugin/kakao5/kakao5_popbill.lib.php create mode 100644 skin/member/basic/consent_modal.inc.php create mode 100644 skin/social/consent_modal.inc.php create mode 100644 theme/basic/mobile/skin/member/basic/consent_modal.inc.php create mode 100644 theme/basic/skin/member/basic/consent_modal.inc.php diff --git a/adm/admin.js b/adm/admin.js index f6c0563c1..7ce8677f4 100644 --- a/adm/admin.js +++ b/adm/admin.js @@ -1,11 +1,115 @@ -function check_all(f) -{ - var chk = document.getElementsByName("chk[]"); +/** 공통 UI 모듈 */ +window.CommonUI = { + bindTabs(tabSelector, contentSelector, options = {}) { + const tabs = document.querySelectorAll(tabSelector); + const contents = document.querySelectorAll(contentSelector); - for (i=0; i { + tab.addEventListener('click', () => { + const tabName = tab.dataset.tab; + const target = document.getElementById(`tab-${tabName}`); + + tabs.forEach(t => t.classList.remove('active')); + tab.classList.add('active'); + + contents.forEach(c => c.classList.add('is-hidden')); + + if (target) target.classList.remove('is-hidden'); + + options.onChange?.(tabName, target); + }); + }); + } +}; + +function setHtml(el, markup) { + if (!el) return; + if (markup == null || markup === '') { + el.textContent = ''; + return; + } + const range = document.createRange(); + range.selectNodeContents(el); + el.replaceChildren(range.createContextualFragment(markup)); } +/** 팝업 관리 모듈 */ +window.PopupManager = { + open(id, options = {}) { + const el = document.getElementById(id); + if (el) { + el.classList.remove('is-hidden'); + this.bindOutsideClickClose(id); + + if (!options.disableOutsideClose) { + this.bindOutsideClickClose(id); + } else { + this.unbindOutsideClickClose(id); + } + } + }, + + close(id) { + const el = document.getElementById(id); + if (el) el.classList.add('is-hidden'); + }, + + toggle(id) { + const el = document.getElementById(id); + if (el) el.classList.toggle('is-hidden'); + }, + + bindOutsideClickClose(id) { + const el = document.getElementById(id); + if (!el) return; + el.onclick = () => this.close(id); + }, + + unbindOutsideClickClose(id) { + const el = document.getElementById(id); + if (!el) return; + el.onclick = null; + }, + + /** + * 팝업 콘텐츠 렌더링 (타이틀, 바디, 푸터 구성) + * @param {string} title - 팝업 제목 + * @param {string} body - 팝업 본문 HTML + * @param {string} [footer] - 푸터 HTML + * @param {object} [options] - 팝업 열기 옵션 + */ + render(title, body, footer = '', options = {}) { + const titleEl = document.getElementById('popupTitle'); + const bodyEl = document.getElementById('popupBody'); + const footerEl = document.getElementById('popupFooter'); + + if (titleEl) titleEl.textContent = title; + if (bodyEl) setHtml(bodyEl, body); + if (footerEl) setHtml(footerEl, footer); + + this.open('popupOverlay', options); + } +}; + +/** 형식 체크 */ +function check_all(target) { + const chkboxes = document.getElementsByName("chk[]"); + let chkall; + + if (target && target.tagName === "FORM") { + chkall = target.querySelector('input[name="chkall"]'); + } else if (target && target.type === "checkbox") { + chkall = target; + } + + if (!chkall) return; + + for (const checkbox of chkboxes) { + checkbox.checked = chkall.checked; + } +} + + function btn_check(f, act) { if (act == "update") // 선택수정 diff --git a/adm/admin.menu100.php b/adm/admin.menu100.php index 3cd9bfb22..aa153c4fd 100644 --- a/adm/admin.menu100.php +++ b/adm/admin.menu100.php @@ -6,11 +6,13 @@ $menu['menu100'] = array( array('100280', '테마설정', G5_ADMIN_URL . '/theme.php', 'cf_theme', 1), array('100290', '메뉴설정', G5_ADMIN_URL . '/menu_list.php', 'cf_menu', 1), array('100300', '메일 테스트', G5_ADMIN_URL . '/sendmail_test.php', 'cf_mailtest'), + array('100320', '알림톡프리셋관리', G5_ADMIN_URL . '/alimtalkpreset.php', 'alimtalk_preset'), array('100310', '팝업레이어관리', G5_ADMIN_URL . '/newwinlist.php', 'scf_poplayer'), array('100800', '세션파일 일괄삭제', G5_ADMIN_URL . '/session_file_delete.php', 'cf_session', 1), array('100900', '캐시파일 일괄삭제', G5_ADMIN_URL . '/cache_file_delete.php', 'cf_cache', 1), array('100910', '캡챠파일 일괄삭제', G5_ADMIN_URL . '/captcha_file_delete.php', 'cf_captcha', 1), array('100920', '썸네일파일 일괄삭제', G5_ADMIN_URL . '/thumbnail_file_delete.php', 'cf_thumbnail', 1), + array('100930', '회원관리파일 일괄삭제', G5_ADMIN_URL . '/member_list_file_delete.php', 'cf_memberlist', 1), array('100500', 'phpinfo()', G5_ADMIN_URL . '/phpinfo.php', 'cf_phpinfo') ); diff --git a/adm/admin.menu200.php b/adm/admin.menu200.php index 617d25638..1f3191072 100644 --- a/adm/admin.menu200.php +++ b/adm/admin.menu200.php @@ -2,6 +2,7 @@ $menu['menu200'] = array( array('200000', '회원관리', G5_ADMIN_URL . '/member_list.php', 'member'), array('200100', '회원관리', G5_ADMIN_URL . '/member_list.php', 'mb_list'), + array('200400', '회원관리파일', G5_ADMIN_URL . '/member_list_exel.php', 'mb_list'), array('200300', '회원메일발송', G5_ADMIN_URL . '/mail_list.php', 'mb_mail'), array('200800', '접속자집계', G5_ADMIN_URL . '/visit_list.php', 'mb_visit', 1), array('200810', '접속자검색', G5_ADMIN_URL . '/visit_search.php', 'mb_search', 1), diff --git a/adm/admin.menu500.shop_2of2.php b/adm/admin.menu500.shop_2of2.php index 95068e48a..863dd9cf6 100644 --- a/adm/admin.menu500.shop_2of2.php +++ b/adm/admin.menu500.shop_2of2.php @@ -8,7 +8,7 @@ $menu['menu500'] = array( array('500110', '매출현황', G5_ADMIN_URL . '/shop_admin/sale1.php', 'sst_order_stats'), array('500100', '상품판매순위', G5_ADMIN_URL . '/shop_admin/itemsellrank.php', 'sst_rank'), array('500120', '주문내역출력', G5_ADMIN_URL . '/shop_admin/orderprint.php', 'sst_print_order', 1), - array('500400', '재입고SMS알림', G5_ADMIN_URL . '/shop_admin/itemstocksms.php', 'sst_stock_sms', 1), + array('500400', '재입고알림', G5_ADMIN_URL . '/shop_admin/itemstocksms.php', 'sst_stock_sms', 1), array('500300', '이벤트관리', G5_ADMIN_URL . '/shop_admin/itemevent.php', 'scf_event'), array('500310', '이벤트일괄처리', G5_ADMIN_URL . '/shop_admin/itemeventlist.php', 'scf_event_mng'), array('500500', '배너관리', G5_ADMIN_URL . '/shop_admin/bannerlist.php', 'scf_banner', 1), diff --git a/adm/admin.tail.php b/adm/admin.tail.php index 5c95c1288..68b6dae12 100644 --- a/adm/admin.tail.php +++ b/adm/admin.tail.php @@ -14,7 +14,6 @@ $print_version = ($is_admin == 'super') ? 'Version ' . G5_GNUBOARD_VER : ''; 자바스크립트를 사용하지 않음으로 설정하신 경우는 수정이나 삭제시 별도의 경고창이 나오지 않으므로 이점 주의하시기 바랍니다.

-

@@ -22,8 +21,25 @@ $print_version = ($is_admin == 'super') ? 'Version ' . G5_GNUBOARD_VER : '';

- + +
+
', 1); // 카카오톡5 솔루션 js 추가 +?> + + +

팝빌 카카오톡 발송 서비스를 사용할 수 없습니다.

+
+

팝빌 서비스 설정이 되어 있지 않아, 프리셋 서비스를 사용할 수 없습니다. +
팝빌 설정은 환경설정 > 기본환경설정 > 기본알림환경 에서 확인 및 설정해 주셔야 사용하실 수 있습니다.


+

* 설정 오류 내용 :

+
+ +
+

템플릿관리를 통해 신청 후 승인된 템플릿만 사용가능합니다.
템플릿 내용 작성 시, 동일한 [구분]에 속한 변수만 사용 가능하며, 아래에 제공된 변수 외의 항목을 입력할 경우 적용되지 않습니다.


+

아래 표의 #{변수명}만 템플릿 내용에 사용할 수 있으며, 실제 발송 시 값으로 자동 치환됩니다.
※ 표에 없는 변수는 치환되지 않습니다.

+

[사용 가능한 변수 리스트]

+
+ + + + + + + + + + + $var) { + ?> + + + + + + + + + +
제공 변수 목록
구분변수명설명
+
+
+ +

아래 표의 #{버튼링크명}은 버튼에 사용할 수 있으며, 실제 발송 시 지정된 URL로 자동 치환됩니다.
※ 표에 없는 버튼 링크 변수는 치환되지 않습니다. 등록 시 [https://#{버튼링크명}]으로 작성하시면 됩니다.

+ + +
+ +
+

* 관리자 휴대폰번호 : 관리자로 설정된 []휴대폰 번호를 사용합니다.

+

* 그룹 관리자 휴대폰번호 : 그룹 관리자로 지정된 아이디의 휴대폰 번호를 사용합니다.

+

* 게시판 관리자 휴대폰번호 : 게시판 관리자로 지정된 아이디의 휴대폰 번호를 사용합니다.

+
+ + +
+

+ 환경설정 > 기본환경설정 > 회원가입'; + + if (!empty($config['cf_use_hp'])) { + // 보이기만 설정된 경우 + echo '[휴대폰번호 입력][보이기]로 설정되어 있습니다. 일부 회원은 휴대폰 번호를 입력하지 않아 발송이 제한될 수 있습니다.' + . $link . '에서 [필수입력]으로 설정하는 것을 권장합니다.'; + } else { + // 둘 다 설정 안 된 경우 + echo '[휴대폰번호 입력][보이기] 또는 [필수입력]으로 설정되어 있지 않습니다. 현재 상태에서는 알림톡 발송이 불가능합니다.' + . $link . '에서 반드시 [보이기][필수입력] 중 하나 이상으로 설정해야 합니다.'; + } + ?> +

+
+ + +
+ + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '; + ?> + +
알림톡 프리셋 목록
사용여부구분발송시점대상템플릿 명미리보기버튼정보문자대체발송
+ + + + + + +
+
+ +
+ +
+ + $button) { + echo '[' . $button->n . ']
'; + if ($button->t == 'DS') { // 배송조회 버튼 + echo '· 카카오톡검색 링크 버튼 자동생성
'; + }else{ + echo ($button->t == 'AL' ? '· iOS링크: ' : ($button->t == 'WL' ? '· Mobile링크: ' : '· 링크: ')) . $button->u1 . + ($button->u2 ? '
' . ($button->t == 'AL' ? '· Android링크: ' : ($button->t == 'WL' ? '· PC링크: ' : '· 링크2: ')) . $button->u2 : '') . + ($button->tg ? '
· 아웃링크: ' . $button->tg : '') . '
'; + + } + } ?> + +
+ +
등록된 프리셋이 없습니다.
+
+
+ + + +
+ + + \ No newline at end of file diff --git a/adm/alimtalkpresetupdate.php b/adm/alimtalkpresetupdate.php new file mode 100644 index 000000000..429d023c0 --- /dev/null +++ b/adm/alimtalkpresetupdate.php @@ -0,0 +1,37 @@ +'', 'bo_device'=>'', @@ -702,6 +707,19 @@ $pg_anchor = '