trAvis - MANAGER
Edit File: wpbc_cal_ajx.js
/** * ==================================================================================================================== * includes/__js/cal_ajx_load/wpbc_cal_ajx.js * ==================================================================================================================== */ // --------------------------------------------------------------------------------------------------------------------- // A j a x L o a d C a l e n d a r D a t a // --------------------------------------------------------------------------------------------------------------------- function wpbc_calendar__load_data__ajx( params ){ //FixIn: 9.8.6.2 wpbc_calendar__loading__start( params['resource_id'] ); if ( wpbc_balancer__is_wait( params , 'wpbc_calendar__load_data__ajx' ) ){ return false; } //FixIn: 9.8.6.2 wpbc_calendar__blur__stop( params['resource_id'] ); // console.groupEnd(); console.time('resource_id_' + params['resource_id']); console.groupCollapsed( 'WPBC_AJX_CALENDAR_LOAD' ); console.log( ' == Before Ajax Send - calendars_all__get() == ' , _wpbc.calendars_all__get() ); // Start Ajax jQuery.post( wpbc_url_ajax, { action : 'WPBC_AJX_CALENDAR_LOAD', wpbc_ajx_user_id: _wpbc.get_secure_param( 'user_id' ), nonce : _wpbc.get_secure_param( 'nonce' ), wpbc_ajx_locale : _wpbc.get_secure_param( 'locale' ), calendar_request_params : params // Usually like: { 'resource_id': 1, 'max_days_count': 365 } }, /** * S u c c e s s * * @param response_data - its object returned from Ajax - class-live-search.php * @param textStatus - 'success' * @param jqXHR - Object */ function ( response_data, textStatus, jqXHR ) { // console.timeEnd('resource_id_' + response_data['resource_id']); console.log( ' == Response WPBC_AJX_CALENDAR_LOAD == ', response_data ); console.groupEnd(); //FixIn: 9.8.6.2 var ajx_post_data__resource_id = wpbc_get_resource_id__from_ajx_post_data_url( this.data ); wpbc_balancer__completed( ajx_post_data__resource_id , 'wpbc_calendar__load_data__ajx' ); // Probably Error if ( (typeof response_data !== 'object') || (response_data === null) ){ var jq_node = wpbc_get_calendar__jq_node__for_messages( this.data ); var message_type = 'info'; if ( '' === response_data ){ response_data = 'The server responds with an empty string. The server probably stopped working unexpectedly. <br>Please check your <strong>error.log</strong> in your server configuration for relative errors.'; message_type = 'warning'; } // Show Message wpbc_front_end__show_message( response_data , { 'type' : message_type, 'show_here': {'jq_node': jq_node, 'where': 'after'}, 'is_append': true, 'style' : 'text-align:left;', 'delay' : 0 } ); return; } // Show Calendar wpbc_calendar__loading__stop( response_data[ 'resource_id' ] ); // ------------------------------------------------------------------------------------------------- // Bookings - Dates _wpbc.bookings_in_calendar__set_dates( response_data[ 'resource_id' ], response_data[ 'ajx_data' ]['dates'] ); // Bookings - Child or only single booking resource in dates _wpbc.booking__set_param_value( response_data[ 'resource_id' ], 'resources_id_arr__in_dates', response_data[ 'ajx_data' ][ 'resources_id_arr__in_dates' ] ); // Aggregate booking resources, if any ? _wpbc.booking__set_param_value( response_data[ 'resource_id' ], 'aggregate_resource_id_arr', response_data[ 'ajx_data' ][ 'aggregate_resource_id_arr' ] ); // ------------------------------------------------------------------------------------------------- // Update calendar wpbc_calendar__update_look( response_data[ 'resource_id' ] ); if ( ( 'undefined' !== typeof (response_data[ 'ajx_data' ][ 'ajx_after_action_message' ]) ) && ( '' != response_data[ 'ajx_data' ][ 'ajx_after_action_message' ].replace( /\n/g, "<br />" ) ) ){ var jq_node = wpbc_get_calendar__jq_node__for_messages( this.data ); // Show Message wpbc_front_end__show_message( response_data[ 'ajx_data' ][ 'ajx_after_action_message' ].replace( /\n/g, "<br />" ), { 'type' : ( 'undefined' !== typeof( response_data[ 'ajx_data' ][ 'ajx_after_action_message_status' ] ) ) ? response_data[ 'ajx_data' ][ 'ajx_after_action_message_status' ] : 'info', 'show_here': {'jq_node': jq_node, 'where': 'after'}, 'is_append': true, 'style' : 'text-align:left;', 'delay' : 10000 } ); } // Trigger event that calendar has been //FixIn: 10.0.0.44 if ( jQuery( '#calendar_booking' + response_data[ 'resource_id' ] ).length > 0 ){ var target_elm = jQuery( 'body' ).trigger( "wpbc_calendar_ajx__loaded_data", [response_data[ 'resource_id' ]] ); //jQuery( 'body' ).on( 'wpbc_calendar_ajx__loaded_data', function( event, resource_id ) { ... } ); } //jQuery( '#ajax_respond' ).html( response_data ); // For ability to show response, add such DIV element to page } ).fail( function ( jqXHR, textStatus, errorThrown ) { if ( window.console && window.console.log ){ console.log( 'Ajax_Error', jqXHR, textStatus, errorThrown ); } var ajx_post_data__resource_id = wpbc_get_resource_id__from_ajx_post_data_url( this.data ); wpbc_balancer__completed( ajx_post_data__resource_id , 'wpbc_calendar__load_data__ajx' ); // Get Content of Error Message var error_message = '<strong>' + 'Error!' + '</strong> ' + errorThrown ; if ( jqXHR.status ){ error_message += ' (<b>' + jqXHR.status + '</b>)'; if (403 == jqXHR.status ){ error_message += '<br> Probably nonce for this page has been expired. Please <a href="javascript:void(0)" onclick="javascript:location.reload();">reload the page</a>.'; error_message += '<br> Otherwise, please check this <a style="font-weight: 600;" href="https://wpbookingcalendar.com/faq/request-do-not-pass-security-check/?after_update=10.1.1">troubleshooting instruction</a>.<br>' } } var message_show_delay = 3000; if ( jqXHR.responseText ){ error_message += ' ' + jqXHR.responseText; message_show_delay = 10; } error_message = error_message.replace( /\n/g, "<br />" ); var jq_node = wpbc_get_calendar__jq_node__for_messages( this.data ); /** * If we make fast clicking on different pages, * then under calendar will show error message with empty text, because ajax was not received. * To not show such warnings we are set delay in 3 seconds. var message_show_delay = 3000; */ var closed_timer = setTimeout( function (){ // Show Message wpbc_front_end__show_message( error_message , { 'type' : 'error', 'show_here': {'jq_node': jq_node, 'where': 'after'}, 'is_append': true, 'style' : 'text-align:left;', 'css_class':'wpbc_fe_message_alt', 'delay' : 0 } ); } , parseInt( message_show_delay ) ); }) // .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 ); } }) ; // End Ajax } // --------------------------------------------------------------------------------------------------------------------- // Support // --------------------------------------------------------------------------------------------------------------------- /** * Get Calendar jQuery node for showing messages during Ajax * This parameter: calendar_request_params[resource_id] parsed from this.data Ajax post data * * @param ajx_post_data_url_params 'action=WPBC_AJX_CALENDAR_LOAD...&calendar_request_params%5Bresource_id%5D=2&calendar_request_params%5Bbooking_hash%5D=&calendar_request_params' * @returns {string} ''#calendar_booking1' | '.booking_form_div' ... * * Example var jq_node = wpbc_get_calendar__jq_node__for_messages( this.data ); */ function wpbc_get_calendar__jq_node__for_messages( ajx_post_data_url_params ){ var jq_node = '.booking_form_div'; var calendar_resource_id = wpbc_get_resource_id__from_ajx_post_data_url( ajx_post_data_url_params ); if ( calendar_resource_id > 0 ){ jq_node = '#calendar_booking' + calendar_resource_id; } return jq_node; } /** * Get resource ID from ajx post data url usually from this.data = 'action=WPBC_AJX_CALENDAR_LOAD...&calendar_request_params%5Bresource_id%5D=2&calendar_request_params%5Bbooking_hash%5D=&calendar_request_params' * * @param ajx_post_data_url_params 'action=WPBC_AJX_CALENDAR_LOAD...&calendar_request_params%5Bresource_id%5D=2&calendar_request_params%5Bbooking_hash%5D=&calendar_request_params' * @returns {int} 1 | 0 (if errror then 0) * * Example var jq_node = wpbc_get_calendar__jq_node__for_messages( this.data ); */ function wpbc_get_resource_id__from_ajx_post_data_url( ajx_post_data_url_params ){ // Get booking resource ID from Ajax Post Request -> this.data = 'action=WPBC_AJX_CALENDAR_LOAD...&calendar_request_params%5Bresource_id%5D=2&calendar_request_params%5Bbooking_hash%5D=&calendar_request_params' var calendar_resource_id = wpbc_get_uri_param_by_name( 'calendar_request_params[resource_id]', ajx_post_data_url_params ); if ( (null !== calendar_resource_id) && ('' !== calendar_resource_id) ){ calendar_resource_id = parseInt( calendar_resource_id ); if ( calendar_resource_id > 0 ){ return calendar_resource_id; } } return 0; } /** * Get parameter from URL - parse URL parameters, like this: action=WPBC_AJX_CALENDAR_LOAD...&calendar_request_params%5Bresource_id%5D=2&calendar_request_params%5Bbooking_hash%5D=&calendar_request_params * @param name parameter name, like 'calendar_request_params[resource_id]' * @param url 'parameter string URL' * @returns {string|null} parameter value * * Example: wpbc_get_uri_param_by_name( 'calendar_request_params[resource_id]', this.data ); -> '2' */ function wpbc_get_uri_param_by_name( name, url ){ url = decodeURIComponent( url ); name = name.replace( /[\[\]]/g, '\\$&' ); var regex = new RegExp( '[?&]' + name + '(=([^&#]*)|&|#|$)' ), results = regex.exec( url ); if ( !results ) return null; if ( !results[ 2 ] ) return ''; return decodeURIComponent( results[ 2 ].replace( /\+/g, ' ' ) ); }