변경 파일 목록
총 118개
Admin (13)
goods_register.phpgoods/goods_register_option_stock.phpgoods/naver_config.phpmarketing/sms_send.phpmember/frame_tax_invoice_register.phporder/layout_order_search_form.phporder/layout_order_view_status_back.phporder/layout_order_view_status_exchange.phporder/layout_order_view_status_refund.phporder/order_cart.phporder/base_agreement_with_private.phppolicy/order_basic.phppolicy/comeback_coupon_regist.phppromotion/Component (27)
BuyerInform.phpAgreement/Board.phpBoard/BoardFront.phpBoard/DBTableField.phpDatabase/Delivery.phpDelivery/ExcelRequest.phpExcel/GoodsAdmin.phpGoods/GoodsObsConvertStatus.phpGoods/GroupService.phpMember/Group/Member.phpMember/MemberDAO.phpMember/MemberSnsService.phpMember/PageAccess.phpMember/SleepDAO.phpMember/Sleep/SleepService.phpMember/Sleep/NaverCommonInflowScript.phpNaver/Order.phpOrder/OrderAdmin.phpOrder/OrderAdminNew.phpOrder/OrderNew.phpOrder/Tax.phpOrder/UserHandleAutoProcess.phpOrder/ScmAdjust.phpScm/AwsStorage.phpStorage/Validator.phpValidator/Wish.phpWish/NaverDbUrl.phpWorker/Controller (9)
OrderChangePsController.phpAdmin/Order/BaseAgreementPsController.phpAdmin/Policy/OrderBasicController.phpAdmin/Policy/BoardPsController.phpFront/Board/WriteController.phpFront/Board/CartPsController.phpFront/Order/ReorderPsController.phpFront/Order/BoardPsController.phpMobile/Board/WriteController.phpMobile/Board/Repository (1)
OrderUserHandleRepository.phpOrder/data (66)
write.htmlskin/front/moment/board/skin/default/write.htmlskin/front/moment/board/skin/event/write.htmlskin/front/moment/board/skin/gallery/write.htmlskin/front/moment/board/skin/qa/write.htmlskin/front/moment/board/template/default/write.htmlskin/front/moment/board/template/event/write.htmlskin/front/moment/board/template/gallery/write.htmlskin/front/moment/board/template/qa/gd_common.jsskin/front/moment/js/gd_gettext.jsskin/front/moment/js/gd_multi_select_box.jsskin/front/moment/js/naverCommonInflowScript.jsskin/front/moment/js/naver/_order_goods_list.htmlskin/front/moment/mypage/_reorder_goods_list.htmlskin/front/moment/mypage/layer_order_refund_reason.htmlskin/front/moment/mypage/order_view.htmlskin/front/moment/mypage/order.htmlskin/front/moment/order/write.htmlskin/front/mygreek/board/skin/default/write.htmlskin/front/mygreek/board/skin/event/write.htmlskin/front/mygreek/board/skin/gallery/write.htmlskin/front/mygreek/board/skin/qa/write.htmlskin/front/mygreek/board/template/default/write.htmlskin/front/mygreek/board/template/event/write.htmlskin/front/mygreek/board/template/gallery/write.htmlskin/front/mygreek/board/template/qa/gd_common.jsskin/front/mygreek/js/gd_gettext.jsskin/front/mygreek/js/gd_multi_select_box.jsskin/front/mygreek/js/naverCommonInflowScript.jsskin/front/mygreek/js/naver/_order_goods_list.htmlskin/front/mygreek/mypage/_reorder_goods_list.htmlskin/front/mygreek/mypage/layer_order_refund_reason.htmlskin/front/mygreek/mypage/order_view.htmlskin/front/mygreek/mypage/order.htmlskin/front/mygreek/order/write.htmlskin/mobile/moment/board/skin/default/write.htmlskin/mobile/moment/board/skin/event/write.htmlskin/mobile/moment/board/skin/gallery/write.htmlskin/mobile/moment/board/skin/qa/write.htmlskin/mobile/moment/board/template/default/write.htmlskin/mobile/moment/board/template/event/write.htmlskin/mobile/moment/board/template/gallery/write.htmlskin/mobile/moment/board/template/qa/gd_common.jsskin/mobile/moment/js/gd_gettext.jsskin/mobile/moment/js/gd_member2.jsskin/mobile/moment/js/_order_goods_list.htmlskin/mobile/moment/mypage/_reorder_goods_list.htmlskin/mobile/moment/mypage/layer_order_refund_reason.htmlskin/mobile/moment/mypage/layer_tax_invoice_request.htmlskin/mobile/moment/mypage/order.htmlskin/mobile/moment/order/write.htmlskin/mobile/mygreek/board/skin/default/write.htmlskin/mobile/mygreek/board/skin/event/write.htmlskin/mobile/mygreek/board/skin/gallery/write.htmlskin/mobile/mygreek/board/skin/qa/write.htmlskin/mobile/mygreek/board/template/default/write.htmlskin/mobile/mygreek/board/template/event/write.htmlskin/mobile/mygreek/board/template/gallery/write.htmlskin/mobile/mygreek/board/template/qa/gd_common.jsskin/mobile/mygreek/js/gd_gettext.jsskin/mobile/mygreek/js/gd_member2.jsskin/mobile/mygreek/js/_order_goods_list.htmlskin/mobile/mygreek/mypage/_reorder_goods_list.htmlskin/mobile/mygreek/mypage/layer_order_refund_reason.htmlskin/mobile/mygreek/mypage/layer_tax_invoice_request.htmlskin/mobile/mygreek/mypage/order.htmlskin/mobile/mygreek/order/변경 파일 코드
추가삭제
변경 전goods_register.php
| $imageInput .= '<input type="hidden" name="imageDB[imageName][]" value="' . $iVal['imageName'] . '" /> '; | |
| $imageInput .= '<input type="hidden" name="imageDB[imageRealSize][]" value="' . $iVal['imageRealSize'] . '" /> '; | |
| $imageInput .= '<input type="hidden" name="imageDB[goodsImageStorage][]" value="' . $iVal['goodsImageStorage'] . '" /> '; | |
| $imageInput .= '<input type="hidden" name="imageDB[obsConvertFl][]" value="' . $iVal['obsConvertFl'] . '" /> '; | |
| $imageInput .= '<input type="hidden" name="imageDB[imageFolder][]" value="' . $iVal['imageFolder'] . '" /> '; | |
| $imageInput .= '<input type="hidden" name="imageDB[thumbImageFolder][]" value="' . $iVal['thumbImageFolder'] . '" /> '; | |
| $imageInput .= '<input type="hidden" name="imageDB[imageUrl][]" value="' . $iVal['imageUrl'] . '" /> '; | |
변경 후goods_register.php
| $imageInput .= '<input type="hidden" name="imageDB[imageName][]" value="' . $iVal['imageName'] . '" /> '; | |
| $imageInput .= '<input type="hidden" name="imageDB[imageRealSize][]" value="' . $iVal['imageRealSize'] . '" /> '; | |
| $imageInput .= '<input type="hidden" name="imageDB[goodsImageStorage][]" value="' . $iVal['goodsImageStorage'] . '" /> '; | |
| $imageInput .= '<input type="hidden" name="imageDB[imageFolder][]" value="' . $iVal['imageFolder'] . '" /> '; | |
| $imageInput .= '<input type="hidden" name="imageDB[thumbImageFolder][]" value="' . $iVal['thumbImageFolder'] . '" /> '; | |
| $imageInput .= '<input type="hidden" name="imageDB[imageUrl][]" value="' . $iVal['imageUrl'] . '" /> '; | |
변경 전goods_register_option_stock.php
| $imageInput .= '<input type="hidden" name="imageDB[imageName][]" value="' . $iVal['imageName'] . '" /> '; | |
| $imageInput .= '<input type="hidden" name="imageDB[imageRealSize][]" value="' . $iVal['imageRealSize'] . '" /> '; | |
| $imageInput .= '<input type="hidden" name="imageDB[goodsImageStorage][]" value="' . $iVal['goodsImageStorage'] . '" /> '; | |
| $imageInput .= '<input type="hidden" name="imageDB[obsConvertFl][]" value="' . $iVal['obsConvertFl'] . '" /> '; | |
| $imageInput .= '<input type="hidden" name="imageDB[imageFolder][]" value="' . $iVal['imageFolder'] . '" /> '; | |
| $imageInput .= '<input type="hidden" name="imageDB[thumbImageFolder][]" value="' . $iVal['thumbImageFolder'] . '" /> '; | |
| $imageInput .= '<input type="hidden" name="imageDB[imageUrl][]" value="' . $iVal['imageUrl'] . '" /> '; | |
변경 후goods_register_option_stock.php
| $imageInput .= '<input type="hidden" name="imageDB[imageName][]" value="' . $iVal['imageName'] . '" /> '; | |
| $imageInput .= '<input type="hidden" name="imageDB[imageRealSize][]" value="' . $iVal['imageRealSize'] . '" /> '; | |
| $imageInput .= '<input type="hidden" name="imageDB[goodsImageStorage][]" value="' . $iVal['goodsImageStorage'] . '" /> '; | |
| $imageInput .= '<input type="hidden" name="imageDB[imageFolder][]" value="' . $iVal['imageFolder'] . '" /> '; | |
| $imageInput .= '<input type="hidden" name="imageDB[thumbImageFolder][]" value="' . $iVal['thumbImageFolder'] . '" /> '; | |
| $imageInput .= '<input type="hidden" name="imageDB[imageUrl][]" value="' . $iVal['imageUrl'] . '" /> '; | |
변경 전naver_config.php
| <span class="notice-ref notice-sm">(동의 일시 : <?= $data['cpaAgreementDt'] ?>)</span> <?php } ?> | |
| </label> | |
| <div class="notice-info mgb10"> | |
| 네이버에서 CPA 주문수집에 동의하신 경우에만 주문완료시 주문정보를 네이버측으로 전송합니다.<br/> CPA 주문수집이 정상적으로 이루어 져야만 차후 CPA로의 과금전환이 이루어질수 있습니다.<br/> 주문수집에 동의하신뒤에는 반드시 체크하여주시기 바라며, CPA 주문수집에대한 문의는 네이버 쇼핑파트너존으로 문의주시기 바랍니다.<br/> 네이버 쇼핑파트너존 고객센터 : 1588-3819<br/> | |
| </div> | |
| </td> | |
변경 후naver_config.php
| <span class="notice-ref notice-sm">(동의 일시 : <?= $data['cpaAgreementDt'] ?>)</span> <?php } ?> | |
| </label> | |
| <div class="notice-info mgb10"> | |
| 네이버에서 CPA 주문수집에 동의하신 경우에만 주문완료시 주문정보를 네이버측으로 전송합니다.<br/> CPA 주문수집이 정상적으로 이루어 져야만 차후 CPA로의 과금전환이 이루어질수 있습니다.<br/> 주문수집에 동의하신뒤에는 반드시 체크하여주시기 바라며, CPA 주문수집에대한 문의는 네이버 쇼핑파트너존으로 문의주시기 바랍니다.<br/> 네이버 쇼핑파트너존 고객센터 : 1599-1598<br/> | |
| </div> | |
| </td> | |
변경 전sms_send.php
| </div> | |
| <div class="row"> | |
| <div class="col-xs-12"> | |
| <div class="notice-info">URL 삽입 시 플러스샵 [단축 URL] 앱을 이용하시면 짧고 간단하게 URL을 사용하실 수 있습니다. <a href="http://plus.godo.co.kr/goods/view.gd?idx=12" class="btn-link" target="_blank">바로가기</a></div> | |
| <div class="notice-info">치환코드 사용 시 LMS로 발송될 수 있으며 일부 문자가 포인트 부족으로 발송되지 않을 수 있습니다.<br/>- 포인트 충전 후 <a href="../member/sms_log.php" class="btn-link" target="_blank">SMS 발송 내역 보기</a>에서 재발송하실 수 있습니다.</div> | |
| <div class="notice-danger sms-large-caution">발송내용에 이모지 또는 사용 불가능한 특수문자, 맞춤법이 바르지 않은 문자가 포함되어있으면 일부 내용은 삭제되고 발송되오니 주의하시기 바랍니다.<br/>대량 SMS(LMS) 발송 시 이모지를 사용하지 않는 것과 맞춤법에 어긋나는 문자가 입력 되지는 않았는지 확인하시는 것을 권장 드리며,<br/> 발송 내용에 사용가능한 특수문자는 매뉴얼을 참고하시기 바랍니다.</div> | |
| </div> | |
변경 후sms_send.php
| </div> | |
| <div class="row"> | |
| <div class="col-xs-12"> | |
| <div class="notice-info">URL 삽입 시 [단축 URL] 앱을 이용하시면 짧고 간단하게 URL을 사용하실 수 있습니다. <a href="https://apps.godo.co.kr/apps/1519" class="btn-link" target="_blank">바로가기</a></div> | |
| <div class="notice-info">치환코드 사용 시 LMS로 발송될 수 있으며 일부 문자가 포인트 부족으로 발송되지 않을 수 있습니다.<br/>- 포인트 충전 후 <a href="../member/sms_log.php" class="btn-link" target="_blank">SMS 발송 내역 보기</a>에서 재발송하실 수 있습니다.</div> | |
| <div class="notice-danger sms-large-caution">발송내용에 이모지 또는 사용 불가능한 특수문자, 맞춤법이 바르지 않은 문자가 포함되어있으면 일부 내용은 삭제되고 발송되오니 주의하시기 바랍니다.<br/>대량 SMS(LMS) 발송 시 이모지를 사용하지 않는 것과 맞춤법에 어긋나는 문자가 입력 되지는 않았는지 확인하시는 것을 권장 드리며,<br/> 발송 내용에 사용가능한 특수문자는 매뉴얼을 참고하시기 바랍니다.</div> | |
| </div> | |
변경 전frame_tax_invoice_register.php
| <tr> | |
| <th class="require">회사명</th> | |
| <td> | |
| <input type="text" name="taxCompany" value="<?php echo gd_isset($orderData['taxCompany'], $memberData['company']); ?>" class="form-control" maxlength="50"/> | |
| </td> | |
| <th class="require">대표자명</th> | |
| <td> | |
변경 후frame_tax_invoice_register.php
| <tr> | |
| <th class="require">회사명</th> | |
| <td> | |
| <input type="text" name="taxCompany" value="<?php echo gd_isset($orderData['taxCompany'], $memberData['company']); ?>" class="form-control" maxlength="70"/> | |
| </td> | |
| <th class="require">대표자명</th> | |
| <td> | |
변경 전layout_order_search_form.php
| <?php if ($isUserHandle) { ?> | |
| <ul class="nav nav-tabs mgb30" role="tablist"> | |
| <li role="presentation" <?=$search['view'] == 'exchange' ? 'class="active"' : ''?>> | |
| <a href="../order/order_list_user_exchange.php?view=exchange&<?=$queryString ? 'searchFl=y&' . $queryString : ''?>">교환신청 관리 (<strong>전체 <?=$userHandleCount['exchangeAll']?></strong> | <strong class="text-danger">신청 <?=$userHandleCount['exchangeRequest']?></strong> | <strong class="text-info">처리완료 <?=$userHandleCount['exchangeAccept']?>)</strong></a> | |
| </li> | |
| <li role="presentation" <?=$search['view'] == 'back' ? 'class="active"' : ''?>> | |
| <a href="../order/order_list_user_exchange.php?view=back&<?=$queryString ? 'searchFl=y&' . $queryString : ''?>">반품신청 관리 (<strong>전체 <?=$userHandleCount['backAll']?></strong> | <strong class="text-danger">신청 <?=$userHandleCount['backRequest']?></strong> | <strong class="text-info">처리완료 <?=$userHandleCount['backAccept']?>)</strong></a> | |
| </li> | |
| <li role="presentation" <?=$search['view'] == 'refund' ? 'class="active"' : ''?>> | |
| <a href="../order/order_list_user_exchange.php?view=refund&<?=$queryString ? 'searchFl=y&' . $queryString : ''?>">환불신청 관리 (<strong>전체 <?=$userHandleCount['refundAll']?></strong> | <strong class="text-danger">신청 <?=$userHandleCount['refundRequest']?></strong> | <strong class="text-info">처리완료 <?=$userHandleCount['refundAccept']?>)</strong></a> | |
| </li> | |
| </ul> | |
변경 후layout_order_search_form.php
| <?php if ($isUserHandle) { ?> | |
| <ul class="nav nav-tabs mgb30" role="tablist"> | |
| <li role="presentation" <?=$search['view'] == 'exchange' ? 'class="active"' : ''?>> | |
| <a href="../order/order_list_user_exchange.php?view=exchange&<?=$queryString ? 'searchFl=y&' . $queryString : ''?>">교환신청 관리 (<strong>전체 <?=$userHandleCount['exchangeAll']?></strong> | <strong class="text-danger">신청 <?=$userHandleCount['exchangeRequest']?></strong> | <strong class="text-info">승인 <?=$userHandleCount['exchangeApprove']?></strong> | <strong class="text-muted">거절 <?=$userHandleCount['exchangeReject']?>)</strong></a> | |
| </li> | |
| <li role="presentation" <?=$search['view'] == 'back' ? 'class="active"' : ''?>> | |
| <a href="../order/order_list_user_exchange.php?view=back&<?=$queryString ? 'searchFl=y&' . $queryString : ''?>">반품신청 관리 (<strong>전체 <?=$userHandleCount['backAll']?></strong> | <strong class="text-danger">신청 <?=$userHandleCount['backRequest']?></strong> | <strong class="text-info">승인 <?=$userHandleCount['backApprove']?></strong> | <strong class="text-muted">거절 <?=$userHandleCount['backReject']?>)</strong></a> | |
| </li> | |
| <li role="presentation" <?=$search['view'] == 'refund' ? 'class="active"' : ''?>> | |
| <a href="../order/order_list_user_exchange.php?view=refund&<?=$queryString ? 'searchFl=y&' . $queryString : ''?>">환불신청 관리 (<strong>전체 <?=$userHandleCount['refundAll']?></strong> | <strong class="text-danger">신청 <?=$userHandleCount['refundRequest']?></strong> | <strong class="text-info">승인 <?=$userHandleCount['refundApprove']?></strong> | <strong class="text-muted">거절 <?=$userHandleCount['refundReject']?>)</strong></a> | |
| </li> | |
| </ul> | |
변경 전layout_order_view_status_back.php
| //$isUseMall = true; | |
| } | |
| ?> | |
| <tr id="statusCheck_<?= $statusMode; ?>_<?= $val['sno']; ?>" class="text-center"> | |
| <td class="center"> | |
| <div class="display-block"> | |
| <input type="checkbox" name="back[statusCheck][<?= $val['sno']; ?>]" value="<?= $val['sno']; ?>" class="<?= gd_isset($onclickAction); ?>"/> | |
| <script> | |
| $(document).ready(function () { | |
| $("#backForm").validate({ | |
| submitHandler: function (form) { | |
| form.target = 'ifrmProcess'; | |
| form.submit(); | |
| }, | |
| rules: { | |
| mode: { | |
변경 후layout_order_view_status_back.php
| //$isUseMall = true; | |
| } | |
| ?> | |
| <tr id="statusCheck_<?= $statusMode; ?>_<?= $val['sno']; ?>" class="text-center" data-user-handle-mode="<?=$val['userHandleMode']?>" data-claim-status-name="<?=$val['userHandleFlStr']?>"> | |
| <td class="center"> | |
| <div class="display-block"> | |
| <input type="checkbox" name="back[statusCheck][<?= $val['sno']; ?>]" value="<?= $val['sno']; ?>" class="<?= gd_isset($onclickAction); ?>"/> | |
| <script> | |
| $(document).ready(function () { | |
| var orderSubmitFlag = true; | |
| $('iframe[name="ifrmProcess"]').on('load', function () { | |
| orderSubmitFlag = true; | |
| setClaimSubmitDisabled('#backForm', false); | |
| }); | |
| $("#backForm").validate({ | |
| submitHandler: function (form) { | |
| if (orderSubmitFlag === false) { | |
| alert('처리중입니다. 잠시만 기다려주세요.'); | |
| return false; | |
| } | |
| // 고객 클레임 신청 건과 종류가 다르면 자동 거절 컨펌 모달 | |
| confirmCustomerClaimReceipt('back', function () { | |
| setClaimSubmitDisabled(form, true); | |
| orderSubmitFlag = false; | |
| form.target = 'ifrmProcess'; | |
| form.submit(); | |
| }); | |
| return false; | |
| }, | |
| rules: { | |
| mode: { | |
변경 전layout_order_view_status_exchange.php
| $rowMultiShipping = 0; | |
| foreach ($sVal as $dKey => $dVal) { | |
| foreach ($dVal as $key => $val) { | |
| // rowspan 처리 | |
| $orderGoodsRowSpan = $rowChk === 0 && $rowCnt > 1 ? 'rowspan="' . $rowCnt . '"' : ''; | |
| //$isUseMall = true; | |
| } | |
| ?> | |
| <tr data-sno="<?=$val['sno']?>" data-stock-cnt="<?=$val['stockCnt']?>" data-goods-price="<?=$goodsPrice?>" data-goods-sellFl="<?=$goodsSellFl?>" data-order-info-cd="<?=(int)$val['orderInfoCd']?>" data-goods-change-able-option="<?=$val['changeAbleOrderGoodsInfo']?>" data-option-sno="<?=$val['optionSno']?>" data-goods-type="<?=$val['goodsType']?>"> | |
| <td class="center"> | |
| <div class="display-block"> | |
| <input type="checkbox" name="bundle[orderCheck][<?= $val['sno']; ?>]" value="<?= $val['sno']; ?>" class="<?= gd_isset($onclickAction); ?>"/> | |
| $(document).ready(function(){ | |
| // 교환 폼 체크 | |
| $('#exchangeForm').validate({ | |
| submitHandler: function (form) { | |
| if($("#formOrderViewExchange>input[name='mode']").val() === 'anotherExchange'){ | |
| //다른상품 교환 | |
| $.each($("input[name*='bundle[statusCheck]']"), function () { | |
| $("#exchangeForm>input[name='changeOption']").val(changeOptionStr); | |
| } | |
| form.submit(); | |
| } | |
| }); | |
변경 후layout_order_view_status_exchange.php
| $rowMultiShipping = 0; | |
| foreach ($sVal as $dKey => $dVal) { | |
| foreach ($dVal as $key => $val) { | |
| $statusMode = substr($val['orderStatus'], 0, 1); | |
| // rowspan 처리 | |
| $orderGoodsRowSpan = $rowChk === 0 && $rowCnt > 1 ? 'rowspan="' . $rowCnt . '"' : ''; | |
| //$isUseMall = true; | |
| } | |
| ?> | |
| <tr id="statusCheck_<?= $statusMode; ?>_<?= $val['sno']; ?>" data-sno="<?=$val['sno']?>" data-stock-cnt="<?=$val['stockCnt']?>" data-goods-price="<?=$goodsPrice?>" data-goods-sellFl="<?=$goodsSellFl?>" data-order-info-cd="<?=(int)$val['orderInfoCd']?>" data-goods-change-able-option="<?=$val['changeAbleOrderGoodsInfo']?>" data-option-sno="<?=$val['optionSno']?>" data-goods-type="<?=$val['goodsType']?>" data-user-handle-mode="<?=$val['userHandleMode']?>" data-claim-status-name="<?=$val['userHandleFlStr']?>"> | |
| <td class="center"> | |
| <div class="display-block"> | |
| <input type="checkbox" name="bundle[orderCheck][<?= $val['sno']; ?>]" value="<?= $val['sno']; ?>" class="<?= gd_isset($onclickAction); ?>"/> | |
| $(document).ready(function(){ | |
| var orderSubmitFlag = true; | |
| $('iframe[name="ifrmProcess"]').on('load', function () { | |
| orderSubmitFlag = true; | |
| setClaimSubmitDisabled('#exchangeForm', false); | |
| }); | |
| // 교환 폼 체크 | |
| $('#exchangeForm').validate({ | |
| submitHandler: function (form) { | |
| if (orderSubmitFlag === false) { | |
| alert('처리중입니다. 잠시만 기다려주세요.'); | |
| return false; | |
| } | |
| if($("#formOrderViewExchange>input[name='mode']").val() === 'anotherExchange'){ | |
| //다른상품 교환 | |
| $.each($("input[name*='bundle[statusCheck]']"), function () { | |
| $("#exchangeForm>input[name='changeOption']").val(changeOptionStr); | |
| } | |
| // 고객 클레임 신청 건과 종류가 다르면 자동 거절 컨펌 모달 | |
| confirmCustomerClaimReceipt('exchange', function () { | |
| setClaimSubmitDisabled(form, true); | |
| orderSubmitFlag = false; | |
| form.submit(); | |
| }); | |
| return false; | |
| } | |
| }); | |
변경 전layout_order_view_status_refund.php
| //$isUseMall = true; | |
| } | |
| ?> | |
| <tr id="statusCheck_<?= $statusMode; ?>_<?= $val['sno']; ?>" class="text-center"> | |
| <td class="center"> | |
| <div class="display-block"> | |
| <input type="checkbox" name="refund[statusCheck][<?= $val['sno']; ?>]" value="<?= $val['sno']; ?>" class="<?= gd_isset($onclickAction); ?>"/> | |
| var orderChannelFl = "<?=$data['orderChannelFl']?>"; | |
| var refundAccountFl = "<?=$easypayVacctRefundFl;?>"; | |
| $(document).ready(function () { | |
| $("#refundForm").validate({ | |
| submitHandler: function (form) { | |
| form.target = 'ifrmProcess'; | |
| form.submit(); | |
| }, | |
| rules: { | |
| mode: { | |
변경 후layout_order_view_status_refund.php
| //$isUseMall = true; | |
| } | |
| ?> | |
| <tr id="statusCheck_<?= $statusMode; ?>_<?= $val['sno']; ?>" class="text-center" data-user-handle-mode="<?=$val['userHandleMode']?>" data-claim-status-name="<?=$val['userHandleFlStr']?>"> | |
| <td class="center"> | |
| <div class="display-block"> | |
| <input type="checkbox" name="refund[statusCheck][<?= $val['sno']; ?>]" value="<?= $val['sno']; ?>" class="<?= gd_isset($onclickAction); ?>"/> | |
| var orderChannelFl = "<?=$data['orderChannelFl']?>"; | |
| var refundAccountFl = "<?=$easypayVacctRefundFl;?>"; | |
| $(document).ready(function () { | |
| var orderSubmitFlag = true; | |
| $('iframe[name="ifrmProcess"]').on('load', function () { | |
| orderSubmitFlag = true; | |
| setClaimSubmitDisabled('#refundForm', false); | |
| }); | |
| $("#refundForm").validate({ | |
| submitHandler: function (form) { | |
| if (orderSubmitFlag === false) { | |
| alert('처리중입니다. 잠시만 기다려주세요.'); | |
| return false; | |
| } | |
| // 고객 클레임 신청 건과 종류가 다르면 자동 거절 컨펌 모달 | |
| confirmCustomerClaimReceipt('refund', function () { | |
| setClaimSubmitDisabled(form, true); | |
| orderSubmitFlag = false; | |
| form.target = 'ifrmProcess'; | |
| form.submit(); | |
| }); | |
| return false; | |
| }, | |
| rules: { | |
| mode: { | |
변경 전order_cart.php
| t: 'tax_info', | |
| r: 'cash_receipt_info' | |
| }; | |
| var target = eval('useCode.' + $(this).val()); | |
| $('.js-receipt').addClass('display-none'); | |
| $('#' + target).removeClass('display-none'); | |
| if ($(this).val() == 'r') { | |
| $('input[name="cashUseFl"]').eq(0).trigger('click'); | |
변경 후order_cart.php
| t: 'tax_info', | |
| r: 'cash_receipt_info' | |
| }; | |
| var target = $(this).val() in useCode ? useCode[$(this).val()] : undefined; | |
| $('.js-receipt').addClass('display-none'); | |
| if (target !== undefined) { | |
| $('#' + target).removeClass('display-none'); | |
| } | |
| if ($(this).val() == 'r') { | |
| $('input[name="cashUseFl"]').eq(0).trigger('click'); | |
변경 전base_agreement_with_private.php
| <input type="hidden" name="mode" value="<?php echo $mode; ?>"/> | |
| <input type="hidden" name="mallSno" value="<?php echo $mallSno; ?>"/> | |
| <input type="hidden" name="newInformFl" value="n"/> | |
| <?php if ($informNm) { ?> | |
| <input type="hidden" name="informNm" value="<?=$informNm;?>"/> | |
| <?php } ?> | |
| <div class="page-header js-affix"> | |
| <h3><?= end($naviMenu->location); ?> | |
| <small></small> | |
변경 후base_agreement_with_private.php
| <input type="hidden" name="mode" value="<?php echo $mode; ?>"/> | |
| <input type="hidden" name="mallSno" value="<?php echo $mallSno; ?>"/> | |
| <input type="hidden" name="newInformFl" value="n"/> | |
| <input type="hidden" name="informNm" value="<?=$informNm;?>"/> | |
| <div class="page-header js-affix"> | |
| <h3><?= end($naviMenu->location); ?> | |
| <small></small> | |
변경 전order_basic.php
| } | |
| }); | |
| $('input[name="userHandleFl"]').click(function(){ | |
| switch (this.value) { | |
| case 'y': | |
| $('.user-handle-view').removeClass('display-none'); | |
| break; | |
| case 'n': | |
| $('.user-handle-view').addClass('display-none'); | |
| break; | |
| } | |
| }); | |
| }); | |
| //--> | |
변경 후order_basic.php
| } | |
| }); | |
| // 고객 클레임 신청 주문 표기 기본값 변경: 신규 상점에서 사용안함 → 사용함 변경 시 체크박스 자동 활성화 | |
| var prevUserHandleFl = '<?= $data['userHandleFl']; ?>'; | |
| $('input[name="userHandleFl"]').click(function(){ | |
| switch (this.value) { | |
| case 'y': | |
| $('.user-handle-view').removeClass('display-none'); | |
| if (prevUserHandleFl === 'n') { | |
| $('input[name="userHandleAdmFl"]').prop('checked', true); | |
| $('input[name="userHandleScmFl"]').prop('checked', true); | |
| } | |
| break; | |
| case 'n': | |
| $('.user-handle-view').addClass('display-none'); | |
| break; | |
| } | |
| prevUserHandleFl = this.value; | |
| }); | |
| }); | |
| //--> | |
변경 전comeback_coupon_regist.php
| </p> | |
| <div class="notice-info"> | |
| 링크는 단축 URL로 자동 변환하였습니다.<br/> | |
| 플러스샵 [단축 URL] 앱을 이용하여 단축 URL을 생성하면, 조회수 및 통계 자료를 확인하실 수 있습니다. <a href="http://plus.godo.co.kr/goods/view.gd?idx=12" class="btn-link" target="_blank">바로가기</a> | |
| </div> | |
| </div> | |
| </div> | |
변경 후comeback_coupon_regist.php
| </p> | |
| <div class="notice-info"> | |
| 링크는 단축 URL로 자동 변환하였습니다.<br/> | |
| [단축 URL] 앱을 이용하여 단축 URL을 생성하면, 조회수 및 통계 자료를 확인하실 수 있습니다. <a href="https://apps.godo.co.kr/apps/1519" class="btn-link" target="_blank">바로가기</a> | |
| </div> | |
| </div> | |
| </div> | |
변경 전BuyerInform.php
| use Component\Mall\Mall; | |
| use Component\AbstractComponent; | |
| use Component\Database\DBTableField; | |
| use Component\Policy\BaseAgreementPolicy; | |
| use Component\Validator\Validator; | |
| use Exception; | |
| use Framework\Database\DBTool; | |
| use Framework\Debug\Exception\LayerException; | |
| use Framework\File\FileHandler; | |
| use Framework\Utility\ArrayUtils; | |
| use Framework\Utility\ProducerUtils; | |
| use Framework\Utility\StringUtils; | |
| use Logger; | |
| $informCd = $agreementFl ? $code : $databaseKey[0]; | |
| $inform = $this->getInformData($informCd, $mallSno); | |
| if ($agreementFl && $inform['modeFl'] === 'y') { | |
| $policy = new BaseAgreementPolicy(); | |
| $agreementDate = $policy->getAgreementDate(); | |
| // __('0000년 00월 00일') | |
| $agreementDate = $agreementDate['year'] . '년 ' . $agreementDate['month'] . '월 ' . $agreementDate['day'] . '일'; | |
| $mallInfo['0000년 00월 00일'] = $agreementDate; | |
| } | |
| $inform['content'] = str_replace(gd_array_keys($mallInfo), gd_array_values($mallInfo), $inform['content']); | |
| return $inform; | |
| $baseAgreementPath = \UserFilePath::adminSkin('policy', 'base_agreement.txt')->getRealPath(); | |
| $fileHandler = new FileHandler(); | |
| if ($fileHandler->isExists($baseAgreementPath)) { | |
| $vo->setContent($fileHandler->read($baseAgreementPath)); | |
| } | |
| } | |
| $strSQL = "SELECT sno, displayShopFl FROM " . $tableName . " WHERE informCd='" . gd_isset($informCd, BuyerInformCode::AGREEMENT) . "'"; | |
| case 'y': | |
| $this->arrWhere[] = '((b.scmNo = '.DEFAULT_CODE_SCMNO.' AND b.scmDisplayFl = "y") OR (b.scmNo = ?))'; | |
| $this->db->bind_param_push($this->arrBind, $fieldType['scmNo'], $this->search['scmNo']); | |
| $countWhere = '((scmNo = '.DEFAULT_CODE_SCMNO.' AND scmDisplayFl = "y") OR (scmNo = '. $this->search['scmNo'] .'))'; | |
| break; | |
| } | |
| // 검색 레코드 수 | |
| $page->recode['total'] = $total; | |
| $page->recode['amount'] = $this->db->getCount(DB_BUYER_INFORM, 'sno', 'WHERE groupCd = "'.$this->search['groupCd'].'" AND '. $countWhere); | |
| $page->setPage(); | |
| { | |
| $searchIn = gd_array_keys($this->goodsInfo); | |
| $this->db->strWhere = 'groupCd IN (\'' . gd_implode('\', \'', $searchIn) . '\')'; | |
| if ($scmNo) $this->db->strWhere .= " AND (scmNo = '" . $scmNo . "' OR (scmNo = ".DEFAULT_CODE_SCMNO." AND scmDisplayFl='y'))"; | |
| $this->db->strOrder = 'scmNo ASC , informNm ASC'; | |
| $query = $this->db->query_complete(); | |
| $strSQL = 'SELECT ' . array_shift($query) . ' FROM ' . DB_BUYER_INFORM . gd_implode(' ', $query); | |
| $modeInsert = false; | |
| if (empty($getData['informCd'])) { | |
| if ($getData['mallSno'] > DEFAULT_MALL_NUMBER) { | |
| $strSQL = "SELECT if(max(informCd), max(informCd), " . $this->{$groupCd}[0] . ") as newInformCd FROM " . $tableName . " WHERE groupCd='" . $this->{$groupCd}[2] . "' AND mallSno='" . $getData['mallSno'] . "'"; | |
| } else { | |
| $strSQL = "SELECT if(max(informCd), max(informCd), " . $this->{$groupCd}[0] . ") as newInformCd FROM " . $tableName . " WHERE groupCd='" . $this->{$groupCd}[2] . "'"; | |
| } | |
| $groupCd = $this->goodsInfo[$key]; | |
| $modeInsert = false; | |
| $strSQL = "SELECT informCd FROM " . $tableName . " WHERE groupCd='" . $this->{$groupCd}[2] . "' AND mallSno='" . $getData['mallSno'] . "'"; | |
| list($informCd) = $this->db->fetch($strSQL, 'row'); | |
| if (empty($informCd) === true) { | |
| $informCd = $this->{$groupCd}[2] . '001'; | |
| 'scmNo', | |
| ] | |
| ); | |
| $strSQL = 'INSERT INTO ' . DB_BUYER_INFORM . ' (scmNo,informCd, ' . gd_implode(', ', $arrField) . ', modeFl, regDt) SELECT \'' . Session::get('manager.scmNo') . '\',\'' . $newInformCd . '\', ' . gd_implode(', ', $arrField) . ', \'n\', now() FROM ' . DB_BUYER_INFORM . ' WHERE informCd = ' . $informCd; | |
| $this->db->query($strSQL); | |
| $insertId = $this->db->insert_id(); | |
| $checked = []; | |
| $checked['modeFl'][$inform['modeFl']] = 'checked="checked"'; | |
| return [ | |
| 'content' => $inform['content'], | |
| 'informNm' => $inform['informNm'], | |
| 'checked' => $checked, | |
| ]; | |
| } | |
| /** | |
| * 사용자 정의 이용약관 정보 및 체크박스 처리 반환 함수 | |
| * | |
변경 후BuyerInform.php
| use Component\Mall\Mall; | |
| use Component\AbstractComponent; | |
| use Component\Database\DBTableField; | |
| use Component\Validator\Validator; | |
| use Exception; | |
| use Framework\Database\DBTool; | |
| use Framework\Debug\Exception\LayerException; | |
| use Framework\File\FileHandler; | |
| use Framework\Utility\ArrayUtils; | |
| use Framework\Utility\DateTimeUtils; | |
| use Framework\Utility\ProducerUtils; | |
| use Framework\Utility\StringUtils; | |
| use Logger; | |
| $informCd = $agreementFl ? $code : $databaseKey[0]; | |
| $inform = $this->getInformData($informCd, $mallSno); | |
| $inform['content'] = str_replace(gd_array_keys($mallInfo), gd_array_values($mallInfo), $inform['content']); | |
| return $inform; | |
| $baseAgreementPath = \UserFilePath::adminSkin('policy', 'base_agreement.txt')->getRealPath(); | |
| $fileHandler = new FileHandler(); | |
| if ($fileHandler->isExists($baseAgreementPath)) { | |
| $content = $fileHandler->read($baseAgreementPath); | |
| if ($content === false) { | |
| throw new Exception(__('표준약관 원본 파일을 읽을 수 없습니다.')); | |
| } | |
| $date = $postValue['agreementDate'] ?? null; | |
| if (!empty($date['year']) && !empty($date['month']) && !empty($date['day'])) { | |
| $appliedDate = DateTimeUtils::dateFormat(__('Y년 m월 d일'), "{$date['year']}-{$date['month']}-{$date['day']}"); | |
| $content = str_replace('0000년 00월 00일', $appliedDate, $content); | |
| } | |
| $vo->setContent($content); | |
| } | |
| } | |
| $strSQL = "SELECT sno, displayShopFl FROM " . $tableName . " WHERE informCd='" . gd_isset($informCd, BuyerInformCode::AGREEMENT) . "'"; | |
| case 'y': | |
| $this->arrWhere[] = '((b.scmNo = '.DEFAULT_CODE_SCMNO.' AND b.scmDisplayFl = "y") OR (b.scmNo = ?))'; | |
| $this->db->bind_param_push($this->arrBind, $fieldType['scmNo'], $this->search['scmNo']); | |
| $countWhere = '((scmNo = '.DEFAULT_CODE_SCMNO.' AND scmDisplayFl = "y") OR (scmNo = '. intval($this->search['scmNo']) .'))'; | |
| break; | |
| } | |
| // 검색 레코드 수 | |
| $page->recode['total'] = $total; | |
| $page->recode['amount'] = $this->db->getCount(DB_BUYER_INFORM, 'sno', 'WHERE groupCd = "'.$this->db->escape($this->search['groupCd']).'" AND '. $countWhere); | |
| $page->setPage(); | |
| { | |
| $searchIn = gd_array_keys($this->goodsInfo); | |
| $this->db->strWhere = 'groupCd IN (\'' . gd_implode('\', \'', $searchIn) . '\')'; | |
| if ($scmNo) $this->db->strWhere .= " AND (scmNo = '" . intval($scmNo) . "' OR (scmNo = ".DEFAULT_CODE_SCMNO." AND scmDisplayFl='y'))"; | |
| $this->db->strOrder = 'scmNo ASC , informNm ASC'; | |
| $query = $this->db->query_complete(); | |
| $strSQL = 'SELECT ' . array_shift($query) . ' FROM ' . DB_BUYER_INFORM . gd_implode(' ', $query); | |
| $modeInsert = false; | |
| if (empty($getData['informCd'])) { | |
| if ($getData['mallSno'] > DEFAULT_MALL_NUMBER) { | |
| $strSQL = "SELECT if(max(informCd), max(informCd), " . $this->{$groupCd}[0] . ") as newInformCd FROM " . $tableName . " WHERE groupCd='" . $this->{$groupCd}[2] . "' AND mallSno='" . intval($getData['mallSno']) . "'"; | |
| } else { | |
| $strSQL = "SELECT if(max(informCd), max(informCd), " . $this->{$groupCd}[0] . ") as newInformCd FROM " . $tableName . " WHERE groupCd='" . $this->{$groupCd}[2] . "'"; | |
| } | |
| $groupCd = $this->goodsInfo[$key]; | |
| $modeInsert = false; | |
| $strSQL = "SELECT informCd FROM " . $tableName . " WHERE groupCd='" . $this->{$groupCd}[2] . "' AND mallSno='" . intval($getData['mallSno']) . "'"; | |
| list($informCd) = $this->db->fetch($strSQL, 'row'); | |
| if (empty($informCd) === true) { | |
| $informCd = $this->{$groupCd}[2] . '001'; | |
| 'scmNo', | |
| ] | |
| ); | |
| $safeInformCd = $this->db->escape($informCd); | |
| $strSQL = 'INSERT INTO ' . DB_BUYER_INFORM . ' (scmNo,informCd, ' . gd_implode(', ', $arrField) . ', modeFl, regDt) SELECT \'' . Session::get('manager.scmNo') . '\',\'' . $newInformCd . '\', ' . gd_implode(', ', $arrField) . ', \'n\', now() FROM ' . DB_BUYER_INFORM . ' WHERE informCd = \'' . $safeInformCd . '\''; | |
| $this->db->query($strSQL); | |
| $insertId = $this->db->insert_id(); | |
| $checked = []; | |
| $checked['modeFl'][$inform['modeFl']] = 'checked="checked"'; | |
| // 직접입력 약관(modeFl='n')이 있으면 그 본문(자리표시자는 등록일로 치환), 없으면(최초) 표준약관 원본 제공. | |
| $content = $this->getLatestNonStandardContent($mallSno); | |
| if ($content === '') { | |
| $baseAgreementPath = \UserFilePath::adminSkin('policy', 'base_agreement.txt')->getRealPath(); | |
| $fileHandler = new FileHandler(); | |
| if ($fileHandler->isExists($baseAgreementPath)) { | |
| $base = $fileHandler->read($baseAgreementPath); | |
| if ($base !== false) { | |
| $content = $base; | |
| } | |
| } | |
| } | |
| return [ | |
| 'content' => $content, | |
| 'informNm' => $inform['informNm'], | |
| 'checked' => $checked, | |
| ]; | |
| } | |
| /** | |
| * 직접입력 약관(modeFl='n') 중 가장 최신 본문 반환. 없으면 빈 문자열. | |
| * | |
| * @param int $mallSno | |
| * @return string | |
| */ | |
| private function getLatestNonStandardContent($mallSno = DEFAULT_MALL_NUMBER) | |
| { | |
| $tableName = $this->mall->getTableName(DB_BUYER_INFORM, $mallSno); | |
| $arrBind = null; | |
| $strSQL = "SELECT content FROM " . $tableName | |
| . " WHERE informCd LIKE concat(?, '%') AND modeFl = 'n'"; | |
| $this->db->bind_param_push($arrBind, 's', BuyerInformCode::AGREEMENT); | |
| if ($mallSno > DEFAULT_MALL_NUMBER) { | |
| $strSQL .= " AND mallSno = ?"; | |
| $this->db->bind_param_push($arrBind, 'i', $mallSno); | |
| } | |
| $strSQL .= " ORDER BY sno DESC LIMIT 1"; | |
| $row = $this->db->secondary()->query_fetch($strSQL, $arrBind, false); | |
| return gd_htmlspecialchars_stripslashes(gd_isset($row['content'], '')); | |
| } | |
| /** | |
| * 사용자 정의 이용약관 정보 및 체크박스 처리 반환 함수 | |
| * | |
변경 전Board.php
| public $storageType = ''; //storage 직접 설정 | |
| protected $httpStorage; | |
| /** | |
| * Board constructor. | |
| * | |
| $getData['data'] = $migrationArticleData; | |
| } | |
| // XSS 방지: 글머리(category) 이스케이프 (공통 처리) | |
| if ($getData['data']) { | |
| array_walk($getData['data'], function (&$item) { | |
| if (isset($item['category'])) { | |
| $item['category'] = gd_htmlspecialchars($item['category']); | |
| } | |
| }); | |
| } | |
| //웹서비스형태로 데이터 가공 | |
| $this->applyConfigList($getData['data']); | |
| if (gd_array_empty($getData['data']) === true) return $getData; | |
| //페이징에 필요한 데이터 가공 | |
| $getData['uploadImageList'] = $uploadImageList; | |
| $getData = gd_htmlspecialchars_stripslashes($getData); | |
| // XSS 방지: 글머리(category) 이스케이프 (공통 처리) | |
| if (isset($getData['category'])) { | |
| $getData['category'] = gd_htmlspecialchars($getData['category']); | |
| } | |
| $this->applyConfigView($getData); //웹서비스형태로 데이터 가공 | |
| for ($i = 1; $i < gd_count($getData['uploadImgTag']) + 1; $i++) { | |
| $getData['workedContents'] = str_replace('{=uploadImgTag[' . $i . ']}', $getData['uploadImgTag'][$i], $getData['workedContents']); | |
| $getData['workedContents'] = str_replace('{=uploadImgUrl[' . $i . ']}', $getData['uploadImgUrl'][$i], $getData['workedContents']); | |
| return DBTableField::tableCustomAttachments(); | |
| } | |
| } | |
| } | |
변경 후Board.php
| public $storageType = ''; //storage 직접 설정 | |
| protected $httpStorage; | |
| /** @var array XSS 이스케이프 대상 필드 */ | |
| protected array $escapeFields = ['category', 'subject', 'writerId', 'writerNm']; | |
| /** | |
| * Board constructor. | |
| * | |
| $getData['data'] = $migrationArticleData; | |
| } | |
| //웹서비스형태로 데이터 가공 | |
| $this->applyConfigList($getData['data']); | |
| // 특정 필드 이스케이프 | |
| if ($getData['data']) { | |
| $getData['data'] = array_map([$this, 'escapeOutputFields'], $getData['data']); | |
| } | |
| if (gd_array_empty($getData['data']) === true) return $getData; | |
| //페이징에 필요한 데이터 가공 | |
| $getData['uploadImageList'] = $uploadImageList; | |
| $getData = gd_htmlspecialchars_stripslashes($getData); | |
| $this->applyConfigView($getData); //웹서비스형태로 데이터 가공 | |
| $getData = $this->escapeOutputFields($getData); // 특정 필드 이스케이프 | |
| for ($i = 1; $i < gd_count($getData['uploadImgTag']) + 1; $i++) { | |
| $getData['workedContents'] = str_replace('{=uploadImgTag[' . $i . ']}', $getData['uploadImgTag'][$i], $getData['workedContents']); | |
| $getData['workedContents'] = str_replace('{=uploadImgUrl[' . $i . ']}', $getData['uploadImgUrl'][$i], $getData['workedContents']); | |
| return DBTableField::tableCustomAttachments(); | |
| } | |
| } | |
| /** | |
| * XSS 방지: 게시판 출력 필드 이스케이프 | |
| * | |
| * @param array $data | |
| * @return array | |
| */ | |
| protected function escapeOutputFields(array $data): array | |
| { | |
| foreach ($this->escapeFields as $field) { | |
| if (isset($data[$field])) { | |
| $data[$field] = gd_htmlspecialchars($data[$field]); | |
| } | |
| } | |
| return $data; | |
| } | |
| } | |
변경 전BoardFront.php
| $saveFileName = ImageUploadService::getObsSaveFileNm($saveFileNames[$imageFileNum]); | |
| $thumbSaveFileName = str_replace($saveFileName, "thumb/$saveFileName", $saveFileNames[$imageFileNum]); | |
| if (ImageUploadService::isExistImageUrl($thumbSaveFileName)) { | |
| $data['attachImageSrc'] = $this->cfg['bdKind'] == Board::KIND_EVENT ? $saveFileNames[$imageFileNum] : $thumbSaveFileName; | |
| } else if ($data['bdUploadPath']) { | |
| $data['attachImageSrc'] = $saveFileNames[$imageFileNum]; | |
변경 후BoardFront.php
| $saveFileName = ImageUploadService::getObsSaveFileNm($saveFileNames[$imageFileNum]); | |
| $thumbSaveFileName = str_replace($saveFileName, "thumb/$saveFileName", $saveFileNames[$imageFileNum]); | |
| if (ImageUploadService::isExistImageUrlOnObs($thumbSaveFileName)) { | |
| $data['attachImageSrc'] = $this->cfg['bdKind'] == Board::KIND_EVENT ? $saveFileNames[$imageFileNum] : $thumbSaveFileName; | |
| } else if ($data['bdUploadPath']) { | |
| $data['attachImageSrc'] = $saveFileNames[$imageFileNum]; | |
변경 전DBTableField.php
| ['val' => 'migrationDt', 'typ' => 's', 'def' => null], //외부 request 데이터 | |
| ['val' => 'modDt', 'typ' => 's', 'def' => null], // 수정일 | |
| ['val' => 'regDt', 'typ' => 's', 'def' => null], // 등록일 | |
| ]; | |
| // @formatter:on | |
변경 후DBTableField.php
| ['val' => 'migrationDt', 'typ' => 's', 'def' => null], //외부 request 데이터 | |
| ['val' => 'modDt', 'typ' => 's', 'def' => null], // 수정일 | |
| ['val' => 'regDt', 'typ' => 's', 'def' => null], // 등록일 | |
| ['val' => 'external_key', 'typ' => 's', 'def' => null], // 외부 사이트 리뷰등록시 중복 방지 구분값 (NULL: 자체 등록 리뷰) | |
| ['val' => 'external_site_name', 'typ' => 's', 'def' => null], // 외부 사이트 리뷰등록시 사용되는 리뷰 사이트 이름 (NULL: 자체 등록 리뷰) | |
| ['val' => 'external_site_url', 'typ' => 's', 'def' => null], // 외부 사이트 리뷰등록시 사용되는 상품상세 URL (NULL: 자체 등록 리뷰) | |
| ['val' => 'external_naver_review_flag', 'typ' => 's', 'def' => 'N'], // 외부 사이트 리뷰등록시 네이버 인지 판단여부 (Y: 네이버 리뷰, N: 그 외) | |
| ['val' => 'app_no', 'typ' => 'i', 'def' => 0], // 리뷰를 저장한 앱 NO | |
| ]; | |
| // @formatter:on | |
변경 전Delivery.php
| $traceUrl = str_replace('__INVOICENO__', str_replace('-', '', $invoiceNo), $getData['traceUrl']); | |
| // curl 체크시 연결은 정상적으로되나 무한 로딩걸려서 예외처리 (DHL, UPS) | |
| if (!gd_in_array($invoiceCompanySno, array(20, 26, 30))) { | |
| if (!$this->isDomainAvailible($traceUrl)) { | |
| throw new AlertCloseException(sprintf(__('[%s] 배송추적URL이 존재하지 않습니다.%s관리자에게 문의해주세요.'), $getData['companyName'], chr(10))); | |
| } | |
| } | |
| return $traceUrl; | |
변경 후Delivery.php
| $traceUrl = str_replace('__INVOICENO__', str_replace('-', '', $invoiceNo), $getData['traceUrl']); | |
| // 배송추적 URL 형식만 검증 (isDomainAvailible 사전 체크 폐기) | |
| if (!filter_var($traceUrl, FILTER_VALIDATE_URL)) { | |
| throw new AlertCloseException(sprintf(__('[%s] 배송추적URL이 존재하지 않습니다.%s관리자에게 문의해주세요.'), $getData['companyName'], chr(10))); | |
| } | |
| return $traceUrl; | |
변경 전ExcelRequest.php
| $excelAddField[] = "</tr></table></td>"; | |
| $tmpData[] = gd_implode('', $excelAddField); | |
| break; | |
| case 'goodsType': | |
| if ($val['goodsType'] == 'addGoods') { | |
| $tmpData[] = "<td>추가</td>"; | |
| $excelAddField[] = "</tr></table></td>"; | |
| $tmpData[] = gd_implode('', $excelAddField); | |
| break; | |
| case 'goodsType': | |
| if ($val['goodsType'] == 'addGoods') { | |
| $tmpData[] = "<td>추가</td>"; | |
변경 후ExcelRequest.php
| $excelAddField[] = "</tr></table></td>"; | |
| $tmpData[] = gd_implode('', $excelAddField); | |
| break; | |
| case 'orderDeliverySno': | |
| $tmpData[] = "<td>" . $val['deliverySno'] . "</td>"; | |
| break; | |
| case 'goodsType': | |
| if ($val['goodsType'] == 'addGoods') { | |
| $tmpData[] = "<td>추가</td>"; | |
| $excelAddField[] = "</tr></table></td>"; | |
| $tmpData[] = gd_implode('', $excelAddField); | |
| break; | |
| case 'orderDeliverySno': | |
| $tmpData[] = "<td>" . $val['deliverySno'] . "</td>"; | |
| break; | |
| case 'goodsType': | |
| if ($val['goodsType'] == 'addGoods') { | |
| $tmpData[] = "<td>추가</td>"; | |
변경 전GoodsAdmin.php
| } | |
| // 상품아이콘 > obs 카프카 컨슈머 처리 end | |
| if($arrData['soldOutFl'] == 'y') { | |
| $arrData['applyFl'] = 'n'; | |
| } | |
| } | |
| unset($arrData); | |
| // 기본 상품의 이미지 정보 | |
| $getImage = $this->getGoodsOptionIcon($this->goodsNo); | |
| } | |
| // 기존 이미지 정보와 새로운 이미지 정보를 비교 | |
| $getImageCompare = $this->db->get_compare_array_data($getImage, gd_isset($iconInfo)); | |
| // 공통 키값 | |
| $arrDataKey = array('goodsNo' => $this->goodsNo); | |
| // 이미지 디비 처리 | |
| $compareField = ['sno','goodsNo','optionNo','optionValue','colorCode','iconImage','goodsImage','optionImageStorage','obsConvertFl']; | |
| $goodsImageLog = $this->db->set_compare_process(DB_GOODS_OPTION_ICON, gd_isset($iconInfo), $arrDataKey, $getImageCompare, $compareField); | |
| // 상품아이콘 > obs 카프카 컨슈머 처리 start | |
| if (gd_in_array($strImageStorage, self::DEFAULT_STORAGE) && !empty($goodsImageLog)) { | |
| unset($goodsImageLog['delete']); | |
| $goodsImageMigrationLog['imageIcon']['imagePath'] = $this->imagePath; | |
| $goodsImageMigrationLog['imageIcon']['prefixGoodsThumbnail'] = PREFIX_GOODS_THUMBNAIL; | |
| if (!empty($goodsImageLog['insert'])) { | |
| $goodsImageMigrationLog['imageIcon']['insert'] = $goodsImageLog['insert']; | |
| } | |
| } | |
| $tmpInfo['imageName'][] = $fVal; | |
| $tmpInfo['imageRealSize'][] = ''; | |
| $tmpInfo['goodsImageStorage'][] = ''; | |
| $tmpInfo['obsConvertFl'][] = 'y'; | |
| $i++; | |
| } | |
| } | |
| $tmpInfo['imageName'][] = $saveImageName; | |
| $tmpInfo['imageRealSize'][] = implode(',', array()); | |
| $tmpInfo['goodsImageStorage'][] = 'local'; | |
| $tmpInfo['obsConvertFl'][] = 'y'; | |
| // GD 이용한 화일 리사이징 | |
| $storage->upload($tmpImageFile, $targetImageFile, ['width' => $size[0], 'height' => $size[1]]); | |
| $tmpInfo['imageName'][] = $saveImageName; | |
| $tmpInfo['imageRealSize'][] = gd_implode(',', $tmpSize); | |
| $tmpInfo['goodsImageStorage'][] = 'local'; | |
| $tmpInfo['obsConvertFl'][] = 'y'; | |
| // 이미지 저장 | |
| $storage->upload($tmpImageFile, $targetImageFile); | |
| if($imageInfo['imageCode'][$val.$i] && empty($imageInfo['imageUrlFl'][$val.$i]) === true && empty($imageInfo['imageDelFl'][$val.$i]) === true) { | |
| $imageIndex = gd_array_search($imageInfo['imageCode'][$val.$i], $imageInfo['sno']); | |
| $obsConvertFl = $this->isValidImagePathUrl($imageInfo['imageName'][$imageIndex]) ? 'y' : $imageInfo['obsConvertFl'][$imageIndex]; | |
| $tmpInfo['sno'][] = $imageInfo['sno'][$imageIndex]; | |
| $tmpInfo['imageNo'][] = $imageNo; | |
| $tmpInfo['imageName'][] = $imageInfo['imageName'][$imageIndex]; | |
| $tmpInfo['imageRealSize'][] = $imageInfo['imageRealSize'][$imageIndex]; | |
| $tmpInfo['goodsImageStorage'][] = $imageInfo['goodsImageStorage'][$imageIndex]; | |
| $tmpInfo['obsConvertFl'][] = $obsConvertFl; | |
| $imageNo++; | |
| } | |
| } | |
| // 엑셀 등록일 때는 따로 delete 프로듀싱 처리 작업 필요 | |
| if ($extraArrData['excelFl'] == self::EXCEL_FL && (!empty($fVal) || $imageInfo['imageDelFl'][$val.$i] == 'y')) { | |
| $imageIndex = gd_array_search($imageInfo['imageCode'][$val.$i], $imageInfo['sno']); | |
| $obsConvertFl = $this->isValidImagePathUrl($imageInfo['imageName'][$imageIndex]) ? 'y' : $imageInfo['obsConvertFl'][$imageIndex]; | |
| $tmpDeleteImageInfo['sno'][] = $imageInfo['sno'][$imageIndex]; | |
| $tmpDeleteImageInfo['imageNo'][] = $excelImageNo; | |
| $tmpDeleteImageInfo['imageName'][] = $imageInfo['imageName'][$imageIndex]; | |
| $tmpDeleteImageInfo['imageRealSize'][] = $imageInfo['imageRealSize'][$imageIndex]; | |
| $tmpDeleteImageInfo['goodsImageStorage'][] = $imageInfo['goodsImageStorage'][$imageIndex]; | |
| $tmpDeleteImageInfo['obsConvertFl'][] = $obsConvertFl; | |
| $excelImageNo++; | |
| } | |
| foreach ($urlImageTmp as $fKey => $fVal) { | |
| if (strtolower(substr($fVal,0,4)) =='http' && empty($imageInfo['imageUrlDelFl'][$val.$i]) === true) { | |
| $size = explode(INT_DIVISION, $image['size'][$val]); | |
| $obsConvertFl = $this->isValidImagePathUrl($fVal) ? 'y' : 'n'; | |
| $tmpInfo['sno'][] = gd_isset($imageInfo['imageCode'][$val.$i]); | |
| $tmpInfo['imageNo'][] = $imageNo; | |
| $tmpInfo['imageName'][] = $fVal; | |
| $tmpInfo['imageRealSize'][] = ''; | |
| $tmpInfo['goodsImageStorage'][] = ''; | |
| $tmpInfo['obsConvertFl'][] = $obsConvertFl; | |
| $imageNo++; | |
| } | |
| $i++; | |
| unset($getImage[$getImageKey]['thumbImageUrl']); | |
| } | |
| $compareField = ['sno','goodsNo','imageSize','imageHeightSize','imageNo','imageKind','imageName','imageRealSize','goodsImageStorage','obsConvertFl']; | |
| if (!empty($extraArrData['originalGoodsNo']) && gd_in_array($strImageStorage, self::DEFAULT_STORAGE)) { | |
| array_push($compareField, 'imageUrl', 'thumbImageUrl'); | |
| unset($tempImageUrl); | |
| } | |
| $getImageCompare = $this->db->get_compare_array_data($getImage, gd_isset($tmpInfo)); | |
| // 공통 키값 | |
| $arrDataKey = array('goodsNo' => $this->goodsNo); | |
| // 이미지 디비 처리 | |
| $goodsImageLog = $this->db->set_compare_process(DB_GOODS_IMAGE, gd_isset($tmpInfo), $arrDataKey, $getImageCompare, $compareField); | |
| if($strImageStorage == 'local' && empty($tmpInfo['imageName']) === false && strpos($this->imagePath, $this->goodsNo) !== false ) { | |
| $goodsImageDir = UserFilePath::data('goods', $this->imagePath); | |
| if ($openDir = opendir($goodsImageDir)) { | |
| unset($tmpGoodsImageLog['delete']); | |
| if (!empty($tmpGoodsImageLog)) { | |
| $goodsImageMigrationLog['image'] = $tmpGoodsImageLog; | |
| $goodsImageMigrationLog['image']['imagePath'] = $this->imagePath; | |
| $goodsImageMigrationLog['image']['prefixGoodsThumbnail'] = PREFIX_GOODS_THUMBNAIL; | |
| $goodsImageMigrationLog['image']['delete'] = $goodsImageMigrationDeleteLog; | |
| } | |
| // openAPI로 상품 등록 시 바로 프로듀싱할 수 있도록 | |
| if ($extraArrData['callBy'] == OPEN_API) { | |
| $goodsImageMigrationLog['convertedType'] = 'manage'; // 상품이미지 등록,수정,삭제 | |
| \Logger::channel('kafka')->info('process sendMQ - return :', [$result, 'openAPI', $goodsImageMigrationLog]); | |
| if ($result['result'] == 'success') { | |
| // goodsNo obsConvertFl = N 업데이트 필요 | |
| $goodsObsConvertStatus = \App::load('\\Component\\Goods\\GoodsObsConvertStatus'); | |
| $goodsObsConvertStatus->updateObsConvertFl($this->goodsNo, $goodsImageMigrationLog); | |
| } | |
| } | |
| } | |
| // 상품이미지 > obs 카프카 컨슈머 처리 end | |
| // 상품이미지 > obs 카프카 컨슈머 처리 start | |
| if(gd_in_array($data['imageStorage'], self::DEFAULT_STORAGE)) { | |
| // 상품이미지가 url 이미지일 경우, obs 전환여부를 'y'로 고정 | |
| $goodsImageStorage = $this->isValidImagePathUrl($tempImageUrl) ? 'local' : 'obs'; | |
| $obsConvertFl = $goodsImageStorage === 'local' ? 'y' : 'n'; | |
| } | |
| // 상품이미지 > obs 카프카 컨슈머 처리 end | |
| // --- 이미지 복사 처리 | |
| if($data['imageStorage'] !='url') { | |
| if ($data['imageStorage'] == 'obs') { | |
변경 후GoodsAdmin.php
| } | |
| // 상품아이콘 > obs 카프카 컨슈머 처리 end | |
| // URL 이미지는 OBS 변환 대상 아님 → 'y' 고정 (legacy 'n' 잠금 해제 포함) | |
| if (gd_in_array($arrData['imageStorage'], self::DEFAULT_STORAGE)) { | |
| if ($arrData['applyGoodsCopy']) { | |
| $goodsObsConvertStatus->setObsConvertFlagForUrlImages($arrData['applyNo']); | |
| } | |
| $goodsObsConvertStatus->setObsConvertFlagForUrlImages($arrData['goodsNo']); | |
| } | |
| if($arrData['soldOutFl'] == 'y') { | |
| $arrData['applyFl'] = 'n'; | |
| } | |
| } | |
| unset($arrData); | |
| // 기본 상품의 이미지 정보 | |
| $getImage = $this->getGoodsOptionIcon($this->goodsNo); | |
| } | |
| // 이미지 디비 처리 | |
| $compareField = ['sno','goodsNo','optionNo','optionValue','colorCode','iconImage','goodsImage','optionImageStorage']; | |
| // 기존 이미지 정보와 새로운 이미지 정보를 비교 | |
| $getImageCompare = $this->db->get_compare_array_data($getImage, gd_isset($iconInfo), true, $compareField); | |
| // 공통 키값 | |
| $arrDataKey = array('goodsNo' => $this->goodsNo); | |
| $goodsImageLog = $this->db->set_compare_process(DB_GOODS_OPTION_ICON, gd_isset($iconInfo), $arrDataKey, $getImageCompare, $compareField); | |
| // 상품아이콘 > obs 카프카 컨슈머 처리 start | |
| if (gd_in_array($strImageStorage, self::DEFAULT_STORAGE) && !empty($goodsImageLog)) { | |
| unset($goodsImageLog['delete']); | |
| // URL 이미지는 Kafka 전송 대상 아님 → migrationLog 에서 제외 | |
| $filterUrlOptionRows = function ($rows) { | |
| return array_values(array_filter($rows, function ($row) { | |
| return filter_var($row['goodsImage'] ?? '', FILTER_VALIDATE_URL) === false; | |
| })); | |
| }; | |
| if (!empty($goodsImageLog['insert'])) { | |
| $goodsImageLog['insert'] = $filterUrlOptionRows($goodsImageLog['insert']); | |
| } | |
| if (!empty($goodsImageLog['insert'])) { | |
| $goodsImageMigrationLog['imageIcon']['imagePath'] = $this->imagePath; | |
| $goodsImageMigrationLog['imageIcon']['prefixGoodsThumbnail'] = PREFIX_GOODS_THUMBNAIL; | |
| $goodsImageMigrationLog['imageIcon']['insert'] = $goodsImageLog['insert']; | |
| } | |
| } | |
| $tmpInfo['imageName'][] = $fVal; | |
| $tmpInfo['imageRealSize'][] = ''; | |
| $tmpInfo['goodsImageStorage'][] = ''; | |
| $i++; | |
| } | |
| } | |
| $tmpInfo['imageName'][] = $saveImageName; | |
| $tmpInfo['imageRealSize'][] = implode(',', array()); | |
| $tmpInfo['goodsImageStorage'][] = 'local'; | |
| // GD 이용한 화일 리사이징 | |
| $storage->upload($tmpImageFile, $targetImageFile, ['width' => $size[0], 'height' => $size[1]]); | |
| $tmpInfo['imageName'][] = $saveImageName; | |
| $tmpInfo['imageRealSize'][] = gd_implode(',', $tmpSize); | |
| $tmpInfo['goodsImageStorage'][] = 'local'; | |
| // 이미지 저장 | |
| $storage->upload($tmpImageFile, $targetImageFile); | |
| if($imageInfo['imageCode'][$val.$i] && empty($imageInfo['imageUrlFl'][$val.$i]) === true && empty($imageInfo['imageDelFl'][$val.$i]) === true) { | |
| $imageIndex = gd_array_search($imageInfo['imageCode'][$val.$i], $imageInfo['sno']); | |
| $tmpInfo['sno'][] = $imageInfo['sno'][$imageIndex]; | |
| $tmpInfo['imageNo'][] = $imageNo; | |
| $tmpInfo['imageName'][] = $imageInfo['imageName'][$imageIndex]; | |
| $tmpInfo['imageRealSize'][] = $imageInfo['imageRealSize'][$imageIndex]; | |
| $tmpInfo['goodsImageStorage'][] = $imageInfo['goodsImageStorage'][$imageIndex]; | |
| $imageNo++; | |
| } | |
| } | |
| // 엑셀 등록일 때는 따로 delete 프로듀싱 처리 작업 필요 | |
| if ($extraArrData['excelFl'] == self::EXCEL_FL && (!empty($fVal) || $imageInfo['imageDelFl'][$val.$i] == 'y')) { | |
| $imageIndex = gd_array_search($imageInfo['imageCode'][$val.$i], $imageInfo['sno']); | |
| $tmpDeleteImageInfo['sno'][] = $imageInfo['sno'][$imageIndex]; | |
| $tmpDeleteImageInfo['imageNo'][] = $excelImageNo; | |
| $tmpDeleteImageInfo['imageName'][] = $imageInfo['imageName'][$imageIndex]; | |
| $tmpDeleteImageInfo['imageRealSize'][] = $imageInfo['imageRealSize'][$imageIndex]; | |
| $tmpDeleteImageInfo['goodsImageStorage'][] = $imageInfo['goodsImageStorage'][$imageIndex]; | |
| $excelImageNo++; | |
| } | |
| foreach ($urlImageTmp as $fKey => $fVal) { | |
| if (strtolower(substr($fVal,0,4)) =='http' && empty($imageInfo['imageUrlDelFl'][$val.$i]) === true) { | |
| $size = explode(INT_DIVISION, $image['size'][$val]); | |
| $tmpInfo['sno'][] = gd_isset($imageInfo['imageCode'][$val.$i]); | |
| $tmpInfo['imageNo'][] = $imageNo; | |
| $tmpInfo['imageName'][] = $fVal; | |
| $tmpInfo['imageRealSize'][] = ''; | |
| $tmpInfo['goodsImageStorage'][] = ''; | |
| $imageNo++; | |
| } | |
| $i++; | |
| unset($getImage[$getImageKey]['thumbImageUrl']); | |
| } | |
| $compareField = ['sno','goodsNo','imageSize','imageHeightSize','imageNo','imageKind','imageName','imageRealSize','goodsImageStorage']; | |
| if (!empty($extraArrData['originalGoodsNo']) && gd_in_array($strImageStorage, self::DEFAULT_STORAGE)) { | |
| array_push($compareField, 'imageUrl', 'thumbImageUrl'); | |
| unset($tempImageUrl); | |
| } | |
| $getImageCompare = $this->db->get_compare_array_data($getImage, gd_isset($tmpInfo), true, $compareField); | |
| // 공통 키값 | |
| $arrDataKey = array('goodsNo' => $this->goodsNo); | |
| // 이미지 디비 처리 | |
| $goodsImageLog = $this->db->set_compare_process(DB_GOODS_IMAGE, gd_isset($tmpInfo), $arrDataKey, $getImageCompare, $compareField); | |
| if($strImageStorage == 'local' && empty($tmpInfo['imageName']) === false && strpos($this->imagePath, $this->goodsNo) !== false ) { | |
| $goodsImageDir = UserFilePath::data('goods', $this->imagePath); | |
| if ($openDir = opendir($goodsImageDir)) { | |
| unset($tmpGoodsImageLog['delete']); | |
| // URL 이미지는 Kafka 전송 대상 아님 → migrationLog 에서 제외 | |
| $filterUrlImageRows = function ($rows) { | |
| return array_values(array_filter($rows, function ($row) { | |
| return filter_var($row['imageName'] ?? '', FILTER_VALIDATE_URL) === false; | |
| })); | |
| }; | |
| if (!empty($tmpGoodsImageLog['insert'])) { | |
| $tmpGoodsImageLog['insert'] = $filterUrlImageRows($tmpGoodsImageLog['insert']); | |
| if (empty($tmpGoodsImageLog['insert'])) { | |
| unset($tmpGoodsImageLog['insert']); | |
| } | |
| } | |
| if (!empty($tmpGoodsImageLog['update'])) { | |
| $tmpGoodsImageLog['update'] = $filterUrlImageRows($tmpGoodsImageLog['update']); | |
| if (empty($tmpGoodsImageLog['update'])) { | |
| unset($tmpGoodsImageLog['update']); | |
| } | |
| } | |
| // URL 필터링으로 insert/update 가 모두 비어도 delete 만 있는 경우가 발생할 수 있으므로 | |
| // delete log 가 있으면 imagePath / prefixGoodsThumbnail 도 함께 세팅한다. | |
| if (!empty($tmpGoodsImageLog) || !empty($goodsImageMigrationDeleteLog)) { | |
| $goodsImageMigrationLog['image'] = $tmpGoodsImageLog; | |
| $goodsImageMigrationLog['image']['imagePath'] = $this->imagePath; | |
| $goodsImageMigrationLog['image']['prefixGoodsThumbnail'] = PREFIX_GOODS_THUMBNAIL; | |
| $goodsImageMigrationLog['image']['delete'] = $goodsImageMigrationDeleteLog; | |
| } | |
| $goodsObsConvertStatus = \App::load('\\Component\\Goods\\GoodsObsConvertStatus'); | |
| // openAPI로 상품 등록 시 바로 프로듀싱할 수 있도록 | |
| if ($extraArrData['callBy'] == OPEN_API) { | |
| $goodsImageMigrationLog['convertedType'] = 'manage'; // 상품이미지 등록,수정,삭제 | |
| \Logger::channel('kafka')->info('process sendMQ - return :', [$result, 'openAPI', $goodsImageMigrationLog]); | |
| if ($result['result'] == 'success') { | |
| // goodsNo obsConvertFl = N 업데이트 필요 | |
| $goodsObsConvertStatus->updateObsConvertFl($this->goodsNo, $goodsImageMigrationLog); | |
| } | |
| } | |
| // URL 이미지는 OBS 변환 대상 아님 → 'y' 고정 (legacy 'n' 잠금 해제 포함) | |
| $goodsObsConvertStatus->setObsConvertFlagForUrlImages($this->goodsNo); | |
| } | |
| // 상품이미지 > obs 카프카 컨슈머 처리 end | |
| // 상품이미지 > obs 카프카 컨슈머 처리 start | |
| if(gd_in_array($data['imageStorage'], self::DEFAULT_STORAGE)) { | |
| // 상품이미지가 url 이미지일 경우, obs 전환여부를 'y'로 고정 (URL은 OBS 변환 대상 아님) | |
| $goodsImageStorage = $this->isValidImagePathUrl($tempImageUrl) ? 'local' : 'obs'; | |
| $obsConvertFl = $goodsImageStorage === 'local' ? 'y' : 'n'; | |
| } | |
| // 상품이미지 > obs 카프카 컨슈머 처리 end | |
| // URL 이미지는 OBS 변환 대상 아님 → 'y' 고정 (legacy 'n' 잠금 해제 포함) | |
| if (gd_in_array($data['imageStorage'], self::DEFAULT_STORAGE)) { | |
| $goodsObsConvertStatusForUrl = \App::load('\\Component\\Goods\\GoodsObsConvertStatus'); | |
| $goodsObsConvertStatusForUrl->setObsConvertFlagForUrlImages($goodsNo); | |
| $goodsObsConvertStatusForUrl->setObsConvertFlagForUrlImages($newGoodsNo); | |
| } | |
| // --- 이미지 복사 처리 | |
| if($data['imageStorage'] !='url') { | |
| if ($data['imageStorage'] == 'obs') { | |
변경 전GoodsObsConvertStatus.php
| $this->db->bind_query($strSQL, $arrBind); | |
| } | |
| } | |
| } | |
변경 후GoodsObsConvertStatus.php
| $this->db->bind_query($strSQL, $arrBind); | |
| } | |
| } | |
| /** | |
| * URL 이미지는 OBS 변환 대상이 아니므로 obsConvertFl 을 'y' 로 강제 처리하고 | |
| * obs → url 직접입력 전환 시 잔존하는 OBS 경로/URL 컬럼을 함께 비운다. | |
| * (legacy 'n' 잔존값 정리 + 신규 작업 후 URL 행 잠금 방지 + stale OBS 컬럼 정리) | |
| */ | |
| public function setObsConvertFlagForUrlImages($goodsNo) | |
| { | |
| // 상품이미지 : URL 직접입력 행은 OBS 폴더/URL 컬럼이 있을 이유가 없으므로 함께 비움 | |
| $arrBind = []; | |
| $strSQL = 'UPDATE ' . DB_GOODS_IMAGE | |
| . ' SET obsConvertFl = ?, imageFolder = "", thumbImageFolder = "", imageUrl = "", thumbImageUrl = ""' | |
| . ' WHERE goodsNo = ? AND imageName LIKE "http%" '; | |
| $this->db->bind_param_push($arrBind, 's', 'y'); | |
| $this->db->bind_param_push($arrBind, 'i', $goodsNo); | |
| $this->db->bind_query($strSQL, $arrBind); | |
| // 상품옵션이미지 : URL 직접입력 행은 goodsImageUrl / goodsThumbImageUrl 도 함께 비움 | |
| $arrBind = []; | |
| $strSQL = 'UPDATE ' . DB_GOODS_OPTION_ICON | |
| . ' SET obsConvertFl = ?, goodsImageUrl = "", goodsThumbImageUrl = ""' | |
| . ' WHERE goodsNo = ? AND goodsImage LIKE "http%" '; | |
| $this->db->bind_param_push($arrBind, 's', 'y'); | |
| $this->db->bind_param_push($arrBind, 'i', $goodsNo); | |
| $this->db->bind_query($strSQL, $arrBind); | |
| } | |
| } | |
변경 전GroupService.php
| ArrayUtils::commaRemover($group, $commaRemoverFilter); | |
| $group = ArrayUtils::jsonEncode($group, $jsonEncodeFilter); | |
| $group['groupCoupon'] = gd_implode(INT_DIVISION, $group['couponNo']); | |
| $group['dcBrandInfo'] = str_replace('\'', '', json_encode($group['dcBrandInfo'], JSON_UNESCAPED_UNICODE)); // 추가 할인 브랜드별 할인 | |
| \Request::post()->setData($group); | |
변경 후GroupService.php
| ArrayUtils::commaRemover($group, $commaRemoverFilter); | |
| $group = ArrayUtils::jsonEncode($group, $jsonEncodeFilter); | |
| $group['groupCoupon'] = gd_implode(INT_DIVISION, $group['couponNo']); | |
| // 추가할인 할인율 default 0 | |
| foreach (($group['dcBrandInfo'] ?? []) as $k => $arr) { | |
| if (trim($k, "'") === 'goodsDiscount' && is_array($arr)) { | |
| $group['dcBrandInfo'][$k] = array_map(fn($v) => ($v === '' || $v === null) ? '0' : $v, $arr); | |
| } | |
| } | |
| $group['dcBrandInfo'] = str_replace('\'', '', json_encode($group['dcBrandInfo'], JSON_UNESCAPED_UNICODE)); // 추가 할인 브랜드별 할인 | |
| \Request::post()->setData($group); | |
변경 전Member.php
| use Globals; | |
| use Logger; | |
| use Origin\Service\Oauth\Google\GoogleLoginService; | |
| use Request; | |
| use Session; | |
| use UserFilePath; | |
| $this->saveLoginLog($encryptMember['memNo']); | |
| $this->refreshMemberByLogin($encryptMember['memNo'], $encryptMember['loginCnt']); | |
| $this->refreshBasket($encryptMember['memNo']); | |
| if ($encryptMember['loginLimit']['loginFailCount'] ?? 0 > 0) { | |
| $initLimitLoginLog = $this->initLimitLoginLog($encryptMember); | |
| $encryptMember = $initLimitLoginLog['member']; | |
| // 모듈 설정 | |
| $cart = \App::load('Component\\Cart\\Cart'); | |
| $cart->setMergeCart($encryptMember['memNo']); | |
| $this->setSessionByLogin($encryptMember); | |
| } | |
| $goodsStatistics->setCartMemberUpdateStatistics($cartStatistics); | |
| } | |
| /** | |
| * 아이디찾기 | |
| * | |
변경 후Member.php
| use Globals; | |
| use Logger; | |
| use Origin\Service\Oauth\Google\GoogleLoginService; | |
| use Origin\Service\WebHook\CartWebHookService; | |
| use Request; | |
| use Session; | |
| use UserFilePath; | |
| $this->saveLoginLog($encryptMember['memNo']); | |
| $this->refreshMemberByLogin($encryptMember['memNo'], $encryptMember['loginCnt']); | |
| $cartWebHookService = \App::getInstance(CartWebHookService::class); | |
| $migratedCartSnos = $cartWebHookService->findGuestCartSnos(Session::get('siteKey')); | |
| $this->refreshBasket($encryptMember['memNo']); | |
| if ($encryptMember['loginLimit']['loginFailCount'] ?? 0 > 0) { | |
| $initLimitLoginLog = $this->initLimitLoginLog($encryptMember); | |
| $encryptMember = $initLimitLoginLog['member']; | |
| // 모듈 설정 | |
| $cart = \App::load('Component\\Cart\\Cart'); | |
| $cart->setMergeCart($encryptMember['memNo']); | |
| $cartWebHookService->sendCartUpdatedWebHook($migratedCartSnos, 'CREATED'); | |
| $this->setSessionByLogin($encryptMember); | |
| } | |
| $goodsStatistics->setCartMemberUpdateStatistics($cartStatistics); | |
| } | |
| /** | |
| * 아이디찾기 | |
| * | |
변경 전MemberDAO.php
| * 단, 가입일이 2014년 11월 29일 이전일 경우 수신동의일자를 2014년 11월 28일로 적용(수신동의 여부의 확인에 관한 특례) | |
| * | |
| * @param null $standardDt 동의일자와 비교될 기준일 특별한 경우가 아니면 데이터를 넘기지 않도록 한다. 기본은 -2 year -30 days | |
| * | |
| * @return array|object | |
| */ | |
| public function selectMembersByReceiveNotification($standardDt = null) | |
| { | |
| if ($standardDt == null) { | |
| $standardDt = DateTimeUtils::dateFormat('Y-m-d', '-2 year +30 days'); | |
| $this->db->strJoin = ' LEFT JOIN (SELECT memNo, COUNT(*) AS cnt, MAX(regDt) AS maxRegDt FROM ' . DB_MEMBER_HISTORY . ' WHERE updateColumn=\'SMS수신동의\' GROUP BY memNo) AS mh_sms ON m.memNo = mh_sms.memNo'; | |
| $this->db->strJoin .= ' LEFT JOIN (SELECT memNo, COUNT(*) AS cnt, MAX(regDt) AS maxRegDt FROM ' . DB_MEMBER_HISTORY . ' WHERE updateColumn=\'메일수신동의\' GROUP BY memNo) AS mh_mail ON m.memNo = mh_mail.memNo'; | |
| $this->db->strJoin .= ' LEFT JOIN (SELECT DISTINCT memNo FROM ' . DB_MEMBER_NOTIFICATION_LOG . ' WHERE ReasonCode=\'' . MailMimeAuto::AGREEMENT2YPERIOD . '\' AND regDt >= \'' . $standardDt . ' 00:00:00\' AND regDt <= \'' . $nowDt . ' 23:59:59\') AS mnl ON m.memNo = mnl.memNo'; | |
| $this->db->strWhere = '((m.smsFl=\'y\' AND m.cellPhone IS NOT NULL AND m.cellPhone != \'\')'; | |
| $this->db->strWhere .= ' OR (m.maillingFl=\'y\' AND m.email IS NOT NULL AND m.email != \'\'))'; | |
| $this->db->strWhere .= ' AND m.sleepFl=\'n\''; | |
| $this->db->strWhere .= ' AND mnl.memNo IS NULL'; | |
| $this->db->strWhere .= ' OR '; | |
| $this->db->strWhere .= '(COALESCE(mh_mail.maxRegDt, IF(m.entryDt < \'' . $entryDtThreshold . '\', \'' . $entryDtDefault . '\', m.entryDt)) <= \'' . $standardDtEnd . '\' AND m.maillingFl=\'y\')'; | |
| $this->db->strWhere .= ')'; | |
| $query = $this->db->query_complete(); | |
| $strSQL = 'SELECT ' . array_shift($query) . ' FROM ' . DB_MEMBER . ' AS m ' . gd_implode(' ', $query); | |
| $result = $this->db->query_fetch($strSQL); | |
변경 후MemberDAO.php
| * 단, 가입일이 2014년 11월 29일 이전일 경우 수신동의일자를 2014년 11월 28일로 적용(수신동의 여부의 확인에 관한 특례) | |
| * | |
| * @param null $standardDt 동의일자와 비교될 기준일 특별한 경우가 아니면 데이터를 넘기지 않도록 한다. 기본은 -2 year -30 days | |
| * @param int $lastMemNo 마지막으로 처리한 회원번호 (커서, 0이면 커서 미적용) | |
| * @param int $chunkSize 한 번에 조회할 건수 (0이면 전체 조회) | |
| * | |
| * @return array|object | |
| */ | |
| public function selectMembersByReceiveNotification($standardDt = null, int $lastMemNo = 0, int $chunkSize = 0) | |
| { | |
| if ($standardDt == null) { | |
| $standardDt = DateTimeUtils::dateFormat('Y-m-d', '-2 year +30 days'); | |
| $this->db->strJoin = ' LEFT JOIN (SELECT memNo, COUNT(*) AS cnt, MAX(regDt) AS maxRegDt FROM ' . DB_MEMBER_HISTORY . ' WHERE updateColumn=\'SMS수신동의\' GROUP BY memNo) AS mh_sms ON m.memNo = mh_sms.memNo'; | |
| $this->db->strJoin .= ' LEFT JOIN (SELECT memNo, COUNT(*) AS cnt, MAX(regDt) AS maxRegDt FROM ' . DB_MEMBER_HISTORY . ' WHERE updateColumn=\'메일수신동의\' GROUP BY memNo) AS mh_mail ON m.memNo = mh_mail.memNo'; | |
| $this->db->strJoin .= ' LEFT JOIN (SELECT DISTINCT memNo FROM ' . DB_MEMBER_NOTIFICATION_LOG . ' WHERE ReasonCode=\'' . MailMimeAuto::AGREEMENT2YPERIOD . '\' AND regDt >= \'' . $standardDt . ' 00:00:00\' AND regDt <= \'' . $nowDt . ' 23:59:59\') AS mnl ON m.memNo = mnl.memNo'; | |
| $this->db->strWhere = ''; | |
| if ($lastMemNo > 0) { | |
| $this->db->strWhere .= 'm.memNo > ' . $lastMemNo . ' AND '; | |
| } | |
| $this->db->strWhere .= '((m.smsFl=\'y\' AND m.cellPhone IS NOT NULL AND m.cellPhone != \'\')'; | |
| $this->db->strWhere .= ' OR (m.maillingFl=\'y\' AND m.email IS NOT NULL AND m.email != \'\'))'; | |
| $this->db->strWhere .= ' AND m.sleepFl=\'n\''; | |
| $this->db->strWhere .= ' AND mnl.memNo IS NULL'; | |
| $this->db->strWhere .= ' OR '; | |
| $this->db->strWhere .= '(COALESCE(mh_mail.maxRegDt, IF(m.entryDt < \'' . $entryDtThreshold . '\', \'' . $entryDtDefault . '\', m.entryDt)) <= \'' . $standardDtEnd . '\' AND m.maillingFl=\'y\')'; | |
| $this->db->strWhere .= ')'; | |
| if ($chunkSize > 0) { | |
| $this->db->strOrder = 'm.memNo ASC'; | |
| $this->db->strLimit = $chunkSize; | |
| } | |
| $query = $this->db->query_complete(); | |
| $strSQL = 'SELECT ' . array_shift($query) . ' FROM ' . DB_MEMBER . ' AS m ' . gd_implode(' ', $query); | |
| $result = $this->db->query_fetch($strSQL); | |
변경 전MemberSnsService.php
| use Framework\Debug\Exception\AlertRedirectCloseException; | |
| use Framework\Utility\DateTimeUtils; | |
| use Framework\Utility\StringUtils; | |
| use Origin\Service\WebHook\MemberWebHookService; | |
| use Origin\Exception\Member\MissingMemberDataException; | |
| use Request; | |
| $memberService = new Member(); | |
| $memberService->saveLoginLog($encrypt['memNo']); | |
| $memberService->refreshMemberByLogin($encrypt['memNo'], $encrypt['loginCnt']); | |
| $memberService->refreshBasket($encrypt['memNo']); | |
| $memberService->setSessionByLogin($encrypt); | |
| // 로그인 성공 시 웹훅 발송 | |
변경 후MemberSnsService.php
| use Framework\Debug\Exception\AlertRedirectCloseException; | |
| use Framework\Utility\DateTimeUtils; | |
| use Framework\Utility\StringUtils; | |
| use Origin\Service\WebHook\CartWebHookService; | |
| use Origin\Service\WebHook\MemberWebHookService; | |
| use Origin\Exception\Member\MissingMemberDataException; | |
| use Request; | |
| $memberService = new Member(); | |
| $memberService->saveLoginLog($encrypt['memNo']); | |
| $memberService->refreshMemberByLogin($encrypt['memNo'], $encrypt['loginCnt']); | |
| $cartWebHookService = \App::getInstance(CartWebHookService::class); | |
| $migratedCartSnos = $cartWebHookService->findGuestCartSnos(\Session::get('siteKey')); | |
| $memberService->refreshBasket($encrypt['memNo']); | |
| $cart = \App::load('Component\\Cart\\Cart'); | |
| $cart->setMergeCart($encrypt['memNo']); | |
| $cartWebHookService->sendCartUpdatedWebHook($migratedCartSnos, 'CREATED'); | |
| $memberService->setSessionByLogin($encrypt); | |
| // 로그인 성공 시 웹훅 발송 | |
변경 전PageAccess.php
| 'guest' => '0', | |
| 'intro' => 'x', | |
| ], | |
| 'member/join_method.php' => [ | |
| 'member' => 'x', | |
| 'guest' => '0', | |
변경 후PageAccess.php
| 'guest' => '0', | |
| 'intro' => 'x', | |
| ], | |
| 'member/captcha.php' => [ | |
| 'member' => 'x', | |
| 'guest' => 'x', | |
| 'intro' => 'x', | |
| ], | |
| 'member/join_method.php' => [ | |
| 'member' => 'x', | |
| 'guest' => '0', | |
변경 전SleepDAO.php
| /** | |
| * 휴면회원안내 SMS 발송 대상자 조회 | |
| * | |
| * @param int $expirationFl | |
| * | |
| * @return array|null|object | |
| */ | |
| public function selectSleepSmsReceiver($expirationFl = 1) | |
| { | |
| $period = DateTimeUtils::dateFormat('Y-m-d', '-' . ((SleepService::SLEEP_PERIOD * $expirationFl) - 30) . ' day'); | |
| $where = 'IF(lastLoginDt = \'0000-00-00 00:00:00\' OR lastLoginDt IS NULL, DATE_FORMAT(entryDt, \'%Y-%m-%d\') <= \'' . $period . '\' , DATE_FORMAT(lastLoginDt, \'%Y-%m-%d\') <= \'' . $period . '\')'; | |
| $where .= ' AND sleepFl=\'n\' AND sleepSmsFl=\'n\' AND expirationFl=\'' . $expirationFl . '\' AND (cellPhone!=\'\' AND cellPhone IS NOT NULL)'; | |
| return $this->getDataByTable(DB_MEMBER, null, $where, '*', true); | |
| } | |
| /** | |
| * 휴면회원안내 메일 발송 대상자 조회 | |
| * | |
| * @param int $expirationFl | |
| * | |
| * @return array|null|object | |
| * | |
| * ex) where = IF(lastLoginDt = '0000-00-00 00:00:00' OR lastLoginDt IS NULL, DATE_FORMAT(entryDt, '%Y-%m-%d') <= '2012-03-06' , | |
| * DATE_FORMAT(lastLoginDt, '%Y-%m-%d') <= '2012-03-06') AND sleepFl='n' AND sleepMailFl='n' AND expirationFl='5' | |
| */ | |
| public function selectSleepMailReceiver($expirationFl = 1) | |
| { | |
| $period = DateTimeUtils::dateFormat('Y-m-d', '-' . ((SleepService::SLEEP_PERIOD * $expirationFl) - 50) . ' day'); | |
| $period .= ' 23:59:59'; | |
| $where[] = 'IF(lastLoginDt = \'0000-00-00 00:00:00\' OR lastLoginDt IS NULL, entryDt <= \'' . $period . '\' , lastLoginDt <= \'' . $period . '\')'; | |
| $where[] = 'sleepFl=\'n\' AND sleepMailFl=\'n\' AND expirationFl=\'' . $expirationFl . '\' AND (email!=\'\' AND email IS NOT NULL)'; | |
| $this->db->strField = '*'; | |
| $this->db->strWhere = gd_implode(' AND ', $where); | |
| $this->db->strOrder = 'lastLoginDt ASC'; | |
| $this->db->strLimit = '2000'; | |
| $query = $this->db->query_complete(); | |
| $strSQL = 'SELECT ' . array_shift($query) . ' FROM ' . DB_MEMBER . ' ' . gd_implode(' ', $query); | |
| return $this->db->query_fetch($strSQL, false); | |
변경 후SleepDAO.php
| /** | |
| * 휴면회원안내 SMS 발송 대상자 조회 | |
| * | |
| * @param int $expirationFl | |
| * @param string|null $targetDate 기준 일자 (Y-m-d). null 이면 현재('now') 기준 | |
| * @param int $lastMemNo 마지막으로 처리한 회원번호 (커서, 0이면 커서 미적용) | |
| * @param int $limit 한 번에 조회할 건수 (0이면 전체 조회) | |
| * | |
| * @return array|null|object | |
| */ | |
| public function selectSleepSmsReceiver($expirationFl = 1, ?string $targetDate = null, int $lastMemNo = 0, int $limit = 0) | |
| { | |
| $daysOffset = (SleepService::SLEEP_PERIOD * $expirationFl) - 30; | |
| $baseTime = $targetDate ?? 'now'; | |
| $period = DateTimeUtils::dateFormat('Y-m-d', $baseTime . ' -' . $daysOffset . ' day'); | |
| $where = 'IF(lastLoginDt = \'0000-00-00 00:00:00\' OR lastLoginDt IS NULL, DATE_FORMAT(entryDt, \'%Y-%m-%d\') <= \'' . $period . '\' , DATE_FORMAT(lastLoginDt, \'%Y-%m-%d\') <= \'' . $period . '\')'; | |
| $where .= ' AND sleepFl=\'n\' AND sleepSmsFl=\'n\' AND expirationFl=\'' . $expirationFl . '\' AND (cellPhone!=\'\' AND cellPhone IS NOT NULL)'; | |
| if ($lastMemNo > 0) { | |
| $where .= ' AND memNo > ' . $lastMemNo; | |
| } | |
| if ($limit > 0) { | |
| $this->db->strOrder = 'memNo ASC'; | |
| $this->db->strLimit = $limit; | |
| } | |
| return $this->getDataByTable(DB_MEMBER, null, $where, '*', true); | |
| } | |
| /** | |
| * 휴면회원안내 메일 발송 대상자 조회 | |
| * | |
| * @param int $expirationFl | |
| * @param string|null $targetDate 기준 일자 (Y-m-d). null 이면 현재('now') 기준 | |
| * @param int $lastMemNo 마지막으로 처리한 회원번호 (커서, 0이면 커서 미적용) | |
| * @param int $limit 한 번에 조회할 건수 (0이면 기존 LIMIT 2000 유지) | |
| * | |
| * @return array|null|object | |
| * | |
| * ex) where = IF(lastLoginDt = '0000-00-00 00:00:00' OR lastLoginDt IS NULL, DATE_FORMAT(entryDt, '%Y-%m-%d') <= '2012-03-06' , | |
| * DATE_FORMAT(lastLoginDt, '%Y-%m-%d') <= '2012-03-06') AND sleepFl='n' AND sleepMailFl='n' AND expirationFl='5' | |
| */ | |
| public function selectSleepMailReceiver($expirationFl = 1, ?string $targetDate = null, int $lastMemNo = 0, int $limit = 0) | |
| { | |
| $daysOffset = (SleepService::SLEEP_PERIOD * $expirationFl) - 50; | |
| $baseTime = $targetDate ?? 'now'; | |
| $period = DateTimeUtils::dateFormat('Y-m-d', $baseTime . ' -' . $daysOffset . ' day'); | |
| $period .= ' 23:59:59'; | |
| $where[] = 'IF(lastLoginDt = \'0000-00-00 00:00:00\' OR lastLoginDt IS NULL, entryDt <= \'' . $period . '\' , lastLoginDt <= \'' . $period . '\')'; | |
| $where[] = 'sleepFl=\'n\' AND sleepMailFl=\'n\' AND expirationFl=\'' . $expirationFl . '\' AND (email!=\'\' AND email IS NOT NULL)'; | |
| if ($lastMemNo > 0) { | |
| $where[] = 'memNo > ' . $lastMemNo; | |
| } | |
| $this->db->strField = '*'; | |
| $this->db->strWhere = gd_implode(' AND ', $where); | |
| if ($limit > 0) { | |
| $this->db->strOrder = 'memNo ASC'; | |
| $this->db->strLimit = $limit; | |
| } else { | |
| $this->db->strOrder = 'lastLoginDt ASC'; | |
| $this->db->strLimit = '2000'; | |
| } | |
| $query = $this->db->query_complete(); | |
| $strSQL = 'SELECT ' . array_shift($query) . ' FROM ' . DB_MEMBER . ' ' . gd_implode(' ', $query); | |
| return $this->db->query_fetch($strSQL, false); | |
변경 전SleepService.php
| /** | |
| * 휴면회원 전환 안내 SMS 수신 대상 조회 및 전환 예정일 설정 | |
| * | |
| * @return array | |
| */ | |
| public function getSleepSmsReceivers() | |
| { | |
| $result = []; | |
| foreach ($this->expirationFlags as $expirationFlag) { | |
| $receivers = $this->sleepDAO->selectSleepSmsReceiver($expirationFlag); | |
| $period = '+' . (SleepService::SLEEP_PERIOD * $expirationFlag) . ' day'; | |
| foreach ($receivers as $receiver) { | |
| $baseDate = StringUtils::strIsSet($receiver['lastLoginDt'], '0000-00-00 00:00:00') == '0000-00-00 00:00:00' ? $receiver['entryDt'] : $receiver['lastLoginDt']; | |
| { | |
| $result = []; | |
| foreach ($this->expirationFlags as $expirationFlag) { | |
| $receivers = $this->sleepDAO->selectSleepMailReceiver($expirationFlag); | |
| $period = '+' . (SleepService::SLEEP_PERIOD * $expirationFlag) . ' day'; | |
| foreach ($receivers as $receiver) { | |
| $baseDate = StringUtils::strIsSet($receiver['lastLoginDt'], '0000-00-00 00:00:00') == '0000-00-00 00:00:00' ? $receiver['entryDt'] : $receiver['lastLoginDt']; | |
| $replace = [ | |
| 'name' => $member['memNm'], | |
| 'memNm' => $member['memNm'], | |
| 'memId' => $member['memId'], | |
| 'groupNm' => $aMemInfo['groupNm'], | |
| 'mileage' => $member['mileage'], | |
변경 후SleepService.php
| /** | |
| * 휴면회원 전환 안내 SMS 수신 대상 조회 및 전환 예정일 설정 | |
| * | |
| * @param string|null $targetDate 기준 일자 (Y-m-d). null 이면 현재('now') 기준 | |
| * @param int $lastMemNo 마지막으로 처리한 회원번호 (커서, 0이면 커서 미적용) | |
| * @param int $limit 한 번에 조회할 건수 (0이면 전체 조회) | |
| * @return array | |
| */ | |
| public function getSleepSmsReceivers(?string $targetDate = null, int $lastMemNo = 0, int $limit = 0) | |
| { | |
| $result = []; | |
| foreach ($this->expirationFlags as $expirationFlag) { | |
| $receivers = $this->sleepDAO->selectSleepSmsReceiver($expirationFlag, $targetDate, $lastMemNo, $limit); | |
| $period = '+' . (SleepService::SLEEP_PERIOD * $expirationFlag) . ' day'; | |
| foreach ($receivers as $receiver) { | |
| $baseDate = StringUtils::strIsSet($receiver['lastLoginDt'], '0000-00-00 00:00:00') == '0000-00-00 00:00:00' ? $receiver['entryDt'] : $receiver['lastLoginDt']; | |
| { | |
| $result = []; | |
| foreach ($this->expirationFlags as $expirationFlag) { | |
| $receivers = $this->sleepDAO->selectSleepMailReceiver($expirationFlag, null, 0, 0); | |
| $period = '+' . (SleepService::SLEEP_PERIOD * $expirationFlag) . ' day'; | |
| foreach ($receivers as $receiver) { | |
| $baseDate = StringUtils::strIsSet($receiver['lastLoginDt'], '0000-00-00 00:00:00') == '0000-00-00 00:00:00' ? $receiver['entryDt'] : $receiver['lastLoginDt']; | |
| $replace = [ | |
| 'name' => $member['memNm'], | |
| 'memNm' => $member['memNm'], | |
| 'memNo' => $member['memNo'], | |
| 'memId' => $member['memId'], | |
| 'groupNm' => $aMemInfo['groupNm'], | |
| 'mileage' => $member['mileage'], | |
변경 전NaverCommonInflowScript.php
| namespace Bundle\Component\Naver; | |
| use Request; | |
| class NaverCommonInflowScript | |
| // 완성된 주문상품정보를 태그로 변환 | |
| foreach ($orderItemSet as $orderItem) { | |
| $orderItemField = []; | |
| foreach ($orderItem as $field => $value) { | |
| switch ($field) { | |
| case 'price': | |
| $orderItemField[] = $field.":". gd_money_format($value,false); | |
| break; | |
| case 'ea': case 'is_parent': | |
| $orderItemField[] = $field.":".$value; | |
| break; | |
| case 'goodsnm': | |
| $orderItemField[] = $field.":'".addslashes($value)."'"; | |
| break; | |
| default: | |
| $orderItemField[] = $field.":'".$value."'"; | |
| break; | |
| } | |
| } | |
| $orderCompleteData[] = '<input type="hidden" name="naver-common-inflow-script-order-item" value="{'.gd_implode(',', $orderItemField).'}"/>'; | |
| } | |
| // 주문 정보 조회 | |
| $strSQL = 'SELECT totalGoodsPrice AS goodsprice FROM '.DB_ORDER.' WHERE orderNo = ?'; | |
| $arrBind = ['s',$orderNo]; | |
| $getData = $this->db->query_fetch($strSQL, $arrBind, false); | |
| unset($arrBind); | |
| foreach ($getData as $field => $name) { | |
| switch ($field) { | |
| case 'goodsprice': | |
| $orderField[] = $field.":". gd_money_format($name,false); | |
| break; | |
| default: | |
| $orderField[] = $field.":'".$name."'"; | |
| break; | |
| } | |
| } | |
| if (gd_count($orderField) > 0) { | |
| $orderCompleteData[] = '<input type="hidden" id="naver-common-inflow-script-order" value="{'.gd_implode(',', $orderField).'}"/>'; | |
| } | |
| } | |
변경 후NaverCommonInflowScript.php
| namespace Bundle\Component\Naver; | |
| use Framework\Utility\StringUtils; | |
| use Request; | |
| class NaverCommonInflowScript | |
| // 완성된 주문상품정보를 태그로 변환 | |
| foreach ($orderItemSet as $orderItem) { | |
| $orderItem['price'] = (float) gd_money_format($orderItem['price'], false); | |
| $orderItem['ea'] = (int) $orderItem['ea']; | |
| $orderItem['is_parent'] = ($orderItem['is_parent'] === 'true'); | |
| $jsonValue = StringUtils::htmlSpecialChars(json_encode($orderItem, JSON_UNESCAPED_UNICODE)); | |
| $orderCompleteData[] = '<input type="hidden" name="naver-common-inflow-script-order-item" value="'.$jsonValue.'"/>'; | |
| } | |
| // 주문 정보 조회 | |
| $strSQL = 'SELECT totalGoodsPrice AS goodsprice FROM '.DB_ORDER.' WHERE orderNo = ?'; | |
| $arrBind = ['s', $orderNo]; | |
| $orderData = $this->db->query_fetch($strSQL, $arrBind, false); | |
| unset($arrBind); | |
| if (empty($orderData) === false) { | |
| $orderData['goodsprice'] = (float) gd_money_format($orderData['goodsprice'], false); | |
| $jsonValue = StringUtils::htmlSpecialChars(json_encode($orderData, JSON_UNESCAPED_UNICODE)); | |
| $orderCompleteData[] = '<input type="hidden" id="naver-common-inflow-script-order" value="'.$jsonValue.'"/>'; | |
| } | |
| } | |
변경 전Order.php
| $receipt['requestCellPhone'] = $orderInfo['orderCellPhone']; | |
| $receipt['useFl'] = $orderInfo['cashUseFl']; | |
| $receipt['certFl'] = $orderInfo['cashCertFl']; | |
| $receipt['certNo'] = Encryptor::encrypt($orderInfo['cashCertNo']); | |
| $receipt['settlePrice'] = $order['settlePrice']; | |
| $receipt['pgName'] = $pgConf['pgName']; | |
| $receipt['adminMemo'] = $orderInfo['cashCertNo']; | |
| return gd_htmlspecialchars_stripslashes($data); | |
| } | |
| } | |
변경 후Order.php
| $receipt['requestCellPhone'] = $orderInfo['orderCellPhone']; | |
| $receipt['useFl'] = $orderInfo['cashUseFl']; | |
| $receipt['certFl'] = $orderInfo['cashCertFl']; | |
| $receipt['certNo'] = Encryptor::encrypt($this->convertCashCertNo($orderInfo['cashCertNo'], $orderInfo['cashCertFl'])); | |
| $receipt['settlePrice'] = $order['settlePrice']; | |
| $receipt['pgName'] = $pgConf['pgName']; | |
| $receipt['adminMemo'] = $orderInfo['cashCertNo']; | |
| return gd_htmlspecialchars_stripslashes($data); | |
| } | |
| /** | |
| * 현금영수증 인증번호 변환 | |
| * | |
| * @param mixed $cashCertNo 현금영수증 인증번호 | |
| * @param mixed $cashCertFl 현금영수증 인증종류 | |
| * | |
| * @return mixed | |
| */ | |
| protected function convertCashCertNo(mixed $cashCertNo, mixed $cashCertFl): mixed | |
| { | |
| if (is_array($cashCertNo) && isset($cashCertNo[$cashCertFl])) { | |
| return $cashCertNo[$cashCertFl]; | |
| } | |
| return $cashCertNo; | |
| } | |
| } | |
변경 전OrderAdmin.php
| // 사용자 신청 테이블 업데이트 | |
| if (empty($bundleData['userHandleGoodsNo']) === true) { | |
| // 처리자 | |
| if($bundleData['adminHandleReason'] == '자동 환불'){ | |
| $bundleData['managerNo'] = -1; | |
| }else{ | |
| $bundleData['managerNo'] = Session::get('manager.sno'); | |
| } | |
| $this->db->strField = ' | |
| IFNULL(SUM(IF(userHandleMode=\'b\', 1, 0)), 0) AS backAll, | |
| IFNULL(SUM(IF(userHandleFl=\'r\' AND userHandleMode=\'b\', 1, 0)), 0) AS backRequest, | |
| IFNULL(SUM(IF(userHandleFl!=\'r\' AND userHandleMode=\'b\', 1, 0)), 0) AS backAccept, | |
| IFNULL(SUM(IF(userHandleMode=\'r\', 1, 0)), 0) AS refundAll, | |
| IFNULL(SUM(IF(userHandleFl=\'r\' AND userHandleMode=\'r\', 1, 0)), 0) AS refundRequest, | |
| IFNULL(SUM(IF(userHandleFl!=\'r\' AND userHandleMode=\'r\', 1, 0)), 0) AS refundAccept, | |
| IFNULL(SUM(IF(userHandleMode=\'e\', 1, 0)), 0) AS exchangeAll, | |
| IFNULL(SUM(IF(userHandleFl=\'r\' AND userHandleMode=\'e\', 1, 0)), 0) AS exchangeRequest, | |
| IFNULL(SUM(IF(userHandleFl!=\'r\' AND userHandleMode=\'e\', 1, 0)), 0) AS exchangeAccept | |
| '; | |
| $query = $this->db->query_complete(); | |
| $strSQL = 'SELECT ' . array_shift($query) . ' FROM ' . DB_ORDER_USER_HANDLE . gd_implode(' ', $query); | |
| 'od.realTaxFreeDeliveryCharge', | |
| 'od.divisionDeliveryUseMileage', | |
| 'od.divisionDeliveryUseDeposit', | |
| ]; | |
| if($searchData['statusMode'] === 'o'){ | |
| // 입금대기리스트에서 '주문상품명' 을 입금대기 상태의 주문상품명만으로 노출시키기 위해 개수를 구함 | |
변경 후OrderAdmin.php
| // 사용자 신청 테이블 업데이트 | |
| if (empty($bundleData['userHandleGoodsNo']) === true) { | |
| // 처리자 | |
| if (isset($bundleData['managerNo']) === true && (int)$bundleData['managerNo'] === -1) { | |
| // 시스템 자동 처리: 명시적으로 -1 로 들어온 경우 그대로 유지 (자동 승인/거절, 자동 환불 등) | |
| $bundleData['managerNo'] = -1; | |
| } else if ($bundleData['adminHandleReason'] == '자동 환불') { | |
| $bundleData['managerNo'] = -1; | |
| } else { | |
| $bundleData['managerNo'] = Session::get('manager.sno'); | |
| } | |
| $this->db->strField = ' | |
| IFNULL(SUM(IF(userHandleMode=\'b\', 1, 0)), 0) AS backAll, | |
| IFNULL(SUM(IF(userHandleFl=\'r\' AND userHandleMode=\'b\', 1, 0)), 0) AS backRequest, | |
| IFNULL(SUM(IF(userHandleFl=\'y\' AND userHandleMode=\'b\', 1, 0)), 0) AS backApprove, | |
| IFNULL(SUM(IF(userHandleFl=\'n\' AND userHandleMode=\'b\', 1, 0)), 0) AS backReject, | |
| IFNULL(SUM(IF(userHandleMode=\'r\', 1, 0)), 0) AS refundAll, | |
| IFNULL(SUM(IF(userHandleFl=\'r\' AND userHandleMode=\'r\', 1, 0)), 0) AS refundRequest, | |
| IFNULL(SUM(IF(userHandleFl=\'y\' AND userHandleMode=\'r\', 1, 0)), 0) AS refundApprove, | |
| IFNULL(SUM(IF(userHandleFl=\'n\' AND userHandleMode=\'r\', 1, 0)), 0) AS refundReject, | |
| IFNULL(SUM(IF(userHandleMode=\'e\', 1, 0)), 0) AS exchangeAll, | |
| IFNULL(SUM(IF(userHandleFl=\'r\' AND userHandleMode=\'e\', 1, 0)), 0) AS exchangeRequest, | |
| IFNULL(SUM(IF(userHandleFl=\'y\' AND userHandleMode=\'e\', 1, 0)), 0) AS exchangeApprove, | |
| IFNULL(SUM(IF(userHandleFl=\'n\' AND userHandleMode=\'e\', 1, 0)), 0) AS exchangeReject | |
| '; | |
| $query = $this->db->query_complete(); | |
| $strSQL = 'SELECT ' . array_shift($query) . ' FROM ' . DB_ORDER_USER_HANDLE . gd_implode(' ', $query); | |
| 'od.realTaxFreeDeliveryCharge', | |
| 'od.divisionDeliveryUseMileage', | |
| 'od.divisionDeliveryUseDeposit', | |
| 'od.deliverySno', | |
| ]; | |
| if($searchData['statusMode'] === 'o'){ | |
| // 입금대기리스트에서 '주문상품명' 을 입금대기 상태의 주문상품명만으로 노출시키기 위해 개수를 구함 | |
변경 전OrderAdminNew.php
| // 사용자 신청 테이블 업데이트 | |
| if (empty($bundleData['userHandleGoodsNo']) === true) { | |
| // 처리자 | |
| if($bundleData['adminHandleReason'] == '자동 환불'){ | |
| $bundleData['managerNo'] = -1; | |
| }else{ | |
| $bundleData['managerNo'] = Session::get('manager.sno'); | |
| } | |
| $this->db->strField = ' | |
| IFNULL(SUM(IF(userHandleMode=\'b\', 1, 0)), 0) AS backAll, | |
| IFNULL(SUM(IF(userHandleFl=\'r\' AND userHandleMode=\'b\', 1, 0)), 0) AS backRequest, | |
| IFNULL(SUM(IF(userHandleFl!=\'r\' AND userHandleMode=\'b\', 1, 0)), 0) AS backAccept, | |
| IFNULL(SUM(IF(userHandleMode=\'r\', 1, 0)), 0) AS refundAll, | |
| IFNULL(SUM(IF(userHandleFl=\'r\' AND userHandleMode=\'r\', 1, 0)), 0) AS refundRequest, | |
| IFNULL(SUM(IF(userHandleFl!=\'r\' AND userHandleMode=\'r\', 1, 0)), 0) AS refundAccept, | |
| IFNULL(SUM(IF(userHandleMode=\'e\', 1, 0)), 0) AS exchangeAll, | |
| IFNULL(SUM(IF(userHandleFl=\'r\' AND userHandleMode=\'e\', 1, 0)), 0) AS exchangeRequest, | |
| IFNULL(SUM(IF(userHandleFl!=\'r\' AND userHandleMode=\'e\', 1, 0)), 0) AS exchangeAccept | |
| '; | |
| $query = $this->db->query_complete(); | |
| $strSQL = 'SELECT ' . array_shift($query) . ' FROM ' . DB_ORDER_USER_HANDLE . gd_implode(' ', $query); | |
| 'od.realTaxFreeDeliveryCharge', | |
| 'od.divisionDeliveryUseMileage', | |
| 'od.divisionDeliveryUseDeposit', | |
| ]; | |
| if($searchData['statusMode'] === 'o'){ | |
| // 입금대기리스트에서 '주문상품명' 을 입금대기 상태의 주문상품명만으로 노출시키기 위해 개수를 구함 | |
변경 후OrderAdminNew.php
| // 사용자 신청 테이블 업데이트 | |
| if (empty($bundleData['userHandleGoodsNo']) === true) { | |
| // 처리자 | |
| if (isset($bundleData['managerNo']) === true && (int)$bundleData['managerNo'] === -1) { | |
| // 시스템 자동 처리: 명시적으로 -1 로 들어온 경우 그대로 유지 (자동 승인/거절, 자동 환불 등) | |
| $bundleData['managerNo'] = -1; | |
| } else if ($bundleData['adminHandleReason'] == '자동 환불') { | |
| $bundleData['managerNo'] = -1; | |
| } else { | |
| $bundleData['managerNo'] = Session::get('manager.sno'); | |
| } | |
| $this->db->strField = ' | |
| IFNULL(SUM(IF(userHandleMode=\'b\', 1, 0)), 0) AS backAll, | |
| IFNULL(SUM(IF(userHandleFl=\'r\' AND userHandleMode=\'b\', 1, 0)), 0) AS backRequest, | |
| IFNULL(SUM(IF(userHandleFl=\'y\' AND userHandleMode=\'b\', 1, 0)), 0) AS backApprove, | |
| IFNULL(SUM(IF(userHandleFl=\'n\' AND userHandleMode=\'b\', 1, 0)), 0) AS backReject, | |
| IFNULL(SUM(IF(userHandleMode=\'r\', 1, 0)), 0) AS refundAll, | |
| IFNULL(SUM(IF(userHandleFl=\'r\' AND userHandleMode=\'r\', 1, 0)), 0) AS refundRequest, | |
| IFNULL(SUM(IF(userHandleFl=\'y\' AND userHandleMode=\'r\', 1, 0)), 0) AS refundApprove, | |
| IFNULL(SUM(IF(userHandleFl=\'n\' AND userHandleMode=\'r\', 1, 0)), 0) AS refundReject, | |
| IFNULL(SUM(IF(userHandleMode=\'e\', 1, 0)), 0) AS exchangeAll, | |
| IFNULL(SUM(IF(userHandleFl=\'r\' AND userHandleMode=\'e\', 1, 0)), 0) AS exchangeRequest, | |
| IFNULL(SUM(IF(userHandleFl=\'y\' AND userHandleMode=\'e\', 1, 0)), 0) AS exchangeApprove, | |
| IFNULL(SUM(IF(userHandleFl=\'n\' AND userHandleMode=\'e\', 1, 0)), 0) AS exchangeReject | |
| '; | |
| $query = $this->db->query_complete(); | |
| $strSQL = 'SELECT ' . array_shift($query) . ' FROM ' . DB_ORDER_USER_HANDLE . gd_implode(' ', $query); | |
| 'od.realTaxFreeDeliveryCharge', | |
| 'od.divisionDeliveryUseMileage', | |
| 'od.divisionDeliveryUseDeposit', | |
| 'od.deliverySno', | |
| ]; | |
| if($searchData['statusMode'] === 'o'){ | |
| // 입금대기리스트에서 '주문상품명' 을 입금대기 상태의 주문상품명만으로 노출시키기 위해 개수를 구함 | |
변경 전OrderNew.php
| $receipt['requestCellPhone'] = $orderInfo['orderCellPhone']; | |
| $receipt['useFl'] = $orderInfo['cashUseFl']; | |
| $receipt['certFl'] = $orderInfo['cashCertFl']; | |
| $receipt['certNo'] = Encryptor::encrypt($orderInfo['cashCertNo']); | |
| $receipt['settlePrice'] = $order['settlePrice']; | |
| $receipt['pgName'] = $pgConf['pgName']; | |
| $receipt['adminMemo'] = $orderInfo['cashCertNo']; | |
| return gd_htmlspecialchars_stripslashes($data); | |
| } | |
| } | |
변경 후OrderNew.php
| $receipt['requestCellPhone'] = $orderInfo['orderCellPhone']; | |
| $receipt['useFl'] = $orderInfo['cashUseFl']; | |
| $receipt['certFl'] = $orderInfo['cashCertFl']; | |
| $receipt['certNo'] = Encryptor::encrypt($this->convertCashCertNo($orderInfo['cashCertNo'], $orderInfo['cashCertFl'])); | |
| $receipt['settlePrice'] = $order['settlePrice']; | |
| $receipt['pgName'] = $pgConf['pgName']; | |
| $receipt['adminMemo'] = $orderInfo['cashCertNo']; | |
| return gd_htmlspecialchars_stripslashes($data); | |
| } | |
| /** | |
| * 현금영수증 인증번호 변환 | |
| * | |
| * @param mixed $cashCertNo 현금영수증 인증번호 | |
| * @param mixed $cashCertFl 현금영수증 인증종류 | |
| * | |
| * @return mixed | |
| */ | |
| protected function convertCashCertNo(mixed $cashCertNo, mixed $cashCertFl): mixed | |
| { | |
| if (is_array($cashCertNo) && isset($cashCertNo[$cashCertFl])) { | |
| return $cashCertNo[$cashCertFl]; | |
| } | |
| return $cashCertNo; | |
| } | |
| } | |
변경 전Tax.php
| const TAX_LOCK_EXCEPTION_MESSAGE = '이미 처리 중이거나 발급된 세금 계산서입니다. 잠시 후 다시 확인해 주세요.'; | |
| const TAX_EXCEPTION_LOG_MESSAGE = '[세금 계산서 처리 중 예상치 못한 오류가 발생]'; | |
| const TAX_EXCEPTION_MESSAGE = '세금 계산서 처리 중 예상치 못한 오류가 발생했습니다.'; | |
| /** | |
| $arrData['TAXMODE'] = $setData['godobillTaxMode']; // 일반계산서구분 | |
| $arrData['DMDER_MAIN_TX_OFFCR_NM'] = trim(iconv('UTF-8', 'EUC-KR//IGNORE', $setData['requestNm'])); | |
| $arrData['DMDER_MAIN_TX_OFFCR_EMAIL_ADDR'] = trim(iconv('UTF-8', 'EUC-KR//IGNORE', $setData['taxEmail'])); | |
| $arrData['DMDER_MAIN_TX_OFFCR_MTEL_NO'] = $getData['orderCellPhone']; | |
| $arrData['DMDER_BUSNSECT_NM'] = trim(iconv('UTF-8', 'EUC-KR//IGNORE', $setData['taxService'])); | |
| $arrData['DMDER_DETAIL_NM'] = trim(iconv('UTF-8', 'EUC-KR//IGNORE', $setData['taxItem'])); | |
| $arrData['DMDER_CHIEF_NM'] = trim(iconv('UTF-8', 'EUC-KR//IGNORE', $setData['taxCeoNm'])); | |
| $arrData['DMDER_TRADE_NM'] = trim(iconv('UTF-8', 'EUC-KR//IGNORE', $setData['taxCompany'])); | |
| $arrData['DMDER_ADDR'] = trim(iconv('UTF-8', 'EUC-KR//IGNORE', $setData['taxAddress'] . ' ' . $setData['taxAddressSub'])); | |
| $arrData['item'][] = [ | |
| 'THNG_PURCHS_DT' => gd_date_format('Ymd', $setData['processDt']), | |
| 'THNG_SUP_AMT' => $setData['supplyPrice'], | |
| 'THNG_TX' => $setData['taxPrice'], | |
| 'THNG_NM' => trim(iconv('UTF-8', 'EUC-KR//IGNORE', $getData['orderGoodsNm'])), | |
| ]; | |
| \Logger::channel('service')->info('고도빌전송' , [iconv('EUC-KR', 'UTF-8',(serialize($arrData)))]); | |
| // 고도빌로 전송 | |
| $result = $this->sendGodobillHttp($arrData); | |
변경 후Tax.php
| const TAX_LOCK_EXCEPTION_MESSAGE = '이미 처리 중이거나 발급된 세금 계산서입니다. 잠시 후 다시 확인해 주세요.'; | |
| const TAX_EXCEPTION_LOG_MESSAGE = '[세금 계산서 처리 중 예상치 못한 오류가 발생]'; | |
| const TAX_EXCEPTION_MESSAGE = '세금 계산서 처리 중 예상치 못한 오류가 발생했습니다.'; | |
| const GODOBILL_ENCODING = 'CP949'; | |
| const GODOBILL_CHARSET = self::GODOBILL_ENCODING . '//IGNORE'; | |
| /** | |
| $arrData['TAXMODE'] = $setData['godobillTaxMode']; // 일반계산서구분 | |
| $arrData['DMDER_MAIN_TX_OFFCR_NM'] = StringUtils::encodeAndTruncate($setData['requestNm'], 30, self::GODOBILL_CHARSET); // 담당자명 최대 30글자 | |
| $arrData['DMDER_MAIN_TX_OFFCR_EMAIL_ADDR'] = StringUtils::encodeAndTruncate($setData['taxEmail'], 40, self::GODOBILL_CHARSET); // 담당자 이메일 최대 40글자 | |
| $arrData['DMDER_MAIN_TX_OFFCR_MTEL_NO'] = mb_substr($getData['orderCellPhone'], 0, 20); // 담당자 휴대전화 최대 20글자 | |
| $arrData['DMDER_BUSNSECT_NM'] = StringUtils::encodeAndTruncate($setData['taxService'], 40, self::GODOBILL_CHARSET); // 업태명 최대 40글자 | |
| $arrData['DMDER_DETAIL_NM'] = StringUtils::encodeAndTruncate($setData['taxItem'], 40, self::GODOBILL_CHARSET); // 종목명 최대 40글자 | |
| $arrData['DMDER_CHIEF_NM'] = StringUtils::encodeAndTruncate($setData['taxCeoNm'], 30, self::GODOBILL_CHARSET); // 대표자명 최대 30글자 | |
| $arrData['DMDER_TRADE_NM'] = StringUtils::encodeAndTruncate($setData['taxCompany'], 70, self::GODOBILL_CHARSET); // 상호명 최대 70글자 | |
| $arrData['DMDER_ADDR'] = StringUtils::encodeAndTruncate($setData['taxAddress'] . ' ' . $setData['taxAddressSub'], 150, self::GODOBILL_CHARSET); // 주소 최대 150글자 | |
| $arrData['item'][] = [ | |
| 'THNG_PURCHS_DT' => gd_date_format('Ymd', $setData['processDt']), | |
| 'THNG_SUP_AMT' => $setData['supplyPrice'], | |
| 'THNG_TX' => $setData['taxPrice'], | |
| 'THNG_NM' => trim(iconv('UTF-8', self::GODOBILL_CHARSET, $getData['orderGoodsNm'])), | |
| ]; | |
| \Logger::channel('service')->info('고도빌전송' , [iconv(self::GODOBILL_ENCODING, 'UTF-8',(serialize($arrData)))]); | |
| // 고도빌로 전송 | |
| $result = $this->sendGodobillHttp($arrData); | |
변경 전UserHandleAutoProcess.php
변경 후UserHandleAutoProcess.php
| <?php | |
| /* | |
| * Copyright (C) 2026 NHN COMMERCE. - All Rights Reserved | |
| * | |
| * Unauthorized copying or redistribution of this file in source and binary forms via any medium | |
| * is strictly prohibited. | |
| */ | |
| namespace Bundle\Component\Order; | |
| use Component\Order\OrderAdmin; | |
| use Origin\Enum\Order\UserHandleFl; | |
| use Origin\Enum\Order\UserHandleMode; | |
| use Repository\Order\OrderUserHandleRepository; | |
| /** | |
| * 관리자 클레임 접수 시 고객 클레임 신청 건의 자동 승인/거절 처리 클래스 | |
| * | |
| * 관리자가 주문상세에서 교환/반품/환불을 접수하면, 해당 상품주문번호에 | |
| * 승인/거절 처리되지 않은(userHandleFl='r') 고객 클레임 신청 건이 있는지 조회하여 | |
| * - 고객 신청 클레임 종류 = 관리자 접수 클레임 종류 → 자동 승인 (userHandleFl='y') | |
| * - 고객 신청 클레임 종류 ≠ 관리자 접수 클레임 종류 → 자동 거절 (userHandleFl='n') | |
| * 처리 후 운영자 메모를 시스템 사유로 저장한다. | |
| * | |
| * 이 클래스는 OrderAdmin / OrderAdminNew 양쪽 흐름에서 공통으로 사용된다. | |
| * | |
| * @package Bundle\Component\Order | |
| */ | |
| class UserHandleAutoProcess | |
| { | |
| /** 시스템 자동 처리 매니저 번호 */ | |
| public const SYSTEM_MANAGER_NO = -1; | |
| /** 결과 배열 키 */ | |
| private const RESULT_APPROVE = 'approve'; | |
| private const RESULT_REJECT = 'reject'; | |
| public function __construct( | |
| private readonly OrderUserHandleRepository $orderUserHandleRepository, | |
| private readonly OrderAdmin $orderAdmin | |
| ) {} | |
| /** | |
| * 관리자 클레임 접수 시 고객 클레임 신청 건의 자동 승인/거절 처리 | |
| * | |
| * 부작용 최소화를 위해 es_orderUserHandle UPDATE 만 수행하며, | |
| * 주문상태 변경/SMS 발송/카운팅 동기화 등 부가 처리는 호출하지 않는다. | |
| * (주문상태 변경은 호출처에서 이미 완료된 상태로 가정) | |
| * | |
| * 업데이트는 OrderAdmin::updateUserHandle() 에 위임하여 | |
| * managerNo === -1 시스템 처리 분기 등 기존 정책을 그대로 사용한다. | |
| * | |
| * @param string $orderNo 주문번호 | |
| * @param array $orderGoodsSnoList 관리자 클레임 처리된 상품주문번호(es_orderGoods.sno) 배열 | |
| * @param UserHandleMode $adminClaimMode 관리자 접수 클레임 종류 | |
| * | |
| * @return array 처리 결과 ['approve' => [['userHandleSno'=>X, 'orderGoodsSno'=>Y], ...], 'reject' => [...]] | |
| */ | |
| public function autoApproveOrReject(string $orderNo, array $orderGoodsSnoList, UserHandleMode $adminClaimMode): array | |
| { | |
| $result = [self::RESULT_APPROVE => [], self::RESULT_REJECT => []]; | |
| if (empty($orderNo) || empty($orderGoodsSnoList)) { | |
| return $result; | |
| } | |
| // --- 대상 조회: 승인/거절 처리되지 않은(userHandleFl='r') 고객 클레임 신청 건 | |
| $targetList = $this->orderUserHandleRepository->findPendingUserHandlesForAutoProcess($orderNo, $orderGoodsSnoList); | |
| if (empty($targetList)) { | |
| return $result; | |
| } | |
| $adminLabel = __($adminClaimMode->label()); | |
| // --- 각 건에 대해 자동 승인/거절 분기 후 업데이트 | |
| foreach ($targetList as $row) { | |
| $userHandleSno = $row['sno']; | |
| $isApprove = ($row['userHandleMode'] === $adminClaimMode->value); | |
| $newUserHandleFl = $isApprove ? UserHandleFl::APPROVE->value : UserHandleFl::REJECT->value; | |
| $resultKey = $isApprove ? self::RESULT_APPROVE : self::RESULT_REJECT; | |
| $reason = sprintf( | |
| __('%s 접수에 따른 자동 %s'), | |
| $adminLabel, | |
| $isApprove ? __('승인') : __('거절') | |
| ); | |
| // 업데이트 | |
| $bundleData = [ | |
| 'sno' => $userHandleSno, | |
| 'userHandleFl' => $newUserHandleFl, | |
| 'adminHandleReason' => $reason, | |
| 'managerNo' => self::SYSTEM_MANAGER_NO, | |
| ]; | |
| $updated = $this->orderAdmin->updateUserHandle($bundleData); | |
| if ($updated !== false) { | |
| $result[$resultKey][] = [ | |
| 'userHandleSno' => $userHandleSno, | |
| 'orderGoodsSno' => $row['userHandleGoodsNo'], | |
| ]; | |
| } | |
| } | |
| return $result; | |
| } | |
| } | |
변경 전ScmAdjust.php
| class ScmAdjust | |
| { | |
| public $scmAdjustState = []; | |
| public $scmAdjustKind = []; | |
| public $scmAdjustType = []; | |
| $arrData['DMDER_BUSNID'] = str_replace('-', '', $taxBillData['scmBusinessNo']); | |
| //공급받는자 종사업장번호 (필수) 0자리 또는 4자리 | |
| $arrData['DMDER_SUB_BD_NO'] = ''; | |
| // 공급받는자 업태명 최대 20글자 | |
| $arrData['DMDER_BUSNSECT_NM'] = trim(iconv('UTF-8', 'EUC-KR', $taxBillData['scmService'])); | |
| // 공급받는자 종목명 최대 20글자 | |
| $arrData['DMDER_DETAIL_NM'] = trim(iconv('UTF-8', 'EUC-KR', $taxBillData['scmItem'])); | |
| // 공급받는자 대표자명 (필수) 최대 15글자 | |
| $arrData['DMDER_CHIEF_NM'] = trim(iconv('UTF-8', 'EUC-KR', $taxBillData['scmCeoNm'])); | |
| // 공급받는자 상호명 (필수) 최대 35글자 | |
| $arrData['DMDER_TRADE_NM'] = trim(iconv('UTF-8', 'EUC-KR', $taxBillData['scmCompanyNm'])); | |
| // 공급받는자 주소 최대 75글자 | |
| $arrData['DMDER_ADDR'] = trim(iconv('UTF-8', 'EUC-KR', $taxBillData['scmAddress'] . ' ' . $taxBillData['scmAddressSub'])); | |
| // 공급받는자 주담당자 이름 최대 15글자 | |
| $arrData['DMDER_MAIN_TX_OFFCR_NM'] = ''; | |
| // 공급받는자 주담당자 이메일 최대 40글자 | |
| 'THNG_PURCHS_DT' => gd_date_format('Ymd', $taxBillData['scmAdjustTaxBillDt']), | |
| 'THNG_SUP_AMT' => $taxBillData['scmAdjustTaxPrice'], | |
| 'THNG_TX' => $taxBillData['scmAdjustVatPrice'], | |
| 'THNG_NM' => trim(iconv('UTF-8', 'EUC-KR//IGNORE', '수수료')), | |
| ]; | |
| // 고도빌로 전송 | |
변경 후ScmAdjust.php
| class ScmAdjust | |
| { | |
| const GODOBILL_ENCODING = 'CP949'; | |
| const GODOBILL_CHARSET = self::GODOBILL_ENCODING . '//IGNORE'; | |
| public $scmAdjustState = []; | |
| public $scmAdjustKind = []; | |
| public $scmAdjustType = []; | |
| $arrData['DMDER_BUSNID'] = str_replace('-', '', $taxBillData['scmBusinessNo']); | |
| //공급받는자 종사업장번호 (필수) 0자리 또는 4자리 | |
| $arrData['DMDER_SUB_BD_NO'] = ''; | |
| // 공급받는자 업태명 최대 40글자 | |
| $arrData['DMDER_BUSNSECT_NM'] = StringUtils::encodeAndTruncate($taxBillData['scmService'], 40, self::GODOBILL_CHARSET); | |
| // 공급받는자 종목명 최대 40글자 | |
| $arrData['DMDER_DETAIL_NM'] = StringUtils::encodeAndTruncate($taxBillData['scmItem'], 40, self::GODOBILL_CHARSET); | |
| // 공급받는자 대표자명 (필수) 최대 30글자 | |
| $arrData['DMDER_CHIEF_NM'] = StringUtils::encodeAndTruncate($taxBillData['scmCeoNm'], 30, self::GODOBILL_CHARSET); | |
| // 공급받는자 상호명 (필수) 최대 70글자 | |
| $arrData['DMDER_TRADE_NM'] = StringUtils::encodeAndTruncate($taxBillData['scmCompanyNm'], 70, self::GODOBILL_CHARSET); | |
| // 공급받는자 주소 최대 150글자 | |
| $arrData['DMDER_ADDR'] = StringUtils::encodeAndTruncate($taxBillData['scmAddress'] . ' ' . $taxBillData['scmAddressSub'], 150, self::GODOBILL_CHARSET); | |
| // 공급받는자 주담당자 이름 최대 15글자 | |
| $arrData['DMDER_MAIN_TX_OFFCR_NM'] = ''; | |
| // 공급받는자 주담당자 이메일 최대 40글자 | |
| 'THNG_PURCHS_DT' => gd_date_format('Ymd', $taxBillData['scmAdjustTaxBillDt']), | |
| 'THNG_SUP_AMT' => $taxBillData['scmAdjustTaxPrice'], | |
| 'THNG_TX' => $taxBillData['scmAdjustVatPrice'], | |
| 'THNG_NM' => trim(iconv('UTF-8', self::GODOBILL_CHARSET, '수수료')), | |
| ]; | |
| // 고도빌로 전송 | |
변경 전AwsStorage.php
| } | |
| if ($tmpfname) { | |
| $this->delete($tmpfname); | |
| } | |
| fclose($stream); | |
| if ($return) { | |
변경 후AwsStorage.php
| } | |
| if ($tmpfname) { | |
| // S3 임시 객체 삭제 | |
| $this->delete($tmpfname); | |
| // 로컬 임시 파일 삭제 | |
| @unlink($tmpfname); | |
| } | |
| fclose($stream); | |
| if ($return) { | |
변경 전Validator.php
| * @return bool | |
| */ | |
| public static function validateIncludeEval($tmpName) { | |
| $fp = fopen($tmpName, 'rb'); | |
| $text = fread($fp, filesize($tmpName)); | |
| fclose($fp); | |
| /* | |
| * 1차 : preg_math_all 을 통해 php 구문이 존재할 경우 구문안의 문자열 추출 | |
| * 2차 : 구문안의 문자열 중 <? 존재할 경우 explode 배열 만든 후 마지막 <? 데이터만 추출 (예 : <? 문자1 <? 문자2 <? 문자3 ?>) | |
| * 3차 : 최종 추출한 문자열에 불가 문자 여부를 검출 (대소문자 구분 x) | |
| */ | |
| $checkContent = nl2br(str_replace(["\r\n", "\r", "\n"], "", $text)); | |
| if (preg_match_all('/(?<=\<\?)(.*?)(?=\?>)/', $checkContent, $matches)) { | |
| for ($i = 0; $i < gd_count($matches[0]); $i++) { | |
| $checkText = $matches[1][$i]; | |
| $checkTextArr = explode('<?', $checkText); | |
| $checkVal = $checkTextArr[gd_array_last_key($checkTextArr)]; | |
| // 추출 문자내 불가 문자 검증 | |
| if (preg_match('/eval|\<\?php|\$_POST|\$_GET|\$_REQUEST/i', $checkVal)) { | |
| return false; | |
| } | |
| } | |
| } | |
| return true; | |
| } | |
| /** | |
변경 후Validator.php
| * @return bool | |
| */ | |
| public static function validateIncludeEval($tmpName) { | |
| try { | |
| $fp = fopen($tmpName, 'rb'); | |
| $text = fread($fp, filesize($tmpName)); | |
| fclose($fp); | |
| /* | |
| * 1차 : preg_math_all 을 통해 php 구문이 존재할 경우 구문안의 문자열 추출 | |
| * 2차 : 구문안의 문자열 중 <? 존재할 경우 explode 배열 만든 후 마지막 <? 데이터만 추출 (예 : <? 문자1 <? 문자2 <? 문자3 ?>) | |
| * 3차 : 최종 추출한 문자열에 불가 문자 여부를 검출 (대소문자 구분 x) | |
| */ | |
| $checkContent = nl2br(str_replace(["\r\n", "\r", "\n"], "", $text)); | |
| if (preg_match_all('/(?<=\<\?)(.*?)(?=\?>)/', $checkContent, $matches)) { | |
| for ($i = 0; $i < gd_count($matches[0]); $i++) { | |
| $checkText = $matches[1][$i]; | |
| $checkTextArr = explode('<?', $checkText); | |
| $checkVal = $checkTextArr[gd_array_last_key($checkTextArr)]; | |
| // 추출 문자내 불가 문자 검증 | |
| if (preg_match('/eval|\<\?php|\$_POST|\$_GET|\$_REQUEST/i', $checkVal)) { | |
| return false; | |
| } | |
| } | |
| } | |
| return true; | |
| } catch (\Throwable) { | |
| return false; | |
| } | |
| } | |
| /** | |
변경 전Wish.php
| use Session; | |
| use Exception; | |
| use App; | |
| class Wish | |
| { | |
| $this->setWishDelete($sno); | |
| } | |
| return true; | |
| } | |
변경 후Wish.php
| use Session; | |
| use Exception; | |
| use App; | |
| use Origin\Service\WebHook\CartWebHookService; | |
| class Wish | |
| { | |
| $this->setWishDelete($sno); | |
| } | |
| $cartWebHookService = \App::getInstance(CartWebHookService::class); | |
| $cartWebHookService->sendCartMigratedWishWebHook( | |
| $cartSno, | |
| Session::get('member.memNo'), | |
| $siteKey, | |
| array_column($changeGoodsNoArray ?? [], 'goodsNo') | |
| ); | |
| return true; | |
| } | |
변경 전NaverDbUrl.php
| protected function getNaverReviewCount(array $data): int | |
| { | |
| $externalNaverReviewCnt = $this->getExternalNaverReviewCnt($data['goodsNo']); | |
| if ($this->config['naverReviewChannel'] == 'plusReview') { | |
| $reviewCnt = $data['plusReviewCnt']; | |
| } else if ($this->config['naverReviewChannel'] == 'both') { | |
| $reviewCnt = max(0,$data['plusReviewCnt'] + $data['reviewCnt'] - $externalNaverReviewCnt); | |
| } else { | |
| $reviewCnt = max(0,$data['reviewCnt'] - $externalNaverReviewCnt); | |
| } | |
| // 크리마리뷰 카운팅 사용 | |
| $crema = \App::load('Component\\Service\\Crema'); | |
| if ($crema->getUseEpFl()) { | |
| $naverReviewCnt = max(0, $data['naverReviewCnt']); | |
| $reviewCnt = max(0, $data['cremaReviewCnt'] - $naverReviewCnt - $externalNaverReviewCnt); // 네이버 리뷰 카운트는 제외 처리 | |
| } | |
| return $reviewCnt; | |
| return $this->db->query_fetch($strSQL, $arrBind, false)['cnt']; | |
| } | |
| } | |
변경 후NaverDbUrl.php
| protected function getNaverReviewCount(array $data): int | |
| { | |
| $externalNaverReviewCnt = $this->getExternalNaverReviewCnt($data['goodsNo']); | |
| $externalNaverPlusReviewCnt = $this->getExternalNaverPlusReviewCnt($data['goodsNo']); | |
| if ($this->config['naverReviewChannel'] == 'plusReview') { | |
| $reviewCnt = max(0, $data['plusReviewCnt'] - $externalNaverPlusReviewCnt); | |
| } else if ($this->config['naverReviewChannel'] == 'both') { | |
| $reviewCnt = max(0, $data['plusReviewCnt'] + $data['reviewCnt'] - $externalNaverReviewCnt - $externalNaverPlusReviewCnt); | |
| } else { | |
| $reviewCnt = max(0, $data['reviewCnt'] - $externalNaverReviewCnt); | |
| } | |
| // 크리마리뷰 카운팅 사용 | |
| $crema = \App::load('Component\\Service\\Crema'); | |
| if ($crema->getUseEpFl()) { | |
| $naverReviewCnt = max(0, $data['naverReviewCnt']); | |
| $reviewCnt = max(0, $data['cremaReviewCnt'] - $naverReviewCnt - $externalNaverReviewCnt - $externalNaverPlusReviewCnt); // 네이버 리뷰 카운트는 제외 처리 | |
| } | |
| return $reviewCnt; | |
| return $this->db->query_fetch($strSQL, $arrBind, false)['cnt']; | |
| } | |
| /** | |
| * @param int $goodsNo 상품 번호 | |
| * @return int 외부 네이버 플러스리뷰 갯수 | |
| */ | |
| private function getExternalNaverPlusReviewCnt(int $goodsNo): int | |
| { | |
| if ($this->db === null) { | |
| $this->db = \App::load('DB'); | |
| } | |
| $arrBind = []; | |
| $table = DB_PLUS_REVIEW_ARTICLE; | |
| $this->db->strField = "COUNT(*) as cnt"; | |
| $this->db->strWhere = "goodsNo = ? AND external_naver_review_flag = ?"; | |
| $this->db->bind_param_push($arrBind, 'i', $goodsNo); | |
| $this->db->bind_param_push($arrBind, 's', 'Y'); | |
| $query = $this->db->query_complete(); | |
| $strSQL = 'SELECT ' . array_shift($query) . ' FROM ' . $table . ' ' . implode(' ', $query); | |
| return $this->db->query_fetch($strSQL, $arrBind, false)['cnt']; | |
| } | |
| } | |
변경 전OrderChangePsController.php
| use App; | |
| use Bundle\Component\Godo\NaverPayAPI; | |
| use Exception; | |
| use Request; | |
| use Framework\Debug\Exception\LayerNotReloadException; | |
| use Framework\Debug\Exception\LayerException; | |
| /** | |
| * 주문 상태 변경 처리 페이지 | |
| $orderReorderCalculation = App::load(\Component\Order\ReOrderCalculation::class); | |
| $dbUrl = \App::load('\\Component\\Marketing\\DBUrl'); | |
| $paycoConfig = $dbUrl->getConfig('payco', 'config'); | |
| $postValue = Request::post()->toArray(); | |
| switch ($postValue['mode']) { | |
| case "back" : // 반품 | |
| try { | |
| $return = \DB::transaction(function () use ($orderReorderCalculation, $postValue) { | |
| return $orderReorderCalculation->setBackRefundOrderGoods($postValue, 'back'); | |
| }); | |
| $script = "parent.opener.location.href='./order_view.php?orderNo=".$postValue['orderNo']."';parent.self.close();"; | |
| $this->layerNotReload(__('반품 접수가 되었습니다.'), $script); | |
| } catch (Exception $e) { | |
| throw new LayerNotReloadException($e->getMessage()); | |
| } | |
| break; | |
| case "refund" : // 환불 접수 | |
| try { | |
| $return = \DB::transaction(function () use ($orderReorderCalculation, $postValue) { | |
| return $orderReorderCalculation->setBackRefundOrderGoods($postValue, 'refund'); | |
| }); | |
| if($postValue['orderChannelFl'] == 'naverpay') { | |
| $script = "parent.opener.location.href='./order_view.php?orderNo=".$postValue['orderNo']."';parent.self.close();"; | |
| $this->layerNotReload(__('환불 처리가 완료되었습니다.'), $script); | |
| $this->layerNotReload(__('환불 접수가 되었습니다.'), $script); | |
| } | |
| } catch (Exception $e) { | |
| throw new LayerNotReloadException($e->getMessage()); | |
| } | |
| break; | |
| //맞교환 | |
| case 'sameExchange' : | |
| try { | |
| $return = \DB::transaction(function () use ($orderReorderCalculation, $postValue) { | |
| return $orderReorderCalculation->setSameExchangeOrderGoods($postValue); | |
| }); | |
| if ($return) { | |
| $script = "parent.opener.location.href='./order_view.php?orderNo=".$postValue['orderNo']."';parent.self.close();"; | |
| $this->layerNotReload(__('동일상품교환 처리가 완료 되었습니다.'), $script); | |
| } | |
| } | |
| catch (Exception $e) { | |
| throw new LayerNotReloadException($e->getMessage()); | |
| } | |
| break; | |
| //다른상품교환 | |
| case 'anotherExchange' : | |
| try { | |
| $return = \DB::transaction(function () use ($orderReorderCalculation, $postValue) { | |
| return $orderReorderCalculation->setAnotherExchangeOrderGoods($postValue); | |
| }); | |
| if ($return) { | |
| $script = "parent.opener.location.href='./order_view.php?orderNo=".$postValue['orderNo']."';parent.self.close();"; | |
| $this->layerNotReload(__('다른상품교환 처리가 완료 되었습니다.'), $script); | |
| } | |
| } | |
| catch (Exception $e) { | |
| throw new LayerNotReloadException($e->getMessage()); | |
| } | |
| break; | |
| break; | |
| } | |
| } | |
| } | |
변경 후OrderChangePsController.php
| use App; | |
| use Bundle\Component\Godo\NaverPayAPI; | |
| use Component\Order\UserHandleAutoProcess; | |
| use Exception; | |
| use Request; | |
| use Framework\Debug\Exception\LayerNotReloadException; | |
| use Framework\Debug\Exception\LayerException; | |
| use Component\Sms\Code; | |
| use Component\Sms\SmsAutoOrder; | |
| use Origin\Enum\Order\UserHandleMode; | |
| /** | |
| * 주문 상태 변경 처리 페이지 | |
| $orderReorderCalculation = App::load(\Component\Order\ReOrderCalculation::class); | |
| $dbUrl = \App::load('\\Component\\Marketing\\DBUrl'); | |
| $paycoConfig = $dbUrl->getConfig('payco', 'config'); | |
| $autoProcess = App::getInstance(UserHandleAutoProcess::class); | |
| $postValue = Request::post()->toArray(); | |
| switch ($postValue['mode']) { | |
| case "back" : // 반품 | |
| try { | |
| $autoResult = ['approve' => [], 'reject' => []]; | |
| \DB::transaction(function () use ($orderReorderCalculation, $autoProcess, $postValue, &$autoResult) { | |
| // 고객 클레임 신청 건의 자동 승인/거절 처리 (관리자 반품 접수 = 'b') | |
| if (!empty($postValue['back']['statusCheck'])) { | |
| $orderGoodsSnoList = array_keys($postValue['back']['statusCheck']); | |
| $autoResult = $autoProcess->autoApproveOrReject($postValue['orderNo'], $orderGoodsSnoList, UserHandleMode::RETURN); | |
| } | |
| return $orderReorderCalculation->setBackRefundOrderGoods($postValue, 'back'); | |
| }); | |
| // 트랜잭션 커밋 후 자동 승인/거절 건의 SMS/알림톡 자동 발송 | |
| $this->sendAutoApproveRejectSms($postValue['orderNo'], $autoResult); | |
| $script = "parent.opener.location.href='./order_view.php?orderNo=".$postValue['orderNo']."';parent.self.close();"; | |
| $this->layerNotReload(__('반품 접수가 되었습니다.'), $script); | |
| } catch (Exception $e) { | |
| $autoResult = ['approve' => [], 'reject' => []]; // 롤백 시 참조 변수 초기화 | |
| throw new LayerNotReloadException($e->getMessage()); | |
| } | |
| break; | |
| case "refund" : // 환불 접수 | |
| try { | |
| $autoResult = ['approve' => [], 'reject' => []]; | |
| \DB::transaction(function () use ($orderReorderCalculation, $autoProcess, $postValue, &$autoResult) { | |
| // 고객 클레임 신청 건의 자동 승인/거절 처리 (관리자 환불 접수 = 'r') | |
| if (!empty($postValue['refund']['statusCheck'])) { | |
| $orderGoodsSnoList = array_keys($postValue['refund']['statusCheck']); | |
| $autoResult = $autoProcess->autoApproveOrReject($postValue['orderNo'], $orderGoodsSnoList, UserHandleMode::REFUND); | |
| } | |
| return $orderReorderCalculation->setBackRefundOrderGoods($postValue, 'refund'); | |
| }); | |
| // 트랜잭션 커밋 후 자동 승인/거절 건의 SMS/알림톡 자동 발송 | |
| $this->sendAutoApproveRejectSms($postValue['orderNo'], $autoResult); | |
| if($postValue['orderChannelFl'] == 'naverpay') { | |
| $script = "parent.opener.location.href='./order_view.php?orderNo=".$postValue['orderNo']."';parent.self.close();"; | |
| $this->layerNotReload(__('환불 처리가 완료되었습니다.'), $script); | |
| $this->layerNotReload(__('환불 접수가 되었습니다.'), $script); | |
| } | |
| } catch (Exception $e) { | |
| $autoResult = ['approve' => [], 'reject' => []]; // 롤백 시 참조 변수 초기화 | |
| throw new LayerNotReloadException($e->getMessage()); | |
| } | |
| break; | |
| //맞교환 | |
| case 'sameExchange' : | |
| try { | |
| $autoResult = ['approve' => [], 'reject' => []]; | |
| $return = \DB::transaction(function () use ($orderReorderCalculation, $autoProcess, $postValue, &$autoResult) { | |
| // 고객 클레임 신청 건의 자동 승인/거절 처리 (관리자 교환 접수 = 'e') | |
| if (!empty($postValue['orderGoodsSno'])) { | |
| $orderGoodsSnoList = explode(INT_DIVISION, $postValue['orderGoodsSno']); | |
| $autoResult = $autoProcess->autoApproveOrReject($postValue['orderNo'], $orderGoodsSnoList, UserHandleMode::EXCHANGE); | |
| } | |
| return $orderReorderCalculation->setSameExchangeOrderGoods($postValue); | |
| }); | |
| // 트랜잭션 커밋 후 자동 승인/거절 건의 SMS/알림톡 자동 발송 | |
| $this->sendAutoApproveRejectSms($postValue['orderNo'], $autoResult); | |
| if ($return) { | |
| $script = "parent.opener.location.href='./order_view.php?orderNo=".$postValue['orderNo']."';parent.self.close();"; | |
| $this->layerNotReload(__('동일상품교환 처리가 완료 되었습니다.'), $script); | |
| } | |
| } | |
| catch (Exception $e) { | |
| $autoResult = ['approve' => [], 'reject' => []]; // 롤백 시 참조 변수 초기화 | |
| throw new LayerNotReloadException($e->getMessage()); | |
| } | |
| break; | |
| //다른상품교환 | |
| case 'anotherExchange' : | |
| try { | |
| $autoResult = ['approve' => [], 'reject' => []]; | |
| $return = \DB::transaction(function () use ($orderReorderCalculation, $autoProcess, $postValue, &$autoResult) { | |
| // 고객 클레임 신청 건의 자동 승인/거절 처리 (관리자 교환 접수 = 'e') | |
| if (!empty($postValue['beforeOrderGoodsSno'])) { | |
| $orderGoodsSnoList = explode(INT_DIVISION, $postValue['beforeOrderGoodsSno']); | |
| $autoResult = $autoProcess->autoApproveOrReject($postValue['orderNo'], $orderGoodsSnoList, UserHandleMode::EXCHANGE); | |
| } | |
| return $orderReorderCalculation->setAnotherExchangeOrderGoods($postValue); | |
| }); | |
| // 트랜잭션 커밋 후 자동 승인/거절 건의 SMS/알림톡 자동 발송 | |
| $this->sendAutoApproveRejectSms($postValue['orderNo'], $autoResult); | |
| if ($return) { | |
| $script = "parent.opener.location.href='./order_view.php?orderNo=".$postValue['orderNo']."';parent.self.close();"; | |
| $this->layerNotReload(__('다른상품교환 처리가 완료 되었습니다.'), $script); | |
| } | |
| } | |
| catch (Exception $e) { | |
| $autoResult = ['approve' => [], 'reject' => []]; // 롤백 시 참조 변수 초기화 | |
| throw new LayerNotReloadException($e->getMessage()); | |
| } | |
| break; | |
| break; | |
| } | |
| } | |
| /** | |
| * autoApproveOrReject 결과를 기반으로 SMS/알림톡 자동 발송 | |
| * | |
| * 자동 승인/거절된 건에 대해 고객에게 SMS/알림톡을 자동 발송한다. | |
| * (수동 승인/거절 시의 OrderPsController::user_handle_accept / user_handle_reject 흐름과 동일) | |
| * | |
| * @param string $orderNo 주문번호 | |
| * @param array $autoResult UserHandleAutoProcess::autoApproveOrReject()의 반환값 | |
| * @return void | |
| */ | |
| protected function sendAutoApproveRejectSms(string $orderNo, array $autoResult): void | |
| { | |
| if (empty($orderNo) || empty($autoResult)) { | |
| return; | |
| } | |
| // 승인 건 SMS 발송 | |
| if (!empty($autoResult['approve'])) { | |
| $smsAutoOrder = new SmsAutoOrder(['smsAutoCodeType' => Code::ADMIN_APPROVAL]); | |
| foreach ($autoResult['approve'] as $row) { | |
| if (empty($row['orderGoodsSno'])) { | |
| continue; | |
| } | |
| $smsAutoOrder->setOrderNo($orderNo); | |
| $smsAutoOrder->setOrderGoodsNo($row['orderGoodsSno']); | |
| $smsAutoOrder->autoSend(); | |
| } | |
| } | |
| // 거절 건 SMS 발송 | |
| if (!empty($autoResult['reject'])) { | |
| $smsAutoOrder = new SmsAutoOrder(['smsAutoCodeType' => Code::ADMIN_REJECT]); | |
| foreach ($autoResult['reject'] as $row) { | |
| if (empty($row['orderGoodsSno'])) { | |
| continue; | |
| } | |
| $smsAutoOrder->setOrderNo($orderNo); | |
| $smsAutoOrder->setOrderGoodsNo($row['orderGoodsSno']); | |
| $smsAutoOrder->autoSend(); | |
| } | |
| } | |
| } | |
| } | |
변경 전BaseAgreementPsController.php
| \DB::begin_tran(); | |
| $buyerInform->saveAgreement(Request::post()->get('agreement'), Request::post()->get('agreementModeFl'), $mallSno); | |
| $baseAgreementPolicy->setRequestFiles(Request::files()->all()); | |
| if (Request::post()->get('agreementModeFl', '') == 'y') { | |
| $baseAgreementPolicy->setFairTradeLogo( | |
| [ | |
| 'logoFl' => Request::post()->get('logoFl', 'default'), | |
| ] | |
| ); | |
| $baseAgreementPolicy->saveAgreementDate(); | |
| $this->layer(__('저장이 완료되었습니다.')); | |
| } else { | |
| $baseAgreementPolicy->setFairTradeLogo( | |
| [ | |
| $kakaoSyncSettingService = \App::getInstance(KakaoSyncSettingService::class); | |
| $kakaoSyncSettingService->syncSettingWhenSaveTerms(); | |
| \DB::commit(); | |
| $this->json( | |
| [ | |
| 'message' => __('저장이 완료되었습니다.'), | |
| 'code' => 200, | |
| ] | |
| ); | |
| break; | |
| } | |
| } catch (\Exception $e) { | |
변경 후BaseAgreementPsController.php
| \DB::begin_tran(); | |
| $buyerInform->saveAgreement(Request::post()->get('agreement'), Request::post()->get('agreementModeFl'), $mallSno); | |
| $baseAgreementPolicy->setRequestFiles(Request::files()->all()); | |
| $isAgreementMode = Request::post()->get('agreementModeFl', '') == 'y'; | |
| if ($isAgreementMode) { | |
| $baseAgreementPolicy->setFairTradeLogo( | |
| [ | |
| 'logoFl' => Request::post()->get('logoFl', 'default'), | |
| ] | |
| ); | |
| $baseAgreementPolicy->saveAgreementDate(); | |
| } else { | |
| $baseAgreementPolicy->setFairTradeLogo( | |
| [ | |
| $kakaoSyncSettingService = \App::getInstance(KakaoSyncSettingService::class); | |
| $kakaoSyncSettingService->syncSettingWhenSaveTerms(); | |
| \DB::commit(); | |
| if ($isAgreementMode) { | |
| $this->layer(__('저장이 완료되었습니다.')); | |
| } else { | |
| $this->json( | |
| [ | |
| 'message' => __('저장이 완료되었습니다.'), | |
| 'code' => 200, | |
| ] | |
| ); | |
| } | |
| break; | |
| } | |
| } catch (\Exception $e) { | |
변경 전OrderBasicController.php
| use Component\Order\OrderMultiShipping; | |
| use Component\Member\Manager; | |
| use Framework\Debug\Exception\Except; | |
| use Origin\Enum\Payment\Tosspay\SettingMode; | |
| /** | |
| gd_isset($data['autoDeliveryCompleteDay'], '7'); | |
| gd_isset($data['autoOrderConfirmFl'], 'n'); | |
| gd_isset($data['autoOrderConfirmDay'], '7'); | |
| gd_isset($data['userHandleFl'], (gd_is_plus_shop(PLUSSHOP_CODE_USEREXCHANGE) ? 'y' : 'n')); | |
| gd_isset($data['reagreeConfirmFl'], 'y'); | |
| gd_isset($data['handOrderType'], 'online'); | |
| gd_isset($data['useMultiShippingFl'], 'n'); | |
변경 후OrderBasicController.php
| use Component\Order\OrderMultiShipping; | |
| use Component\Member\Manager; | |
| use Framework\Debug\Exception\Except; | |
| use Framework\Utility\GodoUtils; | |
| use Origin\Enum\Payment\Tosspay\SettingMode; | |
| /** | |
| gd_isset($data['autoDeliveryCompleteDay'], '7'); | |
| gd_isset($data['autoOrderConfirmFl'], 'n'); | |
| gd_isset($data['autoOrderConfirmDay'], '7'); | |
| // 고객 클레임 신청 기능 사용설정 기본값 | |
| // - claim-auto-process 배포일 이후 신규 설치 상점: 무조건 'n'(사용안함) | |
| $claimAutoProcessDate = GodoUtils::getFunctionInstallDateFromYml('claim-auto-process'); | |
| $isNewShopAfterClaimAutoProcess = !GodoUtils::getInstalledDate($claimAutoProcessDate); | |
| if ($isNewShopAfterClaimAutoProcess) { | |
| gd_isset($data['userHandleFl'], 'n'); | |
| } else { | |
| gd_isset($data['userHandleFl'], (gd_is_plus_shop(PLUSSHOP_CODE_USEREXCHANGE) ? 'y' : 'n')); | |
| } | |
| gd_isset($data['reagreeConfirmFl'], 'y'); | |
| gd_isset($data['handOrderType'], 'online'); | |
| gd_isset($data['useMultiShippingFl'], 'n'); | |
변경 전BoardPsController.php
| $this->json(['result' => 'cancel']); | |
| } | |
| // 파일 업로드 취약점 조치 | |
| if (Validator::validateIncludeEval($fileData['tmp_name']) === false) { | |
| throw new AlertBackException('업로드 할 수 없는 파일입니다.'); | |
변경 후BoardPsController.php
| $this->json(['result' => 'cancel']); | |
| } | |
| // 업로드 파일 용량 확인 | |
| $boardConfig = new BoardConfig($req['bdId']); | |
| (new ImageUploadService())->validateUploadSize($fileData, $boardConfig->cfg['bdUploadMaxSize']); | |
| // 파일 업로드 취약점 조치 | |
| if (Validator::validateIncludeEval($fileData['tmp_name']) === false) { | |
| throw new AlertBackException('업로드 할 수 없는 파일입니다.'); | |
변경 전WriteController.php
| use Component\Goods\GoodsCate; | |
| use Component\Page\Page; | |
| use Framework\Debug\Exception\AlertOnlyException; | |
| use Framework\Debug\Exception\RedirectLoginException; | |
| use Framework\Debug\Exception\RequiredLoginException; | |
| use Request; | |
| use View\Template; | |
| use Component\Validator\Validator; | |
| use Framework\Debug\Exception\AlertBackException; | |
| use Globals; | |
| use Component\Board\BoardWrite; | |
| use Framework\Utility\Strings; | |
| use Framework\StaticProxy\Proxy\Session; | |
| class WriteController extends \Controller\Front\Controller | |
| { | |
| } | |
| } | |
| $this->setData('bdWrite', $bdWrite); | |
| $this->setData('queryString', $qryStr); | |
| $this->setData('req', gd_htmlspecialchars($boardWrite->req)); | |
변경 후WriteController.php
| use Component\Goods\GoodsCate; | |
| use Component\Page\Page; | |
| use Framework\Debug\Exception\RedirectLoginException; | |
| use Framework\Debug\Exception\RequiredLoginException; | |
| use Framework\Utility\FileUtils; | |
| use Request; | |
| use View\Template; | |
| use Component\Validator\Validator; | |
| use Framework\Debug\Exception\AlertBackException; | |
| use Component\Board\BoardWrite; | |
| use Framework\Utility\Strings; | |
| class WriteController extends \Controller\Front\Controller | |
| { | |
| } | |
| } | |
| // MB 단위로 저장된 값 byte 단위로 변경 | |
| $uploadMaxSize = FileUtils::megabytesToBytes((int)$bdWrite['cfg']['bdUploadMaxSize']); | |
| $this->setData('uploadMaxSize', min(FileUtils::getMaxUploadSize(applyDefault: false), $uploadMaxSize)); | |
| $this->setData('bdWrite', $bdWrite); | |
| $this->setData('queryString', $qryStr); | |
| $this->setData('req', gd_htmlspecialchars($boardWrite->req)); | |
변경 전CartPsController.php
| use Component\Cart\Cart; | |
| use Exception; | |
| use Framework\Debug\Exception\AlertBackException; | |
| use Framework\Debug\Exception\AlertOnlyException; | |
| use Framework\Debug\Exception\AlertRedirectException; | |
| } | |
| // 장바구니 추가 | |
| $cart->saveInfoCart($postValue); | |
| if ($request->isAjax()) { | |
| $this->json([ | |
| 'error' => 0, | |
| // 장바구니 추가 | |
| try { | |
| $returnData = $cart->saveInfoCart($cartValue, $directBuy, 'related'); | |
| }catch (Exception $e) { | |
| if (Request::isAjax()) { | |
| $this->json([ | |
변경 후CartPsController.php
| use Component\Cart\Cart; | |
| use Exception; | |
| use Origin\Service\WebHook\CartWebHookService; | |
| use Framework\Debug\Exception\AlertBackException; | |
| use Framework\Debug\Exception\AlertOnlyException; | |
| use Framework\Debug\Exception\AlertRedirectException; | |
| } | |
| // 장바구니 추가 | |
| $addedGoods = $cart->saveInfoCart($postValue); | |
| $cartWebHookService = \App::getInstance(CartWebHookService::class); | |
| $cartWebHookService->sendCartUpdatedWebHook($addedGoods, 'CREATED'); | |
| if ($request->isAjax()) { | |
| $this->json([ | |
| 'error' => 0, | |
| // 장바구니 추가 | |
| try { | |
| $returnData = $cart->saveInfoCart($cartValue, $directBuy, 'related'); | |
| $cartWebHookService = \App::getInstance(CartWebHookService::class); | |
| $cartWebHookService->sendCartUpdatedWebHook($returnData, 'CREATED'); | |
| }catch (Exception $e) { | |
| if (Request::isAjax()) { | |
| $this->json([ | |
변경 전ReorderPsController.php
| use Exception; | |
| use Framework\Http\Response; | |
| use Framework\Utility\StringUtils; | |
| use Request; | |
| /** | |
| $reorderCart->moveDirectToNormalCart($cartSnoList); | |
| } | |
| $result = $this->handleReorderResult($cartMode, $reorderCartDataList, $availableReorderCartDataList, $isPurchasable); | |
| $this->json([ | |
변경 후ReorderPsController.php
| use Exception; | |
| use Framework\Http\Response; | |
| use Framework\Utility\StringUtils; | |
| use Origin\Service\WebHook\CartWebHookService; | |
| use Request; | |
| /** | |
| $reorderCart->moveDirectToNormalCart($cartSnoList); | |
| } | |
| $flatCartSnos = []; | |
| foreach (($cartSnoList ?? []) as $snoArray) { | |
| if (is_array($snoArray)) { | |
| $flatCartSnos = array_merge($flatCartSnos, $snoArray); | |
| } | |
| } | |
| $cartWebHookService = \App::getInstance(CartWebHookService::class); | |
| $cartWebHookService->sendCartUpdatedWebHook($flatCartSnos, 'CREATED'); | |
| $result = $this->handleReorderResult($cartMode, $reorderCartDataList, $availableReorderCartDataList, $isPurchasable); | |
| $this->json([ | |
변경 전BoardPsController.php
| $this->json(['result' => 'cancel']); | |
| } | |
| // 파일 업로드 취약점 조치 | |
| if (Validator::validateIncludeEval($fileData['tmp_name']) === false) { | |
| throw new AlertBackException('업로드 할 수 없는 파일입니다.'); | |
변경 후BoardPsController.php
| $this->json(['result' => 'cancel']); | |
| } | |
| // 업로드 파일 용량 확인 | |
| $boardConfig = new BoardConfig($req['bdId']); | |
| (new ImageUploadService())->validateUploadSize($fileData, $boardConfig->cfg['bdUploadMaxSize']); | |
| // 파일 업로드 취약점 조치 | |
| if (Validator::validateIncludeEval($fileData['tmp_name']) === false) { | |
| throw new AlertBackException('업로드 할 수 없는 파일입니다.'); | |
변경 전WriteController.php
| use Component\Goods\GoodsCate; | |
| use Component\Page\Page; | |
| use Framework\Debug\Exception\AlertCloseException; | |
| use Framework\Debug\Exception\AlertOnlyException; | |
| use Framework\Debug\Exception\AlertRedirectCloseException; | |
| use Framework\Debug\Exception\AlertRedirectException; | |
| use Framework\Debug\Exception\AlertReloadException; | |
| use Framework\Debug\Exception\RedirectLoginException; | |
| use Framework\Debug\Exception\RequiredLoginException; | |
| use Request; | |
| use View\Template; | |
| use Component\Validator\Validator; | |
| use Framework\Debug\Exception\AlertBackException; | |
| use Globals; | |
| use Component\Board\BoardWrite; | |
| use Framework\Utility\Strings; | |
| use Framework\StaticProxy\Proxy\Session; | |
| class WriteController extends \Controller\Mobile\Controller | |
| { | |
| $bdWrite['cfg']['bdFooter'] = str_replace('title="'.$title.'"', 'title="'.$title.'" alt="'.$title.'"', $bdWrite['cfg']['bdFooter']); | |
| } | |
| } | |
| } catch (RequiredLoginException $e) { | |
| $url = '../member/login.php?returnUrl='.urlencode('/board/write.php?bdId='.Request::get()->get('bdId')); | |
| $this->js("alert('".$e->getMessage()."');location.href='".$url."';"); | |
| $this->getView()->setDefine('header', 'outline/_share_header.html'); | |
| $this->getView()->setDefine('footer', 'outline/_share_footer.html'); | |
| } | |
| $this->setData('bdWrite', $bdWrite); | |
| $this->setData('goodsNo', $goodsNo); | |
| $this->setData('queryString', $qryStr); | |
변경 후WriteController.php
| use Component\Goods\GoodsCate; | |
| use Component\Page\Page; | |
| use Framework\Debug\Exception\AlertCloseException; | |
| use Framework\Debug\Exception\AlertRedirectException; | |
| use Framework\Debug\Exception\RedirectLoginException; | |
| use Framework\Debug\Exception\RequiredLoginException; | |
| use Framework\Utility\FileUtils; | |
| use Request; | |
| use View\Template; | |
| use Component\Validator\Validator; | |
| use Framework\Debug\Exception\AlertBackException; | |
| use Component\Board\BoardWrite; | |
| use Framework\Utility\Strings; | |
| class WriteController extends \Controller\Mobile\Controller | |
| { | |
| $bdWrite['cfg']['bdFooter'] = str_replace('title="'.$title.'"', 'title="'.$title.'" alt="'.$title.'"', $bdWrite['cfg']['bdFooter']); | |
| } | |
| } | |
| } catch (RequiredLoginException $e) { | |
| $url = '../member/login.php?returnUrl='.urlencode('/board/write.php?bdId='.Request::get()->get('bdId')); | |
| $this->js("alert('".$e->getMessage()."');location.href='".$url."';"); | |
| $this->getView()->setDefine('header', 'outline/_share_header.html'); | |
| $this->getView()->setDefine('footer', 'outline/_share_footer.html'); | |
| } | |
| // MB 단위로 저장된 값 byte 단위로 변경 | |
| $uploadMaxSize = FileUtils::megabytesToBytes((int)$bdWrite['cfg']['bdUploadMaxSize']); | |
| $this->setData('uploadMaxSize', min(FileUtils::getMaxUploadSize(applyDefault: false), $uploadMaxSize)); | |
| $this->setData('bdWrite', $bdWrite); | |
| $this->setData('goodsNo', $goodsNo); | |
| $this->setData('queryString', $qryStr); | |
변경 전OrderUserHandleRepository.php
변경 후OrderUserHandleRepository.php
| <?php | |
| /* | |
| * Copyright (C) 2026 NHN COMMERCE. - All Rights Reserved | |
| * | |
| * Unauthorized copying or redistribution of this file in source and binary forms via any medium | |
| * is strictly prohibited. | |
| */ | |
| namespace Bundle\Repository\Order; | |
| use Origin\Enum\Order\UserHandleFl; | |
| use Origin\Enum\Order\UserHandleMode; | |
| use Origin\Model\Order\OrderUserHandle; | |
| class OrderUserHandleRepository | |
| { | |
| /** | |
| * 자동 승인/거절 대상이 되는 고객 클레임 신청 건 조회 | |
| * | |
| * SELECT sno, userHandleMode, userHandleGoodsNo | |
| * FROM es_orderUserHandle | |
| * WHERE orderNo = ? | |
| * AND userHandleGoodsNo IN (...) | |
| * AND userHandleFl = 'r' | |
| * AND userHandleMode IN (...) | |
| * | |
| * @param string $orderNo 주문번호 | |
| * @param int[] $orderGoodsSnoList userHandleGoodsNo (es_orderGoods.sno) 목록 | |
| * @return array<int, array{sno:int, userHandleMode:string, userHandleGoodsNo:int}> | |
| */ | |
| public function findPendingUserHandlesForAutoProcess(string $orderNo, array $orderGoodsSnoList): array | |
| { | |
| if (empty($orderNo) || empty($orderGoodsSnoList)) { | |
| return []; | |
| } | |
| $allowedModes = array_map( | |
| static fn(UserHandleMode $m) => $m->value, | |
| UserHandleMode::cases() | |
| ); | |
| return OrderUserHandle::query() | |
| ->select(['sno', 'userHandleMode', 'userHandleGoodsNo']) | |
| ->where('orderNo', $orderNo) | |
| ->whereIn('userHandleGoodsNo', array_map('intval', $orderGoodsSnoList)) | |
| ->where('userHandleFl', UserHandleFl::REQUEST->value) | |
| ->whereIn('userHandleMode', $allowedModes) | |
| ->get() | |
| ->toArray(); | |
| } | |
| } | |
변경 전GlobalSelectWidget.php
| public function index() | |
| { | |
| $mallIcon = gd_policy('design.mallIconType'); | |
| gd_isset($mallIcon['mallIcon'][1], 'ico_kr.png'); | |
| gd_isset($mallIcon['mallIcon'][2], 'ico_us.png'); | |
| gd_isset($mallIcon['mallIcon'][3], 'ico_cn.png'); | |
변경 후GlobalSelectWidget.php
| public function index() | |
| { | |
| $mallIcon = gd_policy('design.mallIconType'); | |
| if (!isset($mallIcon['mallIcon']) || !is_array($mallIcon['mallIcon'])) { | |
| $mallIcon['mallIcon'] = []; | |
| } | |
| gd_isset($mallIcon['mallIcon'][1], 'ico_kr.png'); | |
| gd_isset($mallIcon['mallIcon'][2], 'ico_us.png'); | |
| gd_isset($mallIcon['mallIcon'][3], 'ico_cn.png'); | |
변경 전GlobalSelectWidget.php
| public function index() | |
| { | |
| $mallIcon = gd_policy('design.mallIconType'); | |
| gd_isset($mallIcon['mallIconMobile'][1], 'ico_kr.png'); | |
| gd_isset($mallIcon['mallIconMobile'][2], 'ico_us.png'); | |
| gd_isset($mallIcon['mallIconMobile'][3], 'ico_cn.png'); | |
변경 후GlobalSelectWidget.php
| public function index() | |
| { | |
| $mallIcon = gd_policy('design.mallIconType'); | |
| if (!isset($mallIcon['mallIconMobile']) || !is_array($mallIcon['mallIconMobile'])) { | |
| $mallIcon['mallIconMobile'] = []; | |
| } | |
| gd_isset($mallIcon['mallIconMobile'][1], 'ico_kr.png'); | |
| gd_isset($mallIcon['mallIconMobile'][2], 'ico_us.png'); | |
| gd_isset($mallIcon['mallIconMobile'][3], 'ico_cn.png'); | |
변경 전write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 후write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 전write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 후write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 전write.html
| <textarea id="editor" name="contents" style="width:100%; min-width:510px;" cols="30" rows="10">{=bdWrite.data.contents}</textarea> | |
| </td> | |
| </tr> | |
| <tr> | |
| <th scope="row">{=__('첨부파일')}</th> | |
| <td id="uploadBox"> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </td> | |
| </tr> | |
| <!--{? bdWrite.cfg.bdSpamBoardFl&2 }--> | |
| <tr> | |
| <th scope="row">{=__('자동등록방지')}</th> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 후write.html
| <textarea id="editor" name="contents" style="width:100%; min-width:510px;" cols="30" rows="10">{=bdWrite.data.contents}</textarea> | |
| </td> | |
| </tr> | |
| <!--{? bdWrite.cfg.bdUploadFl == 'y'}--> | |
| <tr> | |
| <th scope="row">{=__('첨부파일')}</th> | |
| <td id="uploadBox"> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </td> | |
| </tr> | |
| <!--{/}--> | |
| <!--{? bdWrite.cfg.bdSpamBoardFl&2 }--> | |
| <tr> | |
| <th scope="row">{=__('자동등록방지')}</th> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 전write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
| <button type="button" class="btn_goods_item_del js_select_remove"><img src="../../../img/common/btn/btn_goods_del.png" alt="{=__('선택 상품 삭제')}"></button> | |
| </span> | |
| </div> | |
| </script> | |
변경 후write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
| <button type="button" class="btn_goods_item_del js_select_remove"><img src="../../../img/common/btn/btn_goods_del.png" alt="{=__('선택 상품 삭제')}"></button> | |
| </span> | |
| </div> | |
| </script> | |
변경 전write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 후write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 전write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 후write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 전write.html
| <textarea id="editor" name="contents" cols="30" rows="10">{=bdWrite.data.contents}</textarea> | |
| </td> | |
| </tr> | |
| <tr> | |
| <th scope="row">{=__('첨부파일')}</th> | |
| <td id="uploadBox"> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </td> | |
| </tr> | |
| <!--{? bdWrite.cfg.bdSpamBoardFl&2 }--> | |
| <tr> | |
| <th scope="row">{=__('자동등록방지')}</th> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 후write.html
| <textarea id="editor" name="contents" cols="30" rows="10">{=bdWrite.data.contents}</textarea> | |
| </td> | |
| </tr> | |
| <!--{? bdWrite.cfg.bdUploadFl == 'y'}--> | |
| <tr> | |
| <th scope="row">{=__('첨부파일')}</th> | |
| <td id="uploadBox"> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </td> | |
| </tr> | |
| <!--{/}--> | |
| <!--{? bdWrite.cfg.bdSpamBoardFl&2 }--> | |
| <tr> | |
| <th scope="row">{=__('자동등록방지')}</th> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 전write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
| <button type="button" class="btn_goods_item_del js_select_remove"><img src="../../../img/common/btn/btn_goods_del.png" alt="{=__('선택 상품 삭제')}"></button> | |
| </span> | |
| </div> | |
| </script> | |
변경 후write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
| <button type="button" class="btn_goods_item_del js_select_remove"><img src="../../../img/common/btn/btn_goods_del.png" alt="{=__('선택 상품 삭제')}"></button> | |
| </span> | |
| </div> | |
| </script> | |
변경 전gd_common.js
| if(data.formObj.find('[name=uploadType][value=ajax]').length < 1) { | |
| data.formObj.append('<input type="hidden" name="uploadType" value="ajax" >'); | |
| } | |
| var index = data.thisObj.closest('form').find('input:file').index(data.thisObj); | |
| formData.append('uploadFile', data.thisObj[0].files[0]); | |
| $.ajax({ | |
| } | |
| else if(returnData.result == 'cancel'){ | |
| if ($("input[name='uploadFileNm[" + index + "]']").length > 0) { | |
| $("input[name='uploadFileNm[" + index + "]']").remove(); | |
| $("input[name='saveFileNm[" + index + "]']").remove(); | |
| } | |
| } | |
| else { | |
| gdAjaxUpload.isSuccess = false; | |
| $('label[for=attach' + (index + 1) + '] .text').val(''); //파일시스템 텍스트 빈값 처리 | |
| alert(returnData.errorMsg); | |
| if(typeof data.failAfter == 'function') { | |
| data.failAfter(returnData); | |
| } | |
| } | |
| } | |
| }); | |
| } | |
변경 후gd_common.js
| if(data.formObj.find('[name=uploadType][value=ajax]').length < 1) { | |
| data.formObj.append('<input type="hidden" name="uploadType" value="ajax" >'); | |
| } | |
| let index = data.thisObj.closest('form').find('input:file').index(data.thisObj); | |
| // 파일이 존재했다가 파일이 선택되지 않은 경우 처리 중단 | |
| if (!data.thisObj[0].files || !data.thisObj[0].files[0]) { | |
| // 기존 업로드 정보 제거 | |
| $("input[name='uploadFileNm[" + index + "]']").remove(); | |
| $("input[name='saveFileNm[" + index + "]']").remove(); | |
| return; | |
| } | |
| let maxSize = data.thisObj.data('upload-max-size'); | |
| let uploadFile = data.thisObj[0].files[0]; | |
| let fileSize = uploadFile.size; | |
| if (maxSize !== undefined && maxSize !== null && fileSize > maxSize) { | |
| alert(`파일 1개당 최대 업로드 용량은 ${Math.floor(maxSize / (1024 * 1024))}MByte(s)입니다.`); | |
| $('label[for=attach' + (index + 1) + '] .file_text').val(''); | |
| let uploadFileInput = $('input[name="upfiles[]"]').eq(index); | |
| uploadFileInput.wrap('<form>').closest('form')[0].reset(); | |
| uploadFileInput.unwrap(); | |
| // 기존 업로드 정보 제거 | |
| $("input[name='uploadFileNm[" + index + "]']").remove(); | |
| $("input[name='saveFileNm[" + index + "]']").remove(); | |
| return; | |
| } | |
| formData.append('uploadFile', data.thisObj[0].files[0]); | |
| $.ajax({ | |
| } | |
| else if(returnData.result == 'cancel'){ | |
| if ($("input[name='uploadFileNm[" + index + "]']").length > 0) { | |
| $('label[for=attach' + (index + 1) + '] .file_text').val(''); //파일시스템 텍스트 빈값 처리 | |
| $("input[name='uploadFileNm[" + index + "]']").remove(); | |
| $("input[name='saveFileNm[" + index + "]']").remove(); | |
| } | |
| } | |
| else { | |
| gdAjaxUpload.isSuccess = false; | |
| $('label[for=attach' + (index + 1) + '] .file_text').val(''); //파일시스템 텍스트 빈값 처리 | |
| // 기존 업로드 정보 제거 | |
| $("input[name='uploadFileNm[" + index + "]']").remove(); | |
| $("input[name='saveFileNm[" + index + "]']").remove(); | |
| alert(returnData.errorMsg); | |
| if(typeof data.failAfter == 'function') { | |
| data.failAfter(returnData); | |
| } | |
| } | |
| }, | |
| error: function () { | |
| alert(__('업로드에 실패하였습니다.')); | |
| $('label[for=attach' + (index + 1) + '] .file_text').val(''); | |
| let uploadFileInput = $('input[name="upfiles[]"]').eq(index); | |
| uploadFileInput.wrap('<form>').closest('form')[0].reset(); | |
| uploadFileInput.unwrap(); | |
| // 기존 업로드 정보 제거 | |
| $("input[name='uploadFileNm[" + index + "]']").remove(); | |
| $("input[name='saveFileNm[" + index + "]']").remove(); | |
| } | |
| }); | |
| } | |
변경 전gd_gettext.js
| } | |
| Gettext.prototype.JSON = function (data) { | |
| return eval('(' + data + ')'); | |
| } | |
변경 후gd_gettext.js
| } | |
| Gettext.prototype.JSON = function (data) { | |
| return JSON.parse(data); | |
| } | |
변경 전gd_multi_select_box.js
| $(tmpID).trigger('chosen:updated'); | |
| } | |
| } | |
| data = eval(data); | |
| if (data !='' && data != null && $(targetID).length != 0) { | |
| $(targetID).html(''); | |
| var k = 1; | |
변경 후gd_multi_select_box.js
| $(tmpID).trigger('chosen:updated'); | |
| } | |
| } | |
| try { | |
| data = JSON.parse(data); | |
| } catch (e) { | |
| $(targetID).html('<option value="">' + emptyText + '</option>'); | |
| $(targetID).trigger('chosen:updated'); | |
| return; | |
| } | |
| if (data !='' && data != null && $(targetID).length != 0) { | |
| $(targetID).html(''); | |
| var k = 1; | |
변경 전naverCommonInflowScript.js
| if (commonScriptOrderItem.length > 0) { | |
| _nao["order"] = new Array(); | |
| for (var a = 0; a < commonScriptOrderItem.length; a++) { | |
| var | |
| orderItem = eval("(" + commonScriptOrderItem[a].value + ")"), | |
| cpaOrderItem = new Object(); | |
| cpaOrderItem["oid"] = orderItem.ordno; | |
| cpaOrderItem["poid"] = orderItem.sno; | |
| if (NCISP.Path === "/order/order_end.php" ) { | |
| var commonScriptOrder = document.getElementById("naver-common-inflow-script-order"); | |
| if (commonScriptOrder && commonScriptOrder !== null) { | |
| var | |
| saNao = new Object(), | |
| serviceType = "1", | |
| orderInfo = eval("("+commonScriptOrder.value+")"); | |
| saNao["cnv"] = wcs.cnv(serviceType, orderInfo.goodsprice); | |
| wcs_do(saNao); | |
| } | |
| } | |
| else { | |
변경 후naverCommonInflowScript.js
| if (commonScriptOrderItem.length > 0) { | |
| _nao["order"] = new Array(); | |
| for (var a = 0; a < commonScriptOrderItem.length; a++) { | |
| var orderItem; | |
| try { | |
| orderItem = JSON.parse(commonScriptOrderItem[a].value); | |
| } catch (e) { | |
| continue; | |
| } | |
| var cpaOrderItem = new Object(); | |
| cpaOrderItem["oid"] = orderItem.ordno; | |
| cpaOrderItem["poid"] = orderItem.sno; | |
| if (NCISP.Path === "/order/order_end.php" ) { | |
| var commonScriptOrder = document.getElementById("naver-common-inflow-script-order"); | |
| if (commonScriptOrder && commonScriptOrder !== null) { | |
| var saNao = new Object(), | |
| serviceType = "1", | |
| orderInfo; | |
| try { | |
| orderInfo = JSON.parse(commonScriptOrder.value); | |
| } catch (e) { | |
| return; | |
| } | |
| saNao["cnv"] = wcs.cnv(serviceType, orderInfo.goodsprice); | |
| wcs_do(saNao); | |
| } | |
| } | |
| else { | |
변경 전_order_goods_list.html
| <span class="btn_gray_list"> | |
| <a href="#lyReason" class="btn_gray_small btn_open_layer"> | |
| <span> | |
| <!--{ ? ..userHandleMode == 'b' || ..handleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ..userHandleMode == 'r' || ..handleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ..userHandleMode == 'e' || ..handleMode == 'e'}--> | |
| {=__('교환사유')} | |
| <!--{ : ..userHandleMode == 'c' || ..handleMode == 'c'}--> | |
| {=__('취소사유')} | |
| <!--{ / }--> | |
| </span> | |
변경 후_order_goods_list.html
| <span class="btn_gray_list"> | |
| <a href="#lyReason" class="btn_gray_small btn_open_layer"> | |
| <span> | |
| <!--{ ? ..userHandleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ..userHandleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ..userHandleMode == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : ..userHandleMode == 'c' }--> | |
| {=__('취소사유')} | |
| <!--{ : ..handleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ..handleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ..handleMode == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : ..handleMode == 'c' }--> | |
| {=__('취소사유')} | |
| <!--{ / }--> | |
| </span> | |
변경 전_reorder_goods_list.html
| <span class="btn_gray_list"> | |
| <a href="#lyReason" class="btn_gray_small btn_open_layer"> | |
| <span> | |
| <!--{ ? ..userHandleMode == 'b' || ..handleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ..userHandleMode == 'r' || ..handleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ..userHandleMode == 'e' || ..handleMode == 'e'}--> | |
| {=__('교환사유')} | |
| <!--{ : ..userHandleMode == 'c' || ..handleMode == 'c'}--> | |
| {=__('취소사유')} | |
| <!--{ / }--> | |
| </span> | |
변경 후_reorder_goods_list.html
| <span class="btn_gray_list"> | |
| <a href="#lyReason" class="btn_gray_small btn_open_layer"> | |
| <span> | |
| <!--{ ? ..userHandleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ..userHandleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ..userHandleMode == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : ..userHandleMode == 'c' }--> | |
| {=__('취소사유')} | |
| <!--{ : ..handleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ..handleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ..handleMode == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : ..handleMode == 'c' }--> | |
| {=__('취소사유')} | |
| <!--{ / }--> | |
| </span> | |
변경 전layer_order_refund_reason.html
| <div class="layer_wrap_cont"> | |
| <div class="ly_tit"> | |
| <h4> | |
| <!--{ ? substr(handleInfo.orderStatus, 0, 1) == 'b' || handleInfo.userHandleMode == 'b'}--> | |
| {=__('반품 상세 정보')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'r' || handleInfo.userHandleMode == 'r'}--> | |
| {=__('환불 상세 정보')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'e' || handleInfo.userHandleMode == 'e'}--> | |
| {=__('교환 상세 정보')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'c' }--> | |
| {=__('취소 상세 정보')} | |
변경 후layer_order_refund_reason.html
| <div class="layer_wrap_cont"> | |
| <div class="ly_tit"> | |
| <h4> | |
| <!--{ ? handleInfo.userHandleMode == 'b' }--> | |
| {=__('반품 상세 정보')} | |
| <!--{ : handleInfo.userHandleMode == 'r' }--> | |
| {=__('환불 상세 정보')} | |
| <!--{ : handleInfo.userHandleMode == 'e' }--> | |
| {=__('교환 상세 정보')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'b' }--> | |
| {=__('반품 상세 정보')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'r' }--> | |
| {=__('환불 상세 정보')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'e' }--> | |
| {=__('교환 상세 정보')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'c' }--> | |
| {=__('취소 상세 정보')} | |
변경 전order_view.html
| </tr> | |
| <tr> | |
| <th scope="row">{=__('회사명')}</th> | |
| <td><input type="text" name="taxCompany" value="{=gd_isset(memberInvoiceInfo['tax']['company'])}" maxlength="50" data-pattern="gdMemberNmGlobal"/></td> | |
| <th scope="row">{=__('대표자명')}</th> | |
| <td><input type="text" name="taxCeoNm" value="{=gd_isset(memberInvoiceInfo['tax']['ceo'])}"/></td> | |
| </tr> | |
변경 후order_view.html
| </tr> | |
| <tr> | |
| <th scope="row">{=__('회사명')}</th> | |
| <td><input type="text" name="taxCompany" value="{=gd_isset(memberInvoiceInfo['tax']['company'])}" maxlength="70" data-pattern="gdMemberNmGlobal"/></td> | |
| <th scope="row">{=__('대표자명')}</th> | |
| <td><input type="text" name="taxCeoNm" value="{=gd_isset(memberInvoiceInfo['tax']['ceo'])}"/></td> | |
| </tr> | |
변경 전order.html
| </tr> | |
| <tr> | |
| <th scope="row">{=__('회사명')}</th> | |
| <td><input type="text" name="taxCompany" value="{=gd_isset(memberInvoiceInfo['tax']['company'])}" maxlength="50" data-pattern="gdMemberNmGlobal"/></td> | |
| <th scope="row">{=__('대표자명')}</th> | |
| <td><input type="text" name="taxCeoNm" value="{=gd_isset(memberInvoiceInfo['tax']['ceo'])}"/></td> | |
| </tr> | |
| r: 'cash_receipt_info' | |
| }; | |
| var checkedBox = $('input[name=receiptFl]:checked'); | |
| var target = eval('useCode.' + checkedBox.val()); | |
| $('.js_receipt').addClass('dn'); | |
| $('#' + target).removeClass('dn'); | |
| if (checkedBox.val() == 'r') { | |
| gd_cash_receipt_toggle(); | |
변경 후order.html
| </tr> | |
| <tr> | |
| <th scope="row">{=__('회사명')}</th> | |
| <td><input type="text" name="taxCompany" value="{=gd_isset(memberInvoiceInfo['tax']['company'])}" maxlength="70" data-pattern="gdMemberNmGlobal"/></td> | |
| <th scope="row">{=__('대표자명')}</th> | |
| <td><input type="text" name="taxCeoNm" value="{=gd_isset(memberInvoiceInfo['tax']['ceo'])}"/></td> | |
| </tr> | |
| r: 'cash_receipt_info' | |
| }; | |
| var checkedBox = $('input[name=receiptFl]:checked'); | |
| var target = checkedBox.val() in useCode ? useCode[checkedBox.val()] : undefined; | |
| $('.js_receipt').addClass('dn'); | |
| if (target !== undefined) { | |
| $('#' + target).removeClass('dn'); | |
| } | |
| if (checkedBox.val() == 'r') { | |
| gd_cash_receipt_toggle(); | |
변경 전write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 후write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 전write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 후write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 전write.html
| <textarea id="editor" name="contents" style="width:100%; min-width:510px;" cols="30" rows="10">{=bdWrite.data.contents}</textarea> | |
| </td> | |
| </tr> | |
| <tr> | |
| <th scope="row">{=__('첨부파일')}</th> | |
| <td id="uploadBox"> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </td> | |
| </tr> | |
| <!--{? bdWrite.cfg.bdSpamBoardFl&2 }--> | |
| <tr> | |
| <th scope="row">{=__('자동등록방지')}</th> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 후write.html
| <textarea id="editor" name="contents" style="width:100%; min-width:510px;" cols="30" rows="10">{=bdWrite.data.contents}</textarea> | |
| </td> | |
| </tr> | |
| <!--{? bdWrite.cfg.bdUploadFl == 'y'}--> | |
| <tr> | |
| <th scope="row">{=__('첨부파일')}</th> | |
| <td id="uploadBox"> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </td> | |
| </tr> | |
| <!--{/}--> | |
| <!--{? bdWrite.cfg.bdSpamBoardFl&2 }--> | |
| <tr> | |
| <th scope="row">{=__('자동등록방지')}</th> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 전write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
| <button type="button" class="btn_goods_item_del js_select_remove"><img src="../../../img/common/btn/btn_goods_del.png" alt="{=__('선택 상품 삭제')}"></button> | |
| </span> | |
| </div> | |
| </script> | |
변경 후write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
| <button type="button" class="btn_goods_item_del js_select_remove"><img src="../../../img/common/btn/btn_goods_del.png" alt="{=__('선택 상품 삭제')}"></button> | |
| </span> | |
| </div> | |
| </script> | |
변경 전write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 후write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 전write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 후write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 전write.html
| <textarea id="editor" name="contents" cols="30" rows="10">{=bdWrite.data.contents}</textarea> | |
| </td> | |
| </tr> | |
| <tr> | |
| <th scope="row">{=__('첨부파일')}</th> | |
| <td id="uploadBox"> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </td> | |
| </tr> | |
| <!--{? bdWrite.cfg.bdSpamBoardFl&2 }--> | |
| <tr> | |
| <th scope="row">{=__('자동등록방지')}</th> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 후write.html
| <textarea id="editor" name="contents" cols="30" rows="10">{=bdWrite.data.contents}</textarea> | |
| </td> | |
| </tr> | |
| <!--{? bdWrite.cfg.bdUploadFl == 'y'}--> | |
| <tr> | |
| <th scope="row">{=__('첨부파일')}</th> | |
| <td id="uploadBox"> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </td> | |
| </tr> | |
| <!--{/}--> | |
| <!--{? bdWrite.cfg.bdSpamBoardFl&2 }--> | |
| <tr> | |
| <th scope="row">{=__('자동등록방지')}</th> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
변경 전write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}"/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
| <button type="button" class="btn_goods_item_del js_select_remove"><img src="../../../img/common/btn/btn_goods_del.png" alt="{=__('선택 상품 삭제')}"></button> | |
| </span> | |
| </div> | |
| </script> | |
변경 후write.html
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach{=.index_+1}" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" id="addUploadBtn" class="btn_gray_big"><span>+ {=__('추가')}</span></button></span> | |
| </div> | |
| </div> | |
| </label> | |
| <div class="btn_upload_box"> | |
| <button type="button" class="btn_upload" title="{=__('찾아보기')}"><em>{=__('찾아보기')}</em></button> | |
| <input type="file" id="attach<%=idx%>" name="upfiles[]" class="file" title="{=__('찾아보기')}" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| <span class="btn_gray_list"><button type="button" class="btn_gray_big" onclick="gd_remove_upload(this)"><span>- {=__('삭제')}</span></button></span> | |
| </div> | |
| </div> | |
| <button type="button" class="btn_goods_item_del js_select_remove"><img src="../../../img/common/btn/btn_goods_del.png" alt="{=__('선택 상품 삭제')}"></button> | |
| </span> | |
| </div> | |
| </script> | |
변경 전gd_common.js
| if(data.formObj.find('[name=uploadType][value=ajax]').length < 1) { | |
| data.formObj.append('<input type="hidden" name="uploadType" value="ajax" >'); | |
| } | |
| var index = data.thisObj.closest('form').find('input:file').index(data.thisObj); | |
| formData.append('uploadFile', data.thisObj[0].files[0]); | |
| $.ajax({ | |
| } | |
| else if(returnData.result == 'cancel'){ | |
| if ($("input[name='uploadFileNm[" + index + "]']").length > 0) { | |
| $("input[name='uploadFileNm[" + index + "]']").remove(); | |
| $("input[name='saveFileNm[" + index + "]']").remove(); | |
| } | |
| } | |
| else { | |
| gdAjaxUpload.isSuccess = false; | |
| $('label[for=attach' + (index + 1) + '] .text').val(''); //파일시스템 텍스트 빈값 처리 | |
| alert(returnData.errorMsg); | |
| if(typeof data.failAfter == 'function') { | |
| data.failAfter(returnData); | |
| } | |
| } | |
| } | |
| }); | |
| } | |
변경 후gd_common.js
| if(data.formObj.find('[name=uploadType][value=ajax]').length < 1) { | |
| data.formObj.append('<input type="hidden" name="uploadType" value="ajax" >'); | |
| } | |
| let index = data.thisObj.closest('form').find('input:file').index(data.thisObj); | |
| // 파일이 존재했다가 파일이 선택되지 않은 경우 처리 중단 | |
| if (!data.thisObj[0].files || !data.thisObj[0].files[0]) { | |
| // 기존 업로드 정보 제거 | |
| $("input[name='uploadFileNm[" + index + "]']").remove(); | |
| $("input[name='saveFileNm[" + index + "]']").remove(); | |
| return; | |
| } | |
| let maxSize = data.thisObj.data('upload-max-size'); | |
| let uploadFile = data.thisObj[0].files[0]; | |
| let fileSize = uploadFile.size; | |
| if (maxSize !== undefined && maxSize !== null && fileSize > maxSize) { | |
| alert(`파일 1개당 최대 업로드 용량은 ${Math.floor(maxSize / (1024 * 1024))}MByte(s)입니다.`); | |
| $('label[for=attach' + (index + 1) + '] .file_text').val(''); | |
| let uploadFileInput = $('input[name="upfiles[]"]').eq(index); | |
| uploadFileInput.wrap('<form>').closest('form')[0].reset(); | |
| uploadFileInput.unwrap(); | |
| // 기존 업로드 정보 제거 | |
| $("input[name='uploadFileNm[" + index + "]']").remove(); | |
| $("input[name='saveFileNm[" + index + "]']").remove(); | |
| return; | |
| } | |
| formData.append('uploadFile', data.thisObj[0].files[0]); | |
| $.ajax({ | |
| } | |
| else if(returnData.result == 'cancel'){ | |
| if ($("input[name='uploadFileNm[" + index + "]']").length > 0) { | |
| $('label[for=attach' + (index + 1) + '] .file_text').val(''); | |
| $("input[name='uploadFileNm[" + index + "]']").remove(); | |
| $("input[name='saveFileNm[" + index + "]']").remove(); | |
| } | |
| } | |
| else { | |
| gdAjaxUpload.isSuccess = false; | |
| $('label[for=attach' + (index + 1) + '] .file_text').val(''); //파일시스템 텍스트 빈값 처리 | |
| // 기존 업로드 정보 제거 | |
| $("input[name='uploadFileNm[" + index + "]']").remove(); | |
| $("input[name='saveFileNm[" + index + "]']").remove(); | |
| alert(returnData.errorMsg); | |
| if(typeof data.failAfter == 'function') { | |
| data.failAfter(returnData); | |
| } | |
| } | |
| }, | |
| error: function () { | |
| alert(__('업로드에 실패하였습니다.')); | |
| $('label[for=attach' + (index + 1) + '] .file_text').val(''); | |
| let uploadFileInput = $('input[name="upfiles[]"]').eq(index); | |
| uploadFileInput.wrap('<form>').closest('form')[0].reset(); | |
| uploadFileInput.unwrap(); | |
| // 기존 업로드 정보 제거 | |
| $("input[name='uploadFileNm[" + index + "]']").remove(); | |
| $("input[name='saveFileNm[" + index + "]']").remove(); | |
| } | |
| }); | |
| } | |
변경 전gd_gettext.js
| } | |
| Gettext.prototype.JSON = function (data) { | |
| return eval('(' + data + ')'); | |
| } | |
변경 후gd_gettext.js
| } | |
| Gettext.prototype.JSON = function (data) { | |
| return JSON.parse(data); | |
| } | |
변경 전gd_multi_select_box.js
| $(tmpID).trigger('chosen:updated'); | |
| } | |
| } | |
| data = eval(data); | |
| if (data !='' && data != null && $(targetID).length != 0) { | |
| $(targetID).html(''); | |
| var k = 1; | |
변경 후gd_multi_select_box.js
| $(tmpID).trigger('chosen:updated'); | |
| } | |
| } | |
| try { | |
| data = JSON.parse(data); | |
| } catch (e) { | |
| $(targetID).html('<option value="">' + emptyText + '</option>'); | |
| $(targetID).trigger('chosen:updated'); | |
| return; | |
| } | |
| if (data !='' && data != null && $(targetID).length != 0) { | |
| $(targetID).html(''); | |
| var k = 1; | |
변경 전naverCommonInflowScript.js
| if (commonScriptOrderItem.length > 0) { | |
| _nao["order"] = new Array(); | |
| for (var a = 0; a < commonScriptOrderItem.length; a++) { | |
| var | |
| orderItem = eval("(" + commonScriptOrderItem[a].value + ")"), | |
| cpaOrderItem = new Object(); | |
| cpaOrderItem["oid"] = orderItem.ordno; | |
| cpaOrderItem["poid"] = orderItem.sno; | |
| if (NCISP.Path === "/order/order_end.php" ) { | |
| var commonScriptOrder = document.getElementById("naver-common-inflow-script-order"); | |
| if (commonScriptOrder && commonScriptOrder !== null) { | |
| var | |
| saNao = new Object(), | |
| serviceType = "1", | |
| orderInfo = eval("("+commonScriptOrder.value+")"); | |
| saNao["cnv"] = wcs.cnv(serviceType, orderInfo.goodsprice); | |
| wcs_do(saNao); | |
| } | |
| } | |
| else { | |
변경 후naverCommonInflowScript.js
| if (commonScriptOrderItem.length > 0) { | |
| _nao["order"] = new Array(); | |
| for (var a = 0; a < commonScriptOrderItem.length; a++) { | |
| var orderItem; | |
| try { | |
| orderItem = JSON.parse(commonScriptOrderItem[a].value); | |
| } catch (e) { | |
| continue; | |
| } | |
| var cpaOrderItem = new Object(); | |
| cpaOrderItem["oid"] = orderItem.ordno; | |
| cpaOrderItem["poid"] = orderItem.sno; | |
| if (NCISP.Path === "/order/order_end.php" ) { | |
| var commonScriptOrder = document.getElementById("naver-common-inflow-script-order"); | |
| if (commonScriptOrder && commonScriptOrder !== null) { | |
| var saNao = new Object(), | |
| serviceType = "1", | |
| orderInfo; | |
| try { | |
| orderInfo = JSON.parse(commonScriptOrder.value); | |
| } catch (e) { | |
| return; | |
| } | |
| saNao["cnv"] = wcs.cnv(serviceType, orderInfo.goodsprice); | |
| wcs_do(saNao); | |
| } | |
| } | |
| else { | |
변경 전_order_goods_list.html
| <span class="btn_gray_list"> | |
| <a href="#lyReason" class="btn_gray_small btn_refund_state btn_open_layer"> | |
| <span> | |
| <!--{ ? ..userHandleMode == 'b' || ..handleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ..userHandleMode == 'r' || ..handleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ..userHandleMode == 'e' || ..handleMode == 'e'}--> | |
| {=__('교환사유')} | |
| <!--{ : ..userHandleMode == 'c' || ..handleMode == 'c'}--> | |
| {=__('취소사유')} | |
| <!--{ / }--> | |
| </span> | |
변경 후_order_goods_list.html
| <span class="btn_gray_list"> | |
| <a href="#lyReason" class="btn_gray_small btn_refund_state btn_open_layer"> | |
| <span> | |
| <!--{ ? ..userHandleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ..userHandleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ..userHandleMode == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : ..userHandleMode == 'c' }--> | |
| {=__('취소사유')} | |
| <!--{ : ..handleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ..handleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ..handleMode == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : ..handleMode == 'c' }--> | |
| {=__('취소사유')} | |
| <!--{ / }--> | |
| </span> | |
변경 전_reorder_goods_list.html
| <span class="btn_gray_list"> | |
| <a href="#lyReason" class="btn_gray_small btn_refund_state btn_open_layer"> | |
| <span> | |
| <!--{ ? ..userHandleMode == 'b' || ..handleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ..userHandleMode == 'r' || ..handleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ..userHandleMode == 'e' || ..handleMode == 'e'}--> | |
| {=__('교환사유')} | |
| <!--{ : ..userHandleMode == 'c' || ..handleMode == 'c'}--> | |
| {=__('취소사유')} | |
| <!--{ / }--> | |
| </span> | |
변경 후_reorder_goods_list.html
| <span class="btn_gray_list"> | |
| <a href="#lyReason" class="btn_gray_small btn_refund_state btn_open_layer"> | |
| <span> | |
| <!--{ ? ..userHandleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ..userHandleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ..userHandleMode == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : ..userHandleMode == 'c' }--> | |
| {=__('취소사유')} | |
| <!--{ : ..handleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ..handleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ..handleMode == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : ..handleMode == 'c' }--> | |
| {=__('취소사유')} | |
| <!--{ / }--> | |
| </span> | |
변경 전layer_order_refund_reason.html
| <div class="layer_wrap_cont"> | |
| <div class="ly_tit"> | |
| <h4> | |
| <!--{ ? substr(handleInfo.orderStatus, 0, 1) == 'b' || handleInfo.userHandleMode == 'b'}--> | |
| {=__('반품 상세 정보')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'r' || handleInfo.userHandleMode == 'r'}--> | |
| {=__('환불 상세 정보')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'e' || handleInfo.userHandleMode == 'e'}--> | |
| {=__('교환 상세 정보')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'c' }--> | |
| {=__('취소 상세 정보')} | |
변경 후layer_order_refund_reason.html
| <div class="layer_wrap_cont"> | |
| <div class="ly_tit"> | |
| <h4> | |
| <!--{ ? handleInfo.userHandleMode == 'b' }--> | |
| {=__('반품 상세 정보')} | |
| <!--{ : handleInfo.userHandleMode == 'r' }--> | |
| {=__('환불 상세 정보')} | |
| <!--{ : handleInfo.userHandleMode == 'e' }--> | |
| {=__('교환 상세 정보')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'b' }--> | |
| {=__('반품 상세 정보')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'r' }--> | |
| {=__('환불 상세 정보')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'e' }--> | |
| {=__('교환 상세 정보')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'c' }--> | |
| {=__('취소 상세 정보')} | |
변경 전order_view.html
| </tr> | |
| <tr> | |
| <th scope="row">{=__('회사명')}</th> | |
| <td><input type="text" name="taxCompany" value="{=gd_isset(memberInvoiceInfo['tax']['company'])}" maxlength="50" data-pattern="gdMemberNmGlobal"/></td> | |
| <th scope="row">{=__('대표자명')}</th> | |
| <td><input type="text" name="taxCeoNm" value="{=gd_isset(memberInvoiceInfo['tax']['ceo'])}"/></td> | |
| </tr> | |
변경 후order_view.html
| </tr> | |
| <tr> | |
| <th scope="row">{=__('회사명')}</th> | |
| <td><input type="text" name="taxCompany" value="{=gd_isset(memberInvoiceInfo['tax']['company'])}" maxlength="70" data-pattern="gdMemberNmGlobal"/></td> | |
| <th scope="row">{=__('대표자명')}</th> | |
| <td><input type="text" name="taxCeoNm" value="{=gd_isset(memberInvoiceInfo['tax']['ceo'])}"/></td> | |
| </tr> | |
변경 전order.html
| </tr> | |
| <tr> | |
| <th scope="row">{=__('회사명')}</th> | |
| <td><input type="text" name="taxCompany" value="{=gd_isset(memberInvoiceInfo['tax']['company'])}" maxlength="50" data-pattern="gdMemberNmGlobal"/></td> | |
| <th scope="row">{=__('대표자명')}</th> | |
| <td><input type="text" name="taxCeoNm" value="{=gd_isset(memberInvoiceInfo['tax']['ceo'])}"/></td> | |
| </tr> | |
| r: 'cash_receipt_info' | |
| }; | |
| var checkedBox = $('input[name=receiptFl]:checked'); | |
| var target = eval('useCode.' + checkedBox.val()); | |
| $('.js_receipt').addClass('dn'); | |
| $('#' + target).removeClass('dn'); | |
| if (checkedBox.val() == 'r') { | |
| gd_cash_receipt_toggle(); | |
변경 후order.html
| </tr> | |
| <tr> | |
| <th scope="row">{=__('회사명')}</th> | |
| <td><input type="text" name="taxCompany" value="{=gd_isset(memberInvoiceInfo['tax']['company'])}" maxlength="70" data-pattern="gdMemberNmGlobal"/></td> | |
| <th scope="row">{=__('대표자명')}</th> | |
| <td><input type="text" name="taxCeoNm" value="{=gd_isset(memberInvoiceInfo['tax']['ceo'])}"/></td> | |
| </tr> | |
| r: 'cash_receipt_info' | |
| }; | |
| var checkedBox = $('input[name=receiptFl]:checked'); | |
| var target = checkedBox.val() in useCode ? useCode[checkedBox.val()] : undefined; | |
| $('.js_receipt').addClass('dn'); | |
| if (target !== undefined) { | |
| $('#' + target).removeClass('dn'); | |
| } | |
| if (checkedBox.val() == 'r') { | |
| gd_cash_receipt_toggle(); | |
변경 전write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" /> | |
| </li> | |
| </ul> | |
| </div> | |
변경 후write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </li> | |
| </ul> | |
| </div> | |
변경 전write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" /> | |
| </li> | |
| </ul> | |
| </div> | |
변경 후write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </li> | |
| </ul> | |
| </div> | |
변경 전write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" /> | |
| </li> | |
| </ul> | |
| </div> | |
변경 후write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </li> | |
| </ul> | |
| </div> | |
변경 전write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" /> | |
| </li> | |
| </ul> | |
| </div> | |
변경 후write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </li> | |
| </ul> | |
| </div> | |
변경 전write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" /> | |
| </li> | |
| </ul> | |
| </div> | |
변경 후write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </li> | |
| </ul> | |
| </div> | |
변경 전write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" /> | |
| </li> | |
| </ul> | |
| </div> | |
변경 후write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </li> | |
| </ul> | |
| </div> | |
변경 전write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" /> | |
| </li> | |
| </ul> | |
| </div> | |
변경 후write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </li> | |
| </ul> | |
| </div> | |
변경 전write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" /> | |
| </li> | |
| </ul> | |
| </div> | |
변경 후write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </li> | |
| </ul> | |
| </div> | |
변경 전gd_common.js
| if(data.formObj.find('[name=uploadType][value=ajax]').length < 1) { | |
| data.formObj.append('<input type="hidden" name="uploadType" value="ajax" >'); | |
| } | |
| var index = data.thisObj.closest('form').find('input:file').index(data.thisObj); | |
| formData.append('uploadFile', data.thisObj[0].files[0]); | |
| $.ajax({ | |
| url: data.actionUrl, | |
| type: 'POST', | |
| } | |
| else { | |
| gdAjaxUpload.isSuccess = false; | |
| if (returnData.errorMsg) { | |
| alert(returnData.errorMsg); | |
| } | |
| data.failAfter(returnData); | |
| } | |
| } | |
| } | |
| }); | |
| } | |
변경 후gd_common.js
| if(data.formObj.find('[name=uploadType][value=ajax]').length < 1) { | |
| data.formObj.append('<input type="hidden" name="uploadType" value="ajax" >'); | |
| } | |
| let index = data.thisObj.closest('form').find('input:file').index(data.thisObj); | |
| formData.append('uploadFile', data.thisObj[0].files[0]); | |
| let maxSize = data.thisObj.data('upload-max-size'); | |
| if (!data.thisObj[0].files || !data.thisObj[0].files[0]) { | |
| // 기존 업로드 정보 제거 | |
| $("input[name='uploadFileNm[" + index + "]']").remove(); | |
| $("input[name='saveFileNm[" + index + "]']").remove(); | |
| return; // 파일이 선택되지 않은 경우 처리 중단 | |
| } | |
| let uploadFile = data.thisObj[0].files[0]; | |
| let fileSize = uploadFile.size; | |
| if (maxSize !== undefined && maxSize !== null && fileSize > maxSize) { | |
| alert(`파일 1개당 최대 업로드 용량은 ${Math.floor(maxSize / (1024 * 1024))}MByte(s)입니다.`); | |
| let uploadFileInput = $('input[name="upfiles[]"]').eq(index); | |
| uploadFileInput.wrap('<form>').closest('form')[0].reset(); | |
| uploadFileInput.unwrap(); | |
| // 기존 업로드 정보 제거 | |
| $("input[name='uploadFileNm[" + index + "]']").remove(); | |
| $("input[name='saveFileNm[" + index + "]']").remove(); | |
| return; | |
| } | |
| $.ajax({ | |
| url: data.actionUrl, | |
| type: 'POST', | |
| } | |
| else { | |
| gdAjaxUpload.isSuccess = false; | |
| // 기존 업로드 정보 제거 | |
| $("input[name='uploadFileNm[" + index + "]']").remove(); | |
| $("input[name='saveFileNm[" + index + "]']").remove(); | |
| if (returnData.errorMsg) { | |
| alert(returnData.errorMsg); | |
| } | |
| data.failAfter(returnData); | |
| } | |
| } | |
| }, | |
| error: function () { | |
| alert(__('업로드에 실패하였습니다.')); | |
| $('input[name="upfiles[]"]').eq(index).val(''); | |
| // 기존 업로드 정보 제거 | |
| $("input[name='uploadFileNm[" + index + "]']").remove(); | |
| $("input[name='saveFileNm[" + index + "]']").remove(); | |
| } | |
| }); | |
| } | |
변경 전gd_gettext.js
| } | |
| Gettext.prototype.JSON = function (data) { | |
| return eval('(' + data + ')'); | |
| } | |
변경 후gd_gettext.js
| } | |
| Gettext.prototype.JSON = function (data) { | |
| return JSON.parse(data); | |
| } | |
변경 전gd_member2.js
| if (isComCertificationRequired && hasDeleteSno && isFileEmpty && !isDeleteChecked) { | |
| $comCertification.rules("remove"); | |
| } | |
| $(form).find('select').prop('disabled', false); | |
| validate.settings.submitHandler = func; | |
| } | |
| if (validate.form()) { | |
| $('.join_ok_btn').attr("disabled", true); | |
| form.submit(); | |
| } else { | |
변경 후gd_member2.js
| if (isComCertificationRequired && hasDeleteSno && isFileEmpty && !isDeleteChecked) { | |
| $comCertification.rules("remove"); | |
| } | |
| } | |
| if (validate.form()) { | |
| $(form).find('select').prop('disabled', false); | |
| validate.settings.submitHandler = func; | |
| $('.join_ok_btn').attr("disabled", true); | |
| form.submit(); | |
| } else { | |
변경 전_order_goods_list.html
| <!--{ ? gd_is_plus_shop(c.PLUSSHOP_CODE_USEREXCHANGE) === true && (...userHandleSno > 0 || (...handleSno > 0 && ...handleDetailReasonShowFl == 'y') ) }--> | |
| <li> | |
| <a href="../mypage/layer_order_refund_reason.php?orderNo={..orderNo}&orderGoodsNo={...sno}&userHandleSno={...userHandleSno}&orderStatus={...orderStatus}" data-toggle="modal" data-target="#popupReason" data-type="post" data-cache="false" class="order_etc_btn"> | |
| <!--{ ? ...userHandleMode == 'b' || ...handleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ...userHandleMode == 'r' || ...handleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ...userHandleMode == 'e' || ...handleMode == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : ...userHandleMode == 'c' || ...handleMode == 'c'}--> | |
| {=__('취소사유')} | |
| <!--{ / }--> | |
| </a> | |
변경 후_order_goods_list.html
| <!--{ ? gd_is_plus_shop(c.PLUSSHOP_CODE_USEREXCHANGE) === true && (...userHandleSno > 0 || (...handleSno > 0 && ...handleDetailReasonShowFl == 'y') ) }--> | |
| <li> | |
| <a href="../mypage/layer_order_refund_reason.php?orderNo={..orderNo}&orderGoodsNo={...sno}&userHandleSno={...userHandleSno}&orderStatus={...orderStatus}" data-toggle="modal" data-target="#popupReason" data-type="post" data-cache="false" class="order_etc_btn"> | |
| <!--{ ? ...userHandleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ...userHandleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ...userHandleMode == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : ...userHandleMode == 'c' }--> | |
| {=__('취소사유')} | |
| <!--{ : ...handleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ...handleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ...handleMode == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : ...handleMode == 'c' }--> | |
| {=__('취소사유')} | |
| <!--{ / }--> | |
| </a> | |
변경 전_reorder_goods_list.html
| <!--{ ? gd_is_plus_shop(c.PLUSSHOP_CODE_USEREXCHANGE) === true && (...userHandleSno > 0 || (...handleSno > 0 && ...handleDetailReasonShowFl == 'y') ) }--> | |
| <li> | |
| <a href="../mypage/layer_order_refund_reason.php?orderNo={..orderNo}&orderGoodsNo={...sno}&userHandleSno={...userHandleSno}&orderStatus={...orderStatus}" data-toggle="modal" data-target="#popupReason" data-type="post" data-cache="false" class="order_etc_btn"> | |
| <!--{ ? ...userHandleMode == 'b' || ...handleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ...userHandleMode == 'r' || ...handleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ...userHandleMode == 'e' || ...handleMode == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : ...userHandleMode == 'c' || ...handleMode == 'c'}--> | |
| {=__('취소사유')} | |
| <!--{ / }--> | |
| </a> | |
변경 후_reorder_goods_list.html
| <!--{ ? gd_is_plus_shop(c.PLUSSHOP_CODE_USEREXCHANGE) === true && (...userHandleSno > 0 || (...handleSno > 0 && ...handleDetailReasonShowFl == 'y') ) }--> | |
| <li> | |
| <a href="../mypage/layer_order_refund_reason.php?orderNo={..orderNo}&orderGoodsNo={...sno}&userHandleSno={...userHandleSno}&orderStatus={...orderStatus}" data-toggle="modal" data-target="#popupReason" data-type="post" data-cache="false" class="order_etc_btn"> | |
| <!--{ ? ...userHandleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ...userHandleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ...userHandleMode == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : ...userHandleMode == 'c' }--> | |
| {=__('취소사유')} | |
| <!--{ : ...handleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ...handleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ...handleMode == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : ...handleMode == 'c' }--> | |
| {=__('취소사유')} | |
| <!--{ / }--> | |
| </a> | |
변경 전layer_order_refund_reason.html
| <div class="layer_order_refund_reason"> | |
| <div class="ly_head"> | |
| <h1 class="h_tit"> | |
| <!--{ ? substr(handleInfo.orderStatus, 0, 1) == 'b' || handleInfo.userHandleMode == 'b'}--> | |
| {=__('반품사유')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'r' || handleInfo.userHandleMode == 'r'}--> | |
| {=__('환불사유')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'e' || handleInfo.userHandleMode == 'e'}--> | |
| {=__('교환사유')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'c' }--> | |
| {=__('취소사유')} | |
변경 후layer_order_refund_reason.html
| <div class="layer_order_refund_reason"> | |
| <div class="ly_head"> | |
| <h1 class="h_tit"> | |
| <!--{ ? handleInfo.userHandleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : handleInfo.userHandleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : handleInfo.userHandleMode == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'c' }--> | |
| {=__('취소사유')} | |
변경 전layer_tax_invoice_request.html
| </tr> | |
| <tr> | |
| <th scope="row"><label for="taxCompany">{=__('회사명')}</label></th> | |
| <td><input type="text" name="taxCompany" id="taxCompany" class="text" value="{=gd_isset(memberInvoiceInfo['tax']['company'])}" maxlength="50" data-pattern="gdMemberNmGlobal"/></td> | |
| </tr> | |
| <tr> | |
| <th scope="row"><label for="taxCeoNm">{=__('대표자명')}</label></th> | |
변경 후layer_tax_invoice_request.html
| </tr> | |
| <tr> | |
| <th scope="row"><label for="taxCompany">{=__('회사명')}</label></th> | |
| <td><input type="text" name="taxCompany" id="taxCompany" class="text" value="{=gd_isset(memberInvoiceInfo['tax']['company'])}" maxlength="70" data-pattern="gdMemberNmGlobal"/></td> | |
| </tr> | |
| <tr> | |
| <th scope="row"><label for="taxCeoNm">{=__('대표자명')}</label></th> | |
변경 전order.html
| </tr> | |
| <tr> | |
| <th scope="row"><label for="taxCompany">{=__('회사명')}</label></th> | |
| <td><input type="text" name="taxCompany" id="taxCompany" value="{=gd_isset(memberInvoiceInfo['tax']['company'])}" maxlength="50" data-pattern="gdMemberNmGlobal"/></td> | |
| </tr> | |
| <tr> | |
| <th scope="row"><label for="taxCeoNm">{=__('대표자명')}</label></th> | |
| r: 'cash_receipt_info' | |
| }; | |
| var checkedBox = $('input:radio[name=receiptFl]:checked'); | |
| var target = eval('useCode.' + checkedBox.val()); | |
| $('.js_receipt').addClass('dn'); | |
| $('#' + target).removeClass('dn'); | |
| if (checkedBox.val() == 'r') { | |
| gd_cash_receipt_toggle(); | |
변경 후order.html
| </tr> | |
| <tr> | |
| <th scope="row"><label for="taxCompany">{=__('회사명')}</label></th> | |
| <td><input type="text" name="taxCompany" id="taxCompany" value="{=gd_isset(memberInvoiceInfo['tax']['company'])}" maxlength="70" data-pattern="gdMemberNmGlobal"/></td> | |
| </tr> | |
| <tr> | |
| <th scope="row"><label for="taxCeoNm">{=__('대표자명')}</label></th> | |
| r: 'cash_receipt_info' | |
| }; | |
| var checkedBox = $('input:radio[name=receiptFl]:checked'); | |
| var target = checkedBox.val() in useCode ? useCode[checkedBox.val()] : undefined; | |
| $('.js_receipt').addClass('dn'); | |
| if (target !== undefined) { | |
| $('#' + target).removeClass('dn'); | |
| } | |
| if (checkedBox.val() == 'r') { | |
| gd_cash_receipt_toggle(); | |
변경 전write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" /> | |
| </li> | |
| </ul> | |
| </div> | |
변경 후write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </li> | |
| </ul> | |
| </div> | |
변경 전write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" /> | |
| </li> | |
| </ul> | |
| </div> | |
변경 후write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </li> | |
| </ul> | |
| </div> | |
변경 전write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" /> | |
| </li> | |
| </ul> | |
| </div> | |
변경 후write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </li> | |
| </ul> | |
| </div> | |
변경 전write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" /> | |
| </li> | |
| </ul> | |
| </div> | |
변경 후write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </li> | |
| </ul> | |
| </div> | |
변경 전write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" /> | |
| </li> | |
| </ul> | |
| </div> | |
변경 후write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </li> | |
| </ul> | |
| </div> | |
변경 전write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" /> | |
| </li> | |
| </ul> | |
| </div> | |
변경 후write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </li> | |
| </ul> | |
| </div> | |
변경 전write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" /> | |
| </li> | |
| </ul> | |
| </div> | |
변경 후write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </li> | |
| </ul> | |
| </div> | |
변경 전write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" /> | |
| </li> | |
| </ul> | |
| </div> | |
변경 후write.html
| <ul id="boardAttach"> | |
| <li class="item template"> | |
| <button class="file_face" type="button">{=__('파일첨부')}</button> | |
| <input class="file_hidden" type="file" name="upfiles[]" accept="image/*" <!--{? uploadMaxSize}-->data-upload-max-size="{=uploadMaxSize}"<!--{/}-->/> | |
| </li> | |
| </ul> | |
| </div> | |
변경 전gd_common.js
| if(data.formObj.find('[name=uploadType][value=ajax]').length < 1) { | |
| data.formObj.append('<input type="hidden" name="uploadType" value="ajax" >'); | |
| } | |
| var index = data.thisObj.closest('form').find('input:file').index(data.thisObj); | |
| formData.append('uploadFile', data.thisObj[0].files[0]); | |
| $.ajax({ | |
| url: data.actionUrl, | |
| type: 'POST', | |
| } | |
| else { | |
| gdAjaxUpload.isSuccess = false; | |
| if (returnData.errorMsg) { | |
| alert(returnData.errorMsg); | |
| } | |
| data.failAfter(returnData); | |
| } | |
| } | |
| } | |
| }); | |
| } | |
변경 후gd_common.js
| if(data.formObj.find('[name=uploadType][value=ajax]').length < 1) { | |
| data.formObj.append('<input type="hidden" name="uploadType" value="ajax" >'); | |
| } | |
| let index = data.thisObj.closest('form').find('input:file').index(data.thisObj); | |
| formData.append('uploadFile', data.thisObj[0].files[0]); | |
| let maxSize = data.thisObj.data('upload-max-size'); | |
| if (!data.thisObj[0].files || !data.thisObj[0].files[0]) { | |
| // 기존 업로드 정보 제거 | |
| $("input[name='uploadFileNm[" + index + "]']").remove(); | |
| $("input[name='saveFileNm[" + index + "]']").remove(); | |
| return; // 파일이 선택되지 않은 경우 처리 중단 | |
| } | |
| let uploadFile = data.thisObj[0].files[0]; | |
| let fileSize = uploadFile.size; | |
| if (maxSize !== undefined && maxSize !== null && fileSize > maxSize) { | |
| alert(`파일 1개당 최대 업로드 용량은 ${Math.floor(maxSize / (1024 * 1024))}MByte(s)입니다.`); | |
| let uploadFileInput = $('input[name="upfiles[]"]').eq(index); | |
| uploadFileInput.wrap('<form>').closest('form')[0].reset(); | |
| uploadFileInput.unwrap(); | |
| // 기존 업로드 정보 제거 | |
| $("input[name='uploadFileNm[" + index + "]']").remove(); | |
| $("input[name='saveFileNm[" + index + "]']").remove(); | |
| return; | |
| } | |
| $.ajax({ | |
| url: data.actionUrl, | |
| type: 'POST', | |
| } | |
| else { | |
| gdAjaxUpload.isSuccess = false; | |
| // 기존 업로드 정보 제거 | |
| $("input[name='uploadFileNm[" + index + "]']").remove(); | |
| $("input[name='saveFileNm[" + index + "]']").remove(); | |
| if (returnData.errorMsg) { | |
| alert(returnData.errorMsg); | |
| } | |
| data.failAfter(returnData); | |
| } | |
| } | |
| }, | |
| error: function () { | |
| alert(__('업로드에 실패하였습니다.')); | |
| $('input[name="upfiles[]"]').eq(index).val(''); | |
| // 기존 업로드 정보 제거 | |
| $("input[name='uploadFileNm[" + index + "]']").remove(); | |
| $("input[name='saveFileNm[" + index + "]']").remove(); | |
| } | |
| }); | |
| } | |
변경 전gd_gettext.js
| } | |
| Gettext.prototype.JSON = function (data) { | |
| return eval('(' + data + ')'); | |
| } | |
변경 후gd_gettext.js
| } | |
| Gettext.prototype.JSON = function (data) { | |
| return JSON.parse(data); | |
| } | |
변경 전gd_member2.js
| if (isComCertificationRequired && hasDeleteSno && isFileEmpty && !isDeleteChecked) { | |
| $comCertification.rules("remove"); | |
| } | |
| $(form).find('select').prop('disabled',false); | |
| validate.settings.submitHandler = func; | |
| } | |
| if (validate.form()) { | |
| $('.join_ok_btn').attr("disabled", true); | |
| form.submit(); | |
| } else { | |
| go_to_by_scroll($('div.c_red:first', form)); | |
변경 후gd_member2.js
| if (isComCertificationRequired && hasDeleteSno && isFileEmpty && !isDeleteChecked) { | |
| $comCertification.rules("remove"); | |
| } | |
| } | |
| if (validate.form()) { | |
| $(form).find('select').prop('disabled',false); | |
| $('.join_ok_btn').attr("disabled", true); | |
| validate.settings.submitHandler = func; | |
| form.submit(); | |
| } else { | |
| go_to_by_scroll($('div.c_red:first', form)); | |
변경 전_order_goods_list.html
| <!--{ ? gd_is_plus_shop(c.PLUSSHOP_CODE_USEREXCHANGE) === true && (...userHandleSno > 0 || (...handleSno > 0 && ...handleDetailReasonShowFl == 'y') ) }--> | |
| <li> | |
| <a href="../mypage/layer_order_refund_reason.php?orderNo={..orderNo}&orderGoodsNo={...sno}&userHandleSno={...userHandleSno}&orderStatus={...orderStatus}" data-toggle="modal" data-target="#popupReason" data-type="post" data-cache="false" class="order_etc_btn"> | |
| <!--{ ? ...userHandleMode == 'b' || ...handleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ...userHandleMode == 'r' || ...handleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ...userHandleMode == 'e' || ...handleMode == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : ...userHandleMode == 'c' || ...handleMode == 'c'}--> | |
| {=__('취소사유')} | |
| <!--{ / }--> | |
| </a> | |
변경 후_order_goods_list.html
| <!--{ ? gd_is_plus_shop(c.PLUSSHOP_CODE_USEREXCHANGE) === true && (...userHandleSno > 0 || (...handleSno > 0 && ...handleDetailReasonShowFl == 'y') ) }--> | |
| <li> | |
| <a href="../mypage/layer_order_refund_reason.php?orderNo={..orderNo}&orderGoodsNo={...sno}&userHandleSno={...userHandleSno}&orderStatus={...orderStatus}" data-toggle="modal" data-target="#popupReason" data-type="post" data-cache="false" class="order_etc_btn"> | |
| <!--{ ? ...userHandleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ...userHandleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ...userHandleMode == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : ...userHandleMode == 'c' }--> | |
| {=__('취소사유')} | |
| <!--{ : ...handleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ...handleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ...handleMode == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : ...handleMode == 'c' }--> | |
| {=__('취소사유')} | |
| <!--{ / }--> | |
| </a> | |
변경 전_reorder_goods_list.html
| <!--{ ? gd_is_plus_shop(c.PLUSSHOP_CODE_USEREXCHANGE) === true && (...userHandleSno > 0 || (...handleSno > 0 && ...handleDetailReasonShowFl == 'y') ) }--> | |
| <li> | |
| <a href="../mypage/layer_order_refund_reason.php?orderNo={..orderNo}&orderGoodsNo={...sno}&userHandleSno={...userHandleSno}&orderStatus={...orderStatus}" data-toggle="modal" data-target="#popupReason" data-type="post" data-cache="false" class="order_etc_btn"> | |
| <!--{ ? ...userHandleMode == 'b' || ...handleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ...userHandleMode == 'r' || ...handleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ...userHandleMode == 'e' || ...handleMode == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : ...userHandleMode == 'c' || ...handleMode == 'c'}--> | |
| {=__('취소사유')} | |
| <!--{ / }--> | |
| </a> | |
변경 후_reorder_goods_list.html
| <!--{ ? gd_is_plus_shop(c.PLUSSHOP_CODE_USEREXCHANGE) === true && (...userHandleSno > 0 || (...handleSno > 0 && ...handleDetailReasonShowFl == 'y') ) }--> | |
| <li> | |
| <a href="../mypage/layer_order_refund_reason.php?orderNo={..orderNo}&orderGoodsNo={...sno}&userHandleSno={...userHandleSno}&orderStatus={...orderStatus}" data-toggle="modal" data-target="#popupReason" data-type="post" data-cache="false" class="order_etc_btn"> | |
| <!--{ ? ...userHandleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ...userHandleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ...userHandleMode == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : ...userHandleMode == 'c' }--> | |
| {=__('취소사유')} | |
| <!--{ : ...handleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : ...handleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : ...handleMode == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : ...handleMode == 'c' }--> | |
| {=__('취소사유')} | |
| <!--{ / }--> | |
| </a> | |
변경 전layer_order_refund_reason.html
| <div class="layer_order_refund_reason"> | |
| <div class="ly_head"> | |
| <h1 class="h_tit"> | |
| <!--{ ? substr(handleInfo.orderStatus, 0, 1) == 'b' || handleInfo.userHandleMode == 'b'}--> | |
| {=__('반품사유')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'r' || handleInfo.userHandleMode == 'r'}--> | |
| {=__('환불사유')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'e' || handleInfo.userHandleMode == 'e'}--> | |
| {=__('교환사유')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'c' }--> | |
| {=__('취소사유')} | |
변경 후layer_order_refund_reason.html
| <div class="layer_order_refund_reason"> | |
| <div class="ly_head"> | |
| <h1 class="h_tit"> | |
| <!--{ ? handleInfo.userHandleMode == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : handleInfo.userHandleMode == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : handleInfo.userHandleMode == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'b' }--> | |
| {=__('반품사유')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'r' }--> | |
| {=__('환불사유')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'e' }--> | |
| {=__('교환사유')} | |
| <!--{ : substr(handleInfo.orderStatus, 0, 1) == 'c' }--> | |
| {=__('취소사유')} | |
변경 전layer_tax_invoice_request.html
| </tr> | |
| <tr> | |
| <th scope="row"><label for="taxCompany">{=__('회사명')}</label></th> | |
| <td><input type="text" name="taxCompany" id="taxCompany" class="text" value="{=gd_isset(memberInvoiceInfo['tax']['company'])}" maxlength="50" data-pattern="gdMemberNmGlobal"/></td> | |
| </tr> | |
| <tr> | |
| <th scope="row"><label for="taxCeoNm">{=__('대표자명')}</label></th> | |
변경 후layer_tax_invoice_request.html
| </tr> | |
| <tr> | |
| <th scope="row"><label for="taxCompany">{=__('회사명')}</label></th> | |
| <td><input type="text" name="taxCompany" id="taxCompany" class="text" value="{=gd_isset(memberInvoiceInfo['tax']['company'])}" maxlength="70" data-pattern="gdMemberNmGlobal"/></td> | |
| </tr> | |
| <tr> | |
| <th scope="row"><label for="taxCeoNm">{=__('대표자명')}</label></th> | |
변경 전order.html
| </tr> | |
| <tr> | |
| <th scope="row"><label for="taxCompany">{=__('회사명')}</label></th> | |
| <td><input type="text" name="taxCompany" id="taxCompany" value="{=gd_isset(memberInvoiceInfo['tax']['company'])}" maxlength="50" data-pattern="gdMemberNmGlobal"/></td> | |
| </tr> | |
| <tr> | |
| <th scope="row"><label for="taxCeoNm">{=__('대표자명')}</label></th> | |
| r: 'cash_receipt_info' | |
| }; | |
| var checkedBox = $('input:radio[name=receiptFl]:checked'); | |
| var target = eval('useCode.' + checkedBox.val()); | |
| $('.js_receipt').addClass('dn'); | |
| $('#' + target).removeClass('dn'); | |
| if (checkedBox.val() == 'r') { | |
| gd_cash_receipt_toggle(); | |
변경 후order.html
| </tr> | |
| <tr> | |
| <th scope="row"><label for="taxCompany">{=__('회사명')}</label></th> | |
| <td><input type="text" name="taxCompany" id="taxCompany" value="{=gd_isset(memberInvoiceInfo['tax']['company'])}" maxlength="70" data-pattern="gdMemberNmGlobal"/></td> | |
| </tr> | |
| <tr> | |
| <th scope="row"><label for="taxCeoNm">{=__('대표자명')}</label></th> | |
| r: 'cash_receipt_info' | |
| }; | |
| var checkedBox = $('input:radio[name=receiptFl]:checked'); | |
| var target = checkedBox.val() in useCode ? useCode[checkedBox.val()] : undefined; | |
| $('.js_receipt').addClass('dn'); | |
| if (target !== undefined) { | |
| $('#' + target).removeClass('dn'); | |
| } | |
| if (checkedBox.val() == 'r') { | |
| gd_cash_receipt_toggle(); | |