localize( false, true ); } } $data['conditional-display-groups'] = array_values( $GLOBALS['conditional_display_preview'] ); } return $data; } /** * Load displays to be displayed in frontend * * @return void */ public static function lazy_load_display_groups() { $groups = []; $external_resources = [ 'js' => [], 'css' => [], ]; if ( isset( $_GET['query_vars'] ) ) { tve_set_query_vars_data( $_GET['query_vars'] ); } if ( is_array( $_GET['groups'] ) ) { foreach ( $_GET['groups'] as $display_group_key ) { $display_group = Conditional_Display_Group::get_instance( $display_group_key ); if ( $display_group !== null ) { foreach ( $display_group->get_displays() as $display ) { if ( Shortcode::verify_conditions( $display ) ) { if ( empty( $display['hide'] ) ) { $content = Shortcode::parse_content( $display['html'], false ); if ( ! empty( $content ) ) { $groups[ $display_group_key ] = [ 'content' => $content, ]; $external_resources = Conditional_Display_Group::get_external_resources_for_content( $external_resources, $content ); } } break; } } } } } ob_start(); /* retrieve animations and actions events and maybe lightboxes if needed */ tve_print_footer_events(); $footer_scripts = ob_get_clean(); wp_send_json( [ 'groups' => $groups, 'footer_scripts' => $footer_scripts, 'external_resources' => $external_resources, ] ); } public static function dismiss_conditional_tooltip() { $dismissed_tooltips = (array) get_user_meta( wp_get_current_user()->ID, 'tcb_dismissed_tooltips' ); $dismissed_tooltips[] = 'conditional-display-tooltip'; update_user_meta( wp_get_current_user()->ID, 'tcb_dismissed_tooltips', $dismissed_tooltips ); } /** * Save conditional displays */ public static function save_post() { if ( isset( $_REQUEST['conditional-displays'] ) ) { Conditional_Display_Group::save_groups( $_REQUEST['conditional-displays'] ); } } public static function register_routes() { RestApi\General_Data::register_routes(); RestApi\Global_Sets::register_routes(); } public static function wp_print_footer_scripts() { /** * Make sure that is printed only on initial load not while plugins do lazy load */ if ( Shortcode::is_preview() && ! wp_doing_ajax() ) { if ( empty( $GLOBALS['conditional_display_preview'] ) ) { $GLOBALS['conditional_display_preview'] = []; } echo \TCB_Utils::wrap_content( "var tcb_condition_sets=JSON.parse('" . addslashes( json_encode( array_values( $GLOBALS['conditional_display_preview'] ) ) ) . "');", 'script', '', '', [ 'type' => 'text/javascript' ] ); // phpcs:ignore } } /** * Add some data to the frontend localized object * * @param $data * * @return mixed */ public static function tve_frontend_data( $data ) { $dismissed_tooltips = (array) get_user_meta( wp_get_current_user()->ID, 'tcb_dismissed_tooltips', true ); $data['conditional_display'] = [ 'is_tooltip_dismissed' => in_array( 'conditional-display-tooltip', $dismissed_tooltips, true ), ]; return $data; } /** * @param \WP_Admin_Bar $wp_admin_bar */ public static function admin_bar_menu( $wp_admin_bar ) { if ( ! Shortcode::is_preview() ) { return; } wp_enqueue_style( 'tve-logged-in-style', tve_editor_css( 'logged-in.css' ), false, TVE_VERSION ); $wp_admin_bar->add_node( [ 'id' => 'tve-preview-conditions', 'title' => '', 'parent' => 'top-secondary', 'meta' => [ 'class' => 'tcb-preview-hidden' ], ] ); $wp_admin_bar->add_node( [ 'id' => 'tve-conditions-title', 'title' => '' . 'Preview conditions' . '