변경 파일 목록
총 54개
Admin (7)
excel_member_up.phpmember/member_detail_search.phpmember/member_joinitem.phpmember/_member_view_history.phpmember/_member_view_other.phpmember/_member_view.phpmember/base_agreement_with_private.phppolicy/Component (13)
BuyerInformCode.phpAgreement/BuyerInform.phpAgreement/BuyerInformVo.phpAgreement/DBTableField.phpDatabase/MemberTableField.phpDatabase/ExcelMember.phpExcel/History.phpMember/MemberAdmin.phpMember/MemberDAO.phpMember/Member.phpMember/MemberVO.phpMember/MyPage.phpMember/MemberUtil.phpMember/Util/Controller (10)
MemberModifyController.phpAdmin/Member/MemberPsController.phpAdmin/Member/MemberRegisterController.phpAdmin/Member/BaseAgreementWithPrivateController.phpAdmin/Policy/BaseAgreementWithPrivatePsController.phpAdmin/Policy/MemberCrmDetailController.phpAdmin/Share/JoinAgreementController.phpFront/Member/LoginPsController.phpFront/Member/MyPageController.phpFront/Mypage/AgreementController.phpFront/Service/data (24)
join_agreement.htmlskin/front/moment/member/_join_view.htmlskin/front/moment/member/_join_view_other.htmlskin/front/moment/member/my_page.htmlskin/front/moment/mypage/join_agreement.htmlskin/front/mygreek/member/_join_view.htmlskin/front/mygreek/member/_join_view_other.htmlskin/front/mygreek/member/my_page.htmlskin/front/mygreek/mypage/join_agreement.htmlskin/front/story_g/member/_join_view.htmlskin/front/story_g/member/_join_view_other.htmlskin/front/story_g/member/my_page.htmlskin/front/story_g/mypage/join_agreement.htmlskin/mobile/moment/member/_join_view.htmlskin/mobile/moment/member/_join_view_other.htmlskin/mobile/moment/member/my_page.htmlskin/mobile/moment/mypage/join_agreement.htmlskin/mobile/mygreek/member/_join_view.htmlskin/mobile/mygreek/member/_join_view_other.htmlskin/mobile/mygreek/member/my_page.htmlskin/mobile/mygreek/mypage/join_agreement.htmlskin/mobile/story_g/member/_join_view.htmlskin/mobile/story_g/member/_join_view_other.htmlskin/mobile/story_g/member/my_page.htmlskin/mobile/story_g/mypage/변경 파일 코드
추가삭제
변경 전excel_member_up.php
| <div class="notice-info"> | |
| 엑셀업로드 전 회원가입 시 발송 가능한 항목(회원가입, 마일리지 지급, 회원가입 축하 쿠폰)의 발송설정을 확인해주시기 바랍니다. <a href="/member/sms_auto.php" target="_blank" class="btn-link">SMS설정></a> <a href="/member/mail_config_auto.php" target="_blank" class="btn-link">자동 메일 설정></a> | |
| </div> | |
| </td> | |
| </tr> | |
| </table> | |
변경 후excel_member_up.php
| <div class="notice-info"> | |
| 엑셀업로드 전 회원가입 시 발송 가능한 항목(회원가입, 마일리지 지급, 회원가입 축하 쿠폰)의 발송설정을 확인해주시기 바랍니다. <a href="/member/sms_auto.php" target="_blank" class="btn-link">SMS설정></a> <a href="/member/mail_config_auto.php" target="_blank" class="btn-link">자동 메일 설정></a> | |
| </div> | |
| <div class="notice-info"> | |
| 마케팅 목적 개인정보 수집 및 이용 항목 업로드 시 반드시 고객으로부터 받은 별도의 개인정보 수집·이용 동의서를 보유하고 계셔야 하며, NHN COMMERCE는 수탁사로서 업로드되는 데이터에 대한 책임을 지지 않습니다. | |
| </div> | |
| </td> | |
| </tr> | |
| </table> | |
변경 전member_detail_search.php
| </td> | |
| </tr> | |
| <tr> | |
| <th>SMS수신동의</th> | |
| <td> | |
| <label class="radio-inline"> | |
| <input type="radio" name="smsFl" | |
변경 후member_detail_search.php
| </td> | |
| </tr> | |
| <tr> | |
| <th>마케팅 목적 개인정보 수집 및 이용 동의</th> | |
| <td colspan="3"> | |
| <label class="radio-inline"> | |
| <input type="radio" name="privateMarketingConsentOptionFl" | |
| value="" <?= gd_isset($checked['privateMarketingConsentOptionFl']['']); ?>/> | |
| 전체 | |
| </label> | |
| <label class="radio-inline"> | |
| <input type="radio" name="privateMarketingConsentOptionFl" | |
| value="y" <?= gd_isset($checked['privateMarketingConsentOptionFl']['y']); ?>/> | |
| 동의 | |
| </label> | |
| <label class="radio-inline"> | |
| <input type="radio" name="privateMarketingConsentOptionFl" | |
| value="n" <?= gd_isset($checked['privateMarketingConsentOptionFl']['n']); ?>/> | |
| 미동의 | |
| </label> | |
| </td> | |
| </tr> | |
| <tr> | |
| <th>모바일 메시지 수신동의</th> | |
| <td> | |
| <label class="radio-inline"> | |
| <input type="radio" name="smsFl" | |
변경 전member_joinitem.php
| </tr> | |
| <tr> | |
| <th>이메일</th> | |
| <td> | |
| <?php if ($mall['mallSno'] == 1) { ?> | |
| <label class="checkbox-inline" title="사용여부를 선택해주세요!"> | |
| <input type="checkbox" name="email[use]" value="y"/> | |
| <input type="hidden" name="email[require]" value="y"/> | |
| <?php } ?> | |
| </td> | |
| <td> | |
| <label class="checkbox-inline" for="maillingFl"> | |
| <input type="checkbox" id="maillingFl" name="maillingFl[use]" value="y"> | |
| 정보/이벤트 메일 수신 동의 사용 | |
| </label> | |
| </td> | |
| </tr> | |
| <tr> | |
| <th>휴대폰번호</th> | |
| <td <?= $mall['mallSno'] == 1 ? '' : 'colspan=2' ?>> | |
| <label class="checkbox-inline" title="사용여부를 선택해주세요!"> | |
| <input type="checkbox" name="cellPhone[use]" value="y"/> | |
| 사용 | |
| 필수 | |
| </label> | |
| </td> | |
| <?php if ($mall['mallSno'] == 1) { ?> | |
| <td> | |
| <label class="checkbox-inline" for="smsFl"> | |
| <input type="checkbox" id="smsFl" name="smsFl[use]" value="y"> | |
| 정보/이벤트 SMS 수신 동의 사용 | |
| </label> | |
| </td> | |
| <?php } ?> | |
| </tr> | |
| <?php if ($mall['mallSno'] == 1) { ?> | |
| <tr> | |
| } | |
| }); | |
| $(':checkbox[name="maillingFl[use]"], :checkbox[name="smsFl[use]"]', '#frmSetup').on('change', function (e) { | |
| var $target = $(e.target); | |
| if ($target.prop('checked') === false) { | |
| BootstrapDialog.confirm({ | |
| title: "정보/이벤트 메일(SMS)수신 동의 사용 체크 해제", | |
| message: "정보통신망법에 따라 수신동의한 회원에게만 정보/이벤트 소식을 전송할 수 있습니다. 수신동의 사용을 해제하시겠습니까?", | |
| btnCancelLabel: "취소", | |
| btnOkLabel: "해제", | |
| callback: function (result) { | |
| if (result) { | |
| $target.prop('checked', false); | |
| } else { | |
| $target.prop('checked', true); | |
| } | |
| } | |
| }); | |
| } | |
| }); | |
| $('.expiration_detail').on('click', function () { | |
| var msg = "휴면회원 정책에서 휴면회원 ‘사용함’으로 설정할 경우, 일정 기간 동안 쇼핑몰을 이용하지 않는 회원은 휴면회원으로 전환되어 쇼핑몰의 이용이 제한되고, 쇼핑몰 운영자는 회원에게 정보/이벤트성 안내를 할 수 없습니다."+'<br>'+"- 회원가입 항목에서 개인 정보 유효기간 미사용 시 1년간 쇼핑몰을 이용하지 않는 회원들을 "+'<br>'+" 휴면회원으로 일괄 전환합니다."+'<br>'+"- 개인 정보 유효기간 사용 시 회원에게 ‘휴면회원 방지기간’ 정보를 수집할 수 있으며, 각 회원이 "+'<br>'+" “1년(기본값)/3년/5년/탈퇴 시” 중 선택한 기간 동안 쇼핑몰을 이용하지 않는 경우 해당 회원의"+'<br>'+" 정보를 휴면회원으로 전환합니다."+'<br><div><img src="../admin/gd_share/img/expirationFl_img.png" style="width:80%; height:100%; margin-top:20px; margin-left:50px;"></div>' + | |
| '<br>'+"휴면회원 정책에서 휴면회원 ‘사용 안함’으로 설정할 경우, 각 회원별로 개인정보 유효기간이 만료되더라도 휴면회원으로 전환되지 않으며 계속 쇼핑몰을 이용할 수 있습니다."+'<br>'; | |
변경 후member_joinitem.php
| </tr> | |
| <tr> | |
| <th>이메일</th> | |
| <td colspan="2"> | |
| <?php if ($mall['mallSno'] == 1) { ?> | |
| <label class="checkbox-inline" title="사용여부를 선택해주세요!"> | |
| <input type="checkbox" name="email[use]" value="y"/> | |
| <input type="hidden" name="email[require]" value="y"/> | |
| <?php } ?> | |
| </td> | |
| </tr> | |
| <tr> | |
| <th>휴대폰번호</th> | |
| <td colspan="2"> | |
| <label class="checkbox-inline" title="사용여부를 선택해주세요!"> | |
| <input type="checkbox" name="cellPhone[use]" value="y"/> | |
| 사용 | |
| 필수 | |
| </label> | |
| </td> | |
| </tr> | |
| <?php if ($mall['mallSno'] == 1) { ?> | |
| <tr> | |
| } | |
| }); | |
| $('.expiration_detail').on('click', function () { | |
| var msg = "휴면회원 정책에서 휴면회원 ‘사용함’으로 설정할 경우, 일정 기간 동안 쇼핑몰을 이용하지 않는 회원은 휴면회원으로 전환되어 쇼핑몰의 이용이 제한되고, 쇼핑몰 운영자는 회원에게 정보/이벤트성 안내를 할 수 없습니다."+'<br>'+"- 회원가입 항목에서 개인 정보 유효기간 미사용 시 1년간 쇼핑몰을 이용하지 않는 회원들을 "+'<br>'+" 휴면회원으로 일괄 전환합니다."+'<br>'+"- 개인 정보 유효기간 사용 시 회원에게 ‘휴면회원 방지기간’ 정보를 수집할 수 있으며, 각 회원이 "+'<br>'+" “1년(기본값)/3년/5년/탈퇴 시” 중 선택한 기간 동안 쇼핑몰을 이용하지 않는 경우 해당 회원의"+'<br>'+" 정보를 휴면회원으로 전환합니다."+'<br><div><img src="../admin/gd_share/img/expirationFl_img.png" style="width:80%; height:100%; margin-top:20px; margin-left:50px;"></div>' + | |
| '<br>'+"휴면회원 정책에서 휴면회원 ‘사용 안함’으로 설정할 경우, 각 회원별로 개인정보 유효기간이 만료되더라도 휴면회원으로 전환되지 않으며 계속 쇼핑몰을 이용할 수 있습니다."+'<br>'; | |
변경 전_member_view_history.php
| <script id="history-pagination-template2" type="text/template"> | |
| <nav> | |
| <ul class="pagination pagination-sm"> | |
| <% for(var i = page.start; i < page.end; i++) { %> <% if(i === (page.now *1)){ %> | |
| <li class="active"> | |
| <span><%- i %></span> | |
| </li> | |
변경 후_member_view_history.php
| <script id="history-pagination-template2" type="text/template"> | |
| <nav> | |
| <ul class="pagination pagination-sm"> | |
| <% for(var i = page.start; i <= page.end; i++) { %> <% if(i === (page.now *1)){ %> | |
| <li class="active"> | |
| <span><%- i %></span> | |
| </li> | |
변경 전_member_view_other.php
| <col class="width-sm"/> | |
| <col/> | |
| </colgroup> | |
| <tr> | |
| <th>개인정보<br/>수집·이용</th> | |
| <td> | |
| <?php | |
| if (isset($data['privateApprovalOptionFl']) && is_array($data['privateApprovalOptionFl']) && isset($privateApprovalOption)) { | |
| foreach ($privateApprovalOption as $index2 => $item2) { | |
| if($data['privateApprovalOptionFl'][$item2['sno']] == 'y'){ | |
| echo '<div>- ' . $item2['informNm'] . ' : 동의함</div>'; | |
| } elseif ($data['privateApprovalOptionFl'][$item2['sno']] == 'n') { | |
| echo '<div>- ' . $item2['informNm'] . ' : 동의안함</div>'; | |
| } | |
| } | |
| } else { | |
| echo '사용안함'; | |
| } | |
| ?> | |
| </td> | |
| </tr> | |
| <tr> | |
| <th>개인정보 취급위탁</th> | |
| <td> | |
| <?php | |
| if (isset($data['privateConsignFl']) && is_array($data['privateConsignFl']) && isset($privateConsign)) { | |
| foreach ($privateConsign as $index2 => $item2) { | |
| if($data['privateConsignFl'][$item2['sno']] == 'y'){ | |
| echo '<div>- ' . $item2['informNm'] . ' : 동의함</div>'; | |
| } elseif ($data['privateConsignFl'][$item2['sno']] == 'n') { | |
| echo '<div>- ' . $item2['informNm'] . ' : 동의안함</div>'; | |
| } | |
| } | |
| } else { | |
| echo '사용안함'; | |
| } | |
| ?> | |
| </td> | |
| </tr> | |
| <tr> | |
| <th>개인정보<br/>제3자 제공</th> | |
| <td> | |
| <?php | |
| if (isset($data['privateOfferFl']) && is_array($data['privateOfferFl']) && isset($privateOffer)) { | |
| foreach ($privateOffer as $index2 => $item2) { | |
| if($data['privateOfferFl'][$item2['sno']] == 'y'){ | |
| echo '<div>- ' . $item2['informNm'] . ' : 동의함</div>'; | |
| } elseif ($data['privateOfferFl'][$item2['sno']] == 'n') { | |
| echo '<div>- ' . $item2['informNm'] . ' : 동의안함</div>'; | |
| } | |
| } | |
| } else { | |
| echo '사용안함'; | |
| } | |
| ?> | |
| </td> | |
| </tr> | |
| </table> | |
변경 후_member_view_other.php
| <col class="width-sm"/> | |
| <col/> | |
| </colgroup> | |
| <?php foreach (($privateAgreementRows ?? []) as $row): ?> | |
| <tr> | |
| <th><?= $row['title'] ?></th> | |
| <td> | |
| <?php foreach ($row['lines'] as $line): ?> | |
| <div><?= $line ?></div> | |
| <?php endforeach; ?> | |
| </td> | |
| </tr> | |
| <?php endforeach; ?> | |
| <tr> | |
| <th>광고성 수신 동의</th> | |
| <td> | |
| <?php foreach (($advertisingReceiveLines ?? []) as $line): ?> | |
| <div><?= $line ?></div> | |
| <?php endforeach; ?> | |
| </td> | |
| </tr> | |
| </table> | |
변경 전_member_view.php
| <td colspan="3"><?= $data['sleepWakeDt']; ?></td> | |
| </tr> | |
| <?php } ?> | |
| <tr> | |
| <th>이메일</th> | |
| <td> | |
| </div> | |
| <div class="form-inline"> | |
| <label class="checkbox-inline"> | |
| <input type="checkbox" name="maillingFl" value="y" data-default="" <?= $checked['maillingFl']['y']; ?>/> | |
| 정보/이벤트 MAIL 수신에 동의합니다. | |
| </label> | |
| </div> | |
| <p class="notice-danger notice-info">*수신동의설정 안내메일의 자동발송여부에 따라 회원정보의 수신동의설정 변경 시 해당 회원에게 안내메일이 자동 발송됩니다.</p> | |
| $mailAgreementView .= '<br/>(수신동의여부 확인메일 발송<br/> : ' . $data['lastNotificationDt']['mail'] . ')'; | |
| } | |
| ?> | |
| <?= $data['maillingFl'] == 'y' ? $mailAgreementView : '거부 : ' . gd_date_format('Y-m-d', $mailLastReceiveAgreementDt); ?> | |
| </td> | |
| </tr> | |
| <tr> | |
| <div class="form-inline"> | |
| <span id="cellPhoneMsg" class="input_error_msg"></span> | |
| <label class="checkbox-inline"> | |
| <input type="checkbox" name="smsFl" value="y" <?= $checked['smsFl']['y']; ?>> | |
| 정보/이벤트 SMS 수신에 동의합니다. | |
| </label> | |
| </div> | |
| <p class="notice-danger notice-info">*수신동의설정 안내메일의 자동발송여부에 따라 회원정보의 수신동의설정 변경 시 해당 회원에게 SMS가 자동 발송됩니다.</p> | |
| $smsAgreementView .= '<br/>(수신동의여부 확인SMS 발송<br/> : ' . $data['lastNotificationDt']['sms'] . ')'; | |
| } | |
| ?> | |
| <?= $data['smsFl'] == 'y' ? $smsAgreementView : '거부 : ' . gd_date_format('Y-m-d', $smsLastReceiveAgreementDt); ?> | |
| </td> | |
| </tr> | |
| <tr> | |
변경 후_member_view.php
| <td colspan="3"><?= $data['sleepWakeDt']; ?></td> | |
| </tr> | |
| <?php } ?> | |
| <?php if ($privateMarketingMemberUse): ?> | |
| <tr> | |
| <th>마케팅 목적 개인정보 수집 및 이용 동의</th> | |
| <td> | |
| <label class="checkbox-inline"> | |
| <input type="checkbox" name="privateMarketingConsentOptionFl" value="y" <?= ($mode === 'register') ? 'disabled' : '' ?> <?= $checked['privateMarketingConsentOptionFl']['y']; ?>/> | |
| 마케팅 목적 개인정보 수집 및 이용 동의 | |
| </label> | |
| </td> | |
| <th>마케팅 목적 개인정보 수집 및 이용 동의/거부일</th> | |
| <td> | |
| <?= ($data['privateMarketingConsentOptionFl'] === 'y' ? '동의 : ' : '거부 : ') . $data['privateMktAgreementDt'] ?> | |
| </td> | |
| </tr> | |
| <?php endif; ?> | |
| <tr> | |
| <th>이메일</th> | |
| <td> | |
| </div> | |
| <div class="form-inline"> | |
| <label class="checkbox-inline"> | |
| <input type="checkbox" name="maillingFl" <?= ($mode === 'register') ? 'disabled' : '' ?> value="y" data-default="" <?= $checked['maillingFl']['y']; ?>/> | |
| 마케팅 이메일 수신 동의 | |
| </label> | |
| </div> | |
| <p class="notice-danger notice-info">*수신동의설정 안내메일의 자동발송여부에 따라 회원정보의 수신동의설정 변경 시 해당 회원에게 안내메일이 자동 발송됩니다.</p> | |
| $mailAgreementView .= '<br/>(수신동의여부 확인메일 발송<br/> : ' . $data['lastNotificationDt']['mail'] . ')'; | |
| } | |
| ?> | |
| <?= $data['maillingFl'] == 'y' ? $mailAgreementView : '거부 : ' . $mailLastReceiveAgreementDt; ?> | |
| </td> | |
| </tr> | |
| <tr> | |
| <div class="form-inline"> | |
| <span id="cellPhoneMsg" class="input_error_msg"></span> | |
| <label class="checkbox-inline"> | |
| <input type="checkbox" <?= ($mode === 'register') ? 'disabled' : '' ?> name="smsFl" value="y" <?= $checked['smsFl']['y']; ?>> | |
| 마케팅 모바일 메시지 수신 동의 | |
| </label> | |
| </div> | |
| <p class="notice-danger notice-info">*수신동의설정 안내메일의 자동발송여부에 따라 회원정보의 수신동의설정 변경 시 해당 회원에게 SMS가 자동 발송됩니다.</p> | |
| $smsAgreementView .= '<br/>(수신동의여부 확인SMS 발송<br/> : ' . $data['lastNotificationDt']['sms'] . ')'; | |
| } | |
| ?> | |
| <?= $data['smsFl'] == 'y' ? $smsAgreementView : '거부 : ' . $smsLastReceiveAgreementDt; ?> | |
| </td> | |
| </tr> | |
| <tr> | |
변경 전base_agreement_with_private.php
| <?= $privateApprovalTableOption ?> | |
| <?= $privateConsignTable ?> | |
| <?= $privateOfferTable ?> | |
| <div class="table-title gd-help-manual mgt10"> | |
| 비회원 대상 동의항목 설정 | |
| </div> | |
| $(document).ready(function () { | |
| var $formSetup = $('#formSetup'); | |
| $.validator.addMethod("year", function (value) { | |
| var valid = moment(value, 'YYYY', true).isValid(); | |
| var checked = $('#agreementModeFlY').prop('checked'); | |
변경 후base_agreement_with_private.php
| <?= $privateApprovalTableOption ?> | |
| <?= $privateConsignTable ?> | |
| <?= $privateOfferTable ?> | |
| <?php if (!empty($privateMarketingMember)): ?> | |
| <table class="table table-cols"> | |
| <caption> | |
| [선택] 마케팅 목적 개인정보 수집 및 이용 동의 | |
| </caption> | |
| <colgroup> | |
| <col class="width-md"/> | |
| <col/> | |
| </colgroup> | |
| <tbody> | |
| <tr> | |
| <th>사용여부</th> | |
| <td> | |
| <label class="radio-inline" for="privateMarketingMemberFlY"> | |
| <input id="privateMarketingMemberFlY" type="radio" name="privateMarketingMemberFl" value="y" <?= $privateMarketingMember['modeFl'] == 'y' ? 'checked=checked' : ''; ?> /> | |
| 사용 | |
| </label> | |
| <label class="radio-inline" for="privateMarketingMemberFlN"> | |
| <input id="privateMarketingMemberFlN" type="radio" name="privateMarketingMemberFl" value="n" <?= $privateMarketingMember['modeFl'] != 'y' ? 'checked=checked' : ''; ?> /> | |
| 사용하지 않음 | |
| </label> | |
| <p class="notice notice-info js-marketing-use-notice">광고성 메시지를 보내려면 아래에 있는 [선택] 광고성 수신 동의 약관도 반드시 함께 사용해야 합니다.</p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <th>안내 팝업 노출 여부</th> | |
| <td> | |
| <label class="radio-inline" for="privateMarketingMemberNoticePopupFlY"> | |
| <input id="privateMarketingMemberNoticePopupFlY" type="radio" name="privateMarketingMemberNoticePopupFl" value="y" <?= $privateMarketingMember['noticePopupFl'] == 'y' ? 'checked=checked' : ''; ?> /> | |
| 사용 | |
| </label> | |
| <label class="radio-inline" for="privateMarketingMemberNoticePopupFlN"> | |
| <input id="privateMarketingMemberNoticePopupFlN" type="radio" name="privateMarketingMemberNoticePopupFl" value="n" <?= $privateMarketingMember['noticePopupFl'] != 'y' ? 'checked=checked' : ''; ?> /> | |
| 사용하지 않음 | |
| </label> | |
| <p class="notice notice-info">안내 팝업 노출 여부를 ‘사용’으로 설정 시, 마케팅 목적의 개인정보 수집 및 이용 동의 이력이 없는 회원이 로그인 시 최초 1회에 한하여 팝업 안내가 출력됩니다.</p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <th>내용입력</th> | |
| <td> | |
| <input type="text" class="form-control" id="privateMarketingMemberWriteTitle" name="privateMarketingMemberWriteTitle" value="<?= gd_htmlspecialchars($privateMarketingMember['informNm']) ?>"> | |
| <textarea id="privateMarketingMemberWriteWrite" name="privateMarketingMemberWriteWrite" rows="12" class="form-control mgt5"><?= gd_htmlspecialchars($privateMarketingMember['content']) ?></textarea> | |
| </td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| <?php endif; ?> | |
| <?php if (!empty($advertisingReceive)): ?> | |
| <table class="table table-cols"> | |
| <caption> | |
| [선택] 광고성 수신 동의 | |
| </caption> | |
| <colgroup> | |
| <col class="width-md"/> | |
| <col/> | |
| </colgroup> | |
| <tbody> | |
| <tr> | |
| <th>사용여부</th> | |
| <td> | |
| <label class="checkbox-inline" for="advertisingReceiveMailFl"> | |
| <input id="advertisingReceiveMailFl" type="checkbox" name="advertisingReceiveMailFl" value="y" <?= $advertisingReceiveMailUse == 'y' ? 'checked="checked"' : '' ?> <?= $joinItemEmailUse == 'y' ? '' : 'disabled="disabled"' ?> /> | |
| 이메일 수신 동의 | |
| </label> | |
| <label class="checkbox-inline" for="advertisingReceiveSmsFl"> | |
| <input id="advertisingReceiveSmsFl" type="checkbox" name="advertisingReceiveSmsFl" value="y" <?= $advertisingReceiveSmsUse == 'y' ? 'checked="checked"' : '' ?> <?= $joinItemCellPhoneUse == 'y' ? '' : 'disabled="disabled"' ?> /> | |
| 모바일 메시지 수신 동의 | |
| </label> | |
| <?php if ($joinItemEmailUse != 'y' || $joinItemCellPhoneUse != 'y'): ?> | |
| <p class="notice notice-info">광고성 수신 동의는 회원가입 항목에서 이메일/휴대폰번호를 사용 중일 때만 설정 가능합니다.</p> | |
| <?php endif; ?> | |
| <p class="mgt5"> | |
| 이메일 : <?php if ($joinItemEmailUse == 'y'): ?>사용 | |
| <?php else: ?>사용 안 함 <a href="../member/member_joinitem.php" class="btn-link-underline" target="_blank">설정 바로가기></a><?php endif; ?><br/> | |
| 휴대폰번호 : <?php if ($joinItemCellPhoneUse == 'y'): ?>사용<?php else: ?>사용 안 함 <a href="../member/member_joinitem.php" class="btn-link-underline" target="_blank">설정 바로가기></a><?php endif; ?> | |
| </p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <th>내용입력</th> | |
| <td> | |
| <input type="text" class="form-control" id="advertisingReceiveWriteTitle" name="advertisingReceiveWriteTitle" value="<?= gd_htmlspecialchars($advertisingReceive['informNm']) ?>"> | |
| <textarea id="advertisingReceiveWriteWrite" name="advertisingReceiveWriteWrite" rows="12" class="form-control mgt5"><?= gd_htmlspecialchars($advertisingReceive['content']) ?></textarea> | |
| </td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| <?php endif; ?> | |
| <div class="table-title gd-help-manual mgt10"> | |
| 비회원 대상 동의항목 설정 | |
| </div> | |
| $(document).ready(function () { | |
| var $formSetup = $('#formSetup'); | |
| // 안내 팝업 노출 여부 비활성화 + 광고성 수신 동의 관련 안내 문구 숨김 | |
| const toggleMarketingNoticePopup = function () { | |
| const isUse = $('input[name=privateMarketingMemberFl]:checked').val() === 'y'; | |
| $('input[name=privateMarketingMemberNoticePopupFl]').prop('disabled', !isUse); | |
| $('.js-marketing-use-notice').toggle(isUse); | |
| }; | |
| $formSetup.on('change', 'input[name=privateMarketingMemberFl]', toggleMarketingNoticePopup); | |
| toggleMarketingNoticePopup(); | |
| $.validator.addMethod("year", function (value) { | |
| var valid = moment(value, 'YYYY', true).isValid(); | |
| var checked = $('#agreementModeFlY').prop('checked'); | |
변경 전BuyerInformCode.php
| const PRIVATE_PROVIDER = '001010'; | |
| /** 마케팅 활용을 위한 개인정보 수집 · 이용 동의 (비회원 주문 시) */ | |
| const PRIVATE_MARKETING = '001011'; | |
| /** 이용안내 */ | |
| const BASE_GUIDE = '006001'; | |
| /** 탈퇴안내 */ | |
| case self::PRIVATE_MARKETING: | |
| $this->initPrivateMarketing(); | |
| break; | |
| } | |
| } | |
| $this->_groupCd = '001'; | |
| } | |
| /** | |
| * 멤버 변수를 배열로 반환하는 함수 | |
| * | |
변경 후BuyerInformCode.php
| const PRIVATE_PROVIDER = '001010'; | |
| /** 마케팅 활용을 위한 개인정보 수집 · 이용 동의 (비회원 주문 시) */ | |
| const PRIVATE_MARKETING = '001011'; | |
| /** 마케팅 목적 개인정보 수집 및 이용 동의 */ | |
| const PRIVATE_MARKETING_MEMBER = '001015'; | |
| /** 광고성 수신 동의 */ | |
| const ADVERTISING_RECEIVE = '001016'; | |
| /** 이용안내 */ | |
| const BASE_GUIDE = '006001'; | |
| /** 탈퇴안내 */ | |
| case self::PRIVATE_MARKETING: | |
| $this->initPrivateMarketing(); | |
| break; | |
| case self::PRIVATE_MARKETING_MEMBER: | |
| $this->initPrivateMarketingMember(); | |
| break; | |
| case self::ADVERTISING_RECEIVE: | |
| $this->initAdvertisingReceive(); | |
| break; | |
| } | |
| } | |
| $this->_groupCd = '001'; | |
| } | |
| /** | |
| * 멤버 변수에 마케팅 목적 개인정보 수집 및 이용 동의 관련 데이터베이스 조회 데이터 설정 | |
| * | |
| * @return void | |
| */ | |
| public function initPrivateMarketingMember() | |
| { | |
| $this->_informCd = self::PRIVATE_MARKETING_MEMBER; | |
| $this->_informNm = __('마케팅 목적 개인정보 수집 및 이용 동의'); | |
| $this->_groupCd = '001'; | |
| } | |
| /** | |
| * 멤버 변수에 광고성 수신 동의 관련 데이터베이스 조회 데이터 설정 | |
| * | |
| * @return void | |
| */ | |
| public function initAdvertisingReceive(): void | |
| { | |
| $this->_informCd = self::ADVERTISING_RECEIVE; | |
| $this->_informNm = __('광고성 수신 동의'); | |
| $this->_groupCd = '001'; | |
| } | |
| /** | |
| * 멤버 변수를 배열로 반환하는 함수 | |
| * | |
변경 전BuyerInform.php
| return $inform; | |
| } | |
| /** | |
| * 사용자 정의 이용약관 데이터 반환 함수 | |
| * | |
| if (empty($vo->getInformNm())) { | |
| $excludeField .= ',informNm'; | |
| } | |
| // 테이블명 반환 | |
| $tableName = $this->mall->getTableName(DB_BUYER_INFORM, $this->saveMallSno); | |
| $this->db->set_insert_db($tableName, $arrBind['param'], $arrBind['bind'], 'y'); | |
| } | |
| /** | |
| * 기본정책 약관, 개인정보관련 동의사항, 이용, 탈퇴 안내 저장 함수 | |
| * | |
| $vo->setModeFl(gd_isset($postValue['privateMarketingFl'], 'n')); | |
| } | |
| $strSQL = "SELECT sno, displayShopFl FROM " . $tableName . " WHERE informCd='" . $code . "'"; | |
| if ($mallSno > DEFAULT_MALL_NUMBER) { | |
| $strSQL .= " AND mallSno='" . $mallSno . "'"; | |
변경 후BuyerInform.php
| return $inform; | |
| } | |
| /** | |
| * 광고성 수신 동의 정보 반환 - 단일 배열 (상점명 치환코드 {rc_mallNm} 적용) | |
| * | |
| * @param int $mallSno | |
| * | |
| * @return array | |
| * @throws Exception | |
| */ | |
| public function getAdvertisingReceiveContentWithReplaceCode(int $mallSno = DEFAULT_MALL_NUMBER): array | |
| { | |
| /** @var \Bundle\Component\Design\ReplaceCode $replaceCode */ | |
| $replaceCode = App::load('\\Component\\Design\\ReplaceCode'); | |
| $replaceCode->initWithUnsetDiff( | |
| [ | |
| '{rc_mallNm}', | |
| ] | |
| ); | |
| $mallInfo = array_map(function ($value) { | |
| return $value['val']; | |
| }, $replaceCode->getDefinedCode()); | |
| $inform = $this->getInformData(BuyerInformCode::ADVERTISING_RECEIVE, $mallSno); | |
| if (!empty($inform['content'])) { | |
| $inform['content'] = str_replace(array_keys($mallInfo), array_values($mallInfo), $inform['content']); | |
| } | |
| return $inform; | |
| } | |
| /** | |
| * 사용자 정의 이용약관 데이터 반환 함수 | |
| * | |
| if (empty($vo->getInformNm())) { | |
| $excludeField .= ',informNm'; | |
| } | |
| // [선택] 마케팅 목적 개인정보 수집 및 이용 동의 / 광고성 수신 동의는 본문을 공백으로 저장하면 기존 내용 유지 | |
| if (in_array($vo->getInformCd(), [BuyerInformCode::PRIVATE_MARKETING_MEMBER, BuyerInformCode::ADVERTISING_RECEIVE], true) && empty($vo->getContent())) { | |
| $excludeField .= ',content'; | |
| } | |
| // 테이블명 반환 | |
| $tableName = $this->mall->getTableName(DB_BUYER_INFORM, $this->saveMallSno); | |
| $this->db->set_insert_db($tableName, $arrBind['param'], $arrBind['bind'], 'y'); | |
| } | |
| /** | |
| * 광고성 수신 동의 채널(이메일/모바일) 저장값 확정. | |
| * 가입항목(joinitem) 미사용 채널은 체크박스가 disabled 로 출력되어 POST 에 실리지 않으므로 이전 es_config 값을 보존한다. | |
| * es_config(member.advertisingReceive) 저장과 es_buyerInform modeFl 파생이 동일 결과를 쓰도록 단일화한다. | |
| * | |
| * @param array $post 저장 요청 POST 배열 (advertisingReceiveMailFl / advertisingReceiveSmsFl 포함 가능) | |
| * @param int $mallSno | |
| * | |
| * @return array ['email' => ['use' => 'y'|'n'], 'mobile' => ['use' => 'y'|'n']] | |
| */ | |
| public function resolveAdvertisingReceiveChannels(array $post, int $mallSno = DEFAULT_MALL_NUMBER): array | |
| { | |
| $joinItem = gd_policy('member.joinitem', $mallSno); | |
| $prevAdvertisingReceive = gd_policy('member.advertisingReceive', $mallSno); | |
| return [ | |
| 'email' => ['use' => ($joinItem['email']['use'] ?? 'n') === 'y' | |
| ? gd_isset($post['advertisingReceiveMailFl'], 'n') | |
| : ($prevAdvertisingReceive['email']['use'] ?? 'n')], | |
| 'mobile' => ['use' => ($joinItem['cellPhone']['use'] ?? 'n') === 'y' | |
| ? gd_isset($post['advertisingReceiveSmsFl'], 'n') | |
| : ($prevAdvertisingReceive['mobile']['use'] ?? 'n')], | |
| ]; | |
| } | |
| /** | |
| * 광고성 수신 동의 채널(이메일/모바일)의 프론트 노출 여부. | |
| * 노출 조건 = 가입항목(joinitem) 사용 AND 광고성 수신 동의(es_config) 사용. (가입항목 선검사 강제 → 호출부 누락 방지) | |
| * | |
| * @param int $mallSno | |
| * | |
| * @return array ['mail' => 'y'|'n', 'sms' => 'y'|'n'] | |
| */ | |
| public function getAdvertisingReceiveChannelUse(int $mallSno = DEFAULT_MALL_NUMBER): array | |
| { | |
| $joinItem = gd_policy('member.joinitem', $mallSno); | |
| $advertisingReceive = gd_policy('member.advertisingReceive', $mallSno); | |
| return [ | |
| 'mail' => (($joinItem['email']['use'] ?? 'n') === 'y' && ($advertisingReceive['email']['use'] ?? 'n') === 'y') ? 'y' : 'n', | |
| 'sms' => (($joinItem['cellPhone']['use'] ?? 'n') === 'y' && ($advertisingReceive['mobile']['use'] ?? 'n') === 'y') ? 'y' : 'n', | |
| ]; | |
| } | |
| /** | |
| * 광고성 수신 동의 사용 여부. 채널(이메일/모바일) 중 하나라도 노출 가능하면 사용(true), 둘 다 미사용이면 false. | |
| * es_buyerInform modeFl 대신 이 값을 프론트 노출/사용 판정 기준으로 쓴다. | |
| * | |
| * @param int $mallSno | |
| * | |
| * @return bool | |
| */ | |
| public function isUseAdvertisingReceive(int $mallSno = DEFAULT_MALL_NUMBER): bool | |
| { | |
| $channelUse = $this->getAdvertisingReceiveChannelUse($mallSno); | |
| return $channelUse['mail'] === 'y' || $channelUse['sms'] === 'y'; | |
| } | |
| /** | |
| * 기본정책 약관, 개인정보관련 동의사항, 이용, 탈퇴 안내 저장 함수 | |
| * | |
| $vo->setModeFl(gd_isset($postValue['privateMarketingFl'], 'n')); | |
| } | |
| if ($code == BuyerInformCode::PRIVATE_MARKETING_MEMBER) { | |
| $vo->setInformNm(strip_tags($postValue['privateMarketingMemberWriteTitle'])); | |
| $vo->setModeFl(gd_isset($postValue['privateMarketingMemberFl'], 'n')); | |
| $vo->setNoticePopupFl(gd_isset($postValue['privateMarketingMemberNoticePopupFl'], 'n')); | |
| } | |
| if ($code == BuyerInformCode::ADVERTISING_RECEIVE) { | |
| $advertisingReceiveChannels = $this->resolveAdvertisingReceiveChannels($postValue, (int)$mallSno); | |
| $vo->setInformNm(strip_tags($postValue['advertisingReceiveWriteTitle'])); | |
| $vo->setModeFl(($advertisingReceiveChannels['email']['use'] === 'y' || $advertisingReceiveChannels['mobile']['use'] === 'y') ? 'y' : 'n'); | |
| } | |
| $strSQL = "SELECT sno, displayShopFl FROM " . $tableName . " WHERE informCd='" . $code . "'"; | |
| if ($mallSno > DEFAULT_MALL_NUMBER) { | |
| $strSQL .= " AND mallSno='" . $mallSno . "'"; | |
변경 전BuyerInformVo.php
| private $regDt; | |
| private $modDt; | |
| private $displayShopFl; | |
| function __construct($code = null) | |
| { | |
| $this->displayShopFl = $displayShopFl; | |
| } | |
| /** | |
| * object return array | |
| * | |
변경 후BuyerInformVo.php
| private $regDt; | |
| private $modDt; | |
| private $displayShopFl; | |
| private string $noticePopupFl = 'n'; | |
| function __construct($code = null) | |
| { | |
| $this->displayShopFl = $displayShopFl; | |
| } | |
| /** | |
| * @return string | |
| */ | |
| public function getNoticePopupFl(): string | |
| { | |
| return $this->noticePopupFl; | |
| } | |
| /** | |
| * @param string $noticePopupFl | |
| */ | |
| public function setNoticePopupFl(string $noticePopupFl) | |
| { | |
| $this->noticePopupFl = $noticePopupFl; | |
| } | |
| /** | |
| * object return array | |
| * | |
변경 전DBTableField.php
| ['val' => 'scmDisplayFl', 'typ' => 's', 'def' => 'n'], // 모드 사용여부 | |
| ['val' => 'content', 'typ' => 's', 'def' => null], // 내용 | |
| ['val' => 'displayShopFl', 'typ' => 's', 'def' => 'n'], // 약관 노출 여부 | |
| ]; | |
| // @formatter:on | |
변경 후DBTableField.php
| ['val' => 'scmDisplayFl', 'typ' => 's', 'def' => 'n'], // 모드 사용여부 | |
| ['val' => 'content', 'typ' => 's', 'def' => null], // 내용 | |
| ['val' => 'displayShopFl', 'typ' => 's', 'def' => 'n'], // 약관 노출 여부 | |
| ['val' => 'noticePopupFl', 'typ' => 's', 'def' => 'n'], // 마케팅 목적 개인정보 수집 동의 안내 팝업 노출 여부 | |
| ]; | |
| // @formatter:on | |
변경 전MemberTableField.php
| 'def' => null, | |
| ], | |
| // 개인정보동의 취급업무 위탁 | |
| [ | |
| 'val' => 'foreigner', | |
| 'typ' => 's', | |
변경 후MemberTableField.php
| 'def' => null, | |
| ], | |
| // 개인정보동의 취급업무 위탁 | |
| [ | |
| 'val' => 'privateMarketingConsentOptionFl', | |
| 'typ' => 's', | |
| 'def' => '', // 미응답(빈값) 상태 유지 - DB DEFAULT '' 와 동일 | |
| ], | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 | |
| [ | |
| 'val' => 'privateMarketingConsentNoticePopupDt', | |
| 'typ' => 's', | |
| 'def' => null, | |
| ], | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 안내 팝업 노출 일시 (NULL:미노출) | |
| [ | |
| 'val' => 'foreigner', | |
| 'typ' => 's', | |
변경 전ExcelMember.php
| 'dbName' => 'member', | |
| 'dbKey' => 'smsFl', | |
| 'excelKey' => 'sms_fl', | |
| 'text' => __('SMS수신동의'), | |
| 'sample' => 'y', | |
| 'comment' => sprintf('y:%s<br />n:%s', __('받음'), __('거부')), | |
| 'desc' => sprintf('y:%s, n:%s, %s', __('받음'), __('거부'), __('기본은 y(받음)입니다.')), | |
| 'comment' => sprintf('n:%s<br />y:%s', __('동의안함'), __('동의함')), | |
| 'desc' => sprintf('n:%s, y:%s, %s', __('동의안함'), __('동의함'), __('기본은 n(동의안함)입니다.')), | |
| ], | |
| [ | |
| 'dbName' => 'member', | |
| 'dbKey' => 'foreigner', | |
변경 후ExcelMember.php
| 'dbName' => 'member', | |
| 'dbKey' => 'smsFl', | |
| 'excelKey' => 'sms_fl', | |
| 'text' => __('모바일메시지수신동의'), | |
| 'sample' => 'y', | |
| 'comment' => sprintf('y:%s<br />n:%s', __('받음'), __('거부')), | |
| 'desc' => sprintf('y:%s, n:%s, %s', __('받음'), __('거부'), __('기본은 y(받음)입니다.')), | |
| 'comment' => sprintf('n:%s<br />y:%s', __('동의안함'), __('동의함')), | |
| 'desc' => sprintf('n:%s, y:%s, %s', __('동의안함'), __('동의함'), __('기본은 n(동의안함)입니다.')), | |
| ], | |
| [ | |
| 'dbName' => 'member', | |
| 'dbKey' => 'privateMarketingConsentOptionFl', | |
| 'excelKey' => 'private_marketing_consent_option_fl', | |
| 'text' => __('마케팅 목적 개인정보 수집 및 이용'), | |
| 'sample' => 'n', | |
| 'comment' => sprintf('n:%s<br />y:%s', __('동의안함'), __('동의함')), | |
| 'desc' => sprintf('n:%s, y:%s, %s', __('동의안함'), __('동의함'), __('기본은 n(동의안함)입니다.')), | |
| ], | |
| [ | |
| 'dbName' => 'member', | |
| 'dbKey' => 'foreigner', | |
변경 전History.php
| //__('마일리지') | |
| 'deposit' => '예치금', | |
| //__('예치금') | |
| 'maillingFl' => '메일수신동의', | |
| //__('메일수신동의') | |
| 'smsFl' => 'SMS수신동의', | |
| //__('SMS수신동의') | |
| 'marriFl' => '결혼여부', | |
| //__('결혼여부') | |
| 'marriDate' => '결혼기념일', | |
| //__('개인정보 수집 및 이용 필수') | |
| 'privateApprovalOptionFl' => '개인정보 수집 및 이용 선택', | |
| //__('개인정보 수집 및 이용 선택') | |
| 'privateOfferFl' => '개인정보동의 제3자 제공', | |
| //__('개인정보동의 제3자 제공') | |
| 'privateConsignFl' => '개인정보동의 취급업무 위탁', | |
| $different = []; | |
| $this->getDifferent($different); | |
| if (gd_array_key_exists('smsFl', $different)) { | |
| $this->filters[] = 'smsFl'; | |
| } | |
| if (gd_array_key_exists('maillingFl', $different)) { | |
| $this->filters[] = 'maillingFl'; | |
| } | |
| if (gd_array_key_exists('privateApprovalOptionFl', $different)) { | |
| $this->filters[] = 'privateApprovalOptionFl'; | |
| } | |
| if (gd_array_key_exists('privateOfferFl', $different)) { | |
| $this->filters[] = 'privateOfferFl'; | |
| } | |
| if (gd_array_key_exists('privateConsignFl', $different)) { | |
| $this->filters[] = 'privateConsignFl'; | |
| } | |
| if (key_exists('companyCertification', $different)) { | |
| } | |
| $beforeValue = $displayArray[$beforeValue]; | |
| $value = $displayArray[$value]; | |
| if (gd_array_key_exists('groupModDt', $this->after) && ($this->before['groupModDt'] != $this->after['groupModDt'])) { | |
| $different['groupModDt'] = [ | |
| $this->before['groupModDt'], | |
| $this->after['groupModDt'], | |
| $beforeValue = $displayArray[$beforeValue]; | |
| $value = $displayArray[$value]; | |
| } | |
| unset($displayArray); | |
| $different[$key] = [ | |
| $beforeValue, | |
| StringUtils::strIsSet($item['otherValue'], '{}'); | |
| $otherValue = json_decode($item['otherValue'], true); | |
| StringUtils::strIsSet($otherValue['smsFl']['sms080']['regDt'], ''); | |
| if (!empty($otherValue['smsFl']['sms080']['regDt']) && $item['updateColumn'] == 'SMS수신동의') { | |
| $item['displayOtherValue'] = sprintf(' (080 수신거부 : %s)', $otherValue['smsFl']['sms080']['regDt']); | |
| } | |
| if (!empty($otherValue['reflectApplyMemberInfo']['orderNo']) && empty($otherValue['simpleJoin'])) { | |
| */ | |
| public function selectLastReceiveAgreementByMember($memberNo) | |
| { | |
| // __('SMS수신동의') | |
| // __('메일수신동의') | |
| $this->db->strField = 'mh.memNo, mh.updateColumn, mh.afterValue, MAX(mh.regDt) AS lastUpdateDt'; | |
| $this->db->strWhere = 'mh.memNo=? AND mh.updateColumn IN (\'SMS수신동의\', \'메일수신동의\')'; | |
| $this->db->strGroup = 'mh.updateColumn'; | |
| $this->db->bind_param_push($bind, 'i', $memberNo); | |
| $query = $this->db->query_complete(); | |
| */ | |
| public function getLastReceiveAgreementByMember($memberNo) | |
| { | |
| // __('SMS수신동의') | |
| // __('메일수신동의') | |
| $history = $this->selectLastReceiveAgreementByMember($memberNo); | |
| $result = []; | |
| foreach ($history as $item) { | |
| if ($item['updateColumn'] == 'SMS수신동의') { | |
| $result['lastReceiveAgreementDt']['sms'] = DateTimeUtils::dateFormat('Y-m-d H:i:s', $item['lastUpdateDt']); | |
| } elseif ($item['updateColumn'] == '메일수신동의') { | |
| $result['lastReceiveAgreementDt']['mail'] = DateTimeUtils::dateFormat('Y-m-d H:i:s', $item['lastUpdateDt']); | |
| } | |
| } | |
| return $result; | |
| $resultArray =[]; | |
| $this->db->strField = 'mh.memNo, mh.updateColumn, MAX(mh.regDt) AS lastUpdateDt'; | |
| $this->db->strWhere = 'mh.memNo in ('.gd_implode(',', $memberNos).') AND mh.updateColumn IN (\'SMS수신동의\', \'메일수신동의\')'; | |
| $this->db->strGroup = 'mh.memNo, mh.updateColumn'; | |
| $query = $this->db->query_complete(); | |
| $strSQL = 'SELECT ' . array_shift($query) . ' FROM ' . DB_MEMBER_HISTORY . ' AS mh' . gd_implode(' ', $query); | |
| if (is_array($memberNos)) { | |
| $history = $this->selectLastReceiveAgreementByMembers($memberNos); | |
| foreach ($history as $item) { | |
| if ($item['updateColumn'] == 'SMS수신동의') { | |
| $result[$item['memNo']]['lastReceiveAgreementDt']['sms'] = DateTimeUtils::dateFormat('Y-m-d H:i:s', $item['lastUpdateDt']); | |
| } elseif ($item['updateColumn'] == '메일수신동의') { | |
| $result[$item['memNo']]['lastReceiveAgreementDt']['mail'] = DateTimeUtils::dateFormat('Y-m-d H:i:s', $item['lastUpdateDt']); | |
| } | |
| } | |
| } | |
변경 후History.php
| //__('마일리지') | |
| 'deposit' => '예치금', | |
| //__('예치금') | |
| 'maillingFl' => '이메일 수신 동의', | |
| //__('이메일 수신 동의') | |
| 'smsFl' => '모바일 메시지 수신 동의', | |
| //__('모바일 메시지 수신 동의') | |
| 'marriFl' => '결혼여부', | |
| //__('결혼여부') | |
| 'marriDate' => '결혼기념일', | |
| //__('개인정보 수집 및 이용 필수') | |
| 'privateApprovalOptionFl' => '개인정보 수집 및 이용 선택', | |
| //__('개인정보 수집 및 이용 선택') | |
| 'privateMarketingConsentOptionFl' => '마케팅 목적 개인정보 수집 및 이용 동의', | |
| //__('마케팅 목적 개인정보 수집 및 이용 동의') | |
| 'privateOfferFl' => '개인정보동의 제3자 제공', | |
| //__('개인정보동의 제3자 제공') | |
| 'privateConsignFl' => '개인정보동의 취급업무 위탁', | |
| $different = []; | |
| $this->getDifferent($different); | |
| if (array_key_exists('smsFl', $different)) { | |
| $this->filters[] = 'smsFl'; | |
| } | |
| if (array_key_exists('maillingFl', $different)) { | |
| $this->filters[] = 'maillingFl'; | |
| } | |
| if (array_key_exists('privateApprovalFl', $different)) { | |
| $this->filters[] = 'privateApprovalFl'; | |
| } | |
| if (array_key_exists('privateApprovalOptionFl', $different)) { | |
| $this->filters[] = 'privateApprovalOptionFl'; | |
| } | |
| if (array_key_exists('privateMarketingConsentOptionFl', $different)) { | |
| $this->filters[] = 'privateMarketingConsentOptionFl'; | |
| } | |
| if (array_key_exists('privateOfferFl', $different)) { | |
| $this->filters[] = 'privateOfferFl'; | |
| } | |
| if (array_key_exists('privateConsignFl', $different)) { | |
| $this->filters[] = 'privateConsignFl'; | |
| } | |
| if (key_exists('companyCertification', $different)) { | |
| } | |
| $beforeValue = $displayArray[$beforeValue]; | |
| $value = $displayArray[$value]; | |
| if (array_key_exists('groupModDt', $this->after) && ($this->before['groupModDt'] != $this->after['groupModDt'])) { | |
| $different['groupModDt'] = [ | |
| $this->before['groupModDt'], | |
| $this->after['groupModDt'], | |
| $beforeValue = $displayArray[$beforeValue]; | |
| $value = $displayArray[$value]; | |
| } | |
| // 마케팅 목적 개인정보 수집 및 이용 동의: 미응답(빈값)은 미동의(n)로 표시 (비교는 원본이라 최초 응답도 이력에 남음) | |
| if ('privateMarketingConsentOptionFl' == $key && '' === $beforeValue) { | |
| $beforeValue = 'n'; | |
| } | |
| unset($displayArray); | |
| $different[$key] = [ | |
| $beforeValue, | |
| StringUtils::strIsSet($item['otherValue'], '{}'); | |
| $otherValue = json_decode($item['otherValue'], true); | |
| StringUtils::strIsSet($otherValue['smsFl']['sms080']['regDt'], ''); | |
| // 'SMS수신동의' 는 구 라벨 - 마이그레이션 미완 데이터 대비 | |
| if (!empty($otherValue['smsFl']['sms080']['regDt']) && in_array($item['updateColumn'], ['모바일 메시지 수신 동의', 'SMS수신동의'], true)) { | |
| $item['displayOtherValue'] = sprintf(' (080 수신거부 : %s)', $otherValue['smsFl']['sms080']['regDt']); | |
| } | |
| if (!empty($otherValue['reflectApplyMemberInfo']['orderNo']) && empty($otherValue['simpleJoin'])) { | |
| */ | |
| public function selectLastReceiveAgreementByMember($memberNo) | |
| { | |
| // __('모바일 메시지 수신 동의') | |
| // __('이메일 수신 동의') | |
| // __('마케팅 목적 개인정보 수집 및 이용 동의') | |
| $this->db->strField = 'mh.memNo, mh.updateColumn, mh.afterValue, MAX(mh.regDt) AS lastUpdateDt'; | |
| // 'SMS수신동의'/'메일수신동의' 는 구 라벨 - 마이그레이션 미완 데이터 대비 | |
| $this->db->strWhere = 'mh.memNo=? AND mh.updateColumn IN (\'모바일 메시지 수신 동의\', \'SMS수신동의\', \'이메일 수신 동의\', \'메일수신동의\', \'마케팅 목적 개인정보 수집 및 이용 동의\')'; | |
| $this->db->strGroup = 'mh.updateColumn'; | |
| $this->db->bind_param_push($bind, 'i', $memberNo); | |
| $query = $this->db->query_complete(); | |
| */ | |
| public function getLastReceiveAgreementByMember($memberNo) | |
| { | |
| // __('모바일 메시지 수신 동의') | |
| // __('이메일 수신 동의') | |
| $history = $this->selectLastReceiveAgreementByMember($memberNo); | |
| $result = []; | |
| foreach ($history as $item) { | |
| $dt = DateTimeUtils::dateFormat('Y-m-d H:i:s', $item['lastUpdateDt']); | |
| // 'SMS수신동의'/'메일수신동의' 는 구 라벨 - 마이그레이션 미완 데이터 대비 | |
| if (in_array($item['updateColumn'], ['모바일 메시지 수신 동의', 'SMS수신동의'], true)) { | |
| $key = 'sms'; | |
| } elseif (in_array($item['updateColumn'], ['이메일 수신 동의', '메일수신동의'], true)) { | |
| $key = 'mail'; | |
| } elseif ($item['updateColumn'] == '마케팅 목적 개인정보 수집 및 이용 동의') { | |
| $key = 'privateMkt'; | |
| } else { | |
| continue; | |
| } | |
| // 옛/새 라벨이 각각 그룹으로 나뉘어 올 수 있어 더 늦은 일자만 유지 | |
| if (empty($result['lastReceiveAgreementDt'][$key]) || $result['lastReceiveAgreementDt'][$key] < $dt) { | |
| $result['lastReceiveAgreementDt'][$key] = $dt; | |
| } | |
| } | |
| return $result; | |
| } | |
| /** | |
| * 회원의 개인정보 동의 항목별 마지막 변경 일시 조회 (updateColumn 한글 라벨 그룹, MAX regDt) | |
| * | |
| * @param $memberNo | |
| * | |
| * @return array | |
| */ | |
| public function selectLastPrivateAgreementByMember($memberNo): array | |
| { | |
| // __('개인정보 수집 및 이용 필수') | |
| // __('개인정보 수집 및 이용 선택') | |
| // __('개인정보동의 제3자 제공') | |
| // __('개인정보동의 취급업무 위탁') | |
| // __('마케팅 목적 개인정보 수집 및 이용 동의') | |
| $this->db->strField = 'mh.updateColumn, MAX(mh.regDt) AS lastUpdateDt'; | |
| $this->db->strWhere = 'mh.memNo=? AND mh.updateColumn IN (\'개인정보 수집 및 이용 필수\', \'개인정보 수집 및 이용 선택\', \'개인정보동의 제3자 제공\', \'개인정보동의 취급업무 위탁\', \'마케팅 목적 개인정보 수집 및 이용 동의\')'; | |
| $this->db->strGroup = 'mh.updateColumn'; | |
| $this->db->bind_param_push($bind, 'i', $memberNo); | |
| $query = $this->db->query_complete(); | |
| $strSQL = 'SELECT ' . array_shift($query) . ' FROM ' . DB_MEMBER_HISTORY . ' AS mh' . implode(' ', $query); | |
| $result = $this->db->query_fetch($strSQL, $bind); | |
| return $result; | |
| } | |
| /** | |
| * 회원의 개인정보 동의 항목별 마지막 변경 일시 (컬럼명 => 'Y-m-d H:i:s') | |
| * 이력이 없는 항목은 키 자체가 없으므로 호출부에서 entryDt 등으로 폴백한다. | |
| * | |
| * @param int $memberNo | |
| * | |
| * @return array privateApprovalFl / privateApprovalOptionFl / privateOfferFl / privateConsignFl / privateMarketingConsentOptionFl 중 이력 있는 항목만 | |
| */ | |
| public function getLastPrivateAgreementDateByMember(int $memberNo): array | |
| { | |
| $labelToColumn = [ | |
| '개인정보 수집 및 이용 필수' => 'privateApprovalFl', | |
| '개인정보 수집 및 이용 선택' => 'privateApprovalOptionFl', | |
| '개인정보동의 제3자 제공' => 'privateOfferFl', | |
| '개인정보동의 취급업무 위탁' => 'privateConsignFl', | |
| '마케팅 목적 개인정보 수집 및 이용 동의' => 'privateMarketingConsentOptionFl', | |
| ]; | |
| $history = $this->selectLastPrivateAgreementByMember($memberNo); | |
| $result = []; | |
| foreach ($history as $item) { | |
| $column = $labelToColumn[$item['updateColumn']] ?? null; | |
| if ($column === null) { | |
| continue; | |
| } | |
| $result[$column] = DateTimeUtils::dateFormat('Y-m-d H:i:s', $item['lastUpdateDt']); | |
| } | |
| return $result; | |
| $resultArray =[]; | |
| $this->db->strField = 'mh.memNo, mh.updateColumn, MAX(mh.regDt) AS lastUpdateDt'; | |
| // 'SMS수신동의'/'메일수신동의' 는 구 라벨 - 마이그레이션 미완 데이터 대비 | |
| $this->db->strWhere = 'mh.memNo in ('.gd_implode(',', $memberNos).') AND mh.updateColumn IN (\'모바일 메시지 수신 동의\', \'SMS수신동의\', \'이메일 수신 동의\', \'메일수신동의\')'; | |
| $this->db->strGroup = 'mh.memNo, mh.updateColumn'; | |
| $query = $this->db->query_complete(); | |
| $strSQL = 'SELECT ' . array_shift($query) . ' FROM ' . DB_MEMBER_HISTORY . ' AS mh' . gd_implode(' ', $query); | |
| if (is_array($memberNos)) { | |
| $history = $this->selectLastReceiveAgreementByMembers($memberNos); | |
| foreach ($history as $item) { | |
| $dt = DateTimeUtils::dateFormat('Y-m-d H:i:s', $item['lastUpdateDt']); | |
| // 'SMS수신동의'/'메일수신동의' 는 구 라벨 - 마이그레이션 미완 데이터 대비 | |
| if (in_array($item['updateColumn'], ['모바일 메시지 수신 동의', 'SMS수신동의'], true)) { | |
| $key = 'sms'; | |
| } elseif (in_array($item['updateColumn'], ['이메일 수신 동의', '메일수신동의'], true)) { | |
| $key = 'mail'; | |
| } else { | |
| continue; | |
| } | |
| // 옛/새 라벨이 각각 그룹으로 나뉘어 올 수 있어 더 늦은 일자만 유지 | |
| if (empty($result[$item['memNo']]['lastReceiveAgreementDt'][$key]) || $result[$item['memNo']]['lastReceiveAgreementDt'][$key] < $dt) { | |
| $result[$item['memNo']]['lastReceiveAgreementDt'][$key] = $dt; | |
| } | |
| } | |
| } | |
변경 전MemberAdmin.php
| } | |
| $this->db->strJoin = ' LEFT JOIN ' . DB_MEMBER_SNS . ' AS ms ON m.memNo = ms.memNo'; | |
| $this->db->strJoin .= ' LEFT JOIN ' . DB_MEMBER_GROUP . ' AS mg ON m.groupSno = mg.sno'; | |
| $this->db->strJoin .= ' LEFT JOIN ' . DB_MEMBER_HISTORY . ' AS mh ON (m.memNo=mh.memNo AND mh.updateColumn=\'SMS수신동의\')'; | |
| $this->db->strJoin .= ' LEFT JOIN ' . DB_MEMBER_HISTORY . ' AS mh2 ON (m.memNo=mh2.memNo AND mh2.updateColumn=\'메일수신동의\')'; | |
| $this->db->strGroup = 'm.memNo'; | |
| $arrQuery = $this->db->query_complete(true, true); | |
| $strSQL = 'SELECT ' . array_shift($arrQuery) . ' FROM ' . DB_MEMBER . ' AS m ' . gd_implode(' ', $arrQuery); | |
| } | |
| } | |
| $arrData = $this->validateMemberByAdminModification($arrData); | |
| foreach ($preservedFileKeys as $fileKey => $fileVal) { | |
| \App::getInstance('session')->set(SESSION_GLOBAL_MALL, ['isAdminModify' => true]); | |
| } | |
| \Component\Member\MemberValidation::addValidateMember($v, $require); | |
| $v->add('memNo', 'number', true); | |
| if (!$this->isExcelUpload) { | |
| if (gd_isset($params['memPw'], '') !== '') { | |
변경 후MemberAdmin.php
| } | |
| $this->db->strJoin = ' LEFT JOIN ' . DB_MEMBER_SNS . ' AS ms ON m.memNo = ms.memNo'; | |
| $this->db->strJoin .= ' LEFT JOIN ' . DB_MEMBER_GROUP . ' AS mg ON m.groupSno = mg.sno'; | |
| $this->db->strJoin .= ' LEFT JOIN ' . DB_MEMBER_HISTORY . ' AS mh ON (m.memNo=mh.memNo AND mh.updateColumn=\'모바일 메시지 수신 동의\')'; | |
| $this->db->strJoin .= ' LEFT JOIN ' . DB_MEMBER_HISTORY . ' AS mh2 ON (m.memNo=mh2.memNo AND mh2.updateColumn=\'이메일 수신 동의\')'; | |
| $this->db->strGroup = 'm.memNo'; | |
| $arrQuery = $this->db->query_complete(true, true); | |
| $strSQL = 'SELECT ' . array_shift($arrQuery) . ' FROM ' . DB_MEMBER . ' AS m ' . gd_implode(' ', $arrQuery); | |
| } | |
| } | |
| // 마케팅 목적 개인정보 수집 및 이용 동의는 약관 사용 시에만 포함 | |
| $privateMarketingMemberData = (new \Component\Agreement\BuyerInform())->getInformDataArray(\Component\Agreement\BuyerInformCode::PRIVATE_MARKETING_MEMBER); | |
| if (($privateMarketingMemberData[0]['modeFl'] ?? 'n') === 'y') { | |
| StringUtils::strIsSet($arrData['privateMarketingConsentOptionFl'], 'n'); | |
| } | |
| $arrData = $this->validateMemberByAdminModification($arrData); | |
| foreach ($preservedFileKeys as $fileKey => $fileVal) { | |
| \App::getInstance('session')->set(SESSION_GLOBAL_MALL, ['isAdminModify' => true]); | |
| } | |
| \Component\Member\MemberValidation::addValidateMember($v, $require); | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 (validator 미등록 시 act garbageDelete 로 제거되어 미저장) | |
| $v->add('privateMarketingConsentOptionFl', 'yn', false, '{' . __('마케팅 목적 개인정보 수집 및 이용 동의') . '}'); | |
| $v->add('memNo', 'number', true); | |
| if (!$this->isExcelUpload) { | |
| if (gd_isset($params['memPw'], '') !== '') { | |
변경 전MemberDAO.php
| $this->db->strField = 'm.memNo, m.memId, m.memNm, m.groupSno, m.mileage, m.deposit, m.smsFl, m.maillingFl, m.cellPhone, m.email'; | |
| $this->db->strField .= ', ' . $strFieldBySmsAgreementDt . ', ' . $strFieldByMailAgreementDt; | |
| $this->db->strJoin = ' LEFT JOIN (SELECT memNo, COUNT(*) AS cnt, MAX(regDt) AS maxRegDt FROM ' . DB_MEMBER_HISTORY . ' WHERE updateColumn=\'SMS수신동의\' GROUP BY memNo) AS mh_sms ON m.memNo = mh_sms.memNo'; | |
| $this->db->strJoin .= ' LEFT JOIN (SELECT memNo, COUNT(*) AS cnt, MAX(regDt) AS maxRegDt FROM ' . DB_MEMBER_HISTORY . ' WHERE updateColumn=\'메일수신동의\' GROUP BY memNo) AS mh_mail ON m.memNo = mh_mail.memNo'; | |
| $this->db->strJoin .= ' LEFT JOIN (SELECT DISTINCT memNo FROM ' . DB_MEMBER_NOTIFICATION_LOG . ' WHERE ReasonCode=\'' . MailMimeAuto::AGREEMENT2YPERIOD . '\' AND regDt >= \'' . $standardDt . ' 00:00:00\' AND regDt <= \'' . $nowDt . ' 23:59:59\') AS mnl ON m.memNo = mnl.memNo'; | |
| $this->db->strWhere = ''; | |
| $this->db->bindParameter('sexFl', $params, $arrBind, $arrWhere, 'tableMember', 'm'); | |
| $this->db->bindParameter('maillingFl', $params, $arrBind, $arrWhere, 'tableMember', 'm'); | |
| $this->db->bindParameter('smsFl', $params, $arrBind, $arrWhere, 'tableMember', 'm'); | |
| $this->db->bindParameter('calendarFl', $params, $arrBind, $arrWhere, 'tableMember', 'm'); | |
| $this->db->bindParameter('marriFl', $params, $arrBind, $arrWhere, 'tableMember', 'm'); | |
| $this->db->bindParameter('connectSns', $params, $arrBind, $arrWhere, 'tableMemberSns', 'ms', 'snsTypeFl'); | |
변경 후MemberDAO.php
| $this->db->strField = 'm.memNo, m.memId, m.memNm, m.groupSno, m.mileage, m.deposit, m.smsFl, m.maillingFl, m.cellPhone, m.email'; | |
| $this->db->strField .= ', ' . $strFieldBySmsAgreementDt . ', ' . $strFieldByMailAgreementDt; | |
| // 'SMS수신동의' 는 구 라벨 - 마이그레이션 미완 데이터 대비 | |
| $this->db->strJoin = ' LEFT JOIN (SELECT memNo, COUNT(*) AS cnt, MAX(regDt) AS maxRegDt FROM ' . DB_MEMBER_HISTORY . ' WHERE updateColumn IN (\'모바일 메시지 수신 동의\', \'SMS수신동의\') GROUP BY memNo) AS mh_sms ON m.memNo = mh_sms.memNo'; | |
| // '메일수신동의' 는 구 라벨 - 마이그레이션 미완 데이터 대비 | |
| $this->db->strJoin .= ' LEFT JOIN (SELECT memNo, COUNT(*) AS cnt, MAX(regDt) AS maxRegDt FROM ' . DB_MEMBER_HISTORY . ' WHERE updateColumn IN (\'이메일 수신 동의\', \'메일수신동의\') GROUP BY memNo) AS mh_mail ON m.memNo = mh_mail.memNo'; | |
| $this->db->strJoin .= ' LEFT JOIN (SELECT DISTINCT memNo FROM ' . DB_MEMBER_NOTIFICATION_LOG . ' WHERE ReasonCode=\'' . MailMimeAuto::AGREEMENT2YPERIOD . '\' AND regDt >= \'' . $standardDt . ' 00:00:00\' AND regDt <= \'' . $nowDt . ' 23:59:59\') AS mnl ON m.memNo = mnl.memNo'; | |
| $this->db->strWhere = ''; | |
| $this->db->bindParameter('sexFl', $params, $arrBind, $arrWhere, 'tableMember', 'm'); | |
| $this->db->bindParameter('maillingFl', $params, $arrBind, $arrWhere, 'tableMember', 'm'); | |
| $this->db->bindParameter('smsFl', $params, $arrBind, $arrWhere, 'tableMember', 'm'); | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 검색값 화이트리스트 정규화 | |
| if (!in_array($params['privateMarketingConsentOptionFl'] ?? '', ['', 'y', 'n'], true)) { | |
| $params['privateMarketingConsentOptionFl'] = ''; | |
| } | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 (미동의는 동의여부 저장 안 한 디폴트('') 포함이라 != 'y') | |
| if (!empty($params['privateMarketingConsentOptionFl'])) { | |
| $arrWhere[] = $params['privateMarketingConsentOptionFl'] === 'y' | |
| ? "m.privateMarketingConsentOptionFl = 'y'" | |
| : "m.privateMarketingConsentOptionFl != 'y'"; | |
| } | |
| $this->db->bindParameter('calendarFl', $params, $arrBind, $arrWhere, 'tableMember', 'm'); | |
| $this->db->bindParameter('marriFl', $params, $arrBind, $arrWhere, 'tableMember', 'm'); | |
| $this->db->bindParameter('connectSns', $params, $arrBind, $arrWhere, 'tableMemberSns', 'ms', 'snsTypeFl'); | |
변경 전Member.php
| } | |
| } | |
| /** | |
| * 로그인 비밀번호를 재검증 하는 함수 | |
| * | |
| $v->add('privateApprovalOptionFl', '', false, '{' . __('개인정보 수집.이용 동의 선택사항') . '}'); // 개인정보동의 이용자 동의사항 | |
| $v->add('privateOfferFl', '', false, '{' . __('개인정보동의 제3자 제공') . '}'); // 개인정보동의 제3자 제공 | |
| $v->add('privateConsignFl', '', false, '{' . __('개인정보동의 취급업무 위탁') . '}'); // 개인정보동의 취급업무 위탁 | |
| $v->add('foreigner', '', false, '{' . __('내외국인구분') . '}'); // 내외국인구분 | |
| $v->add('dupeinfo', '', false, '{' . __('본인확인 중복가입확인정보') . '}'); // 본인확인 중복가입확인정보 | |
| $v->add('pakey', '', false, '{' . __('본인확인 번호') . '}'); // 본인확인 번호 | |
| $vo->setPrivateApprovalOptionFl(json_encode($joinSession->get('privateApprovalOptionFl'), JSON_UNESCAPED_SLASHES)); | |
| $vo->setPrivateOfferFl(json_encode($joinSession->get('privateOfferFl'), JSON_UNESCAPED_SLASHES)); | |
| $vo->setPrivateConsignFl(json_encode($joinSession->get('privateConsignFl'), JSON_UNESCAPED_SLASHES)); | |
| $vo->setForeigner($joinSession->get('foreigner')); | |
| $vo->setDupeinfo($joinSession->get('dupeinfo')); | |
| $vo->setPakey($joinSession->get('pakey')); | |
| 'sexFl', | |
| 'marriFl', | |
| 'expirationFl', | |
| ], $memberData | |
| ); | |
변경 후Member.php
| } | |
| } | |
| /** | |
| * 마케팅 목적 개인정보 수집 및 이용 동의 안내(alert) 노출 여부 판정 + 노출 이력 기록 | |
| * 조건 통과 시 노출 이력(privateMarketingConsentNoticePopupDt)에 노출시각을 기록해 계정당 1회만 노출 | |
| * | |
| * @return bool 안내 노출 대상이면 true (동시에 노출 이력 기록) | |
| * @throws Exception | |
| */ | |
| public function markPrivateMarketingConsentNoticeShown(): bool | |
| { | |
| if (!MemberUtil::isLogin()) { | |
| return false; | |
| } | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 약관(001015) 사용중(modeFl='y') + 안내 팝업 노출 사용(noticePopupFl='y') | |
| /** @var \Bundle\Component\Agreement\BuyerInform $buyerInform */ | |
| $buyerInform = \App::load('\\Component\\Agreement\\BuyerInform'); | |
| $inform = $buyerInform->getInformDataArray(\Component\Agreement\BuyerInformCode::PRIVATE_MARKETING_MEMBER, 'modeFl, noticePopupFl'); | |
| if (($inform[0]['modeFl'] ?? 'n') !== 'y' || ($inform[0]['noticePopupFl'] ?? 'n') !== 'y') { | |
| return false; | |
| } | |
| $member = MemberUtil::getMemberBySession('memNo, privateMarketingConsentOptionFl, privateMarketingConsentNoticePopupDt'); | |
| $noticeDt = $member['privateMarketingConsentNoticePopupDt'] ?? ''; | |
| $alreadyNoticed = !empty($noticeDt) && $noticeDt !== '0000-00-00 00:00:00'; | |
| // 동의('y'), 안내 노출 이력이 있으면 미노출 | |
| if (($member['privateMarketingConsentOptionFl'] ?? '') === 'y' || $alreadyNoticed) { | |
| return false; | |
| } | |
| // 노출 이력 기록 (계정당 평생 1회 — 노출했다는 사실만 저장, 동의/거부와 무관) | |
| try { | |
| $this->update($member['memNo'], 'memNo', ['privateMarketingConsentNoticePopupDt'], [DateTimeUtils::dateFormat('Y-m-d H:i:s', 'now')]); | |
| } catch (\Exception $e) { | |
| \Logger::channel('userLogin')->warning('마케팅 목적 개인정보 수집 및 이용 동의 안내 노출 이력 기록 실패', ['memNo' => $member['memNo'], 'exception' => $e]); | |
| return false; | |
| } | |
| return true; | |
| } | |
| /** | |
| * 로그인 비밀번호를 재검증 하는 함수 | |
| * | |
| $v->add('privateApprovalOptionFl', '', false, '{' . __('개인정보 수집.이용 동의 선택사항') . '}'); // 개인정보동의 이용자 동의사항 | |
| $v->add('privateOfferFl', '', false, '{' . __('개인정보동의 제3자 제공') . '}'); // 개인정보동의 제3자 제공 | |
| $v->add('privateConsignFl', '', false, '{' . __('개인정보동의 취급업무 위탁') . '}'); // 개인정보동의 취급업무 위탁 | |
| $v->add('privateMarketingConsentOptionFl', 'yn', false, '{' . __('마케팅 목적 개인정보 수집 및 이용 동의') . '}'); // 마케팅 목적 개인정보 수집 및 이용 동의 | |
| $v->add('maillingFl', 'yn', false, '{' . __('이메일 수신 동의') . '}'); // 광고성 수신 동의 - 이메일 | |
| $v->add('smsFl', 'yn', false, '{' . __('모바일 메시지 수신 동의') . '}'); // 광고성 수신 동의 - 모바일 | |
| $v->add('foreigner', '', false, '{' . __('내외국인구분') . '}'); // 내외국인구분 | |
| $v->add('dupeinfo', '', false, '{' . __('본인확인 중복가입확인정보') . '}'); // 본인확인 중복가입확인정보 | |
| $v->add('pakey', '', false, '{' . __('본인확인 번호') . '}'); // 본인확인 번호 | |
| $vo->setPrivateApprovalOptionFl(json_encode($joinSession->get('privateApprovalOptionFl'), JSON_UNESCAPED_SLASHES)); | |
| $vo->setPrivateOfferFl(json_encode($joinSession->get('privateOfferFl'), JSON_UNESCAPED_SLASHES)); | |
| $vo->setPrivateConsignFl(json_encode($joinSession->get('privateConsignFl'), JSON_UNESCAPED_SLASHES)); | |
| // 마수동 약관 사용중(modeFl='y')일 때만 동의('y')/미동의('n') 확정. 미사용 시 ''(미응답) = 로그인 안내 팝업 대상. | |
| $privateMarketingConsentOptionFl = $joinSession->get('privateMarketingConsentOptionFl'); | |
| $buyerInform = \App::load('\\Component\\Agreement\\BuyerInform'); | |
| $privateMarketingMember = $buyerInform->getInformDataArray(\Component\Agreement\BuyerInformCode::PRIVATE_MARKETING_MEMBER, 'modeFl'); | |
| if (($privateMarketingMember[0]['modeFl'] ?? 'n') === 'y') { | |
| $privateMarketingConsentOptionFl = ($privateMarketingConsentOptionFl === 'y') ? 'y' : 'n'; | |
| // 약관 사용 중 가입 = 이미 선택함 → 로그인 안내 팝업 제외 (노출 이력에 가입 시각 기록) | |
| $vo->setPrivateMarketingConsentNoticePopupDt(date('Y-m-d H:i:s')); | |
| } else { | |
| $privateMarketingConsentOptionFl = ''; | |
| } | |
| $vo->setPrivateMarketingConsentOptionFl($privateMarketingConsentOptionFl); | |
| $vo->setMaillingFl($joinSession->get('maillingFl')); | |
| $vo->setSmsFl($joinSession->get('smsFl')); | |
| $vo->setForeigner($joinSession->get('foreigner')); | |
| $vo->setDupeinfo($joinSession->get('dupeinfo')); | |
| $vo->setPakey($joinSession->get('pakey')); | |
| 'sexFl', | |
| 'marriFl', | |
| 'expirationFl', | |
| 'privateMarketingConsentOptionFl', | |
| ], $memberData | |
| ); | |
변경 전MemberVO.php
| protected $ex1, $ex2, $ex3, $ex4, $ex5, $ex6; | |
| protected $privateApprovalFl; | |
| protected $privateApprovalOptionFl; | |
| protected $privateOfferFl; | |
| protected $privateConsignFl; | |
| protected $foreigner; | |
| $this->privateApprovalOptionFl = $privateApprovalOptionFl; | |
| } | |
| /** | |
| * @param mixed $privateOfferFl | |
| */ | |
변경 후MemberVO.php
| protected $ex1, $ex2, $ex3, $ex4, $ex5, $ex6; | |
| protected $privateApprovalFl; | |
| protected $privateApprovalOptionFl; | |
| protected $privateMarketingConsentOptionFl; | |
| protected $privateMarketingConsentNoticePopupDt; | |
| protected $privateOfferFl; | |
| protected $privateConsignFl; | |
| protected $foreigner; | |
| $this->privateApprovalOptionFl = $privateApprovalOptionFl; | |
| } | |
| /** | |
| * @param mixed $privateMarketingConsentOptionFl 마케팅 목적 개인정보 수집 및 이용 동의 | |
| */ | |
| public function setPrivateMarketingConsentOptionFl($privateMarketingConsentOptionFl) | |
| { | |
| $this->privateMarketingConsentOptionFl = $privateMarketingConsentOptionFl; | |
| } | |
| /** | |
| * @param mixed $privateMarketingConsentNoticePopupDt 마케팅 목적 개인정보 수집 및 이용 동의 안내 팝업 노출 일시 | |
| */ | |
| public function setPrivateMarketingConsentNoticePopupDt($privateMarketingConsentNoticePopupDt) | |
| { | |
| $this->privateMarketingConsentNoticePopupDt = $privateMarketingConsentNoticePopupDt; | |
| } | |
| /** | |
| * @param mixed $maillingFl 이메일 수신 동의 | |
| */ | |
| public function setMaillingFl($maillingFl) | |
| { | |
| $this->maillingFl = $maillingFl; | |
| } | |
| /** | |
| * @param mixed $smsFl 모바일 메시지 수신 동의 | |
| */ | |
| public function setSmsFl($smsFl) | |
| { | |
| $this->smsFl = $smsFl; | |
| } | |
| /** | |
| * @param mixed $privateOfferFl | |
| */ | |
변경 전MyPage.php
| $requestParams['privateConsignFl'] = json_encode($agreementData['privateConsignFl'], JSON_UNESCAPED_SLASHES); | |
| $requestParams['privateOfferFl'] = json_encode($agreementData['privateOfferFl'], JSON_UNESCAPED_SLASHES); | |
| $passValidation = isset($memberSession['memPw']) == false && $memberSession['snsJoinFl'] == 'y'; | |
| $requestParams = $this->validateMemberByModification($requestParams, $passValidation); | |
| $addExclude = [ | |
| $v->add('privateApprovalOptionFl', '', false, '{' . __('개인정보 수집 및 이용') . '}'); | |
| $v->add('privateOfferFl', '', false, '{' . __('개인정보동의 제3자 제공') . '}'); | |
| $v->add('privateConsignFl', '', false, '{' . __('개인정보동의 취급업무 위탁') . '}'); | |
| if (StringUtils::strIsSet($requestParams['memPw'], '') !== '') { | |
| \Component\Member\MemberValidation::validateMemberPassword($requestParams['memPw']); | |
| $v->add('memPw', '', true, '{' . __('비밀번호') . '}'); | |
| } else { | |
| $requestParams['privateOfferFl'] = $arrprivateOffer; | |
| } | |
| return $requestParams; | |
| } | |
| } | |
변경 후MyPage.php
| $requestParams['privateConsignFl'] = json_encode($agreementData['privateConsignFl'], JSON_UNESCAPED_SLASHES); | |
| $requestParams['privateOfferFl'] = json_encode($agreementData['privateOfferFl'], JSON_UNESCAPED_SLASHES); | |
| // 마케팅 목적 개인정보 수집 및 이용 동의는 사용 시에만 setAgreementData 세팅 (미사용 시 미포함 → 컬럼값 갱신 안 함, 기존값 유지) | |
| if (array_key_exists('privateMarketingConsentOptionFl', $agreementData)) { | |
| $requestParams['privateMarketingConsentOptionFl'] = $agreementData['privateMarketingConsentOptionFl']; | |
| } | |
| $passValidation = isset($memberSession['memPw']) == false && $memberSession['snsJoinFl'] == 'y'; | |
| $requestParams = $this->validateMemberByModification($requestParams, $passValidation); | |
| $addExclude = [ | |
| $v->add('privateApprovalOptionFl', '', false, '{' . __('개인정보 수집 및 이용') . '}'); | |
| $v->add('privateOfferFl', '', false, '{' . __('개인정보동의 제3자 제공') . '}'); | |
| $v->add('privateConsignFl', '', false, '{' . __('개인정보동의 취급업무 위탁') . '}'); | |
| $v->add('privateMarketingConsentOptionFl', '', false, '{' . __('마케팅 목적 개인정보 수집 및 이용 동의') . '}'); | |
| if (StringUtils::strIsSet($requestParams['memPw'], '') !== '') { | |
| \Component\Member\MemberValidation::validateMemberPassword($requestParams['memPw']); | |
| $v->add('memPw', '', true, '{' . __('비밀번호') . '}'); | |
| } else { | |
| $requestParams['privateOfferFl'] = $arrprivateOffer; | |
| } | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 (사용 시에만 동의 'y' / 미동의 'n' 저장. 미사용 시 빈값 유지 - 로그인 안내 팝업 조건) | |
| $privateMarketingMemberData = $inform->getInformDataArray(BuyerInformCode::PRIVATE_MARKETING_MEMBER); | |
| if (($privateMarketingMemberData[0]['modeFl'] ?? 'n') === 'y') { | |
| $requestParams['privateMarketingConsentOptionFl'] = (($requestParams['privateMarketingConsentOptionFl'] ?? '') === 'y') ? 'y' : 'n'; | |
| } | |
| return $requestParams; | |
| } | |
| } | |
변경 전MemberUtil.php
| $tmpArray = array_map('trim', explode(',', $value['value'])); | |
| switch ($value['type']) { | |
| default : | |
| $html[] = '<input type="text" name="' . $key . '" class="form-control" value="' . $fieldValue[$key] . '"/>'; | |
| break; | |
| case 'SELECT': | |
| $html[] = gd_select_box($key, $key, gd_array_change_key_value($tmpArray), null, $fieldValue[$key], '=선택='); | |
| return gd_implode('', $html); | |
| } | |
| /** | |
| * 로그인 되었는 지를 체크 (회원/비회원) | |
| * | |
| $data['agreementInfoFl'] = gd_isset($arrData['agreementInfoFl'], 'n'); | |
| $data['privateApprovalFl'] = gd_isset($arrData['privateApprovalFl'], 'n'); | |
| $data['under14ConsentFl'] = gd_isset($arrData['under14ConsentFl'], 'n'); | |
| //이용약관 체크값 설정 | |
| $myPage = \App::load('\\Component\\Member\\MyPage'); | |
| $data['privateApprovalOptionFl'] = gd_isset($agreementData['privateApprovalOptionFl']); | |
| $data['privateOfferFl'] = gd_isset($agreementData['privateOfferFl']); | |
| $data['privateConsignFl'] = gd_isset($agreementData['privateConsignFl']); | |
| // 인증설정체크해서 데이터 추가 useDataJoinFl | |
| $dreamInfo = gd_policy('member.auth_cellphone'); | |
| $params['sexFl'] = $params['sexFl'] ?? ''; | |
| $params['maillingFl'] = $params['maillingFl'] ?? ''; | |
| $params['smsFl'] = $params['smsFl'] ?? ''; | |
| $params['calendarFl'] = $params['calendarFl'] ?? ''; | |
| $params['expirationFl'] = $params['expirationFl'] ?? ''; | |
| $checked['sexFl'][$params['sexFl']] = | |
| $checked['maillingFl'][$params['maillingFl']] = | |
| $checked['smsFl'][$params['smsFl']] = | |
| $checked['calendarFl'][$params['calendarFl']] = | |
| $checked['expirationFl'][$params['expirationFl']] = 'checked="checked"'; | |
변경 후MemberUtil.php
| $tmpArray = array_map('trim', explode(',', $value['value'])); | |
| switch ($value['type']) { | |
| default : | |
| $html[] = '<input type="text" name="' . $key . '" class="form-control" value="' . gd_htmlspecialchars($fieldValue[$key]) . '"/>'; | |
| break; | |
| case 'SELECT': | |
| $html[] = gd_select_box($key, $key, gd_array_change_key_value($tmpArray), null, $fieldValue[$key], '=선택='); | |
| return gd_implode('', $html); | |
| } | |
| /** | |
| * 약관 동의 표시 항목 생성 (informNm + 동의함/동의안함 라벨) | |
| * | |
| * 개인정보 수집·이용/취급위탁/제3자 제공/마케팅 동의 등 약관 표시 블록을 정형화한다. | |
| * | |
| * @param array $informList 약관 목록 (각 항목에 sno, informNm 포함. modeFl 이 'y' 아니면 '사용안함' 표기) | |
| * @param array $consentBySno 동의 상태 맵 (sno => 'y'/'n') | |
| * @param bool $denyWhenMissing 미응답(y/n 아님)을 '동의안함'으로 표시할지 여부. false면 해당 항목 스킵 | |
| * @return array [['informNm' => string, 'label' => string, 'unused'? => bool], ...] (unused=true 면 미사용 약관 → 항목명 없이 '사용안함'만 표기) | |
| */ | |
| public static function makeConsentItems(array $informList, array $consentBySno, bool $denyWhenMissing = false, string $agreementDt = ''): array | |
| { | |
| $items = []; | |
| foreach ($informList as $inform) { | |
| // 개별 약관 미사용(modeFl != 'y')이면 동의 여부와 무관하게 '사용안함' 표기 | |
| if (($inform['modeFl'] ?? 'y') !== 'y') { | |
| $items[] = ['informNm' => $inform['informNm'], 'label' => '사용안함', 'unused' => true]; | |
| continue; | |
| } | |
| $flag = $consentBySno[$inform['sno']] ?? ''; | |
| if ($flag === 'y') { | |
| // 동의: 년월일시분초까지 표기 | |
| $label = '동의함' . ($agreementDt !== '' ? '(' . DateTimeUtils::dateFormat('Y-m-d H:i:s', $agreementDt) . ')' : ''); | |
| } elseif ($flag === 'n' || $denyWhenMissing) { | |
| // 미동의: 년월일까지만 표기 (일시 없거나 미응답이면 날짜 생략) | |
| $label = '동의안함' . (($agreementDt !== '' && $flag === 'n') ? '(' . DateTimeUtils::dateFormat('Y-m-d', $agreementDt) . ')' : ''); | |
| } else { | |
| continue; | |
| } | |
| $items[] = ['informNm' => $inform['informNm'], 'label' => $label]; | |
| } | |
| return $items; | |
| } | |
| /** | |
| * 회원 약관 동의 표시용 행 데이터 생성. 약관 행 설정 배열을 받아 뷰에서 그대로 출력할 표시용 배열을 반환한다 (HTML 미생성 — 마크업은 뷰가 담당). | |
| * 약관이 늘어도 호출부에서 배열 항목만 추가하면 되고 메서드 시그니처는 불변. | |
| * | |
| * @param array $agreements 약관 행 목록. 각 항목: | |
| * - title string 제목 (뷰 <th> 출력용) | |
| * - tooltipSeq string data-tooltip-seq 값(선택) | |
| * - use bool 약관 사용/표시 여부 (false면 '사용안함') | |
| * - informs array 약관 목록 (sno, informNm) — use=true 일 때만 참조 | |
| * - flags mixed 동의 상태. sno=>('y'/'n') 배열(개인정보 항목별) 또는 단일 'y'/'n' 문자열(마케팅) | |
| * - denyWhenMissing bool 미응답(y/n 아님)을 '동의안함'으로 표시할지. false면 해당 항목 스킵 | |
| * - agreementDt string 동의/미동의 일시(선택). 지정 시 동의함(초까지)/동의안함(날짜까지)에 괄호로 병기. 컬럼 공통 값 | |
| * @return array 표시용 행 목록. 각 항목: [title, tooltipSeq, lines(표시 문자열 배열)] | |
| */ | |
| public static function buildPrivateAgreementRows(array $agreements): array | |
| { | |
| $rows = []; | |
| foreach ($agreements as $agreement) { | |
| $lines = []; | |
| if (!empty($agreement['use'])) { | |
| $informs = $agreement['informs'] ?? []; | |
| $flags = $agreement['flags'] ?? []; | |
| // 단일 플래그 문자열이면 전 항목에 동일 적용하도록 sno 맵으로 변환 | |
| if (!is_array($flags)) { | |
| $singleFlag = (string) $flags; | |
| $flags = []; | |
| foreach ($informs as $inform) { | |
| $flags[$inform['sno']] = $singleFlag; | |
| } | |
| } | |
| $agreementDt = (string) ($agreement['agreementDt'] ?? ''); | |
| $unusedShown = false; | |
| foreach (self::makeConsentItems($informs, $flags, !empty($agreement['denyWhenMissing']), $agreementDt) as $item) { | |
| if (!empty($item['unused'])) { | |
| // 미사용 약관(modeFl != 'y')은 항목명/동의여부 없이 '사용안함'만, 그룹당 1회만 표기 | |
| if ($unusedShown) { | |
| continue; | |
| } | |
| $unusedShown = true; | |
| $lines[] = '사용안함'; | |
| } else { | |
| $lines[] = '- ' . $item['informNm'] . ' : ' . $item['label']; | |
| } | |
| } | |
| } else { | |
| $lines[] = '사용안함'; | |
| } | |
| $rows[] = [ | |
| 'title' => $agreement['title'] ?? '', | |
| 'tooltipSeq' => $agreement['tooltipSeq'] ?? '', | |
| 'lines' => $lines, | |
| ]; | |
| } | |
| return $rows; | |
| } | |
| /** | |
| * 광고성 수신 동의(이메일/모바일 메시지) 표시용 라인 데이터 생성. 채널 사용여부 + 수신 flag + 최종 수신동의일(es_memberHistory 파생)로 | |
| * 동의함(초까지)/동의안함(날짜까지) 라벨을 조립한다 (HTML 미생성 — 마크업은 뷰가 담당). | |
| * | |
| * @param array $advertisingReceive gd_policy('member.advertisingReceive') — email.use / mobile.use ('y'/'n') | |
| * @param array $data 회원 데이터 (maillingFl, smsFl, lastReceiveAgreementDt[mail|sms], entryDt) | |
| * @return array 표시 문자열 배열. 채널 모두 미사용이면 ['사용안함'] | |
| */ | |
| public static function buildAdvertisingReceiveLines(array $advertisingReceive, array $data): array | |
| { | |
| $mailUse = (($advertisingReceive['email']['use'] ?? 'n') === 'y'); | |
| $smsUse = (($advertisingReceive['mobile']['use'] ?? 'n') === 'y'); | |
| if (!$mailUse && !$smsUse) { | |
| return ['사용안함']; | |
| } | |
| $channels = []; | |
| if ($mailUse) { | |
| $channels[] = ['label' => '이메일', 'flag' => $data['maillingFl'] ?? 'n', 'dt' => $data['lastReceiveAgreementDt']['mail'] ?? ($data['entryDt'] ?? '')]; | |
| } | |
| if ($smsUse) { | |
| $channels[] = ['label' => '모바일 메시지', 'flag' => $data['smsFl'] ?? 'n', 'dt' => $data['lastReceiveAgreementDt']['sms'] ?? ($data['entryDt'] ?? '')]; | |
| } | |
| $lines = []; | |
| foreach ($channels as $channel) { | |
| // 동의: 년월일시분초까지 / 미동의: 년월일까지 (일시 없으면 괄호 생략) | |
| if ($channel['flag'] === 'y') { | |
| $label = '동의함' . ($channel['dt'] !== '' ? '(' . DateTimeUtils::dateFormat('Y-m-d H:i:s', $channel['dt']) . ')' : ''); | |
| } else { | |
| $label = '동의안함' . ($channel['dt'] !== '' ? '(' . DateTimeUtils::dateFormat('Y-m-d', $channel['dt']) . ')' : ''); | |
| } | |
| $lines[] = '- ' . $channel['label'] . ' : ' . $label; | |
| } | |
| return $lines; | |
| } | |
| /** | |
| * 로그인 되었는 지를 체크 (회원/비회원) | |
| * | |
| $data['agreementInfoFl'] = gd_isset($arrData['agreementInfoFl'], 'n'); | |
| $data['privateApprovalFl'] = gd_isset($arrData['privateApprovalFl'], 'n'); | |
| $data['under14ConsentFl'] = gd_isset($arrData['under14ConsentFl'], 'n'); | |
| // 광고성 수신 동의 (이메일 수신 동의 / 모바일 메시지 수신 동의) | |
| $data['maillingFl'] = gd_isset($arrData['maillingFl'], 'n'); | |
| $data['smsFl'] = gd_isset($arrData['smsFl'], 'n'); | |
| //이용약관 체크값 설정 | |
| $myPage = \App::load('\\Component\\Member\\MyPage'); | |
| $data['privateApprovalOptionFl'] = gd_isset($agreementData['privateApprovalOptionFl']); | |
| $data['privateOfferFl'] = gd_isset($agreementData['privateOfferFl']); | |
| $data['privateConsignFl'] = gd_isset($agreementData['privateConsignFl']); | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 | |
| $data['privateMarketingConsentOptionFl'] = gd_isset($agreementData['privateMarketingConsentOptionFl']); | |
| // 인증설정체크해서 데이터 추가 useDataJoinFl | |
| $dreamInfo = gd_policy('member.auth_cellphone'); | |
| $params['sexFl'] = $params['sexFl'] ?? ''; | |
| $params['maillingFl'] = $params['maillingFl'] ?? ''; | |
| $params['smsFl'] = $params['smsFl'] ?? ''; | |
| $params['privateMarketingConsentOptionFl'] = $params['privateMarketingConsentOptionFl'] ?? ''; | |
| $params['calendarFl'] = $params['calendarFl'] ?? ''; | |
| $params['expirationFl'] = $params['expirationFl'] ?? ''; | |
| $checked['sexFl'][$params['sexFl']] = | |
| $checked['maillingFl'][$params['maillingFl']] = | |
| $checked['smsFl'][$params['smsFl']] = | |
| $checked['privateMarketingConsentOptionFl'][$params['privateMarketingConsentOptionFl']] = | |
| $checked['calendarFl'][$params['calendarFl']] = | |
| $checked['expirationFl'][$params['expirationFl']] = 'checked="checked"'; | |
변경 전MemberModifyController.php
| $memberData = []; | |
| $memberService->getMemberDataWithChecked($memNo, $memberData, $checked); | |
| $memberData = gd_array_merge($memberData, $memberService->getLastAgreementNotificationByMember($memNo)); | |
| $privateApprovalOption = $buyerInformService->getInformDataArray(\Component\Agreement\BuyerInformCode::PRIVATE_APPROVAL_OPTION, 'sno,informNm,content', true, $memberData['mallSno']); | |
| $privateOffer = $buyerInformService->getInformDataArray(\Component\Agreement\BuyerInformCode::PRIVATE_OFFER, 'sno,informNm,content', true, $memberData['mallSno']); | |
| $privateConsign = $buyerInformService->getInformDataArray(\Component\Agreement\BuyerInformCode::PRIVATE_CONSIGN, 'sno,informNm,content', true, $memberData['mallSno']); | |
| $memberData = gd_array_merge($memberData, $historyService->getLastReceiveAgreementByMember($memNo)); | |
| $memberHistory = $historyService->getMemberHistory($memNo, $request->get()->get('page', 1), $request->get()->get('pageNum', 10)); | |
| $memberData['recommendCnt'] = $memberService->getRecommendCount($memberData['memId']); | |
| if ($memberData['rncheck'] == 'realname') { | |
| $this->setData('privateApprovalOption', $privateApprovalOption); | |
| $this->setData('privateOffer', $privateOffer); | |
| $this->setData('privateConsign', $privateConsign); | |
| $this->setData('groupCouponConditionManual', gd_policy('member.group')['couponConditionManual']); | |
| $this->setData('hidePasswordBlock', $hidePasswordBlock); | |
| $this->setData('certification', $certification); | |
변경 후MemberModifyController.php
| $memberData = []; | |
| $memberService->getMemberDataWithChecked($memNo, $memberData, $checked); | |
| $memberData = gd_array_merge($memberData, $memberService->getLastAgreementNotificationByMember($memNo)); | |
| $privateApprovalOption = $buyerInformService->getInformDataArray(\Component\Agreement\BuyerInformCode::PRIVATE_APPROVAL_OPTION, 'sno,informNm,content,modeFl', true, $memberData['mallSno']); | |
| $privateOffer = $buyerInformService->getInformDataArray(\Component\Agreement\BuyerInformCode::PRIVATE_OFFER, 'sno,informNm,content,modeFl', true, $memberData['mallSno']); | |
| $privateConsign = $buyerInformService->getInformDataArray(\Component\Agreement\BuyerInformCode::PRIVATE_CONSIGN, 'sno,informNm,content,modeFl', true, $memberData['mallSno']); | |
| $privateMarketingMember = $buyerInformService->getInformDataArray(\Component\Agreement\BuyerInformCode::PRIVATE_MARKETING_MEMBER, 'sno,informNm,content,modeFl', true, $memberData['mallSno']); | |
| $privateMarketingMemberUse = (($privateMarketingMember[0]['modeFl'] ?? 'n') === 'y'); | |
| // 개인정보 동의 항목별 마지막 변경 일시(컬럼 공통). 이력 없으면 가입일(entryDt) 폴백 | |
| $privateAgreementDt = $historyService->getLastPrivateAgreementDateByMember((int) $memNo); | |
| $memberEntryDt = $memberData['entryDt'] ?? ''; | |
| // 약관 동의 표시 행 조립 (개인정보 항목별/마케팅). 표시용 데이터 변환은 MemberUtil::buildPrivateAgreementRows | |
| $privateAgreements = [ | |
| ['title' => '개인정보 수집·이용', 'use' => is_array($memberData['privateApprovalOptionFl'] ?? null), 'informs' => $privateApprovalOption, 'flags' => $memberData['privateApprovalOptionFl'] ?? [], 'denyWhenMissing' => false, 'agreementDt' => $privateAgreementDt['privateApprovalOptionFl'] ?? $memberEntryDt], | |
| ['title' => '개인정보 취급위탁', 'use' => is_array($memberData['privateConsignFl'] ?? null), 'informs' => $privateConsign, 'flags' => $memberData['privateConsignFl'] ?? [], 'denyWhenMissing' => false, 'agreementDt' => $privateAgreementDt['privateConsignFl'] ?? $memberEntryDt], | |
| ['title' => '개인정보 제3자 제공', 'use' => is_array($memberData['privateOfferFl'] ?? null), 'informs' => $privateOffer, 'flags' => $memberData['privateOfferFl'] ?? [], 'denyWhenMissing' => false, 'agreementDt' => $privateAgreementDt['privateOfferFl'] ?? $memberEntryDt], | |
| ['title' => '마케팅 목적 개인정보 수집 및 이용 동의', 'use' => $privateMarketingMemberUse, 'informs' => $privateMarketingMember, 'flags' => $memberData['privateMarketingConsentOptionFl'] ?? '', 'denyWhenMissing' => true, 'agreementDt' => $privateAgreementDt['privateMarketingConsentOptionFl'] ?? $memberEntryDt], | |
| ]; | |
| $advertisingReceiveChannelUse = $buyerInformService->getAdvertisingReceiveChannelUse($memberData['mallSno']); | |
| $advertisingReceive = [ | |
| 'email' => ['use' => $advertisingReceiveChannelUse['mail']], | |
| 'mobile' => ['use' => $advertisingReceiveChannelUse['sms']], | |
| ]; | |
| $memberData = gd_array_merge($memberData, $historyService->getLastReceiveAgreementByMember($memNo)); | |
| // 마케팅 목적 개인정보 수집 및 이용 동의/거부일 (없으면 '-') | |
| $memberData['privateMktAgreementDt'] = $memberData['lastReceiveAgreementDt']['privateMkt'] ?? '-'; | |
| $memberHistory = $historyService->getMemberHistory($memNo, $request->get()->get('page', 1), $request->get()->get('pageNum', 10)); | |
| $memberData['recommendCnt'] = $memberService->getRecommendCount($memberData['memId']); | |
| if ($memberData['rncheck'] == 'realname') { | |
| $this->setData('privateApprovalOption', $privateApprovalOption); | |
| $this->setData('privateOffer', $privateOffer); | |
| $this->setData('privateConsign', $privateConsign); | |
| $this->setData('privateMarketingMember', $privateMarketingMember); | |
| $this->setData('privateMarketingMemberUse', $privateMarketingMemberUse); | |
| $this->setData('privateAgreementRows', \Component\Member\Util\MemberUtil::buildPrivateAgreementRows($privateAgreements)); | |
| $this->setData('advertisingReceive', $advertisingReceive); | |
| $this->setData('advertisingReceiveLines', \Component\Member\Util\MemberUtil::buildAdvertisingReceiveLines($advertisingReceive, $memberData)); | |
| $this->setData('groupCouponConditionManual', gd_policy('member.group')['couponConditionManual']); | |
| $this->setData('hidePasswordBlock', $hidePasswordBlock); | |
| $this->setData('certification', $certification); | |
변경 전MemberPsController.php
| use Framework\Debug\Exception\LayerException; | |
| use Origin\Service\Policy\Member\JoinPolicyService; | |
| use Origin\Service\Member\KakaoSync\KakaoSyncSettingService; | |
| /** | |
| * Class 회원 처리 | |
| switch ($requestAllParams['mode']) { | |
| case 'register': | |
| $memberService->register(new MemberVO($requestPostParams)); | |
| $this->json(__("회원등록을 성공하였습니다.")); | |
| break; | |
| case 'modify': | |
| $memberAdminService->modifyMemberData($requestAllParams); | |
| $this->json(__('저장이 완료되었습니다.')); | |
| break; | |
| throw new Exception(__('요청을 처리할 페이지를 찾을 수 없습니다.'), 404); | |
| break; | |
| } | |
| } catch (Exception $e) { | |
| if ($request->isAjax() === true) { | |
| switch ($e->getCode()) { | |
변경 후MemberPsController.php
| use Framework\Debug\Exception\LayerException; | |
| use Origin\Service\Policy\Member\JoinPolicyService; | |
| use Origin\Service\Member\KakaoSync\KakaoSyncSettingService; | |
| use Respect\Validation\Exceptions\NestedValidationException; | |
| use Respect\Validation\Validator; | |
| /** | |
| * Class 회원 처리 | |
| switch ($requestAllParams['mode']) { | |
| case 'register': | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 형식 검증 | |
| Validator::arrayVal() | |
| ->key('privateMarketingConsentOptionFl', Validator::in(['y', 'n']), false) | |
| ->assert($requestAllParams); | |
| $memberService->register(new MemberVO($requestPostParams)); | |
| $this->json(__("회원등록을 성공하였습니다.")); | |
| break; | |
| case 'modify': | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 형식 검증 | |
| Validator::arrayVal() | |
| ->key('privateMarketingConsentOptionFl', Validator::in(['y', 'n']), false) | |
| ->assert($requestAllParams); | |
| $memberAdminService->modifyMemberData($requestAllParams); | |
| $this->json(__('저장이 완료되었습니다.')); | |
| break; | |
| throw new Exception(__('요청을 처리할 페이지를 찾을 수 없습니다.'), 404); | |
| break; | |
| } | |
| } catch (NestedValidationException $e) { | |
| \Logger::channel('member')->warning('member.validate.fail', [ | |
| 'mode' => $requestAllParams['mode'] ?? '', | |
| 'errors' => $e->getMessages(), | |
| ]); | |
| if ($request->isAjax()) { | |
| $this->json( | |
| data: [ | |
| 'success' => false, | |
| 'message' => __('잘못된 요청입니다.'), | |
| 'data' => [] | |
| ], | |
| ); | |
| } else { | |
| throw new LayerException(__('잘못된 요청입니다.'), $e->getCode(), $e, null, 3000); | |
| } | |
| } catch (Exception $e) { | |
| if ($request->isAjax() === true) { | |
| switch ($e->getCode()) { | |
변경 전MemberRegisterController.php
| $companyCertification = \App::getInstance(\Component\Member\Company\CompanyCertification::class); | |
| $certificationMaxFileSize = $companyCertification->getCompanyCertificationFileSize(); | |
| $this->setData('mode', 'register'); | |
| $this->setData('joinField', $joinField); | |
| $this->setData('htmlExtra', MemberUtil::makeExtraField()); | |
| $this->setData('data', $member); | |
| $this->setData('checked', $vo->toChecked()); | |
| $this->setData('certificationMaxFileSize', $certificationMaxFileSize); | |
변경 후MemberRegisterController.php
| $companyCertification = \App::getInstance(\Component\Member\Company\CompanyCertification::class); | |
| $certificationMaxFileSize = $companyCertification->getCompanyCertificationFileSize(); | |
| // 신규 회원은 동의 이력이 없으므로 전부 '사용안함' | |
| $privateAgreements = [ | |
| ['title' => '개인정보 수집·이용', 'use' => false], | |
| ['title' => '개인정보 취급위탁', 'use' => false], | |
| ['title' => '개인정보 제3자 제공', 'use' => false], | |
| ['title' => '마케팅 목적 개인정보 수집 및 이용 동의', 'use' => false], | |
| ]; | |
| $buyerInformService = \App::getInstance('BuyerInform'); | |
| if (!is_object($buyerInformService)) { | |
| $buyerInformService = new \Component\Agreement\BuyerInform(); | |
| } | |
| $mallSno = (int) (\Component\Mall\Mall::getSession('sno') ?: DEFAULT_MALL_NUMBER); | |
| // 신규 회원은 동의 이력이 없으므로 광고성 수신 동의도 '사용안함' (몰 설정과 무관) | |
| $advertisingReceive = [ | |
| 'email' => ['use' => 'n'], | |
| 'mobile' => ['use' => 'n'], | |
| ]; | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 약관 사용 여부 (약관 사용 시에만 노출) | |
| $privateMarketingMember = $buyerInformService->getInformDataArray(\Component\Agreement\BuyerInformCode::PRIVATE_MARKETING_MEMBER, 'sno,informNm,content,modeFl', true, $mallSno); | |
| $privateMarketingMemberUse = (($privateMarketingMember[0]['modeFl'] ?? 'n') === 'y'); | |
| $this->setData('mode', 'register'); | |
| $this->setData('joinField', $joinField); | |
| $this->setData('htmlExtra', MemberUtil::makeExtraField()); | |
| $this->setData('privateAgreementRows', MemberUtil::buildPrivateAgreementRows($privateAgreements)); | |
| $this->setData('advertisingReceive', $advertisingReceive); | |
| $this->setData('advertisingReceiveLines', MemberUtil::buildAdvertisingReceiveLines($advertisingReceive, $member)); | |
| $this->setData('privateMarketingMemberUse', $privateMarketingMemberUse); | |
| $this->setData('data', $member); | |
| $this->setData('checked', $vo->toChecked()); | |
| $this->setData('certificationMaxFileSize', $certificationMaxFileSize); | |
변경 전BaseAgreementWithPrivateController.php
| $privateApprovalTableOption = $agreementWithPrivateUtil->getTableByPrivateApprovalOption($mallSno); | |
| $privateConsignTable = $agreementWithPrivateUtil->getTableByPrivateConsign($mallSno); | |
| $privateOfferTable = $agreementWithPrivateUtil->getTableByPrivateOffer($mallSno); | |
| $privateGuestOrder = $buyerInform->getInformData(BuyerInformCode::PRIVATE_GUEST_ORDER, $mallSno); | |
| $privateGuestBoardWrite = $buyerInform->getInformData(BuyerInformCode::PRIVATE_GUEST_BOARD_WRITE, $mallSno); | |
| $privateGuestCommentWrite = $buyerInform->getInformData(BuyerInformCode::PRIVATE_GUEST_COMMENT_WRITE, $mallSno); | |
| $this->setData('privateApprovalTableOption', $privateApprovalTableOption); | |
| $this->setData('privateConsignTable', $privateConsignTable); | |
| $this->setData('privateOfferTable', $privateOfferTable); | |
| $this->setData('privateGuestOrderContent', $privateGuestOrder['content']); | |
| $this->setData('privateGuestBoardWriteContent', $privateGuestBoardWrite['content']); | |
| $this->setData('privateGuestCommentWriteContent', $privateGuestCommentWrite['content']); | |
변경 후BaseAgreementWithPrivateController.php
| $privateApprovalTableOption = $agreementWithPrivateUtil->getTableByPrivateApprovalOption($mallSno); | |
| $privateConsignTable = $agreementWithPrivateUtil->getTableByPrivateConsign($mallSno); | |
| $privateOfferTable = $agreementWithPrivateUtil->getTableByPrivateOffer($mallSno); | |
| $privateMarketingMember = $buyerInform->getInformData(BuyerInformCode::PRIVATE_MARKETING_MEMBER, $mallSno); | |
| $advertisingReceive = $buyerInform->getInformData(BuyerInformCode::ADVERTISING_RECEIVE, $mallSno); | |
| //--- 광고성 수신 동의 채널 사용여부 (es_config member.advertisingReceive) 및 회원가입 항목(이메일/휴대폰번호) 사용여부 | |
| $advertisingReceiveChannel = gd_policy('member.advertisingReceive', $mallSno); | |
| $joinItemPolicy = \App::load('Component\\Policy\\JoinItemPolicy'); | |
| $joinItem = $joinItemPolicy->getPolicy($mallSno); | |
| $privateGuestOrder = $buyerInform->getInformData(BuyerInformCode::PRIVATE_GUEST_ORDER, $mallSno); | |
| $privateGuestBoardWrite = $buyerInform->getInformData(BuyerInformCode::PRIVATE_GUEST_BOARD_WRITE, $mallSno); | |
| $privateGuestCommentWrite = $buyerInform->getInformData(BuyerInformCode::PRIVATE_GUEST_COMMENT_WRITE, $mallSno); | |
| $this->setData('privateApprovalTableOption', $privateApprovalTableOption); | |
| $this->setData('privateConsignTable', $privateConsignTable); | |
| $this->setData('privateOfferTable', $privateOfferTable); | |
| $this->setData('privateMarketingMember', $privateMarketingMember); | |
| $this->setData('advertisingReceive', $advertisingReceive); | |
| $this->setData('advertisingReceiveMailUse', $advertisingReceiveChannel['email']['use'] ?? 'n'); | |
| $this->setData('advertisingReceiveSmsUse', $advertisingReceiveChannel['mobile']['use'] ?? 'n'); | |
| $this->setData('joinItemEmailUse', $joinItem['email']['use'] ?? 'n'); | |
| $this->setData('joinItemCellPhoneUse', $joinItem['cellPhone']['use'] ?? 'n'); | |
| $this->setData('privateGuestOrderContent', $privateGuestOrder['content']); | |
| $this->setData('privateGuestBoardWriteContent', $privateGuestBoardWrite['content']); | |
| $this->setData('privateGuestCommentWriteContent', $privateGuestCommentWrite['content']); | |
변경 전BaseAgreementWithPrivatePsController.php
| use Framework\Debug\Exception\LayerException; | |
| use Origin\Service\Member\KakaoSync\KakaoSyncSettingService; | |
| use Request; | |
| /** | |
| * Class 약관/개인정보설정 처리 페이지 | |
| break; | |
| // --- 개인정보수집 동의항목 설정 | |
| case 'privateItem': | |
| \DB::begin_tran(); | |
| $removeSnoArray = json_decode(Request::post()->get('removeSno', [])); | |
| $mallSno = gd_isset(Request::post()->get('mallSno'), 1); | |
| foreach ($removeSnoArray as $key => $val) { | |
| $buyerInform->savePrivateConsign(Request::post()->all()); | |
| $buyerInform->savePrivateOffer(Request::post()->all()); | |
| $buyerInform->saveInformData(BuyerInformCode::PRIVATE_MARKETING, Request::post()->get('privateMarketingWriteWrite')); | |
| // 카카오 싱크 update 토필 발행 | |
| $kakaoSyncSettingService = \App::getInstance(KakaoSyncSettingService::class); | |
| $kakaoSyncSettingService->syncSettingWhenSaveTerms(); | |
| \DB::commit(); | |
| $this->json( | |
| [ | |
| 'message' => __('저장이 완료되었습니다.'), | |
| 'code' => 200, | |
| ] | |
| ); | |
| throw new Exception(__('요청을 처리할 페이지를 찾을 수 없습니다.'), 404); | |
| break; | |
| } | |
| } catch (Exception $e) { | |
| \DB::rollback(); | |
| if (Request::isAjax()) { | |
변경 후BaseAgreementWithPrivatePsController.php
| use Framework\Debug\Exception\LayerException; | |
| use Origin\Service\Member\KakaoSync\KakaoSyncSettingService; | |
| use Request; | |
| use Respect\Validation\Exceptions\ValidationException; | |
| use Respect\Validation\Validator; | |
| /** | |
| * Class 약관/개인정보설정 처리 페이지 | |
| break; | |
| // --- 개인정보수집 동의항목 설정 | |
| case 'privateItem': | |
| // post 유효성 검사 | |
| Validator::arrayVal() | |
| ->key('privateMarketingMemberFl', Validator::in(['y', 'n']), false) | |
| ->key('privateMarketingMemberNoticePopupFl', Validator::in(['y', 'n']), false) | |
| ->key('advertisingReceiveMailFl', Validator::in(['y', 'n']), false) | |
| ->key('advertisingReceiveSmsFl', Validator::in(['y', 'n']), false) | |
| ->assert(Request::post()->all()); | |
| \DB::begin_tran(); | |
| // [선택] 광고성 수신 동의 채널을 사용하면서 [선택] 마케팅 목적 개인정보 수집 및 이용 동의를 사용하지 않으면 저장 차단 | |
| $advertisingUse = Request::post()->get('advertisingReceiveMailFl', 'n') === 'y' || Request::post()->get('advertisingReceiveSmsFl', 'n') === 'y'; | |
| if ($advertisingUse && Request::post()->get('privateMarketingMemberFl', 'n') !== 'y') { | |
| throw new Exception(__("[선택] 마케팅 목적 개인정보 수집 및 이용 동의 약관을 '사용'으로 설정해주세요. [선택] 광고성 수신 동의 약관을 사용하기 위해서는 [선택] 마케팅 목적 개인정보 수집 및 이용 동의 약관을 반드시 사용해야 합니다."), 400); | |
| } | |
| $removeSnoArray = json_decode(Request::post()->get('removeSno', [])); | |
| $mallSno = gd_isset(Request::post()->get('mallSno'), 1); | |
| foreach ($removeSnoArray as $key => $val) { | |
| $buyerInform->savePrivateConsign(Request::post()->all()); | |
| $buyerInform->savePrivateOffer(Request::post()->all()); | |
| $buyerInform->saveInformData(BuyerInformCode::PRIVATE_MARKETING, Request::post()->get('privateMarketingWriteWrite')); | |
| $buyerInform->saveInformData(BuyerInformCode::PRIVATE_MARKETING_MEMBER, Request::post()->get('privateMarketingMemberWriteWrite'), $mallSno); | |
| $buyerInform->saveInformData(BuyerInformCode::ADVERTISING_RECEIVE, Request::post()->get('advertisingReceiveWriteWrite'), $mallSno); | |
| $advertisingReceiveChannels = $buyerInform->resolveAdvertisingReceiveChannels(Request::post()->all(), (int)$mallSno); | |
| $policy->setValue('member.advertisingReceive', $advertisingReceiveChannels, $mallSno); | |
| // 카카오 싱크 update 토필 발행 | |
| $kakaoSyncSettingService = \App::getInstance(KakaoSyncSettingService::class); | |
| $kakaoSyncSettingService->syncSettingWhenSaveTerms(); | |
| \DB::commit(); | |
| // [선택] 마케팅 목적 개인정보 수집 및 이용 동의를 사용하면서 [선택] 광고성 수신 동의를 사용하지 않으면 안내 문구 노출 | |
| $message = __('저장이 완료되었습니다.'); | |
| $marketingMemberUse = Request::post()->get('privateMarketingMemberFl', 'n') === 'y'; | |
| $advertisingUse = Request::post()->get('advertisingReceiveMailFl', 'n') === 'y' || Request::post()->get('advertisingReceiveSmsFl', 'n') === 'y'; | |
| if ($marketingMemberUse && !$advertisingUse) { | |
| $message .= ' ' . __('[선택] 마케팅 목적 개인정보 수집 및 이용 동의 약관만 사용하시면 광고성 메시지를 발송할 수 없습니다. 광고성 메시지를 보내시려면 [선택] 광고성 수신 동의 약관도 함께 사용해주세요.'); | |
| } | |
| $this->json( | |
| [ | |
| 'message' => $message, | |
| 'code' => 200, | |
| ] | |
| ); | |
| throw new Exception(__('요청을 처리할 페이지를 찾을 수 없습니다.'), 404); | |
| break; | |
| } | |
| } catch (ValidationException $e) { | |
| \Logger::channel('agreement')->warning(__METHOD__, ['error' => $e->getMessage()]); | |
| $this->json(['error' => ['code' => 400, 'message' => __('잘못된 요청입니다.')]]); | |
| } catch (Exception $e) { | |
| \DB::rollback(); | |
| if (Request::isAjax()) { | |
변경 전MemberCrmDetailController.php
| $session->set(Member::SESSION_MODIFY_MEMBER_INFO, $memberData); | |
| //@formatter:off | |
| $checked = SkinUtils::setChecked(['memberFl', 'appFl', 'maillingFl', 'smsFl', 'sexFl', 'marriFl', 'expirationFl',], $memberData); | |
| //@formatter:on | |
| $memberData['privateApprovalOptionFl'] = json_decode(stripslashes($memberData['privateApprovalOptionFl']), true); | |
| $memberData['privateOfferFl'] = json_decode(stripslashes($memberData['privateOfferFl']), true); | |
| /** @var \Bundle\Component\Agreement\BuyerInform $buyerInform */ | |
| $buyerInform = App::load('\\Component\\Agreement\\BuyerInform'); | |
| $privateApprovalOption = $buyerInform->getInformDataArray(BuyerInformCode::PRIVATE_APPROVAL_OPTION, 'sno,informNm,content', true, $memberData['mallSno']); | |
| $privateOffer = $buyerInform->getInformDataArray(BuyerInformCode::PRIVATE_OFFER, 'sno,informNm,content', true, $memberData['mallSno']); | |
| $privateConsign = $buyerInform->getInformDataArray(BuyerInformCode::PRIVATE_CONSIGN, 'sno,informNm,content', true, $memberData['mallSno']); | |
| // 하이픈 제거 | |
| $memberData['fax'] = str_replace("-", "", $memberData['fax']); | |
| $this->setData('modeTxt', '회원수정'); | |
| $this->setData('joinField', MemberUtil::getJoinField($memberData['mallSno'])); | |
| $this->setData('htmlExtra', MemberUtil::makeExtraField($memberData)); | |
| $this->setData('data', $memberData); | |
| $this->setData('checked', $checked); | |
| $this->setData('history', $memberHistory['data']); | |
| $this->setData('privateApprovalOption', $privateApprovalOption); | |
| $this->setData('privateOffer', $privateOffer); | |
| $this->setData('privateConsign', $privateConsign); | |
| $this->setData('groupCouponConditionManual', gd_policy('member.group')['couponConditionManual']); | |
| $this->setData('hidePasswordBlock', $hidePasswordBlock); | |
| $this->setData('certification', $certification); | |
변경 후MemberCrmDetailController.php
| $session->set(Member::SESSION_MODIFY_MEMBER_INFO, $memberData); | |
| //@formatter:off | |
| $checked = SkinUtils::setChecked(['memberFl', 'appFl', 'maillingFl', 'smsFl', 'sexFl', 'marriFl', 'expirationFl', 'privateMarketingConsentOptionFl',], $memberData); | |
| //@formatter:on | |
| $memberData['privateApprovalOptionFl'] = json_decode(stripslashes($memberData['privateApprovalOptionFl']), true); | |
| $memberData['privateOfferFl'] = json_decode(stripslashes($memberData['privateOfferFl']), true); | |
| /** @var \Bundle\Component\Agreement\BuyerInform $buyerInform */ | |
| $buyerInform = App::load('\\Component\\Agreement\\BuyerInform'); | |
| $privateApprovalOption = $buyerInform->getInformDataArray(BuyerInformCode::PRIVATE_APPROVAL_OPTION, 'sno,informNm,content,modeFl', true, $memberData['mallSno']); | |
| $privateOffer = $buyerInform->getInformDataArray(BuyerInformCode::PRIVATE_OFFER, 'sno,informNm,content,modeFl', true, $memberData['mallSno']); | |
| $privateConsign = $buyerInform->getInformDataArray(BuyerInformCode::PRIVATE_CONSIGN, 'sno,informNm,content,modeFl', true, $memberData['mallSno']); | |
| $privateMarketingMember = $buyerInform->getInformDataArray(BuyerInformCode::PRIVATE_MARKETING_MEMBER, 'sno,informNm,content,modeFl', true, $memberData['mallSno']); | |
| $privateMarketingMemberUse = (($privateMarketingMember[0]['modeFl'] ?? 'n') === 'y'); | |
| // 개인정보 동의 항목별 마지막 변경 일시(컬럼 공통). 이력 없으면 가입일(entryDt) 폴백 | |
| $privateAgreementDt = $history->getLastPrivateAgreementDateByMember((int) $memberNo); | |
| $memberEntryDt = $memberData['entryDt'] ?? ''; | |
| // 약관 동의 표시 행 조립 (개인정보 항목별/마케팅). 표시용 데이터 변환은 MemberUtil::buildPrivateAgreementRows | |
| $privateAgreements = [ | |
| ['title' => '개인정보 수집·이용', 'use' => is_array($memberData['privateApprovalOptionFl'] ?? null), 'informs' => $privateApprovalOption, 'flags' => $memberData['privateApprovalOptionFl'] ?? [], 'denyWhenMissing' => false, 'agreementDt' => $privateAgreementDt['privateApprovalOptionFl'] ?? $memberEntryDt], | |
| ['title' => '개인정보 취급위탁', 'use' => is_array($memberData['privateConsignFl'] ?? null), 'informs' => $privateConsign, 'flags' => $memberData['privateConsignFl'] ?? [], 'denyWhenMissing' => false, 'agreementDt' => $privateAgreementDt['privateConsignFl'] ?? $memberEntryDt], | |
| ['title' => '개인정보 제3자 제공', 'use' => is_array($memberData['privateOfferFl'] ?? null), 'informs' => $privateOffer, 'flags' => $memberData['privateOfferFl'] ?? [], 'denyWhenMissing' => false, 'agreementDt' => $privateAgreementDt['privateOfferFl'] ?? $memberEntryDt], | |
| ['title' => '마케팅 목적 개인정보 수집 및 이용 동의', 'use' => $privateMarketingMemberUse, 'informs' => $privateMarketingMember, 'flags' => $memberData['privateMarketingConsentOptionFl'] ?? '', 'denyWhenMissing' => true, 'agreementDt' => $privateAgreementDt['privateMarketingConsentOptionFl'] ?? $memberEntryDt], | |
| ]; | |
| $advertisingReceiveChannelUse = $buyerInform->getAdvertisingReceiveChannelUse($memberData['mallSno']); | |
| $advertisingReceive = [ | |
| 'email' => ['use' => $advertisingReceiveChannelUse['mail']], | |
| 'mobile' => ['use' => $advertisingReceiveChannelUse['sms']], | |
| ]; | |
| // 마케팅 목적 개인정보 수집 및 이용 동의/거부일 (없으면 '-') | |
| $memberData['privateMktAgreementDt'] = $memberData['lastReceiveAgreementDt']['privateMkt'] ?? '-'; | |
| // 하이픈 제거 | |
| $memberData['fax'] = str_replace("-", "", $memberData['fax']); | |
| $this->setData('modeTxt', '회원수정'); | |
| $this->setData('joinField', MemberUtil::getJoinField($memberData['mallSno'])); | |
| $this->setData('htmlExtra', MemberUtil::makeExtraField($memberData)); | |
| $this->setData('privateMarketingMemberUse', $privateMarketingMemberUse); | |
| $this->setData('data', $memberData); | |
| $this->setData('checked', $checked); | |
| $this->setData('history', $memberHistory['data']); | |
| $this->setData('privateApprovalOption', $privateApprovalOption); | |
| $this->setData('privateOffer', $privateOffer); | |
| $this->setData('privateConsign', $privateConsign); | |
| $this->setData('privateMarketingMember', $privateMarketingMember); | |
| $this->setData('privateAgreementRows', MemberUtil::buildPrivateAgreementRows($privateAgreements)); | |
| $this->setData('advertisingReceive', $advertisingReceive); | |
| $this->setData('advertisingReceiveLines', MemberUtil::buildAdvertisingReceiveLines($advertisingReceive, $memberData)); | |
| $this->setData('groupCouponConditionManual', gd_policy('member.group')['couponConditionManual']); | |
| $this->setData('hidePasswordBlock', $hidePasswordBlock); | |
| $this->setData('certification', $certification); | |
변경 전JoinAgreementController.php
| $privateApprovalOption = $inform->getInformDataArray(BuyerInformCode::PRIVATE_APPROVAL_OPTION); | |
| $privateConsign = $inform->getInformDataArray(BuyerInformCode::PRIVATE_CONSIGN); | |
| $privateOffer = $inform->getInformDataArray(BuyerInformCode::PRIVATE_OFFER); | |
| $ipinConfig = gd_policy('member.ipin'); | |
| $authCellPhoneConfig = gd_get_auth_cellphone_info(); | |
| $memberJoinConfig = gd_policy('member.join'); | |
| $this->setData('privateApprovalOption', $privateApprovalOption); | |
| $this->setData('privateConsign', $privateConsign); | |
| $this->setData('privateOffer', $privateOffer); | |
| // debug($memberJoinConfig); | |
변경 후JoinAgreementController.php
| $privateApprovalOption = $inform->getInformDataArray(BuyerInformCode::PRIVATE_APPROVAL_OPTION); | |
| $privateConsign = $inform->getInformDataArray(BuyerInformCode::PRIVATE_CONSIGN); | |
| $privateOffer = $inform->getInformDataArray(BuyerInformCode::PRIVATE_OFFER); | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 / 광고성 수신 동의 | |
| $privateMarketingMember = $inform->getInformData(BuyerInformCode::PRIVATE_MARKETING_MEMBER); | |
| $advertisingReceive = $inform->getAdvertisingReceiveContentWithReplaceCode(); | |
| $advertisingReceiveChannelUse = $inform->getAdvertisingReceiveChannelUse(); | |
| $ipinConfig = gd_policy('member.ipin'); | |
| $authCellPhoneConfig = gd_get_auth_cellphone_info(); | |
| $memberJoinConfig = gd_policy('member.join'); | |
| $this->setData('privateApprovalOption', $privateApprovalOption); | |
| $this->setData('privateConsign', $privateConsign); | |
| $this->setData('privateOffer', $privateOffer); | |
| $this->setData('privateMarketingMember', $privateMarketingMember); | |
| $this->setData('advertisingReceive', $advertisingReceive); | |
| $this->setData('advertisingReceiveMailUse', $advertisingReceiveChannelUse['mail']); | |
| $this->setData('advertisingReceiveSmsUse', $advertisingReceiveChannelUse['sms']); | |
| $this->setData('isUseAdvertisingReceive', $inform->isUseAdvertisingReceive()); | |
| // debug($memberJoinConfig); | |
변경 전LoginPsController.php
| \DB::rollback(); | |
| $logger->info(__METHOD__ . ', ' . $e->getFile() . '[' . $e->getLine() . '], ' . $e->getMessage()); | |
| } | |
| } | |
| if($message){ | |
| throw new AlertRedirectException($message, 0, null, $returnUrl); | |
변경 후LoginPsController.php
| \DB::rollback(); | |
| $logger->info(__METHOD__ . ', ' . $e->getFile() . '[' . $e->getLine() . '], ' . $e->getMessage()); | |
| } | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 안내 (미동의 회원 로그인 시 계정당 1회, 확인 후 마이페이지 이동) | |
| // my_page.php는 진입 시 비밀번호 재확인을 요구하므로 게이트인 my_page_password.php로 직접 보낸다(이중 alert/리다이렉트 방지). | |
| if (empty($message) && $member->markPrivateMarketingConsentNoticeShown()) { | |
| $message = __('마케팅 이메일 및 모바일 메시지 수신을 위해 개인정보 수집 및 이용에 동의해 주세요.'); | |
| $returnUrl = '../mypage/my_page_password.php'; | |
| } | |
| } | |
| if($message){ | |
| throw new AlertRedirectException($message, 0, null, $returnUrl); | |
변경 전MyPageController.php
| $this->setData('privateApprovalOption', $inform->getInformDataArray(BuyerInformCode::PRIVATE_APPROVAL_OPTION)); | |
| $this->setData('privateOffer', $inform->getInformDataArray(BuyerInformCode::PRIVATE_OFFER)); | |
| $this->setData('privateConsign', $inform->getInformDataArray(BuyerInformCode::PRIVATE_CONSIGN)); | |
| $this->setData('snsConnection', json_encode($snsConnection)); | |
| $this->setData('usePaycoLogin', $paycoPolicy->usePaycoLogin()); | |
| $this->setData('useNaverLogin', $naverPolicy->useNaverLogin()); | |
변경 후MyPageController.php
| $this->setData('privateApprovalOption', $inform->getInformDataArray(BuyerInformCode::PRIVATE_APPROVAL_OPTION)); | |
| $this->setData('privateOffer', $inform->getInformDataArray(BuyerInformCode::PRIVATE_OFFER)); | |
| $this->setData('privateConsign', $inform->getInformDataArray(BuyerInformCode::PRIVATE_CONSIGN)); | |
| $this->setData('privateMktApprovalOption', $inform->getInformDataArray(BuyerInformCode::PRIVATE_MARKETING_MEMBER)); | |
| $this->setData('advertisingReceive', $inform->getAdvertisingReceiveContentWithReplaceCode((int)$mallSno)); | |
| // 광고성 수신 동의 채널(이메일/모바일) 노출 여부 | |
| $advertisingReceiveChannelUse = $inform->getAdvertisingReceiveChannelUse((int)$mallSno); | |
| $this->setData('advertisingReceiveMailUse', $advertisingReceiveChannelUse['mail']); | |
| $this->setData('advertisingReceiveSmsUse', $advertisingReceiveChannelUse['sms']); | |
| // 광고성 수신 동의 블록 노출 = 채널 하나라도 사용 (es_buyerInform modeFl 아님) | |
| $this->setData('isUseAdvertisingReceive', $inform->isUseAdvertisingReceive((int)$mallSno)); | |
| $this->setData('snsConnection', json_encode($snsConnection)); | |
| $this->setData('usePaycoLogin', $paycoPolicy->usePaycoLogin()); | |
| $this->setData('useNaverLogin', $naverPolicy->useNaverLogin()); | |
변경 전AgreementController.php
| case BuyerInformCode::PRIVATE_APPROVAL: | |
| $terms = $inform->getInformData(BuyerInformCode::PRIVATE_APPROVAL); | |
| break; | |
| case BuyerInformCode::BASE_PRIVATE: | |
| $terms = $inform->getPrivateWithReplaceCode(BuyerInformCode::BASE_PRIVATE); | |
| break; | |
변경 후AgreementController.php
| case BuyerInformCode::PRIVATE_APPROVAL: | |
| $terms = $inform->getInformData(BuyerInformCode::PRIVATE_APPROVAL); | |
| break; | |
| case BuyerInformCode::PRIVATE_MARKETING_MEMBER: | |
| $terms = $inform->getInformData(BuyerInformCode::PRIVATE_MARKETING_MEMBER); | |
| break; | |
| case BuyerInformCode::ADVERTISING_RECEIVE: | |
| $terms = $inform->getAdvertisingReceiveContentWithReplaceCode(); | |
| break; | |
| case BuyerInformCode::BASE_PRIVATE: | |
| $terms = $inform->getPrivateWithReplaceCode(BuyerInformCode::BASE_PRIVATE); | |
| break; | |
변경 전join_agreement.html
| </div> | |
| <!-- {/} --> | |
| <!-- //join_agreement_box --> | |
| <div class="important_check_box"> | |
| <strong class="important_check dn">{=__('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')}</strong> | |
| </div> | |
| $('.js_terms_view :checkbox', $formTerms).change(function (e) { | |
| $('strong.important_check').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.js_terms_view'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| if (isTermsAgreeSelect) { | |
| } | |
| }); | |
| /* | |
| * 14세 동의 항목 체크박스 이벤트 | |
| */ | |
| } | |
| }); | |
| } | |
| }); | |
| </script> | |
| { # footer } | |
변경 후join_agreement.html
| </div> | |
| <!-- {/} --> | |
| <!-- //join_agreement_box --> | |
| <!-- {? privateMarketingMember['modeFl']=='y'} --> | |
| <div class="join_agreement_box js_terms_view"> | |
| <div class="form_element"> | |
| <input type="checkbox" id="termsAgree6" name=""/> | |
| <label class="check_s" for="termsAgree6"><strong class="choice">({=__('선택')})</strong> {=__('마케팅 목적 개인정보 수집 및 이용 동의')} </label> | |
| <span><a href="../service/agreement.php?code={privateMarketingMember['informCd']}" target="_blank">{=__('전체보기')}</a></span> | |
| </div> | |
| <div class="agreement_choice_box"> | |
| <table summary="{=__('마케팅 목적 개인정보 수집 및 이용 동의 내용입니다.')}" border="0" cellpadding="0" cellspacing="0"> | |
| <colgroup> | |
| <col width="10px"> | |
| <col width="300px"> | |
| </colgroup> | |
| <thead> | |
| <tr> | |
| <th>{=__('선택')}</th> | |
| <th>{=nl2br(privateMarketingMember['informNm'])}</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr> | |
| <td> | |
| <div class="form_element"> | |
| <input type="checkbox" id="privateMktApprovalOption" name="privateMarketingConsentOptionFl"/> | |
| <label class="check_s" for="privateMktApprovalOption">{=__('선택')}</label> | |
| </div> | |
| </td> | |
| <td>{=nl2br(privateMarketingMember['content'])}</td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| </div> | |
| </div> | |
| <!-- {/} --> | |
| <!-- //join_agreement_box --> | |
| <!-- {? isUseAdvertisingReceive} --> | |
| <div class="join_agreement_box js_terms_view"> | |
| <div class="form_element"> | |
| <input type="checkbox" id="termsAgree7" name=""/> | |
| <label class="check_s" for="termsAgree7"><strong class="choice">({=__('선택')})</strong> {=__('광고성 수신 동의')} </label> | |
| <span><a href="../service/agreement.php?code={advertisingReceive['informCd']}" target="_blank">{=__('전체보기')}</a></span> | |
| </div> | |
| <div class="agreement_choice_box"> | |
| <table summary="{=__('광고성 수신 동의 내용입니다.')}" border="0" cellpadding="0" cellspacing="0"> | |
| <colgroup> | |
| <col width="10px"> | |
| <col width="300px"> | |
| </colgroup> | |
| <thead> | |
| <tr> | |
| <th>{=__('선택')}</th> | |
| <th>{=nl2br(advertisingReceive['informNm'])}</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr> | |
| <td> | |
| <div class="form_element"> | |
| <input type="checkbox" id="advertisingReceiveAll" name=""/> | |
| <label class="check_s" for="advertisingReceiveAll">{=__('선택')}</label> | |
| </div> | |
| </td> | |
| <td>{=nl2br(advertisingReceive['content'])}</td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| <div class="js_advertising_channel_box" style="display:flex; flex-direction:column; align-items:flex-start; margin:10px;"> | |
| <!-- {? advertisingReceiveMailUse=='y'} --> | |
| <div class="form_element"> | |
| <input type="checkbox" id="maillingFl" name="maillingFl" class="js_advertising_channel"/> | |
| <label class="check_s" for="maillingFl">{=__('이메일 수신 동의')}</label> | |
| </div> | |
| <!-- {/} --> | |
| <!-- {? advertisingReceiveSmsUse=='y'} --> | |
| <div class="form_element"> | |
| <input type="checkbox" id="smsFl" name="smsFl" class="js_advertising_channel"/> | |
| <label class="check_s" for="smsFl">{=__('모바일 메시지 수신 동의')}</label> | |
| </div> | |
| <!-- {/} --> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- {/} --> | |
| <!-- //join_agreement_box --> | |
| <div class="important_check_box"> | |
| <strong class="important_check dn">{=__('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')}</strong> | |
| </div> | |
| $('.js_terms_view :checkbox', $formTerms).change(function (e) { | |
| $('strong.important_check').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.js_terms_view'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5') || (e.target.id === 'termsAgree6') || (e.target.id === 'termsAgree7'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| if (isTermsAgreeSelect) { | |
| } | |
| }); | |
| /* | |
| * 광고성 수신 동의 ↔ 이메일/모바일 수신 동의 ↔ 마케팅 목적 개인정보 수집 및 이용 동의 연동 | |
| * - 광고성 수신 동의 체크 → 이메일/모바일 채널 일괄 + 마케팅 목적 동의 ON | |
| * - 채널(1개 이상) 체크 → 광고성 수신 동의 + 마케팅 목적 동의 ON (채널은 각각 개별 토글) | |
| */ | |
| const checkMarketingApproval = function () { | |
| $('#privateMktApprovalOption', $formTerms).prop('checked', true).val('y').siblings('label').addClass('on'); | |
| $('#termsAgree6', $formTerms).prop('checked', true).siblings('label').addClass('on'); | |
| }; | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 체크 시 광고성 수신 동의·수신 채널 일괄 선택 | |
| const checkAdvertising = function () { | |
| if ($('#termsAgree7', $formTerms).length === 0) { | |
| return; | |
| } | |
| $('#termsAgree7', $formTerms).prop('checked', true).siblings('label').addClass('on'); | |
| $('#advertisingReceiveAll', $formTerms).prop('checked', true).siblings('label').addClass('on'); | |
| $('.js_advertising_channel', $formTerms).prop('checked', true).val('y').siblings('label').addClass('on'); | |
| }; | |
| $formTerms.on('change', '#termsAgree7', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $(this).siblings('label').toggleClass('on', isChecked); | |
| $('#advertisingReceiveAll', $formTerms).prop('checked', isChecked) | |
| .siblings('label').toggleClass('on', isChecked); | |
| $('.js_advertising_channel', $formTerms).prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } | |
| }); | |
| $formTerms.on('change', '#advertisingReceiveAll', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $('.js_advertising_channel', $formTerms).prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } else { | |
| $('#termsAgree7', $formTerms).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| $formTerms.on('change', '.js_advertising_channel', function () { | |
| const anyChannelChecked = $('.js_advertising_channel:checked', $formTerms).length > 0; | |
| $('#advertisingReceiveAll', $formTerms).prop('checked', anyChannelChecked) | |
| .siblings('label').toggleClass('on', anyChannelChecked); | |
| if (anyChannelChecked) { | |
| checkMarketingApproval(); | |
| } | |
| if ($(this).prop('checked') === false) { | |
| $('#termsAgree7', $formTerms).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| $formTerms.on('change', '#privateMktApprovalOption', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } else { | |
| $('#termsAgree6', $formTerms).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| $formTerms.on('change', '#termsAgree6', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } | |
| }); | |
| /* | |
| * 14세 동의 항목 체크박스 이벤트 | |
| */ | |
| } | |
| }); | |
| } | |
| // 그룹 하위 항목이 모두 선택되면 상위 [선택] 헤더(termsAgree3~7)도 선택 (하나라도 해제 시 해제) | |
| $formTerms.on('change', '.js_terms_view .agreement_choice_box :checkbox', function () { | |
| const $termsView = $(this).closest('.js_terms_view'); | |
| const $header = $termsView.children('.form_element').children(':checkbox'); | |
| const $subs = $termsView.find('.agreement_choice_box :checkbox'); | |
| const allChecked = $subs.length > 0 && $subs.not(':checked').length === 0; | |
| $header.prop('checked', allChecked).siblings('label').toggleClass('on', allChecked); | |
| }); | |
| /* | |
| * 전체 동의 역동기화 — 하위 체크박스가 모두 선택되면 전체 동의도 선택 (하나라도 해제되면 해제) | |
| */ | |
| const syncAllAgree = function () { | |
| const $targets = $(':checkbox', $formTerms).not('#allAgree').not('#termsAgree'); | |
| const allChecked = $targets.length > 0 && $targets.not(':checked').length === 0; | |
| $('#allAgree', $formTerms).prop('checked', allChecked) | |
| .siblings('label').toggleClass('on', allChecked); | |
| }; | |
| $formTerms.on('change', ':checkbox', function (e) { | |
| if (e.target.id === 'allAgree' || e.target.id === 'termsAgree') { | |
| return; | |
| } | |
| syncAllAgree(); | |
| }); | |
| }); | |
| </script> | |
| { # footer } | |
변경 전_join_view.html
| </select> | |
| </div> | |
| <div class="member_warning js_email"></div> | |
| <!--{? joinField.maillingFl.use === 'y'}--> | |
| <div class="form_element"> | |
| <input type="checkbox" id="maillingFl" name="maillingFl" value="y" {? data.maillingFl == 'y'}checked="checked"{/}/> | |
| <label for="maillingFl" class="check_s {? data.maillingFl == 'y'}on{/}">{=__('정보/이벤트 메일 수신에 동의합니다.')}</label> | |
| </div> | |
| <!--{/}--> | |
| </td> | |
| </tr> | |
| <!--{/}--> | |
| <!--{ / }--> | |
| <!--{ / }--> | |
| </div> | |
| <!--{? joinField.smsFl.use === 'y'}--> | |
| <div class="form_element"> | |
| <input type="checkbox" id="smsFl" name="smsFl" value="y" {? data.smsFl == 'y'}checked="checked"{/}/> | |
| <label for="smsFl" class="check_s {? data.smsFl == 'y'}on{/}">{=__('정보/이벤트 SMS 수신에 동의합니다.')}</label> | |
| </div> | |
| <!--{/}--> | |
| </td> | |
| </tr> | |
| <!--{/}--> | |
변경 후_join_view.html
| </select> | |
| </div> | |
| <div class="member_warning js_email"></div> | |
| </td> | |
| </tr> | |
| <!--{/}--> | |
| <!--{ / }--> | |
| <!--{ / }--> | |
| </div> | |
| </td> | |
| </tr> | |
| <!--{/}--> | |
변경 전_join_view_other.html
| <!--{/}--> | |
| <!-- N : 약관동의 시작 --> | |
| <!--{? privateApprovalOption[0]['modeFl'] == 'y' || privateConsign[0]['modeFl']=='y' || privateOffer[0]['modeFl']=='y'}--> | |
| <div class="join_agreement_cont"> | |
| <h3>{=__('약관동의현황')}</h3> | |
| <!--{? privateApprovalOption[0]['modeFl'] == 'y'}--> | |
| </div> | |
| <!-- //join_agreement_box --> | |
| <!--{/ // privateOffer modeFl end}--> | |
| </div> | |
| <!-- //join_agreement_cont --> | |
| <!--{ / }--> | |
변경 후_join_view_other.html
| <!--{/}--> | |
| <!-- N : 약관동의 시작 --> | |
| <!--{? privateApprovalOption[0]['modeFl'] == 'y' || privateConsign[0]['modeFl']=='y' || privateOffer[0]['modeFl']=='y' || privateMktApprovalOption[0]['modeFl']=='y' || isUseAdvertisingReceive}--> | |
| <div class="join_agreement_cont"> | |
| <h3>{=__('약관동의현황')}</h3> | |
| <!--{? privateApprovalOption[0]['modeFl'] == 'y'}--> | |
| </div> | |
| <!-- //join_agreement_box --> | |
| <!--{/ // privateOffer modeFl end}--> | |
| <!--{? privateMktApprovalOption[0]['modeFl'] == 'y'}--> | |
| <div class="join_agreement_box"> | |
| <div class="form_element"> | |
| <input type="checkbox" id="termsAgree6"/> | |
| <label for="termsAgree6" class="check_s"><strong class="choice">({=__('선택')})</strong> {=__('마케팅 목적 개인정보 수집 및 이용 동의')} </label> | |
| <span><a href="../service/agreement.php?code={privateMktApprovalOption[0]['informCd']}" target="_blank">{=__('전체보기')}</a></span> | |
| </div> | |
| <!--{@ privateMktApprovalOption}--> | |
| <div class="agreement_choice_box"> | |
| <table border="0" cellpadding="0" cellspacing="0" summary="{=__('마케팅 목적 개인정보 수집 및 이용 동의 내용입니다.')}"> | |
| <colgroup> | |
| <col width="10px"> | |
| <col width="300px"> | |
| </colgroup> | |
| <thead> | |
| <tr> | |
| <th>{=__('선택')}</th> | |
| <th>{=nl2br(.informNm)}</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr> | |
| <td> | |
| <div class="form_element"> | |
| <input type="checkbox" id="privateMarketingConsentOptionFl" name="privateMarketingConsentOptionFl" value="y" <!--{? data['privateMarketingConsentOptionFl'] == 'y'}-->checked="checked"<!--{/}-->/> | |
| <label for="privateMarketingConsentOptionFl" class="check_s <!--{? data['privateMarketingConsentOptionFl'] == 'y'}-->on<!--{/}-->">{=__('선택')}</label> | |
| </div> | |
| </td> | |
| <td> | |
| <div class="agreement_scroll"> | |
| {=nl2br(.content)} | |
| </div> | |
| </td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| </div> | |
| <!--{/ // privateMktApprovalOption loop end}--> | |
| </div> | |
| <!-- //join_agreement_box --> | |
| <!--{/ // privateMktApprovalOption modeFl end}--> | |
| <!--{? isUseAdvertisingReceive}--> | |
| <div class="join_agreement_box js_terms_view"> | |
| <div class="form_element"> | |
| <input type="checkbox" id="termsAgree7"/> | |
| <label for="termsAgree7" class="check_s"><strong class="choice">({=__('선택')})</strong> {=__('광고성 수신 동의')} </label> | |
| <span><a href="../service/agreement.php?code={advertisingReceive['informCd']}" target="_blank">{=__('전체보기')}</a></span> | |
| </div> | |
| <div class="agreement_choice_box"> | |
| <table border="0" cellpadding="0" cellspacing="0" summary="{=__('광고성 수신 동의 내용입니다.')}"> | |
| <colgroup> | |
| <col width="10px"> | |
| <col width="300px"> | |
| </colgroup> | |
| <thead> | |
| <tr> | |
| <th>{=__('선택')}</th> | |
| <th>{=nl2br(advertisingReceive['informNm'])}</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr> | |
| <td> | |
| <div class="form_element"> | |
| <input type="checkbox" id="advertisingReceiveAll" <!--{? data['maillingFl'] == 'y' || data['smsFl'] == 'y'}-->checked="checked"<!--{/}-->/> | |
| <label for="advertisingReceiveAll" class="check_s <!--{? data['maillingFl'] == 'y' || data['smsFl'] == 'y'}-->on<!--{/}-->">{=__('선택')}</label> | |
| </div> | |
| </td> | |
| <td> | |
| <div class="agreement_scroll"> | |
| {=nl2br(advertisingReceive['content'])} | |
| </div> | |
| </td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| <div class="js_advertising_channel_box" style="display:flex; flex-direction:column; align-items:flex-start; margin:10px;"> | |
| <!--{? advertisingReceiveMailUse == 'y'}--> | |
| <div class="form_element"> | |
| <input type="checkbox" id="advertisingReceiveMail" name="maillingFl" value="y" class="js_advertising_channel" <!--{? data['maillingFl'] == 'y'}-->checked="checked"<!--{/}-->/> | |
| <label for="advertisingReceiveMail" class="check_s <!--{? data['maillingFl'] == 'y'}-->on<!--{/}-->">{=__('이메일 수신 동의')}</label> | |
| </div> | |
| <!--{/}--> | |
| <!--{? advertisingReceiveSmsUse == 'y'}--> | |
| <div class="form_element"> | |
| <input type="checkbox" id="advertisingReceiveSms" name="smsFl" value="y" class="js_advertising_channel" <!--{? data['smsFl'] == 'y'}-->checked="checked"<!--{/}-->/> | |
| <label for="advertisingReceiveSms" class="check_s <!--{? data['smsFl'] == 'y'}-->on<!--{/}-->">{=__('모바일 메시지 수신 동의')}</label> | |
| </div> | |
| <!--{/}--> | |
| </div> | |
| </div> | |
| <!-- //agreement_choice_box --> | |
| </div> | |
| <!-- //join_agreement_box --> | |
| <!--{/ // isUseAdvertisingReceive end}--> | |
| </div> | |
| <!-- //join_agreement_cont --> | |
| <!--{ / }--> | |
변경 전my_page.html
| e.preventDefault(); | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.join_agreement_box'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| } | |
| }); | |
| gd_select_email_domain('email'); | |
| <!--{? (joinField.marriFl.use == 'y' && joinField.marriDate.use == 'y') || joinField.birthDt.use == 'y' }--> | |
변경 후my_page.html
| e.preventDefault(); | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.join_agreement_box'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5') || (e.target.id === 'termsAgree6') || (e.target.id === 'termsAgree7'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| } | |
| }); | |
| /* | |
| * 광고성 수신 동의 ↔ 이메일/모바일 수신 동의 ↔ 마케팅 목적 개인정보 수집 및 이용 동의 연동 | |
| * - 광고성 수신 동의 체크 → 이메일/모바일 채널 일괄 + 마케팅 목적 동의 ON | |
| * - 채널(1개 이상) 체크 → 광고성 수신 동의 + 마케팅 목적 동의 ON (채널은 각각 개별 토글) | |
| */ | |
| const checkMarketingApproval = function () { | |
| $('#privateMarketingConsentOptionFl', $formJoin).prop('checked', true).val('y').siblings('label').addClass('on'); | |
| $('#termsAgree6', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| }; | |
| $formJoin.on('change', '#termsAgree7', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $(this).siblings('label').toggleClass('on', isChecked); | |
| $('#advertisingReceiveAll', $formJoin).prop('checked', isChecked) | |
| .siblings('label').toggleClass('on', isChecked); | |
| $('.js_advertising_channel', $formJoin).prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } | |
| }); | |
| $formJoin.on('change', '#advertisingReceiveAll', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $('.js_advertising_channel', $formJoin).prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| // 전체선택(advertisingReceiveAll) 직접 조작 시 광고성 수신 동의(termsAgree7) 헤더도 동기화 | |
| $('#termsAgree7', $formJoin).prop('checked', isChecked).siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } | |
| }); | |
| $formJoin.on('change', '.js_advertising_channel', function () { | |
| const anyChannelChecked = $('.js_advertising_channel:checked', $formJoin).length > 0; | |
| const allChannelChecked = $('.js_advertising_channel', $formJoin).length > 0 | |
| && $('.js_advertising_channel:not(:checked)', $formJoin).length === 0; | |
| $('#advertisingReceiveAll', $formJoin).prop('checked', anyChannelChecked) | |
| .siblings('label').toggleClass('on', anyChannelChecked); | |
| if (anyChannelChecked) { | |
| checkMarketingApproval(); | |
| } | |
| // 수신 채널 전부 선택 시 광고성 수신 동의(termsAgree7) 헤더 ON (일부만이면 켜지 않음) | |
| if (allChannelChecked) { | |
| $('#termsAgree7', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| } | |
| if ($(this).prop('checked') === false) { | |
| $('#termsAgree7', $formJoin).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 체크 시 광고성 수신 동의·수신 채널 일괄 선택 | |
| const checkAdvertising = function () { | |
| if ($('#termsAgree7', $formJoin).length === 0) { | |
| return; | |
| } | |
| $('#termsAgree7', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| $('#advertisingReceiveAll', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| $('.js_advertising_channel', $formJoin).prop('checked', true).val('y').siblings('label').addClass('on'); | |
| }; | |
| $formJoin.on('change', '#privateMarketingConsentOptionFl', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } else { | |
| $('#termsAgree6', $formJoin).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 그룹 [선택] 헤더 체크 시 광고성 수신 동의·수신 채널 연동 | |
| $formJoin.on('change', '#termsAgree6', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } | |
| }); | |
| // 그룹 하위 항목이 모두 선택되면 상위 [선택] 헤더도 선택 (하나라도 해제 시 해제) | |
| $formJoin.on('change', '.join_agreement_box .agreement_choice_box :checkbox', function () { | |
| const $box = $(this).closest('.join_agreement_box'); | |
| const $header = $box.children('.form_element').children(':checkbox'); | |
| // 광고성 수신 동의(termsAgree7)는 채널 1개 이상 선택 의미라 전체 선택 동기화에서 제외 | |
| if ($header.attr('id') === 'termsAgree7') { | |
| return; | |
| } | |
| const $subs = $box.find('.agreement_choice_box :checkbox'); | |
| const allChecked = $subs.length > 0 && $subs.not(':checked').length === 0; | |
| $header.prop('checked', allChecked).siblings('label').toggleClass('on', allChecked); | |
| }); | |
| // 초기 로드: 저장된 하위 선택 상태로 상위 [선택] 헤더 동기화 | |
| $('.join_agreement_box', $formJoin).each(function () { | |
| const $box = $(this); | |
| const $header = $box.children('.form_element').children(':checkbox'); | |
| // 광고성 수신 동의(termsAgree7)는 채널 1개 이상 선택 의미라 전체 선택 동기화에서 제외 | |
| if ($header.attr('id') === 'termsAgree7') { | |
| return; | |
| } | |
| const $subs = $box.find('.agreement_choice_box :checkbox'); | |
| if ($subs.length > 0 && $subs.not(':checked').length === 0) { | |
| $header.prop('checked', true).siblings('label').addClass('on'); | |
| } | |
| }); | |
| // 초기 로드: 수신 채널이 전부 선택된 상태면 광고성 수신 동의(termsAgree7) 헤더 ON | |
| if ($('.js_advertising_channel', $formJoin).length > 0 | |
| && $('.js_advertising_channel:not(:checked)', $formJoin).length === 0) { | |
| $('#termsAgree7', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| } | |
| gd_select_email_domain('email'); | |
| <!--{? (joinField.marriFl.use == 'y' && joinField.marriDate.use == 'y') || joinField.birthDt.use == 'y' }--> | |
변경 전join_agreement.html
| </div> | |
| <!-- {/} --> | |
| <!-- //join_agreement_box --> | |
| <div class="important_check_box"> | |
| <strong class="important_check dn">{=__('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')}</strong> | |
| </div> | |
| $('.js_terms_view :checkbox', $formTerms).change(function (e) { | |
| $('strong.important_check').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.js_terms_view'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| if (isTermsAgreeSelect) { | |
| } | |
| }); | |
| /* | |
| * 14세 동의 항목 체크박스 이벤트 | |
| */ | |
| } | |
| }); | |
| } | |
| }); | |
| </script> | |
| { # footer } | |
변경 후join_agreement.html
| </div> | |
| <!-- {/} --> | |
| <!-- //join_agreement_box --> | |
| <!-- {? privateMarketingMember['modeFl']=='y'} --> | |
| <div class="join_agreement_box js_terms_view"> | |
| <div class="form_element"> | |
| <input type="checkbox" id="termsAgree6" name=""/> | |
| <label class="check_s" for="termsAgree6"><strong class="choice">({=__('선택')})</strong> {=__('마케팅 목적 개인정보 수집 및 이용 동의')} </label> | |
| <span><a href="../service/agreement.php?code={privateMarketingMember['informCd']}" target="_blank">{=__('전체보기')}</a></span> | |
| </div> | |
| <div class="agreement_choice_box"> | |
| <table summary="{=__('마케팅 목적 개인정보 수집 및 이용 동의 내용입니다.')}" border="0" cellpadding="0" cellspacing="0"> | |
| <colgroup> | |
| <col width="10px"> | |
| <col width="300px"> | |
| </colgroup> | |
| <thead> | |
| <tr> | |
| <th>{=__('선택')}</th> | |
| <th>{=nl2br(privateMarketingMember['informNm'])}</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr> | |
| <td> | |
| <div class="form_element"> | |
| <input type="checkbox" id="privateMktApprovalOption" name="privateMarketingConsentOptionFl"/> | |
| <label class="check_s" for="privateMktApprovalOption">{=__('선택')}</label> | |
| </div> | |
| </td> | |
| <td>{=nl2br(privateMarketingMember['content'])}</td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| </div> | |
| </div> | |
| <!-- {/} --> | |
| <!-- //join_agreement_box --> | |
| <!-- {? isUseAdvertisingReceive} --> | |
| <div class="join_agreement_box js_terms_view"> | |
| <div class="form_element"> | |
| <input type="checkbox" id="termsAgree7" name=""/> | |
| <label class="check_s" for="termsAgree7"><strong class="choice">({=__('선택')})</strong> {=__('광고성 수신 동의')} </label> | |
| <span><a href="../service/agreement.php?code={advertisingReceive['informCd']}" target="_blank">{=__('전체보기')}</a></span> | |
| </div> | |
| <div class="agreement_choice_box"> | |
| <table summary="{=__('광고성 수신 동의 내용입니다.')}" border="0" cellpadding="0" cellspacing="0"> | |
| <colgroup> | |
| <col width="10px"> | |
| <col width="300px"> | |
| </colgroup> | |
| <thead> | |
| <tr> | |
| <th>{=__('선택')}</th> | |
| <th>{=nl2br(advertisingReceive['informNm'])}</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr> | |
| <td> | |
| <div class="form_element"> | |
| <input type="checkbox" id="advertisingReceiveAll" name=""/> | |
| <label class="check_s" for="advertisingReceiveAll">{=__('선택')}</label> | |
| </div> | |
| </td> | |
| <td>{=nl2br(advertisingReceive['content'])}</td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| <div class="js_advertising_channel_box" style="display:flex; flex-direction:column; align-items:flex-start; margin:10px;"> | |
| <!-- {? advertisingReceiveMailUse=='y'} --> | |
| <div class="form_element"> | |
| <input type="checkbox" id="maillingFl" name="maillingFl" class="js_advertising_channel"/> | |
| <label class="check_s" for="maillingFl">{=__('이메일 수신 동의')}</label> | |
| </div> | |
| <!-- {/} --> | |
| <!-- {? advertisingReceiveSmsUse=='y'} --> | |
| <div class="form_element"> | |
| <input type="checkbox" id="smsFl" name="smsFl" class="js_advertising_channel"/> | |
| <label class="check_s" for="smsFl">{=__('모바일 메시지 수신 동의')}</label> | |
| </div> | |
| <!-- {/} --> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- {/} --> | |
| <!-- //join_agreement_box --> | |
| <div class="important_check_box"> | |
| <strong class="important_check dn">{=__('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')}</strong> | |
| </div> | |
| $('.js_terms_view :checkbox', $formTerms).change(function (e) { | |
| $('strong.important_check').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.js_terms_view'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5') || (e.target.id === 'termsAgree6') || (e.target.id === 'termsAgree7'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| if (isTermsAgreeSelect) { | |
| } | |
| }); | |
| /* | |
| * 광고성 수신 동의 ↔ 이메일/모바일 수신 동의 ↔ 마케팅 목적 개인정보 수집 및 이용 동의 연동 | |
| * - 광고성 수신 동의 체크 → 이메일/모바일 채널 일괄 + 마케팅 목적 동의 ON | |
| * - 채널(1개 이상) 체크 → 광고성 수신 동의 + 마케팅 목적 동의 ON (채널은 각각 개별 토글) | |
| */ | |
| const checkMarketingApproval = function () { | |
| $('#privateMktApprovalOption', $formTerms).prop('checked', true).val('y').siblings('label').addClass('on'); | |
| $('#termsAgree6', $formTerms).prop('checked', true).siblings('label').addClass('on'); | |
| }; | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 체크 시 광고성 수신 동의·수신 채널 일괄 선택 | |
| const checkAdvertising = function () { | |
| if ($('#termsAgree7', $formTerms).length === 0) { | |
| return; | |
| } | |
| $('#termsAgree7', $formTerms).prop('checked', true).siblings('label').addClass('on'); | |
| $('#advertisingReceiveAll', $formTerms).prop('checked', true).siblings('label').addClass('on'); | |
| $('.js_advertising_channel', $formTerms).prop('checked', true).val('y').siblings('label').addClass('on'); | |
| }; | |
| $formTerms.on('change', '#termsAgree7', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $(this).siblings('label').toggleClass('on', isChecked); | |
| $('#advertisingReceiveAll', $formTerms).prop('checked', isChecked) | |
| .siblings('label').toggleClass('on', isChecked); | |
| $('.js_advertising_channel', $formTerms).prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } | |
| }); | |
| $formTerms.on('change', '#advertisingReceiveAll', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $('.js_advertising_channel', $formTerms).prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } else { | |
| $('#termsAgree7', $formTerms).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| $formTerms.on('change', '.js_advertising_channel', function () { | |
| const anyChannelChecked = $('.js_advertising_channel:checked', $formTerms).length > 0; | |
| $('#advertisingReceiveAll', $formTerms).prop('checked', anyChannelChecked) | |
| .siblings('label').toggleClass('on', anyChannelChecked); | |
| if (anyChannelChecked) { | |
| checkMarketingApproval(); | |
| } | |
| if ($(this).prop('checked') === false) { | |
| $('#termsAgree7', $formTerms).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| $formTerms.on('change', '#privateMktApprovalOption', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } else { | |
| $('#termsAgree6', $formTerms).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| $formTerms.on('change', '#termsAgree6', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } | |
| }); | |
| /* | |
| * 14세 동의 항목 체크박스 이벤트 | |
| */ | |
| } | |
| }); | |
| } | |
| // 그룹 하위 항목이 모두 선택되면 상위 [선택] 헤더(termsAgree3~7)도 선택 (하나라도 해제 시 해제) | |
| $formTerms.on('change', '.js_terms_view .agreement_choice_box :checkbox', function () { | |
| const $termsView = $(this).closest('.js_terms_view'); | |
| const $header = $termsView.children('.form_element').children(':checkbox'); | |
| const $subs = $termsView.find('.agreement_choice_box :checkbox'); | |
| const allChecked = $subs.length > 0 && $subs.not(':checked').length === 0; | |
| $header.prop('checked', allChecked).siblings('label').toggleClass('on', allChecked); | |
| }); | |
| /* | |
| * 전체 동의 역동기화 — 하위 체크박스가 모두 선택되면 전체 동의도 선택 (하나라도 해제되면 해제) | |
| */ | |
| const syncAllAgree = function () { | |
| const $targets = $(':checkbox', $formTerms).not('#allAgree').not('#termsAgree'); | |
| const allChecked = $targets.length > 0 && $targets.not(':checked').length === 0; | |
| $('#allAgree', $formTerms).prop('checked', allChecked) | |
| .siblings('label').toggleClass('on', allChecked); | |
| }; | |
| $formTerms.on('change', ':checkbox', function (e) { | |
| if (e.target.id === 'allAgree' || e.target.id === 'termsAgree') { | |
| return; | |
| } | |
| syncAllAgree(); | |
| }); | |
| }); | |
| </script> | |
| { # footer } | |
변경 전_join_view.html
| </select> | |
| </div> | |
| <div class="member_warning js_email"></div> | |
| <!--{? joinField.maillingFl.use === 'y'}--> | |
| <div class="form_element"> | |
| <input type="checkbox" id="maillingFl" name="maillingFl" value="y" {? data.maillingFl == 'y'}checked="checked"{/}/> | |
| <label for="maillingFl" class="check_s {? data.maillingFl == 'y'}on{/}">{=__('정보/이벤트 메일 수신에 동의합니다.')}</label> | |
| </div> | |
| <!--{/}--> | |
| </td> | |
| </tr> | |
| <!--{/}--> | |
| <!--{ / }--> | |
| <!--{ / }--> | |
| </div> | |
| <!--{? joinField.smsFl.use === 'y'}--> | |
| <div class="form_element"> | |
| <input type="checkbox" id="smsFl" name="smsFl" value="y" {? data.smsFl == 'y'}checked="checked"{/}/> | |
| <label for="smsFl" class="check_s {? data.smsFl == 'y'}on{/}">{=__('정보/이벤트 SMS 수신에 동의합니다.')}</label> | |
| </div> | |
| <!--{/}--> | |
| </td> | |
| </tr> | |
| <!--{/}--> | |
변경 후_join_view.html
| </select> | |
| </div> | |
| <div class="member_warning js_email"></div> | |
| </td> | |
| </tr> | |
| <!--{/}--> | |
| <!--{ / }--> | |
| <!--{ / }--> | |
| </div> | |
| </td> | |
| </tr> | |
| <!--{/}--> | |
변경 전_join_view_other.html
| <!--{/}--> | |
| <!-- N : 약관동의 시작 --> | |
| <!--{? privateApprovalOption[0]['modeFl'] == 'y' || privateConsign[0]['modeFl']=='y' || privateOffer[0]['modeFl']=='y'}--> | |
| <div class="join_agreement_cont"> | |
| <h3>{=__('약관동의현황')}</h3> | |
| <!--{? privateApprovalOption[0]['modeFl'] == 'y'}--> | |
| </div> | |
| <!-- //join_agreement_box --> | |
| <!--{/ // privateOffer modeFl end}--> | |
| </div> | |
| <!-- //join_agreement_cont --> | |
| <!--{ / }--> | |
변경 후_join_view_other.html
| <!--{/}--> | |
| <!-- N : 약관동의 시작 --> | |
| <!--{? privateApprovalOption[0]['modeFl'] == 'y' || privateConsign[0]['modeFl']=='y' || privateOffer[0]['modeFl']=='y' || privateMktApprovalOption[0]['modeFl']=='y' || isUseAdvertisingReceive}--> | |
| <div class="join_agreement_cont"> | |
| <h3>{=__('약관동의현황')}</h3> | |
| <!--{? privateApprovalOption[0]['modeFl'] == 'y'}--> | |
| </div> | |
| <!-- //join_agreement_box --> | |
| <!--{/ // privateOffer modeFl end}--> | |
| <!--{? privateMktApprovalOption[0]['modeFl'] == 'y'}--> | |
| <div class="join_agreement_box"> | |
| <div class="form_element"> | |
| <input type="checkbox" id="termsAgree6"/> | |
| <label for="termsAgree6" class="check_s"><strong class="choice">({=__('선택')})</strong> {=__('마케팅 목적 개인정보 수집 및 이용 동의')} </label> | |
| <span><a href="../service/agreement.php?code={privateMktApprovalOption[0]['informCd']}" target="_blank">{=__('전체보기')}</a></span> | |
| </div> | |
| <!--{@ privateMktApprovalOption}--> | |
| <div class="agreement_choice_box"> | |
| <table border="0" cellpadding="0" cellspacing="0" summary="{=__('마케팅 목적 개인정보 수집 및 이용 동의 내용입니다.')}"> | |
| <colgroup> | |
| <col width="10px"> | |
| <col width="300px"> | |
| </colgroup> | |
| <thead> | |
| <tr> | |
| <th>{=__('선택')}</th> | |
| <th>{=nl2br(.informNm)}</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr> | |
| <td> | |
| <div class="form_element"> | |
| <input type="checkbox" id="privateMarketingConsentOptionFl" name="privateMarketingConsentOptionFl" value="y" <!--{? data['privateMarketingConsentOptionFl'] == 'y'}-->checked="checked"<!--{/}-->/> | |
| <label for="privateMarketingConsentOptionFl" class="check_s <!--{? data['privateMarketingConsentOptionFl'] == 'y'}-->on<!--{/}-->">{=__('선택')}</label> | |
| </div> | |
| </td> | |
| <td> | |
| <div class="agreement_scroll"> | |
| {=nl2br(.content)} | |
| </div> | |
| </td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| </div> | |
| <!--{/ // privateMktApprovalOption loop end}--> | |
| </div> | |
| <!-- //join_agreement_box --> | |
| <!--{/ // privateMktApprovalOption modeFl end}--> | |
| <!--{? isUseAdvertisingReceive}--> | |
| <div class="join_agreement_box js_terms_view"> | |
| <div class="form_element"> | |
| <input type="checkbox" id="termsAgree7"/> | |
| <label for="termsAgree7" class="check_s"><strong class="choice">({=__('선택')})</strong> {=__('광고성 수신 동의')} </label> | |
| <span><a href="../service/agreement.php?code={advertisingReceive['informCd']}" target="_blank">{=__('전체보기')}</a></span> | |
| </div> | |
| <div class="agreement_choice_box"> | |
| <table border="0" cellpadding="0" cellspacing="0" summary="{=__('광고성 수신 동의 내용입니다.')}"> | |
| <colgroup> | |
| <col width="10px"> | |
| <col width="300px"> | |
| </colgroup> | |
| <thead> | |
| <tr> | |
| <th>{=__('선택')}</th> | |
| <th>{=nl2br(advertisingReceive['informNm'])}</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr> | |
| <td> | |
| <div class="form_element"> | |
| <input type="checkbox" id="advertisingReceiveAll" <!--{? data['maillingFl'] == 'y' || data['smsFl'] == 'y'}-->checked="checked"<!--{/}-->/> | |
| <label for="advertisingReceiveAll" class="check_s <!--{? data['maillingFl'] == 'y' || data['smsFl'] == 'y'}-->on<!--{/}-->">{=__('선택')}</label> | |
| </div> | |
| </td> | |
| <td> | |
| <div class="agreement_scroll"> | |
| {=nl2br(advertisingReceive['content'])} | |
| </div> | |
| </td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| <div class="js_advertising_channel_box" style="display:flex; flex-direction:column; align-items:flex-start; margin:10px;"> | |
| <!--{? advertisingReceiveMailUse == 'y'}--> | |
| <div class="form_element"> | |
| <input type="checkbox" id="advertisingReceiveMail" name="maillingFl" value="y" class="js_advertising_channel" <!--{? data['maillingFl'] == 'y'}-->checked="checked"<!--{/}-->/> | |
| <label for="advertisingReceiveMail" class="check_s <!--{? data['maillingFl'] == 'y'}-->on<!--{/}-->">{=__('이메일 수신 동의')}</label> | |
| </div> | |
| <!--{/}--> | |
| <!--{? advertisingReceiveSmsUse == 'y'}--> | |
| <div class="form_element"> | |
| <input type="checkbox" id="advertisingReceiveSms" name="smsFl" value="y" class="js_advertising_channel" <!--{? data['smsFl'] == 'y'}-->checked="checked"<!--{/}-->/> | |
| <label for="advertisingReceiveSms" class="check_s <!--{? data['smsFl'] == 'y'}-->on<!--{/}-->">{=__('모바일 메시지 수신 동의')}</label> | |
| </div> | |
| <!--{/}--> | |
| </div> | |
| </div> | |
| <!-- //agreement_choice_box --> | |
| </div> | |
| <!-- //join_agreement_box --> | |
| <!--{/ // isUseAdvertisingReceive end}--> | |
| </div> | |
| <!-- //join_agreement_cont --> | |
| <!--{ / }--> | |
변경 전my_page.html
| e.preventDefault(); | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.join_agreement_box'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| } | |
| }); | |
| gd_select_email_domain('email'); | |
| <!--{? (joinField.marriFl.use == 'y' && joinField.marriDate.use == 'y') || joinField.birthDt.use == 'y' }--> | |
변경 후my_page.html
| e.preventDefault(); | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.join_agreement_box'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5') || (e.target.id === 'termsAgree6') || (e.target.id === 'termsAgree7'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| } | |
| }); | |
| /* | |
| * 광고성 수신 동의 ↔ 이메일/모바일 수신 동의 ↔ 마케팅 목적 개인정보 수집 및 이용 동의 연동 | |
| * - 광고성 수신 동의 체크 → 이메일/모바일 채널 일괄 + 마케팅 목적 동의 ON | |
| * - 채널(1개 이상) 체크 → 광고성 수신 동의 + 마케팅 목적 동의 ON (채널은 각각 개별 토글) | |
| */ | |
| const checkMarketingApproval = function () { | |
| $('#privateMarketingConsentOptionFl', $formJoin).prop('checked', true).val('y').siblings('label').addClass('on'); | |
| $('#termsAgree6', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| }; | |
| $formJoin.on('change', '#termsAgree7', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $(this).siblings('label').toggleClass('on', isChecked); | |
| $('#advertisingReceiveAll', $formJoin).prop('checked', isChecked) | |
| .siblings('label').toggleClass('on', isChecked); | |
| $('.js_advertising_channel', $formJoin).prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } | |
| }); | |
| $formJoin.on('change', '#advertisingReceiveAll', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $('.js_advertising_channel', $formJoin).prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| // 전체선택(advertisingReceiveAll) 직접 조작 시 광고성 수신 동의(termsAgree7) 헤더도 동기화 | |
| $('#termsAgree7', $formJoin).prop('checked', isChecked).siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } | |
| }); | |
| $formJoin.on('change', '.js_advertising_channel', function () { | |
| const anyChannelChecked = $('.js_advertising_channel:checked', $formJoin).length > 0; | |
| const allChannelChecked = $('.js_advertising_channel', $formJoin).length > 0 | |
| && $('.js_advertising_channel:not(:checked)', $formJoin).length === 0; | |
| $('#advertisingReceiveAll', $formJoin).prop('checked', anyChannelChecked) | |
| .siblings('label').toggleClass('on', anyChannelChecked); | |
| if (anyChannelChecked) { | |
| checkMarketingApproval(); | |
| } | |
| // 수신 채널 전부 선택 시 광고성 수신 동의(termsAgree7) 헤더 ON (일부만이면 켜지 않음) | |
| if (allChannelChecked) { | |
| $('#termsAgree7', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| } | |
| if ($(this).prop('checked') === false) { | |
| $('#termsAgree7', $formJoin).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 체크 시 광고성 수신 동의·수신 채널 일괄 선택 | |
| const checkAdvertising = function () { | |
| if ($('#termsAgree7', $formJoin).length === 0) { | |
| return; | |
| } | |
| $('#termsAgree7', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| $('#advertisingReceiveAll', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| $('.js_advertising_channel', $formJoin).prop('checked', true).val('y').siblings('label').addClass('on'); | |
| }; | |
| $formJoin.on('change', '#privateMarketingConsentOptionFl', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } else { | |
| $('#termsAgree6', $formJoin).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 그룹 [선택] 헤더 체크 시 광고성 수신 동의·수신 채널 연동 | |
| $formJoin.on('change', '#termsAgree6', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } | |
| }); | |
| // 그룹 하위 항목이 모두 선택되면 상위 [선택] 헤더도 선택 (하나라도 해제 시 해제) | |
| $formJoin.on('change', '.join_agreement_box .agreement_choice_box :checkbox', function () { | |
| const $box = $(this).closest('.join_agreement_box'); | |
| const $header = $box.children('.form_element').children(':checkbox'); | |
| // 광고성 수신 동의(termsAgree7)는 채널 1개 이상 선택 의미라 전체 선택 동기화에서 제외 | |
| if ($header.attr('id') === 'termsAgree7') { | |
| return; | |
| } | |
| const $subs = $box.find('.agreement_choice_box :checkbox'); | |
| const allChecked = $subs.length > 0 && $subs.not(':checked').length === 0; | |
| $header.prop('checked', allChecked).siblings('label').toggleClass('on', allChecked); | |
| }); | |
| // 초기 로드: 저장된 하위 선택 상태로 상위 [선택] 헤더 동기화 | |
| $('.join_agreement_box', $formJoin).each(function () { | |
| const $box = $(this); | |
| const $header = $box.children('.form_element').children(':checkbox'); | |
| // 광고성 수신 동의(termsAgree7)는 채널 1개 이상 선택 의미라 전체 선택 동기화에서 제외 | |
| if ($header.attr('id') === 'termsAgree7') { | |
| return; | |
| } | |
| const $subs = $box.find('.agreement_choice_box :checkbox'); | |
| if ($subs.length > 0 && $subs.not(':checked').length === 0) { | |
| $header.prop('checked', true).siblings('label').addClass('on'); | |
| } | |
| }); | |
| // 초기 로드: 수신 채널이 전부 선택된 상태면 광고성 수신 동의(termsAgree7) 헤더 ON | |
| if ($('.js_advertising_channel', $formJoin).length > 0 | |
| && $('.js_advertising_channel:not(:checked)', $formJoin).length === 0) { | |
| $('#termsAgree7', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| } | |
| gd_select_email_domain('email'); | |
| <!--{? (joinField.marriFl.use == 'y' && joinField.marriDate.use == 'y') || joinField.birthDt.use == 'y' }--> | |
변경 전join_agreement.html
| </div> | |
| </div> | |
| <!-- {/} --> | |
| <p class="msg dn"> | |
| <span>{=__('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')}</span> | |
| </p> | |
| $('.terms-view :checkbox', $formTerms).change(function (e) { | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.terms-view'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| } | |
| }); | |
| /* | |
| * 14세 동의 항목 체크박스 이벤트 | |
| */ | |
| } | |
| }); | |
| } | |
| }); | |
| </script> | |
| { # footer } | |
변경 후join_agreement.html
| </div> | |
| </div> | |
| <!-- {/} --> | |
| <!-- {? privateMarketingMember['modeFl']=='y'} --> | |
| <div class="terms-view"> | |
| <p> | |
| <input type="checkbox" class="checkbox" id="termsAgree6" name=""> | |
| <label for="termsAgree6"> | |
| <span class="option"><strong>({=__('선택')})</strong></span> | |
| {=__('마케팅 목적 개인정보 수집 및 이용 동의')} | |
| </label> | |
| <a href="../service/agreement.php?code={privateMarketingMember['informCd']}" target="_blank">{=__('전체보기')}</a> | |
| </p> | |
| <div class="consignment-box"> | |
| <table summary="{=__('마케팅 목적 개인정보 수집 및 이용 동의 내용입니다.')}" class="" cellspacing="0" border="1"> | |
| <colgroup> | |
| <col width="79px"> | |
| <col> | |
| </colgroup> | |
| <thead> | |
| <tr> | |
| <th scope="col">{=__('선택')}</th> | |
| <th scope="col">{=nl2br(privateMarketingMember['informNm'])}</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr> | |
| <td> | |
| <span class="form-element"> | |
| <input type="checkbox" class="checkbox" id="privateMktApprovalOption" name="privateMarketingConsentOptionFl"> | |
| <label for="privateMktApprovalOption">{=__('선택')}</label> | |
| </span> | |
| </td> | |
| <td> | |
| <div> | |
| {=nl2br(privateMarketingMember['content'])} | |
| </div> | |
| </td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| </div> | |
| </div> | |
| <!-- {/} --> | |
| <!-- {? isUseAdvertisingReceive} --> | |
| <div class="terms-view"> | |
| <p> | |
| <input type="checkbox" class="checkbox" id="termsAgree7" name=""> | |
| <label for="termsAgree7"> | |
| <span class="option"><strong>({=__('선택')})</strong></span> | |
| {=__('광고성 수신 동의')} | |
| </label> | |
| <a href="../service/agreement.php?code={advertisingReceive['informCd']}" target="_blank">{=__('전체보기')}</a> | |
| </p> | |
| <div class="consignment-box"> | |
| <table summary="{=__('광고성 수신 동의 내용입니다.')}" class="" cellspacing="0" border="1"> | |
| <colgroup> | |
| <col width="79px"> | |
| <col> | |
| </colgroup> | |
| <thead> | |
| <tr> | |
| <th scope="col">{=__('선택')}</th> | |
| <th scope="col">{=nl2br(advertisingReceive['informNm'])}</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr> | |
| <td> | |
| <span class="form-element"> | |
| <input type="checkbox" class="checkbox" id="advertisingReceiveAll" name=""> | |
| <label for="advertisingReceiveAll">{=__('선택')}</label> | |
| </span> | |
| </td> | |
| <td> | |
| <div> | |
| {=nl2br(advertisingReceive['content'])} | |
| </div> | |
| </td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| <div class="js_advertising_channel_box" style="display:flex; flex-direction:column; align-items:flex-start; gap:8px; margin:10px;"> | |
| <!-- {? advertisingReceiveMailUse=='y'} --> | |
| <span class="form-element"> | |
| <input type="checkbox" class="checkbox js_advertising_channel" id="maillingFl" name="maillingFl"> | |
| <label for="maillingFl">{=__('이메일 수신 동의')}</label> | |
| </span> | |
| <!-- {/} --> | |
| <!-- {? advertisingReceiveSmsUse=='y'} --> | |
| <span class="form-element"> | |
| <input type="checkbox" class="checkbox js_advertising_channel" id="smsFl" name="smsFl"> | |
| <label for="smsFl">{=__('모바일 메시지 수신 동의')}</label> | |
| </span> | |
| <!-- {/} --> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- {/} --> | |
| <p class="msg dn"> | |
| <span>{=__('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')}</span> | |
| </p> | |
| $('.terms-view :checkbox', $formTerms).change(function (e) { | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.terms-view'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5') || (e.target.id === 'termsAgree6') || (e.target.id === 'termsAgree7'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| } | |
| }); | |
| /* | |
| * 광고성 수신 동의 ↔ 이메일/모바일 수신 동의 ↔ 마케팅 목적 개인정보 수집 및 이용 동의 연동 | |
| * - 광고성 수신 동의 체크 → 이메일/모바일 채널 일괄 + 마케팅 목적 동의 ON | |
| * - 채널(1개 이상) 체크 → 광고성 수신 동의 + 마케팅 목적 동의 ON (채널은 각각 개별 토글) | |
| */ | |
| const checkMarketingApproval = function () { | |
| $('#privateMktApprovalOption', $formTerms).prop('checked', true).val('y').siblings('label').addClass('on'); | |
| $('#termsAgree6', $formTerms).prop('checked', true).siblings('label').addClass('on'); | |
| }; | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 체크 시 광고성 수신 동의·수신 채널 일괄 선택 | |
| const checkAdvertising = function () { | |
| if ($('#termsAgree7', $formTerms).length === 0) { | |
| return; | |
| } | |
| $('#termsAgree7', $formTerms).prop('checked', true).siblings('label').addClass('on'); | |
| $('#advertisingReceiveAll', $formTerms).prop('checked', true).siblings('label').addClass('on'); | |
| $('.js_advertising_channel', $formTerms).prop('checked', true).val('y').siblings('label').addClass('on'); | |
| }; | |
| $formTerms.on('change', '#termsAgree7', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $(this).siblings('label').toggleClass('on', isChecked); | |
| $('#advertisingReceiveAll', $formTerms).prop('checked', isChecked) | |
| .siblings('label').toggleClass('on', isChecked); | |
| $('.js_advertising_channel', $formTerms).prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } | |
| }); | |
| $formTerms.on('change', '#advertisingReceiveAll', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $('.js_advertising_channel', $formTerms).prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } else { | |
| $('#termsAgree7', $formTerms).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| $formTerms.on('change', '.js_advertising_channel', function () { | |
| const anyChannelChecked = $('.js_advertising_channel:checked', $formTerms).length > 0; | |
| $('#advertisingReceiveAll', $formTerms).prop('checked', anyChannelChecked) | |
| .siblings('label').toggleClass('on', anyChannelChecked); | |
| if (anyChannelChecked) { | |
| checkMarketingApproval(); | |
| } | |
| if ($(this).prop('checked') === false) { | |
| $('#termsAgree7', $formTerms).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| $formTerms.on('change', '#privateMktApprovalOption', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } else { | |
| $('#termsAgree6', $formTerms).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| $formTerms.on('change', '#termsAgree6', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } | |
| }); | |
| /* | |
| * 14세 동의 항목 체크박스 이벤트 | |
| */ | |
| } | |
| }); | |
| } | |
| // 그룹 하위 항목이 모두 선택되면 상위 [선택] 헤더(termsAgree3~7)도 선택 (하나라도 해제 시 해제) | |
| $formTerms.on('change', '.terms-view .consignment-box :checkbox', function () { | |
| const $termsView = $(this).closest('.terms-view'); | |
| const $header = $termsView.children('p').children(':checkbox'); | |
| const $subs = $termsView.find('.consignment-box :checkbox'); | |
| const allChecked = $subs.length > 0 && $subs.not(':checked').length === 0; | |
| $header.prop('checked', allChecked).siblings('label').toggleClass('on', allChecked); | |
| }); | |
| /* | |
| * 전체 동의 역동기화 — 하위 체크박스가 모두 선택되면 전체 동의도 선택 (하나라도 해제되면 해제) | |
| */ | |
| const syncAllAgree = function () { | |
| const $targets = $(':checkbox', $formTerms).not('#allAgree').not('#termsAgree'); | |
| const allChecked = $targets.length > 0 && $targets.not(':checked').length === 0; | |
| $('#allAgree', $formTerms).prop('checked', allChecked) | |
| .siblings('label').toggleClass('on', allChecked); | |
| }; | |
| $formTerms.on('change', ':checkbox', function (e) { | |
| if (e.target.id === 'allAgree' || e.target.id === 'termsAgree') { | |
| return; | |
| } | |
| syncAllAgree(); | |
| }); | |
| }); | |
| </script> | |
| { # footer } | |
변경 전_join_view.html
| </select> | |
| </div> | |
| </div> | |
| <!--{? joinField.maillingFl.use === 'y'}--> | |
| <div class="form-element"> | |
| <input type="checkbox" class="checkbox" id="maillingFl" name="maillingFl" value="y" {? data.maillingFl == 'y'}checked="checked"{/}> | |
| <label for="maillingFl" class="{? data.maillingFl == 'y'}on{/}">{=__('정보/이벤트 메일 수신에 동의합니다.')}</label> | |
| </div> | |
| <!--{/}--> | |
| </td> | |
| </tr> | |
| <!--{/}--><!--{? joinField.cellPhone.use == 'y'}--> | |
| </button> | |
| <!--{ / }--> | |
| <!--{ / }--> | |
| <!--{? joinField.smsFl.use === 'y'}--> | |
| <div class="form-element"> | |
| <input type="checkbox" class="checkbox" id="smsFl" name="smsFl" value="y" {? data.smsFl == 'y'}checked="checked"{/}> | |
| <label for="smsFl" class="{? data.smsFl == 'y'}on{/}">{=__('정보/이벤트 SMS 수신에 동의합니다.')}</label> | |
| </div> | |
| <!--{/}--> | |
| </td> | |
| </tr> | |
| <!--{/}--><!--{? joinField.phone.use == 'y'}--> | |
변경 후_join_view.html
| </select> | |
| </div> | |
| </div> | |
| </td> | |
| </tr> | |
| <!--{/}--><!--{? joinField.cellPhone.use == 'y'}--> | |
| </button> | |
| <!--{ / }--> | |
| <!--{ / }--> | |
| </td> | |
| </tr> | |
| <!--{/}--><!--{? joinField.phone.use == 'y'}--> | |
변경 전_join_view_other.html
| </div> | |
| </div> | |
| <!--{/ // privateOffer modeFl end}--> | |
| <!--{/ // isMyPage end}--> | |
변경 후_join_view_other.html
| </div> | |
| </div> | |
| <!--{/ // privateOffer modeFl end}--> | |
| <!--{? privateMktApprovalOption[0]['modeFl'] == 'y'}--> | |
| <div class="terms-view"> | |
| <p> | |
| <input type="checkbox" class="checkbox" id="termsAgree6" name=""> | |
| <label for="termsAgree6"> | |
| <span class="option"> | |
| <strong>({=__('선택')})</strong> | |
| </span> | |
| {=__('마케팅 목적 개인정보 수집 및 이용 동의')} | |
| </label> | |
| <a href="../service/agreement.php?code={privateMktApprovalOption[0]['informCd']}" target="_blank">{=__('전체보기')}</a> | |
| </p> | |
| <div class="consignment-box"> | |
| <!--{@ privateMktApprovalOption}--> | |
| <table summary="{=__('마케팅 목적 개인정보 수집 및 이용 동의 내용입니다.')}" class="" cellspacing="0" border="1"> | |
| <colgroup> | |
| <col width="79px"> | |
| <col> | |
| </colgroup> | |
| <thead> | |
| <tr> | |
| <th scope="col">{=__('선택')}</th> | |
| <th scope="col">{=nl2br(.informNm)}</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr> | |
| <td> | |
| <span class="form-element"> | |
| <input type="checkbox" class="checkbox" id="privateMarketingConsentOptionFl" name="privateMarketingConsentOptionFl" value="y" <!--{? data['privateMarketingConsentOptionFl'] == 'y'}-->checked="checked"<!--{/}-->> | |
| <label class="<!--{? data['privateMarketingConsentOptionFl'] == 'y'}-->on<!--{/}-->" for="privateMarketingConsentOptionFl">{=__('선택')}</label> | |
| </span> | |
| </td> | |
| <td> | |
| <div> | |
| {=nl2br(.content)} | |
| </div> | |
| </td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| <!--{/ // privateMktApprovalOption loop end}--> | |
| </div> | |
| </div> | |
| <!--{/ // privateMktApprovalOption modeFl end}--> | |
| <!--{? isUseAdvertisingReceive}--> | |
| <div class="terms-view js_terms_view"> | |
| <p> | |
| <input type="checkbox" class="checkbox" id="termsAgree7" name=""> | |
| <label for="termsAgree7"> | |
| <span class="option"> | |
| <strong>({=__('선택')})</strong> | |
| </span> | |
| {=__('광고성 수신 동의')} | |
| </label> | |
| <a href="../service/agreement.php?code={advertisingReceive['informCd']}" target="_blank">{=__('전체보기')}</a> | |
| </p> | |
| <div class="consignment-box"> | |
| <table summary="{=__('광고성 수신 동의 내용입니다.')}" class="" cellspacing="0" border="1"> | |
| <colgroup> | |
| <col width="79px"> | |
| <col> | |
| </colgroup> | |
| <thead> | |
| <tr> | |
| <th scope="col">{=__('선택')}</th> | |
| <th scope="col">{=nl2br(advertisingReceive['informNm'])}</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr> | |
| <td> | |
| <span class="form-element"> | |
| <input type="checkbox" class="checkbox" id="advertisingReceiveAll" <!--{? data['maillingFl'] == 'y' || data['smsFl'] == 'y'}-->checked="checked"<!--{/}-->> | |
| <label class="<!--{? data['maillingFl'] == 'y' || data['smsFl'] == 'y'}-->on<!--{/}-->" for="advertisingReceiveAll">{=__('선택')}</label> | |
| </span> | |
| </td> | |
| <td> | |
| <div> | |
| {=nl2br(advertisingReceive['content'])} | |
| </div> | |
| </td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| <div class="js_advertising_channel_box" style="display:flex; flex-direction:column; align-items:flex-start; gap:8px; margin:10px;"> | |
| <!--{? advertisingReceiveMailUse == 'y'}--> | |
| <span class="form-element"> | |
| <input type="checkbox" class="checkbox js_advertising_channel" id="advertisingReceiveMail" name="maillingFl" value="y" <!--{? data['maillingFl'] == 'y'}-->checked="checked"<!--{/}-->> | |
| <label class="<!--{? data['maillingFl'] == 'y'}-->on<!--{/}-->" for="advertisingReceiveMail">{=__('이메일 수신 동의')}</label> | |
| </span> | |
| <!--{/}--> | |
| <!--{? advertisingReceiveSmsUse == 'y'}--> | |
| <span class="form-element"> | |
| <input type="checkbox" class="checkbox js_advertising_channel" id="advertisingReceiveSms" name="smsFl" value="y" <!--{? data['smsFl'] == 'y'}-->checked="checked"<!--{/}-->> | |
| <label class="<!--{? data['smsFl'] == 'y'}-->on<!--{/}-->" for="advertisingReceiveSms">{=__('모바일 메시지 수신 동의')}</label> | |
| </span> | |
| <!--{/}--> | |
| </div> | |
| </div> | |
| </div> | |
| <!--{/ // isUseAdvertisingReceive end}--> | |
| <!--{/ // isMyPage end}--> | |
변경 전my_page.html
| e.preventDefault(); | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.terms-view'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| } | |
| }); | |
| select_email_domain('email'); | |
| <!--{? (joinField.marriFl.use == 'y' && joinField.marriDate.use == 'y') || joinField.birthDt.use == 'y' }--> | |
변경 후my_page.html
| e.preventDefault(); | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.terms-view'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5') || (e.target.id === 'termsAgree6') || (e.target.id === 'termsAgree7'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| } | |
| }); | |
| /* | |
| * 광고성 수신 동의 ↔ 이메일/모바일 수신 동의 ↔ 마케팅 목적 개인정보 수집 및 이용 동의 연동 | |
| * - 광고성 수신 동의 체크 → 이메일/모바일 채널 일괄 + 마케팅 목적 동의 ON | |
| * - 채널(1개 이상) 체크 → 광고성 수신 동의 + 마케팅 목적 동의 ON (채널은 각각 개별 토글) | |
| */ | |
| const checkMarketingApproval = function () { | |
| $('#privateMarketingConsentOptionFl', $formJoin).prop('checked', true).val('y').siblings('label').addClass('on'); | |
| $('#termsAgree6', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| }; | |
| $formJoin.on('change', '#termsAgree7', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $(this).siblings('label').toggleClass('on', isChecked); | |
| $('#advertisingReceiveAll', $formJoin).prop('checked', isChecked) | |
| .siblings('label').toggleClass('on', isChecked); | |
| $('.js_advertising_channel', $formJoin).prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } | |
| }); | |
| $formJoin.on('change', '#advertisingReceiveAll', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $('.js_advertising_channel', $formJoin).prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| // 전체선택(advertisingReceiveAll) 직접 조작 시 광고성 수신 동의(termsAgree7) 헤더도 동기화 | |
| $('#termsAgree7', $formJoin).prop('checked', isChecked).siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } | |
| }); | |
| $formJoin.on('change', '.js_advertising_channel', function () { | |
| const anyChannelChecked = $('.js_advertising_channel:checked', $formJoin).length > 0; | |
| const allChannelChecked = $('.js_advertising_channel', $formJoin).length > 0 | |
| && $('.js_advertising_channel:not(:checked)', $formJoin).length === 0; | |
| $('#advertisingReceiveAll', $formJoin).prop('checked', anyChannelChecked) | |
| .siblings('label').toggleClass('on', anyChannelChecked); | |
| if (anyChannelChecked) { | |
| checkMarketingApproval(); | |
| } | |
| // 수신 채널 전부 선택 시 광고성 수신 동의(termsAgree7) 헤더 ON (일부만이면 켜지 않음) | |
| if (allChannelChecked) { | |
| $('#termsAgree7', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| } | |
| if ($(this).prop('checked') === false) { | |
| $('#termsAgree7', $formJoin).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 체크 시 광고성 수신 동의·수신 채널 일괄 선택 | |
| const checkAdvertising = function () { | |
| if ($('#termsAgree7', $formJoin).length === 0) { | |
| return; | |
| } | |
| $('#termsAgree7', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| $('#advertisingReceiveAll', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| $('.js_advertising_channel', $formJoin).prop('checked', true).val('y').siblings('label').addClass('on'); | |
| }; | |
| $formJoin.on('change', '#privateMarketingConsentOptionFl', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } else { | |
| $('#termsAgree6', $formJoin).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 그룹 [선택] 헤더 체크 시 광고성 수신 동의·수신 채널 연동 | |
| $formJoin.on('change', '#termsAgree6', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } | |
| }); | |
| // 그룹 하위 항목이 모두 선택되면 상위 [선택] 헤더도 선택 (하나라도 해제 시 해제) | |
| // - story_g 는 약관 그룹 마크업이 .terms-view / .consignment-box 구조 (moment·mygreek 의 .join_agreement_box 아님) | |
| $formJoin.on('change', '.terms-view .consignment-box :checkbox', function () { | |
| const $box = $(this).closest('.terms-view'); | |
| const $subs = $box.find('.consignment-box :checkbox'); | |
| const $header = $box.find(':checkbox').not($subs); | |
| // 광고성 수신 동의(termsAgree7)는 채널 1개 이상 선택 의미라 전체 선택 동기화에서 제외 | |
| if ($header.attr('id') === 'termsAgree7') { | |
| return; | |
| } | |
| const allChecked = $subs.length > 0 && $subs.not(':checked').length === 0; | |
| $header.prop('checked', allChecked).siblings('label').toggleClass('on', allChecked); | |
| }); | |
| // 초기 로드: 저장된 하위 선택 상태로 상위 [선택] 헤더 동기화 | |
| $('.terms-view', $formJoin).each(function () { | |
| const $box = $(this); | |
| const $subs = $box.find('.consignment-box :checkbox'); | |
| const $header = $box.find(':checkbox').not($subs); | |
| // 광고성 수신 동의(termsAgree7)는 채널 1개 이상 선택 의미라 전체 선택 동기화에서 제외 | |
| if ($header.attr('id') === 'termsAgree7') { | |
| return; | |
| } | |
| if ($subs.length > 0 && $subs.not(':checked').length === 0) { | |
| $header.prop('checked', true).siblings('label').addClass('on'); | |
| } | |
| }); | |
| // 초기 로드: 수신 채널이 전부 선택된 상태면 광고성 수신 동의(termsAgree7) 헤더 ON | |
| if ($('.js_advertising_channel', $formJoin).length > 0 | |
| && $('.js_advertising_channel:not(:checked)', $formJoin).length === 0) { | |
| $('#termsAgree7', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| } | |
| select_email_domain('email'); | |
| <!--{? (joinField.marriFl.use == 'y' && joinField.marriDate.use == 'y') || joinField.birthDt.use == 'y' }--> | |
변경 전join_agreement.html
| <!-- //privacy_content --> | |
| </div> | |
| <!--{/}--> | |
| <p class="msg dn"> | |
| <span>{=__('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')}</span> | |
| </p> | |
| e.preventDefault(); | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.privacy_box'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| } | |
| }); | |
| /* | |
| * 14세 동의 항목 체크박스 이벤트 | |
| */ | |
| /* | |
| * 약관 내용보기 이벤트 | |
| */ | |
| $('.privacy_box dd button').on({ | |
| 'click':function(){ | |
| var privacy_dp = $(this).parent().parent().parent().find('> .privacy_content').css('display'); | |
| if(privacy_dp == 'none'){ | |
| } | |
| }); | |
| window.addEventListener('message', function (e) { | |
| if (e.origin === "{=authDreamUrl}") { | |
| $('#layerSearch').remove(); | |
| } | |
| }); | |
| }); | |
| /** | |
변경 후join_agreement.html
| <!-- //privacy_content --> | |
| </div> | |
| <!--{/}--> | |
| <!--{? privateMarketingMember['modeFl']=='y'}--> | |
| <div class="privacy_box"> | |
| <dl> | |
| <dt> | |
| <span class="inp_chk"> | |
| <input type="checkbox" id="termsAgree6"/> | |
| <label for="termsAgree6">({=__('선택')}) {=__('마케팅 목적 개인정보 수집 및 이용 동의')}</label> | |
| </span> | |
| </dt> | |
| <dd><button type="button">{=__('내용보기')} ▼</button></dd> | |
| </dl> | |
| <div class="privacy_content"> | |
| <div class="privacy_big_box"> | |
| <dl> | |
| <dt> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="sp" id="privateMktApprovalOption" name="privateMarketingConsentOptionFl"/> | |
| <label for="privateMktApprovalOption">{=nl2br(privateMarketingMember['informNm'])}</label> | |
| </span> | |
| </dt> | |
| <dd><button type="button" class="js_agreement_view" data-code="{privateMarketingMember['informCd']}">{=__('전체보기')}</button></dd> | |
| </dl> | |
| <div class="privacy_content"> | |
| <div>{=nl2br(privateMarketingMember['content'])}</div> | |
| </div> | |
| <!-- //privacy_content --> | |
| </div> | |
| <!-- //privacy_big_box --> | |
| </div> | |
| <!-- //privacy_content --> | |
| </div> | |
| <!--{/}--> | |
| <!--{? isUseAdvertisingReceive}--> | |
| <div class="privacy_box"> | |
| <dl> | |
| <dt> | |
| <span class="inp_chk"> | |
| <input type="checkbox" id="termsAgree7"/> | |
| <label for="termsAgree7">({=__('선택')}) {=__('광고성 수신 동의')}</label> | |
| </span> | |
| </dt> | |
| <dd><button type="button">{=__('내용보기')} ▼</button></dd> | |
| </dl> | |
| <div class="privacy_content"> | |
| <div class="privacy_big_box"> | |
| <dl> | |
| <dt> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="sp" id="advertisingReceiveAll"/> | |
| <label for="advertisingReceiveAll">{=nl2br(advertisingReceive['informNm'])}</label> | |
| </span> | |
| </dt> | |
| <dd><button type="button" class="js_agreement_view" data-code="{advertisingReceive['informCd']}">{=__('전체보기')}</button></dd> | |
| </dl> | |
| <div class="privacy_content"> | |
| <div>{=nl2br(advertisingReceive['content'])}</div> | |
| </div> | |
| <!-- //privacy_content --> | |
| </div> | |
| <!-- //privacy_big_box --> | |
| <div class="js_advertising_channel_box" style="display:flex; flex-direction:column; align-items:flex-start; margin:10px;"> | |
| <!--{? advertisingReceiveMailUse=='y'}--> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="sp js_advertising_channel" id="maillingFl" name="maillingFl"/> | |
| <label for="maillingFl">{=__('이메일 수신 동의')}</label> | |
| </span> | |
| <!--{/}--> | |
| <!--{? advertisingReceiveSmsUse=='y'}--> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="sp js_advertising_channel" id="smsFl" name="smsFl"/> | |
| <label for="smsFl">{=__('모바일 메시지 수신 동의')}</label> | |
| </span> | |
| <!--{/}--> | |
| </div> | |
| </div> | |
| <!-- //privacy_content --> | |
| </div> | |
| <!--{/}--> | |
| <p class="msg dn"> | |
| <span>{=__('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')}</span> | |
| </p> | |
| e.preventDefault(); | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.privacy_box'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5') || (e.target.id === 'termsAgree6') || (e.target.id === 'termsAgree7'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| } | |
| }); | |
| /* | |
| * 광고성 수신 동의 ↔ 이메일/모바일 수신 동의 ↔ 마케팅 목적 개인정보 수집 및 이용 동의 연동 | |
| * - 광고성 수신 동의 체크 → 이메일/모바일 채널 일괄 + 마케팅 목적 동의 ON | |
| * - 채널(1개 이상) 체크 → 광고성 수신 동의 + 마케팅 목적 동의 ON (채널은 각각 개별 토글) | |
| */ | |
| const checkMarketingApproval = function () { | |
| $('#privateMktApprovalOption', $formTerms).prop('checked', true).val('y').siblings('label').addClass('on'); | |
| $('#termsAgree6', $formTerms).prop('checked', true).siblings('label').addClass('on'); | |
| }; | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 체크 시 광고성 수신 동의·수신 채널 일괄 선택 | |
| const checkAdvertising = function () { | |
| if ($('#termsAgree7', $formTerms).length === 0) { | |
| return; | |
| } | |
| $('#termsAgree7', $formTerms).prop('checked', true).siblings('label').addClass('on'); | |
| $('#advertisingReceiveAll', $formTerms).prop('checked', true).siblings('label').addClass('on'); | |
| $('.js_advertising_channel', $formTerms).prop('checked', true).val('y').siblings('label').addClass('on'); | |
| }; | |
| $formTerms.on('change', '#termsAgree7', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $(this).siblings('label').toggleClass('on', isChecked); | |
| $('#advertisingReceiveAll', $formTerms).prop('checked', isChecked) | |
| .siblings('label').toggleClass('on', isChecked); | |
| $('.js_advertising_channel', $formTerms).prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } | |
| }); | |
| $formTerms.on('change', '#advertisingReceiveAll', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $('.js_advertising_channel', $formTerms).prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } else { | |
| $('#termsAgree7', $formTerms).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| $formTerms.on('change', '.js_advertising_channel', function () { | |
| const anyChannelChecked = $('.js_advertising_channel:checked', $formTerms).length > 0; | |
| $('#advertisingReceiveAll', $formTerms).prop('checked', anyChannelChecked) | |
| .siblings('label').toggleClass('on', anyChannelChecked); | |
| if (anyChannelChecked) { | |
| checkMarketingApproval(); | |
| } | |
| if ($(this).prop('checked') === false) { | |
| $('#termsAgree7', $formTerms).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| $formTerms.on('change', '#privateMktApprovalOption', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } else { | |
| $('#termsAgree6', $formTerms).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| $formTerms.on('change', '#termsAgree6', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } | |
| }); | |
| /* | |
| * 14세 동의 항목 체크박스 이벤트 | |
| */ | |
| /* | |
| * 약관 내용보기 이벤트 | |
| */ | |
| $('.privacy_box dd button:not(.js_agreement_view)').on({ | |
| 'click':function(){ | |
| var privacy_dp = $(this).parent().parent().parent().find('> .privacy_content').css('display'); | |
| if(privacy_dp == 'none'){ | |
| } | |
| }); | |
| // 약관 전문 새창 열기 (전체보기) | |
| $('.js_agreement_view').on('click', function () { | |
| window.open('../service/agreement.php?code=' + $(this).data('code')); | |
| }); | |
| window.addEventListener('message', function (e) { | |
| if (e.origin === "{=authDreamUrl}") { | |
| $('#layerSearch').remove(); | |
| } | |
| }); | |
| // 그룹 하위 항목이 모두 선택되면 상위 [선택] 헤더(termsAgree3~7)도 선택 (하나라도 해제 시 해제) | |
| $formTerms.on('change', '.privacy_box :checkbox', function () { | |
| const $box = $(this).closest('.privacy_box'); | |
| const $header = $box.children('dl').find(':checkbox'); | |
| const $subs = $box.find(':checkbox').not($header); | |
| if ($subs.length === 0) { | |
| return; | |
| } | |
| const allChecked = $subs.not(':checked').length === 0; | |
| $header.prop('checked', allChecked).siblings('label').toggleClass('on', allChecked); | |
| }); | |
| /* | |
| * 전체 동의 역동기화 — 하위 체크박스가 모두 선택되면 전체 동의도 선택 (하나라도 해제되면 해제) | |
| */ | |
| const syncAllAgree = function () { | |
| const $targets = $(':checkbox', $formTerms).not('#allAgree').not('#termsAgree'); | |
| const allChecked = $targets.length > 0 && $targets.not(':checked').length === 0; | |
| $('#allAgree', $formTerms).prop('checked', allChecked) | |
| .siblings('label').toggleClass('on', allChecked); | |
| }; | |
| $formTerms.on('change', ':checkbox', function (e) { | |
| if (e.target.id === 'allAgree' || e.target.id === 'termsAgree') { | |
| return; | |
| } | |
| syncAllAgree(); | |
| }); | |
| }); | |
| /** | |
변경 전_join_view.html
| <div class="input_wrap"> | |
| <div class="input_title"></div> | |
| <div class="input_content"> | |
| <!--{? joinField.maillingFl.use === 'y'}--> | |
| <div class="description"> | |
| <span class="inp_chk"> | |
| <input type="checkbox" id="maillingFl" class="ignore" name="maillingFl" value="y" {? data.maillingFl=='y'}checked="checked"{/}/> | |
| <label for="maillingFl">{=__('정보/이벤트 메일 수신에 동의합니다.')}</label> | |
| </span> | |
| </div> | |
| <!--{/}--> | |
| <div class="description">※ {=__('아이디 비밀번호 찾기에 활용 되므로 정확하게 입력해 주세요')}</div> | |
| </div> | |
| </div> | |
| <!--{ / }--> | |
| </div> | |
| </div> | |
| <!--{? joinField.smsFl.use === 'y'}--> | |
| <div class="input_wrap"> | |
| <div class="input_title"></div> | |
| <div class="input_content"> | |
| <div class="description"> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="ignore" id="smsFl" name="smsFl" value="y" {? data.smsFl=='y'}checked="checked"{/}/> | |
| <label for="smsFl">{=__('정보/이벤트 SMS 수신에 동의합니다.')}</label> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| <!--{/}--> | |
| <!--{? joinField.phone.use == 'y'}--> | |
| <div class="input_wrap"> | |
변경 후_join_view.html
| <div class="input_wrap"> | |
| <div class="input_title"></div> | |
| <div class="input_content"> | |
| <div class="description">※ {=__('아이디 비밀번호 찾기에 활용 되므로 정확하게 입력해 주세요')}</div> | |
| </div> | |
| </div> | |
| <!--{ / }--> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| <!--{? joinField.phone.use == 'y'}--> | |
| <div class="input_wrap"> | |
변경 전_join_view_other.html
| <!--{/}--> | |
| </div> | |
| <!--{/}--> | |
| <!--{? privateApprovalOption[0]['modeFl'] == 'y' || privateConsign[0]['modeFl']=='y' || privateOffer[0]['modeFl']=='y'}--> | |
| <p class="tit">{=__('약관동의현황')}</p> | |
| <!--{? privateApprovalOption[0]['modeFl'] == 'y'}--> | |
| <div class="privacy_big_box"> | |
| </div> | |
| </div> | |
| <!--{/ // privateOffer modeFl end}--> | |
| <!--{/}--> | |
| <script type="text/javascript"> | |
| $(document).ready(function() { | |
| e.preventDefault(); | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.privacy_box'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| /* | |
| * 약관 내용보기 이벤트 | |
| */ | |
| $('.privacy_box dd button').on({ | |
| 'click':function(){ | |
| var privacy_dp = $(this).parent().parent().parent().find('> .privacy_content').css('display'); | |
| if(privacy_dp == 'none'){ | |
변경 후_join_view_other.html
| <!--{/}--> | |
| </div> | |
| <!--{/}--> | |
| <!--{? privateApprovalOption[0]['modeFl'] == 'y' || privateConsign[0]['modeFl']=='y' || privateOffer[0]['modeFl']=='y' || privateMktApprovalOption[0]['modeFl']=='y' || isUseAdvertisingReceive}--> | |
| <p class="tit">{=__('약관동의현황')}</p> | |
| <!--{? privateApprovalOption[0]['modeFl'] == 'y'}--> | |
| <div class="privacy_big_box"> | |
| </div> | |
| </div> | |
| <!--{/ // privateOffer modeFl end}--> | |
| <!--{? privateMktApprovalOption[0]['modeFl'] == 'y'}--> | |
| <div class="privacy_big_box"> | |
| <div class="privacy_box"> | |
| <dl> | |
| <dt> | |
| <span class="inp_chk"> | |
| <input type="checkbox" id="termsAgree6" name=""/> | |
| <label for="termsAgree6">({=__('선택')}) {=__('마케팅 목적 개인정보 수집 및 이용 동의')}</label> | |
| </span> | |
| </dt> | |
| <dd><button type="button">{=__('내용보기')} ▼</button></dd> | |
| </dl> | |
| <div class="privacy_content"> | |
| <!--{@ privateMktApprovalOption}--> | |
| <div class="privacy_big_box"> | |
| <div class="privacy_box"> | |
| <dl> | |
| <dt> | |
| <span class="inp_chk"> | |
| <input type="checkbox" id="privateMarketingConsentOptionFl" name="privateMarketingConsentOptionFl" value="y" <!--{? data['privateMarketingConsentOptionFl'] == 'y'}-->checked="checked"<!--{/}-->/> | |
| <label for="privateMarketingConsentOptionFl">{=nl2br(.informNm)}</label> | |
| </span> | |
| </dt> | |
| <dd><button type="button" class="js_agreement_view" data-code="{.informCd}">{=__('전체보기')}</button></dd> | |
| </dl> | |
| <div class="privacy_content"> | |
| <div>{=nl2br(.content)}</div> | |
| </div> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </div> | |
| </div> | |
| </div> | |
| <!--{/ // privateMktApprovalOption modeFl end}--> | |
| <!--{? isUseAdvertisingReceive}--> | |
| <div class="privacy_big_box"> | |
| <div class="privacy_box"> | |
| <dl> | |
| <dt> | |
| <span class="inp_chk"> | |
| <input type="checkbox" id="termsAgree7" name=""/> | |
| <label for="termsAgree7">({=__('선택')}) {=__('광고성 수신 동의')}</label> | |
| </span> | |
| </dt> | |
| <dd><button type="button">{=__('내용보기')} ▼</button></dd> | |
| </dl> | |
| <div class="privacy_content"> | |
| <div class="privacy_big_box"> | |
| <div class="privacy_box"> | |
| <dl> | |
| <dt> | |
| <span class="inp_chk"> | |
| <input type="checkbox" id="advertisingReceiveAll" name="" <!--{? data['maillingFl'] == 'y' || data['smsFl'] == 'y'}-->checked="checked"<!--{/}-->/> | |
| <label for="advertisingReceiveAll">{=nl2br(advertisingReceive['informNm'])}</label> | |
| </span> | |
| </dt> | |
| <dd><button type="button" class="js_agreement_view" data-code="{advertisingReceive['informCd']}">{=__('전체보기')}</button></dd> | |
| </dl> | |
| <div class="privacy_content"> | |
| <div>{=nl2br(advertisingReceive['content'])}</div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="js_advertising_channel_box" style="display:flex; flex-direction:column; align-items:flex-start; margin:10px;"> | |
| <!--{? advertisingReceiveMailUse == 'y'}--> | |
| <span class="inp_chk"> | |
| <input type="checkbox" id="advertisingReceiveMail" name="maillingFl" value="y" class="js_advertising_channel" <!--{? data['maillingFl'] == 'y'}-->checked="checked"<!--{/}-->/> | |
| <label for="advertisingReceiveMail">{=__('이메일 수신 동의')}</label> | |
| </span> | |
| <!--{/}--> | |
| <!--{? advertisingReceiveSmsUse == 'y'}--> | |
| <span class="inp_chk"> | |
| <input type="checkbox" id="advertisingReceiveSms" name="smsFl" value="y" class="js_advertising_channel" <!--{? data['smsFl'] == 'y'}-->checked="checked"<!--{/}-->/> | |
| <label for="advertisingReceiveSms">{=__('모바일 메시지 수신 동의')}</label> | |
| </span> | |
| <!--{/}--> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!--{/ // isUseAdvertisingReceive end}--> | |
| <!--{/}--> | |
| <script type="text/javascript"> | |
| $(document).ready(function() { | |
| e.preventDefault(); | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.privacy_box'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5') || (e.target.id === 'termsAgree6') || (e.target.id === 'termsAgree7'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| /* | |
| * 약관 내용보기 이벤트 | |
| */ | |
| $('.js_agreement_view').on('click', function () { | |
| window.open('../service/agreement.php?code=' + $(this).data('code')); | |
| }); | |
| $('.privacy_box dd button:not(.js_agreement_view)').on({ | |
| 'click':function(){ | |
| var privacy_dp = $(this).parent().parent().parent().find('> .privacy_content').css('display'); | |
| if(privacy_dp == 'none'){ | |
변경 전my_page.html
| e.preventDefault(); | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.privacy_box'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| } | |
| }); | |
| gd_select_email_domain('email'); | |
| <!--{? (joinField.marriFl.use == 'y' && joinField.marriDate.use == 'y') || joinField.birthDt.use == 'y' }--> | |
변경 후my_page.html
| e.preventDefault(); | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.privacy_box'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5') || (e.target.id === 'termsAgree6') || (e.target.id === 'termsAgree7'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| } | |
| }); | |
| /* | |
| * 광고성 수신 동의 ↔ 이메일/모바일 수신 동의 ↔ 마케팅 목적 개인정보 수집 및 이용 동의 연동 | |
| * - 광고성 수신 동의 체크 → 이메일/모바일 채널 일괄 + 마케팅 목적 동의 ON | |
| * - 채널(1개 이상) 체크 → 광고성 수신 동의 + 마케팅 목적 동의 ON (채널은 각각 개별 토글) | |
| */ | |
| const checkMarketingApproval = function () { | |
| $('#privateMarketingConsentOptionFl', $formJoin).prop('checked', true).val('y').siblings('label').addClass('on'); | |
| $('#termsAgree6', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| }; | |
| $formJoin.on('change', '#termsAgree7', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $(this).siblings('label').toggleClass('on', isChecked); | |
| $('#advertisingReceiveAll', $formJoin).prop('checked', isChecked) | |
| .siblings('label').toggleClass('on', isChecked); | |
| $('.js_advertising_channel', $formJoin).prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } | |
| }); | |
| $formJoin.on('change', '#advertisingReceiveAll', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $('.js_advertising_channel', $formJoin).prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| // 전체선택(advertisingReceiveAll) 직접 조작 시 광고성 수신 동의(termsAgree7) 헤더도 동기화 | |
| $('#termsAgree7', $formJoin).prop('checked', isChecked).siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } | |
| }); | |
| $formJoin.on('change', '.js_advertising_channel', function () { | |
| const anyChannelChecked = $('.js_advertising_channel:checked', $formJoin).length > 0; | |
| const allChannelChecked = $('.js_advertising_channel', $formJoin).length > 0 | |
| && $('.js_advertising_channel:not(:checked)', $formJoin).length === 0; | |
| $('#advertisingReceiveAll', $formJoin).prop('checked', anyChannelChecked) | |
| .siblings('label').toggleClass('on', anyChannelChecked); | |
| if (anyChannelChecked) { | |
| checkMarketingApproval(); | |
| } | |
| // 수신 채널 전부 선택 시 광고성 수신 동의(termsAgree7) 헤더 ON (일부만이면 켜지 않음) | |
| if (allChannelChecked) { | |
| $('#termsAgree7', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| } | |
| if ($(this).prop('checked') === false) { | |
| $('#termsAgree7', $formJoin).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 체크 시 광고성 수신 동의·수신 채널 일괄 선택 | |
| const checkAdvertising = function () { | |
| if ($('#termsAgree7', $formJoin).length === 0) { | |
| return; | |
| } | |
| $('#termsAgree7', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| $('#advertisingReceiveAll', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| $('.js_advertising_channel', $formJoin).prop('checked', true).val('y').siblings('label').addClass('on'); | |
| }; | |
| $formJoin.on('change', '#privateMarketingConsentOptionFl', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } else { | |
| $('#termsAgree6', $formJoin).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 그룹 [선택] 헤더 체크 시 광고성 수신 동의·수신 채널 연동 | |
| $formJoin.on('change', '#termsAgree6', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } | |
| }); | |
| // 그룹 하위 항목이 모두 선택되면 상위 [선택] 헤더도 선택 (하나라도 해제 시 해제) — 중첩 privacy_box 대응: 헤더 기준으로 그룹 판정 | |
| $formJoin.on('change', '.privacy_box :checkbox', function () { | |
| $('#termsAgree3, #termsAgree4, #termsAgree5, #termsAgree6', $formJoin).each(function () { | |
| const $header = $(this); | |
| const $subs = $header.closest('.privacy_box').find(':checkbox').not($header); | |
| if ($subs.length === 0) { | |
| return; | |
| } | |
| const allChecked = $subs.not(':checked').length === 0; | |
| $header.prop('checked', allChecked).siblings('label').toggleClass('on', allChecked); | |
| }); | |
| }); | |
| // 초기 로드: 저장된 하위 선택 상태로 상위 [선택] 헤더 동기화 | |
| $('#termsAgree3, #termsAgree4, #termsAgree5, #termsAgree6', $formJoin).each(function () { | |
| const $subs = $(this).closest('.privacy_box').find(':checkbox').not(this); | |
| if ($subs.length > 0 && $subs.not(':checked').length === 0) { | |
| $(this).prop('checked', true).siblings('label').addClass('on'); | |
| } | |
| }); | |
| // 초기 로드: 수신 채널이 전부 선택된 상태면 광고성 수신 동의(termsAgree7) 헤더 ON | |
| if ($('.js_advertising_channel', $formJoin).length > 0 | |
| && $('.js_advertising_channel:not(:checked)', $formJoin).length === 0) { | |
| $('#termsAgree7', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| } | |
| gd_select_email_domain('email'); | |
| <!--{? (joinField.marriFl.use == 'y' && joinField.marriDate.use == 'y') || joinField.birthDt.use == 'y' }--> | |
변경 전join_agreement.html
| <!-- //privacy_content --> | |
| </div> | |
| <!--{/}--> | |
| <p class="msg dn"> | |
| <span>{=__('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')}</span> | |
| </p> | |
| e.preventDefault(); | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.privacy_box'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| } | |
| }); | |
| /* | |
| * 14세 동의 항목 체크박스 이벤트 | |
| */ | |
| /* | |
| * 약관 내용보기 이벤트 | |
| */ | |
| $('.privacy_box dd button').on({ | |
| 'click':function(){ | |
| var privacy_dp = $(this).parent().parent().parent().find('> .privacy_content').css('display'); | |
| if(privacy_dp == 'none'){ | |
| } | |
| }); | |
| window.addEventListener('message', function (e) { | |
| if (e.origin === "{=authDreamUrl}") { | |
| $('#layerSearch').remove(); | |
| } | |
| }); | |
| }); | |
| /** | |
변경 후join_agreement.html
| <!-- //privacy_content --> | |
| </div> | |
| <!--{/}--> | |
| <!--{? privateMarketingMember['modeFl']=='y'}--> | |
| <div class="privacy_box"> | |
| <dl> | |
| <dt> | |
| <span class="inp_chk"> | |
| <input type="checkbox" id="termsAgree6"/> | |
| <label for="termsAgree6">({=__('선택')}) {=__('마케팅 목적 개인정보 수집 및 이용 동의')}</label> | |
| </span> | |
| </dt> | |
| <dd><button type="button">{=__('내용보기')} ▼</button></dd> | |
| </dl> | |
| <div class="privacy_content"> | |
| <div class="privacy_big_box"> | |
| <dl> | |
| <dt> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="sp" id="privateMktApprovalOption" name="privateMarketingConsentOptionFl"/> | |
| <label for="privateMktApprovalOption">{=nl2br(privateMarketingMember['informNm'])}</label> | |
| </span> | |
| </dt> | |
| <dd><button type="button" class="js_agreement_view" data-code="{privateMarketingMember['informCd']}">{=__('전체보기')}</button></dd> | |
| </dl> | |
| <div class="privacy_content"> | |
| <div>{=nl2br(privateMarketingMember['content'])}</div> | |
| </div> | |
| <!-- //privacy_content --> | |
| </div> | |
| <!-- //privacy_big_box --> | |
| </div> | |
| <!-- //privacy_content --> | |
| </div> | |
| <!--{/}--> | |
| <!--{? isUseAdvertisingReceive}--> | |
| <div class="privacy_box"> | |
| <dl> | |
| <dt> | |
| <span class="inp_chk"> | |
| <input type="checkbox" id="termsAgree7"/> | |
| <label for="termsAgree7">({=__('선택')}) {=__('광고성 수신 동의')}</label> | |
| </span> | |
| </dt> | |
| <dd><button type="button">{=__('내용보기')} ▼</button></dd> | |
| </dl> | |
| <div class="privacy_content"> | |
| <div class="privacy_big_box"> | |
| <dl> | |
| <dt> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="sp" id="advertisingReceiveAll"/> | |
| <label for="advertisingReceiveAll">{=nl2br(advertisingReceive['informNm'])}</label> | |
| </span> | |
| </dt> | |
| <dd><button type="button" class="js_agreement_view" data-code="{advertisingReceive['informCd']}">{=__('전체보기')}</button></dd> | |
| </dl> | |
| <div class="privacy_content"> | |
| <div>{=nl2br(advertisingReceive['content'])}</div> | |
| </div> | |
| <!-- //privacy_content --> | |
| </div> | |
| <!-- //privacy_big_box --> | |
| <div class="js_advertising_channel_box" style="display:flex; flex-direction:column; align-items:flex-start; margin:10px;"> | |
| <!--{? advertisingReceiveMailUse=='y'}--> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="sp js_advertising_channel" id="maillingFl" name="maillingFl"/> | |
| <label for="maillingFl">{=__('이메일 수신 동의')}</label> | |
| </span> | |
| <!--{/}--> | |
| <!--{? advertisingReceiveSmsUse=='y'}--> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="sp js_advertising_channel" id="smsFl" name="smsFl"/> | |
| <label for="smsFl">{=__('모바일 메시지 수신 동의')}</label> | |
| </span> | |
| <!--{/}--> | |
| </div> | |
| </div> | |
| <!-- //privacy_content --> | |
| </div> | |
| <!--{/}--> | |
| <p class="msg dn"> | |
| <span>{=__('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')}</span> | |
| </p> | |
| e.preventDefault(); | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.privacy_box'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5') || (e.target.id === 'termsAgree6') || (e.target.id === 'termsAgree7'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| } | |
| }); | |
| /* | |
| * 광고성 수신 동의 ↔ 이메일/모바일 수신 동의 ↔ 마케팅 목적 개인정보 수집 및 이용 동의 연동 | |
| * - 광고성 수신 동의 체크 → 이메일/모바일 채널 일괄 + 마케팅 목적 동의 ON | |
| * - 채널(1개 이상) 체크 → 광고성 수신 동의 + 마케팅 목적 동의 ON (채널은 각각 개별 토글) | |
| */ | |
| const checkMarketingApproval = function () { | |
| $('#privateMktApprovalOption', $formTerms).prop('checked', true).val('y').siblings('label').addClass('on'); | |
| $('#termsAgree6', $formTerms).prop('checked', true).siblings('label').addClass('on'); | |
| }; | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 체크 시 광고성 수신 동의·수신 채널 일괄 선택 | |
| const checkAdvertising = function () { | |
| if ($('#termsAgree7', $formTerms).length === 0) { | |
| return; | |
| } | |
| $('#termsAgree7', $formTerms).prop('checked', true).siblings('label').addClass('on'); | |
| $('#advertisingReceiveAll', $formTerms).prop('checked', true).siblings('label').addClass('on'); | |
| $('.js_advertising_channel', $formTerms).prop('checked', true).val('y').siblings('label').addClass('on'); | |
| }; | |
| $formTerms.on('change', '#termsAgree7', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $(this).siblings('label').toggleClass('on', isChecked); | |
| $('#advertisingReceiveAll', $formTerms).prop('checked', isChecked) | |
| .siblings('label').toggleClass('on', isChecked); | |
| $('.js_advertising_channel', $formTerms).prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } | |
| }); | |
| $formTerms.on('change', '#advertisingReceiveAll', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $('.js_advertising_channel', $formTerms).prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } else { | |
| $('#termsAgree7', $formTerms).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| $formTerms.on('change', '.js_advertising_channel', function () { | |
| const anyChannelChecked = $('.js_advertising_channel:checked', $formTerms).length > 0; | |
| $('#advertisingReceiveAll', $formTerms).prop('checked', anyChannelChecked) | |
| .siblings('label').toggleClass('on', anyChannelChecked); | |
| if (anyChannelChecked) { | |
| checkMarketingApproval(); | |
| } | |
| if ($(this).prop('checked') === false) { | |
| $('#termsAgree7', $formTerms).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| $formTerms.on('change', '#privateMktApprovalOption', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } else { | |
| $('#termsAgree6', $formTerms).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| $formTerms.on('change', '#termsAgree6', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } | |
| }); | |
| /* | |
| * 14세 동의 항목 체크박스 이벤트 | |
| */ | |
| /* | |
| * 약관 내용보기 이벤트 | |
| */ | |
| $('.privacy_box dd button:not(.js_agreement_view)').on({ | |
| 'click':function(){ | |
| var privacy_dp = $(this).parent().parent().parent().find('> .privacy_content').css('display'); | |
| if(privacy_dp == 'none'){ | |
| } | |
| }); | |
| // 약관 전문 새창 열기 (전체보기) | |
| $('.js_agreement_view').on('click', function () { | |
| window.open('../service/agreement.php?code=' + $(this).data('code')); | |
| }); | |
| window.addEventListener('message', function (e) { | |
| if (e.origin === "{=authDreamUrl}") { | |
| $('#layerSearch').remove(); | |
| } | |
| }); | |
| // 그룹 하위 항목이 모두 선택되면 상위 [선택] 헤더(termsAgree3~7)도 선택 (하나라도 해제 시 해제) | |
| $formTerms.on('change', '.privacy_box :checkbox', function () { | |
| const $box = $(this).closest('.privacy_box'); | |
| const $header = $box.children('dl').find(':checkbox'); | |
| const $subs = $box.find(':checkbox').not($header); | |
| if ($subs.length === 0) { | |
| return; | |
| } | |
| const allChecked = $subs.not(':checked').length === 0; | |
| $header.prop('checked', allChecked).siblings('label').toggleClass('on', allChecked); | |
| }); | |
| /* | |
| * 전체 동의 역동기화 — 하위 체크박스가 모두 선택되면 전체 동의도 선택 (하나라도 해제되면 해제) | |
| */ | |
| const syncAllAgree = function () { | |
| const $targets = $(':checkbox', $formTerms).not('#allAgree').not('#termsAgree'); | |
| const allChecked = $targets.length > 0 && $targets.not(':checked').length === 0; | |
| $('#allAgree', $formTerms).prop('checked', allChecked) | |
| .siblings('label').toggleClass('on', allChecked); | |
| }; | |
| $formTerms.on('change', ':checkbox', function (e) { | |
| if (e.target.id === 'allAgree' || e.target.id === 'termsAgree') { | |
| return; | |
| } | |
| syncAllAgree(); | |
| }); | |
| }); | |
| /** | |
변경 전_join_view.html
| <div class="input_wrap"> | |
| <div class="input_title"></div> | |
| <div class="input_content"> | |
| <!--{? joinField.maillingFl.use === 'y'}--> | |
| <div class="description"> | |
| <span class="inp_chk"> | |
| <input type="checkbox" id="maillingFl" class="ignore" name="maillingFl" value="y" {? data.maillingFl=='y'}checked="checked"{/}/> | |
| <label for="maillingFl">{=__('정보/이벤트 메일 수신에 동의합니다.')}</label> | |
| </span> | |
| </div> | |
| <!--{/}--> | |
| <div class="description">※ {=__('아이디 비밀번호 찾기에 활용 되므로 정확하게 입력해 주세요')}</div> | |
| </div> | |
| </div> | |
| <!--{ / }--> | |
| </div> | |
| </div> | |
| <!--{? joinField.smsFl.use === 'y'}--> | |
| <div class="input_wrap"> | |
| <div class="input_title"></div> | |
| <div class="input_content"> | |
| <div class="description"> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="ignore" id="smsFl" name="smsFl" value="y" {? data.smsFl=='y'}checked="checked"{/}/> | |
| <label for="smsFl">{=__('정보/이벤트 SMS 수신에 동의합니다.')}</label> | |
| </span> | |
| </div> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| <!--{/}--> | |
| <!--{? joinField.phone.use == 'y'}--> | |
| <div class="input_wrap"> | |
변경 후_join_view.html
| <div class="input_wrap"> | |
| <div class="input_title"></div> | |
| <div class="input_content"> | |
| <div class="description">※ {=__('아이디 비밀번호 찾기에 활용 되므로 정확하게 입력해 주세요')}</div> | |
| </div> | |
| </div> | |
| <!--{ / }--> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| <!--{? joinField.phone.use == 'y'}--> | |
| <div class="input_wrap"> | |
변경 전_join_view_other.html
| <!--{/}--> | |
| </div> | |
| <!--{/}--> | |
| <!--{? privateApprovalOption[0]['modeFl'] == 'y' || privateConsign[0]['modeFl']=='y' || privateOffer[0]['modeFl']=='y'}--> | |
| <p class="tit">{=__('약관동의현황')}</p> | |
| <!--{? privateApprovalOption[0]['modeFl'] == 'y'}--> | |
| <div class="privacy_big_box"> | |
| </div> | |
| </div> | |
| <!--{/ // privateOffer modeFl end}--> | |
| <!--{/}--> | |
| <script type="text/javascript"> | |
| $(document).ready(function() { | |
| e.preventDefault(); | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.privacy_box'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| /* | |
| * 약관 내용보기 이벤트 | |
| */ | |
| $('.privacy_box dd button').on({ | |
| 'click':function(){ | |
| var privacy_dp = $(this).parent().parent().parent().find('> .privacy_content').css('display'); | |
| if(privacy_dp == 'none'){ | |
변경 후_join_view_other.html
| <!--{/}--> | |
| </div> | |
| <!--{/}--> | |
| <!--{? privateApprovalOption[0]['modeFl'] == 'y' || privateConsign[0]['modeFl']=='y' || privateOffer[0]['modeFl']=='y' || privateMktApprovalOption[0]['modeFl']=='y' || isUseAdvertisingReceive}--> | |
| <p class="tit">{=__('약관동의현황')}</p> | |
| <!--{? privateApprovalOption[0]['modeFl'] == 'y'}--> | |
| <div class="privacy_big_box"> | |
| </div> | |
| </div> | |
| <!--{/ // privateOffer modeFl end}--> | |
| <!--{? privateMktApprovalOption[0]['modeFl'] == 'y'}--> | |
| <div class="privacy_big_box"> | |
| <div class="privacy_box"> | |
| <dl> | |
| <dt> | |
| <span class="inp_chk"> | |
| <input type="checkbox" id="termsAgree6" name=""/> | |
| <label for="termsAgree6">({=__('선택')}) {=__('마케팅 목적 개인정보 수집 및 이용 동의')}</label> | |
| </span> | |
| </dt> | |
| <dd><button type="button">{=__('내용보기')} ▼</button></dd> | |
| </dl> | |
| <div class="privacy_content"> | |
| <!--{@ privateMktApprovalOption}--> | |
| <div class="privacy_big_box"> | |
| <div class="privacy_box"> | |
| <dl> | |
| <dt> | |
| <span class="inp_chk"> | |
| <input type="checkbox" id="privateMarketingConsentOptionFl" name="privateMarketingConsentOptionFl" value="y" <!--{? data['privateMarketingConsentOptionFl'] == 'y'}-->checked="checked"<!--{/}-->/> | |
| <label for="privateMarketingConsentOptionFl">{=nl2br(.informNm)}</label> | |
| </span> | |
| </dt> | |
| <dd><button type="button" class="js_agreement_view" data-code="{.informCd}">{=__('전체보기')}</button></dd> | |
| </dl> | |
| <div class="privacy_content"> | |
| <div>{=nl2br(.content)}</div> | |
| </div> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </div> | |
| </div> | |
| </div> | |
| <!--{/ // privateMktApprovalOption modeFl end}--> | |
| <!--{? isUseAdvertisingReceive}--> | |
| <div class="privacy_big_box"> | |
| <div class="privacy_box"> | |
| <dl> | |
| <dt> | |
| <span class="inp_chk"> | |
| <input type="checkbox" id="termsAgree7" name=""/> | |
| <label for="termsAgree7">({=__('선택')}) {=__('광고성 수신 동의')}</label> | |
| </span> | |
| </dt> | |
| <dd><button type="button">{=__('내용보기')} ▼</button></dd> | |
| </dl> | |
| <div class="privacy_content"> | |
| <div class="privacy_big_box"> | |
| <div class="privacy_box"> | |
| <dl> | |
| <dt> | |
| <span class="inp_chk"> | |
| <input type="checkbox" id="advertisingReceiveAll" name="" <!--{? data['maillingFl'] == 'y' || data['smsFl'] == 'y'}-->checked="checked"<!--{/}-->/> | |
| <label for="advertisingReceiveAll">{=nl2br(advertisingReceive['informNm'])}</label> | |
| </span> | |
| </dt> | |
| <dd><button type="button" class="js_agreement_view" data-code="{advertisingReceive['informCd']}">{=__('전체보기')}</button></dd> | |
| </dl> | |
| <div class="privacy_content"> | |
| <div>{=nl2br(advertisingReceive['content'])}</div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="js_advertising_channel_box" style="display:flex; flex-direction:column; align-items:flex-start; margin:10px;"> | |
| <!--{? advertisingReceiveMailUse == 'y'}--> | |
| <span class="inp_chk"> | |
| <input type="checkbox" id="advertisingReceiveMail" name="maillingFl" value="y" class="js_advertising_channel" <!--{? data['maillingFl'] == 'y'}-->checked="checked"<!--{/}-->/> | |
| <label for="advertisingReceiveMail">{=__('이메일 수신 동의')}</label> | |
| </span> | |
| <!--{/}--> | |
| <!--{? advertisingReceiveSmsUse == 'y'}--> | |
| <span class="inp_chk"> | |
| <input type="checkbox" id="advertisingReceiveSms" name="smsFl" value="y" class="js_advertising_channel" <!--{? data['smsFl'] == 'y'}-->checked="checked"<!--{/}-->/> | |
| <label for="advertisingReceiveSms">{=__('모바일 메시지 수신 동의')}</label> | |
| </span> | |
| <!--{/}--> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!--{/ // isUseAdvertisingReceive end}--> | |
| <!--{/}--> | |
| <script type="text/javascript"> | |
| $(document).ready(function() { | |
| e.preventDefault(); | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.privacy_box'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5') || (e.target.id === 'termsAgree6') || (e.target.id === 'termsAgree7'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| /* | |
| * 약관 내용보기 이벤트 | |
| */ | |
| $('.js_agreement_view').on('click', function () { | |
| window.open('../service/agreement.php?code=' + $(this).data('code')); | |
| }); | |
| $('.privacy_box dd button:not(.js_agreement_view)').on({ | |
| 'click':function(){ | |
| var privacy_dp = $(this).parent().parent().parent().find('> .privacy_content').css('display'); | |
| if(privacy_dp == 'none'){ | |
변경 전my_page.html
| e.preventDefault(); | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.privacy_box'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| } | |
| }); | |
| gd_select_email_domain('email'); | |
| <!--{? (joinField.marriFl.use == 'y' && joinField.marriDate.use == 'y') || joinField.birthDt.use == 'y' }--> | |
변경 후my_page.html
| e.preventDefault(); | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.privacy_box'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5') || (e.target.id === 'termsAgree6') || (e.target.id === 'termsAgree7'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| } | |
| }); | |
| /* | |
| * 광고성 수신 동의 ↔ 이메일/모바일 수신 동의 ↔ 마케팅 목적 개인정보 수집 및 이용 동의 연동 | |
| * - 광고성 수신 동의 체크 → 이메일/모바일 채널 일괄 + 마케팅 목적 동의 ON | |
| * - 채널(1개 이상) 체크 → 광고성 수신 동의 + 마케팅 목적 동의 ON (채널은 각각 개별 토글) | |
| */ | |
| const checkMarketingApproval = function () { | |
| $('#privateMarketingConsentOptionFl', $formJoin).prop('checked', true).val('y').siblings('label').addClass('on'); | |
| $('#termsAgree6', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| }; | |
| $formJoin.on('change', '#termsAgree7', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $(this).siblings('label').toggleClass('on', isChecked); | |
| $('#advertisingReceiveAll', $formJoin).prop('checked', isChecked) | |
| .siblings('label').toggleClass('on', isChecked); | |
| $('.js_advertising_channel', $formJoin).prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } | |
| }); | |
| $formJoin.on('change', '#advertisingReceiveAll', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $('.js_advertising_channel', $formJoin).prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| // 전체선택(advertisingReceiveAll) 직접 조작 시 광고성 수신 동의(termsAgree7) 헤더도 동기화 | |
| $('#termsAgree7', $formJoin).prop('checked', isChecked).siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } | |
| }); | |
| $formJoin.on('change', '.js_advertising_channel', function () { | |
| const anyChannelChecked = $('.js_advertising_channel:checked', $formJoin).length > 0; | |
| const allChannelChecked = $('.js_advertising_channel', $formJoin).length > 0 | |
| && $('.js_advertising_channel:not(:checked)', $formJoin).length === 0; | |
| $('#advertisingReceiveAll', $formJoin).prop('checked', anyChannelChecked) | |
| .siblings('label').toggleClass('on', anyChannelChecked); | |
| if (anyChannelChecked) { | |
| checkMarketingApproval(); | |
| } | |
| // 수신 채널 전부 선택 시 광고성 수신 동의(termsAgree7) 헤더 ON (일부만이면 켜지 않음) | |
| if (allChannelChecked) { | |
| $('#termsAgree7', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| } | |
| if ($(this).prop('checked') === false) { | |
| $('#termsAgree7', $formJoin).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 체크 시 광고성 수신 동의·수신 채널 일괄 선택 | |
| const checkAdvertising = function () { | |
| if ($('#termsAgree7', $formJoin).length === 0) { | |
| return; | |
| } | |
| $('#termsAgree7', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| $('#advertisingReceiveAll', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| $('.js_advertising_channel', $formJoin).prop('checked', true).val('y').siblings('label').addClass('on'); | |
| }; | |
| $formJoin.on('change', '#privateMarketingConsentOptionFl', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } else { | |
| $('#termsAgree6', $formJoin).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 그룹 [선택] 헤더 체크 시 광고성 수신 동의·수신 채널 연동 | |
| $formJoin.on('change', '#termsAgree6', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } | |
| }); | |
| // 그룹 하위 항목이 모두 선택되면 상위 [선택] 헤더도 선택 (하나라도 해제 시 해제) — 중첩 privacy_box 대응: 헤더 기준으로 그룹 판정 | |
| $formJoin.on('change', '.privacy_box :checkbox', function () { | |
| $('#termsAgree3, #termsAgree4, #termsAgree5, #termsAgree6', $formJoin).each(function () { | |
| const $header = $(this); | |
| const $subs = $header.closest('.privacy_box').find(':checkbox').not($header); | |
| if ($subs.length === 0) { | |
| return; | |
| } | |
| const allChecked = $subs.not(':checked').length === 0; | |
| $header.prop('checked', allChecked).siblings('label').toggleClass('on', allChecked); | |
| }); | |
| }); | |
| // 초기 로드: 저장된 하위 선택 상태로 상위 [선택] 헤더 동기화 | |
| $('#termsAgree3, #termsAgree4, #termsAgree5, #termsAgree6', $formJoin).each(function () { | |
| const $subs = $(this).closest('.privacy_box').find(':checkbox').not(this); | |
| if ($subs.length > 0 && $subs.not(':checked').length === 0) { | |
| $(this).prop('checked', true).siblings('label').addClass('on'); | |
| } | |
| }); | |
| // 초기 로드: 수신 채널이 전부 선택된 상태면 광고성 수신 동의(termsAgree7) 헤더 ON | |
| if ($('.js_advertising_channel', $formJoin).length > 0 | |
| && $('.js_advertising_channel:not(:checked)', $formJoin).length === 0) { | |
| $('#termsAgree7', $formJoin).prop('checked', true).siblings('label').addClass('on'); | |
| } | |
| gd_select_email_domain('email'); | |
| <!--{? (joinField.marriFl.use == 'y' && joinField.marriDate.use == 'y') || joinField.birthDt.use == 'y' }--> | |
변경 전join_agreement.html
| </div> | |
| </div> | |
| <!--{/}--> | |
| <p class="msg dn"> | |
| <span>{=__('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')}</span> | |
| </p> | |
| $(document).ready(function () { | |
| var body = $('body'), $formTerms = $('#formTerms'); | |
| $('#btnNextStep').click(function () { | |
| var pass = true; | |
| /* | |
| e.preventDefault(); | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.privacy-item'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| } | |
| }); | |
| window.addEventListener('message', function (e) { | |
| if (e.origin === "{=authDreamUrl}") { | |
| $('#layerSearch').remove(); | |
| } | |
| }); | |
| }); | |
| /** | |
| * 아이폰+페이스북앱에서 location.href로 페이지 이동으로 처리시 | |
변경 후join_agreement.html
| </div> | |
| </div> | |
| <!--{/}--> | |
| <!--{? privateMarketingMember['modeFl']=='y'}--> | |
| <div class="privacy-item toggle-item toggle-open"> | |
| <div class="privacy-head"> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="sp" id="termsAgree6" name=""> | |
| <label for="termsAgree6">({=__('선택')}) {=__('마케팅 목적 개인정보 수집 및 이용 동의')}</label> | |
| </span> | |
| <div class="option"> | |
| <button type="button" class="btn-reset toggle-switch">{=__('내용보기')} ▼</button> | |
| </div> | |
| </div> | |
| <div class="privacy-body"> | |
| <div class="privacy-item toggle-item toggle-open"> | |
| <div class="privacy-head"> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="sp" id="privateMktApprovalOption" name="privateMarketingConsentOptionFl"> | |
| <label for="privateMktApprovalOption">{=nl2br(privateMarketingMember['informNm'])}</label> | |
| </span> | |
| <div class="option"> | |
| <button type="button" class="btn-reset js_agreement_view" data-code="{privateMarketingMember['informCd']}">{=__('전체보기')}</button> | |
| </div> | |
| </div> | |
| <div class="privacy-body"> | |
| {=nl2br(privateMarketingMember['content'])} | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| <!--{? isUseAdvertisingReceive}--> | |
| <div class="privacy-item toggle-item toggle-open"> | |
| <div class="privacy-head"> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="sp" id="termsAgree7" name=""> | |
| <label for="termsAgree7">({=__('선택')}) {=__('광고성 수신 동의')}</label> | |
| </span> | |
| <div class="option"> | |
| <button type="button" class="btn-reset toggle-switch">{=__('내용보기')} ▼</button> | |
| </div> | |
| </div> | |
| <div class="privacy-body"> | |
| <div class="privacy-item toggle-item toggle-open"> | |
| <div class="privacy-head"> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="sp" id="advertisingReceiveAll" name=""> | |
| <label for="advertisingReceiveAll">{=nl2br(advertisingReceive['informNm'])}</label> | |
| </span> | |
| <div class="option"> | |
| <button type="button" class="btn-reset js_agreement_view" data-code="{advertisingReceive['informCd']}">{=__('전체보기')}</button> | |
| </div> | |
| </div> | |
| <div class="privacy-body"> | |
| {=nl2br(advertisingReceive['content'])} | |
| </div> | |
| </div> | |
| <div class="js_advertising_channel_box"> | |
| <!--{? advertisingReceiveMailUse=='y'}--> | |
| <div class="privacy-item"> | |
| <div class="privacy-head"> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="sp js_advertising_channel" id="maillingFl" name="maillingFl"> | |
| <label for="maillingFl">{=__('이메일 수신 동의')}</label> | |
| </span> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| <!--{? advertisingReceiveSmsUse=='y'}--> | |
| <div class="privacy-item"> | |
| <div class="privacy-head"> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="sp js_advertising_channel" id="smsFl" name="smsFl"> | |
| <label for="smsFl">{=__('모바일 메시지 수신 동의')}</label> | |
| </span> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </div> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| <p class="msg dn"> | |
| <span>{=__('이용약관과 개인정보 수집 및 이용에 대한 안내 모두 동의해주세요.')}</span> | |
| </p> | |
| $(document).ready(function () { | |
| var body = $('body'), $formTerms = $('#formTerms'); | |
| // 약관 전문 새창 열기 (전체보기) | |
| body.on('click', '.js_agreement_view', function () { | |
| window.open('../service/agreement.php?code=' + $(this).data('code')); | |
| }); | |
| $('#btnNextStep').click(function () { | |
| var pass = true; | |
| /* | |
| e.preventDefault(); | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.privacy-item'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5') || (e.target.id === 'termsAgree6') || (e.target.id === 'termsAgree7'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| } | |
| }); | |
| /* | |
| * 광고성 수신 동의 ↔ 이메일/모바일 수신 동의 ↔ 마케팅 목적 개인정보 수집 및 이용 동의 연동 | |
| * - 광고성 수신 동의 체크 → 이메일/모바일 채널 일괄 + 마케팅 목적 동의 ON | |
| * - 채널(1개 이상) 체크 → 광고성 수신 동의 + 마케팅 목적 동의 ON (채널은 각각 개별 토글) | |
| */ | |
| const checkMarketingApproval = function () { | |
| $('#privateMktApprovalOption', $formTerms).prop('checked', true).val('y').siblings('label').addClass('on'); | |
| $('#termsAgree6', $formTerms).prop('checked', true).siblings('label').addClass('on'); | |
| }; | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 체크 시 광고성 수신 동의·수신 채널 일괄 선택 | |
| const checkAdvertising = function () { | |
| if ($('#termsAgree7', $formTerms).length === 0) { | |
| return; | |
| } | |
| $('#termsAgree7', $formTerms).prop('checked', true).siblings('label').addClass('on'); | |
| $('#advertisingReceiveAll', $formTerms).prop('checked', true).siblings('label').addClass('on'); | |
| $('.js_advertising_channel', $formTerms).prop('checked', true).val('y').siblings('label').addClass('on'); | |
| }; | |
| $formTerms.on('change', '#termsAgree7', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $(this).siblings('label').toggleClass('on', isChecked); | |
| $('#advertisingReceiveAll', $formTerms).prop('checked', isChecked) | |
| .siblings('label').toggleClass('on', isChecked); | |
| $('.js_advertising_channel', $formTerms).prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } | |
| }); | |
| $formTerms.on('change', '#advertisingReceiveAll', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $('.js_advertising_channel', $formTerms).prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } else { | |
| $('#termsAgree7', $formTerms).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| $formTerms.on('change', '.js_advertising_channel', function () { | |
| const anyChannelChecked = $('.js_advertising_channel:checked', $formTerms).length > 0; | |
| $('#advertisingReceiveAll', $formTerms).prop('checked', anyChannelChecked) | |
| .siblings('label').toggleClass('on', anyChannelChecked); | |
| if (anyChannelChecked) { | |
| checkMarketingApproval(); | |
| } | |
| if ($(this).prop('checked') === false) { | |
| $('#termsAgree7', $formTerms).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| $formTerms.on('change', '#privateMktApprovalOption', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } else { | |
| $('#termsAgree6', $formTerms).prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| $formTerms.on('change', '#termsAgree6', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } | |
| }); | |
| window.addEventListener('message', function (e) { | |
| if (e.origin === "{=authDreamUrl}") { | |
| $('#layerSearch').remove(); | |
| } | |
| }); | |
| // 그룹 하위 항목이 모두 선택되면 상위 [선택] 헤더(termsAgree3~7)도 선택 (하나라도 해제 시 해제) | |
| $formTerms.on('change', '.privacy-item.toggle-item .privacy-body :checkbox', function () { | |
| const $group = $(this).closest('.privacy-body').closest('.privacy-item.toggle-item'); | |
| const $header = $group.children('.privacy-head').find(':checkbox'); | |
| const $subs = $group.children('.privacy-body').find(':checkbox'); | |
| if ($subs.length === 0) { | |
| return; | |
| } | |
| const allChecked = $subs.not(':checked').length === 0; | |
| $header.prop('checked', allChecked).siblings('label').toggleClass('on', allChecked); | |
| }); | |
| /* | |
| * 전체 동의 역동기화 — 하위 체크박스가 모두 선택되면 전체 동의도 선택 (하나라도 해제되면 해제) | |
| */ | |
| const syncAllAgree = function () { | |
| const $targets = $(':checkbox', $formTerms).not('#allAgree').not('#termsAgree'); | |
| const allChecked = $targets.length > 0 && $targets.not(':checked').length === 0; | |
| $('#allAgree', $formTerms).prop('checked', allChecked) | |
| .siblings('label').toggleClass('on', allChecked); | |
| }; | |
| $formTerms.on('change', ':checkbox', function (e) { | |
| if (e.target.id === 'allAgree' || e.target.id === 'termsAgree') { | |
| return; | |
| } | |
| syncAllAgree(); | |
| }); | |
| }); | |
| /** | |
| * 아이폰+페이스북앱에서 location.href로 페이지 이동으로 처리시 | |
변경 전_join_view.html
| <div class="input_wrap"> | |
| <div class="input_title"></div> | |
| <div class="input_content"> | |
| <!--{? joinField.maillingFl.use === 'y'}--> | |
| <div class="description chk"> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="checkbox sp" id="maillingFl" name="maillingFl" value="y" {? data.maillingFl== | |
| 'y'}checked="checked"{/}> | |
| <label for="maillingFl">{=__('정보/이벤트 메일 수신에 동의합니다.')}</label> | |
| </span> | |
| </div> | |
| <!--{/}--> | |
| <div class="description_wrap"> | |
| <div class="description">※ {=__('아이디 비밀번호 찾기에 활용 되므로 정확하게 입력해 주세요')}</div> | |
| </div> | |
| </div> | |
| <!--{ / }--> | |
| <!--{ / }--> | |
| <!--{? joinField.smsFl.use === 'y'}--> | |
| <div class="description chk"> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="checkbox sp" id="smsFl" name="smsFl" value="y" {? data.smsFl== | |
| 'y'}checked="checked"{/}> | |
| <label for="smsFl">{=__('정보/이벤트 SMS 수신에 동의합니다.')}</label> | |
| </span> | |
| </div> | |
| <!--{/}--> | |
| </div> | |
| </div> | |
| <!--{/}--><!--{? joinField.phone.use == 'y'}--> | |
변경 후_join_view.html
| <div class="input_wrap"> | |
| <div class="input_title"></div> | |
| <div class="input_content"> | |
| <div class="description_wrap"> | |
| <div class="description">※ {=__('아이디 비밀번호 찾기에 활용 되므로 정확하게 입력해 주세요')}</div> | |
| </div> | |
| </div> | |
| <!--{ / }--> | |
| <!--{ / }--> | |
| </div> | |
| </div> | |
| <!--{/}--><!--{? joinField.phone.use == 'y'}--> | |
변경 전_join_view_other.html
| <!--{/}--> | |
| </div> | |
| <!--{/}--> | |
| <!--{? privateApprovalOption[0]['modeFl'] == 'y' || privateConsign[0]['modeFl']=='y' || privateOffer[0]['modeFl']=='y'}--> | |
| <div class="account_title"> | |
| <b class="title">{=__('약관동의현황')}</b> | |
| </div> | |
| </div> | |
| </div> | |
| <!--{/ // privateOffer modeFl end}--> | |
| <!--{/}--> | |
| <script type="text/javascript"> | |
| $(document).ready(function () { | |
| e.preventDefault(); | |
| $('p.msg').addClass('hidden'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.privacy-item'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| } | |
| }); | |
| <!--{ ? useAppleLogin }--> | |
| $("#apple_btn").on("click", startClicked); | |
| function startClicked(){ | |
변경 후_join_view_other.html
| <!--{/}--> | |
| </div> | |
| <!--{/}--> | |
| <!--{? privateApprovalOption[0]['modeFl'] == 'y' || privateConsign[0]['modeFl']=='y' || privateOffer[0]['modeFl']=='y' || privateMktApprovalOption[0]['modeFl']=='y' || isUseAdvertisingReceive}--> | |
| <div class="account_title"> | |
| <b class="title">{=__('약관동의현황')}</b> | |
| </div> | |
| </div> | |
| </div> | |
| <!--{/ // privateOffer modeFl end}--> | |
| <!--{? privateMktApprovalOption[0]['modeFl'] == 'y'}--> | |
| <div class="privacy-item toggle-item toggle-open"> | |
| <div class="privacy-head"> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="sp" id="termsAgree6" name=""> | |
| <label for="termsAgree6">({=__('선택')}) {=__('마케팅 목적 개인정보 수집 및 이용 동의')}</label> | |
| </span> | |
| <div class="option"> | |
| <button type="button" class="btn-reset toggle-switch">{=__('내용보기')} ▼</button> | |
| </div> | |
| </div> | |
| <div class="privacy-body"> | |
| <!--{@ privateMktApprovalOption}--> | |
| <div class="privacy-item toggle-item toggle-open"> | |
| <div class="privacy-head"> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="sp" id="privateMarketingConsentOptionFl" name="privateMarketingConsentOptionFl" value="y" <!--{? data['privateMarketingConsentOptionFl'] == 'y'}-->checked="checked"<!--{/}-->> | |
| <label class="single <!--{? data['privateMarketingConsentOptionFl'] == 'y'}-->on<!--{/}-->" for="privateMarketingConsentOptionFl">{=nl2br(.informNm)}</label> | |
| </span> | |
| <div class="option"> | |
| <button type="button" class="btn-reset js_agreement_view" data-code="{.informCd}">{=__('전체보기')}</button> | |
| </div> | |
| </div> | |
| <div class="privacy-body"> | |
| {=nl2br(.content)} | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </div> | |
| </div> | |
| <!--{/ // privateMktApprovalOption modeFl end}--> | |
| <!--{? isUseAdvertisingReceive}--> | |
| <div class="privacy-item toggle-item toggle-open"> | |
| <div class="privacy-head"> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="sp" id="termsAgree7" name=""> | |
| <label for="termsAgree7">({=__('선택')}) {=__('광고성 수신 동의')}</label> | |
| </span> | |
| <div class="option"> | |
| <button type="button" class="btn-reset toggle-switch">{=__('내용보기')} ▼</button> | |
| </div> | |
| </div> | |
| <div class="privacy-body"> | |
| <div class="privacy-item toggle-item toggle-open"> | |
| <div class="privacy-head"> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="sp" id="advertisingReceiveAll" <!--{? data['maillingFl'] == 'y' || data['smsFl'] == 'y'}-->checked="checked"<!--{/}-->> | |
| <label class="single <!--{? data['maillingFl'] == 'y' || data['smsFl'] == 'y'}-->on<!--{/}-->" for="advertisingReceiveAll">{=nl2br(advertisingReceive['informNm'])}</label> | |
| </span> | |
| <div class="option"> | |
| <button type="button" class="btn-reset js_agreement_view" data-code="{advertisingReceive['informCd']}">{=__('전체보기')}</button> | |
| </div> | |
| </div> | |
| <div class="privacy-body"> | |
| {=nl2br(advertisingReceive['content'])} | |
| </div> | |
| </div> | |
| <div class="js_advertising_channel_box" style="display:flex; flex-direction:column; align-items:flex-start; margin:10px;"> | |
| <!--{? advertisingReceiveMailUse == 'y'}--> | |
| <div class="privacy-item"> | |
| <div class="privacy-head"> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="sp js_advertising_channel" id="advertisingReceiveMail" name="maillingFl" value="y" <!--{? data['maillingFl'] == 'y'}-->checked="checked"<!--{/}-->> | |
| <label class="single <!--{? data['maillingFl'] == 'y'}-->on<!--{/}-->" for="advertisingReceiveMail">{=__('이메일 수신 동의')}</label> | |
| </span> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| <!--{? advertisingReceiveSmsUse == 'y'}--> | |
| <div class="privacy-item"> | |
| <div class="privacy-head"> | |
| <span class="inp_chk"> | |
| <input type="checkbox" class="sp js_advertising_channel" id="advertisingReceiveSms" name="smsFl" value="y" <!--{? data['smsFl'] == 'y'}-->checked="checked"<!--{/}-->> | |
| <label class="single <!--{? data['smsFl'] == 'y'}-->on<!--{/}-->" for="advertisingReceiveSms">{=__('모바일 메시지 수신 동의')}</label> | |
| </span> | |
| </div> | |
| </div> | |
| <!--{/}--> | |
| </div> | |
| </div> | |
| </div> | |
| <!--{/ // isUseAdvertisingReceive end}--> | |
| <!--{/}--> | |
| <script type="text/javascript"> | |
| $(document).ready(function () { | |
| e.preventDefault(); | |
| $('p.msg').addClass('hidden'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.privacy-item'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5') || (e.target.id === 'termsAgree6') || (e.target.id === 'termsAgree7'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| } | |
| }); | |
| // 마수동/광수동 약관 전문 새창 열기 (전체보기) | |
| $('.js_agreement_view').on('click', function () { | |
| window.open('../service/agreement.php?code=' + $(this).data('code')); | |
| }); | |
| <!--{ ? useAppleLogin }--> | |
| $("#apple_btn").on("click", startClicked); | |
| function startClicked(){ | |
변경 전my_page.html
| e.preventDefault(); | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.terms-view'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| } | |
| }); | |
| select_email_domain('email'); | |
| <!--{? (joinField.marriFl.use == 'y' && joinField.marriDate.use == 'y') || joinField.birthDt.use == 'y' }--> | |
변경 후my_page.html
| e.preventDefault(); | |
| $('p.msg').addClass('dn'); | |
| var $target = $(e.target), $label = $target.siblings('label'), $termsView = $target.closest('.terms-view'); | |
| var isTermsAgreeSelect = (e.target.id === 'termsAgree3') || (e.target.id === 'termsAgree4') || (e.target.id === 'termsAgree5') || (e.target.id === 'termsAgree6') || (e.target.id === 'termsAgree7'); | |
| var isTargetChecked = $target.prop('checked') === true; | |
| if (isTargetChecked) { | |
| } | |
| }); | |
| /* | |
| * 광고성 수신 동의 ↔ 이메일/모바일 수신 동의 ↔ 마케팅 목적 개인정보 수집 및 이용 동의 연동 (마이페이지 전용) | |
| * - 광고성 수신 동의 체크 → 이메일/모바일 채널 일괄 + 마케팅 목적 동의 ON | |
| * - 채널(1개 이상) 체크 → 광고성 수신 동의 + 마케팅 목적 동의 ON (채널은 각각 개별 토글) | |
| * - 이 스크립트는 마이페이지(my_page.html)에서만 로드되므로 $(document) 위임으로 바인딩해도 회원가입 화면엔 적용되지 않음 | |
| * (광고성 체크박스가 #formJoin 밖에 렌더되는 경우가 있어 $formJoin 스코프는 사용하지 않음) | |
| */ | |
| const checkMarketingApproval = function () { | |
| $('#privateMarketingConsentOptionFl').prop('checked', true).val('y').siblings('label').addClass('on'); | |
| $('#termsAgree6').prop('checked', true).siblings('label').addClass('on'); | |
| }; | |
| $(document).on('change', '#termsAgree7', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $(this).siblings('label').toggleClass('on', isChecked); | |
| $('#advertisingReceiveAll').prop('checked', isChecked) | |
| .siblings('label').toggleClass('on', isChecked); | |
| $('.js_advertising_channel').prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } | |
| }); | |
| $(document).on('change', '#advertisingReceiveAll', function () { | |
| const isChecked = $(this).prop('checked') === true; | |
| $('.js_advertising_channel').prop('checked', isChecked).val(isChecked ? 'y' : 'n') | |
| .siblings('label').toggleClass('on', isChecked); | |
| // 전체선택(advertisingReceiveAll) 직접 조작 시 광고성 수신 동의(termsAgree7) 헤더도 동기화 | |
| $('#termsAgree7').prop('checked', isChecked).siblings('label').toggleClass('on', isChecked); | |
| if (isChecked) { | |
| checkMarketingApproval(); | |
| } | |
| }); | |
| $(document).on('change', '.js_advertising_channel', function () { | |
| const anyChannelChecked = $('.js_advertising_channel:checked').length > 0; | |
| const allChannelChecked = $('.js_advertising_channel').length > 0 | |
| && $('.js_advertising_channel:not(:checked)').length === 0; | |
| $('#advertisingReceiveAll').prop('checked', anyChannelChecked) | |
| .siblings('label').toggleClass('on', anyChannelChecked); | |
| if (anyChannelChecked) { | |
| checkMarketingApproval(); | |
| } | |
| // 수신 채널 전부 선택 시 광고성 수신 동의(termsAgree7) 헤더 ON (일부만이면 켜지 않음) | |
| if (allChannelChecked) { | |
| $('#termsAgree7').prop('checked', true).siblings('label').addClass('on'); | |
| } | |
| if ($(this).prop('checked') === false) { | |
| $('#termsAgree7').prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 체크 시 광고성 수신 동의·수신 채널 일괄 선택 | |
| const checkAdvertising = function () { | |
| if ($('#termsAgree7').length === 0) { | |
| return; | |
| } | |
| $('#termsAgree7').prop('checked', true).siblings('label').addClass('on'); | |
| $('#advertisingReceiveAll').prop('checked', true).siblings('label').addClass('on'); | |
| $('.js_advertising_channel').prop('checked', true).val('y').siblings('label').addClass('on'); | |
| }; | |
| $(document).on('change', '#privateMarketingConsentOptionFl', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } else { | |
| $('#termsAgree6').prop('checked', false).siblings('label').removeClass('on'); | |
| } | |
| }); | |
| // 마케팅 목적 개인정보 수집 및 이용 동의 그룹 [선택] 헤더 체크 시 광고성 수신 동의·수신 채널 연동 | |
| $(document).on('change', '#termsAgree6', function () { | |
| if ($(this).prop('checked') === true) { | |
| checkAdvertising(); | |
| } | |
| }); | |
| // 그룹 하위 항목이 모두 선택되면 상위 [선택] 헤더도 선택 (하나라도 해제 시 해제) | |
| $(document).on('change', '.privacy-head :checkbox', function () { | |
| $('#termsAgree3, #termsAgree4, #termsAgree5, #termsAgree6').each(function () { | |
| const $header = $(this); | |
| const $subs = $header.closest('.privacy-item').find(':checkbox').not($header); | |
| if ($subs.length === 0) { | |
| return; | |
| } | |
| const allChecked = $subs.not(':checked').length === 0; | |
| $header.prop('checked', allChecked).siblings('label').toggleClass('on', allChecked); | |
| }); | |
| }); | |
| // 초기 로드: 저장된 하위 선택 상태로 상위 [선택] 헤더 동기화 | |
| $('#termsAgree3, #termsAgree4, #termsAgree5, #termsAgree6').each(function () { | |
| const $subs = $(this).closest('.privacy-item').find(':checkbox').not(this); | |
| if ($subs.length > 0 && $subs.not(':checked').length === 0) { | |
| $(this).prop('checked', true).siblings('label').addClass('on'); | |
| } | |
| }); | |
| // 초기 로드: 수신 채널이 전부 선택된 상태면 광고성 수신 동의(termsAgree7) 헤더 ON | |
| if ($('.js_advertising_channel').length > 0 | |
| && $('.js_advertising_channel:not(:checked)').length === 0) { | |
| $('#termsAgree7').prop('checked', true).siblings('label').addClass('on'); | |
| } | |
| select_email_domain('email'); | |
| <!--{? (joinField.marriFl.use == 'y' && joinField.marriDate.use == 'y') || joinField.birthDt.use == 'y' }--> | |