변경 파일 목록
총 22개
Admin (9)
sms_auto.phpmember/sms_log.phpmember/sms_send.phpmember/cart_remind_regist.phppromotion/comeback_coupon_regist.phppromotion/layer_cart_remind_message.phppromotion/layer_comeback_coupon_sms.phpshare/layer_standby_sms.phpshare/member_crm_sms.phpshare/Component (6)
CartRemind.phpCartRemind/CouponAdmin.phpCoupon/DBTableField.phpDatabase/SmsAdmin.phpSms/SmsAuto.phpSms/SmsSender.phpSms/Controller (7)
SmsAutoController.phpAdmin/Member/SmsLogPsController.phpAdmin/Member/SmsSendController.phpAdmin/Member/CartRemindRegistController.phpAdmin/Promotion/ComebackCouponRegistController.phpAdmin/Promotion/LayerCartRemindMessageController.phpAdmin/Promotion/LayerStandbySmsController.phpAdmin/Share/변경 파일 코드
추가삭제
변경 전sms_auto.php
| </label> | |
| <input type="hidden" name="<?php echo $sKey; ?>[<?php echo $typeData['code']; ?>][memberMode]" value="<?php echo $typeData['memberMode']; ?>"/> | |
| <input type="hidden" name="<?php echo $sKey; ?>[<?php echo $typeData['code']; ?>][memberSno]" value="<?php echo $typeData['memberSno']; ?>"/> | |
| <textarea name="<?php echo $sKey; ?>[<?php echo $typeData['code']; ?>][memberContents]" rows="4" class="form-control"><?php echo $typeData['memberContents']; ?></textarea> | |
| <?php } else { ?> | |
| <div class="text-center text-blue">운영자 전용</div> | |
| <?php } ?> | |
| </label> | |
| <input type="hidden" name="<?php echo $sKey; ?>[<?php echo $typeData['code']; ?>][adminMode]" value="<?php echo $typeData['adminMode']; ?>"/> | |
| <input type="hidden" name="<?php echo $sKey; ?>[<?php echo $typeData['code']; ?>][adminSno]" value="<?php echo $typeData['adminSno']; ?>"/> | |
| <textarea name="<?php echo $sKey; ?>[<?php echo $typeData['code']; ?>][adminContents]" rows="4" | |
| class="form-control <?php if ($sKey == 'admin') { ?> width100p <?php } ?>"><?php echo $typeData['adminContents']; ?></textarea> | |
| <?php } else { ?> | |
| <div class="text-center text-orange-red">회원 전용</div> | |
| <?php } ?> | |
| </label> | |
| <input type="hidden" name="<?php echo $sKey; ?>[<?php echo $typeData['code']; ?>][providerMode]" value="<?php echo $typeData['providerMode']; ?>"/> | |
| <input type="hidden" name="<?php echo $sKey; ?>[<?php echo $typeData['code']; ?>][providerSno]" value="<?php echo $typeData['providerSno']; ?>"/> | |
| <textarea name="<?php echo $sKey; ?>[<?php echo $typeData['code']; ?>][providerContents]" rows="4" class="form-control"><?php echo $typeData['providerContents']; ?></textarea> | |
| <?php } else { ?> | |
| <?php if ($sKey == 'admin') { ?> | |
| <div class="text-center text-orange-red">본사 전용</div> | |
| <input type="hidden" name="<?php echo $sKey; ?>[<?php echo $typeData['code']; ?>][providerSno]" value="<?php echo $typeData['providerSno']; ?>"/> | |
| <input type="hidden" name="<?php echo $sKey; ?>[<?php echo $typeData['code']; ?>][providerMode]" value="<?php echo $typeData['providerMode']; ?>"/> | |
| <input type="hidden" name="<?php echo $sKey; ?>[<?php echo $typeData['code']; ?>][providerContents]" value="<?php echo $typeData['providerContents']; ?>"/> | |
| <?php } ?> | |
| </tr> | |
| <?php | |
| <script type="text/javascript"> | |
| <!-- | |
| $(document).ready(function () { | |
| $('.btn-change-password').click(function () { | |
| $.get('../share/layer_sms_password.php?mode=change', function () { | |
| BootstrapDialog.closeAll(); | |
변경 후sms_auto.php
| </label> | |
| <input type="hidden" name="<?php echo $sKey; ?>[<?php echo $typeData['code']; ?>][memberMode]" value="<?php echo $typeData['memberMode']; ?>"/> | |
| <input type="hidden" name="<?php echo $sKey; ?>[<?php echo $typeData['code']; ?>][memberSno]" value="<?php echo $typeData['memberSno']; ?>"/> | |
| <div class="js-sms-auto-subject-wrap mgb5"> | |
| <input type="text" name="<?= $sKey ?>[<?= $typeData['code'] ?>][memberMessageTitle]" class="form-control js-sms-auto-subject" placeholder="제목 입력" value="<?= gd_isset($typeData['memberMessageTitle']) ?>"/> | |
| </div> | |
| <textarea name="<?= $sKey ?>[<?= $typeData['code'] ?>][memberContents]" rows="4" class="form-control js-sms-auto-contents"><?= $typeData['memberContents'] ?></textarea> | |
| <?php } else { ?> | |
| <div class="text-center text-blue">운영자 전용</div> | |
| <?php } ?> | |
| </label> | |
| <input type="hidden" name="<?php echo $sKey; ?>[<?php echo $typeData['code']; ?>][adminMode]" value="<?php echo $typeData['adminMode']; ?>"/> | |
| <input type="hidden" name="<?php echo $sKey; ?>[<?php echo $typeData['code']; ?>][adminSno]" value="<?php echo $typeData['adminSno']; ?>"/> | |
| <div class="js-sms-auto-subject-wrap mgb5"> | |
| <input type="text" name="<?= $sKey ?>[<?= $typeData['code'] ?>][adminMessageTitle]" class="form-control js-sms-auto-subject" placeholder="제목 입력" value="<?= gd_isset($typeData['adminMessageTitle']) ?>"/> | |
| </div> | |
| <textarea name="<?php echo $sKey; ?>[<?php echo $typeData['code']; ?>][adminContents]" rows="4" | |
| class="form-control js-sms-auto-contents <?php if ($sKey == 'admin') { ?> width100p <?php } ?>"><?= $typeData['adminContents'] ?></textarea> | |
| <?php } else { ?> | |
| <div class="text-center text-orange-red">회원 전용</div> | |
| <?php } ?> | |
| </label> | |
| <input type="hidden" name="<?php echo $sKey; ?>[<?php echo $typeData['code']; ?>][providerMode]" value="<?php echo $typeData['providerMode']; ?>"/> | |
| <input type="hidden" name="<?php echo $sKey; ?>[<?php echo $typeData['code']; ?>][providerSno]" value="<?php echo $typeData['providerSno']; ?>"/> | |
| <div class="js-sms-auto-subject-wrap mgb5"> | |
| <input type="text" name="<?= $sKey ?>[<?= $typeData['code'] ?>][providerMessageTitle]" class="form-control js-sms-auto-subject" placeholder="제목 입력" value="<?= gd_isset($typeData['providerMessageTitle']) ?>"/> | |
| </div> | |
| <textarea name="<?= $sKey ?>[<?= $typeData['code'] ?>][providerContents]" rows="4" class="form-control js-sms-auto-contents"><?= $typeData['providerContents'] ?></textarea> | |
| <?php } else { ?> | |
| <?php if ($sKey == 'admin') { ?> | |
| <div class="text-center text-orange-red">본사 전용</div> | |
| <input type="hidden" name="<?php echo $sKey; ?>[<?php echo $typeData['code']; ?>][providerSno]" value="<?php echo $typeData['providerSno']; ?>"/> | |
| <input type="hidden" name="<?php echo $sKey; ?>[<?php echo $typeData['code']; ?>][providerMode]" value="<?php echo $typeData['providerMode']; ?>"/> | |
| <input type="hidden" name="<?php echo $sKey; ?>[<?php echo $typeData['code']; ?>][providerContents]" value="<?php echo $typeData['providerContents']; ?>"/> | |
| <input type="hidden" name="<?= $sKey ?>[<?= $typeData['code'] ?>][providerMessageTitle]" value="<?= gd_isset($typeData['providerMessageTitle']) ?>"/> | |
| <?php } ?> | |
| </tr> | |
| <?php | |
| <script type="text/javascript"> | |
| <!-- | |
| $(document).ready(function () { | |
| // 제목 바이트 계산 (한글 등 멀티바이트 2byte, ASCII 1byte, 개행 제외) | |
| function smsAutoStringToByte(str) { | |
| var length = 0; | |
| for (var i = 0; i < str.length; i++) { | |
| if (escape(str.charAt(i)).length >= 4) length += 2; | |
| else if (escape(str.charAt(i)) != "%0D") length++; | |
| } | |
| return length; | |
| } | |
| // 이모티콘 제거 (서로게이트 페어 + 변형선택자, 기획: 제목·본문 입력 불가) | |
| function smsAutoStripEmoji(str) { | |
| if (!str) return str; | |
| return str.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, '').replace(/[\uFE00-\uFE0F\u200D\u20E3]/g, ''); | |
| } | |
| // 자동발송 제목 영역은 항상 활성 노출(C3). 본문은 이모티콘만 자동 제거. | |
| $('.js-sms-auto-contents').on('keyup change', function () { | |
| var $ta = $(this); | |
| var stripped = smsAutoStripEmoji($ta.val()); | |
| if (stripped !== $ta.val()) { $ta.val(stripped); } | |
| }); | |
| $('.js-sms-auto-subject').on('keyup keydown', function () { | |
| var input = $(this); | |
| var text = smsAutoStripEmoji(input.val()); | |
| while (smsAutoStringToByte(text) > <?= $lmsSubjectLimit; ?>) { text = text.substring(0, text.length - 1); } | |
| input.val(text); | |
| }); | |
| $('.btn-change-password').click(function () { | |
| $.get('../share/layer_sms_password.php?mode=change', function () { | |
| BootstrapDialog.closeAll(); | |
변경 전sms_log.php
| $listHtml[] = '<td class="text-center number">' . ($data['receiverCnt'] * $lmsPoint) . '</td>'; | |
| } | |
| $listHtml[] = '<td style="word-break:break-all;word-wrap:break-word;overflow:hidden;" class="multirows">'; | |
| $listHtml[] = '<div class="div-contents">' . $data['contents'] . '</div>'; | |
| if ($data['sendStatus'] === 'r' && $data['smsType'] === 'user') { | |
| $listHtml[] = '<div><button type="button" class="btn btn-xs btn-gray btn-modify">수정하기</button></div>'; | |
변경 후sms_log.php
| $listHtml[] = '<td class="text-center number">' . ($data['receiverCnt'] * $lmsPoint) . '</td>'; | |
| } | |
| $listHtml[] = '<td style="word-break:break-all;word-wrap:break-word;overflow:hidden;" class="multirows">'; | |
| if ($data['sendFl'] === 'lms') { | |
| $subjectText = ($data['subject'] !== null && $data['subject'] !== '') ? $data['subject'] : '[' . __('제목없음') . ']'; | |
| $listHtml[] = '<div class="div-subject text-darkblue"><strong>' . gd_htmlspecialchars($subjectText) . '</strong></div>'; | |
| } | |
| $listHtml[] = '<div class="div-contents">' . $data['contents'] . '</div>'; | |
| if ($data['sendStatus'] === 'r' && $data['smsType'] === 'user') { | |
| $listHtml[] = '<div><button type="button" class="btn btn-xs btn-gray btn-modify">수정하기</button></div>'; | |
변경 전sms_send.php
| return length; | |
| } | |
| /** | |
| * SMS 내용 길이 체크 | |
| */ | |
| function setContentsLength(contentsNm, countId) { | |
| var textarea = $('textarea[name=' + contentsNm + ']'); | |
| var contentsText = textarea.val(); | |
| var textLength = stringToByte(contentsText); | |
| if (textLength > <?php echo $smsStringLimit;?>) { | |
| if (textLength > <?php echo $lmsStringLimit;?>) { | |
| $('.sms-type').hide(); | |
| $('.lms-type').show(); | |
| $('input[name=sendFl]').val('lms'); | |
| } else { | |
| $('#' + countId).css("color", ""); | |
| $('.sms-type').show(); | |
| $('.lms-type').hide(); | |
| $('input[name=sendFl]').val('sms'); | |
| } | |
| $('#' + countId).val(textLength); | |
| } | |
| setContentsLength('smsContents', 'smsStringCount'); | |
| } | |
| function setReceiverCount() { | |
| var checkedType = $('[name=receiverType]:checked').val(); | |
| var receiverCount = 0, agreeCount = 0, rejectCount = 0; | |
| dialog: false, | |
| debug: true, | |
| submitHandler: function (form) { | |
| console.log('submitHan', form); | |
| var divisionInt = 1; | |
| if ($('input[name=sendFl]').val() === 'lms') { | |
| divisionInt = <?php echo $lmsPoint;?>; | |
| <div class="notice-danger pull-left mgl15 display-none">회원 외 치환코드는 정상 적용되지 않으니 저장된 메시지 수정 시에만 이용바랍니다.</div> | |
| </div> | |
| </div> | |
| <div class="row pdt5"> | |
| <div class="col-xs-3 pdr0"> | |
| <label class="width100p"> | |
| <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> | |
| </div> | |
| <%= checkbox %> <%= subject %> | |
| <button type="button" class="btn btn-sm btn-white pull-right js-btn-save" data-text="저장">수정</button> | |
| <button type="button" class="btn btn-sm btn-white pull-right js-btn-insert mgr5">삽입</button> | |
| <label class="width100p pdt5"> | |
| <textarea rows="13" class="form-control width100p" name="contents"><%= contents %></textarea> | |
| </label> | |
변경 후sms_send.php
| return length; | |
| } | |
| /** | |
| * 이모티콘 제거 (제목/본문 이모티콘 입력 불가 - 자동 삭제) | |
| */ | |
| function stripEmoji(str) { | |
| if (!str) { | |
| return str; | |
| } | |
| return str | |
| .replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, '') | |
| .replace(/[\uFE00-\uFE0F\u200D\u20E3]/g, ''); | |
| } | |
| /** | |
| * SMS 내용 길이 체크 | |
| */ | |
| function setContentsLength(contentsNm, countId) { | |
| var textarea = $('textarea[name=' + contentsNm + ']'); | |
| var strippedBody = stripEmoji(textarea.val()); | |
| if (strippedBody !== textarea.val()) { | |
| textarea.val(strippedBody); | |
| } | |
| var contentsText = strippedBody; | |
| var textLength = stringToByte(contentsText); | |
| if (textLength > <?php echo $smsStringLimit;?>) { | |
| if (textLength > <?php echo $lmsStringLimit;?>) { | |
| $('.sms-type').hide(); | |
| $('.lms-type').show(); | |
| $('input[name=sendFl]').val('lms'); | |
| $('#smsSubject').prop('disabled', false); // LMS: 제목 영역 활성 | |
| setSubjectLength(); | |
| } else { | |
| $('#' + countId).css("color", ""); | |
| $('.sms-type').show(); | |
| $('.lms-type').hide(); | |
| $('input[name=sendFl]').val('sms'); | |
| $('#smsSubject').prop('disabled', true); // SMS: 제목 영역 비활성(값 유지, 미발송) | |
| } | |
| $('#' + countId).val(textLength); | |
| } | |
| setContentsLength('smsContents', 'smsStringCount'); | |
| } | |
| /** | |
| * LMS 제목 Byte 체크 (공백 포함 최대 <?= $lmsSubjectLimit; ?>Byte, 초과분 자동 삭제) | |
| */ | |
| function setSubjectLength() { | |
| var input = $('#smsSubject'); | |
| if (input.length === 0) { | |
| return; | |
| } | |
| var limit = <?= $lmsSubjectLimit; ?>; | |
| var text = stripEmoji(input.val()); | |
| var adChecked = $('input[name=sms080Reject]').is(':checked'); | |
| var byte = stringToByte(text); | |
| if (adChecked && byte > limit) { | |
| // C4-2: (광고) 자동 삽입으로 40Byte 초과 -> 절삭하지 않고 에러 표기 | |
| input.val(text); | |
| setSubjectOver(true); | |
| } else { | |
| // C1-1: 직접 입력 40Byte 초과분 자동삭제 | |
| while (stringToByte(text) > limit) { | |
| text = text.substring(0, text.length - 1); | |
| } | |
| input.val(text); | |
| byte = stringToByte(text); | |
| setSubjectOver(false); | |
| } | |
| $('#smsSubjectCount').val(byte); | |
| } | |
| function setSubjectOver(isOver) { | |
| var input = $('#smsSubject'); | |
| if (isOver) { | |
| input.addClass('js-subject-over').css('border-color', '#e74c3c'); | |
| $('#smsSubjectCount').css('color', '#e74c3c'); | |
| } else { | |
| input.removeClass('js-subject-over').css('border-color', ''); | |
| $('#smsSubjectCount').css('color', ''); | |
| } | |
| } | |
| function setReceiverCount() { | |
| var checkedType = $('[name=receiverType]:checked').val(); | |
| var receiverCount = 0, agreeCount = 0, rejectCount = 0; | |
| dialog: false, | |
| debug: true, | |
| submitHandler: function (form) { | |
| // C4-2: 제목 40Byte 초과(광고 삽입 등) 시 발송 차단 | |
| if ($('input[name=sendFl]').val() === 'lms' && $('#smsSubject').length && stringToByte(stripEmoji($('#smsSubject').val())) > <?= $lmsSubjectLimit; ?>) { | |
| BootstrapDialog.show({title: '경고', message: '제목은 최대 <?= $lmsSubjectLimit; ?>bytes까지 입력 가능합니다.', closable: true}); | |
| $('#smsSubject').focus(); | |
| return false; | |
| } | |
| var divisionInt = 1; | |
| if ($('input[name=sendFl]').val() === 'lms') { | |
| divisionInt = <?php echo $lmsPoint;?>; | |
| <div class="notice-danger pull-left mgl15 display-none">회원 외 치환코드는 정상 적용되지 않으니 저장된 메시지 수정 시에만 이용바랍니다.</div> | |
| </div> | |
| </div> | |
| <div class="row pdt5 js-subject-row"> | |
| <div class="col-xs-3 pdr0"> | |
| <input type="text" name="smsSubject" id="smsSubject" class="form-control width100p" placeholder="제목을 입력해주세요." value="<?= gd_isset($smsSubject); ?>" onkeyup="setSubjectLength();" onkeydown="setSubjectLength();" disabled="disabled"/> | |
| <div class="mgt5"> | |
| <input type="text" id="smsSubjectCount" value="0" readonly="readonly" class="form-control width-3xs"> / <?= $lmsSubjectLimit; ?> Bytes | |
| </div> | |
| </div> | |
| </div> | |
| <div class="row pdt5"> | |
| <div class="col-xs-3 pdr0"> | |
| <label class="width100p"> | |
| <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-info">본문 내용이 LMS인 경우에만 제목 입력이 가능하며, 제목 영역에는 직접 (광고) 문구를 입력하지 않도록 하고 광고 삽입이 필요한 경우 광고성 문구 추가 기능을 사용해야 합니다.</div> | |
| <div class="notice-danger sms-large-caution">발송내용에 이모지 또는 사용 불가능한 특수문자, 맞춤법이 바르지 않은 문자가 포함되어있으면 일부 내용은 삭제되고 발송되오니 주의하시기 바랍니다.<br/>대량 SMS(LMS) 발송 시 이모지를 사용하지 않는 것과 맞춤법에 어긋나는 문자가 입력 되지는 않았는지 확인하시는 것을 권장 드리며,<br/> 발송 내용에 사용가능한 특수문자는 매뉴얼을 참고하시기 바랍니다.</div> | |
| </div> | |
| </div> | |
| <%= checkbox %> <%= subject %> | |
| <button type="button" class="btn btn-sm btn-white pull-right js-btn-save" data-text="저장">수정</button> | |
| <button type="button" class="btn btn-sm btn-white pull-right js-btn-insert mgr5">삽입</button> | |
| <input type="text" name="messageTitle" class="form-control width100p mgt5 js-sms-contents-subject" placeholder="제목을 입력해주세요." value="<%= messageTitle %>" disabled="disabled"/> | |
| <label class="width100p pdt5"> | |
| <textarea rows="13" class="form-control width100p" name="contents"><%= contents %></textarea> | |
| </label> | |
변경 전cart_remind_regist.php
| } | |
| if (e.target.checked) { | |
| $body.val('(광고)\n' + $body.val() + '\n무료거부 ' + $('input[name="sms080Reject"]').data('reject-number')); | |
| } | |
| changeCartRemindContentsLength(); | |
| // 본문 반영으로 SMS/LMS 판정이 끝난 뒤에 제목 처리 — 제목 영역이 비활성(SMS)이면 (광고) 미표기 | |
| if (e.target.checked && $subject.length && !$subject.prop('disabled')) { | |
| $subject.val('(광고)' + $subject.val()); | |
| } | |
| changeCartRemindSubjectLength(); | |
| }); | |
| } | |
| if (e.target.checked) { | |
| $body.val('(광고)\n' + $body.val() + '\n무료거부 ' + $('input[name="sms080Reject"]').data('reject-number')); | |
| if ($subject.length) { | |
| $subject.val('(광고)' + $subject.val()); | |
| } | |
| } | |
| changeCartRemindContentsLength(); | |
| changeCartRemindSubjectLength(); | |
| }); | |
| <span class="cart-remind-sms notice-info">SMS : 발송 건당 1포인트 차감</span> | |
| </div> | |
| </div> | |
| <div class="form-inline mgt10"> | |
| <textarea name="cartRemindSendMessage" rows="8" class="smsContents form-control width-xl js-sms080-update"><?= $cartRemindData['cartRemindSendMessage']; ?></textarea> | |
| <div class="mgt5"> | |
| <a href="https://www.nhn-commerce.com/customer/board-view.gd?type=notice&idx=1237" target="_blank" class="btn-link">자세히보기></a> | |
| </p> | |
| <p class="notice-info">장바구니 링크 치환코드는 LMS인 경우에만 정상적으로 발송됩니다</p> | |
| </div> | |
| </td> | |
| </tr> | |
| // 글자수 체크 | |
| $('textarea[name=cartRemindSendMessage]').keyup(changeCartRemindContentsLength); | |
| displayCartRemindCouponLink(); | |
| changeCartRemindType(); | |
| changeCartRemindSendType(); | |
| changeCartRemindManualDirectPeriod(); | |
| changeCartRemindContentsLength(); | |
| // 광고성 문구 추가 | |
| $('input[name="sms080Reject"]').click(function (e) { | |
| $('.js-sms080-update').val($('.js-sms080-update').val().replace(/(\n무료거부\s[0-9\-]*)/g, '')); | |
| if(e.target.checked){ | |
| $('.js-sms080-update').val($('.js-sms080-update').val() + '\n무료거부 ' + $('input[name="sms080Reject"]').data('reject-number')); | |
| }; | |
| }); | |
| }); | |
| * SMS 내용 길이 체크 | |
| */ | |
| function changeCartRemindContentsLength() { | |
| var contentsText = $('textarea[name=cartRemindSendMessage]').val(); | |
| var textLength = stringToByte(contentsText); | |
| if ($('input:hidden[name="cartRemindSendType"]').val() == 'sms' && textLength > <?= $smsStringLimit; ?>) { | |
| } | |
| $('#cartRemindSendMessageCount').val(textLength); | |
| } | |
| // 발송유형 따른 폼 변경 | |
| function changeCartRemindType() { | |
| if ($('input:radio[name="cartRemindType"]:checked').val() == 'manual') { | |
| $('.cart-remind-sms').hide(); | |
| $('.cart-remind-sms select').attr('disabled', 'disabled'); | |
| $('.cart-remind-sms input').attr('disabled', 'disabled'); | |
| // sms발송 | |
| } else if ($('input:hidden[name="cartRemindSendType"]').val() == 'sms') { | |
| $('.cart-remind-lms').hide(); | |
| $('.cart-remind-sms').show(); | |
| $('.cart-remind-sms select').removeAttr('disabled'); | |
| $('.cart-remind-sms input').removeAttr('disabled'); | |
| } | |
| } | |
| // 발급방식에 따른 폼 변경 | |
| } | |
| return length; | |
| } | |
| </script> | |
변경 후cart_remind_regist.php
| } | |
| if (e.target.checked) { | |
| $body.val('(광고)\n' + $body.val() + '\n무료거부 ' + $('input[name="sms080Reject"]').data('reject-number')); | |
| if ($subject.length) { | |
| $subject.val('(광고)' + $subject.val()); | |
| } | |
| } | |
| changeCartRemindContentsLength(); | |
| changeCartRemindSubjectLength(); | |
| }); | |
| } | |
| if (e.target.checked) { | |
| $body.val('(광고)\n' + $body.val() + '\n무료거부 ' + $('input[name="sms080Reject"]').data('reject-number')); | |
| } | |
| changeCartRemindContentsLength(); | |
| // 본문 반영으로 SMS/LMS 판정이 끝난 뒤에 제목 처리 — 제목 영역이 비활성(SMS)이면 (광고) 미표기 | |
| if (e.target.checked && $subject.length && !$subject.prop('disabled')) { | |
| $subject.val('(광고)' + $subject.val()); | |
| } | |
| changeCartRemindSubjectLength(); | |
| }); | |
| <span class="cart-remind-sms notice-info">SMS : 발송 건당 1포인트 차감</span> | |
| </div> | |
| </div> | |
| <div class="form-inline mgt10 js-cart-subject-row"> | |
| <input type="text" name="cartRemindSendSubject" id="cartRemindSendSubject" class="form-control width-xl" placeholder="제목을 입력해주세요." value="<?= gd_isset($cartRemindData['cartRemindSendSubject']); ?>" disabled="disabled"/> | |
| <input type="text" id="cartRemindSubjectCount" value="0" readonly="readonly" class="form-control width-3xs"> / <?= $lmsSubjectLimit; ?> Bytes | |
| </div> | |
| <div class="form-inline mgt10"> | |
| <textarea name="cartRemindSendMessage" rows="8" class="smsContents form-control width-xl js-sms080-update"><?= $cartRemindData['cartRemindSendMessage']; ?></textarea> | |
| <div class="mgt5"> | |
| <a href="https://www.nhn-commerce.com/customer/board-view.gd?type=notice&idx=1237" target="_blank" class="btn-link">자세히보기></a> | |
| </p> | |
| <p class="notice-info">장바구니 링크 치환코드는 LMS인 경우에만 정상적으로 발송됩니다</p> | |
| <p class="notice-info">본문 내용이 LMS인 경우에만 제목 입력이 가능하며, 제목 영역에는 직접 (광고) 문구를 입력하지 않도록 하고 광고 삽입이 필요한 경우 광고성 문구 추가 기능을 사용해야 합니다.</p> | |
| </div> | |
| </td> | |
| </tr> | |
| // 글자수 체크 | |
| $('textarea[name=cartRemindSendMessage]').keyup(changeCartRemindContentsLength); | |
| $('#cartRemindSendSubject').on('keyup keydown', changeCartRemindSubjectLength); | |
| displayCartRemindCouponLink(); | |
| changeCartRemindType(); | |
| changeCartRemindSendType(); | |
| changeCartRemindManualDirectPeriod(); | |
| changeCartRemindContentsLength(); | |
| changeCartRemindSubjectLength(); | |
| // 광고성 문구 추가 (본문: (광고) 접두 + 무료거부 접미 / LMS 제목: (광고) 접두) | |
| $('input[name="sms080Reject"]').click(function (e) { | |
| var $body = $('.js-sms080-update'); | |
| $body.val($body.val().replace(/(\(광고\)\n)|(\n무료거부\s[0-9\-]*)/g, '')); | |
| var $subject = $('#cartRemindSendSubject'); | |
| if ($subject.length) { | |
| $subject.val($subject.val().replace(/^\(광고\)/, '')); | |
| } | |
| if (e.target.checked) { | |
| $body.val('(광고)\n' + $body.val() + '\n무료거부 ' + $('input[name="sms080Reject"]').data('reject-number')); | |
| if ($subject.length) { | |
| $subject.val('(광고)' + $subject.val()); | |
| } | |
| } | |
| changeCartRemindContentsLength(); | |
| changeCartRemindSubjectLength(); | |
| }); | |
| }); | |
| * SMS 내용 길이 체크 | |
| */ | |
| function changeCartRemindContentsLength() { | |
| var $cartTa = $('textarea[name=cartRemindSendMessage]'); | |
| var strippedBody = stripEmoji($cartTa.val()); | |
| if (strippedBody !== $cartTa.val()) { | |
| $cartTa.val(strippedBody); | |
| } | |
| var contentsText = strippedBody; | |
| var textLength = stringToByte(contentsText); | |
| if ($('input:hidden[name="cartRemindSendType"]').val() == 'sms' && textLength > <?= $smsStringLimit; ?>) { | |
| } | |
| $('#cartRemindSendMessageCount').val(textLength); | |
| } | |
| /** | |
| * LMS 제목 Byte 체크 (공백 포함 최대 <?= $lmsSubjectLimit; ?>Byte, 초과분 자동 삭제) | |
| */ | |
| function changeCartRemindSubjectLength() { | |
| var input = $('#cartRemindSendSubject'); | |
| if (input.length === 0) { | |
| return; | |
| } | |
| var limit = <?= $lmsSubjectLimit; ?>; | |
| var text = stripEmoji(input.val()); | |
| while (stringToByte(text) > limit) { | |
| text = text.substring(0, text.length - 1); | |
| } | |
| input.val(text); | |
| $('#cartRemindSubjectCount').val(stringToByte(text)); | |
| } | |
| // 발송유형 따른 폼 변경 | |
| function changeCartRemindType() { | |
| if ($('input:radio[name="cartRemindType"]:checked').val() == 'manual') { | |
| $('.cart-remind-sms').hide(); | |
| $('.cart-remind-sms select').attr('disabled', 'disabled'); | |
| $('.cart-remind-sms input').attr('disabled', 'disabled'); | |
| $('#cartRemindSendSubject').prop('disabled', false); // LMS: 제목 영역 활성 | |
| // sms발송 | |
| } else if ($('input:hidden[name="cartRemindSendType"]').val() == 'sms') { | |
| $('.cart-remind-lms').hide(); | |
| $('.cart-remind-sms').show(); | |
| $('.cart-remind-sms select').removeAttr('disabled'); | |
| $('.cart-remind-sms input').removeAttr('disabled'); | |
| $('#cartRemindSendSubject').prop('disabled', true); // SMS: 제목 영역 비활성(값 유지, 미저장/미발송) | |
| } | |
| } | |
| // 발급방식에 따른 폼 변경 | |
| } | |
| return length; | |
| } | |
| /** | |
| * 이모티콘 제거 (제목/본문 이모티콘 입력 불가 - 자동 삭제) | |
| */ | |
| function stripEmoji(str) { | |
| if (!str) { | |
| return str; | |
| } | |
| return str | |
| .replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, '') | |
| .replace(/[\uFE00-\uFE0F\u200D\u20E3]/g, ''); | |
| } | |
| </script> | |
변경 전comeback_coupon_regist.php
| } | |
| if (e.target.checked) { | |
| $send_contents.val('(광고)\n' + $send_contents.val() + '\n무료거부 ' + $(selector).data('reject-number')); | |
| } | |
| refresh_send_contents(); | |
| // 본문 반영으로 SMS/LMS 판정이 끝난 뒤에 제목 처리 — 제목 영역이 비활성(SMS)이면 (광고) 미표기 | |
| if (e.target.checked && $smsSubject.length && !$smsSubject.prop('disabled')) { | |
| $smsSubject.val('(광고)' + $smsSubject.val()); | |
| setSubjectLength(); | |
| } | |
| }); | |
| } | |
| </script> | |
| } | |
| if (e.target.checked) { | |
| $send_contents.val('(광고)\n' + $send_contents.val() + '\n무료거부 ' + $(selector).data('reject-number')); | |
| if ($smsSubject.length) { | |
| $smsSubject.val('(광고)' + $smsSubject.val()); | |
| setSubjectLength(); | |
| } | |
| } | |
| refresh_send_contents(); | |
| }); | |
| } | |
| </script> | |
| <button type="button" class="btn btn-white btn-sm pull-right js-toggle-replace-code" data-target=".replace_code_area" data-text="치환코드 닫기">치환코드 보기</button> | |
| </div> | |
| </div> | |
| <div class="row pdt5"> | |
| <div class="col-xs-3 pdr0"> | |
| <label class="width100p"> | |
| 링크는 단축 URL로 자동 변환하였습니다.<br/> | |
| [단축 URL] 앱을 이용하여 단축 URL을 생성하면, 조회수 및 통계 자료를 확인하실 수 있습니다. <a href="https://apps.godo.co.kr/apps/1519" class="btn-link" target="_blank">바로가기</a> | |
| </div> | |
| </div> | |
| </div> | |
| </td> | |
| return length; | |
| } | |
| /** | |
| * SMS 내용 길이 체크 | |
| */ | |
| function setContentsLength(contentsNm, countId) { | |
| var textarea = $('textarea[name=' + contentsNm + ']'); | |
| var contentsText = textarea.val(); | |
| var textLength = stringToByte(contentsText); | |
| if (textLength > <?php echo $smsStringLimit;?>) { | |
| if (textLength > <?php echo $lmsStringLimit;?>) { | |
| $('.sms-type').hide(); | |
| $('.lms-type').show(); | |
| $('input[name=sendFl]').val('lms'); | |
| } else { | |
| $('#' + countId).css("color", ""); | |
| $('.sms-type').show(); | |
| $('.lms-type').hide(); | |
| $('input[name=sendFl]').val('sms'); | |
| } | |
| $('#' + countId).val(textLength); | |
| } | |
| // 글자수 체크 | |
| $('textarea[name=smsContents]').keyup(setSendLength).change(setSendLength); | |
| $("#frmCoupon").validate({ | |
| submitHandler: function (form) { | |
| changeTargetType(); | |
| checkSms(); | |
| setSendLength(); | |
| set_click_replace_code_insert('.replace-code-area .js-btn-insert'); | |
| set_change_focus_contents('textarea[name="smsContents"]'); | |
| set_click_sms080_contents(':checkbox[name="sms080Reject"]'); | |
| function set_click_sms080_contents (selector) { | |
| $(selector).click(function (e) { | |
| $send_contents.val($send_contents.val().replace(/(\(광고\)\n)|(\n무료거부\s[0-9\-]*)/g, '')); | |
| if (e.target.checked) { | |
| $send_contents.val('(광고)\n' + $send_contents.val() + '\n무료거부 ' + $(selector).data('reject-number')); | |
| } | |
| refresh_send_contents(); | |
| }); | |
변경 후comeback_coupon_regist.php
| } | |
| if (e.target.checked) { | |
| $send_contents.val('(광고)\n' + $send_contents.val() + '\n무료거부 ' + $(selector).data('reject-number')); | |
| if ($smsSubject.length) { | |
| $smsSubject.val('(광고)' + $smsSubject.val()); | |
| setSubjectLength(); | |
| } | |
| } | |
| refresh_send_contents(); | |
| }); | |
| } | |
| </script> | |
| } | |
| if (e.target.checked) { | |
| $send_contents.val('(광고)\n' + $send_contents.val() + '\n무료거부 ' + $(selector).data('reject-number')); | |
| } | |
| refresh_send_contents(); | |
| // 본문 반영으로 SMS/LMS 판정이 끝난 뒤에 제목 처리 — 제목 영역이 비활성(SMS)이면 (광고) 미표기 | |
| if (e.target.checked && $smsSubject.length && !$smsSubject.prop('disabled')) { | |
| $smsSubject.val('(광고)' + $smsSubject.val()); | |
| setSubjectLength(); | |
| } | |
| }); | |
| } | |
| </script> | |
| <button type="button" class="btn btn-white btn-sm pull-right js-toggle-replace-code" data-target=".replace_code_area" data-text="치환코드 닫기">치환코드 보기</button> | |
| </div> | |
| </div> | |
| <div class="row pdt5 js-subject-row"> | |
| <div class="col-xs-3 pdr0"> | |
| <input type="text" name="smsSubject" id="smsSubject" class="form-control width100p" placeholder="제목을 입력해주세요." value="<?= gd_isset($couponData['smsSubject']) ?>" disabled="disabled"/> | |
| <div class="mgt5"> | |
| <input type="text" id="smsSubjectCount" value="0" readonly="readonly" class="form-control width-3xs"> / <?= $lmsSubjectLimit; ?> Bytes | |
| </div> | |
| </div> | |
| </div> | |
| <div class="row pdt5"> | |
| <div class="col-xs-3 pdr0"> | |
| <label class="width100p"> | |
| 링크는 단축 URL로 자동 변환하였습니다.<br/> | |
| [단축 URL] 앱을 이용하여 단축 URL을 생성하면, 조회수 및 통계 자료를 확인하실 수 있습니다. <a href="https://apps.godo.co.kr/apps/1519" class="btn-link" target="_blank">바로가기</a> | |
| </div> | |
| <div class="notice-info">본문 내용이 LMS인 경우에만 제목 입력이 가능하며, 제목 영역에는 직접 (광고) 문구를 입력하지 않도록 하고 광고 삽입이 필요한 경우 광고성 문구 추가 기능을 사용해야 합니다.</div> | |
| </div> | |
| </div> | |
| </td> | |
| return length; | |
| } | |
| /** | |
| * 이모티콘 제거 (제목/본문 이모티콘 입력 불가 - 자동 삭제) | |
| */ | |
| function stripEmoji(str) { | |
| if (!str) { | |
| return str; | |
| } | |
| return str | |
| .replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, '') | |
| .replace(/[\uFE00-\uFE0F\u200D\u20E3]/g, ''); | |
| } | |
| /** | |
| * LMS 제목 Byte 체크 (공백 포함 최대 <?= $lmsSubjectLimit; ?>Byte, 초과분 자동 삭제) | |
| */ | |
| function setSubjectLength() { | |
| var input = $('#smsSubject'); | |
| if (input.length === 0) { | |
| return; | |
| } | |
| var limit = <?= $lmsSubjectLimit; ?>; | |
| var text = stripEmoji(input.val()); | |
| while (stringToByte(text) > limit) { | |
| text = text.substring(0, text.length - 1); | |
| } | |
| input.val(text); | |
| $('#smsSubjectCount').val(stringToByte(text)); | |
| } | |
| /** | |
| * SMS 내용 길이 체크 | |
| */ | |
| function setContentsLength(contentsNm, countId) { | |
| var textarea = $('textarea[name=' + contentsNm + ']'); | |
| var stripped = stripEmoji(textarea.val()); | |
| if (stripped !== textarea.val()) { | |
| textarea.val(stripped); | |
| } | |
| var contentsText = stripped; | |
| var textLength = stringToByte(contentsText); | |
| if (textLength > <?php echo $smsStringLimit;?>) { | |
| if (textLength > <?php echo $lmsStringLimit;?>) { | |
| $('.sms-type').hide(); | |
| $('.lms-type').show(); | |
| $('input[name=sendFl]').val('lms'); | |
| <?php if ($checkMode == 'canModify') { ?> | |
| $('#smsSubject').prop('disabled', false); // LMS: 제목 영역 활성 | |
| <?php } ?> | |
| setSubjectLength(); | |
| } else { | |
| $('#' + countId).css("color", ""); | |
| $('.sms-type').show(); | |
| $('.lms-type').hide(); | |
| $('input[name=sendFl]').val('sms'); | |
| $('#smsSubject').prop('disabled', true); // SMS: 제목 영역 비활성(값 유지) | |
| } | |
| $('#' + countId).val(textLength); | |
| } | |
| // 글자수 체크 | |
| $('textarea[name=smsContents]').keyup(setSendLength).change(setSendLength); | |
| $('#smsSubject').on('keyup keydown', setSubjectLength); | |
| $("#frmCoupon").validate({ | |
| submitHandler: function (form) { | |
| changeTargetType(); | |
| checkSms(); | |
| setSendLength(); | |
| setSubjectLength(); | |
| set_click_replace_code_insert('.replace-code-area .js-btn-insert'); | |
| set_change_focus_contents('textarea[name="smsContents"]'); | |
| set_click_sms080_contents(':checkbox[name="sms080Reject"]'); | |
| function set_click_sms080_contents (selector) { | |
| $(selector).click(function (e) { | |
| $send_contents.val($send_contents.val().replace(/(\(광고\)\n)|(\n무료거부\s[0-9\-]*)/g, '')); | |
| var $smsSubject = $('#smsSubject'); | |
| if ($smsSubject.length) { | |
| $smsSubject.val($smsSubject.val().replace(/^\(광고\)/, '')); | |
| } | |
| if (e.target.checked) { | |
| $send_contents.val('(광고)\n' + $send_contents.val() + '\n무료거부 ' + $(selector).data('reject-number')); | |
| if ($smsSubject.length) { | |
| $smsSubject.val('(광고)' + $smsSubject.val()); | |
| setSubjectLength(); | |
| } | |
| } | |
| refresh_send_contents(); | |
| }); | |
변경 전layer_cart_remind_message.php
| <span class="cart-remind-sms notice-info">SMS : 발송 건당 1포인트 차감</span> | |
| </div> | |
| </div> | |
| <div class="form-inline mgt10"> | |
| <textarea name="cartRemindSendMessage" rows="8" class="smsContents form-control width-xl"><?= $cartRemindData['cartRemindSendMessage']; ?></textarea> | |
| <div class="mgt5"> | |
| <a href="https://www.nhn-commerce.com/customer/board-view.gd?type=notice&idx=1237" target="_blank" class="btn-link">자세히보기></a> | |
| </p> | |
| <p class="notice-info">장바구니 링크 치환코드는 LMS인 경우에만 정상적으로 발송됩니다</p> | |
| </div> | |
| </td> | |
| </tr> | |
| // 글자수 체크 | |
| $('textarea[name=cartRemindSendMessage]').keyup(changeCartRemindContentsLength); | |
| changeCartRemindSendType(); | |
| changeCartRemindContentsLength(); | |
| }); | |
| /** | |
| * SMS 내용 길이 체크 | |
| */ | |
| function changeCartRemindContentsLength() { | |
| var contentsText = $('textarea[name=cartRemindSendMessage]').val(); | |
| var textLength = stringToByte(contentsText); | |
| if ($('input:hidden[name="cartRemindSendType"]').val() == 'sms' && textLength > <?= $smsStringLimit; ?>) { | |
| $('.cart-remind-sms').hide(); | |
| $('.cart-remind-sms select').attr('disabled', 'disabled'); | |
| $('.cart-remind-sms input').attr('disabled', 'disabled'); | |
| // sms발송 | |
| } else if ($('input:hidden[name="cartRemindSendType"]').val() == 'sms') { | |
| $('.cart-remind-lms').hide(); | |
| $('.cart-remind-sms').show(); | |
| $('.cart-remind-sms select').removeAttr('disabled'); | |
| $('.cart-remind-sms input').removeAttr('disabled'); | |
| } | |
| } | |
| /** | |
| } | |
| return length; | |
| } | |
| </script> | |
변경 후layer_cart_remind_message.php
| <span class="cart-remind-sms notice-info">SMS : 발송 건당 1포인트 차감</span> | |
| </div> | |
| </div> | |
| <div class="form-inline mgt10 js-cart-subject-row"> | |
| <input type="text" name="cartRemindSendSubject" id="cartRemindSendSubject" class="form-control width-xl" placeholder="제목을 입력해주세요." value="<?= gd_isset($cartRemindData['cartRemindSendSubject']); ?>" disabled="disabled"/> | |
| <input type="text" id="cartRemindSubjectCount" value="0" readonly="readonly" class="form-control width-3xs"> / <?= $lmsSubjectLimit; ?> Bytes | |
| </div> | |
| <div class="form-inline mgt10"> | |
| <textarea name="cartRemindSendMessage" rows="8" class="smsContents form-control width-xl"><?= $cartRemindData['cartRemindSendMessage']; ?></textarea> | |
| <div class="mgt5"> | |
| <a href="https://www.nhn-commerce.com/customer/board-view.gd?type=notice&idx=1237" target="_blank" class="btn-link">자세히보기></a> | |
| </p> | |
| <p class="notice-info">장바구니 링크 치환코드는 LMS인 경우에만 정상적으로 발송됩니다</p> | |
| <p class="notice-info">본문 내용이 LMS인 경우에만 제목 입력이 가능하며, 제목 영역에는 직접 (광고) 문구를 입력하지 않도록 하고 광고 삽입이 필요한 경우 광고성 문구 추가 기능을 사용해야 합니다.</p> | |
| </div> | |
| </td> | |
| </tr> | |
| // 글자수 체크 | |
| $('textarea[name=cartRemindSendMessage]').keyup(changeCartRemindContentsLength); | |
| $('#cartRemindSendSubject').on('keyup keydown', changeCartRemindSubjectLength); | |
| changeCartRemindSendType(); | |
| changeCartRemindContentsLength(); | |
| changeCartRemindSubjectLength(); | |
| }); | |
| /** | |
| * LMS 제목 Byte 체크 (공백 포함 최대 <?= $lmsSubjectLimit; ?>Byte, 초과분 자동 삭제) | |
| */ | |
| function changeCartRemindSubjectLength() { | |
| var input = $('#cartRemindSendSubject'); | |
| if (input.length === 0) { | |
| return; | |
| } | |
| var limit = <?= $lmsSubjectLimit; ?>; | |
| var text = stripEmoji(input.val()); | |
| while (stringToByte(text) > limit) { | |
| text = text.substring(0, text.length - 1); | |
| } | |
| input.val(text); | |
| $('#cartRemindSubjectCount').val(stringToByte(text)); | |
| } | |
| /** | |
| * SMS 내용 길이 체크 | |
| */ | |
| function changeCartRemindContentsLength() { | |
| var $cartTa = $('textarea[name=cartRemindSendMessage]'); | |
| var strippedBody = stripEmoji($cartTa.val()); | |
| if (strippedBody !== $cartTa.val()) { | |
| $cartTa.val(strippedBody); | |
| } | |
| var contentsText = strippedBody; | |
| var textLength = stringToByte(contentsText); | |
| if ($('input:hidden[name="cartRemindSendType"]').val() == 'sms' && textLength > <?= $smsStringLimit; ?>) { | |
| $('.cart-remind-sms').hide(); | |
| $('.cart-remind-sms select').attr('disabled', 'disabled'); | |
| $('.cart-remind-sms input').attr('disabled', 'disabled'); | |
| $('#cartRemindSendSubject').prop('disabled', false); // LMS: 제목 영역 활성 | |
| // sms발송 | |
| } else if ($('input:hidden[name="cartRemindSendType"]').val() == 'sms') { | |
| $('.cart-remind-lms').hide(); | |
| $('.cart-remind-sms').show(); | |
| $('.cart-remind-sms select').removeAttr('disabled'); | |
| $('.cart-remind-sms input').removeAttr('disabled'); | |
| $('#cartRemindSendSubject').prop('disabled', true); // SMS: 제목 영역 비활성(값 유지, 미저장/미발송) | |
| } | |
| } | |
| /** | |
| } | |
| return length; | |
| } | |
| /** | |
| * 이모티콘 제거 (제목/본문 이모티콘 입력 불가 - 자동 삭제) | |
| */ | |
| function stripEmoji(str) { | |
| if (!str) { | |
| return str; | |
| } | |
| return str | |
| .replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, '') | |
| .replace(/[\uFE00-\uFE0F\u200D\u20E3]/g, ''); | |
| } | |
| </script> | |
변경 전layer_comeback_coupon_sms.php
| <col style="width:80%" /> | |
| </colgroup> | |
| <tbody> | |
| <tr> | |
| <th>발송 내용</th> | |
| <td> | |
변경 후layer_comeback_coupon_sms.php
| <col style="width:80%" /> | |
| </colgroup> | |
| <tbody> | |
| <tr> | |
| <th>제목</th> | |
| <td> | |
| <input type="text" class="form-control width100p" readonly="readonly" value="<?= gd_isset($data['smsSubject']) !== '' ? gd_isset($data['smsSubject']) : '[제목없음]' ?>"/> | |
| </td> | |
| </tr> | |
| <tr> | |
| <th>발송 내용</th> | |
| <td> | |
변경 전layer_standby_sms.php
| */ | |
| ?> | |
| <form action="" method="post"> | |
| <div class="row"> | |
| <div class="col-xs-12"> | |
| <div class="pull-left"> | |
| <span class="sms-type text-darkblue">SMS : 발송 건당 1포인트 차감</span> | |
| <span class="lms-type text-orange-red display-none">LMS : 발송 건당 <?php echo $lmsPoint; ?>포인트 차감</span> | |
| </div> | |
| <div class="pull-right"> | |
| <input type="text" id="smsStringCount" value="0" readonly="readonly" class="form-control width-3xs"> / | |
| <span class="sms-type"><?php echo $smsStringLimit; ?></span><span class="lms-type display-none"><?php echo number_format($lmsStringLimit); ?></span> Bytes | |
| </div> | |
| </div> | |
| </div> | |
| <div class="row"> | |
| <div class="col-xs-12"> | |
| <textarea name="contents" id="contents" rows="8" class="form-control"><?= $data['contents']; ?></textarea> | |
| </div> | |
| </div> | |
| <div class="row"> | |
| <div class="center modal-footer"> | |
| <button type="submit" id="modify" class="btn btn-red">수정</button> | |
| $(document).ready(function () { | |
| var $textarea = $('textarea[name=contents]'); | |
| $textarea.on('keyup change', setSendLength).trigger('change'); | |
| }); | |
| function setSendLength() { | |
| setContentsLength('contents', 'smsStringCount'); | |
| $('.sms-type').hide(); | |
| $('.lms-type').show(); | |
| $('input[name=sendFl]').val('lms'); | |
| } else { | |
| $('#' + countId).css("color", ""); | |
| $('.sms-type').show(); | |
| $('.lms-type').hide(); | |
| $('input[name=sendFl]').val('sms'); | |
| } | |
| $('#' + countId).val(textLength); | |
| } | |
| } | |
| return length; | |
| } | |
| </script> | |
변경 후layer_standby_sms.php
| */ | |
| ?> | |
| <form action="" method="post"> | |
| <div class="row"> | |
| <div class="col-xs-12"> | |
| <div class="pull-right form-inline"> | |
| <input type="text" id="subjectStringCount" value="0" readonly="readonly" class="form-control width-3xs"> / <?= $lmsSubjectLimit; ?> Bytes | |
| </div> | |
| <div style="overflow:hidden; padding-right:10px;"> | |
| <input type="text" name="subject" id="subject" class="form-control" placeholder="제목을 입력해주세요." value="<?= gd_isset($data['subject']); ?>" disabled="disabled"/> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="row mgt10"> | |
| <div class="col-xs-12"> | |
| <textarea name="contents" id="contents" rows="8" class="form-control"><?= $data['contents']; ?></textarea> | |
| </div> | |
| </div> | |
| <div class="row"> | |
| <div class="col-xs-12"> | |
| <div class="pull-left"> | |
| <span class="sms-type text-darkblue">SMS : 발송 건당 1포인트 차감</span> | |
| <span class="lms-type text-orange-red display-none">LMS : 발송 건당 <?php echo $lmsPoint; ?>포인트 차감</span> | |
| </div> | |
| <div class="pull-right"> | |
| <input type="text" id="smsStringCount" value="0" readonly="readonly" class="form-control width-3xs"> / | |
| <span class="sms-type"><?php echo $smsStringLimit; ?></span><span class="lms-type display-none"><?php echo number_format($lmsStringLimit); ?></span> Bytes | |
| </div> | |
| </div> | |
| </div> | |
| <div class="row"> | |
| <div class="center modal-footer"> | |
| <button type="submit" id="modify" class="btn btn-red">수정</button> | |
| $(document).ready(function () { | |
| var $textarea = $('textarea[name=contents]'); | |
| $textarea.on('keyup change', setSendLength).trigger('change'); | |
| $('#subject').on('keyup keydown', setSubjectLength); | |
| setSubjectLength(); | |
| }); | |
| function setSendLength() { | |
| setContentsLength('contents', 'smsStringCount'); | |
| $('.sms-type').hide(); | |
| $('.lms-type').show(); | |
| $('input[name=sendFl]').val('lms'); | |
| $('#subject').prop('disabled', false); // LMS: 제목 영역 활성 | |
| setSubjectLength(); | |
| } else { | |
| $('#' + countId).css("color", ""); | |
| $('.sms-type').show(); | |
| $('.lms-type').hide(); | |
| $('input[name=sendFl]').val('sms'); | |
| $('#subject').prop('disabled', true); // SMS: 제목 영역 비활성(값 유지, 미발송) | |
| } | |
| $('#' + countId).val(textLength); | |
| } | |
| } | |
| return length; | |
| } | |
| /** | |
| * 이모티콘 제거 (제목/본문 이모티콘 입력 불가 - 자동 삭제) | |
| */ | |
| function stripEmoji(str) { | |
| if (!str) { | |
| return str; | |
| } | |
| return str | |
| .replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, '') | |
| .replace(/[\uFE00-\uFE0F\u200D\u20E3]/g, ''); | |
| } | |
| /** | |
| * LMS 제목 Byte 체크 (공백 포함 최대 <?= $lmsSubjectLimit; ?>Byte, 초과분 자동 삭제) | |
| */ | |
| function setSubjectLength() { | |
| var input = $('#subject'); | |
| if (input.length === 0) { | |
| return; | |
| } | |
| var limit = <?= $lmsSubjectLimit; ?>; | |
| var text = stripEmoji(input.val()); | |
| while (stringToByte(text) > limit) { | |
| text = text.substring(0, text.length - 1); | |
| } | |
| input.val(text); | |
| $('#subjectStringCount').val(stringToByte(text)); | |
| } | |
| </script> | |
변경 전member_crm_sms.php
| $listHtml[] = '<td class="text-center">' . $sSendFl . '</td>'; | |
| $listHtml[] = '<td style="word-break:break-all;word-wrap:break-word;overflow:hidden;" class="multirows">'; | |
| if ($data['sendFl'] != 'kakao') { | |
| $listHtml[] = '<div>' . $data['contents'] . '</div>'; | |
| } else { | |
| $listHtml[] = '<div>' . nl2br($data['templateContent']) . '</div>'; | |
변경 후member_crm_sms.php
| $listHtml[] = '<td class="text-center">' . $sSendFl . '</td>'; | |
| $listHtml[] = '<td style="word-break:break-all;word-wrap:break-word;overflow:hidden;" class="multirows">'; | |
| if ($data['sendFl'] != 'kakao') { | |
| // LMS 제목 — 있으면 그대로, 없으면 '[제목없음]' 표시(표시 시점 변환). 제목은 LMS 한정. | |
| if ($data['sendFl'] == 'lms') { | |
| $smsSubject = trim($data['subject'] ?? ''); | |
| if ($smsSubject === '') { | |
| $smsSubject = '[제목없음]'; | |
| } | |
| $listHtml[] = '<div><strong>' . gd_htmlspecialchars($smsSubject) . '</strong></div>'; | |
| } | |
| $listHtml[] = '<div>' . $data['contents'] . '</div>'; | |
| } else { | |
| $listHtml[] = '<div>' . nl2br($data['templateContent']) . '</div>'; | |
변경 전CartRemind.php
| $getCartRemindSend['autoSendTime'] = $cartRemindData['cartRemindAutoSendTime']; | |
| $getCartRemindSend['smsType'] = $cartRemindData['cartRemindSendType']; | |
| $getCartRemindSend['message'] = $cartRemindData['cartRemindSendMessage']; | |
| $getCartRemindSend['cartUrl'] = $cartRemindData['cartRemindSendUrl']; | |
| if ($cartRemindData['cartRemindCoupon'] > 0) { | |
| $getCartRemindSend['coupon'] = $cartRemindData['cartRemindCoupon']; | |
| $validator->add('cartRemindCoupon', null, null); // 발송쿠폰 | |
| $validator->add('cartRemindSendType', null, true); // 발송타입 (sms,lms) | |
| $validator->add('cartRemindSendMessage', null, true); // 발송메세지 | |
| if ($validator->act($arrData, true) === false) { | |
| throw new \Exception(gd_implode("<br/>", $validator->errors)); | |
| // 선택에 따른 값의 초기화를 위한 빈값 제거 - 주석처리 함 - 상태에 따른 빈값 저장(초기화)이 필요한 경우가 존재함. | |
| // $arrData = ArrayUtils::removeEmpty($arrData); | |
| switch (substr($arrData['mode'], 0, 6)) { | |
| case 'insert' : { | |
| // 저장 | |
| $validator->add('cartRemindNo', 'number', true); // 장바구니 알림 고유번호 | |
| $validator->add('cartRemindSendType', null, true); // 발송타입 (sms,lms) | |
| $validator->add('cartRemindSendMessage', null, true); // 발송메세지 | |
| if ($validator->act($arrData, true) === false) { | |
| throw new \Exception(gd_implode("<br/>", $validator->errors)); | |
| // 선택에 따른 값의 초기화를 위한 빈값 제거 - 주석처리 함 - 상태에 따른 빈값 저장(초기화)이 필요한 경우가 존재함. | |
| // $arrData = ArrayUtils::removeEmpty($arrData); | |
| // 수정 | |
| $arrBind = $this->db->get_binding(DBTableField::tableCartRemind(), $arrData, 'update', gd_array_keys($arrData), ['cartRemindNo']); | |
| $this->db->bind_param_push($arrBind['bind'], 'i', $arrData['cartRemindNo']); | |
| } | |
| // sms, lms | |
| $smsSendData['sendFl'] = $cartRemindSendData['smsType']; | |
| // ?? | |
| $smsSendData['agreeCnt'] = ''; | |
변경 후CartRemind.php
| $getCartRemindSend['autoSendTime'] = $cartRemindData['cartRemindAutoSendTime']; | |
| $getCartRemindSend['smsType'] = $cartRemindData['cartRemindSendType']; | |
| $getCartRemindSend['message'] = $cartRemindData['cartRemindSendMessage']; | |
| $getCartRemindSend['subject'] = $cartRemindData['cartRemindSendSubject'] ?? ''; | |
| $getCartRemindSend['cartUrl'] = $cartRemindData['cartRemindSendUrl']; | |
| if ($cartRemindData['cartRemindCoupon'] > 0) { | |
| $getCartRemindSend['coupon'] = $cartRemindData['cartRemindCoupon']; | |
| $validator->add('cartRemindCoupon', null, null); // 발송쿠폰 | |
| $validator->add('cartRemindSendType', null, true); // 발송타입 (sms,lms) | |
| $validator->add('cartRemindSendMessage', null, true); // 발송메세지 | |
| $validator->add('cartRemindSendSubject', null, null); // LMS 제목 (선택, lms 시) | |
| if ($validator->act($arrData, true) === false) { | |
| throw new \Exception(gd_implode("<br/>", $validator->errors)); | |
| // 선택에 따른 값의 초기화를 위한 빈값 제거 - 주석처리 함 - 상태에 따른 빈값 저장(초기화)이 필요한 경우가 존재함. | |
| // $arrData = ArrayUtils::removeEmpty($arrData); | |
| // LMS 제목은 LMS 상태에서만 저장(C5). 본문이 SMS면 제목 영역은 저장하지 않음(빈값). | |
| if (gd_isset($arrData['cartRemindSendType']) === 'sms') { | |
| $arrData['cartRemindSendSubject'] = ''; | |
| } | |
| switch (substr($arrData['mode'], 0, 6)) { | |
| case 'insert' : { | |
| // 저장 | |
| $validator->add('cartRemindNo', 'number', true); // 장바구니 알림 고유번호 | |
| $validator->add('cartRemindSendType', null, true); // 발송타입 (sms,lms) | |
| $validator->add('cartRemindSendMessage', null, true); // 발송메세지 | |
| $validator->add('cartRemindSendSubject', null, null); // LMS 제목 (선택, lms 시) | |
| if ($validator->act($arrData, true) === false) { | |
| throw new \Exception(gd_implode("<br/>", $validator->errors)); | |
| // 선택에 따른 값의 초기화를 위한 빈값 제거 - 주석처리 함 - 상태에 따른 빈값 저장(초기화)이 필요한 경우가 존재함. | |
| // $arrData = ArrayUtils::removeEmpty($arrData); | |
| // LMS 제목은 LMS 상태에서만 저장(C5). 본문이 SMS면 제목 영역은 저장하지 않음(빈값). | |
| if (gd_isset($arrData['cartRemindSendType']) === 'sms') { | |
| $arrData['cartRemindSendSubject'] = ''; | |
| } | |
| // 수정 | |
| $arrBind = $this->db->get_binding(DBTableField::tableCartRemind(), $arrData, 'update', gd_array_keys($arrData), ['cartRemindNo']); | |
| $this->db->bind_param_push($arrBind['bind'], 'i', $arrData['cartRemindNo']); | |
| } | |
| // sms, lms | |
| $smsSendData['sendFl'] = $cartRemindSendData['smsType']; | |
| // LMS 제목 (LMS 발송 시에만 SmsAdmin 에서 사용) | |
| $smsSendData['smsSubject'] = $cartRemindSendData['subject'] ?? ''; | |
| // ?? | |
| $smsSendData['agreeCnt'] = ''; | |
변경 전CouponAdmin.php
| 지금 바로 확인하세요!"; | |
| } | |
| $validator->add('smsContents', 'required', true); // SMS 발송 내용 | |
| // 전송일 null처리 | |
| $arrData['sendDt'] = null; | |
| $smsSendData['smsPoint'] = Sms::getPoint(); | |
| // 전송 내용 | |
| $smsSendData['smsContents'] = str_replace('rc_memNm', 'memNm', $getData['smsContents']); | |
| // 치환 코드 그룹 | |
| $smsSendData['replaceCodeGroup'] = 'promotion'; | |
| // 전송요청 수 | |
변경 후CouponAdmin.php
| 지금 바로 확인하세요!"; | |
| } | |
| $validator->add('smsContents', 'required', true); // SMS 발송 내용 | |
| $validator->add('smsSubject', null, null); // LMS 제목 (검증 없음, garbageDelete 방지용 등록) | |
| // 전송일 null처리 | |
| $arrData['sendDt'] = null; | |
| $smsSendData['smsPoint'] = Sms::getPoint(); | |
| // 전송 내용 | |
| $smsSendData['smsContents'] = str_replace('rc_memNm', 'memNm', $getData['smsContents']); | |
| // LMS 제목 (LMS 발송 시에만 SmsAdmin 에서 사용) | |
| $smsSendData['smsSubject'] = isset($getData['smsSubject']) ? $getData['smsSubject'] : ''; | |
| // 치환 코드 그룹 | |
| $smsSendData['replaceCodeGroup'] = 'promotion'; | |
| // 전송요청 수 | |
변경 전DBTableField.php
| ['val' => 'cartRemindAutoSendTime', 'typ' => 'i', 'def' => '10'], // 장바구니 알림 자동발송 시 발송 시간 | |
| ['val' => 'cartRemindSendType', 'typ' => 's', 'def' => 'lms'], // 장바구니 알림 전송 형식 - sms, lms | |
| ['val' => 'cartRemindSendMessage', 'typ' => 's', 'def' => '(광고)[{rc_mallNm}] {rc_memNm}님의 장바구니에 상품이 담겨 있습니다. 아래 장바구니 바로가기를 통해 바로 확인하실 수 있습니다. ▶ 장바구니 바로가기: {rc_cartRemindLink}'], // 장바구니 알림 전송 내용 | |
| ['val' => 'cartRemindSendUrl', 'typ' => 's', 'def' => ''], // 장바구니 알림 바로가기 링크 | |
| ['val' => 'cartRemindInsertAdminId', 'typ' => 's', 'def' => null], // 장바구니 알림 등록자 아이디 | |
| ['val' => 'managerNo', 'typ' => 'i', 'def' => 0], // 장바구니 알림 등록자 키 | |
| ['val' => 'smsAutoType', 'typ' => 's', 'def' => null], // SMS 자동발송 수신 종류 (member, admin, provider) | |
| ['val' => 'subject', 'typ' => 's', 'def' => null], // SMS 템플릿 제목 | |
| ['val' => 'contents', 'typ' => 's', 'def' => null], // SMS 템플릿 내용 | |
| ['val' => 'description', 'typ' => 's', 'def' => null], // 설명 | |
| ['val' => 'isUserBasic', 'typ' => 's', 'def' => 'n'], // 전송타입(user)기본제공여부 | |
| ['val' => 'modDt', 'typ' => 's', 'def' => null], // 수정일 | |
| ['val' => 'smsFl', 'typ' => 's', 'def' => 'n'], // sms동시 발송여부 - y:발송 / n:미발송 | |
| ['val' => 'smsSpamFl', 'typ' => 's', 'def' => 'n'], // 광고성 문구 추가 - y:추가 / n:미추가 | |
| ['val' => 'smsContents', 'typ' => 's', 'def' => ''], // SMS 발송 내용 | |
| ['val' => 'managerNo', 'typ' => 'i', 'def' => ''], // 등록 관리자 고유번호 | |
| ['val' => 'deleteFl', 'typ' => 's', 'def' => 'n'], // 삭제 flag - y:삭제 / n:미삭제 | |
| ['val' => 'sendDt', 'typ' => 's', 'def' => null], // 전송일 | |
변경 후DBTableField.php
| ['val' => 'cartRemindAutoSendTime', 'typ' => 'i', 'def' => '10'], // 장바구니 알림 자동발송 시 발송 시간 | |
| ['val' => 'cartRemindSendType', 'typ' => 's', 'def' => 'lms'], // 장바구니 알림 전송 형식 - sms, lms | |
| ['val' => 'cartRemindSendMessage', 'typ' => 's', 'def' => '(광고)[{rc_mallNm}] {rc_memNm}님의 장바구니에 상품이 담겨 있습니다. 아래 장바구니 바로가기를 통해 바로 확인하실 수 있습니다. ▶ 장바구니 바로가기: {rc_cartRemindLink}'], // 장바구니 알림 전송 내용 | |
| ['val' => 'cartRemindSendSubject', 'typ' => 's', 'def' => ''], // 장바구니 알림 LMS 제목 | |
| ['val' => 'cartRemindSendUrl', 'typ' => 's', 'def' => ''], // 장바구니 알림 바로가기 링크 | |
| ['val' => 'cartRemindInsertAdminId', 'typ' => 's', 'def' => null], // 장바구니 알림 등록자 아이디 | |
| ['val' => 'managerNo', 'typ' => 'i', 'def' => 0], // 장바구니 알림 등록자 키 | |
| ['val' => 'smsAutoType', 'typ' => 's', 'def' => null], // SMS 자동발송 수신 종류 (member, admin, provider) | |
| ['val' => 'subject', 'typ' => 's', 'def' => null], // SMS 템플릿 제목 | |
| ['val' => 'contents', 'typ' => 's', 'def' => null], // SMS 템플릿 내용 | |
| ['val' => 'messageTitle', 'typ' => 's', 'def' => null], // LMS 메시지 제목 | |
| ['val' => 'description', 'typ' => 's', 'def' => null], // 설명 | |
| ['val' => 'isUserBasic', 'typ' => 's', 'def' => 'n'], // 전송타입(user)기본제공여부 | |
| ['val' => 'modDt', 'typ' => 's', 'def' => null], // 수정일 | |
| ['val' => 'smsFl', 'typ' => 's', 'def' => 'n'], // sms동시 발송여부 - y:발송 / n:미발송 | |
| ['val' => 'smsSpamFl', 'typ' => 's', 'def' => 'n'], // 광고성 문구 추가 - y:추가 / n:미추가 | |
| ['val' => 'smsContents', 'typ' => 's', 'def' => ''], // SMS 발송 내용 | |
| ['val' => 'smsSubject', 'typ' => 's', 'def' => ''], // LMS 제목 | |
| ['val' => 'managerNo', 'typ' => 'i', 'def' => ''], // 등록 관리자 고유번호 | |
| ['val' => 'deleteFl', 'typ' => 's', 'def' => 'n'], // 삭제 flag - y:삭제 / n:미삭제 | |
| ['val' => 'sendDt', 'typ' => 's', 'def' => null], // 전송일 | |
변경 전SmsAdmin.php
| $dbData[$autoData[$autoType . 'Mode']][$smsType][$autoCode][$autoType]['sno'] = $autoData[$autoType . 'Sno']; | |
| $dbData[$autoData[$autoType . 'Mode']][$smsType][$autoCode][$autoType]['subject'] = $autoData['subject']; | |
| $dbData[$autoData[$autoType . 'Mode']][$smsType][$autoCode][$autoType]['contents'] = $autoData[$autoType . 'Contents']; | |
| // $dbData[$autoData[$autoType . 'Mode']][$smsType][$autoCode][$autoType]['smsType'] = $smsType; | |
| unset($request[$smsType][$autoCode][$autoType . 'Mode']); | |
| unset($request[$smsType][$autoCode][$autoType . 'Sno']); | |
| unset($request[$smsType][$autoCode]['subject']); | |
| unset($request[$smsType][$autoCode][$autoType . 'Contents']); | |
| } | |
| } | |
| } | |
| $getData = gd_htmlspecialchars_stripslashes($this->db->query_fetch($strSQL, null, false)); | |
| foreach ($getData as $data) { | |
| $setData[$data['smsType']][$data['smsAutoCode']][$data['smsAutoType']]['contents'] = $data['contents']; | |
| $setData[$data['smsType']][$data['smsAutoCode']][$data['smsAutoType']]['sno'] = $data['sno']; | |
| } | |
| unset($getData); | |
| foreach ($arrType as $sendType) { | |
| if (isset($setData[$keyType][$val['code']][$sendType]['contents']) === true) { | |
| $smsAutoType[$keyType][$key][$sendType . 'Contents'] = $setData[$keyType][$val['code']][$sendType]['contents']; | |
| $smsAutoType[$keyType][$key][$sendType . 'Mode'] = 'update'; | |
| $smsAutoType[$keyType][$key][$sendType . 'Sno'] = $setData[$keyType][$val['code']][$sendType]['sno']; | |
| } else { | |
| $smsAutoType[$keyType][$key][$sendType . 'Contents'] = $val[$sendType . 'Contents']; | |
| $smsAutoType[$keyType][$key][$sendType . 'Mode'] = 'insert'; | |
| $smsAutoType[$keyType][$key][$sendType . 'Sno'] = ''; | |
| } | |
| } | |
| if ($receiverData['sendFl'] === 'lms') { | |
| $message = new \Component\Sms\LmsMessage($receiverData['smsContents'], $receiverData['replaceCodeGroup']); | |
| } else { | |
| $message = new \Component\Sms\SmsMessage($receiverData['smsContents'], $receiverData['replaceCodeGroup']); | |
| } | |
변경 후SmsAdmin.php
| $dbData[$autoData[$autoType . 'Mode']][$smsType][$autoCode][$autoType]['sno'] = $autoData[$autoType . 'Sno']; | |
| $dbData[$autoData[$autoType . 'Mode']][$smsType][$autoCode][$autoType]['subject'] = $autoData['subject']; | |
| $dbData[$autoData[$autoType . 'Mode']][$smsType][$autoCode][$autoType]['contents'] = $autoData[$autoType . 'Contents']; | |
| $dbData[$autoData[$autoType . 'Mode']][$smsType][$autoCode][$autoType]['messageTitle'] = gd_isset($autoData[$autoType . 'MessageTitle'], ''); | |
| // $dbData[$autoData[$autoType . 'Mode']][$smsType][$autoCode][$autoType]['smsType'] = $smsType; | |
| unset($request[$smsType][$autoCode][$autoType . 'Mode']); | |
| unset($request[$smsType][$autoCode][$autoType . 'Sno']); | |
| unset($request[$smsType][$autoCode]['subject']); | |
| unset($request[$smsType][$autoCode][$autoType . 'Contents']); | |
| unset($request[$smsType][$autoCode][$autoType . 'MessageTitle']); | |
| } | |
| } | |
| } | |
| $getData = gd_htmlspecialchars_stripslashes($this->db->query_fetch($strSQL, null, false)); | |
| foreach ($getData as $data) { | |
| $setData[$data['smsType']][$data['smsAutoCode']][$data['smsAutoType']]['contents'] = $data['contents']; | |
| $setData[$data['smsType']][$data['smsAutoCode']][$data['smsAutoType']]['messageTitle'] = $data['messageTitle']; | |
| $setData[$data['smsType']][$data['smsAutoCode']][$data['smsAutoType']]['sno'] = $data['sno']; | |
| } | |
| unset($getData); | |
| foreach ($arrType as $sendType) { | |
| if (isset($setData[$keyType][$val['code']][$sendType]['contents']) === true) { | |
| $smsAutoType[$keyType][$key][$sendType . 'Contents'] = $setData[$keyType][$val['code']][$sendType]['contents']; | |
| $smsAutoType[$keyType][$key][$sendType . 'MessageTitle'] = gd_isset($setData[$keyType][$val['code']][$sendType]['messageTitle'], ''); | |
| $smsAutoType[$keyType][$key][$sendType . 'Mode'] = 'update'; | |
| $smsAutoType[$keyType][$key][$sendType . 'Sno'] = $setData[$keyType][$val['code']][$sendType]['sno']; | |
| } else { | |
| $smsAutoType[$keyType][$key][$sendType . 'Contents'] = $val[$sendType . 'Contents']; | |
| $smsAutoType[$keyType][$key][$sendType . 'MessageTitle'] = ''; | |
| $smsAutoType[$keyType][$key][$sendType . 'Mode'] = 'insert'; | |
| $smsAutoType[$keyType][$key][$sendType . 'Sno'] = ''; | |
| } | |
| } | |
| if ($receiverData['sendFl'] === 'lms') { | |
| $message = new \Component\Sms\LmsMessage($receiverData['smsContents'], $receiverData['replaceCodeGroup']); | |
| // LMS 제목 (미입력 시 빈 값) | |
| // 튜닝 상점 대비: 구버전 SmsSender(setSubject 미보유)에서 발송 중단 방지 | |
| if (method_exists($transport, 'setSubject')) { | |
| $transport->setSubject($receiverData['smsSubject'] ?? ''); | |
| } | |
| } else { | |
| $message = new \Component\Sms\SmsMessage($receiverData['smsContents'], $receiverData['replaceCodeGroup']); | |
| } | |
변경 전SmsAuto.php
| } | |
| $transport->setSmsPoint(Sms::getPoint()); | |
| $transport->setMessage($message); | |
| $transport->setSmsType($item['smsType']); | |
| $transport->setReceiver($receiverData); | |
| $transport->setSendDate($this->smsAutoSendDate); | |
| { | |
| $logger = \App::getInstance('logger'); | |
| $binds = []; | |
| $this->db->strField = 'smsType, smsAutoType, contents, subject'; | |
| $this->db->strJoin = DB_SMS_CONTENTS; | |
| $this->db->strWhere = 'smsType= ? AND smsAutoCode = ? AND smsAutoType IN (\'' . gd_implode('\', \'', $wheres) . '\') AND contents != \'\' AND contents IS NOT NULL'; | |
| $this->db->bind_param_push($binds, 's', $this->smsType); | |
변경 후SmsAuto.php
| } | |
| $transport->setSmsPoint(Sms::getPoint()); | |
| $transport->setMessage($message); | |
| // LMS 제목 (설정된 자동발송 문구 제목 - LMS 발송 시에만 SmsSender 에서 사용, 미입력 시 [제목없음]) | |
| // 튜닝 상점 대비: 구버전 SmsSender(setSubject 미보유)에서 발송 중단 방지 | |
| if (method_exists($transport, 'setSubject')) { | |
| $transport->setSubject($item['messageTitle'] ?? ''); | |
| } | |
| $transport->setSmsType($item['smsType']); | |
| $transport->setReceiver($receiverData); | |
| $transport->setSendDate($this->smsAutoSendDate); | |
| { | |
| $logger = \App::getInstance('logger'); | |
| $binds = []; | |
| $this->db->strField = 'smsType, smsAutoType, contents, subject, messageTitle'; | |
| $this->db->strJoin = DB_SMS_CONTENTS; | |
| $this->db->strWhere = 'smsType= ? AND smsAutoCode = ? AND smsAutoType IN (\'' . gd_implode('\', \'', $wheres) . '\') AND contents != \'\' AND contents IS NOT NULL'; | |
| $this->db->bind_param_push($binds, 's', $this->smsType); | |
변경 전SmsSender.php
| protected $password; | |
| /** @var bool SMS 발송 시 Exception 을 전달할 경우 사용 */ | |
| protected $isThrowPasswordException = false; | |
| /** @var string SMS 대량발송 파일 경로 */ | |
| private $_smsLargeFilePath; | |
| /** @var object SMS 대량발송 TXT 파일 생성 로거 */ | |
| ]; | |
| //@formatter:on | |
| if ($this->_isLms()) { | |
| $this->sendSms['subject'] = ''; | |
| } | |
| } | |
| ]; | |
| if ($this->_isLms()) { | |
| $this->smsLog['sendFl'] = 'lms'; | |
| } | |
| } | |
| $this->isThrowPasswordException = $isThrowPasswordException; | |
| } | |
| /** | |
| * validPassword | |
| * sms 패스워드 확인 - 초기 패스워드가 아닐 경우 검증 | |
변경 후SmsSender.php
| protected $password; | |
| /** @var bool SMS 발송 시 Exception 을 전달할 경우 사용 */ | |
| protected $isThrowPasswordException = false; | |
| /** @var string|null LMS 제목 */ | |
| protected $subject; | |
| /** @var string SMS 대량발송 파일 경로 */ | |
| private $_smsLargeFilePath; | |
| /** @var object SMS 대량발송 TXT 파일 생성 로거 */ | |
| ]; | |
| //@formatter:on | |
| if ($this->_isLms()) { | |
| $this->sendSms['subject'] = $this->resolveSubject(); | |
| } | |
| } | |
| ]; | |
| if ($this->_isLms()) { | |
| $this->smsLog['sendFl'] = 'lms'; | |
| $this->smsLog['subject'] = trim(preg_replace('/#?\{[^}]*\}/u', '', (string) $this->subject)); // 저장은 치환자 제거한 원문(빈값 유지), [제목없음] 변환은 발송/표시 시점만 | |
| } | |
| } | |
| $this->isThrowPasswordException = $isThrowPasswordException; | |
| } | |
| /** | |
| * LMS 제목 설정 (LMS 발송 시에만 사용) | |
| * | |
| * @param string|null $subject | |
| */ | |
| public function setSubject(?string $subject): void | |
| { | |
| $this->subject = $subject; | |
| } | |
| /** | |
| * 실발송용 LMS 제목 계산 | |
| * - 제목 치환자({..}/#{..})는 미지원이므로 공란 처리 | |
| * - LMS 인데 제목이 없으면(또는 치환자만 있어 공란) '[제목없음]' 으로 발송 | |
| * | |
| * @return string | |
| */ | |
| protected function resolveSubject(): string | |
| { | |
| $subject = trim(preg_replace('/#?\{[^}]*\}/u', '', (string) $this->subject)); | |
| if ($subject === '') { | |
| return '[제목없음]'; | |
| } | |
| return $subject; | |
| } | |
| /** | |
| * validPassword | |
| * sms 패스워드 확인 - 초기 패스워드가 아닐 경우 검증 | |
변경 전SmsAutoController.php
| // SMS 포인트 Sync | |
| Sms::saveSmsPoint(); | |
| $memberJoin = ComponentUtils::getPolicy('member.join'); | |
| $this->setData('smsAutoList', Sms::SMS_AUTO_RECEIVE_LIST); | |
| $this->setData('smsAutoOrderPeriod', Sms::SMS_AUTO_ORDER_PERIOD); | |
| $this->setData('smsAutoOrderAfterPeriod', Sms::SMS_ORDER_AFTER_PERIOD); | |
변경 후SmsAutoController.php
| // SMS 포인트 Sync | |
| Sms::saveSmsPoint(); | |
| $memberJoin = ComponentUtils::getPolicy('member.join'); | |
| $this->setData('lmsSubjectLimit', defined(Sms::class . '::LMS_SUBJECT_LIMIT') ? Sms::LMS_SUBJECT_LIMIT : 40); | |
| $this->setData('smsAutoList', Sms::SMS_AUTO_RECEIVE_LIST); | |
| $this->setData('smsAutoOrderPeriod', Sms::SMS_AUTO_ORDER_PERIOD); | |
| $this->setData('smsAutoOrderAfterPeriod', Sms::SMS_ORDER_AFTER_PERIOD); | |
변경 전SmsLogPsController.php
| try { | |
| $requestParams = $request->post()->all(); | |
| $godoSms = new GodoSmsServerApi(); | |
| $smsLog = $componentSmsLog->getSmsLog('*', $requestParams['smsLogSno']); | |
| if ($smsLog['replaceCodeType'] == 'none') { | |
| // SMS 결과 수신 처리 | |
| if ($godoSms->smsReserveChange($requestParams['sno'], 'modify', $requestParams['contents']) !== true) { | |
| throw new LayerException(__('수정이 실패되었습니다.')); | |
| } else { | |
| $componentSmsLog->editContents($requestParams); | |
| $this->json(__('수정되었습니다.')); | |
| } | |
| } else { | |
| // SMS 결과 수신 처리 | |
| if ($godoSms->smsSendListReserveChange($requestParams['sno'], 'modify', $requestParams['contents']) !== true) { | |
| throw new LayerException(__('수정이 실패되었습니다.')); | |
| } else { | |
| $componentSmsLog->editContents($requestParams); | |
| $this->json(__('수정되었습니다.')); | |
| } | |
| } | |
| } catch (LayerException $e) { | |
| $this->json($e->getMessage()); | |
| } | |
변경 후SmsLogPsController.php
| try { | |
| $requestParams = $request->post()->all(); | |
| $godoSms = new GodoSmsServerApi(); | |
| // 발송내역 고유번호 (수정 레이어는 sno 로 전달) | |
| $smsLogSno = gd_isset($requestParams['smsLogSno'], gd_isset($requestParams['sno'])); | |
| $smsLog = $componentSmsLog->getSmsLog('*', $smsLogSno); | |
| if (empty($smsLog)) { | |
| throw new LayerException(__('발송내역을 찾을 수 없습니다.')); | |
| } | |
| // 예약변경 API 는 DB 의 contents/subject 를 읽어 외부(고도 SMS 서버)로 전송하므로 | |
| // 외부 예약 메시지에 수정 내용이 반영되도록 DB 를 먼저 갱신한다. | |
| $requestParams['sno'] = $smsLogSno; | |
| $componentSmsLog->editContents($requestParams); | |
| if ($smsLog['replaceCodeType'] == 'none') { | |
| $result = $godoSms->smsReserveChange($smsLogSno, 'modify'); | |
| } else { | |
| // 치환코드 발송건은 수신자별로 재구성되므로 해당 발송내역의 발송리스트 sno 목록을 전달한다. | |
| $smsSendList = $componentSmsLog->getSmsSendList(['smsLogSno' => $smsLogSno]); | |
| $sendListSno = []; | |
| foreach ((array) gd_isset($smsSendList['data'], []) as $sendListRow) { | |
| $sendListSno[] = $sendListRow['sno']; | |
| } | |
| $result = $godoSms->smsSendListReserveChange($smsLogSno, 'modify', $sendListSno); | |
| } | |
| if ($result !== true) { | |
| throw new LayerException(__('수정이 실패되었습니다.')); | |
| } | |
| $this->json(__('수정되었습니다.')); | |
| } catch (LayerException $e) { | |
| $this->json($e->getMessage()); | |
| } | |
변경 전SmsSendController.php
| 'board' => '게시판', | |
| ]; | |
| $smsContents = ''; | |
| $receiveTotal = $rejectCount = 0; | |
| $receiverData = $reSenderData = []; | |
| $popupMode = false; | |
| $componentSmsLog = \App::load('Component\\Sms\\SmsLog'); | |
| $smsLog = $componentSmsLog->getSmsLog('*', $request->post()->get('smsLogSno')); // 재전송 문자내역 조회 | |
| $smsContents = StringUtils::htmlSpecialCharsStripSlashes($smsLog['contents']); // 재전송 메시지 설정 | |
| $smsSendList = $componentSmsLog->getSmsSendList($request->post()->all())['data']; // 재전송 문자내역 발송내역 조회 | |
| $hasGuest = $componentSmsLog->hasGuestBySendList($smsSendList); // 발송내역 중 비회원 발송내역 확인 | |
| $isReSendAll = $request->post()->get('mode', '') == 'resend_all_member'; | |
| $this->setData('sms080Policy', ComponentUtils::getPolicy('sms.sms080')); | |
| $this->setData('smsStringLimit', Sms::SMS_STRING_LIMIT); | |
| $this->setData('lmsStringLimit', Sms::LMS_STRING_LIMIT); | |
| $this->setData('smsForbidTime', Sms::SMS_FORBID_TIME); | |
| $this->setData('lmsPoint', Sms::LMS_POINT); | |
| $this->setData('smsCallNum', $smsCallNum); | |
| $this->setData('receiverMode', $receiverMode); | |
| $this->setData('popupMode', $popupMode); | |
| $this->setData('smsContents', $smsContents); | |
| $this->setData('reSenderData', $reSenderData); | |
| $this->setData('receiveTotal', $receiveTotal); | |
| $this->setData('rejectCount', $rejectCount); | |
변경 후SmsSendController.php
| 'board' => '게시판', | |
| ]; | |
| $smsContents = ''; | |
| $smsSubject = ''; | |
| $receiveTotal = $rejectCount = 0; | |
| $receiverData = $reSenderData = []; | |
| $popupMode = false; | |
| $componentSmsLog = \App::load('Component\\Sms\\SmsLog'); | |
| $smsLog = $componentSmsLog->getSmsLog('*', $request->post()->get('smsLogSno')); // 재전송 문자내역 조회 | |
| $smsContents = StringUtils::htmlSpecialCharsStripSlashes($smsLog['contents']); // 재전송 메시지 설정 | |
| $smsSubject = StringUtils::htmlSpecialCharsStripSlashes($smsLog['subject'] ?? ''); // 재전송 LMS 제목 복원 | |
| $smsSendList = $componentSmsLog->getSmsSendList($request->post()->all())['data']; // 재전송 문자내역 발송내역 조회 | |
| $hasGuest = $componentSmsLog->hasGuestBySendList($smsSendList); // 발송내역 중 비회원 발송내역 확인 | |
| $isReSendAll = $request->post()->get('mode', '') == 'resend_all_member'; | |
| $this->setData('sms080Policy', ComponentUtils::getPolicy('sms.sms080')); | |
| $this->setData('smsStringLimit', Sms::SMS_STRING_LIMIT); | |
| $this->setData('lmsStringLimit', Sms::LMS_STRING_LIMIT); | |
| $this->setData('lmsSubjectLimit', defined(Sms::class . '::LMS_SUBJECT_LIMIT') ? Sms::LMS_SUBJECT_LIMIT : 40); | |
| $this->setData('smsForbidTime', Sms::SMS_FORBID_TIME); | |
| $this->setData('lmsPoint', Sms::LMS_POINT); | |
| $this->setData('smsCallNum', $smsCallNum); | |
| $this->setData('receiverMode', $receiverMode); | |
| $this->setData('popupMode', $popupMode); | |
| $this->setData('smsContents', $smsContents); | |
| $this->setData('smsSubject', $smsSubject); | |
| $this->setData('reSenderData', $reSenderData); | |
| $this->setData('receiveTotal', $receiveTotal); | |
| $this->setData('rejectCount', $rejectCount); | |
변경 전CartRemindRegistController.php
| $this->setData('selected', $selected); | |
| $this->setData('smsStringLimit', Sms::SMS_STRING_LIMIT); | |
| $this->setData('lmsStringLimit', Sms::LMS_STRING_LIMIT); | |
| $this->setData('lmsPoint', Sms::LMS_POINT); | |
| $this->setData('sms080Policy', ComponentUtils::getPolicy('sms.sms080')); | |
| $this->setData('commerceSmsRefusalIntroUrl', ConfigUrlUtils::getNhnCommerceEchostUrl('sms-refusal-intro')); | |
변경 후CartRemindRegistController.php
| $this->setData('selected', $selected); | |
| $this->setData('smsStringLimit', Sms::SMS_STRING_LIMIT); | |
| $this->setData('lmsStringLimit', Sms::LMS_STRING_LIMIT); | |
| $this->setData('lmsSubjectLimit', defined(Sms::class . '::LMS_SUBJECT_LIMIT') ? Sms::LMS_SUBJECT_LIMIT : 40); | |
| $this->setData('lmsPoint', Sms::LMS_POINT); | |
| $this->setData('sms080Policy', ComponentUtils::getPolicy('sms.sms080')); | |
| $this->setData('commerceSmsRefusalIntroUrl', ConfigUrlUtils::getNhnCommerceEchostUrl('sms-refusal-intro')); | |
변경 전ComebackCouponRegistController.php
| ]); | |
| $this->setData('smsStringLimit', Sms::SMS_STRING_LIMIT); | |
| $this->setData('lmsStringLimit', Sms::LMS_STRING_LIMIT); | |
| $this->setData('smsForbidTime', Sms::SMS_FORBID_TIME); | |
| $this->setData('lmsPoint', Sms::LMS_POINT); | |
| $this->setData('checkMode', gd_isset($checkMode)); | |
변경 후ComebackCouponRegistController.php
| ]); | |
| $this->setData('smsStringLimit', Sms::SMS_STRING_LIMIT); | |
| $this->setData('lmsStringLimit', Sms::LMS_STRING_LIMIT); | |
| $this->setData('lmsSubjectLimit', defined(Sms::class . '::LMS_SUBJECT_LIMIT') ? Sms::LMS_SUBJECT_LIMIT : 40); | |
| $this->setData('smsForbidTime', Sms::SMS_FORBID_TIME); | |
| $this->setData('lmsPoint', Sms::LMS_POINT); | |
| $this->setData('checkMode', gd_isset($checkMode)); | |
변경 전LayerCartRemindMessageController.php
| { | |
| $cartRemindNo = Request::get()->get('cartRemindNo'); | |
| $cartRemind = new CartRemind(); | |
| $cartRemindData = $cartRemind->getCartRemindInfo($cartRemindNo,'cartRemindNo, cartRemindSendType, cartRemindSendMessage'); | |
| $this->setData('cartRemindData', $cartRemindData); | |
| $this->setData('smsStringLimit', Sms::SMS_STRING_LIMIT); | |
| $this->setData('lmsStringLimit', Sms::LMS_STRING_LIMIT); | |
| $this->setData('lmsPoint', Sms::LMS_POINT); | |
| $this->getView()->setDefine('layout', 'layout_layer.php'); | |
| } | |
변경 후LayerCartRemindMessageController.php
| { | |
| $cartRemindNo = Request::get()->get('cartRemindNo'); | |
| $cartRemind = new CartRemind(); | |
| $cartRemindData = $cartRemind->getCartRemindInfo($cartRemindNo,'cartRemindNo, cartRemindSendType, cartRemindSendMessage, cartRemindSendSubject'); | |
| $this->setData('cartRemindData', $cartRemindData); | |
| $this->setData('smsStringLimit', Sms::SMS_STRING_LIMIT); | |
| $this->setData('lmsStringLimit', Sms::LMS_STRING_LIMIT); | |
| $this->setData('lmsSubjectLimit', defined(Sms::class . '::LMS_SUBJECT_LIMIT') ? Sms::LMS_SUBJECT_LIMIT : 40); | |
| $this->setData('lmsPoint', Sms::LMS_POINT); | |
| $this->getView()->setDefine('layout', 'layout_layer.php'); | |
| } | |
변경 전LayerStandbySmsController.php
| { | |
| /** @var \Bundle\Component\Sms\SmsLog $smsLog */ | |
| $smsLog = App::load('\\Component\\Sms\\SmsLog'); | |
| $data = $smsLog->getSmsLog('sno, sendFl, contents, contentsMask', Request::get()->get('sno')); | |
| $this->getView()->setDefine('layout', 'layout_layer.php'); | |
| $this->setData('data', gd_htmlspecialchars_stripslashes($data)); | |
| $this->setData('smsStringLimit', Sms::SMS_STRING_LIMIT); | |
| $this->setData('lmsStringLimit', Sms::LMS_STRING_LIMIT); | |
| $this->setData('smsForbidTime', Sms::SMS_FORBID_TIME); | |
| $this->setData('lmsPoint', Sms::LMS_POINT); | |
| } | |
변경 후LayerStandbySmsController.php
| { | |
| /** @var \Bundle\Component\Sms\SmsLog $smsLog */ | |
| $smsLog = App::load('\\Component\\Sms\\SmsLog'); | |
| $data = $smsLog->getSmsLog('sno, sendFl, subject, contents, contentsMask', Request::get()->get('sno')); | |
| $this->getView()->setDefine('layout', 'layout_layer.php'); | |
| $this->setData('data', gd_htmlspecialchars_stripslashes($data)); | |
| $this->setData('smsStringLimit', Sms::SMS_STRING_LIMIT); | |
| $this->setData('lmsStringLimit', Sms::LMS_STRING_LIMIT); | |
| $this->setData('lmsSubjectLimit', defined(Sms::class . '::LMS_SUBJECT_LIMIT') ? Sms::LMS_SUBJECT_LIMIT : 40); | |
| $this->setData('smsForbidTime', Sms::SMS_FORBID_TIME); | |
| $this->setData('lmsPoint', Sms::LMS_POINT); | |
| } | |