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>
This commit is contained in:
root
2025-11-03 21:04:30 -06:00
commit a22573bf0b
24068 changed files with 4993111 additions and 0 deletions

View File

@@ -0,0 +1,265 @@
<?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
);
}
}