Files
roi-theme/wp-content/plugins/advanced-ads/includes/utilities/class-data.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

442 lines
10 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
/**
* The class provides utility functions for retrieving and managing plugin data and choices.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.47.0
*/
namespace AdvancedAds\Utilities;
use WP_Role;
use AdvancedAds\Framework\Utilities\HTML;
use AdvancedAds\Framework\Utilities\Str;
defined( 'ABSPATH' ) || exit;
/**
* Data and Choices.
*/
class Data {
/**
* Get the list of all add-ons.
*
* @return array
*/
public static function get_addons(): array {
static $advads_addons = null;
if ( null === $advads_addons ) {
$advads_addons = [];
if ( ! function_exists( 'get_plugins' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
$plugins = \get_plugins();
$allowed = [
'advanced-ads-pro',
'advanced-ads-responsive',
'advanced-ads-gam',
'advanced-ads-layer',
'advanced-ads-selling',
'advanced-ads-sticky',
'advanced-ads-tracking',
'slider-ads',
];
foreach ( $plugins as $plugin_file => $plugin_data ) {
$slug = $plugin_data['TextDomain'];
if ( ! in_array( $slug, $allowed, true ) ) {
continue;
}
$name = str_replace( [ ' ', 'Advanced Ads ' ], '', $plugin_data['Name'] );
$advads_addons[ $slug ] = [
'id' => str_replace( 'advanced-ads-', '', $slug ),
'name' => $name,
'version' => $plugin_data['Version'] ?? '0.0.1',
'path' => $plugin_file,
'options_slug' => $slug,
'uri' => $plugin_data['PluginURI'] ?? 'https://wpadvancedads.com',
];
}
}
return $advads_addons;
}
/**
* Get the admin screen ids.
*
* @return array
*/
public static function get_admin_screen_ids(): array {
return apply_filters(
'advanced-ads-dashboard-screens',
[
'advanced_ads',
'edit-advanced_ads',
'edit-advanced_ads_plcmnt',
'toplevel_page_advanced-ads',
'admin_page_advanced-ads-debug',
'admin_page_advanced-ads-import-export',
'advanced-ads_page_advanced-ads-groups',
'advanced-ads_page_advanced-ads-placements',
'advanced-ads_page_advanced-ads-settings',
'advanced-ads_page_advanced-ads-tools',
]
);
}
/**
* Get ad ids
*
* @return array
*/
public static function get_ads_ids(): array {
static $ad_ids = null;
if ( null !== $ad_ids ) {
return $ad_ids;
}
$ad_ids = wp_advads_get_ads_dropdown();
$ad_ids = array_keys( $ad_ids );
return $ad_ids;
}
/**
* Get the array of known bots.
*
* @param bool $filter Whether to apply filters.
*
* @return array
*/
public static function get_bots( $filter = true ) {
// List of bots and crawlers to exclude from ad impressions.
$bots = [
'bot',
'spider',
'crawler',
'scraper',
'parser',
'008',
'Accoona-AI-Agent',
'ADmantX',
'alexa',
'appie',
'Apple-PubSub',
'Arachmo',
'Ask Jeeves',
'avira\.com',
'B-l-i-t-z-B-O-T',
'boitho\.com-dc',
'BUbiNG',
'Cerberian Drtrs',
'Charlotte',
'cosmos',
'Covario IDS',
'curl',
'Datanyze',
'DataparkSearch',
'Dataprovider\.com',
'DDG-Android',
'Ecosia',
'expo9',
'facebookexternalhit',
'Feedfetcher-Google',
'FindLinks',
'Firefly',
'froogle',
'Genieo',
'heritrix',
'Holmes',
'htdig',
'https://developers\.google\.com',
'ia_archiver',
'ichiro',
'igdeSpyder',
'InfoSeek',
'inktomi',
'Kraken',
'L\.webis',
'Larbin',
'Linguee',
'LinkWalker',
'looksmart',
'lwp-trivial',
'mabontland',
'Mnogosearch',
'mogimogi',
'Morning Paper',
'MVAClient',
'NationalDirectory',
'NetResearchServer',
'NewsGator',
'NG-Search',
'Nusearch',
'NutchCVS',
'Nymesis',
'oegp',
'Orbiter',
'Peew',
'Pompos',
'PostPost',
'proximic',
'PycURL',
'Qseero',
'rabaz',
'Radian6',
'Reeder',
'savetheworldheritage',
'SBIder',
'Scooter',
'ScoutJet',
'Scrubby',
'SearchSight',
'semanticdiscovery',
'Sensis',
'ShopWiki',
'silk',
'Snappy',
'Spade',
'Sqworm',
'StackRambler',
'TechnoratiSnoop',
'TECNOSEEK',
'Teoma',
'Thumbnail\.CZ',
'TinEye',
'truwoGPS',
'updated',
'Vagabondo',
'voltron',
'Vortex',
'voyager',
'VYU2',
'WebBug',
'webcollage',
'WebIndex',
'Websquash\.com',
'WeSEE:Ads',
'wf84',
'Wget',
'WomlpeFactory',
'WordPress',
'yacy',
'Yahoo! Slurp',
'Yahoo! Slurp China',
'YahooSeeker',
'YahooSeeker-Testing',
'YandexBot',
'YandexMedia',
'YandexBlogs',
'YandexNews',
'YandexCalendar',
'YandexImages',
'Yeti',
'yoogliFetchAgent',
'Zao',
'ZyBorg',
'okhttp',
'ips-agent',
'ltx71',
'Optimizer',
'Daum',
'Qwantify',
];
return (array) ( $filter ? apply_filters( 'advanced-ads-bots', $bots ) : $bots );
}
/**
* Get the roles that are allowed to edit ads.
*
* @return array
*/
public static function get_filtered_roles_by_cap(): array {
return array_filter(
wp_roles()->role_objects,
static function ( WP_Role $role ) {
return $role->has_cap( 'advanced_ads_edit_ads' );
}
);
}
/**
* Render items dropdown html.
*
* @param array $args Arguments for the dropdown.
*
* @return void
*/
public static function items_dropdown( $args = [] ): void {
$items = self::items_for_select();
$attrs = [
'id' => $args['id'] ?? 'advads-items-select',
'name' => $args['name'] ?? 'advads-items-select',
'class' => $args['class'] ?? 'advads-items-select',
];
?>
<select <?php echo HTML::build_attributes( $attrs ); // phpcs:ignore ?>>
<option value=""><?php esc_html_e( '--empty--', 'advanced-ads' ); ?></option>
<?php if ( isset( $items['ads'] ) ) : ?>
<optgroup label="<?php esc_html_e( 'Ads', 'advanced-ads' ); ?>">
<?php foreach ( $items['ads'] as $ad_id => $ad_title ) : ?>
<option value="<?php echo esc_attr( $ad_id ); ?>"><?php echo esc_html( $ad_title ); ?></option>
<?php endforeach; ?>
</optgroup>
<?php endif; ?>
<?php if ( isset( $items['groups'] ) ) : ?>
<optgroup label="<?php esc_html_e( 'Ad Groups', 'advanced-ads' ); ?>">
<?php foreach ( $items['groups'] as $group_id => $group_title ) : ?>
<option value="<?php echo esc_attr( $group_id ); ?>"><?php echo esc_html( $group_title ); ?></option>
<?php endforeach; ?>
</optgroup>
<?php endif; ?>
<?php if ( isset( $items['placements'] ) ) : ?>
<optgroup label="<?php esc_html_e( 'Placements', 'advanced-ads' ); ?>">
<?php foreach ( $items['placements'] as $placement_id => $placement_title ) : ?>
<option value="<?php echo esc_attr( $placement_id ); ?>"><?php echo esc_html( $placement_title ); ?></option>
<?php endforeach; ?>
</optgroup>
<?php endif; ?>
</select>
<?php
}
/**
* Get items for item select field
*
* @param array $args Arguments for the dropdown.
*
* @return array
*/
public static function items_for_select( $args = [] ): array {
$select = [];
$args = wp_parse_args(
$args,
[
'ads' => true,
'groups' => true,
'placements' => true,
]
);
if ( $args['ads'] ) {
$ads = wp_advads_get_ads_dropdown();
foreach ( $ads as $ad_id => $ad_title ) {
$select['ads'][ 'ad_' . $ad_id ] = $ad_title;
}
}
if ( $args['groups'] ) {
$groups = wp_advads_get_groups_dropdown();
foreach ( $groups as $group_id => $group_title ) {
$select['groups'][ 'group_' . $group_id ] = $group_title;
}
}
if ( $args['placements'] ) {
$placements = wp_advads_get_placements_dropdown();
foreach ( $placements as $placement_id => $placement_title ) {
$select['placements'][ 'placement_' . $placement_id ] = $placement_title;
}
}
return $select;
}
/**
* Get the correct support URL: wp.org for free users and website for those with any add-on installed
*
* @param string $utm add UTM parameter to the link leading to https://wpadvancedads.com, if given.
*
* @return string URL.
*/
public static function support_url( $utm = '' ) {
$utm = empty( $utm ) ? '?utm_source=advanced-ads&utm_medium=link&utm_campaign=support' : $utm;
$url = 'https://wpadvancedads.com/support/' . $utm . '-free-user';
if ( Conditional::is_any_addon_activated() ) {
$url = 'https://wpadvancedads.com/support/' . $utm . '-with-addons';
}
return $url;
}
/**
* Show feed from wpadvancedads.com
*
* @return void
*/
public static function display_rss_feed(): void {
$cache_key = 'advads_feed_posts_v2';
$cache = get_transient( $cache_key );
// Check for cached content.
$cached_content = get_transient( $cache_key );
if ( false !== $cached_content ) {
echo $cached_content; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
return;
}
// Generate feed data.
$content = self::generate_adsense_data();
// Cache the content if it's valid.
if ( ! empty( $content ) ) {
set_transient( $cache_key, $content, 2 * HOUR_IN_SECONDS );
}
echo $content; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
/**
* Get feed from wpadvancedads.com
*
* @return bool|string HTML content.
*/
private static function generate_adsense_data() {
// Get AdSense data.
$adsense_obj = \AdSense_Report_Data::get_data_from_options( 'domain' );
$adsense_num = $adsense_obj->get_sums()['28days'] ?? 0;
$currency = $adsense_obj->get_currency() ?? '';
// Define thresholds and campaigns.
$feed_id = '1';
$campaign = 'dashboard';
$adsense_num = 1500;
$valid_currencies = [ 'EUR', 'USD', 'GBP', 'CHF' ];
if ( $adsense_num > 1000 && in_array( $currency, $valid_currencies, true ) ) {
$feed_id = '8361';
$campaign = 'dashboard-adsense-motors';
} elseif ( $adsense_num > 100 && in_array( $currency, $valid_currencies, true ) ) {
$feed_id = '8364';
$campaign = 'dashboard-adsense';
}
$url = sprintf( 'https://wpadvancedads.com/wp-json/wp/v2/posts?categories=%s&per_page=3', $feed_id );
$response = wp_remote_get( $url );
if ( is_wp_error( $response ) || 200 !== (int) wp_remote_retrieve_response_code( $response ) ) {
return false;
}
$rss_posts = json_decode( wp_remote_retrieve_body( $response ), true );
ob_start();
include ADVADS_ABSPATH . 'views/admin/widgets/rss-posts.php';
$content = ob_get_clean();
return $content;
}
}