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,12 @@
<?php
/**
* Render the Adsense ID column content in the ad list.
*
* @package AdvancedAds
* @var string $slotid Adsense Slot ID.
*/
?>
<?php if ( null !== $slotid ) : ?>
<div><?php echo esc_html( $slotid ); ?></div>
<?php endif; ?>

View File

@@ -0,0 +1,22 @@
<?php
/**
* Render the "Date" column date in the ad list.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.48.0
*
* @var string $published_date ad published date.
* @var string $modified_date ad modified date.
*/
?>
<div class="advads-ad-list-date">
<?php if ( $modified_date === $published_date ) : ?>
<?php esc_html_e( 'Published', 'advanced-ads' ); ?>
<?php else : ?>
<?php esc_html_e( 'Last Modified', 'advanced-ads' ); ?>
<?php endif; ?>
<br/>
<?php echo esc_html( $modified_date ); ?>
</div>

View File

@@ -0,0 +1,10 @@
<?php
/**
* Render 'debug' column.
*
* @package AdvancedAds
*
* @var bool $debug_mode Debug mode checked or not.
*/
echo $debug_mode ? esc_html__( 'Enabled', 'advanced-ads' ) : '&mdash;';

View File

@@ -0,0 +1,15 @@
<?php
/**
* Render the "Notes" column content in the ad list.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.48.0
*
* @var string $description ad description.
*/
?>
<div class="advads-ad-list-description">
<?php echo esc_html( $description ); ?>
</div>

View File

@@ -0,0 +1,10 @@
<?php
/**
* Render 'debug' column.
*
* @package AdvancedAds
*
* @var bool $display_once 'Display once' checked or not.
*/
echo $display_once ? esc_html__( 'Enabled', 'advanced-ads' ) : '&mdash;';

View File

@@ -0,0 +1,10 @@
<?php
/**
* Render 'debug' column.
*
* @package AdvancedAds
*
* @var bool $privacyignore Debug mode checked or not.
*/
echo $privacyignore ? esc_html__( 'Enabled', 'advanced-ads' ) : '&mdash;';

View File

@@ -0,0 +1,13 @@
<?php
/**
* Render ad shortcode column in the ad overview list
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.48.0
*
* @var int $ad_id Ad id.
*/
?>
<input class="advads-ad-injection-shortcode" onclick="this.select();" value="[the_ad id=&quot;<?php echo esc_attr( $ad_id ); ?>&quot;]"/>

View File

@@ -0,0 +1,16 @@
<?php
/**
* Render the ad size column content in the ad list.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.48.0
*
* @var string $size ad size string.
*/
?>
<span class="advads-ad-size">
<?php echo esc_html( $size ); ?>
</span>

View File

@@ -0,0 +1,22 @@
<?php
/**
* Render content of the Ad Schedule column in the ad overview list
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.48.0
*
* @var string $html_classes Additonal values for class attribute.
* @var string[] $status_strings Status string.
* @var string $content_after HTML to load after the schedule content.
*/
?>
<fieldset class="inline-edit-col-left">
<div class="inline-edit-col <?php echo esc_attr( $html_classes ); ?>">
<p>
<?php echo wp_kses( implode( '<br/>', $status_strings ), [ 'br' => [] ] ); ?>
</p>
<?php echo $content_after; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
</div>
</fieldset>

View File

@@ -0,0 +1,37 @@
<?php
/**
* Render the ad type column content in the ad list.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.48.0
*
* @var string $size_string Ad size string.
* @var Ad $ad Ad instance.
*/
use AdvancedAds\Framework\Utilities\Params;
$type_object = $ad->get_type_object();
?>
<span class="advads-ad-list-tooltip">
<span class="advads-ad-list-tooltip-content">
<strong><?php echo esc_html( $type_object->get_title() ); ?></strong><br/>
<?php if ( ! empty( $size_string ) ) : ?>
<span class="advads-ad-size"><?php echo esc_html( $size_string ); ?></span>
<?php endif; ?>
</span>
<a href="<?php echo esc_url( get_edit_post_link( $ad->get_id() ) ?? '' ); ?>">
<img src="<?php echo esc_url( $type_object->get_image() ); ?>" alt="<?php echo esc_attr( $type_object->get_title() ); ?>" title="<?php echo esc_attr( $type_object->get_title() ); ?>" width="50">
</a>
</span>
<?php
// Not inline edit, or no permission.
if (
! wp_verify_nonce( sanitize_key( Params::post( '_inline_edit' ) ), 'inlineeditnonce' ) ||
! current_user_can( 'advanced_ads_edit_ads' )
) {
return;
}
?>
<script>window.advancedAds.notifications.addSuccess( '<?php esc_html_e( 'Ad updated', 'advanced-ads' ); ?>' );</script>

View File

@@ -0,0 +1,48 @@
<?php
/**
* Render column.
*
* @package AdvancedAds
* @var int $ad_id Ad ID.
*/
$groups = wp_advads_get_group_repository()->get_groups_by_ad_id( $ad_id );
$placements = wp_advads_get_placement_repository()->find_by_item_id( 'ad_' . $ad_id );
if ( $groups ) :
?>
<strong><?php echo esc_html__( 'Groups', 'advanced-ads' ) . ':'; ?></strong>
<div>
<?php
$group_links = [];
foreach ( $groups as $group ) {
$group_links[] = '<a href="' . esc_attr( $group->get_edit_link() ) . '" target="_blank">'
. esc_html( $group->get_name() ) . '</a>';
}
echo implode( ', ', $group_links ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- $group_links is HTML.
?>
</div>
<?php
endif;
if ( $groups && $placements ) {
echo '<br>';
}
if ( $placements ) :
?>
<strong><?php echo esc_html__( 'Placements', 'advanced-ads' ) . ':'; ?></strong>
<div>
<?php
$ids = [];
$placement_links = [];
foreach ( $placements as $placement ) {
$ids[] = $placement->get_id();
$placement_links[] = '<a href="' . esc_attr( $placement->get_edit_link() ) . '" target="_blank">'
. esc_html( $placement->get_title() ) . '</a>';
}
echo implode( ', ', $placement_links ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- $placement_links is HTML.
?>
</div>
<?php
endif;

View File

@@ -0,0 +1,124 @@
<?php
/**
* Render ad list filters.
*
* @package AdvancedAds
*/
use AdvancedAds\Framework\Utilities\Params;
use AdvancedAds\Options;
// TODO: refactor whole filter system.
global $wp_query;
$screen = get_current_screen();
$filters_to_show = $screen->get_option( 'filters_to_show' ) ?? [];
$is_privacy_enabled = Options::instance()->get( 'privacy.enabled' );
$all_filters = wp_advads()->list_filters->get_all_filters();
$selected_ad_type = Params::request( 'adtype', '' );
$ad_size = Params::request( 'adsize', '' );
$ad_date = Params::request( 'addate', '' );
$ad_group = Params::request( 'adgroup', '' );
$ad_author = Params::request( 'ad_author', '' );
$ad_debug = Params::request( 'ad_debugmode', '' );
$ad_displayonce = Params::request( 'ad_displayonce', '' );
$ad_privacyignore = Params::request( 'ad_privacyignore', '' );
// hide the filter button. Can not filter correctly with "trashed" posts.
if ( 'trash' === Params::request( 'post_status', '' ) ) {
echo '<style type="text/css">#post-query-submit{display:none;}</style>';
}
$ad_types = wp_advads_get_ad_types();
usort(
$ad_types,
function ( $a, $b ) {
return strcmp( $a->get_title(), $b->get_title() );
}
);
?>
<div class="advads-ad-filters-container">
<!-- Types -->
<select id="advads-filter-type" name="adtype">
<option value="">- <?php esc_html_e( 'Ad Types', 'advanced-ads' ); ?> -</option>
<?php foreach ( $ad_types as $ad_type ) : ?>
<option <?php selected( $selected_ad_type, $ad_type->get_id() ); ?> value="<?php echo esc_attr( $ad_type->get_id() ); ?>"><?php echo esc_html( $ad_type->get_title() ); ?></option>
<?php endforeach; ?>
</select>
<!-- Sizes -->
<?php if ( ! empty( $all_filters['all_sizes'] ) ) : ?>
<select id="advads-filter-size" name="adsize">
<option value="">- <?php esc_html_e( 'Ad Sizes', 'advanced-ads' ); ?> -</option>
<?php foreach ( $all_filters['all_sizes'] as $key => $value ) : ?>
<option <?php selected( $ad_size, $key ); ?> value="<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $value ); ?></option>
<?php endforeach; ?>
</select>
<?php endif; ?>
<!-- Dates -->
<?php if ( ! empty( $all_filters['all_dates'] ) ) : ?>
<select id="advads-filter-date" name="addate">
<option value="">- <?php esc_html_e( 'Ad Dates', 'advanced-ads' ); ?> -</option>
<?php foreach ( $all_filters['all_dates'] as $key => $value ) : ?>
<option <?php selected( $ad_date, $key ); ?> value="<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $value ); ?></option>
<?php endforeach; ?>
</select>
<?php endif; ?>
<!-- Groups -->
<?php if ( ! empty( $all_filters['all_groups'] ) ) : ?>
<select id="advads-filter-group" name="adgroup">
<option value="">- <?php esc_html_e( 'Ad Groups', 'advanced-ads' ); ?> -</option>
<?php foreach ( $all_filters['all_groups'] as $key => $value ) : ?>
<option <?php selected( $ad_group, $key ); ?> value="<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $value ); ?></option>
<?php endforeach; ?>
</select>
<?php endif; ?>
<!-- Debug Mode -->
<?php if ( in_array( 'all_debug_mode', $filters_to_show, true ) ) : ?>
<select name="ad_debugmode">
<option value="">- <?php esc_html_e( 'Debug Mode', 'advanced-ads' ); ?> -</option>
<option <?php selected( $ad_debug, 'yes' ); ?> value="yes"><?php esc_html_e( 'Enabled', 'advanced-ads' ); ?></option>
<option <?php selected( $ad_debug, 'no' ); ?> value="no"><?php esc_html_e( 'Disabled', 'advanced-ads' ); ?></option>
</select>
<?php endif; ?>
<!-- Author -->
<?php if ( in_array( 'all_authors', $filters_to_show, true ) && ! empty( $all_filters['all_authors'] ) ) : ?>
<select name="ad_author">
<option value="">- <?php esc_html_e( 'Ad Authors', 'advanced-ads' ); ?> -</option>
<?php foreach ( $all_filters['all_authors'] as $key => $value ) : ?>
<option <?php selected( $ad_author, $key ); ?> value="<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $value ); ?></option>
<?php endforeach; ?>
</select>
<?php endif; ?>
<!-- Display once -->
<?php if ( defined( 'AAP_VERSION' ) && in_array( 'all_displayonce', $filters_to_show, true ) ) : ?>
<select name="ad_displayonce">
<option value="">- <?php esc_html_e( 'Display Once', 'advanced-ads' ); ?> -</option>
<option <?php selected( $ad_displayonce, 'yes' ); ?> value="yes"><?php esc_html_e( 'Enabled', 'advanced-ads' ); ?></option>
<option <?php selected( $ad_displayonce, 'no' ); ?> value="no"><?php esc_html_e( 'Disabled', 'advanced-ads' ); ?></option>
</select>
<?php endif; ?>
<!-- Privacy ignore -->
<?php if ( $is_privacy_enabled && in_array( 'all_privacyignore', $filters_to_show, true ) ) : ?>
<select name="ad_privacyignore">
<option value="">- <?php esc_html_e( 'Privacy Ignore', 'advanced-ads' ); ?> -</option>
<option <?php selected( $ad_privacyignore, 'yes' ); ?> value="yes"><?php esc_html_e( 'Enabled', 'advanced-ads' ); ?></option>
<option <?php selected( $ad_privacyignore, 'no' ); ?> value="no"><?php esc_html_e( 'Disabled', 'advanced-ads' ); ?></option>
</select>
<?php endif; ?>
<?php if ( isset( $wp_query->found_posts ) && $wp_query->found_posts > 0 ) : ?>
<?php do_action( 'advanced-ads-ad-list-filter-markup', $all_filters ); ?>
<?php endif; ?>
<a href="#" id="advads-ad-filter-customize"><?php esc_html_e( 'Customize filters', 'advanced-ads' ); ?></a>
</div>

View File

@@ -0,0 +1,18 @@
<?php
/**
* Render the tooltip for ad status on the group overview page.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.48.0
*
* @var string[] $status_strings
* @var string $status_type
*/
?>
<span class="advads-help advads-help-no-icon advads-ad-status-icon advads-ad-status-icon-<?php echo esc_attr( $status_type ); ?>">
<span class="advads-tooltip">
<?php echo wp_kses( implode( '<br/>', $status_strings ), [ 'br' => [] ] ); ?>
</span>
</span>

View File

@@ -0,0 +1,41 @@
<?php
/**
* Render the view navigation items on the ad list.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.48.0
*
* @var array $views_new list of views.
* @var bool $show_trash_delete_button if the trash delete button is visible.
*/
use AdvancedAds\Framework\Utilities\Str;
?>
<ul class="advanced-ads-ad-list-views">
<?php
foreach ( $views as $view ) :
$view = str_replace( [ ')', '(' ], '', $view );
$class = Str::contains( 'current', $view ) ? 'advads-button-primary' : 'advads-button-secondary';
?>
<li class="button <?php echo esc_attr( $class ); ?>">
<?php
echo wp_kses(
$view,
[
'a' => [ 'href' => [] ],
'span' => [ 'class' => [] ],
]
);
?>
</li>
<?php endforeach; ?>
</ul>
<?php if ( $show_trash_delete_button ) : ?>
<button type="submit" name="delete_all" id="delete_all" class="button advads-button-primary">
<span class="dashicons dashicons-trash"></span><?php esc_html_e( 'Empty Trash', 'advanced-ads' ); ?>
</button>
<?php
endif;

View File

@@ -0,0 +1,30 @@
<?php
/**
* Render the group details column content in the group table.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.48.0
*
* @var Group $group Group instance.
*/
?>
<ul>
<li>
<?php
/*
* translators: %s is the ID of an ad group
*/
printf( esc_attr__( 'ID: %s', 'advanced-ads' ), absint( $group->get_id() ) );
?>
</li>
<li>
<strong>
<?php
/* translators: %s is the name of a group type */
printf( esc_html__( 'Type: %s', 'advanced-ads' ), esc_html( $group->get_type_object()->get_title() ) );
?>
</strong>
</li>
</ul>

View File

@@ -0,0 +1,21 @@
<?php
/**
* Render the group name column content in the group table.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.48.0
*
* @var Group $group Group instance.
*/
?>
<div class="advads-table-name">
<a class="row-title" href="#modal-group-edit-<?php echo esc_attr( $group->get_id() ); ?>"><?php echo esc_html( $group->get_name() ); ?></a>
</div>
<?php if ( $this->type_error ) : ?>
<p class="advads-notice-inline advads-error">
<?php echo esc_html( $this->type_error ); ?>
</p>
<?php
endif;

View File

@@ -0,0 +1,16 @@
<?php
/**
* Render the group type column content in the group table.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.48.0
*
* @var Group $group Group instance.
*/
$group_type = $group->get_type_object();
?>
<div class="advads-form-type">
<img src="<?php echo esc_url( $group_type->get_image() ); ?>" alt="<?php echo esc_attr( $group_type->get_title() ); ?>">
</div>

View File

@@ -0,0 +1,19 @@
<?php
/**
* Render the group usage column content in the group table.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.48.0
*
* @var Group $group Group instance.
*/
?>
<div class="advads-usage">
<strong><?php esc_html_e( 'shortcode', 'advanced-ads' ); ?></strong>
<code><input type="text" onclick="this.select();" value='[the_ad_group id="<?php echo esc_attr( $group->get_id() ); ?>"]' readonly /></code>
<br/><br/>
<strong><?php esc_html_e( 'template (PHP)', 'advanced-ads' ); ?></strong>
<code><input type="text" onclick="this.select();" value="the_ad_group(<?php echo esc_attr( $group->get_id() ); ?>);" readonly /></code>
</div>

View File

@@ -0,0 +1,118 @@
<?php
/**
* Advanced Ads  form to edit ad groups in the admin
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
*
* @var AdvancedAds\Abstracts\Group $group Group instance.
* @var string $this ->type_error Contains an error message if the group type is missing.
*/
use AdvancedAds\Admin\Upgrades;
use AdvancedAds\Utilities\WordPress;
$group_types = wp_advads_get_group_types();
$group_id = $group->get_id();
?>
<div class="advads-ad-group-form">
<form name="update-group" method="post">
<input type="hidden" name="nonce" value="<?php echo esc_attr( wp_create_nonce( 'advads-update-group' ) ); ?>">
<?php
echo $group->get_hints_html(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
ob_start();
?>
<input type="hidden" class="advads-group-id" name="advads-groups[<?php echo esc_attr( $group_id ); ?>][id]" value="<?php echo esc_attr( $group_id ); ?>"/>
<input type="text" name="advads-groups[<?php echo esc_attr( $group_id ); ?>][name]" value="<?php echo esc_attr( $group->get_name() ); ?>"/>
<?php
$option_content = ob_get_clean();
WordPress::render_option(
'group-name static',
__( 'Name', 'advanced-ads' ),
$option_content
);
ob_start();
?>
<div class="advads-ad-group-type">
<?php if ( $this->type_error ) : ?>
<p class="advads-notice-inline advads-error"><?php echo esc_html( $this->type_error ); ?></p>
<?php
endif;
foreach ( $group_types as $group_type ) :
if ( $group_type->is_premium() ) {
continue;
}
?>
<label title="<?php echo esc_html( $group_type->get_description() ); ?>">
<input type="radio" name="advads-groups[<?php echo esc_attr( $group_id ); ?>][type]" value="<?php echo esc_attr( $group_type->get_id() ); ?>" <?php checked( $group->get_type(), $group_type->get_id() ); ?>/>
<?php echo esc_html( $group_type->get_title() ); ?>
</label>
<?php endforeach; ?>
<?php
foreach ( $group_types as $group_type ) :
if ( ! $group_type->is_premium() ) {
continue;
}
?>
<label title="<?php echo esc_html( $group_type->get_description() ); ?>">
<input type="radio" name="advads-groups[<?php echo esc_attr( $group_id ); ?>][type]" value="<?php echo esc_attr( $group_type->get_id() ); ?>" disabled/>
<?php echo esc_html( $group_type->get_title() ); ?>
</label>
<?php endforeach; ?>
<?php if ( wp_advads_get_group_type_manager()->has_premium() ) : ?>
<label>
<?php Upgrades::upgrade_link( __( 'Get all group types with All Access', 'advanced-ads' ), 'https://wpadvancedads.com/add-ons/all-access/', 'upgrades-pro-groups' ); ?>
</label>
<?php endif; ?>
</div>
<?php
$option_content = ob_get_clean();
WordPress::render_option(
'group-type static',
esc_attr__( 'Type', 'advanced-ads' ),
$option_content
);
ob_start();
?>
<select name="advads-groups[<?php echo esc_attr( $group_id ); ?>][ad_count]">
<?php
$sorted_ads_count = count( $group->get_sorted_ads() );
$max_ads = $sorted_ads_count >= 10 ? $sorted_ads_count + 2 : 10;
for ( $i = 1; $i <= $max_ads; $i++ ) :
?>
<option <?php selected( $group->get_ad_count(), $i ); ?>><?php echo esc_html( $i ); ?></option>
<?php
endfor;
?>
<option <?php selected( $group->get_ad_count(), 'all' ); ?> value="all"><?php echo esc_attr_x( 'all', 'option to display all ads in an ad groups', 'advanced-ads' ); ?></option>
</select>
<?php
$option_content = ob_get_clean();
WordPress::render_option(
'group-number advads-group-type-default advads-group-type-ordered',
esc_attr__( 'Visible ads', 'advanced-ads' ),
$option_content,
esc_attr__( 'Number of ads that are visible at the same time', 'advanced-ads' )
);
do_action( 'advanced-ads-group-form-options', $group );
ob_start();
require ADVADS_ABSPATH . 'views/admin/tables/groups/list-row-option-ads.php';
$option_content = ob_get_clean();
WordPress::render_option(
'group-ads static',
esc_attr__( 'Ads', 'advanced-ads' ),
$option_content
);
?>
</form>
</div>

View File

@@ -0,0 +1,45 @@
<?php
/**
* Group Filter
*
* @package AdvancedAds
*
* @var Groups_List_Table $this
*/
use AdvancedAds\Constants;
use AdvancedAds\Admin\Groups_List_Table;
use AdvancedAds\Framework\Utilities\Params;
$group_type = Params::request( 'group_type' );
$group_types = wp_advads_get_group_types();
usort(
$group_types,
function ( $a, $b ) {
return strcasecmp( $a->get_title(), $b->get_title() );
}
);
?>
<form id="advads-group-filter-form" method="get">
<div id="filters">
<input type="hidden" name="page" value="<?php echo esc_attr( Params::get( 'page' ) ); ?>">
<select id="advads-group-filter-type" name="group_type">
<option value="">- <?php esc_html_e( 'all group types', 'advanced-ads' ); ?> -</option>
<?php foreach ( $group_types as $gtype ) : ?>
<option <?php selected( $group_type, $gtype->get_id() ); ?> value="<?php echo esc_attr( $gtype->get_id() ); ?>"><?php echo esc_html( $gtype->get_title() ); ?></option>
<?php endforeach; ?>
</select>
<input type="submit" class="button" value="Filter">
</div>
<div class="search-form">
<?php
$group_taxonomy = get_taxonomy( Constants::TAXONOMY_GROUP );
$this->search_box( $group_taxonomy->labels->search_items, 'tag' );
?>
</div>
</form>

View File

@@ -0,0 +1,19 @@
<?php
/**
* Ads loop in a group.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
*
* @var Group $group Group instance.
*/
esc_html_e( 'No ads assigned', 'advanced-ads' );
?>
<br/>
<?php if ( ! empty( $this->all_ads ) ) : ?>
<a href="#modal-group-edit-<?php echo esc_attr( $group->get_id() ); ?>">+ <?php esc_html_e( 'Add some', 'advanced-ads' ); ?></a>
<?php else : ?>
<a class="button create-first-ad" href="<?php echo esc_url( admin_url( 'post-new.php?post_type=advanced_ads' ) ); ?>"><?php esc_html_e( 'Create your first ad', 'advanced-ads' ); ?></a>
<?php
endif;

View File

@@ -0,0 +1,85 @@
<?php
/**
* Ads loop in a group.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
*
* @var Group $group Group instance.
*/
use AdvancedAds\Abstracts\Group;
use AdvancedAds\Utilities\WordPress;
$counter = 1;
$ad_count = $group->get_ads_count();
$weights = $group->get_ad_weights();
$group_ads = $group->get_ads();
usort($group_ads, function ($a, $b) {
return $b->get_weight() <=> $a->get_weight();
});
foreach ( $group_ads as $group_ad ) {
if ( ! $group_ad->is_status( 'publish' ) ) {
unset( $weights[ $group_ad->get_id() ] );
}
}
$weight_sum = array_sum( $weights );
?>
<div class="advads-ad-group-list-ads advads-table-flex">
<?php
foreach ( $group_ads as $ad ) :
$ad_weight_percentage = '';
?>
<div style="display: <?php echo $counter > 3 ? 'none' : 'flex'; ?>">
<div>
<a href="<?php echo esc_url( get_edit_post_link( $ad->get_id() ) ); ?>"><?php echo esc_html( $ad->get_title() ); ?></a>
</div>
<div>
<?php echo $ad->get_ad_schedule_html(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
</div>
<?php
if ( 'default' === $group->get_type() && $weight_sum ) :
$weight = $ad->get_weight() ?? Group::MAX_AD_GROUP_DEFAULT_WEIGHT;
$ad_weight_percentage = $ad->is_status( 'publish' ) ? WordPress::calculate_percentage( $weight, $weight_sum ) : '0%';
?>
<div class="advads-ad-group-list-ads-weight">
<span title="<?php esc_attr_e( 'Ad weight', 'advanced-ads' ); ?>"><?php echo esc_html( $ad_weight_percentage ); ?></span>
</div>
<?php endif; ?>
</div>
<?php
++$counter;
endforeach;
?>
</div>
<?php if ( $ad_count > 4 ) : ?>
<p>
<a href="javascript:void(0)" class="advads-group-ads-list-show-more">
<?php
/* translators: %d is a number. */
echo esc_html( sprintf( __( '+ show %d more ads', 'advanced-ads' ), $ad_count - 3 ) );
?>
</a>
</p>
<?php endif; ?>
<?php
if ( $ad_count > 1 ) :
$ad_count = 'all' === $group->get_display_ad_count() ? $ad_count : $group->get_display_ad_count();
/**
* Filters the displayed ad count on the ad groups page.
*
* @param int $ad_count The amount of displayed ads.
* @param Group $group The current ad group.
*/
$ad_count = (int) apply_filters( 'advanced-ads-group-displayed-ad-count', $ad_count, $group );
$ad_count = (int) apply_filters( 'advanced-ads-group-' . $group->get_type() . '-displayed-ad-count', $ad_count, $group );
/* translators: amount of ads displayed */
echo '<p>' . esc_html( sprintf( _n( 'Up to %d ad displayed.', 'Up to %d ads displayed', $ad_count, 'advanced-ads' ), $ad_count ) ) . '</p>';
endif;

View File

@@ -0,0 +1,98 @@
<?php
/**
* Render a list of ads included in an ad group
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
*
* @var array $ad_form_rows HTML to render ad form.
* @var array $this->all_ads Array with ads that can be chosen from for the group.
* @var Group $group Group instance.
*/
$max_weight = $group->get_max_weight();
$sorted_ads = $group->get_sorted_ads();
?>
<table class="advads-group-ads">
<?php if ( $this->all_ads ) : ?>
<thead>
<tr>
<th class="group-sort group-ad" data-sortby="ad"><?php esc_html_e( 'Ad', 'advanced-ads' ); ?></th>
<th class="group-sort group-status" data-sortby="status"><?php esc_html_e( 'Status', 'advanced-ads' ); ?></th>
<th colspan="2" class="group-sort group-weight" data-sortby="weight"><?php esc_html_e( 'Weight', 'advanced-ads' ); ?></th>
</tr>
</thead>
<?php endif; ?>
<tbody>
<?php
foreach ( $sorted_ads as $ad_id => $ad ) :
$ad_object = wp_advads_get_ad( $ad_id );
$ad_url = add_query_arg(
[
'post' => $ad_id,
'action' => 'edit',
],
admin_url( 'post.php' )
);
/* translators: %s is the title for ad. */
$link_title = sprintf( esc_html__( 'Opens ad %s in a new tab', 'advanced-ads' ), $ad['title'] );
?>
<tr data-ad-id="<?php echo esc_attr( $ad_id ); ?>" data-group-id="<?php echo esc_attr( $group->get_id() ); ?>">
<td>
<a target="_blank" href="<?php echo esc_url( $ad_url ); ?>" title="<?php echo esc_attr( $link_title ); ?>">
<?php echo esc_html( $ad['title'] ); ?>
</a>
</td>
<td>
<?php
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- output is already escaped.
echo $ad_object->get_ad_schedule_html();
?>
</td>
<td>
<select name="advads-groups[<?php echo esc_attr( $group->get_id() ); ?>][ads][<?php echo esc_attr( $ad_id ); ?>]">
<?php for ( $i = 0; $i <= $max_weight; $i++ ) : ?>
<option<?php selected( $ad['weight'], $i ); ?>><?php echo $i; // phpcs:ignore ?></option>
<?php endfor; ?>
</select>
</td>
<td>
<button type="button" class="advads-remove-ad-from-group button">x</button>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php if ( $this->all_ads ) : ?>
<fieldset class="advads-group-add-ad">
<legend><?php esc_html_e( 'New Ad', 'advanced-ads' ); ?></legend>
<select class="advads-group-add-ad-list-ads">
<?php
foreach ( $this->all_ads as $ad_id => $ad_title ) {
$ad_status = wp_advads_get_ad( $ad_id )->get_ad_schedule_details();
printf(
'<option value="advads-groups[%1$d][ads][%2$d]" data-status="%3$s" data-status-string="%4$s">%5$s</option>',
absint( $group->get_id() ),
absint( $ad_id ),
esc_html( $ad_status['status_type'] ?? '' ),
esc_html( $ad_status['status_strings'][0] ?? '' ),
esc_html( $ad_title )
);
}
?>
</select>
<select class="advads-group-add-ad-list-weights">
<?php for ( $i = 0; $i <= $max_weight; $i++ ) : ?>
<option<?php selected( 10, $i ); ?>><?php echo absint( $i ); ?></option>
<?php endfor; ?>
</select>
<button type="button" class="button"><?php esc_html_e( 'add', 'advanced-ads' ); ?></button>
</fieldset>
<?php else : ?>
<a class="button" href="<?php echo esc_url( admin_url( 'post-new.php?post_type=advanced_ads' ) ); ?>"><?php esc_html_e( 'Create your first ad', 'advanced-ads' ); ?></a>
<?php
endif;

View File

@@ -0,0 +1,40 @@
<?php
/**
* Render item option for placements.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.50.0
*
* @var Placement $placement Placement instance.
*/
$placement_item = $placement->get_item_object();
$allowed_ads = $placement->get_type_object()->get_allowed_ads();
$allowed_groups = $placement->get_type_object()->get_allowed_groups();
$has_items = ! empty( $allowed_ads ) || ! empty( $allowed_groups );
// Show a button when no ads exist, yet.
if ( ! $has_items ) : ?>
<a class="button" href="<?php echo esc_url( admin_url( 'post-new.php?post_type=advanced_ads' ) ); ?>">
<?php esc_html_e( 'Create your first ad', 'advanced-ads' ); ?>
</a>
<?php else : ?>
<label for="advads-placement-item-<?php echo esc_attr( $placement->get_slug() ); ?>" class="screen-reader-text">
<?php esc_html_e( 'Choose the Ad or Group', 'advanced-ads' ); ?>
</label>
<div class="advads-placement-item-select-wrap">
<?php include 'item-select.php'; ?>
<span class="advads-loader hidden"></span>
<a class="advads-placement-item-edit" href="<?php echo esc_url( $placement_item ? $placement_item->get_edit_link() : '#' ); ?>" style="display: <?php echo esc_attr( $placement_item && $placement_item->get_id() > 0 ? 'inline' : 'none' ); ?>" title="<?php esc_attr_e( 'Edit item', 'advanced-ads' ); ?>">
<span class="dashicons dashicons-external"></span>
</a>
</div>
<?php
endif;
/**
* Do action after the item select.
*/
do_action( 'advads-placement-item-select-after' );

View File

@@ -0,0 +1,40 @@
<?php
/**
* Render output of the placement conditions.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.50.0
*
* @var Placement $placement Placement instance.
*/
$display_conditions = Advanced_Ads_Display_Conditions::get_instance();
$visitor_conditions = Advanced_Ads_Visitor_Conditions::get_instance();
?>
<?php if ( $placement->get_display_conditions() ) : ?>
<h4><?php echo esc_html__( 'Display Conditions', 'advanced-ads' ); ?></h4>
<ul>
<?php foreach ( $placement->get_display_conditions() as $condition ) : ?>
<?php if ( array_key_exists( $condition['type'], (array) $display_conditions->conditions ) ) : ?>
<li>
<?php echo esc_html( $display_conditions->conditions[ $condition['type'] ]['label'] ); ?>
</li>
<?php endif; ?>
<?php endforeach; ?>
</ul>
<?php endif; ?>
<?php if ( $placement->get_visitor_conditions() ) : ?>
<h4><?php echo esc_html__( 'Visitor Conditions', 'advanced-ads' ); ?></h4>
<ul>
<?php foreach ( $placement->get_visitor_conditions() as $condition ) : ?>
<?php if ( array_key_exists( $condition['type'], $visitor_conditions->conditions ) ) : ?>
<li>
<?php echo esc_html( $visitor_conditions->conditions[ $condition['type'] ]['label'] ); ?>
</li>
<?php endif; ?>
<?php endforeach; ?>
</ul>
<?php endif; ?>
<a href="#modal-placement-edit-<?php echo esc_attr( $placement->get_id() ); ?>" data-placement="<?php echo esc_attr( $placement->get_id() ); ?>" class="advads-mobile-hidden"><?php esc_html_e( 'edit conditions', 'advanced-ads' ); ?></a>

View File

@@ -0,0 +1,33 @@
<?php
/**
* Render the placement name column content in the placement table.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.48.0
*
* @var Placement $placement Placement instance.
*/
$type_object = $placement->get_type_object();
?>
<div class="advads-table-name">
<a class="row-title" href="#modal-placement-edit-<?php echo esc_attr( $placement->get_id() ); ?>"><?php echo esc_html( $placement->get_title() ); ?></a>
<?php if ( 'draft' === $placement->get_status() ) : ?>
<strong>— <span class="post-state"><?php esc_html_e( 'Draft', 'advanced-ads' ); ?></span></strong>
<?php endif; ?>
</div>
<?php if ( $type_object->is_premium() ) : ?>
<p class="advads-notice-inline advads-error">
<?php
echo esc_html(
sprintf(
/* translators: %s is the placement type string */
__( 'The originally selected placement type “%s” is not enabled.', 'advanced-ads' ),
$type_object->get_title()
)
);
?>
</p>
<?php
endif;

View File

@@ -0,0 +1,25 @@
<?php
/**
* Render the placement type column content in the placement table.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.48.0
*
* @var Placement $placement Placement instance.
*/
use AdvancedAds\Framework\Utilities\Params;
use AdvancedAds\Utilities\Conditional;
$placement_type = $placement->get_type_object();
?>
<div class="advads-form-type">
<img src="<?php echo esc_url( $placement_type->get_image() ); ?>" alt="<?php echo esc_attr( $placement_type->get_title() ); ?>" title="<?php echo esc_attr( $placement_type->get_title() ); ?>">
</div>
<?php
if ( ! wp_verify_nonce( sanitize_key( Params::post( '_inline_edit' ) ), 'inlineeditnonce' ) || ! Conditional::user_can( 'advanced_ads_manage_placements' ) ) {
return;
}
?>
<script>window.advancedAds.notifications.addSuccess( '<?php esc_html_e( 'Placement updated', 'advanced-ads' ); ?>' );</script>

View File

@@ -0,0 +1,30 @@
<?php
/**
* Content for the "Show Usage"
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.48.0
*
* @var Placement $placement Placement instance.
*/
?>
<div class="advads-usage advads-placement-usage-modal">
<h2>
<label for="usage-shortcode-<?php echo esc_attr( $placement->get_slug() ); ?>">
<?php esc_html_e( 'Shortcode', 'advanced-ads' ); ?>
</label>
</h2>
<code>
<input class="widefat" type="text" id="usage-shortcode-<?php echo esc_attr( $placement->get_slug() ); ?>" onclick="this.select();" value='[the_ad_placement id="<?php echo esc_attr( $placement->get_slug() ); ?>"]' readonly />
</code>
<h2>
<label for="usage-template-<?php echo esc_attr( $placement->get_slug() ); ?>">
<?php esc_html_e( 'Template (PHP)', 'advanced-ads' ); ?>
</label>
</h2>
<code>
<input class="widefat" type="text" id="usage-template-<?php echo esc_attr( $placement->get_slug() ); ?>" onclick="this.select();" value="&lt;?php if ( function_exists( 'the_ad_placement' ) ) { the_ad_placement( '<?php echo esc_attr( $placement->get_slug() ); ?>' ); } ?&gt;" readonly />
</code>
</div>

View File

@@ -0,0 +1,18 @@
<?php
/**
* Placement list table description.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.48.0
*/
use AdvancedAds\Entities;
?>
<p class="description">
<?php echo esc_html( Entities::get_placement_description() ); ?>
<a href="https://wpadvancedads.com/manual/placements/?utm_source=advanced-ads&utm_medium=link&utm_campaign=placements" target="_blank" class="advads-manual-link">
<?php esc_html_e( 'Manual', 'advanced-ads' ); ?>
</a>
</p>

View File

@@ -0,0 +1,26 @@
<?php
/**
* Filter placement types.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.50.0
*
* @var string $current_type Currently filtered placement type.
*/
?>
<label class="screen-reader-text" for="advads_filter_placement_type">
<?php esc_html_e( 'Placement Type', 'advanced-ads' ); ?>
</label>
<select class="advads_filter_placement_type" id="advads_filter_placement_type" name="placement-type">
<option value=""><?php esc_html_e( '- show all types -', 'advanced-ads' ); ?></option>
<?php
$types = wp_advads_get_placement_type_manager()->get_dropdown_options();
foreach ( $types as $id => $title ) : // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
?>
<option value="<?php echo esc_attr( $id ); ?>"<?php selected( $id, $current_type ); ?>>
<?php echo esc_html( $title ); ?>
</option>
<?php endforeach; ?>
</select>

View File

@@ -0,0 +1,28 @@
<?php
/**
* Show a note about placing ads in the header.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.48.0
*/
?>
<div style="margin-top: 12px;">
<?php
printf(
wp_kses(
/* translators: %s is a URL. */
__( 'Tutorial: <a href="%s" target="_blank">How to place visible ads in the header of your website</a>.', 'advanced-ads' ),
[
'a' => [
'href' => [],
'target' => [],
],
]
),
'https://wpadvancedads.com/place-ads-in-website-header/?utm_source=advanced-ads&utm_medium=link&utm_campaign=header-ad-tutorial'
);
?>
</div>
<?php

View File

@@ -0,0 +1,30 @@
<?php
/**
* Markup for the placement item select box.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.50.0
*
* @var Placement $placement Placement instance.
*/
?>
<select
id="advads-placements-item-<?php echo esc_attr( $placement->get_id() ); ?>"
name="item"
class="advads-placement-item-select js-update-placement-item"
data-placement-id="<?php echo esc_attr( $placement->get_id() ); ?>"
>
<option value=""><?php esc_html_e( '--not selected--', 'advanced-ads' ); ?></option>
<?php foreach ( $placement->get_type_object()->get_allowed_items() as $item_group ) : ?>
<optgroup label="<?php echo esc_attr( $item_group['label'] ); ?>">
<?php foreach ( $item_group['items'] as $item_id => $item_name ) : ?>
<option value="<?php echo esc_attr( $item_id ); ?>"<?php selected( $placement->get_item(), $item_id ); ?>>
<?php echo esc_html( $item_name ); ?>
</option>
<?php endforeach; ?>
</optgroup>
<?php endforeach; ?>
</select>

View File

@@ -0,0 +1,39 @@
<?php
/**
* Render the view navigation items on the Placement screen.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.48.0
*
* @var array $views list of views.
* @var bool $show_trash_delete_button if the trash delete button is visible.
*/
use AdvancedAds\Framework\Utilities\Str;
?>
<ul class="advanced-ads-ad-list-views">
<?php
foreach ( $views as $view ) :
$view = str_replace( [ ')', '(' ], '', $view );
$class = Str::contains( 'current', $view ) ? 'advads-button-primary' : 'advads-button-secondary';
?>
<li class="button <?php echo esc_attr( $class ); ?>">
<?php
echo wp_kses(
$view,
[
'a' => [ 'href' => [] ],
'span' => [ 'class' => [] ],
]
);
?>
</li>
<?php endforeach; ?>
</ul>
<?php if ( $show_trash_delete_button ) : ?>
<button type="submit" name="delete_all" id="delete_all" class="button advads-button-primary">
<span class="dashicons dashicons-trash"></span><?php esc_html_e( 'Empty Trash', 'advanced-ads' ); ?>
</button>
<?php endif; ?>