본문으로 건너뛰기

LMS 메시지 발송 시 제목 입력 기능

PHP 8 · GODO25
변경 파일 수: 22개
변경 파일 목록
총 22개
변경 파일 코드
추가삭제
Admin/member/sms_auto.php+39-3
변경 전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();
 
Admin/member/sms_log.php+4
변경 전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>';
 
Admin/member/sms_send.php+75-2
변경 전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>
 
Admin/promotion/cart_remind_regist.php+69-14
변경 전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>
 
Admin/promotion/comeback_coupon_regist.php+68-11
변경 전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();
});
 
Admin/promotion/layer_cart_remind_message.php+46-1
변경 전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>
 
 
Admin/share/layer_comeback_coupon_sms.php+6
변경 전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>
 
Admin/share/layer_standby_sms.php+48-6
변경 전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>
 
Admin/share/member_crm_sms.php+8
변경 전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>';
 
Component/CartRemind/CartRemind.php+15
변경 전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'] = '';
 
Component/Coupon/CouponAdmin.php+3
변경 전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';
// 전송요청 수
 
Component/Database/DBTableField.php+3
변경 전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], // 전송일
 
Component/Sms/SmsAdmin.php+10
변경 전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']);
}
 
Component/Sms/SmsAuto.php+6-1
변경 전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);
 
Component/Sms/SmsSender.php+31-1
변경 전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 패스워드 확인 - 초기 패스워드가 아닐 경우 검증
 
Controller/Admin/Member/SmsAutoController.php+1
변경 전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);
 
Controller/Admin/Member/SmsLogPsController.php+25-14
변경 전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());
}
 
Controller/Admin/Member/SmsSendController.php+4
변경 전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);
 
Controller/Admin/Promotion/CartRemindRegistController.php+1
변경 전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'));
 
Controller/Admin/Promotion/ComebackCouponRegistController.php+1
변경 전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));
 
Controller/Admin/Promotion/LayerCartRemindMessageController.php+2-1
변경 전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');
}
 
Controller/Admin/Share/LayerStandbySmsController.php+2-1
변경 전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);
}