Files

130 lines
4.1 KiB
PHP
Raw Permalink Normal View History

<?php
namespace DeliciousBrains\WP_Offload_Media\Pro\Integrations;
use AS3CF_Utils;
use DeliciousBrains\WP_Offload_Media\Integrations\Integration;
class Divi extends Integration {
/**
* Is installed?
*
* @return bool
*/
public static function is_installed(): bool {
// This integration fixes problems introduced by Divi Page Builder as used by the Divi and related themes.
if ( defined( 'ET_BUILDER_VERSION' ) ) {
return true;
}
return false;
}
/**
* Init integration.
*/
public function init() {
// Nothing to do.
}
/**
* @inheritDoc
*/
public function setup() {
add_filter( 'et_fb_load_raw_post_content', function ( $content ) {
return apply_filters( 'as3cf_filter_post_local_to_provider', $content );
} );
// Before attachment lookup via GUID, revert remote URL to local URL.
add_filter( 'et_get_attachment_id_by_url_guid', function ( $url ) {
return apply_filters( 'as3cf_filter_post_provider_to_local', $url );
} );
// Global Modules reset their filtered background image URLs, so let's fix that.
if ( defined( 'ET_BUILDER_LAYOUT_POST_TYPE' ) ) {
add_filter( 'the_posts', array( $this, 'the_posts' ), 10, 2 );
}
// The Divi Page Builder Gallery uses a non-standard and inherently anti-filter method of getting its editor thumbnails.
if ( $this->doing_fetch_attachments() ) {
add_action( 'pre_get_posts', array( $this, 'pre_get_posts' ) );
}
// The Divi Theme Builder may need to refresh its cached CSS if media URLs possibly changed.
if ( function_exists( 'et_core_page_resource_auto_clear' ) ) {
add_action( 'as3cf_copy_buckets_cancelled', 'et_core_page_resource_auto_clear' );
add_action( 'as3cf_copy_buckets_completed', 'et_core_page_resource_auto_clear' );
add_action( 'as3cf_download_and_remover_cancelled', 'et_core_page_resource_auto_clear' );
add_action( 'as3cf_download_and_remover_completed', 'et_core_page_resource_auto_clear' );
add_action( 'as3cf_move_objects_cancelled', 'et_core_page_resource_auto_clear' );
add_action( 'as3cf_move_objects_completed', 'et_core_page_resource_auto_clear' );
add_action( 'as3cf_move_private_objects_cancelled', 'et_core_page_resource_auto_clear' );
add_action( 'as3cf_move_private_objects_completed', 'et_core_page_resource_auto_clear' );
add_action( 'as3cf_move_public_objects_cancelled', 'et_core_page_resource_auto_clear' );
add_action( 'as3cf_move_public_objects_completed', 'et_core_page_resource_auto_clear' );
add_action( 'as3cf_uploader_cancelled', 'et_core_page_resource_auto_clear' );
add_action( 'as3cf_uploader_completed', 'et_core_page_resource_auto_clear' );
}
}
/**
* Is current request an et_fb_fetch_attachments AJAX call?
*
* @return bool
*/
private function doing_fetch_attachments() {
if ( AS3CF_Utils::is_ajax() && ! empty( $_POST['action'] ) && 'et_fb_fetch_attachments' === $_POST['action'] ) {
return true;
}
return false;
}
/**
* Turn filtering on for WP_Query calls initiated by the et_fb_fetch_attachments AJAX call.
*
* @param \WP_Query $query
*/
public function pre_get_posts( \WP_Query $query ) {
if ( ! empty( $query->query['post_type'] ) && 'attachment' === $query->query['post_type'] ) {
$query->query_vars['suppress_filters'] = false;
}
}
/**
* Handler for the 'the_posts' filter that runs local to provider URL filtering on Divi pages.
*
* @param array|\WP_Post $posts
* @param \WP_Query $query
*
* @return array
*/
public function the_posts( $posts, $query ) {
if (
defined( 'ET_BUILDER_LAYOUT_POST_TYPE' ) &&
! empty( $posts ) &&
! empty( $query ) &&
is_a( $query, 'WP_Query' ) &&
! empty( $query->query_vars['post_type'] )
) {
if ( is_array( $posts ) ) {
foreach ( $posts as $idx => $post ) {
$posts[ $idx ] = $this->the_posts( $post, $query );
}
} elseif ( is_a( $posts, 'WP_Post' ) ) {
$content_field = 'post_content';
if ( $this->doing_fetch_attachments() && 'attachment' === $posts->post_type ) {
$content_field = 'guid';
}
$posts->{$content_field} = apply_filters( 'as3cf_filter_post_local_to_provider', $posts->{$content_field} );
}
}
return $posts;
}
}