public function __construct()
 {
     /**
      * 어드민 화면에서 통지하는 기능은 WSKL_Plugins_React 를 참고.
      *
      * @see WSKL_Plugins_React::wp_members()
      */
     if (defined('DISABLE_WP_CRON') && DISABLE_WP_CRON) {
         return;
     }
     if (wskl_is_plugin_inactive(WP_MEMBERS_PLUGIN)) {
         return;
     }
     // 관리자 모듈
     if (WSKL()->is_request('admin')) {
         wskl_load_module('/includes/inactive-accounts/admin/class-wskl-inactive-accounts-admin.php');
         $this->admin = new WSKL_Inactive_Accounts_Admin();
     }
     /**
      * 사용자 로그인 시, 로그인 시각 기록
      *
      * @see wp-includes/user.php
      * @see wp_signon()
      */
     add_action('wp_login', array($this, 'set_login_data'), 10, 2);
     /**
      * 크론 스케쥴 확장 작업
      */
     add_filter('cron_schedules', array($this, 'add_cron_schedule'));
     if (wskl_debug_enabled()) {
         // 디버그 전용...
         add_filter('cron_request', array($this, 'add_xdebug_cookie_value'));
     }
     /**
      * 크론 스케쥴로 새성된 훅
      */
     add_action('wskl_inactive_accounts_check', array($this, 'do_interval_jobs'));
     /**
      * WP-Members 패스워드 초기화
      */
     add_action('wpmem_pwd_reset', array($this, 'recover_user_role'), 10, 1);
     // 나머지 모듈들
     wskl_load_module('/includes/inactive-accounts/class-wskl-inactive-accounts-email.php');
     wskl_load_module('/includes/inactive-accounts/admin/class-wskl-inactive-accounts-tinymce-buttons.php');
     wskl_load_module('/includes/inactive-accounts/class-wskl-inactive-accounts-shortcodes.php');
     $this->shortcodes = new WSKL_Inactive_Accounts_Shortcodes();
     if (wskl_debug_enabled()) {
         add_action('wp_ajax_inactive-accounts_test', array($this, 'test'));
     }
 }
/**
 * Prepared for CloudFlare Flexible SSL.
 *
 * @return mixed|string|void
 */
function wskl_get_host_api_url()
{
    $cassandra_ip_address = wskl_get_option('cassandra_ip_address', '');
    $override_url = wskl_get_option('develop_cassandra_url');
    if (empty($cassandra_ip_address)) {
        $hostname = parse_url(WSKL_HOST_API_URL, PHP_URL_HOST);
        if ($hostname) {
            $cassandra_ip_address = gethostbyname($hostname);
            update_option(wskl_get_option_name('cassandra_ip_address'), $cassandra_ip_address);
        }
    }
    if (wskl_debug_enabled() && !empty($override_url)) {
        return $override_url;
    }
    if ($cassandra_ip_address == '127.0.0.1') {
        return WSKL_ALTERNATE_HOST_API_URL;
    }
    return WSKL_HOST_API_URL;
}
 public function test_wskl_debug()
 {
     $this->assertTrue(wskl_debug_enabled());
 }
 /**
  * @callback
  * @action     wp_ajax_wskl_refresh_log
  * @used-by    Woosym_Korean_Localization::init_hooks()
  */
 function wskl_refresh_log()
 {
     if (!wskl_debug_enabled()) {
         die;
     }
     if (!wp_verify_nonce($_GET['_wpnonce'], '_wpnonce')) {
         die('nonce verification failed');
     }
     if (!current_user_can('manage_options')) {
         die('permission error');
     }
     echo wskl_get_wp_log();
     die;
 }
    private function settings_fields()
    {
        // specify settings fields
        $pg_agency = get_option(wskl_get_option_name('pg_agency'));
        $settings['preview'] = array('title' => __('일러두기', 'wskl'), 'description' => __('다보리를 만든 목적과 사용 방법 및 구매와 기술지원 방법과 업그레이드 등을 설명합니다.', 'wskl'), 'fields' => array(array('id' => 'dummy_1', 'label' => __('제작 목적', 'wskl'), 'description' => '<ol class="wskl-notice">' . '<li>' . __('워드프레스와 우커머스를 Cafe24나 고도몰처럼" 더 쉽고 더 편리하게 만들었습니다.', 'wskl') . '</li>' . '<li>' . __('쇼핑몰 영업에 꼭 필요한 기능만을 모두 담아서 최소의 비용으로 제공합니다.', 'wskl') . '</li>' . '<li>' . __('"다보리 마케팅 자동화 서버와 연동"하여 중소상공인을 위한 "마케팅 자동화" 서비스를 제공합니다.', 'wskl') . '</li>' . '</ol>', 'type' => 'caption', 'default' => ''), array('id' => 'dummy_2', 'label' => __('사용방법', 'wskl'), 'description' => __('<span class="wskl-notice">플러그인 인증키로 "제품 인증"을 하기 전에는 본플러그인의 기능을 사용할 수 없습니다.<br/></span>
						<a href="https://www.dabory.com/" target="_blank" >"다보리 플러그인 인증키 확인" 페이지로 바로가기</a>
					', 'wskl'), 'type' => 'caption', 'default' => ''), array('id' => 'dummy_5', 'label' => __('업데이트/기술지원', 'wskl'), 'description' => __('
						<a href="http://www.symphonysoft.co.kr/%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8/" target="_blank" >플러그인 다운로드</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="https://www.dabory.co.kr/cs/service/" target="_blank">기술지원 요청 바로가기</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="https://www.dabory.com/shoppingmall/webhosting/" target="_blank" >전용관리 웹호스팅 알아보기</a><br/>
					', 'wskl'), 'type' => 'caption', 'default' => ''), array('id' => 'enable_config_editor', 'label' => __('설정편집', 'wskl'), 'description' => __('간단한 wp-config.php 설정 편집 기능 사용.<br><span class="wskl-notice">이 설정은 wp-config.php 파일을 편집합니다. 유지보수시에만 제한적으로 이용하세요.</span>', 'wskl'), 'type' => 'checkbox', 'default' => '')));
        $payment_description = '';
        //		$essential_description            = '';
        //		$extension_description            = '';
        //		$marketing_automation_description = '';
        if (isset($_GET['tab']) && $_GET['tab'] == 'authentication') {
            $payment_description = sprintf('%s <a href="#" id="payment_license_activation">%s</a><br/><span id="payment_license_status">%s</span>', __('활성화 키를 입력후 기능을 활성화하십시오.', 'wskl'), __('키 인증', 'wskl'), WSKL_Auth::get_license_duration_string('payment'));
            //			$essential_description = sprintf(
            //				'%s <a href="#" id="essential_license_activation">%s</a><br/><span id="essential_license_status">%s</span>',
            //				__( '핵심기능 키를 입력후 기능을 활성화하십시오.', 'wskl' ),
            //				__( '핵심기능 인증', 'wskl' ),
            //				WSKL_Auth::get_license_duration_string( 'essential' )
            //			);
            //
            //			$extension_description = sprintf(
            //				'%s <a href="#" id="extension_license_activation">%s</a><br/><span id="extension_license_status">%s</span>',
            //				__( '확장기능 키를 입력후 기능을 활성화하십시오.', 'wskl' ),
            //				__( '확장기능 인증', 'wskl' ),
            //				WSKL_Auth::get_license_duration_string( 'extension' )
            //			);
            //
            //			$marketing_automation_description = sprintf(
            //				'%s <a href="#" id="marketing_automation_license_activation">%s</a><br/><span id="marketing_automation_license_status">%s</span>',
            //				__( '마케팅자동화 키를 입력후 기능을 활성화하십시오.', 'wskl' ),
            //				__( '마케팅자동화 인증', 'wskl' ),
            //				WSKL_Auth::get_license_duration_string( 'marketing' )
            //			);
        }
        $settings['authentication'] = array('title' => __('제품인증', 'wskl'), 'description' => __('제품 구매 또는 무료 사용시 www.dabory.com에서 부여된 활성화키로 플러그인을 먼저 활성화후 사용 가능합니다.<br/>
						<a href="https://www.dabory.com/my-account/view-order/" target="_blank" ><span class="wskl-notice">"다보리 플러그인 인증키 확인" 페이지로 바로가기</span></a>', 'wskl'), 'fields' => array(array('id' => 'dummy_3', 'label' => __('사이트 주소(URL)', 'wskl'), 'description' => __('
						' . get_option('siteurl') . '<br/>
						<span class="wskl-notice">인증키는 사이트 주소와 다보리 메타(meta) 서버 측과 동기화되어 활성화되므로 <br/>
						관리자모드 "설정"에서 "사이트를 변경하는 경우" 다시 기능 활성화를 하셔야 합니다. </span>
					', 'wskl'), 'type' => 'caption', 'default' => ''), array('id' => 'payment_license', 'label' => __('활성화 키', 'wskl'), 'description' => $payment_description, 'type' => 'longtext', 'default' => '', 'placeholder' => '')));
        $settings['checkout-payment-gates'] = array('title' => __('지불기능(A)', 'wskl'), 'description' => __('국내의 모든 지불 대행 회사의 결제 플러그인을 지원합니다.<br/>
						<span class="wskl-notice">현재 지원되지 않는 플러그인은 무료로 개발해드립니다.</span><br/>
			            결제대행(PG)회사를 추가하기를 원하는 경우  service@econoq.co.kr 로 메일 주시면  1주일이내에 개발해 드리겠습니다.<br/>
						<a href="http://www.symphonysoft.co.kr/" target="_blank">신규 플러그인 개발 요청 하러 가기</a><br/>', 'wskl'), 'fields' => array(array('id' => 'enable_sym_pg', 'label' => __('다보리 PG 사용 설정', 'wskl'), 'description' => __('다보리 PG (Payment Gateway) 기능 사용 여부를 설정합니다.', 'wskl'), 'type' => 'checkbox', 'default' => ''), array('id' => 'company', 'label' => __('회사명 입력 가능', 'wskl'), 'description' => __('사업자 대상 위주 판매의 경우 회사명을 입력 가능 설정을 합니다.', 'wskl'), 'type' => 'checkbox', 'default' => ''), array('id' => 'pg_agency', 'label' => __('결제대행업체', 'wskl'), 'description' => __('<span class="wskl-notice">변경시 자동으로 저장됩니다.</span> ', 'wskl'), 'type' => 'select', 'options' => WSKL_Payment_Gates::get_pay_gates(), 'default' => 'payapp')));
        switch ($pg_agency) {
            // 기존 PG Agency (Active-X 기반) 공통 설정 필드 #1
            case 'kcp':
            case 'inicis':
            case 'ags':
                $agencies_common_fields = (include WSKL_PATH . '/includes/admin/settings/structures/checkout-payment-gates/fields/classic-pg-agencies-common-fields-1.php');
                $settings['checkout-payment-gates']['fields'] = array_merge($settings['checkout-payment-gates']['fields'], $agencies_common_fields);
                break;
                // 페이앱 전용 필드 #1
            // 페이앱 전용 필드 #1
            case 'payapp':
                array_push($settings['checkout-payment-gates']['fields'], array('id' => 'checkout_methods', 'label' => __('결제방식 지정', 'wskl'), 'description' => __('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;사용하실 결제방식을 지정해 주십시오.', 'wskl'), 'type' => 'checkbox_multi', 'options' => WSKL_Payment_Gates::get_checkout_methods(), 'default' => array('credit', '신용카드')));
                break;
                // 아임포트 전용 필드 #1
            // 아임포트 전용 필드 #1
            case 'iamport':
                array_push($settings['checkout-payment-gates']['fields'], array('id' => 'checkout_methods', 'label' => __('결제방식 지정', 'wskl'), 'description' => __('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;사용하실 결제방식을 지정해 주십시오.', 'wskl'), 'type' => 'checkbox_multi', 'options' => WSKL_Payment_Gates::get_checkout_methods('iamport'), 'default' => array('credit', '신용카드')), array('id' => 'dummy_33', 'label' => __('아임포트 결정방법', 'wskl'), 'description' => __('<span class="wskl-notice">아임포트 결제와 관련된 내용은 아임포트 서버에서 실행되는 내용이므로 다보리에서 책임지지 않습니다. </span><br><a href="https://admin.iamport.kr/settings" target="_blank">아임포트 PG 설정 바로가기</a><br/>
						1. 아임포트에서는 현재 카카오페이, LGU+, KCP, 이니시스, JT-Net, 나이스정보통신이 지원되며 <br>가맹점 설정은 아임포트 사이트에 회원가입/로그인한 후 설정하여야 합니다.', 'wskl'), 'type' => 'caption', 'default' => ''));
                break;
        }
        switch ($pg_agency) {
            // 페이앱 전용 필드 #2: 인증사항
            case 'payapp':
                $settings['checkout-payment-gates']['fields'] = array_merge($settings['checkout-payment-gates']['fields'], include WSKL_PATH . '/includes/admin/settings/structures/checkout-payment-gates/fields/payapp/payapp-fields.php');
                break;
            case 'kcp':
                array_push($settings['checkout-payment-gates']['fields'], array('id' => 'kcp_sitename', 'label' => __('사이트이름', 'wskl'), 'description' => __('자체적으로 정한 사이트 이름을 입력해주십시오. (반드시 영문자로 설정하여 주시기 바랍니다.)', 'wskl'), 'type' => 'longtext', 'default' => '', 'placeholder' => __('예) 다보리 쇼핑몰', 'wskl')), array('id' => 'kcp_sitecd', 'label' => __('Site Code', 'wskl'), 'description' => __('KCP 에서 발급된 Site Code 를 정확히 입력해주십시오.(중요)', 'wskl'), 'type' => 'longtext', 'default' => '', 'placeholder' => __('예) T0000', 'wskl')), array('id' => 'kcp_sitekey', 'label' => __('Site Key', 'wskl'), 'description' => __('KCP 에서 발급된 Site Key를 정확히 입력해주십시오.(중요)', 'wskl'), 'type' => 'longtext', 'default' => '', 'placeholder' => __('예) 3grptw1.zW0GSo4PQdaGvsF__', 'wskl')), array('id' => 'dummy_11', 'label' => __('상점등록', 'wskl'), 'description' => __('<span class="wskl-notice">상점등록 과정은 매우 중요한 사항이므로  정확히 숙지하고 실행해주셔야 합니다. </span></br>
						1. KCP와 계약 체결 후 다음의 내용을 발급 받습니다.</br>
                        &nbsp;&nbsp;&nbsp;&nbsp;A.Site Code와 Site Key를 입력하고 저장합니다.</br>
                         2. 당 플러그인의 KCP 홈 폴더중 “bin” 폴더에 있는 pp_cli 화일의 실행권한을 755로 바꾸어 줍니다. 그대로 둘 경우 결제 않됨.</br>
                        &nbsp;&nbsp;&nbsp;&nbsp;예)/public_html/wp-content/plugins/wskl/includes/lib/homekcp/bin/pp_cli</br>
                        &nbsp;&nbsp;&nbsp;&nbsp;(1) ssh로 로그인 후, 해당폴더에서 "chmod 755 pp_cli" 실행 또는</br>
                        &nbsp;&nbsp;&nbsp;&nbsp;(2) FTP 로 접속하여 해당 화일에 오른쪽 마우스를 클릭 - "화일 권한" 확인 후 755 로 저장</br>
 						<span class="wskl-info">테스트시에는기본 설치된 테스트용 KCP TEST  상점이 사용되므로 참고하세요</span></br>', 'wskl'), 'type' => 'caption', 'default' => ''));
                break;
            case 'inicis':
                array_push($settings['checkout-payment-gates']['fields'], array('id' => 'inicis_admin', 'label' => __('키패스워드', 'wskl'), 'description' => __('키패스워드입력 - 상점관리자 패스워드와 무관합니다.(중요)', 'wskl'), 'type' => 'text', 'default' => '', 'placeholder' => __('예) 1111', 'wskl')), array('id' => 'inicis_mid', 'label' => __('상점 아이디', 'wskl'), 'description' => __('이니시스에서 발급된 상점아이디를 대소문자 구분하여 입력해주십시오.(중요)', 'wskl'), 'type' => 'text', 'default' => '', 'placeholder' => __('예) INIpayTest', 'wskl')), array('id' => 'inicis_url', 'label' => __('상점 URL', 'wskl'), 'description' => __('상점의 홈페이지 주소를 입력해주십시오.( http://포함 )', 'wskl'), 'type' => 'longtext', 'default' => '', 'placeholder' => __('예) http://www.your_domain.co.kr', 'wskl')), array('id' => 'dummy_11', 'label' => __('상점등록', 'wskl'), 'description' => __('<span class="wskl-notice">상점등록 과정은 매우 중요한 사항이므로  정확히 숙지하고 실행해주셔야 합니다. </span></br>
						1. 이니시스와 계약 체결 후 다음의 내용을 발급 받습니다.</br>
                        &nbsp;&nbsp;&nbsp;&nbsp;A. 키패스워드(숫자 4자리)와  상점 아이디(10자리)를 해당설정에 입력하고 저장합니다.</br>
                        &nbsp;&nbsp;&nbsp;&nbsp;B.키화일 등  4개 (keypass.enc, mcert.pem, mpriv.pem, readme.txt)</br>
                        2. 당 플러그인의 이니페이 홈 폴더중 “key” 폴더에 상점아이디와 동일한 이름의 서브 디렉터리를 만듭니다(대소문자 구별함.).</br>
                        &nbsp;&nbsp;&nbsp;&nbsp;예)/public_html/wp-content/plugins/wskl/includes/lib/homeinicis/key/[상점아이디]</br>
                        3. 발급받은 화일  4개 (keypass.enc, mcert.pem, mpriv.pem, readme.txt)를 2.에서 만든 폴더에 복사합니다.</br>
 						<span class="wskl-info">테스트시에는기본 설치된 테스트용 INIpayTest 상점아이디폴더가 사용되므로 참고하세요</span></br>', 'wskl'), 'type' => 'caption', 'default' => ''));
                break;
            case 'lgu+':
                break;
            case 'ags':
                array_push($settings['checkout-payment-gates']['fields'], array('id' => 'ags_storenm', 'label' => __('상점명', 'wskl'), 'description' => __('올더게이트 상점명을 입력해주십시오', 'wskl'), 'type' => 'text', 'default' => '', 'placeholder' => __('예) 올더게이트', 'wskl')), array('id' => 'ags_storeid', 'label' => __('상점 ID', 'wskl'), 'description' => __('올더게이트에서 발급된 상점ID를 정확히 입력해주십시오.(중요)', 'wskl'), 'type' => 'text', 'default' => '', 'placeholder' => __('예) aegis', 'wskl')), array('id' => 'ags_mallurl', 'label' => __('상점 URL', 'wskl'), 'description' => __('상점의 홈페이지 주소를 입력해주십시오.( http://포함 )', 'wskl'), 'type' => 'longtext', 'default' => '', 'placeholder' => __('예) http://www.allthegate.com', 'wskl')), array('id' => 'ags_hp_id', 'label' => __('CPID(모바일결제)', 'wskl'), 'description' => __('올더게이트에서 발급받으신 CPID로 변경', 'wskl'), 'type' => 'text', 'default' => '', 'placeholder' => ''), array('id' => 'ags_hp_pwd', 'label' => __('CP 비밀번호(모바일결제)', 'wskl'), 'description' => __('올더게이트에서 발급받으신 비밀번호로 변경', 'wskl'), 'type' => 'text', 'default' => '', 'placeholder' => ''), array('id' => 'ags_hp_subid', 'label' => __('SUB_ID(모바일결제)', 'wskl'), 'description' => __('올더게이트에서 발급받으신 상점만 입력', 'wskl'), 'type' => 'text', 'default' => '', 'placeholder' => ''), array('id' => 'ags_prodcode', 'label' => __('상품코드(모바일결제)', 'wskl'), 'description' => __('올더게이트에서 발급받으신 상품코드로 변경', 'wskl'), 'type' => 'text', 'default' => '', 'placeholder' => ''), array('id' => 'ags_unittype', 'label' => __('상품종류(모바일결제)', 'wskl'), 'description' => __('올더게이트에서 발급받으신 상품종류로 변경: 디지털컨텐츠=1, 실물(상품)=2', 'wskl'), 'type' => 'text', 'default' => '', 'placeholder' => ''));
                break;
            case 'iamport':
                array_push($settings['checkout-payment-gates']['fields'], array('id' => 'iamport_user_code', 'label' => __('가맹점 식별코드', 'wskl'), 'description' => __('아임포트의 가맹점 식별코드를 입력하여 주십시오.', 'wskl'), 'type' => 'text', 'default' => '', 'placeholder' => ''), array('id' => 'iamport_rest_key', 'label' => __('REST API 키', 'wskl'), 'description' => __('아임포트의 REST API 키를 입력하여 주십시오.', 'wskl'), 'type' => 'text', 'default' => '', 'placeholder' => ''), array('id' => 'iamport_rest_secret', 'label' => __('REST API secret', 'wskl'), 'description' => __('아임포트의 REST API secret 입력하여 주십시오.', 'wskl'), 'type' => 'longtext', 'default' => '', 'placeholder' => ''), array('id' => 'dummy_31', 'label' => __('가맹점 등록', 'wskl'), 'description' => __('
						<span class="wskl-notice">아임포트의 가맹점 등록 과정은 좀 특이하므로 세심한 주의를 요합니다.<br>고객의 결제 진행시 결제 정보를 아임포트 서버로 보내주면 아임포트 서버가 결제 처리를 대행하는<br> 구조이므로 각 결제 업체의 PG 연동 정보가 아임포트 회원 정보에 설정되어야 합니다.</span></br><span class="wskl-info">
						1. 아임포트 회원가입/로그인 후 시스템설정->내정보 에서 확인된 정보를 입력합니다.</br>
                        &nbsp;&nbsp;아임포트 회원로그인 후 확인한 REST API 정보를 입력하고 저장합니다.</br><a href="https://admin.iamport.kr/settings" target="_blank">https://admin.iamport.kr/settings  REST API 정보를 확인하러 가기</a></br>
 						2. <a href="https://admin.iamport.kr/settings" target="_blank">https://admin.iamport.kr/settings</a> 의 "PG연동 설정"에서 <br>각 결제 대행업체에서 발급 받은 PG연동 정보를 설정합니다. </br> </font></br>
  					', 'wskl'), 'type' => 'caption', 'default' => ''));
                break;
        }
        // 페이앱, 아임포트는 추가설정내용 없음.
        if (!in_array($pg_agency, array('payapp', 'iamport'))) {
            array_push($settings['checkout-payment-gates']['fields'], array('id' => 'dummy_1', 'label' => __('추가설정내용', 'wskl'), 'description' => __('<span class="wskl-notice">해당페이지 설정후 반드시 추가해야할 "우커머스 결제설정" 내용입니다.</span><a href="' . esc_url(add_query_arg(array('page' => 'wc-settings', 'tab' => 'checkout'), admin_url('admin.php'))) . '" target="_blank">결제설정 바로가기</a><br/>
						1. "해당 페이지를 설정하면 우커머스->설정->결제 설정"의 하위메뉴에 지정한 결제 방법이 추가됩니다. <br/>
						   &nbsp;&nbsp;&nbsp;각각의 하위메뉴로 들어가서 활성화에 체크하여 주십시오.  <br/>
						2. "우커머스->설정->결제옵션->지불게이트웨이"에서 고객의 결제페이지에 보일 "결제 방법의 순서"를 결정하여 주십시오.<br/>
						3. "우커머스->설정->결제설정"의 각 결제 방식을 선택하면 고객의 결제페이지에 보일 결제방식에 대한 안내문 변경이 가능합니다.<br/>', 'wskl'), 'type' => 'caption', 'default' => ''));
        }
        $settings['essential-features'] = (include WSKL_PATH . '/includes/admin/settings/structures/essential-features.php');
        $settings['convenience-features'] = (include WSKL_PATH . '/includes/admin/settings/structures/convenience-features.php');
        $settings['social-login'] = array('title' => __('소셜기능(S)', 'wskl'), 'description' => __('계정관리와  로그인 관련 설정입니다.(소셜 아이콘은 includes/lib/custom 폴더를 참조)', 'wskl'), 'fields' => array(array('id' => 'enable_social_login', 'label' => __('다보리 소셜 로그인 활성화 ', 'wskl'), 'description' => __('다보리에서 제공한 로그인을 사용하게 됩니다.', 'wskl'), 'type' => 'checkbox', 'default' => ''), array('id' => 'fb_login', 'label' => __('페이스북  계정으로 로그인 활성화 ', 'wskl'), 'description' => __('활성화이후  발급키 입력창이 나타납니다.', 'wskl'), 'type' => 'checkbox', 'default' => '')));
        if (get_option(WSKL_PREFIX . 'fb_login') == 'on') {
            array_push($settings['social-login']['fields'], array('id' => 'fb_app_id', 'label' => __('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[페이스북] App ID', 'wskl'), 'description' => __('페이스북의 App ID 를 입력하십시오', 'wskl'), 'type' => 'longtext', 'default' => '', 'placeholder' => ''), array('id' => 'fb_app_secret', 'label' => __('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[페이스북] App Secret', 'wskl'), 'description' => __('페이스북의 App Secret을 입력하십시오', 'wskl'), 'type' => 'longtext', 'default' => '', 'placeholder' => ''), array('id' => 'fb_login_link_text', 'label' => __('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[페이스북]링크 텍스트', 'wskl'), 'description' => __('로그인 링크에 보여질 텍스트 또는 이미지 태그를 입력하십시오. 기본 아이콘을 사용하려면 \'[icon]\'으로 입력하세요.', 'wskl'), 'type' => 'textarea', 'default' => '[icon]', 'placeholder' => ''), array('id' => 'dummy_13', 'label' => __('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[페이스북] 키발급', 'wskl'), 'description' => __('
						<span class="wskl-notice">반드시 https://developers.facebook.com 에서 키발급을 먼저 받으십시오.</span>   <a href="https://developers.facebook.com" target="_blank" >키발급 바로가기</a><br/>
						1. My App 메뉴에서 Add a New App 을 클릭한 후 Website 를 선택하십시오. <br/>
						2. 해당웹사이트의 이름을 입력하시고 Create New Facebook ID 하십시오. <br/>
						3. 반드시 Site URL에 http://를 포함한 고객의 웹사이트 주소를 입력하십시오. <br/>
						4. App ID 생성이 완료되면 반드시 해당 App의 Settings 로 가셔서 App Domains와 Website에서 <br/>고객의
						    웹사이트 주소가 일치하는 지 확인하세요. <span class="wskl-notice">웹사이트 주소가 바뀔때 반드시 여기와 일치시켜야 합니다.</span><br/>
						5. App ID와 App Secret 을 확인하신 후 다보리 플러그인의 해당 키값을 입력하고 저장하여 주십시오.<br/>
					', 'wskl'), 'type' => 'caption', 'default' => ''));
        }
        array_push($settings['social-login']['fields'], array('id' => 'naver_login', 'label' => __('네이버 계정으로 로그인 활성화 ', 'wskl'), 'description' => __('활성화이후  발급키 입력창이 나타납니다. ', 'wskl'), 'type' => 'checkbox', 'default' => ''));
        if (get_option($this->_prefix . 'naver_login') == 'on') {
            array_push($settings['social-login']['fields'], array('id' => 'naver_client_id', 'label' => __('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[네이버] Client ID', 'wskl'), 'description' => __('네이버의 Client ID를 입력하십시오', 'wskl'), 'type' => 'longtext', 'default' => '', 'placeholder' => ''), array('id' => 'naver_client_secret', 'label' => __('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[네이버] Client Secret', 'wskl'), 'description' => __('네이버의 Client Secret 을 입력하십시오', 'wskl'), 'type' => 'longtext', 'default' => '', 'placeholder' => ''), array('id' => 'naver_login_link_text', 'label' => __('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[네이버] 링크 텍스트', 'wskl'), 'description' => __('로그인 링크에 보여질 텍스트 또는 이미지 태그를 입력하십시오. 기본 아이콘을 사용하려면 \'[icon]\'으로 입력하세요.', 'wskl'), 'type' => 'textarea', 'default' => '[icon]', 'placeholder' => ''), array('id' => 'dummy_14', 'label' => __('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[네이버] 키발급', 'wskl'), 'description' => __('
						<span class="wskl-notice">반드시  http://developer.naver.com/wiki/pages/NaverLogin 에서 키발급을 먼저 받으십시오.</span>   <a href=" http://developer.naver.com/wiki/pages/NaverLogin" target="_blank" >키발급 바로가기</a><br/>
						1. [키발급 관리]를 선택한 후 네이버 로그인을 선택하십시오.. <br/>
						2. 새 애플리케이션을 등록하고 서비스 환경은 [www-Web]으로 선택하십시오.. <br/>
						3. PC웹과 모바일 웹에서 고객의  웹사이트 주소를 입력하시고 콜백도 동일하게 입력하십시오. <br/>
                        4. Client ID 생성이 완료되면 어플리케이션 메뉴의 [일반]메뉴로 고객의  PC웹과 모바일 웹사이트 주소가 일치하는 지 확인하세요. <br/>
						<span class="wskl-notice">웹사이트 주소가 바뀔때 반드시 여기와 일치시켜야 합니다.</span><br/>
						5. Client ID와 Client Secret 을 확인하신 후 다보리 플러그인의 해당 키값을 입력하고 저장하여 주십시오.<br/>
					', 'wskl'), 'type' => 'caption', 'default' => ''));
        }
        $settings['protection-features'] = array('title' => __('차단보안기능(R)', 'wskl'), 'description' => __('특별한 관리없이 악성댓글이나 악성트래픽이 대폭 감소합니다. 한국인 대상 사이트의 경우 한국,미국만 오픈해도 됩니다.', 'wskl'), 'fields' => array(array('id' => 'enable_countryip_block', 'label' => __('국가별 IP 차단', 'wskl'), 'description' => __('국가별 IP를 차단하여 해킹을 미연에 방지합니다.</br>
						활성화시 반드시 아래의 "화이트리스트 국가코드"를 넣어 주십시오', 'wskl'), 'type' => 'checkbox', 'default' => ''), array('id' => 'white_ipcode_list', 'label' => __('화이트 IP 코드 리스트', 'wskl'), 'description' => __('차단하지 않을 국가의 IP 코드를 추가합니다. 컴마로 분리. 자세한 국가코드는 <a href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2" target="_blank">ISO 3166-1 alpha-2</a>를 참고하세요. </br><span class="wskl-description">예) KR,US,JP,CN => KR-한국 US-미국, JP-일본, CN-중국</span>', 'wskl'), 'type' => 'longtext', 'default' => 'KR,US,JP,CN', 'placeholder' => 'KR,US,JP,CN'), array('id' => 'dummy_1', 'label' => __('작동 상황', 'wskl'), 'description' => site_url() == wskl_get_option('ip_block_target') ? '<span class="wskl-info">' . __('차단 기능이 동작합니다.', 'wskl') . '</span>' : '<span class="wskl-notice">' . __('도메인이 변경되어 기능이 중지되었습니다. 설정 저장 버튼을 눌러 다시 활성화시켜 주세요', 'wskl') . '</span>')));
        $settings['marketing'] = (include WSKL_PATH . '/includes/admin/settings/structures/marketing-automation.php');
        if (wskl_lab_enabled()) {
            $settings['beta-features'] = (include WSKL_PATH . '/includes/admin/settings/structures/beta-features.php');
        }
        if (wskl_debug_enabled()) {
            $settings['developer'] = (include WSKL_PATH . '/includes/admin/settings/structures/developer.php');
        }
        $settings = apply_filters('wskl_settings_fields', $settings);
        return $settings;
    }
    function wskl_get_wp_log()
    {
        $log_file = WP_CONTENT_DIR . '/debug.log';
        if (file_exists($log_file)) {
            $log_text = tail_custom($log_file, wskl_get_option('develop_log_line', 100));
        } else {
            $log_text = 'LOG FILE NOT FOUND!';
        }
        // note: too many lines will refuse conversion.
        $log_text = htmlspecialchars($log_text, ENT_QUOTES);
        return $log_text;
    }
}
$developer = array('title' => __('개발자용', 'wskl'), 'description' => __('개발자용 탭. WSKL_DEBUG == TRUE 면 나오는 탭', 'wskl'), 'fields' => array(array('id' => 'develop_xdebug_always_on', 'label' => __('Always Enable XDEBUG', 'wskl'), 'description' => __('XDEBUG SESSION ID를 쿠키로 전송', 'wskl'), 'type' => 'checkbox', 'default' => ''), array('id' => 'develop_xdebug_session_id', 'label' => __('XDEBUG SESSION ID', 'wskl'), 'description' => __('Value will set by cookie!', 'wskl'), 'type' => 'text', 'default' => ''), array('id' => 'develop_enable_update_session_id', 'label' => __('ALLOW SESSION ID UPDATE', 'wskl'), 'description' => __('XDEBUG_SESSION_ID 파라미터를 발견하면 세션 ID를 자동 변경.', 'wskl'), 'type' => 'checkbox', 'default' => ''), array('id' => 'develop_cassandra_url', 'label' => __('CASSANDRA URL OVERRIDE', 'wskl'), 'description' => '카산드라의 URL 주소를 변경. https 환경에 문제가 있을 경우, 혹은 테스트 용도로 Override. 기본 주소: ' . WSKL_HOST_API_URL, 'type' => 'text', 'default' => ''), array('id' => 'develop_emulate_sms', 'label' => __('SMS Emulation', 'wskl'), 'description' => __('SMS 메시지를 실제로 보내지는 않음. SMS 로직 테스트에 사용. 전송에 사용된 파라미터는 로그에 기록됨.', 'wskl'), 'type' => 'checkbox', 'default' => '')));
// append only if current tab is displayed
if (wskl_debug_enabled() && isset($_GET['tab']) && $_GET['tab'] == 'developer') {
    $developer['fields'][] = array('id' => 'develop_log_line', 'type' => 'text', 'label' => __('DISPLAY LAST N LINES', 'wskl'), 'default' => 100);
    $nonce = wp_create_nonce('_wpnonce');
    $button_html = <<<EOT
<button class="button" type="button" id="refresh-log" onclick="javascript:refresh_log()">
\tRefresh Log
</button>
<script type="text/javascript">
\tfunction refresh_log() {
\t\tvar logDisplay = jQuery('pre.wskl-log-display');
\t\tlogDisplay.html('');
\t\tjQuery.get(ajaxurl, {
\t\t\t'action': 'wskl_refresh_log',
\t\t\t'_wpnonce': '{$nonce}'
\t\t\t}, 
\t\t\tfunction(data) {
<?php

if (!wskl_debug_enabled()) {
    return;
}
if (wskl_is_option_enabled('develop_xdebug_always_on')) {
    add_action('init', 'wskl_add_xdebug_session_start');
}
function wskl_add_xdebug_session_start()
{
    $session_value = absint(wskl_get_option('develop_xdebug_session_id'));
    if ($session_value) {
        setcookie('XDEBUG_SESSION', $session_value, time() + HOUR_IN_SECONDS);
    } else {
        setcookie('XDEBUG_SESSION', '', time() - DAY_IN_SECONDS);
    }
}
add_action('admin_notices', 'wskl_output_this_is_debug_mode');
function wskl_output_this_is_debug_mode()
{
    printf('<div class="notice error"><p>%s</p></div>', __('알림: 다보리 플러그인이 디버그 모드에서 동작하고 있습니다!', 'wskl'));
}
if (wskl_is_option_enabled('develop_enable_update_session_id')) {
    add_action('init', 'wskl_update_xdebug_session_id', 5);
}
function wskl_update_xdebug_session_id()
{
    if (isset($_GET['XDEBUG_SESSION_START'])) {
        $session_id = absint($_GET['XDEBUG_SESSION_START']);
        if ($session_id) {
            update_option(wskl_get_option_name('develop_xdebug_session_id'), $session_id);