Files
roi-theme/wp-content/plugins/advanced-ads-pro/modules/weekdays/class-advanced-ads-pro-weekdays.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

266 lines
8.1 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Main module class
*
* @package AdvancedAds\Pro
* @author Advanced Ads <info@wpadvancedads.com>
*/
use AdvancedAds\Constants;
use AdvancedAds\Abstracts\Ad;
use AdvancedAds\Framework\Utilities\Formatting;
use AdvancedAds\Framework\Utilities\Params;
use AdvancedAds\Utilities\Conditional;
/**
* Ads by specific days class
*/
class Advanced_Ads_Pro_Weekdays {
/**
* Constructor
*/
public function __construct() {
if ( ! is_admin() ) {
add_filter( 'advanced-ads-pro-passive-cb-for-ad', [ $this, 'add_passive_cb_for_ad' ], 10, 2 );
} elseif ( ! wp_doing_ajax() ) {
add_action( 'post_submitbox_misc_actions', [ $this, 'add_weekday_options' ] );
add_filter( 'advanced-ads-ad-pre-save', [ $this, 'save_weekday_options' ], 10, 2 );
add_filter( 'advanced-ads-ad-list-column-filter', [ $this, 'ad_list_column_filter' ], 10, 3 );
add_filter( 'advanced-ads-ad-list-filter', [ $this, 'ad_list_filter' ], 10, 2 );
add_action( 'advanced-ads-ad-list-timing-column-after', [ $this, 'render_ad_planning_column' ], 10, 2 );
}
add_filter( 'advanced-ads-can-display-ad', [ $this, 'can_display_by_weekday' ], 10, 3 );
}
/**
* Pass day indexes to passive cache-busting.
*
* @param array $passive_cb_for_ad Data to be passed to passive CB.
* @param Ad $ad Ad instance.
*/
public function add_passive_cb_for_ad( $passive_cb_for_ad, Ad $ad ) {
$passive_cb_for_ad['day_indexes'] = $ad->has_weekdays()
? $this->sanitize_day_indexes( $ad->get_weekdays() )
: false;
return $passive_cb_for_ad;
}
/**
* Add options above the 'Publish' button.
*/
public function add_weekday_options() {
global $post, $wp_locale;
if ( Constants::POST_TYPE_AD !== $post->post_type ) {
return;
}
$ad = wp_advads_get_ad( $post->ID );
$enabled = $ad->has_weekdays();
$day_indexes = $ad->has_weekdays() ? $this->sanitize_day_indexes( $ad->get_weekdays() ) : [];
$time_zone = Advanced_Ads_Utils::get_timezone_name();
include __DIR__ . '/views/ad-submitbox-meta.php';
}
/**
* Save options above the 'Publish' button.
*
* @param Ad $ad Ad instance.
* @param array $post_data Post data array.
*
* @return void
*/
public function save_weekday_options( Ad $ad, $post_data ): void {
$ad->set_has_weekdays( $post_data['weekdays']['enabled'] ?? false );
$ad->set_weekdays( $this->sanitize_day_indexes( $post_data['weekdays']['day_indexes'] ?? [] ) );
}
/**
* Add new item to the filter above the ad list.
*
* @param array $timing_filter list of current filers.
*
* @return array $timing_filter
*/
public function add_item_to_frontend_filter( $timing_filter ) {
$timing_filter['advads-pro-filter-specific-days'] = __( 'specific days', 'advanced-ads-pro' );
return $timing_filter;
}
/**
* Add new item to the filter above the ad list.
*
* @param array $all_filters Existing filters.
* @param object $post WP_Post.
* @param array $options Ad options.
*
* @return array $all_filters New filters.
*/
public function ad_list_column_filter( $all_filters, $post, $options ) {
if ( ! empty( $options['weekdays']['enabled'] ) && Formatting::string_to_bool( $options['weekdays']['enabled'] ) ) {
if ( ! array_key_exists( 'advads-pro-filter-specific-days', $all_filters['all_dates'] ) ) {
$all_filters['all_dates']['advads-pro-filter-specific-days'] = __( 'specific days', 'advanced-ads-pro' );
}
}
return $all_filters;
}
/**
* Filter the ad list.
*
* @param array $posts Post list.
* @param array $all_ads_options Ad options.
*
* @return array
*/
public function ad_list_filter( $posts, $all_ads_options ) {
// phpcs:ignore WordPress.Security.NonceVerification.Recommended,WordPress.Security.ValidatedSanitizedInput.MissingUnslash,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
if ( 'advads-pro-filter-specific-days' === urldecode( Params::request( 'addate' ) ) ) {
$new_posts = [];
foreach ( $posts as $post ) {
if ( ! empty( $all_ads_options[ $post->ID ]['weekdays']['enabled'] ) && Formatting::string_to_bool( $all_ads_options[ $post->ID ]['weekdays']['enabled'] ) ) {
$new_posts[] = $post;
}
}
$posts = $new_posts;
}
//phpcs:enable
return $posts;
}
/**
* Show weekdays on the ad list page.
*
* @param Ad $ad Ad instance.
* @param string $html_classes Existing html classes.
*
* @return void
*/
public function render_ad_planning_column( Ad $ad, &$html_classes = '' ) {
global $wp_locale;
$weekdays_enabled = $ad->has_weekdays();
$ads_by_hours = $ad->get_prop( 'ads_by_hours' );
$ads_by_hours_enabled = ! empty( $ads_by_hours['enabled'] );
if ( ! $weekdays_enabled && ! $ads_by_hours_enabled ) {
return;
}
$html_classes .= ' advads-pro-filter-specific-days';
$day_indexes = $this->sanitize_day_indexes( $ad->get_weekdays() );
$day_names = array_map( [ $wp_locale, 'get_weekday' ], $day_indexes );
$day_names_string = implode( ', ', $day_names );
$ads_by_hours = Advanced_Ads_Pro\Ads_By_Hours\module::get_instance()->admin()->get_localized_intervals( $ad );
$pro_options = Advanced_Ads_Pro::get_instance()->get_options();
$ads_by_hour_module = Advanced_Ads_Pro\Ads_By_Hours\Module::get_instance();
$cache_busting_enabled = isset( $pro_options['cache-busting']['enabled'] ) && $pro_options['cache-busting']['enabled'];
$need_cb = $ads_by_hour_module->use_browser_time() && ! $cache_busting_enabled;
$cache_detected = ! $ads_by_hour_module->use_browser_time() && Conditional::has_cache_plugins() && ! $cache_busting_enabled;
echo '<p>';
if ( $weekdays_enabled && empty( $day_names ) ) {
esc_html_e( 'Never shows up', 'advanced-ads-pro' );
echo '</p>';
return;
}
echo esc_html__( 'Shows up', 'advanced-ads-pro' );
if ( $weekdays_enabled ) {
/* translators: comma separated list of days. */
printf( esc_html__( ' on: %s', 'advanced-ads-pro' ), esc_html( $day_names_string ) );
}
if ( $ads_by_hours_enabled ) {
printf(
/* translators: 1. localized time 2. localized time 3. timezone name. */
esc_html__( ' between %1$s and %2$s %3$s', 'advanced-ads-pro' ),
esc_html( $ads_by_hours['start'] ),
esc_html( $ads_by_hours['end'] ),
esc_html( Advanced_Ads_Pro\Ads_By_Hours\Module::get_instance()->admin()->get_time_zone_string() )
);
}
if ( $need_cb ) {
printf(
'<p class="notice advads-notice inline">%s</p>',
esc_html( \Advanced_Ads_Pro\Ads_By_Hours\Module::get_instance()->admin()->get_cb_warning_message() )
);
}
if ( $cache_detected ) {
printf(
'<p class="notice advads-notice inline">%s</p>',
esc_html( \Advanced_Ads_Pro\Ads_By_Hours\Module::get_instance()->admin()->get_cache_plugin_warning() )
);
}
echo '</p>';
}
/**
* Sanitize day indexes.
*
* @param array $day_indexes Array to sanitize.
*
* @return array
*/
public function sanitize_day_indexes( $day_indexes ) {
if ( ! is_array( $day_indexes ) ) {
return [];
}
foreach ( $day_indexes as $_key => &$_index ) {
$_index = absint( $_index );
if ( $_index > 6 ) {
unset( $day_indexes[ $_key ] );
}
}
return array_unique( array_values( $day_indexes ) );
}
/**
* Determine if ad can be displayed today based on weekday
*
* @param bool $can_display Value as set so far.
* @param Ad $ad Ad instance.
* @param array $check_options Check options.
*
* @return bool false if cant be displayed, else return $can_display
*/
public function can_display_by_weekday( $can_display, Ad $ad, $check_options ) {
if ( ! $can_display ) {
return false;
}
if ( ! empty( $check_options['passive_cache_busting'] ) ) {
return $can_display;
}
if ( ! $ad->has_weekdays() || empty( $ad->get_weekdays() ) ) {
return $can_display;
}
// current_datetime is available since WP 5.3.0.
$date = function_exists( 'current_datetime' ) ? current_datetime() : date_create_immutable( 'now', Advanced_Ads_Utils::get_wp_timezone() );
return in_array(
(int) $date->format( 'w' ),
$this->sanitize_day_indexes( $ad->get_weekdays() ),
true
);
}
}