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,75 @@
<?php // phpcs:ignore WordPress.Files.FileName
use AdvancedAds\Utilities\WordPress;
/**
* Placement conditions administration.
*/
class Advanced_Ads_Pro_Module_Placement_Conditions_Admin {
/**
* The Constructor.
*/
public function __construct() {
add_action( 'advanced-ads-placement-options-after-advanced', [ $this, 'render_conditions_for_placements' ], 10, 2 );
}
/**
* Render display and visitor condition for placement.
*
* @param string $placement_slug Placement id.
* @param Placement $placement Placement instance.
*/
public function render_conditions_for_placements( $placement_slug, $placement ) {
if (
! method_exists( 'Advanced_Ads_Display_Conditions', 'render_condition_list' )
|| ! method_exists( 'Advanced_Ads_Visitor_Conditions', 'render_condition_list' )
) {
return;
}
$type_options = $placement->get_type_object()->get_options();
if ( ! isset( $type_options['placement-display-conditions'] ) || $type_options['placement-display-conditions'] ) {
$set_conditions = $placement->get_display_conditions();
$list_target = 'advads-placement-condition-list-' . $placement_slug;
$form_name = 'advads[placements][options][display]';
ob_start();
if ( ! empty( $type_options['placement-display-conditions'] ) ) {
// Render only specific conditions.
$options['in'] = $type_options['placement-display-conditions'];
} else {
$options['in'] = 'global';
}
Advanced_Ads_Display_Conditions::render_condition_list( $set_conditions, $list_target, $form_name, $options );
$conditions = ob_get_clean();
WordPress::render_option(
'placement-display-conditions',
__( 'Display Conditions', 'advanced-ads-pro' ),
$conditions
);
}
if ( ! isset( $type_options['placement-visitor-conditions'] ) || $type_options['placement-visitor-conditions'] ) {
$set_conditions = $placement->get_visitor_conditions();
$list_target = 'advads-placement-condition-list-visitor-' . $placement_slug;
$form_name = 'advads[placements][options][visitors]';
ob_start();
Advanced_Ads_Visitor_Conditions::render_condition_list( $set_conditions, $list_target, $form_name );
$conditions = ob_get_clean();
WordPress::render_option(
'placement-visitor-conditions',
__( 'Visitor Conditions', 'advanced-ads-pro' ),
$conditions
);
}
}
}

View File

@@ -0,0 +1,2 @@
<?php
new Advanced_Ads_Pro_Module_Placement_Conditions_Admin;

View File

@@ -0,0 +1,120 @@
<?php // phpcs:ignoreFilename
/**
* This class merge a placement display and visitors conditions into its child ad's conditions.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
*/
use AdvancedAds\Abstracts\Ad;
use AdvancedAds\Abstracts\Placement;
use AdvancedAds\Framework\Utilities\Params;
/**
* Class Placement Conditions
*/
class Advanced_Ads_Pro_Module_Placement_Conditions {
/**
* The constructor.
*/
public function __construct() {
add_filter( 'advanced-ads-placements-updated', [ $this, 'maybe_refresh_placement_list' ], 10, 2 );
add_filter( 'advanced-ads-ad-get-conditions', [ $this, 'add_display_conditions_to_ad' ], 10, 2 );
add_filter( 'advanced-ads-ad-get-visitors', [ $this, 'add_visitor_conditions_to_ad' ], 10, 2 );
}
/**
* Add placement visitor conditions to ads
*
* @param array $value ad visitor conditions.
* @param Ad $ad the ad.
*
* @return array
*/
public function add_visitor_conditions_to_ad( $value, $ad ) {
return $this->append_conditions( 'visitors', $value, $ad );
}
/**
* Add display conditions to ads
*
* @param array $value ad visitor conditions.
* @param Ad $ad the ad.
*
* @return array
*/
public function add_display_conditions_to_ad( $value, $ad ) {
return $this->append_conditions( 'display', $value, $ad );
}
/**
* Reload the placement list page if visitor or display conditions have changed to update the WP_List_Table instance.
*
* @param array $update_data data related to the update process.
* @param Placement $placement current placement.
*
* @return array
*/
public function maybe_refresh_placement_list( $update_data, $placement ) {
$options = $update_data['payload']['advads']['placements']['options'] ?? [];
$payload_conditions = [
'display' => $options['display'] ?? [],
'visitor' => $options['visitor'] ?? [],
];
$saved_conditions = [
'display' => $update_data['placement_data']['display'] ?? [],
'visitor' => $update_data['placement_data']['visitor'] ?? [],
];
// If conditions differ, refresh the placement list page.
if ( md5( wp_json_encode( $payload_conditions ) ) !== md5( wp_json_encode( $saved_conditions ) ) ) {
if ( empty( $payload_conditions['display'] ) ) {
$placement->set_prop( 'display', [] );
}
if ( empty( $payload_conditions['visitor'] ) ) {
$placement->set_prop( 'visitor', [] );
}
$update_data['reload'] = true;
}
return $update_data;
}
/**
* Append placement condition to the ad conditions
*
* @param string $type conditions type, 'display'|'visitors'.
* @param array $conditions conditions from the ad.
* @param Ad $ad the ad we're getting the prop from.
*
* @return array
*/
private function append_conditions( string $type, array $conditions, Ad $ad ) {
if ( is_admin() && 'advads_ad_select' !== Params::request( 'action' ) ) {
return $conditions;
}
$placement = $ad->get_root_placement();
if ( ! $placement ) {
return $conditions;
}
$placement_conditions = $placement->get_prop( $type );
if ( empty( $placement_conditions ) ) {
return $conditions;
}
$conditions_values = array_values( $placement_conditions );
if ( ! isset( $conditions_values[0] ) ) {
$conditions_values[0] = [];
}
// Append placement conditions to the ad conditions using the 'AND' connector.
$conditions_values[0]['connector'] = 'and';
return array_merge( $conditions, $conditions_values );
}
}

View File

@@ -0,0 +1,2 @@
<?php
new Advanced_Ads_Pro_Module_Placement_Conditions;