get_options()['cache-busting']['enabled'] ) ) {
return;
}
add_action( 'advanced-ads-placement-options-before-advanced', [ $this, 'admin_placement_options' ], 10, 2 );
add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_admin_scripts' ] );
add_action( 'advanced-ads-ad-params-after', [ $this, 'check_ad' ], 9 );
add_filter( 'advanced-ads-ad-notices', [$this, 'ad_notices'], 10, 3 );
add_action( 'wp_ajax_advads-reset-vc-cache', [ $this, 'reset_vc_cache' ] );
add_action( 'wp_ajax_advads-placement-activate-cb', [ $this, 'ads_activate_placement_cb' ] );
}
/**
* Activate placement cache busting
*/
public function ads_activate_placement_cb() {
check_ajax_referer( 'advanced-ads-admin-ajax-nonce', 'nonce' );
if ( ! Conditional::user_can( 'advanced_ads_manage_options' ) && ! filter_has_var( INPUT_POST, 'placement' ) ) {
wp_send_json_error( esc_html__( 'You are not allowed to do this.', 'advanced-ads-pro' ), 400 );
}
$placement_slug = sanitize_text_field( Params::post( 'placement' ) );
$placement = wp_advads_get_placement_by_slug( $placement_slug );
if ( $placement ) {
$placement->set_prop( 'cache-busting', Advanced_Ads_Pro_Module_Cache_Busting::OPTION_AUTO );
$placement->save();
wp_send_json_success( esc_html__( 'Cache busting has been successfully enabled for the assigned placement.', 'advanced-ads-pro' ) );
}
wp_send_json_error( esc_html__( "Couldn't find the placement.", 'advanced-ads-pro' ), 400 );
}
/**
* Update visitor consitions cache.
*/
public function reset_vc_cache() {
if ( ! Conditional::user_can( 'advanced_ads_manage_options' ) ) {
return;
}
check_ajax_referer( 'advads-pro-reset-vc-cache-nonce', 'security' );
$time = time();
$options = get_option( 'advanced-ads-pro' );
$options['cache-busting']['vc_cache_reset'] = $time;
update_option( 'advanced-ads-pro', $options );
echo $time;
exit;
}
/**
* add placement options on placement page
*
* @param string $placement_slug Placement id.
* @param Placement $placement Placement instance.
*/
public function admin_placement_options( $placement_slug, $placement ) {
$type_options = $placement->get_type_object()->get_options();
if ( isset( $type_options['placement-cache-busting'] ) && ! $type_options['placement-cache-busting'] ) {
return;
}
// l10n
$values = [
Advanced_Ads_Pro_Module_Cache_Busting::OPTION_AUTO => esc_html__( 'auto','advanced-ads-pro' ),
Advanced_Ads_Pro_Module_Cache_Busting::OPTION_ON => esc_html__( 'AJAX','advanced-ads-pro' ),
Advanced_Ads_Pro_Module_Cache_Busting::OPTION_OFF => esc_html__( 'off','advanced-ads-pro' ),
];
// options
$value = $placement->get_prop( 'cache-busting' );
$value = $value === Advanced_Ads_Pro_Module_Cache_Busting::OPTION_ON
? Advanced_Ads_Pro_Module_Cache_Busting::OPTION_ON
: ( $value === Advanced_Ads_Pro_Module_Cache_Busting::OPTION_OFF ? Advanced_Ads_Pro_Module_Cache_Busting::OPTION_OFF : Advanced_Ads_Pro_Module_Cache_Busting::OPTION_AUTO );
ob_start();
foreach ( $values as $k => $l ) {
$selected = checked( $value, $k, false );
echo '';
}
$option_content = ob_get_clean();
WordPress::render_option(
'placement-cache-busting',
_x( 'Cache-busting', 'placement admin label', 'advanced-ads-pro' ),
$option_content );
}
/**
* enqueue scripts for validation the ad
*/
public function enqueue_admin_scripts() {
$screen = get_current_screen();
$uriRelPath = plugin_dir_url( __FILE__ );
if ( isset( $screen->id ) && $screen->id === 'advanced_ads' ) { //ad edit page
wp_register_script( 'krux/prescribe', $uriRelPath . 'inc/prescribe.js', [ 'jquery' ], '1.1.3' );
wp_enqueue_script( 'advanced-ads-pro/cache-busting-admin', $uriRelPath . 'inc/admin.js', [ 'krux/prescribe' ], AAP_VERSION );
} elseif ( Conditional::is_screen_advanced_ads() ) {
wp_enqueue_script( 'advanced-ads-pro/cache-busting-admin', $uriRelPath . 'inc/admin.js', [], AAP_VERSION );
}
}
/**
* add validation for cache-busting
*
* @param Ad $ad Ad instance.
*/
public function check_ad( $ad ) {
include dirname( __FILE__ ) . '/views/settings_check_ad.php';
}
/**
* show cache-busting specific ad notices
*
* @since 1.13.1
*
* @param array $notices Notices.
* @param array $box Current meta box.
* @param Ad $ad Ad instance.
*
* @return array
*/
public function ad_notices( $notices, $box, $ad ): array {
// Show hint that for ad-group ad type, cache-busting method will only be AJAX or off
if ( 'ad-parameters-box' === $box['id'] && $ad->is_type( 'group' ) ) {
$notices[] = [
'text' => __( 'The Ad Group ad type can only use AJAX or no cache-busting, but not passive cache-busting.', 'advanced-ads-pro' ),
// 'class' => 'advads-ad-notice-pro-ad-group-cache-busting',
];
}
return $notices;
}
/**
* Get group hints.
*
* @param string[] $hints Group hints (escaped strings).
* @param Group $group The group object.
*
* @return string[]
*/
public function get_group_hints( $hints, Group $group ) {
// Pro is installed but cache busting is disabled.
if ( empty( Advanced_Ads_Pro::get_instance()->get_options()['cache-busting']['enabled'] ) ) {
$hints[] = sprintf(
wp_kses(
/* translators: %s is a URL. */
__( 'It seems that a caching plugin is activated. Your ads might not rotate properly while cache busting is disabled. Activate cache busting.', 'advanced-ads-pro' ),
[
'a' => [
'href' => [],
'target' => [],
],
]
),
esc_url( admin_url( 'admin.php?page=advanced-ads-settings#top#pro' ) )
);
return $hints;
}
$placements = wp_advads_placements_by_item_id( 'group_' . $group->get_id() );
// The group doesn't use a placement.
if (
! $placements
&& empty( Advanced_Ads_Pro::get_instance()->get_options()['cache-busting']['passive_all'] )
) {
$hints[] = sprintf(
wp_kses(
/* translators: %s is a URL. */
__( 'You need a placement to deliver this group using cache busting. Create a placement now.', 'advanced-ads-pro' ),
[
'a' => [
'href' => [],
'target' => [],
],
]
),
esc_url( admin_url( 'admin.php?page=advanced-ads-placements' ) )
);
return $hints;
}
// The Group uses a placement where cache busting is disabled.
foreach ( $placements as $slug => $placement ) {
$placement_data = $placement->get_data();
if ( isset( $placement_data['cache-busting'] )
&& $placement_data['cache-busting'] === Advanced_Ads_Pro_Module_Cache_Busting::OPTION_OFF
) {
$hints[] = sprintf(
wp_kses(
/* translators: %s is a URL. */
__( 'It seems that a caching plugin is activated. Your ads might not rotate properly, while cache busting is disabled for the placement your group is using. Activate cache busting for this placement.', 'advanced-ads-pro' ),
[
'a' => [
'href' => [],
'data-placement' => [],
'class' => [],
],
]
),
$slug
);
return $hints;
}
}
return $hints;
}
}