<?php
/**
* @version 1.0
* @menu Booking > Settings > (Sync) Import page
* @category Settings API
* @author wpdevelop
*
* @web-site https://wpbookingcalendar.com/
* @email [email protected]
* @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.
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
} // Exit if accessed directly
/**
* Show Content
* Update Content
* Define Slug
* Define where to show
*/
class WPBC_Page_SettingsImportFeeds 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_sync_alt' // 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[ 'import' ] = array(
'type' => 'subtab' // Required| Possible values: 'subtab' | 'separator' | 'button' | 'goto-link' | 'html'
, 'title' => __('Import' ,'booking') . ' - .ics' // Title of TAB
, 'page_title' => __('Import 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 import of events using .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-in-down-right'
, 'default' => false // Is this sub tab activated by default or not: true || false. // FixIn: 8.1.1.10.
, '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', 'ics_import_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
////////////////////////////////////////////////////////////////////////
//$booking_gcal_events_form_fields = get_bk_option( 'booking_gcal_events_form_fields');
//$booking_gcal_events_form_fields = maybe_unserialize( $booking_gcal_events_form_fields );
////////////////////////////////////////////////////////////////////////
// S u b m i t Main Form
////////////////////////////////////////////////////////////////////////
$submit_form_name = 'wpbc_ics_import'; // 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
$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;
}
////////////////////////////////////////////////////////////////////////
// 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"></div><?php
?><div class="clear" style="height:10px;"></div><?php
if ( ! $is_bm_exist ) { // Not Exist
?>
<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 class="" href="' . esc_url( home_url() ) . '/wp-admin/plugin-install.php?s=booking+manager+by+oplugins&tab=search&type=term">' . 'Booking Manager' . '</a></strong> ' . ' <strong>' . esc_html( $wpbm_minimum_version ) . '</strong> (' . esc_html__( '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();
wpbc_close_meta_box_section();
} else { // Exist
wpbc_open_meta_box_section( 'wpbc_settings_ics_import_single', __('Import', 'booking') );
$this->show_toolbar_import_fields();
wpbc_close_meta_box_section();
wpbc_open_meta_box_section( 'wpbc_settings_ics_import_help_info', __('Help', 'booking') );
wpbc_ics_import_export__show_help_info();
wpbc_close_meta_box_section();
?>
<div class="clear"></div>
<!--input type="submit" value="<?php esc_attr_e('Save Changes','booking'); ?>" class="button button-primary wpbc_submit_button" /-->
<?php
}
?>
</form>
</span>
<?php
do_action( 'wpbc_hook_settings_page_footer', 'ics_import_settings' );
$this->enqueue_js();
wpbc_ics_import_ajax_js();
}
/** Save Chanages */
public function update() {
//debuge($_POST);
// Get Validated Email fields
// $validated_fields = $this->get_api()->validate_post();
// $validated_fields = apply_filters( 'wpbc_fields_before_saving_to_db__ics_import', $validated_fields ); //Hook for validated fields.
//debuge($validated_fields);
//$this->get_api()->save_to_db( $validated_fields );
// wpbc_show_changes_saved_message();
// Old way of saving:
// update_bk_option( 'booking_cache_expiration' , WPBC_Settings_API::validate_text_post_static( 'booking_cache_expiration' ) );
}
// <editor-fold defaultstate="collapsed" desc=" CSS & JS " >
/** CSS for this page */
private function css() {
?>
<style type="text/css">
.wpbc_import_ics_bar .wpbc_import_btn,
.wpbc_import_ics_bar .wpbc_upload_btn{
float:left;
margin:9px 5px 10px 1px;
}
.wpbc_import_ics_bar .wpbc_import_div {
float:left;
width:70%;
}
.wpbc_import_ics_bar .wpbc_import_br_selection,
.wpbc_import_ics_bar .wpbc_import_url {
float:left;
width:28%;
/*height: 2em;*/
line-height: 1.4;
padding: 2px;
/*border-radius: 0;*/
margin:10px 5px 10px 1px;
}
.wpbc_import_ics_bar .wpbc_import_url {
width:70%;
padding: 2px 5px;
}
.wpbc_system_info_log {
font-size: 11px;
line-height: 1.5em;
border: 2px dashed #e85;
padding: 5px 20px;
display: none;
}
/**********************************************************************************************************/
.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;
}
@media (max-width: 782px) {
.wpbc_import_ics_bar .wpbc_import_br_selection,
.wpbc_import_ics_bar .wpbc_import_url {
line-height: 1.74;
}
.wpbc_import_ics_bar .wpbc_import_br_selection,
.wpbc_import_ics_bar .wpbc_import_div {
float:none;
width:100%;
}
}
@media (max-width: 399px) {
#wpbc_create_new_custom_form_name_fields {
width: 100%;
}
}
</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('#ics_import_booking_gcal_auto_import_is_active').is(':checked') ) {
jQuery('.wpbc_tr_auto_import').addClass('hidden_items');
}
";
// Hide|Show on Click Checkbox
$js_script .= " jQuery('#ics_import_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('#ics_import_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('#ics_import_booking_gcal_events_from').on( 'change', function(){
jQuery('#ics_import_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('#ics_import_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('#ics_import_booking_gcal_events_until').on( 'change', function(){
jQuery('#ics_import_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>
/** Show Toolbar with import fields */
function show_toolbar_import_fields() {
// Parameters for Ajax:
?><div class="wpbc_import_ics_bar" id="wpbc_import_ics_bar"
data-nonce="<?php echo esc_attr( wp_create_nonce( $nonce_name = 'wpbc_import_ics_nonce_actn' ) ); ?>"
data-user-id="<?php echo esc_attr( wpbc_get_current_user_id() ); ?>"
><?php
if ( function_exists( 'wpbc_get_br_as_objects' ) ) {
$bk_resources = wpbc_get_br_as_objects();
?><select id="wpbc_import_br_selection" name="wpbc_import_br_selection" class="wpbc_import_br_selection"><?php
foreach ( $bk_resources as $res ) {
$res_title = $res->title;
if ( ( isset( $res->parent ) ) && ( $res->parent == 0 ) && ( isset( $res->count ) ) && ( $res->count > 1 ) ) {
$option_class = 'wpbc_parent_resource';
$res_title = $res_title. ' [' . __('parent resource', 'booking') . ']';
} elseif ( ( isset( $res->parent ) ) && ( $res->parent != 0 ) ) {
$option_class = 'wpbc_child_resource';
$res_title = ' ' . $res_title;
} else {
$option_class = 'wpbc_single_resource';
}
?><option value="<?php echo esc_attr( $res->id ); ?>" class="<?php echo esc_attr( $option_class ); ?>" ><?php echo esc_html( $res_title ); ?></option><?php
}
?></select><?php
}
?>
<div class="wpbc_import_div">
<input type="text"
class="wpbc_import_url" name="wpbc_import_url" id="wpbc_import_url"
placeholder="<?php esc_attr_e( 'Enter URL to .ics feed', 'booking' ) ?>"
value="" wrap="off"
/>
<?php if ( function_exists( 'wpbm_upload' ) ) { ?>
<a href="javascript:void(0)" class="button button-secondary wpbc_upload_btn"
data-modal_title="<?php echo esc_attr( __( 'Choose file', 'booking' ) ); ?>"
data-btn_title="<?php echo esc_attr( __( 'Insert file URL', 'booking' ) ); ?>"
><?php esc_html_e('Upload / Select ', 'booking' ); ?> <strong>(.ics)</strong></a>
<?php } ?>
<a class="button button-primary wpbc_import_btn" href="javascript:void(0)"><?php esc_html_e('Import', 'booking'); ?></a>
</div>
<?php
if ( function_exists( 'wpbm_upload' ) ) { // Get WPBM_Upload obj. instance
$wpbm_upload = wpbm_upload();
$wpbm_upload->set_upload_button( '.wpbc_upload_btn' );
$wpbm_upload->set_element_insert_url( '.wpbc_import_url' );
}
?>
<div class="clear"></div>
<div class="wpbc_system_info_log"></div>
<div class="clear"></div>
</div>
<?php
}
}
add_action('wpbc_menu_created', array( new WPBC_Page_SettingsImportFeeds() , '__construct') ); // Executed after creation of Menu
/**
* Show Help info about .ics import/export at Booking > Settings > Sync pages
*
* @param bool $is_import
*/
function wpbc_ics_import_export__show_help_info( $is_import = true ) {
?>
<div class="wpbc-help-message ">
<h4 style="margin-top:0;font-size:1.1em;">
<?php
$message_ics = sprintf( __( 'What does .ics feeds import/export mean?', 'booking' ) );
$message_ics = str_replace( array( '.ics', 'iCalendar' ), array( '<strong>.ics</strong>', '<strong>iCalendar</strong>' ), $message_ics );
echo wp_kses_post( $message_ics );
?>
</h4>
<p class="code" >
<?php
$message_ics = sprintf(
/* translators: 1: ... */
__( 'Its useful, if you need to import/export bookings from/to external websites, like %s', 'booking' ),
' <br/><em><strong><a href="https://www.airbnb.com/help/article/99/how-do-i-sync-my-airbnb-calendar-with-another-calendar" target="_blank">Airbnb</a></strong>, '
. '<strong><a href="https://partner.booking.com/en-gb/help/rates-availability/extranet-calendar/syncing-your-bookingcom-calendar-third-party-calendars" target="_blank">Booking.com</a></strong>, '
. '<strong><a href="https://rentalsupport.tripadvisor.com/articles/FAQ/noc-How-does-calendar-sync-work" target="_blank">TripAdvisor</a></strong>, '
. '<strong><a href="https://help.vrbo.com/articles/How-do-I-import-my-iCal-or-Google-calendar" target="_blank">VRBO</a></strong>, '
. '<strong><a href="https://helpcenter.flipkey.com/articles/FAQ/noc-How-does-calendar-sync-work" target="_blank">FlipKey</a></strong> '
. '<strong><a href="https://help.homeaway.com/articles/How-do-I-export-my-calendar-data-to-a-Google-calendar" target="_blank">HomeAway</a></strong>, '
. str_replace( array( '.ics', 'iCalendar' ), array( '<strong>.ics</strong>', '<strong>iCalendar</strong>' ),
__( 'and any other calendar that uses .ics format', 'booking' )
)
. '</em>.<br/>'
);
$message_ics = str_replace( array( '.ics', 'iCalendar' ), array( '<strong>.ics</strong>', '<strong>iCalendar</strong>' ), $message_ics );
echo wp_kses_post( $message_ics );
?>
</p>
<div class="clear" style="margin:20px 0;"></div>
<div class="wpbc-settings-notice notice-info"
style="text-align:left;border-top:1px solid #f0f0f0;border-right:1px solid #f0f0f0; line-height: 2em;padding: 5px 20px;"
>
<?php
$message_ics = sprintf(
/* translators: 1: ... */
__( '.ics - is a file format of iCalendar standard for exchanging calendar and scheduling information between different sources %s Using a common calendar format (.ics), you can keep all your calendars updated and synchronized.', 'booking' )
, '<br/>' /*
'<br/><em>(<strong><a href="https://www.airbnb.com/help/article/99/how-do-i-sync-my-airbnb-calendar-with-another-calendar" target="_blank">Airbnb</a></strong>, '
. '<strong><a href="https://partnersupport.booking.com/hc/en-us/articles/213424709-How-do-I-export-my-calendar-" target="_blank">Booking.com</a></strong>, '
. '<strong><a href="https://help.homeaway.com/articles/How-do-I-export-my-calendar-data-to-a-Google-calendar" target="_blank">HomeAway</a></strong>, '
. '<strong><a href="https://rentalsupport.tripadvisor.com/articles/FAQ/noc-How-does-calendar-sync-work" target="_blank">TripAdvisor</a></strong>, '
. '<strong><a href="https://help.vrbo.com/articles/How-do-I-export-my-calendar-data-to-a-Google-calendar" target="_blank">VRBO</a></strong>, '
. '<strong><a href="https://helpcenter.flipkey.com/articles/FAQ/noc-How-does-calendar-sync-work" target="_blank">FlipKey</a></strong> '
. str_replace( array( '.ics', 'iCalendar' ), array( '<strong>.ics</strong>', '<strong>iCalendar</strong>' ),
__( 'and any other calendar that uses .ics format', 'booking' )
)
. ')</em>.<br/>' */
);
$message_ics = str_replace( array( '.ics', 'iCalendar' ), array( '<strong>.ics</strong>', '<strong>iCalendar</strong>' ), $message_ics );
echo wp_kses_post( $message_ics );
?>
</div>
<?php if ( $is_import ) { ?>
<h4 style="font-size:1.1em;">
<?php
// FixIn: 8.4.2.12
$message_ics = sprintf( __( 'Is it automatic process?', 'booking' ) );
$message_ics = str_replace( array( '.ics', 'iCalendar' ), array( '<strong>.ics</strong>', '<strong>iCalendar</strong>' ), $message_ics );
echo wp_kses_post( $message_ics );
?>
</h4>
<div class="wpbc-settings-notice notice-warning"
style="text-align:left;border-top:1px solid #f0f0f0;border-right:1px solid #f0f0f0; line-height: 2em;padding: 5px 20px;"
>
<?php
$message_ics = sprintf(
__( 'By default .ics import is not automatic process. You need to set up CRON script on your server to periodically access front-end page(s) with import .ics feeds shortcodes.', 'booking' )
, '<br/>' /*
'<br/><em>(<strong><a href="https://www.airbnb.com/help/article/99/how-do-i-sync-my-airbnb-calendar-with-another-calendar" target="_blank">Airbnb</a></strong>, '
. '<strong><a href="https://partnersupport.booking.com/hc/en-us/articles/213424709-How-do-I-export-my-calendar-" target="_blank">Booking.com</a></strong>, '
. '<strong><a href="https://help.homeaway.com/articles/How-do-I-export-my-calendar-data-to-a-Google-calendar" target="_blank">HomeAway</a></strong>, '
. '<strong><a href="https://rentalsupport.tripadvisor.com/articles/FAQ/noc-How-does-calendar-sync-work" target="_blank">TripAdvisor</a></strong>, '
. '<strong><a href="https://help.vrbo.com/articles/How-do-I-export-my-calendar-data-to-a-Google-calendar" target="_blank">VRBO</a></strong>, '
. '<strong><a href="https://helpcenter.flipkey.com/articles/FAQ/noc-How-does-calendar-sync-work" target="_blank">FlipKey</a></strong> '
. str_replace( array( '.ics', 'iCalendar' ), array( '<strong>.ics</strong>', '<strong>iCalendar</strong>' ),
__( 'and any other calendar that uses .ics format', 'booking' )
)
. ')</em>.<br/>' */
);
$message_ics = str_replace( array( '.ics', 'iCalendar' , 'CRON'), array( '<strong>.ics</strong>', '<strong>iCalendar</strong>' , '<a target="_blank" href="https://wpbookingcalendar.com/faq/cron-script/"><strong>CRON</strong></a>' ), $message_ics );
echo wp_kses_post( $message_ics );
?>
</div>
<h4 style="font-size:1.1em;">
<?php
$message_ics = sprintf( __( 'How to start import of .ics feeds (files)?', 'booking' ) );
$message_ics = str_replace( array( '.ics', 'iCalendar' ), array( '<strong>.ics</strong>', '<strong>iCalendar</strong>' ), $message_ics );
echo wp_kses_post( $message_ics );
?>
</h4>
<ol style="list-style-type: decimal !important;list-style-position: inside;margin-left: 15px;">
<li><?php
/* translators: 1: ... */
echo wp_kses_post( sprintf( __( 'Install %s plugin.', 'booking' ),
'<a target="_blank" href="https://wordpress.org/plugins/booking-manager/"><strong>Booking Manager</strong></a>' )
);
?></li>
<li><?php
/* translators: 1: ... */
echo wp_kses_post( sprintf( __( 'Insert %1$s shortcode into some post(s) or page(s). Check more info about this %2$sshortcode configuration%3$s', 'booking' )
, '<code>[booking-manager-import ...]</code>'
, '<a target="_blank" href="https://oplugins.com/plugins/wp-booking-manager/booking-manager-help/#events-import">'
, '</a>'
) );
?>.
<div class="wpbc-settings-notice notice-info"
style='margin-left:25px;text-align:left;border-top:1px solid #f0f0f0;border-right:1px solid #f0f0f0;'><?php
/* translators: 1: ... */
$message_ics = sprintf( __( 'Using such shortcodes in pages give a great flexibility to import from different .ics feeds (sources) into the same resource.%sAlso its possible to define different CRON parameters for accessing such different pages with different time intervals.', 'booking' )
, '<br/>'
);
$message_ics = str_replace( array( '.ics', 'CRON' ), array( '<strong>.ics</strong>', '<a target="_blank" href="https://wpbookingcalendar.com/faq/cron-script/"><strong>CRON</strong></a>' ), $message_ics );
echo wp_kses_post( $message_ics );
?>
</div>
<span style="padding:0 15px;">
<?php
$message_ics = sprintf( __( 'Or you can import .ics feed or file directly at current page.', 'booking' ) );
$message_ics = str_replace( array( '.ics', 'iCalendar' ), array( '<strong>.ics</strong>', '<strong>iCalendar</strong>' ), $message_ics );
echo wp_kses_post( $message_ics );
?>
</span>
</li>
<li> <?php
/* translators: 1: ... */
$message_ics = sprintf( __( 'If you have inserted import shortcodes from %s, then you can configure your CRON for periodically access these pages and import .ics feeds.', 'booking' )
, '<a target="_blank" href="https://wordpress.org/plugins/booking-manager/"><strong>Booking Manager</strong></a> <code>[booking-manager-import ...]</code>'
);
$message_ics = str_replace( array( '.ics', 'CRON' ), array( '<strong>.ics</strong>', '<a target="_blank" href="https://wpbookingcalendar.com/faq/cron-script/"><strong>CRON</strong></a>' ), $message_ics );
echo wp_kses_post( $message_ics );
?>
</li>
</ol>
<?php } else { ?>
<h4 style="font-size:1.1em;">
<?php
$message_ics = sprintf( __( 'How to start export of .ics feeds (files)?', 'booking' ) );
$message_ics = str_replace( array( '.ics', 'iCalendar' ), array( '<strong>.ics</strong>', '<strong>iCalendar</strong>' ), $message_ics );
echo wp_kses_post( $message_ics );
?>
</h4>
<ol style="list-style-type: decimal !important;list-style-position: inside;margin-left: 15px;">
<li><?php
/* translators: 1: ... */
echo wp_kses_post( sprintf( __( 'Install %s plugin.', 'booking' ), '<a class="thickbox open-plugin-details-modal" target="_blank" href="plugin-install.php?tab=plugin-information&plugin=booking-manager&TB_iframe=true&width=772&height=435" aria-label="Booking Manager" data-title="Booking Manager"><strong>Booking Manager</strong></a>' ) );
echo ' ';
/* translators: 1: URL of Booking Manager plugin page.*/
echo wp_kses_post( sprintf( __( 'WordPress directory %s page.', 'booking' ), '<a target="_blank" href="https://wordpress.org/plugins/booking-manager/"><strong>Booking Manager</strong></a>' ) );
?></li>
<li> <?php esc_html_e( 'Configure ULR feed(s) at this settings page.', 'booking' ); ?>
<div class="wpbc-settings-notice notice-info"
style='margin-left:25px;text-align:left;border-top:1px solid #f0f0f0;border-right:1px solid #f0f0f0;'>
<?php
$message_ics = sprintf(
/* translators: 1: ... */
__( 'Using such URL(s) you can import .ics feeds, from interface of other websites. %sCheck more info about how to import .ics feeds into other websites at the support pages of sepcific website.', 'booking' )
, '<br/>');
$message_ics = str_replace( array( '.ics', 'iCalendar' ), array( '<strong>.ics</strong>', '<strong>iCalendar</strong>' ), $message_ics );
echo wp_kses_post( $message_ics );
?>
</div>
</li>
<li>
<?php
$message_ics = sprintf( __( 'Visit these (previously configured URL feeds) pages for downloading .ics files.', 'booking' ) );
$message_ics = str_replace( array( '.ics', 'iCalendar' ), array( '<strong>.ics</strong>', '<strong>iCalendar</strong>' ), $message_ics );
echo wp_kses_post( $message_ics );
?>
</li>
</ol>
<?php } ?>
</div>
<?php
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// AJAX Request
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/** JavaScript for Ajax */
function wpbc_ics_import_ajax_js() {
$ajx_el_id = 'wpbc_import_ics_bar';
// "wpbc-ajax.php" having this: , 'WPBC_IMPORT_ICS_URL' => 'admin'
?>
<script type="text/javascript">
// Ajax Request
jQuery( function ( $ ) { // Shortcut to jQuery(document).ready(function(){ ... });
jQuery( '.wpbc_import_ics_bar' ).on( 'click', '.wpbc_import_btn', function ( event ) { // This delegated event, can be run, when DOM element added after page loaded
wpbc_admin_show_message_processing( '' );
var jq_el = jQuery( this ).closest( '.wpbc_import_ics_bar' );
var params_obj = {};
params_obj.id = jq_el.attr( 'id' );
params_obj.nonce = jq_el.attr( 'data-nonce' );
params_obj.user_id = jq_el.attr( 'data-user-id' );
params_obj.wpbc_import_url = jQuery( '#wpbc_import_url' ).val();
params_obj.wpbc_import_br_selection = 1;
if ( jQuery( '#wpbc_import_br_selection option' ).length > 0 )
params_obj.wpbc_import_br_selection = jQuery( '#wpbc_import_br_selection option' ).filter( ':selected' ).val();
// console.log(params_obj);
jQuery.post( wpbc_url_ajax, {
action: 'WPBC_IMPORT_ICS_URL',
user_id: params_obj.user_id ,
nonce: params_obj.nonce,
params: params_obj
},
function ( response_data, textStatus, jqXHR ) { // success
var my_message = '<?php echo esc_js( __('Done' ,'booking') ); ?>';
wpbc_admin_show_message( my_message, 'info', 10000 , false );
//console.log( response_data ); console.log( textStatus); console.log( jqXHR ); // Debug
//jQuery( '.wpbc_system_info_log' ).show(); //Show Debug info
jQuery( '.wpbc_system_info_log' ).html( response_data ); // For ability to show response, add such DIV element to page
}
).fail( function ( jqXHR, textStatus, errorThrown ) {
wpbc_admin_show_message( '<strong style="text-transform: uppercase;">' + textStatus + '</strong> ~ ' + errorThrown , 'error', 5000 );
if ( window.console && window.console.log ){ console.log( 'Ajax_Error', jqXHR, textStatus, errorThrown ); }
})
// .done( function ( data, textStatus, jqXHR ) { if ( window.console && window.console.log ){ console.log( 'second success', data, textStatus, jqXHR ); } })
// .always( function ( data_jqXHR, textStatus, jqXHR_errorThrown ) { if ( window.console && window.console.log ){ console.log( 'always finished', data_jqXHR, textStatus, jqXHR_errorThrown ); } })
;
});
});
</script>
<?php
}
/** Ajax Response $ */
function wpbc_ajax_WPBC_IMPORT_ICS_URL() {
// phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing
if ( ! isset( $_POST['params'] ) || empty( $_POST['params'] ) ) {
exit;
}
// Check Security
$action_nonce_name = 'wpbc_import_ics_nonce_actn';
$nonce_post_key = 'nonce';
// This action executed from Admin panel at WP Booking Calendar > Settings > Sync > "Import - .ics" page -> Section "Import", so no need to check this if ( wpbc_is_use_nonce_at_front_end() ) { ... }
$result = check_ajax_referer( $action_nonce_name, $nonce_post_key ); // Check Security
$is_show_debug_info = ( ( get_bk_option( 'booking_is_show_system_debug_log' ) == 'On' ) ? true : false );
if ( $is_show_debug_info )
add_action( 'wpbc_show_debug', 'wpbc_start_showing_debug', 10, 1 );
//////////////////////////////////////////////////////////////////////
// Import events from .ics feed to specific booking resource
//////////////////////////////////////////////////////////////////////
do_action( 'wpbm_ics_import_start', array(
'url' => esc_url_raw( $_POST['params']['wpbc_import_url'] ), // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated, WordPress.Security.ValidatedSanitizedInput.MissingUnslash
'resource_id' => intval( $_POST['params']['wpbc_import_br_selection'] ), // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated
'import_conditions' => '',
// Check dates availability and process only if dates available in specific booking resource!
) );
if ( $is_show_debug_info )
remove_action( 'wpbc_show_debug', 'wpbc_start_showing_debug', 10 );
/*
if ( $is_show_debug_info ) {
// Showingdebug log section
?><script type="text/javascript"> jQuery( '.wpbc_system_info_log' ).show(); </script><?php
}
*/
// send JSON
//FixIn: 8.0.2.1 //Fix: We need to comment this line, because previously its possible that we already sent some messages, and its does not correct json format in this case.
//Fix: of showing "parsererror ~ SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data"
//wp_send_json( array( 'response' => 'success' ) ); // Return JS OBJ: response_data = { response: "success" }
wp_die( '', '', array( 'response' => null ) );
}