<?php
/**
 * @version     1.0
 * @menu		Booking > Settings > (Sync) Export page
 * @category    Settings API
 * @author      wpdevelop
 *
 * @web-site    https://wpbookingcalendar.com/
 * @email       info@wpbookingcalendar.com 
 * @modified    2017-07-09
 * 
 * This is COMMERCIAL SCRIPT
 * We are not guarantee correct work and support of Booking Calendar, if some file(s) was modified by someone else then wpdevelop.
 */

// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {exit;}



/**
 * Show Content
 *  Update Content
 *  Define Slug
 *  Define where to show
 */
class WPBC_Page_SettingsExportFeeds extends WPBC_Page_Structure {
    

    public $settings_api = false;

	
    public function in_page() {
		return 'wpbc-settings';
	}

    public function tabs() {
        
		$tabs = array();
                
        $tabs[ 'sync' ] = array(
                              'title'     => __( 'Sync', 'booking')					   // Title of TAB    
                            , 'page_title'=> __( 'Sync', 'booking')           // Title of Page   
                            , 'hint'      => __('Import' ,'booking') . ' / '  . __('Export' ,'booking')
                            //, 'link'      => ''                                 // Can be skiped,  then generated link based on Page and Tab tags. Or can  be extenral link
                            //, 'position'  => ''                                 // 'left'  ||  'right'  ||  ''
                            //, 'css_classes'=> ''                                // CSS class(es)
                            //, 'icon'      => ''                                 // Icon - link to the real PNG img
                            , 'font_icon' => 'wpbc_icn_get_import_export'         // CSS definition  of forn Icon
                            //, 'default'   => false                               // Is this tab activated by default or not: true || false. 
                            //, 'disabled'  => false                              // Is this tab disbaled: true || false. 
                            //, 'hided'     => false                              // Is this tab hided: true || false. 
                            , 'subtabs'   => array()   
                    );
        
        
        $subtabs =    array();
        
        $subtabs[ 'export' ] = array( 
                            'type' => 'subtab'                                  // Required| Possible values:  'subtab' | 'separator' | 'button' | 'goto-link' | 'html'
							, 'title' => __('Export' ,'booking') . ' - .ics'           // Title of TAB
                            , 'page_title' => __('Export Bookings via .ics' ,'booking')
											//. ' <span style="padding: 10px;font-size: 12px;font-style: italic;vertical-align: top;">Beta</span>'  // Title of Page
                            , 'hint' => __('Set up and configure the export of bookings into .ics feeds.' ,'booking') 				// Hint
                            , 'link' => ''                                      // link
                            , 'position' => ''                                  // 'left'  ||  'right'  ||  ''
                            , 'css_classes' => ''                               // CSS class(es)
                            //, 'icon' => 'http://.../icon.png'                 // Icon - link to the real PNG img
                            , 'font_icon' => 'wpbc-bi-box-arrow-up-right'   // CSS definition of Font Icon
                            , 'default' =>  false                                // Is this sub tab activated by default or not: true || false.
                            , 'disabled' => false                               // Is this sub tab deactivated: true || false. 
                            , 'checkbox'  => false                              // or definition array  for specific checkbox: array( 'checked' => true, 'name' => 'feature1_active_status' )   //, 'checkbox'  => array( 'checked' => $is_checked, 'name' => 'enabled_active_status' )
                            , 'content' => 'content'                            // Function to load as conten of this TAB

                        );
        
        $tabs[ 'sync' ]['subtabs'] = $subtabs;
        
        
        return $tabs;
    }


    /** Show Content of Settings page */
    public function content() {

        $this->css();
        
        ////////////////////////////////////////////////////////////////////////
        // Checking 
        ////////////////////////////////////////////////////////////////////////

        do_action( 'wpbc_hook_settings_page_header', 'export_feeds_settings');    // Define Notices Section and show some static messages, if needed
        
        if ( ! wpbc_is_mu_user_can_be_here('activated_user') ) return false;    // Check if MU user activated, otherwise show Warning message.
   
        // if ( ! wpbc_is_mu_user_can_be_here('only_super_admin') ) return false;  // User is not Super admin, so exit.  Basically its was already checked at the bottom of the PHP file, just in case.        
        
        ////////////////////////////////////////////////////////////////////////
        // Load Data 
        ////////////////////////////////////////////////////////////////////////

		
        ////////////////////////////////////////////////////////////////////////
        //  S u b m i t   Main Form  
        ////////////////////////////////////////////////////////////////////////
        
        $submit_form_name = 'wpbc_export_feeds';                         // Define form name
        
        // $this->get_api()->validated_form_id = $submit_form_name;             // Define ID of Form for ability to  validate fields (like required field) before submit.
        
        // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing
        if ( isset( $_POST['is_form_sbmitted_'. $submit_form_name ] ) ) {

            // Nonce checking    {Return false if invalid, 1 if generated between, 0-12 hours ago, 2 if generated between 12-24 hours ago. }
            $nonce_gen_time = check_admin_referer( 'wpbc_settings_page_' . $submit_form_name );  // Its stop show anything on submiting, if its not refear to the original page

            // Save Changes 
            $this->update();
        }                
        
         
        ////////////////////////////////////////////////////////////////////////
        // JavaScript: Tooltips, Popover, Datepick (js & css) 
        ////////////////////////////////////////////////////////////////////////
        
        echo '<span class="wpdevelop">';
        
        wpbc_js_for_bookings_page();                                        
        
        echo '</span>';

        ?><div class="clear" style="margin-bottom:0px;"></div><?php
		

		if ( ! function_exists( 'mb_detect_encoding' ) ) {                      //FixIn: 2.0.5.3							// FixIn: 8.1.3.25.
			?>
			<span class="metabox-holder">
				<div class="clear" style="height:15px;"></div>
				<div class="wpbc-settings-notice notice-error" style="text-align:left;font-size: 16px;padding: 5px 20px;">
					<strong><?php esc_html_e('Warning!' ,'booking'); ?></strong> <?php
						/* translators: 1: PHP function description. */
						printf( esc_attr__( 'This feature require %s', 'booking' ), 'PHP <strong>mbstring</strong> extension.' );
					?>
				</div>
				<div class="clear" style="height:25px;"></div><?php
		}


		$wpbm_version = wpbc_get_wpbm_version();				

		$wpbm_minimum_version = '2.1';

		// If lower than 2,  than  show warning
		if ( version_compare( $wpbm_version, $wpbm_minimum_version, '<') ) {
			$is_bm_exist = false;
		} else {
			$is_bm_exist = true;
		}

		if ( ! $is_bm_exist ) {			// Not Exist
			?>
			<span class="metabox-holder">
				<div class="clear" style="height:15px;"></div>
				<div class="wpbc-settings-notice notice-error" style="text-align:left;font-size: 16px;padding: 5px 20px;">
					<strong><?php esc_html_e('Important!' ,'booking'); ?></strong> <?php

						/* translators: 1: ... */
						echo wp_kses_post( sprintf( __( 'This feature require %1$s plugin. You can install %2$s plugin from this %3$spage%4$s.', 'booking' )
									, '<strong><a href="'. esc_attr( home_url() .'/wp-admin/plugin-install.php?s=booking+manager+by+oplugins&tab=search&type=term' ). '">'
									// , '<strong><a class="thickbox open-plugin-details-modal" href="'. home_url() .'/wp-admin/plugin-install.php?tab=plugin-information&plugin=booking-manager&TB_iframe=true&width=772&height=741"  target="_blank">'
									   . 'Booking Manager' . '</a></strong> '  . ' <strong>' .esc_attr($wpbm_minimum_version).'</strong> ('. esc_attr__('or newer','booking') . ') '
									,  '<strong>' . 'Booking Manager' . '</strong>'	
									, '<a target="_blank" href="https://wordpress.org/plugins/booking-manager/">'
									, '</a>'
							) );
					?>
				</div>
				<div class="clear" style="height:25px;"></div><?php

				wpbc_open_meta_box_section( 'wpbc_settings_ics_import_help_how', __('How it works', 'booking') );

					wpbc_ics_import_export__show_help_info( false );

				wpbc_close_meta_box_section();
			?></span><?php

		} else {						// Exist 
		
			if ( class_exists('wpdev_bk_personal') )
				wpbc_toolbar_search_by_id__top_form( array( 
														'search_form_id' => 'wpbc_booking_resources_search_form'
													  , 'search_get_key' => 'wh_resource_id'
													  , 'is_pseudo'      => false
												) );

			////////////////////////////////////////////////////////////////////////
			// Content  
			////////////////////////////////////////////////////////////////////////
			?>
			<div class="clear" style="margin-bottom:0px;"></div>
			<span class="metabox-holder">
				<form  name="<?php echo esc_attr( $submit_form_name ); ?>" id="<?php echo esc_attr( $submit_form_name ); ?>" action="" method="post" autocomplete="off">
					<?php 
					   // N o n c e   field, and key for checking   S u b m i t 
					   wp_nonce_field( 'wpbc_settings_page_' . $submit_form_name );
					?><input type="hidden" name="is_form_sbmitted_<?php echo esc_attr( $submit_form_name ); ?>" id="is_form_sbmitted_<?php echo esc_attr( $submit_form_name ); ?>" value="1" /><?php
					?>
					<div class="clear" style="margin-top:10px;"></div>
					<?php
	            		// Add hidden input SEARCH KEY field into  main form, if previosly was searching by ID or Title
						if ( class_exists('wpdev_bk_personal') )
	            			wpbc_hidden_search_by_id_field_in_main_form( array( 'search_get_key' => 'wh_resource_id' ) );													// FixIn: 8.0.1.12.
					?>
					<div id="wpbc_resources_link" class="clear"></div>
					<?php  if ( class_exists('wpdev_bk_personal') ) {  ?>
					<div id="wpbc_resource_table_gcal_id" class="wpbc_settings_row wpbc_settings_row_rightNO"><?php 

						//wpbc_open_meta_box_section( 'wpbc_settings_export_feeds_resources', __('Resources', 'booking') );

							wpbc_export_feeds__show_table();

						//wpbc_close_meta_box_section();
					?>
					</div>
					<div class="clear"></div>
					<?php  } else { 
					
						
						// Booking Calendar Free version
						
						wpbc_open_meta_box_section( 'wpbc_settings_export_feeds_resources',  __('Export' ,'booking') . ' .ics/ical ' . __('feed', 'booking') );

							wpbc_export_ics_feed__table();

						wpbc_close_meta_box_section();
					
					
					}
					?>
					<input type="submit" value="<?php esc_attr_e( 'Save Changes', 'booking' ); ?>" class="button button-primary wpbc_submit_button" />
					<div class="clear" style="height:25px;"></div>
					<?php

					wpbc_open_meta_box_section( 'wpbc_settings_ics_import_help_how', __( 'How it works', 'booking' ) );

						wpbc_ics_import_export__show_help_info( false );

					wpbc_close_meta_box_section();
					?><div class="clear"></div>
					
					
				</form>
			</span>
			<?php       
    
		}
        do_action( 'wpbc_hook_settings_page_footer', 'export_feeds_settings' );
        
        $this->enqueue_js();
    }


    /** Save Chanages */
    public function update() {

        if ( function_exists( 'wpbc_export_feeds__update') )
            wpbc_export_feeds__update();
		else 
			wpbc_export_ics_feed__update();		// Free version
		
        // Get Validated Email fields
		//$validated_fields = $this->get_api()->validate_post();        
		//$validated_fields = apply_filters( 'wpbc_fields_before_saving_to_db__export_feeds', $validated_fields );   //Hook for validated fields.
		//$this->get_api()->save_to_db( $validated_fields );
        
        // Old way of saving:
        // update_bk_option( 'booking_cache_expiration' , WPBC_Settings_API::validate_text_post_static( 'booking_cache_expiration' ) );
		
		wpbc_show_changes_saved_message();        
    }

//TODO: claer unused CSS here

    // <editor-fold     defaultstate="collapsed"                        desc=" CSS  &   JS   "  >
    
    /** CSS for this page */
    private function css() {
        ?>
        <style type="text/css">  
            .wpbc-help-message {
                border:none;
            }
            /* toolbar fix */
            .wpdevelop .visibility_container .control-group {
                margin: 2px 8px 3px 0;  /* margin: 0 8px 5px 0; */ /* FixIn:  9.5.4.8	*/
            }
            /* Selectbox element in toolbar */
            .visibility_container select optgroup{                            
                color:#999;
                vertical-align: middle;
                font-style: italic;
                font-weight: 400;
            }
            .visibility_container select option {
                padding:5px;
                font-weight: 600;
            }
            .visibility_container select optgroup option{
                padding: 5px 20px;       
                color:#555;
                font-weight: 600;
            }
            #wpbc_create_new_custom_form_name_fields {
                width: 360px;
                display:none;
            }
			.wpbc_tr_booking_export_feed_free input[type="text"].regular-text {
				margin-right:10px;
			}
            @media (max-width: 782px) {
                #wpbc_create_new_custom_form_name_fields {
                    width: 100%;
                }    
				.wpbc_tr_booking_export_feed_free code {
					display: inline;
					line-height: 2.7em;
					vertical-align: top;
					padding: 7px 10px;
					margin: 0;
				}
				.wpbc_tr_booking_export_feed_free input[type="text"].regular-text {
					width:65%;
					display: inline;
				}
            }
        </style>
        <?php
    }
    
    
    
    /**
	 * Add Custon JavaScript - for some specific settings options
     *      Executed After post content, after initial definition of settings,  and possible definition after POST request.
     * 
     * @param type $menu_slug
     */
    private function enqueue_js(){                                                        
        
        // JavaScript //////////////////////////////////////////////////////////////
        
        $js_script = '';
        

        //Show|Hide grayed section      
        $js_script .= " 
                        if ( ! jQuery('#export_feeds_booking_gcal_auto_import_is_active').is(':checked') ) {   
                            jQuery('.wpbc_tr_auto_import').addClass('hidden_items'); 
                        }
                      ";        
        // Hide|Show  on Click      Checkbox
        $js_script .= " jQuery('#export_feeds_booking_gcal_auto_import_is_active').on( 'change', function(){    
                                if ( this.checked ) { 
                                    jQuery('.wpbc_tr_auto_import').removeClass('hidden_items');
                                } else {
                                    jQuery('.wpbc_tr_auto_import').addClass('hidden_items');
                                }
                            } ); ";             
        //   F R O M
        $js_script .= " 
                        if ( jQuery('#export_feeds_booking_gcal_events_from').val() != 'date' ) {   
                            jQuery('.wpbc_tr_from_offset .wpbc_offset_value').removeClass('hidden_items');
                            jQuery('.wpbc_tr_from_offset .wpbc_offset_datetime').addClass('hidden_items');
                        } else {
                            jQuery('.wpbc_tr_from_offset .wpbc_offset_value').addClass('hidden_items');
                            jQuery('.wpbc_tr_from_offset .wpbc_offset_datetime').removeClass('hidden_items');                                    
                        }
                      ";
        // On select option in selectbox
        $js_script .= " jQuery('#export_feeds_booking_gcal_events_from').on( 'change', function(){    
                            jQuery('#export_feeds_booking_gcal_events_from_offset').val('');
                            if ( jQuery(this).val() != 'date' ){ 
                                jQuery('.wpbc_tr_from_offset .wpbc_offset_value').removeClass('hidden_items');
                                jQuery('.wpbc_tr_from_offset .wpbc_offset_datetime').addClass('hidden_items');
                            } else {
                                jQuery('.wpbc_tr_from_offset .wpbc_offset_value').addClass('hidden_items');
                                jQuery('.wpbc_tr_from_offset .wpbc_offset_datetime').removeClass('hidden_items');                                    
                            }
                        } ); ";        
        //   U n t i l 
        $js_script .= " 
                        if ( jQuery('#export_feeds_booking_gcal_events_until').val() != 'date' ) {   
                            jQuery('.wpbc_tr_until_offset .wpbc_offset_value').removeClass('hidden_items');
                            jQuery('.wpbc_tr_until_offset .wpbc_offset_datetime').addClass('hidden_items');
                        } else {
                            jQuery('.wpbc_tr_until_offset .wpbc_offset_value').addClass('hidden_items');
                            jQuery('.wpbc_tr_until_offset .wpbc_offset_datetime').removeClass('hidden_items');                                    
                        }
                      ";
        // On select option in selectbox
        $js_script .= " jQuery('#export_feeds_booking_gcal_events_until').on( 'change', function(){    
                            jQuery('#export_feeds_booking_gcal_events_until_offset').val('');
                            if ( jQuery(this).val() != 'date' ){ 
                                jQuery('.wpbc_tr_until_offset .wpbc_offset_value').removeClass('hidden_items');
                                jQuery('.wpbc_tr_until_offset .wpbc_offset_datetime').addClass('hidden_items');
                            } else {
                                jQuery('.wpbc_tr_until_offset .wpbc_offset_value').addClass('hidden_items');
                                jQuery('.wpbc_tr_until_offset .wpbc_offset_datetime').removeClass('hidden_items');                                    
                            }
                        } ); ";        
        
        
//        // Hide|Show  on Click      Radion
//        $js_script .= " jQuery('input[name=\"paypal_pro_hosted_solution\"]').on( 'change', function(){    
//                                jQuery('.wpbc_sub_settings_paypal_account_type').addClass('hidden_items'); 
//                                if ( jQuery('#paypal_type_standard').is(':checked') ) {   
//                                    jQuery('.wpbc_sub_settings_paypal_standard').removeClass('hidden_items');
//                                } else {
//                                    jQuery('.wpbc_sub_settings_paypal_pro_hosted').removeClass('hidden_items');
//                                }
//                            } ); ";        
        
        ////////////////////////////////////////////////////////////////////////
        
        
        // Eneque JS to  the footer of the page
        wpbc_enqueue_js( $js_script );                
    }

    // </editor-fold>
    
}
add_action('wpbc_menu_created', array( new WPBC_Page_SettingsExportFeeds() , '__construct') );    // Executed after creation of Menu


 
/** Show .ics ULR section for Free version */
function wpbc_export_ics_feed__table() {
	
	$resource_export = get_bk_option( 'booking_resource_export_ics_url' );
	?>
	<table class="form-table">
		<tbody><tr class="wpbc_tr_booking_export_feed_free" valign="top">
			<th scope="row">
                <label for="booking_export_feed1" class="wpbc-form-text"><?php esc_html_e( '.ics feed URL', 'booking' ); ?></label>
			</th>
            <td><fieldset class="wpdevelop">                
				<legend class="screen-reader-text"><span><?php esc_html_e( '.ics feed URL', 'booking' ); ?></span></legend>
				<code style="font-size:12px;line-height: 2.4em;background: #ddd;color:#000;"><a
						href="<?php echo esc_url( trim( home_url(), '/' ) . '/' . trim( $resource_export, '/' ) ); ?>"
						target="_blank"><?php
							$wpbc_h_u = home_url();																		// FixIn: 8.1.3.6.
							if (strlen( $wpbc_h_u ) > 23 ) {
								echo esc_attr( substr( $wpbc_h_u, 0, 10 ) . '...' . substr( $wpbc_h_u, -10 ) );
							} else {
								echo esc_attr( $wpbc_h_u );
							}?></a></code>
				<input id="booking_export_feed1" 
					   name="booking_export_feed1" 
					   value="<?php echo esc_attr( $resource_export ); ?>"
					   placeholder="" 
					   autocomplete="off" 
					   type="text"						
					   class="regular-text" 					   					   
				/> 
				<a href="<?php echo esc_url( trim( home_url(), '/' ) . '/' . trim( $resource_export, '/') );  ?>"
						   title="<?php esc_attr_e( 'Open in new window', 'booking' ); ?>"
						   target="_blank"><i class="wpbc_icn_open_in_new"></i></a>
				<p class="description"><?php esc_html_e( 'Please enter URL for generating .ics feed', 'booking' ); ?></p>
				<div class="wpbc-settings-notice notice-info" style="text-align:left;border-top:1px solid #f0f0f0;border-right:1px solid #f0f0f0;">
					<strong><?php esc_html_e( 'Note', 'booking' ); ?></strong>.  <?php
					 esc_html_e( 'This .ics feed of bookings starting from today for 1 year', 'booking' );
					?>
				</div>				
			</fieldset></td>
        </tr></tbody>
	</table>		
	<?php
}


/**
	 * Save changes to  URL in Free version
 * 
 * @return string - validated value
 */
function wpbc_export_ics_feed__update() {
	
	$validated_value = WPBC_Settings_API::validate_text_post_static( 'booking_export_feed1' );

	$validated_value = explode( '/', $validated_value );
	foreach ( $validated_value as $v_i => $v_val ) {                                                                    // FixIn: 8.1.1.9.
		if ( strpos( $v_val, '.') !== false ) {
			$v_val = sanitize_file_name( $v_val );
		}
		$validated_value[ $v_i ] = $v_val;
	}
	// $validated_value = array_map( 'sanitize_file_name', $validated_value );
	$validated_value = implode( '/', $validated_value );
	$validated_value = strtolower( $validated_value );
	$validated_value = wpbc_make_link_relative( $validated_value );

	if ( empty( $validated_value ) )
		$validated_value = '/ics/' . wpbc_get_slug_format( 'default' );
	
	update_bk_option( 'booking_resource_export_ics_url', $validated_value );
	
	return $validated_value;	
}