HEX
Server: Apache/2
System: Linux server-27-254-144-72.da.direct 5.10.0-33-amd64 #1 SMP Debian 5.10.226-1 (2024-10-03) x86_64
User: pokaorgani (1114)
PHP: 8.1.33
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: /home/pokaorgani/public_html/wp-content/plugins/siteorigin-panels/compat/events-manager.php
<?php
if ( ! function_exists( 'em_content' ) ) {
	return;
}

if ( ! apply_filters( 'siteorigin_panels_compat_events_manager', true ) ) {
	return;
}

class SiteOrigin_Panels_Compat_Events_Manager {
	private $is_pb_removed = false;
	private $is_duplicating = false;

	public static function single() {
		static $single;

		return empty( $single ) ? $single = new self() : $single;
	}

	public function __construct() {
		add_action( 'loop_start', array( $this, 'loop_start' ) );
		add_action( 'loop_end', array( $this, 'loop_end' ) );

		add_action( 'em_event_duplicate_pre', array( $this, 'duplicate_pre' ) );
		add_filter( 'em_event_get_event_meta', array( $this, 'filter_duplicate_meta' ) );
		add_filter( 'em_event_duplicate', array( $this, 'duplicate_copy_panels_data' ), 10, 2 );
	}

	/**
	 * Disable Page Builder for Events Manager post types.
	 *
	 * @return void
	 */
	public function loop_start() {
		$em_post_types = array( 'event-recurring', 'event' );

		$post_type = get_post_type();
		if ( ! in_array( $post_type, $em_post_types ) ) {
			return;
		}

		$pb_post_types = siteorigin_panels_setting( 'post-types' );
		if ( empty( $pb_post_types ) || ! array_intersect( $em_post_types, $pb_post_types ) ) {
			return;
		}

		$this->is_pb_removed = true;
		add_filter( 'siteorigin_panels_filter_content_enabled', '__return_false' );
	}

	/**
	 * Re-enable Page Builder for `the_content` filter if it
	 * was disabled at the start of the loop.
	 *
	 * @return void
	 */
	public function loop_end() {
		if ( $this->is_pb_removed ) {
			remove_filter( 'siteorigin_panels_filter_content_enabled', '__return_false' );
			$this->is_pb_removed = false;
		}
	}

	/**
	 * Flag Events Manager duplication so we can avoid unsafe SQL inserts for panels_data.
	 *
	 * @return void
	 */
	public function duplicate_pre() {
		$this->is_duplicating = true;
	}

	/**
	 * Remove Page Builder data from Events Manager's raw SQL duplication payload.
	 *
	 * @param array $event_meta Event post meta.
	 *
	 * @return array
	 */
	public function filter_duplicate_meta( $event_meta ) {
		if ( ! $this->is_duplicating || ! is_array( $event_meta ) ) {
			return $event_meta;
		}

		unset( $event_meta['panels_data'] );

		return $event_meta;
	}

	/**
	 * Copy Page Builder data to the duplicated event using safe WordPress APIs.
	 *
	 * @param mixed $duplicated_event The duplicated event object, or false on failure.
	 * @param mixed $source_event     The original source event object.
	 *
	 * @return mixed
	 */
	public function duplicate_copy_panels_data( $duplicated_event, $source_event ) {
		$this->is_duplicating = false;

		if (
			empty( $duplicated_event ) ||
			! is_object( $duplicated_event ) ||
			! is_object( $source_event ) ||
			empty( $duplicated_event->post_id ) ||
			empty( $source_event->post_id )
		) {
			return $duplicated_event;
		}

		$source_panels_data = get_post_meta( (int) $source_event->post_id, 'panels_data', true );
		if ( empty( $source_panels_data ) ) {
			return $duplicated_event;
		}

		$source_panels_data = map_deep( $source_panels_data, array( 'SiteOrigin_Panels_Admin', 'double_slash_string' ) );
		update_post_meta( (int) $duplicated_event->post_id, 'panels_data', $source_panels_data );

		return $duplicated_event;
	}
}

SiteOrigin_Panels_Compat_Events_Manager::single();