PluginProbe
Booking Calendar / 11.8.4
Booking Calendar v11.8.4
11.8.4 11.8.3 11.8.2 11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 10.11 All 204 releases
← All changes | includes/publish/wpbc-create-pages.php +450 -240 11.711.8.4 View file →
@@ -1,4 +1,4 @@
1 1 <?php
2 2 /**
3 3 * @version 1.0
4 4 * @package Booking Calendar
@@ -543,25 +543,27 @@
543 543 * @return array
544 544 */
545 545 function wpbc_get_activation_booking_form_page_configs() {
546 546
547 - return array(
548 - 'full_day_booking' => array(
549 - 'template_key' => 'dates_form_with_inline_hints',
550 - 'form_slug' => 'full_day_booking',
551 - 'form_title' => esc_html__( 'Full Day Booking Form', 'booking' ),
552 - 'page_slug' => 'wp-booking-calendar-full-day',
553 - 'page_title' => esc_html__( 'Full Day Booking', 'booking' ),
554 - 'button_title' => esc_html__( 'Full day booking form', 'booking' ),
547 + return array(
548 + 'full_day_booking' => array(
549 + 'template_key' => 'dates_2_columns_hints_full_days', // 'dates_form_with_inline_hints', // FixIn: 11.8.1.1.
550 + 'form_slug' => 'full_day_booking',
551 + 'form_title' => esc_html__( 'Full Day Booking Form', 'booking' ),
552 + 'page_slug' => 'booking-calendar-full-day',
553 + 'legacy_page_slugs' => array( 'wp-booking-calendar-full-day' ),
554 + 'page_title' => esc_html__( 'Full Day Booking', 'booking' ),
555 + 'button_title' => esc_html__( 'Full day booking form', 'booking' ),
556 + ),
557 + 'time_slots_booking' => array(
558 + 'template_key' => 'time_slots_2_columns_hints',
559 + 'form_slug' => 'time_slots_booking',
560 + 'form_title' => esc_html__( 'Time Slots Booking Form', 'booking' ),
561 + 'page_slug' => 'booking-calendar-time-slots',
562 + 'legacy_page_slugs' => array( 'wp-booking-calendar-time-slots' ),
563 + 'page_title' => esc_html__( 'Time Slots Booking', 'booking' ),
564 + 'button_title' => esc_html__( 'Time slots booking form', 'booking' ),
555 565 ),
556 - 'time_slots_booking' => array(
557 - 'template_key' => 'time_slots_20_min_3_steps_review_with_hints',
558 - 'form_slug' => 'time_slots_booking',
559 - 'form_title' => esc_html__( 'Time Slots Booking Form', 'booking' ),
560 - 'page_slug' => 'wp-booking-calendar-time-slots',
561 - 'page_title' => esc_html__( 'Time Slots Booking', 'booking' ),
562 - 'button_title' => esc_html__( 'Time slots booking form', 'booking' ),
563 - ),
564 566 'time_appointments_booking' => array(
565 567 'template_key' => 'time_appointments_3_steps_review_with_hints',
566 568 'form_slug' => 'time_appointments_booking',
567 569 'form_title' => esc_html__( 'Time Appointments Booking Form', 'booking' ),
@@ -573,15 +575,16 @@
573 575 'form_title' => esc_html__( 'Appointment Services Booking Form', 'booking' ),
574 576 'create_page' => false,
575 577 'assign_to_default_appointment_service' => true,
576 578 ),
577 - 'contact_form' => array(
578 - 'template_key' => 'contact_form_simple',
579 - 'form_slug' => 'contact_form',
580 - 'form_title' => esc_html__( 'Contact Form', 'booking' ),
581 - 'page_slug' => 'wp-booking-calendar-contact',
582 - 'page_title' => esc_html__( 'Contact Form', 'booking' ),
583 - 'button_title' => esc_html__( 'Contact form', 'booking' ),
579 + 'contact_form' => array(
580 + 'template_key' => 'contact_form_simple',
581 + 'form_slug' => 'contact_form',
582 + 'form_title' => esc_html__( 'Contact Form', 'booking' ),
583 + 'page_slug' => 'booking-calendar-contact',
584 + 'legacy_page_slugs' => array( 'wp-booking-calendar-contact' ),
585 + 'page_title' => esc_html__( 'Contact Form', 'booking' ),
586 + 'button_title' => esc_html__( 'Contact form', 'booking' ),
584 587 ),
585 588 );
586 589 }
587 590
@@ -623,21 +626,203 @@
623 626 );
624 627 $page_configs[ $page_key ]['resource_id'] = 1;
625 628 }
626 629
627 - $page_configs['appointment_booking'] = array(
628 - 'page_slug' => 'wpbc-appointment-booking',
629 - 'page_title' => esc_html__( 'Book an Appointment', 'booking' ),
630 - 'button_title' => esc_html__( 'Appointment booking form', 'booking' ),
631 - 'shortcode' => '[booking_appointment]',
632 - 'shortcode_checks' => array( '[booking_appointment]', '[booking_appointment ' ),
633 - 'resource_id' => 0,
634 - );
630 + $page_configs['appointment_booking'] = array(
631 + 'page_slug' => 'booking-calendar-appointment',
632 + 'legacy_page_slugs' => array( 'wpbc-appointment-booking' ),
633 + 'page_title' => esc_html__( 'Book an Appointment', 'booking' ),
634 + 'button_title' => esc_html__( 'Appointment booking form', 'booking' ),
635 + 'shortcode' => '[booking_appointment]',
636 + 'shortcode_checks' => array( '[booking_appointment]', '[booking_appointment ' ),
637 + 'resource_id' => 0,
638 + );
639 + $page_configs['resource_selector_booking'] = array(
640 + 'page_slug' => 'booking-calendar-resource-selection',
641 + 'legacy_page_slugs' => array(),
642 + 'page_title' => esc_html__( 'Resource Selection', 'booking' ),
643 + 'button_title' => esc_html__( 'Resource selection', 'booking' ),
644 + 'shortcode' => '[booking_resource_selector]',
645 + 'shortcode_checks' => array( '[booking_resource_selector]', '[booking_resource_selector ' ),
646 + 'resource_id' => 0,
647 + );
648 +
649 + return $page_configs;
650 +}
651 +
652 +
653 +/**
654 + * Get the Free Booking Received page definition used during initial activation.
655 + *
656 + * The legacy slug remains lookup-only so a clean reinstall can reuse a retained
657 + * page without making legacy URLs canonical for new installations.
658 + *
659 + * @return array Confirmation page definition with canonical and legacy slugs.
660 + */
661 +function wpbc_get_activation_confirmation_page_config() {
662 +
663 + return array(
664 + 'page_slug' => 'booking-calendar-confirmation',
665 + 'legacy_page_slugs' => array( 'wpbc-booking-received' ),
666 + );
667 +}
668 +
669 +
670 +/**
671 + * Get the Personal-edition customer page definitions used during activation.
672 + *
673 + * @return array Personal page definitions keyed by stable purpose.
674 + */
675 +function wpbc_get_activation_personal_page_configs() {
676 +
677 + return array(
678 + 'manage_booking' => array(
679 + 'page_slug' => 'booking-calendar-manage-booking',
680 + 'legacy_page_slugs' => array( 'wpbc-my-booking' ),
681 + 'page_title' => esc_html__( 'My Booking', 'booking' ),
682 + 'shortcode' => '[bookingedit]',
683 + 'option_name' => 'booking_url_bookings_edit_by_visitors',
684 + ),
685 + 'my_bookings' => array(
686 + 'page_slug' => 'booking-calendar-my-bookings',
687 + 'legacy_page_slugs' => array( 'wpbc-my-bookings-listing' ),
688 + 'page_title' => esc_html__( 'My Bookings Listing', 'booking' ),
689 + 'shortcode' => '[bookingcustomerlisting]',
690 + 'option_name' => 'booking_url_bookings_listing_by_customer',
691 + ),
692 + );
693 +}
694 +
695 +
696 +/**
697 + * Get the Business Small payment-result page definitions used during activation.
698 + *
699 + * @return array Payment-result definitions keyed by stable outcome.
700 + */
701 +function wpbc_get_activation_payment_page_configs() {
702 +
703 + return array(
704 + 'success' => array(
705 + 'page_slug' => 'booking-calendar-payment-success',
706 + 'legacy_page_slugs' => array( 'wpbc-booking-payment-successful' ),
707 + 'page_title' => esc_html__( 'Booking Payment Confirmation', 'booking' ),
708 + 'page_content' => esc_html__( 'Thank you for your booking. Your payment for the booking has been successfully received.', 'booking' )
709 + . "\r\n\r\n[booking_confirm]",
710 + 'required_shortcode' => '[booking_confirm]',
711 + 'default_url' => '/successful',
712 + 'option_names' => array(
713 + 'booking_stripe_v3_order_successful',
714 + 'booking_paypal_std_co_order_successful',
715 + 'booking_paypal_return_url',
716 + 'booking_authorizenet_order_successful',
717 + 'booking_sage_order_successful',
718 + 'booking_redsys_order_successful',
719 + 'booking_ideal_return_url',
720 + 'booking_ipay88_return_url',
721 + ),
722 + ),
723 + 'failed' => array(
724 + 'page_slug' => 'booking-calendar-payment-failed',
725 + 'legacy_page_slugs' => array( 'wpbc-booking-payment-failed' ),
726 + 'page_title' => esc_html__( 'Booking Payment Failed', 'booking' ),
727 + 'page_content' => esc_html__( 'Payment Unsuccessful. Please contact us for assistance.', 'booking' ),
728 + 'required_shortcode' => '',
729 + 'default_url' => '/failed',
730 + 'option_names' => array(
731 + 'booking_stripe_v3_order_failed',
732 + 'booking_paypal_std_co_order_failed',
733 + 'booking_paypal_cancel_return_url',
734 + 'booking_authorizenet_order_failed',
735 + 'booking_sage_order_failed',
736 + 'booking_redsys_order_failed',
737 + 'booking_ideal_cancel_return_url',
738 + 'booking_ipay88_cancel_return_url',
739 + ),
740 + ),
741 + );
742 +}
743 +
744 +
745 +/**
746 + * Check whether an activation payment URL still contains its replaceable default.
747 + *
748 + * Missing options and the released placeholder paths may be connected to a
749 + * newly eligible payment page. Every other value is treated as administrator
750 + * configuration and must remain unchanged.
751 + *
752 + * @param mixed $configured_url Saved payment return URL, or false when absent.
753 + * @param string $default_url Released relative placeholder URL.
754 + *
755 + * @return bool True when activation may store the eligible payment page URL.
756 + */
757 +function wpbc_should_update_activation_payment_url( $configured_url, $default_url ) {
758 +
759 + if ( false === $configured_url ) {
760 + return true;
761 + }
762 +
763 + return (string) $default_url === wpbc_make_link_relative( $configured_url );
764 +}
765 +
766 +
767 +/**
768 + * Find an existing activation-owned page by its canonical or legacy slug.
769 + *
770 + * Canonical slugs are checked first. Legacy aliases are used only to preserve
771 + * existing pages and prevent duplicates after a full plugin-data reset.
772 + *
773 + * @param string $page_slug Canonical page slug.
774 + * @param array $legacy_page_slugs Previously released page slugs.
775 + *
776 + * @return WP_Post|null Existing WordPress page, or null when no slug matches.
777 + */
778 +function wpbc_get_activation_page_by_slugs( $page_slug, $legacy_page_slugs = array() ) {
779 +
780 + $page_slugs = array_merge( array( $page_slug ), (array) $legacy_page_slugs );
781 + $page_slugs = array_unique( array_filter( array_map( 'sanitize_title', $page_slugs ) ) );
782 +
783 + foreach ( $page_slugs as $candidate_page_slug ) {
784 + $wp_post = get_page_by_path( $candidate_page_slug, OBJECT, 'page' );
785 +
786 + if ( $wp_post instanceof WP_Post ) {
787 + return $wp_post;
788 + }
789 + }
790 +
791 + return null;
792 +}
793 +
794 +
795 +/**
796 + * Get the first published activation page matching a canonical or legacy slug.
797 + *
798 + * This read-only lookup is separate from the activation writer lookup because
799 + * activation must recognize retained non-published pages to avoid duplicates,
800 + * while public-page navigation must never advertise an inaccessible draft or
801 + * trashed canonical page when a published legacy page is still available.
802 + *
803 + * @param string $page_slug Canonical activation page slug.
804 + * @param array $legacy_page_slugs Previously released lookup-only slugs.
805 + *
806 + * @return WP_Post|null Published page, or null when no public match exists.
807 + */
808 +function wpbc_get_published_activation_page_by_slugs( $page_slug, $legacy_page_slugs = array() ) {
809 +
810 + $page_slugs = array_merge( array( $page_slug ), (array) $legacy_page_slugs );
811 + $page_slugs = array_unique( array_filter( array_map( 'sanitize_title', $page_slugs ) ) );
812 +
813 + foreach ( $page_slugs as $candidate_page_slug ) {
814 + $wp_post = get_page_by_path( $candidate_page_slug, OBJECT, 'page' );
815 +
816 + if ( $wp_post instanceof WP_Post && 'publish' === $wp_post->post_status ) {
817 + return $wp_post;
818 + }
819 + }
820 +
821 + return null;
822 +}
635 823
636 - return $page_configs;
637 -}
638 824
639 -
640 825 /**
641 826 * Get a bundled BFB template record by template key.
642 827 *
643 828 * @param string $template_key Template key.
@@ -672,14 +857,14 @@
672 857 return array();
673 858 }
674 859
675 860
676 -/**
677 - * Create starter custom booking forms from bundled BFB templates.
861 +/**
862 + * Create starter custom booking forms from bundled BFB templates.
678 863 *
679 864 * @return bool
680 865 */
681 -function wpbc_create_activation_custom_booking_forms() {
866 +function wpbc_create_activation_custom_booking_forms() {
682 867
683 868 if (
684 869 ! function_exists( 'wpbc_is_table_exists' ) ||
685 870 ! wpbc_is_table_exists( 'booking_form_structures' ) ||
@@ -751,9 +936,105 @@
751 936 }
752 937 }
753 938
754 939 return $is_created;
755 -}
940 +}
941 +
942 +
943 +/**
944 + * Return the ordered activation-page level for a Booking Calendar edition.
945 + *
946 + * The ordering is intentionally limited to product editions. Page groups use
947 + * these levels to determine whether a paid activation has crossed the edition
948 + * boundary that first makes those pages available.
949 + *
950 + * @param string $edition_id Booking Calendar edition identifier.
951 + *
952 + * @return int Edition level, or -1 when the identifier is not supported.
953 + */
954 +function wpbc_get_activation_page_edition_level( $edition_id ) {
955 +
956 + $edition_levels = array(
957 + 'free' => 0,
958 + 'personal' => 1,
959 + 'biz_s' => 2,
960 + 'biz_m' => 3,
961 + 'biz_l' => 4,
962 + 'multiuser' => 5,
963 + );
964 +
965 + $edition_id = (string) $edition_id;
966 +
967 + return isset( $edition_levels[ $edition_id ] ) ? $edition_levels[ $edition_id ] : -1;
968 +}
969 +
970 +
971 +/**
972 + * Check whether a paid-edition transition newly unlocks one page group.
973 + *
974 + * This pure comparison keeps Free-to-Pro, lower-to-higher, reactivation,
975 + * update, and downgrade behavior deterministic and independently testable.
976 + *
977 + * @param string $previous_edition_id Previously provisioned or detected edition.
978 + * @param string $current_edition_id Edition active during this activation.
979 + * @param string $required_edition_id First edition that owns the page group.
980 + *
981 + * @return bool True when this activation crosses the required edition boundary.
982 + */
983 +function wpbc_is_activation_page_edition_transition( $previous_edition_id, $current_edition_id, $required_edition_id ) {
984 +
985 + $previous_edition_level = wpbc_get_activation_page_edition_level( $previous_edition_id );
986 + $current_edition_level = wpbc_get_activation_page_edition_level( $current_edition_id );
987 + $required_edition_level = wpbc_get_activation_page_edition_level( $required_edition_id );
988 +
989 + if ( 0 > $previous_edition_level || 0 > $current_edition_level || 1 > $required_edition_level ) {
990 + return false;
991 + }
992 +
993 + return $previous_edition_level < $required_edition_level
994 + && $required_edition_level <= $current_edition_level;
995 +}
996 +
997 +
998 +/**
999 + * Check whether activation-owned WordPress pages may be provisioned.
1000 + *
1001 + * Free-owned pages remain restricted to the immutable first-Free-install
1002 + * decision. Paid page groups can additionally opt into the exact Pro edition
1003 + * transition that first makes them available. The Pro activation layer owns
1004 + * that transition state and exposes it through a narrow filter; normal Free or
1005 + * Pro updates therefore remain fail-closed.
1006 + *
1007 + * @param string $required_edition_id First edition that owns the page group.
1008 + *
1009 + * @return bool True only during the qualifying initial activation request.
1010 + */
1011 +function wpbc_should_create_activation_pages( $required_edition_id = 'free' ) {
1012 + $required_edition_id = (string) $required_edition_id;
1013 + $required_edition_level = wpbc_get_activation_page_edition_level( $required_edition_id );
1014 +
1015 + if ( 0 > $required_edition_level ) {
1016 + return false;
1017 + }
1018 +
1019 + if ( function_exists( 'wpbc_is_plugin_initial_install' ) && wpbc_is_plugin_initial_install() ) {
1020 + return true;
1021 + }
1022 +
1023 + if ( 0 === $required_edition_level ) {
1024 + return false;
1025 + }
1026 +
1027 + /**
1028 + * Filter whether the current paid-edition activation newly owns a page group.
1029 + *
1030 + * @since 11.8.1
1031 + *
1032 + * @param bool $should_create_pages Fail-closed default decision.
1033 + * @param string $required_edition_id First edition that owns the page group.
1034 + */
1035 + return (bool) apply_filters( 'wpbc_should_create_paid_edition_activation_pages', false, $required_edition_id );
1036 +}
756 1037
757 1038
758 1039 /**
759 1040 * Build starter page content with a booking shortcode.
@@ -805,11 +1086,15 @@
805 1086 * Service seed with the newly created form ID.
806 1087 *
807 1088 * @since 11.5.0
808 1089 */
809 - do_action( 'wpbc_activation_custom_booking_forms_created' );
810 -
811 - $configs = wpbc_get_activation_booking_page_configs();
1090 + do_action( 'wpbc_activation_custom_booking_forms_created' );
1091 +
1092 + if ( ! wpbc_should_create_activation_pages() ) {
1093 + return;
1094 + }
1095 +
1096 + $configs = wpbc_get_activation_booking_page_configs();
812 1097 if ( empty( $configs ) || ! is_array( $configs ) ) {
813 1098 return;
814 1099 }
815 1100
@@ -826,23 +1111,26 @@
826 1111 if ( '' === $shortcode ) {
827 1112 continue;
828 1113 }
829 1114
830 - $content = wpbc_get_activation_booking_page_content( $shortcode );
831 -
832 - $result_arr = wpbc_add_shortcode_into_page(
833 - array(
834 - 'page_post_name' => $config['page_slug'],
835 - 'post_title' => $config['page_title'],
1115 + $content = wpbc_get_activation_booking_page_content( $shortcode );
1116 + $legacy_page_slugs = isset( $config['legacy_page_slugs'] ) ? (array) $config['legacy_page_slugs'] : array();
1117 + $existing_page = wpbc_get_activation_page_by_slugs( $config['page_slug'], $legacy_page_slugs );
1118 +
1119 + $result_arr = wpbc_add_shortcode_into_page(
1120 + array(
1121 + 'page_post_name' => $config['page_slug'],
1122 + 'page_id' => $existing_page instanceof WP_Post ? $existing_page->ID : 0,
1123 + 'post_title' => $config['page_title'],
836 1124 'shortcode' => $content,
837 1125 'check_exist_shortcode' => $shortcode_checks,
838 1126 'resource_id' => $resource_id,
839 1127 )
840 - );
841 -
842 - if ( WPBC_IS_PLAYGROUND && empty( $front_page_id ) && ! empty( $result_arr['relative_url'] ) ) {
843 - $wp_post = get_page_by_path( $config['page_slug'] );
844 - if ( ! empty( $wp_post ) ) {
1128 + );
1129 +
1130 + if ( WPBC_IS_PLAYGROUND && empty( $front_page_id ) && ! empty( $result_arr['relative_url'] ) ) {
1131 + $wp_post = wpbc_get_activation_page_by_slugs( $config['page_slug'], $legacy_page_slugs );
1132 + if ( ! empty( $wp_post ) ) {
845 1133 $front_page_id = $wp_post->ID;
846 1134 }
847 1135 }
848 1136 }
@@ -869,15 +1157,16 @@
869 1157 if ( empty( $configs ) || ! is_array( $configs ) ) {
870 1158 return $pages;
871 1159 }
872 1160
873 - foreach ( $configs as $key => $config ) {
1161 + foreach ( $configs as $key => $config ) {
1162 +
1163 + $legacy_page_slugs = isset( $config['legacy_page_slugs'] ) ? (array) $config['legacy_page_slugs'] : array();
1164 + $wp_post = wpbc_get_published_activation_page_by_slugs( $config['page_slug'], $legacy_page_slugs );
1165 + if ( ! ( $wp_post instanceof WP_Post ) ) {
1166 + continue;
1167 + }
874 1168
875 - $wp_post = get_page_by_path( $config['page_slug'] );
876 - if ( empty( $wp_post ) ) {
877 - continue;
878 - }
879 -
880 1169 $shortcode_checks = isset( $config['shortcode_checks'] ) && is_array( $config['shortcode_checks'] )
881 1170 ? $config['shortcode_checks']
882 1171 : array();
883 1172 $is_shortcode_found = false;
@@ -921,11 +1210,15 @@
921 1210 * @param $default_options_to_add
922 1211 *
923 1212 * @return void
924 1213 */
925 -function wpbc_create_page_thank_you( $default_options_to_add ) { // FixIn: 9.6.2.11.
926 -
927 - global $wp_rewrite;
1214 +function wpbc_create_page_thank_you( $default_options_to_add ) { // FixIn: 9.6.2.11.
1215 +
1216 + if ( ! wpbc_should_create_activation_pages() ) {
1217 + return false;
1218 + }
1219 +
1220 + global $wp_rewrite;
928 1221 if ( is_null( $wp_rewrite ) ) { // FixIn: 9.7.1.1.
929 1222
930 1223 // Maybe it was not init, yet
931 1224 if ( ! has_action( 'init', 'wpbc_create_page_thank_you' ) ) {
@@ -944,20 +1237,24 @@
944 1237 && ( empty( get_page_by_path( 'thank-you' ) ) ) // FixIn: 9.9.0.27.
945 1238 )
946 1239 || ( '/' == wpbc_make_link_relative( get_bk_option( 'booking_thank_you_page_URL' ) ) )
947 1240 ){
948 - $wp_post = get_page_by_path( 'wpbc-booking-received' );
1241 + $confirmation_page_config = wpbc_get_activation_confirmation_page_config();
1242 + $wp_post = wpbc_get_activation_page_by_slugs(
1243 + $confirmation_page_config['page_slug'],
1244 + $confirmation_page_config['legacy_page_slugs']
1245 + );
949 1246
950 1247 $post_url = '';
951 1248
952 1249 if ( empty( $wp_post ) ) { // No default page. Create it.
953 1250
954 - $page_params = array(
955 - 'post_title' => esc_html( __( 'Booking Received', 'booking' ) ),
956 - 'post_content' => esc_html( __( 'Thank you for your booking. Your booking has been successfully received.', 'booking' ) )
957 - . "\r\n" . ' [booking_confirm]',
958 - 'post_name' => 'wpbc-booking-received'
959 - );
1251 + $page_params = array(
1252 + 'post_title' => esc_html( __( 'Booking Received', 'booking' ) ),
1253 + 'post_content' => esc_html( __( 'Thank you for your booking. Your booking has been successfully received.', 'booking' ) )
1254 + . "\r\n" . ' [booking_confirm]',
1255 + 'post_name' => $confirmation_page_config['page_slug'],
1256 + );
960 1257 $post_id = wpbc_create_page( $page_params );
961 1258
962 1259 if ( ! empty( $post_id ) ) {
963 1260 $post_url = wpbc_make_link_relative( get_permalink( $post_id ) );
@@ -991,11 +1288,15 @@
991 1288 * to some pages different from homepage.
992 1289 *
993 1290 * @return void
994 1291 */
995 -function wpbc_create_page_bookingedit(){ // FixIn: 9.6.2.10.
996 -
997 - global $wp_rewrite;
1292 +function wpbc_create_page_bookingedit(){ // FixIn: 9.6.2.10.
1293 +
1294 + if ( ! wpbc_should_create_activation_pages( 'personal' ) ) {
1295 + return false;
1296 + }
1297 +
1298 + global $wp_rewrite;
998 1299 if ( is_null( $wp_rewrite ) ) { // FixIn: 9.7.1.1.
999 1300 // Maybe it was not init, yet
1000 1301 if ( ! has_action( 'init', 'wpbc_create_page_bookingedit' ) ) {
1001 1302 add_action( 'init', 'wpbc_create_page_bookingedit', 99 ); // <- priority to load it last
@@ -1002,182 +1303,91 @@
1002 1303 }
1003 1304 return false;
1004 1305 }
1005 1306
1006 - // Booking Edit page - set default page and URL ---------------------------------------------------------------
1007 - $url_booking_edit = get_bk_option( 'booking_url_bookings_edit_by_visitors' );
1008 - if (
1009 - ( site_url() == $url_booking_edit )
1010 - && ( empty( get_page_by_path( 'wpbc-my-booking' ) ) )
1011 - ){
1012 - $page_params = array(
1013 - 'post_content' => '[bookingedit]', // The post content
1014 - 'post_name' => 'wpbc-my-booking', // sanitize_title( $post_title )
1015 - 'post_title' => esc_html__( 'My Booking', 'booking' ) // Title
1016 - );
1307 + $page_configs = wpbc_get_activation_personal_page_configs();
1308 +
1309 + foreach ( $page_configs as $page_config ) {
1310 + $configured_page_url = get_bk_option( $page_config['option_name'] );
1311 + $existing_page = wpbc_get_activation_page_by_slugs(
1312 + $page_config['page_slug'],
1313 + $page_config['legacy_page_slugs']
1314 + );
1315 +
1316 + if ( site_url() === $configured_page_url && ! ( $existing_page instanceof WP_Post ) ) {
1317 + $page_id = wpbc_create_page(
1318 + array(
1319 + 'post_content' => $page_config['shortcode'],
1320 + 'post_name' => $page_config['page_slug'],
1321 + 'post_title' => $page_config['page_title'],
1322 + )
1323 + );
1324 +
1325 + if ( ! empty( $page_id ) ) {
1326 + update_bk_option( $page_config['option_name'], get_permalink( $page_id ) );
1327 + }
1328 + } elseif (
1329 + ( site_url() === $configured_page_url || empty( $configured_page_url ) )
1330 + && $existing_page instanceof WP_Post
1331 + ) {
1332 + update_bk_option( $page_config['option_name'], get_permalink( $existing_page->ID ) );
1333 + }
1334 +
1335 + $relative_page_url = wpbc_make_link_relative( get_bk_option( $page_config['option_name'] ) );
1336 + wpbc_add_shortcode_to_exist_page( $relative_page_url, $page_config['shortcode'] );
1337 + }
1017 1338
1018 - $post_id = wpbc_create_page( $page_params );
1019 -
1020 - if ( ! empty( $post_id ) ) {
1021 - $post_url = get_permalink( $post_id );
1022 - update_bk_option( 'booking_url_bookings_edit_by_visitors', $post_url );
1023 - }
1024 - } else if (
1025 - (
1026 - ( site_url() == $url_booking_edit )
1027 - || ( empty( $url_booking_edit ) )
1028 - )
1029 - && ( ! empty( get_page_by_path( 'wpbc-my-booking' ) ) )
1030 - ){
1031 - $wp_post = get_page_by_path( 'wpbc-my-booking' );
1032 - if ( ! empty( $wp_post ) ) {
1033 - update_bk_option( 'booking_url_bookings_edit_by_visitors', get_permalink( $wp_post->ID ) );
1034 - }
1035 - }
1036 -
1037 - // -----------------------------------------------------------------------------------------------------------------
1038 - // Check if existing page has our shortcode
1039 - // -----------------------------------------------------------------------------------------------------------------
1040 - $booking_edit_relative_url = wpbc_make_link_relative( get_bk_option( 'booking_url_bookings_edit_by_visitors' ) );
1041 - $is_added = wpbc_add_shortcode_to_exist_page( $booking_edit_relative_url, '[bookingedit]' );
1042 -
1043 -
1044 - // =================================================================================================================
1045 - // =================================================================================================================
1046 - // =================================================================================================================
1047 -
1048 -
1049 - // Booking Listing page - set default page and URL ---------------------------------------------------------------
1050 - $url_booking_edit = get_bk_option( 'booking_url_bookings_listing_by_customer' );
1051 - if (
1052 - ( site_url() == $url_booking_edit )
1053 - && ( empty( get_page_by_path( 'wpbc-my-bookings-listing' ) ) )
1054 - ){
1055 -
1056 - $page_params = array(
1057 - 'post_content' => '[bookingcustomerlisting]', // The post content
1058 - 'post_name' => 'wpbc-my-bookings-listing', // sanitize_title( $post_title )
1059 - 'post_title' => esc_html__( 'My Bookings Listing', 'booking' ) // Title
1060 - );
1061 -
1062 - $post_id = wpbc_create_page( $page_params );
1063 -
1064 - if ( ! empty( $post_id ) ) {
1065 - $post_url = get_permalink( $post_id );
1066 - update_bk_option( 'booking_url_bookings_listing_by_customer', $post_url );
1067 - }
1068 - } else if (
1069 - (
1070 - ( site_url() == $url_booking_edit )
1071 - || ( empty( $url_booking_edit ) )
1072 - )
1073 - && ( ! empty( get_page_by_path( 'wpbc-my-bookings-listing' ) ) )
1074 - ){
1075 - $wp_post = get_page_by_path( 'wpbc-my-bookings-listing' );
1076 - if ( ! empty( $wp_post ) ){
1077 - update_bk_option( 'booking_url_bookings_listing_by_customer', get_permalink( $wp_post->ID ) );
1078 - }
1079 - }
1080 -
1081 -
1082 - // -----------------------------------------------------------------------------------------------------------------
1083 - // Check if existing page has our shortcode
1084 - // -----------------------------------------------------------------------------------------------------------------
1085 - $booking_listing_relative_url = wpbc_make_link_relative( get_bk_option( 'booking_url_bookings_listing_by_customer' ) );
1086 - $is_added = wpbc_add_shortcode_to_exist_page( $booking_listing_relative_url, '[bookingcustomerlisting]' );
1087 -
1088 1339 }
1089 1340
1090 1341
1091 -function wpbc_create_page_booking_payment_status(){ // FixIn: 9.6.2.13.
1092 -
1093 - global $wp_rewrite;
1342 +function wpbc_create_page_booking_payment_status(){ // FixIn: 9.6.2.13.
1343 +
1344 + if ( ! wpbc_should_create_activation_pages( 'biz_s' ) ) {
1345 + return false;
1346 + }
1347 +
1348 + global $wp_rewrite;
1094 1349 if ( is_null( $wp_rewrite ) ) { // FixIn: 9.7.1.1.
1095 1350 return false;
1096 1351 }
1097 1352
1098 - // Successful Payment page options ---------------------------------------------------------------------------------
1099 -
1100 - $post_url_relative = false;
1101 - $slug = 'wpbc-booking-payment-successful';
1102 - if ( empty( get_page_by_path( $slug ) ) ) {
1103 - // Create page
1104 - $page_params = array(
1105 - 'post_title' => esc_html( __( 'Booking Payment Confirmation', 'booking' ) ),
1106 - 'post_content' => esc_html( __( 'Thank you for your booking. Your payment for the booking has been successfully received.', 'booking' ) ),
1107 - 'post_name' => $slug
1108 - );
1109 -
1110 - $post_id = wpbc_create_page( $page_params );
1111 -
1112 - if ( ! empty( $post_id ) ) {
1113 - $post_url = get_permalink( $post_id );
1114 - $post_url_relative = str_replace( site_url(), '', $post_url );
1115 - }
1116 - }
1117 - if ( ! empty( $post_url_relative ) ) {
1118 -
1119 - //$post_url_relative = wpbc_make_link_absolute( $post_url_relative );
1120 -
1121 - $payment_systems = array(
1122 - 'booking_stripe_v3_order_successful',
1123 - 'booking_paypal_return_url',
1124 - 'booking_authorizenet_order_successful',
1125 - 'booking_sage_order_successful',
1126 - 'booking_ideal_return_url',
1127 - 'booking_ipay88_return_url'
1128 - );
1129 -
1130 - foreach ( $payment_systems as $payment_system ) {
1131 -
1132 - if (
1133 - ( false === get_bk_option( $payment_system ) )
1134 - || ( '/successful' == wpbc_make_link_relative( get_bk_option( $payment_system ) ) )
1135 - ) {
1136 - update_bk_option( $payment_system, wpbc_make_link_relative( $post_url_relative ) );
1137 - }
1138 - }
1139 - }
1140 -
1141 - // Failed Payment page options -------------------------------------------------------------------------------------
1142 -
1143 - $post_url_relative = false;
1144 - $slug = 'wpbc-booking-payment-failed';
1145 - if ( empty( get_page_by_path( $slug ) ) ) {
1146 - // Create page
1147 - $page_params = array(
1148 - 'post_title' => esc_html( __( 'Booking Payment Failed', 'booking' ) ),
1149 - 'post_content' => esc_html( __( 'Payment Unsuccessful. Please contact us for assistance.', 'booking' ) ),
1150 - 'post_name' => $slug
1151 - );
1152 -
1153 - $post_id = wpbc_create_page( $page_params );
1154 -
1155 - if ( ! empty( $post_id ) ) {
1156 - $post_url = get_permalink( $post_id );
1157 - $post_url_relative = str_replace( site_url(), '', $post_url );
1158 - }
1159 - }
1160 - if ( ! empty( $post_url_relative ) ) {
1161 -
1162 - //$post_url_relative = wpbc_make_link_absolute( $post_url_relative );
1163 -
1164 - $payment_systems = array(
1165 - 'booking_stripe_v3_order_failed',
1166 - 'booking_paypal_cancel_return_url',
1167 - 'booking_authorizenet_order_failed',
1168 - 'booking_sage_order_failed',
1169 - 'booking_ideal_cancel_return_url',
1170 - 'booking_ipay88_cancel_return_url'
1171 - );
1172 -
1173 - foreach ( $payment_systems as $payment_system ) {
1174 -
1175 - if (
1176 - ( false === get_bk_option( $payment_system ) )
1177 - || ( '/failed' == wpbc_make_link_relative( get_bk_option( $payment_system ) ) )
1178 - ) {
1179 - update_bk_option( $payment_system, wpbc_make_link_relative( $post_url_relative ) );
1180 - }
1181 - }
1182 - }
1353 + $page_configs = wpbc_get_activation_payment_page_configs();
1354 +
1355 + foreach ( $page_configs as $page_config ) {
1356 + $existing_page = wpbc_get_activation_page_by_slugs(
1357 + $page_config['page_slug'],
1358 + $page_config['legacy_page_slugs']
1359 + );
1360 +
1361 + if ( ! ( $existing_page instanceof WP_Post ) ) {
1362 + $page_id = wpbc_create_page(
1363 + array(
1364 + 'post_title' => $page_config['page_title'],
1365 + 'post_content' => $page_config['page_content'],
1366 + 'post_name' => $page_config['page_slug'],
1367 + )
1368 + );
1369 + $existing_page = ! empty( $page_id ) ? get_post( $page_id ) : null;
1370 + }
1371 +
1372 + if ( ! ( $existing_page instanceof WP_Post ) || 'publish' !== $existing_page->post_status ) {
1373 + continue;
1374 + }
1375 +
1376 + $page_url_relative = wpbc_make_link_relative( get_permalink( $existing_page->ID ) );
1377 + if ( empty( $page_url_relative ) ) {
1378 + continue;
1379 + }
1380 +
1381 + if ( ! empty( $page_config['required_shortcode'] ) ) {
1382 + wpbc_add_shortcode_to_exist_page( $page_url_relative, $page_config['required_shortcode'] );
1383 + }
1384 +
1385 + foreach ( $page_config['option_names'] as $option_name ) {
1386 + $configured_url = get_bk_option( $option_name );
1387 +
1388 + if ( wpbc_should_update_activation_payment_url( $configured_url, $page_config['default_url'] ) ) {
1389 + update_bk_option( $option_name, $page_url_relative );
1390 + }
1391 + }
1392 + }
1183 1393 }