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,141 @@
<?php
/**
* Thrive Themes - https://thrivethemes.com
*
* @package thrive-dashboard
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Silence is golden!
}
require_once dirname( __FILE__ ) . "/Tve_Dash_Font_Import_Manager_View.php";
require_once dirname( __FILE__ ) . "/Tve_Dash_Font_Import_Manager_Data.php";
if ( class_exists( 'Tve_Dash_Font_Import_Manager' ) ) {
return;
}
class Tve_Dash_Font_Import_Manager {
const OPTION_NAME = 'thrive_custom_font_pack';
protected static $instance;
protected $view;
protected $messages = array();
protected function __construct() {
$this->view = new Tve_Dash_Font_Import_Manager_View( dirname( dirname( __FILE__ ) ) . "/views" );
}
public function mainPage() {
if ( ! empty( $_POST['attachment_id'] ) ) {
$this->handlePost();
}
$font_pack = get_option( static::OPTION_NAME, array() );
if ( ! empty( $font_pack['css_file'] ) ) {
wp_enqueue_style( 'thrive_custom_fonts_manager', $font_pack['css_file'] );
}
$data['font_pack'] = $font_pack;
$data['messages'] = $this->messages;
$this->view->render( 'main', $data );
}
protected function handlePost() {
$handler = new Tve_Dash_Font_Import_Manager_Data();
if ( ! empty( $_POST['attachment_id'] ) && $_POST['attachment_id'] != - 1 ) {
$maybe_zip_file = get_attached_file( absint( $_POST['attachment_id'] ) );
$maybe_zip_url = wp_get_attachment_url( absint( $_POST['attachment_id'] ) );
try {
$new_font_pack = $handler->processZip( $maybe_zip_file, $maybe_zip_url );
$new_font_pack['attachment_id'] = absint( $_POST['attachment_id'] );
update_option( static::OPTION_NAME, $new_font_pack );
$this->messages['success'][] = __( "Font pack saved !", 'thrive-dash' );
} catch ( Exception $e ) {
$this->messages['error'][] = $e->getMessage();
}
} else {
try {
$font_pack = get_option( static::OPTION_NAME, array() );
if ( ! empty( $font_pack['attachment_id'] ) && is_file( $font_pack['zip_path'] ) ) {
$handler->deleteDir( $font_pack['folder'] );
delete_option( static::OPTION_NAME );
}
$this->messages['success'][] = __( "Font pack removed", 'thrive-dash' );
} catch ( Exception $e ) {
$this->messages['error'][] = $e;
}
}
}
public static function getInstance() {
if ( empty( static::$instance ) ) {
static::$instance = new Tve_Dash_Font_Import_Manager();
}
return static::$instance;
}
public static function getImportedFonts() {
$font_pack = get_option( static::OPTION_NAME, array() );
if ( empty( $font_pack ) ) {
return array();
}
$fonts = array();
foreach ( $font_pack['font_families'] as $name ) {
$fonts[] = array(
'family' => $name,
'variants' => array(
'regular',
),
'subsets' => array(
'latin'
)
);
}
return $fonts;
}
public static function getCssFile() {
$font_pack = get_option( static::OPTION_NAME, array() );
if ( empty( $font_pack ) ) {
return null;
}
$css_file = str_replace( array( 'http:', 'https:' ), '', $font_pack['css_file'] );
return $css_file;
}
/**
* @param $font string font-family
*
* @return bool
*/
public static function isImportedFont( $font ) {
$font_pack = get_option( static::OPTION_NAME, array() );
if ( empty( $font_pack ) ) {
return false;
}
return in_array( $font, $font_pack['font_families'] );
}
}
if ( ! class_exists( 'Thrive_Font_Import_Manager' ) ) {
class Thrive_Font_Import_Manager extends Tve_Dash_Font_Import_Manager {
}
}

View File

@@ -0,0 +1,145 @@
<?php
/**
* Thrive Themes - https://thrivethemes.com
*
* @package thrive-dashboard
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Silence is golden!
}
if ( class_exists( 'Tve_Dash_Font_Import_Manager_Data' ) ) {
return;
}
class Tve_Dash_Font_Import_Manager_Data {
protected $zip_contents = array(
'stylesheet.css'
);
public function processZip( $zip_file, $zip_url ) {
$clean_filename = $this->validateZip( $zip_file );
//Step 1: make sure the destination folder exists
$font_dir_path = dirname( $zip_file ) . '/' . $clean_filename;
//Step 1.1 prepare the filesystem
$extra = array(
'attachment_id',
);
$credentials = request_filesystem_credentials( admin_url( "admin.php?page=tve_dash_font_import_manager" ), '', false, false, $extra );
if ( ! $credentials ) {
//show FTP form
die;
}
if ( ! WP_Filesystem( $credentials ) ) {
throw new Exception( "Invalid credentials" );
}
$result = unzip_file( $zip_file, $font_dir_path );
if ( is_wp_error( $result ) ) {
throw new Exception( 'Error (unzip): ' . $result->get_error_message() );
}
//Step 3: process the zip
//check for selection.json file to be able to check the font family from within it
$this->checkExtractedFiles( $font_dir_path );
//Step 4: extract the font families from css file
$font_families = $this->extractFontFamilies( $font_dir_path . '/stylesheet.css' );
$data = array(
'folder' => $font_dir_path,
'css_file' => dirname( $zip_url ) . '/' . $clean_filename . '/stylesheet.css',
'font_families' => $font_families,
'zip_url' => $zip_url,
'zip_path' => $zip_file,
'filename' => basename( $zip_file )
);
return $data;
}
public function extractFontFamilies( $file ) {
if ( ! is_file( $file ) ) {
throw new Exception( $file . " cannot be found to apply changes on it !" );
}
$content = file_get_contents( $file );
$pattern = "/font-family: '(.*)'/";
preg_match_all( $pattern, $content, $matches );
if ( empty( $matches[1] ) ) {
throw new Exception( "No font family font" );
}
return $matches[1];
}
public function checkExtractedFiles( $dir, $specific_files = array() ) {
if ( empty( $dir ) ) {
throw new Exception( 'Empty folder' );
}
if ( ! is_array( $specific_files ) ) {
$specific_files = array( $specific_files );
}
$files_to_check = array_intersect( $this->zip_contents, $specific_files );
if ( empty( $files_to_check ) ) {
$files_to_check = $this->zip_contents;
}
foreach ( $files_to_check as $expected_file ) {
if ( ! is_file( $dir . '/' . $expected_file ) ) {
throw new Exception( 'Could not find the following file inside the archive: ' . $expected_file );
}
}
}
public function validateZip( $file ) {
if ( empty( $file ) || ! is_file( $file ) ) {
throw new Exception( 'Invalid or empty file' );
}
$info = wp_check_filetype( $file );
if ( strtolower( $info['ext'] ) !== 'zip' ) {
throw new Exception( 'The selected file is not a zip archive' );
}
return trim( str_replace( $info['ext'], '', basename( $file ) ), '/. ' );
}
public function deleteDir( $dirPath ) {
if ( ! is_dir( $dirPath ) ) {
throw new InvalidArgumentException( "$dirPath must be a directory" );
}
if ( substr( $dirPath, strlen( $dirPath ) - 1, 1 ) != '/' ) {
$dirPath .= '/';
}
$files = glob( $dirPath . '*', GLOB_MARK );
foreach ( $files as $file ) {
if ( is_dir( $file ) ) {
static::deleteDir( $file );
} else {
unlink( $file );
}
}
return rmdir( $dirPath );
}
}
if ( ! class_exists( 'Thrive_Font_Import_Manager' ) ) {
class Thrive_Font_Import_Manager extends Tve_Dash_Font_Import_Manager_Data {
}
}

View File

@@ -0,0 +1,61 @@
<?php
/**
* Thrive Themes - https://thrivethemes.com
*
* @package thrive-dashboard
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Silence is golden!
}
if ( class_exists( 'Tve_Dash_Font_Import_Manager_View' ) ) {
return;
}
class Tve_Dash_Font_Import_Manager_View {
protected $path;
protected $data = array();
public function __construct( $path ) {
$path = rtrim( $path, "/" );
$this->path = $path;
}
public function render( $file, $data = array() ) {
if ( strpos( $file, '.php' ) === false ) {
$file .= '.php';
}
if ( ! is_file( $this->path . '/' . $file ) ) {
echo sprintf( esc_html__( "No template found for %s", 'thrive-dash' ), esc_html( $file ) );
return;
}
if ( ! is_array( $data ) ) {
$data = array( 'data' => $data );
}
if ( ! empty( $data ) ) {
$this->data = array_merge_recursive( $this->data, $data );
}
include $this->path . "/" . $file;
}
public function __get( $key ) {
return isset( $this->data[ $key ] ) ? $this->data[ $key ] : null;
}
public function __set( $key, $value ) {
$this->data[ $key ] = $value;
}
}
if ( ! class_exists( 'Thrive_Font_Import_Manager_View' ) ) {
class Thrive_Font_Import_Manager_View extends Tve_Dash_Font_Import_Manager_View {
}
}