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,100 @@
<?php
/**
* The class provides utility functions related to Validation.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.48.2
*/
namespace AdvancedAds\Utilities;
use DOMDocument;
use AdvancedAds\Abstracts\Ad;
defined( 'ABSPATH' ) || exit;
/**
* Validation.
*/
class Validation {
/**
* Check if an ad is valid for 'Post Content' placement
*
* @param Ad $ad Ad instance.
*
* @see Regex source: http://stackoverflow.com/questions/17852537/preg-replace-only-specific-part-of-string
*
* @return string|bool If not valid string with errors, otherwise empty string
*/
public static function is_valid_ad_dom( Ad $ad ) {
$ad_content = $ad->get_content() ?? '';
if ( ! extension_loaded( 'dom' ) || ! $ad_content ) {
return false;
}
$wp_charset = get_bloginfo( 'charset' );
$ad_dom = new DOMDocument( '1.0', $wp_charset );
$libxml_previous_state = libxml_use_internal_errors( true );
libxml_clear_errors();
$ad_content = preg_replace( '#(document.write.+)</(.*)#', '$1<\/$2', $ad_content );
$ad_dom->loadHtml( '<!DOCTYPE html><html><meta http-equiv="Content-Type" content="text/html; charset=' . $wp_charset . '" /><body>' . $ad_content );
$errors = '';
foreach ( libxml_get_errors() as $error ) {
if ( stripos( $error->message, 'htmlParseEntityRef:' ) || preg_match( '/tag \S+ invalid/i', $error->message ) ) {
continue;
}
$errors .= print_r( $error, true ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_print_r
}
libxml_use_internal_errors( $libxml_previous_state );
return $errors;
}
/**
* Check if the current URL is HTTPS, but the ad code contains HTTP.
*
* @param Ad $ad Ad instance.
*
* @return bool false/string
*/
public static function is_ad_https( Ad $ad ) {
if (
$ad &&
is_ssl() &&
$ad->is_type( [ 'plain', 'content' ] ) &&
// Find img, iframe, script. '\\\\' denotes a single backslash.
preg_match( '#\ssrc=\\\\?[\'"]http:\\\\?/\\\\?/#i', $ad->get_content() )
) {
return __( 'Your website is using HTTPS, but the ad code contains HTTP and might not work.', 'advanced-ads' );
}
return false;
}
/**
* Check post and nonce while saving post to reduce complexity.
*
* @param int $post_id Post ID.
* @param object $post Post object.
*
* @return boolean
*/
public static function check_save_post( $post_id, $post ): bool {
if ( empty( $post_id ) || empty( $post ) || ! is_a( $post, 'WP_Post' ) ) {
return false;
}
// Dont' save meta boxes for revisions or autosaves.
if ( Conditional::doing_autosave() || is_int( wp_is_post_revision( $post ) ) || is_int( wp_is_post_autosave( $post ) ) ) {
return false;
}
return true;
}
}