Plugin Directory

Changeset 3442806


Ignore:
Timestamp:
01/19/2026 09:23:10 PM (2 months ago)
Author:
integracionandreani
Message:

Update to version 1.4.5 - add product shipping calculator and improve cost configuration

Location:
andreani-shipping/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • andreani-shipping/trunk/andreani.php

    r3442801 r3442806  
    44 * Plugin URI: https://wordpress.org/plugins/andreani-shipping
    55 * Description: Plugin oficial de Andreani. Simplifica la gestión de tus envíos con Andreani.
    6  * Version: 1.4.5
     6 * Version: 1.4.6
     7 * Requires at least: 5.8
     8 * Requires PHP: 7.4
     9 * WC requires at least: 5.0
     10 * WC tested up to: 9.5
    711 * Author: Andreani
    812 * Author URI: https://www.andreani.com
    913 * License: GPLv2 or later
    1014 * License URI: http://www.gnu.org/licenses/gpl-2.0.html
     15 * Text Domain: andreani-shipping
     16 * Domain Path: /languages
     17 *
     18 * @package AndreaniPlugin
    1119 */
    1220
    1321defined( 'ABSPATH' ) || exit;
    1422
    15 define( 'ANDREANI_PLUGIN_FILE', __FILE__ );
    16 define( 'ANDREANI_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
    17 define( 'ANDREANI_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
    18 define( 'ANDREANI_PLUGIN_VERSION', '1.4.5' );
    19 define( 'ANDREANI_SHIPPING_METHOD_ID', 'andreani_flexipaas');
     23if ( ! defined( 'ANDREANI_PLUGIN_FILE' ) ) {
     24    define( 'ANDREANI_PLUGIN_FILE', __FILE__ );
     25}
     26
     27if ( ! defined( 'ANDREANI_PLUGIN_DIR' ) ) {
     28    define( 'ANDREANI_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
     29}
     30
     31if ( ! defined( 'ANDREANI_PLUGIN_URL' ) ) {
     32    define( 'ANDREANI_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
     33}
     34
     35if ( ! defined( 'ANDREANI_PLUGIN_VERSION' ) ) {
     36    define( 'ANDREANI_PLUGIN_VERSION', '1.4.5' );
     37}
     38
     39if ( ! defined( 'ANDREANI_SHIPPING_METHOD_ID' ) ) {
     40    define( 'ANDREANI_SHIPPING_METHOD_ID', 'andreani_flexipaas' );
     41}
     42
     43add_action( 'before_woocommerce_init', function() {
     44    if ( class_exists( '\Automattic\WooCommerce\Utilities\FeaturesUtil' ) ) {
     45        \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true );
     46        \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'orders_cache', __FILE__, true );
     47    }
     48} );
    2049
    2150require_once ANDREANI_PLUGIN_DIR . 'includes/andreani-plugin.php';
    2251
    23 add_action( 'plugins_loaded', [ Andreani_Plugin::class, 'get_instance' ] );
    24 register_activation_hook( __FILE__, [ Andreani_Plugin::class, 'activation_check' ] );
     52add_action( 'plugins_loaded', array( 'Andreani_Plugin', 'get_instance' ), 10 );
     53
     54register_activation_hook( __FILE__, array( 'Andreani_Plugin', 'activation_check' ) );
  • andreani-shipping/trunk/includes/andreani-plugin.php

    r3442801 r3442806  
    88class Andreani_Plugin {
    99    private static $instance = null;
    10     public $version = '1.4.5';
    1110
    1211    private function __construct() {
     
    2423
    2524    private function define_constants() {
    26         $constants = array(
    27             'ANDREANI_PLUGIN_VERSION' => $this->version,
    28             'ANDREANI_PLUGIN_FILE'    => ANDREANI_PLUGIN_DIR . 'andreani-plugin.php',
    29             'ANDREANI_PLUGIN_URL'     => plugin_dir_url( ANDREANI_PLUGIN_FILE ),
    30         );
    31 
    32         foreach ( $constants as $name => $value ) {
    33             defined( $name ) || define( $name, $value );
    34         }
    3525    }
    3626
     
    3929            'includes/utils/andreani-utils.php',
    4030            'includes/class-andreani-upgrader.php',
     31            'includes/services/andreani-settings-service.php',
     32            'includes/services/andreani-cache-service.php',
    4133            'includes/api/andreani-api-manager.php',
    4234            'includes/checkout/andreani-checkout.php',
     
    4941            if ( file_exists( $file_path ) ) {
    5042                require_once $file_path;
     43            } else {
     44                error_log( sprintf( 'Andreani Plugin: No se pudo cargar el archivo %s', $file ) );
    5145            }
    5246        }
     
    6559                if ( file_exists( $file_path ) ) {
    6660                    require_once $file_path;
     61                } else {
     62                    error_log( sprintf( 'Andreani Plugin: No se pudo cargar el archivo de admin %s', $file ) );
    6763                }
    6864            }
     
    107103
    108104        if ( $is_frontend || $is_ajax ) {
    109             Andreani_Checkout::get_instance();
     105            if ( class_exists( 'Andreani_Checkout' ) ) {
     106                Andreani_Checkout::get_instance();
     107            }
    110108        }
    111109
    112110        if ( $is_frontend ) {
    113             Andreani_Order::get_instance();
     111            if ( class_exists( 'Andreani_Order' ) ) {
     112                Andreani_Order::get_instance();
     113            }
    114114        }
    115115
    116116        if ( $is_frontend || $is_ajax ) {
    117             if ( 'yes' === Andreani_Settings_Service::get( 'cotizador_producto', 'no' ) ) {
    118                 Andreani_Cotizador_Widget::get_instance();
     117            if ( class_exists( 'Andreani_Settings_Service' ) && class_exists( 'Andreani_Cotizador_Widget' ) ) {
     118                if ( 'yes' === Andreani_Settings_Service::get( 'cotizador_producto', 'no' ) ) {
     119                    Andreani_Cotizador_Widget::get_instance();
     120                }
    119121            }
    120122        }
     
    126128        }
    127129
    128         Andreani_Admin_Menu::get_instance();
    129         Andreani_Order_Metabox::get_instance();
    130         Andreani_Ajax_Handler::get_instance();
    131         Andreani_Admin_Assets::get_instance();
     130        if ( class_exists( 'Andreani_Admin_Menu' ) ) {
     131            Andreani_Admin_Menu::get_instance();
     132        }
     133
     134        if ( class_exists( 'Andreani_Order_Metabox' ) ) {
     135            Andreani_Order_Metabox::get_instance();
     136        }
     137
     138        if ( class_exists( 'Andreani_Ajax_Handler' ) ) {
     139            Andreani_Ajax_Handler::get_instance();
     140        }
     141
     142        if ( class_exists( 'Andreani_Admin_Assets' ) ) {
     143            Andreani_Admin_Assets::get_instance();
     144        }
    132145    }
    133146
    134147    private static function is_woocommerce_active() {
    135         return in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) );
     148        return class_exists( 'WooCommerce' );
    136149    }
    137150
     
    203216
    204217        if ( ! current_user_can( 'manage_woocommerce' ) ) {
    205             wp_send_json_error( array( 'message' => __( 'No tienes permisos para realizar esta acción.', 'andreani-shipping' ) ) );
     218            wp_send_json_error(
     219                array( 'message' => __( 'No tienes permisos para realizar esta acción.', 'andreani-shipping' ) ),
     220                403
     221            );
    206222        }
    207223
     
    210226
    211227        if ( empty( $hash_andreani ) || 'corporativo' !== $tipo_cliente ) {
    212             wp_send_json_error( array( 'message' => __( 'Configuración no válida para refrescar contratos.', 'andreani-shipping' ) ) );
     228            wp_send_json_error(
     229                array( 'message' => __( 'Configuración no válida para refrescar contratos.', 'andreani-shipping' ) ),
     230                400
     231            );
    213232        }
    214233
     
    220239
    221240        if ( ! $result ) {
    222             wp_send_json_error( array( 'message' => __( 'Error al conectar con Andreani. Verifica tu credencial.', 'andreani-shipping' ) ) );
     241            wp_send_json_error(
     242                array( 'message' => __( 'Error al conectar con Andreani. Verifica tu credencial.', 'andreani-shipping' ) ),
     243                502
     244            );
    223245        }
    224246
  • andreani-shipping/trunk/includes/api/common/andreani-api-config.php

    r3438834 r3442806  
    1010class Andreani_Api_Config {
    1111    private static $api_base_url = 'https://woocommerce-api-acom.andreani.com';
    12     // private static $api_base_url = 'http://host.docker.internal:5000';
    1312
    1413    public static function get_api_base_url() {
  • andreani-shipping/trunk/includes/assets/js/checkout.js

    r3441239 r3442806  
    264264    },
    265265
    266     setupPostcodeValidation() {
    267       // No modificamos los campos de CP globales para evitar conflictos con otros plugins
    268       // La validación de formato se hace en el backend (validate_postcode)
    269     },
     266    setupPostcodeValidation() {},
    270267  };
    271268
  • andreani-shipping/trunk/includes/class-andreani-upgrader.php

    r3442801 r3442806  
    22/**
    33 * Andreani Upgrader
     4 *
     5 * Maneja las migraciones y actualizaciones de la base de datos del plugin.
    46 *
    57 * @package AndreaniPlugin
     
    1012class Andreani_Upgrader {
    1113
     14    /**
     15     * Opción de base de datos que almacena la versión actual del esquema.
     16     */
    1217    const DB_VERSION_OPTION = 'andreani_db_version';
    1318
     19    /**
     20     * Registro de versiones y sus métodos de actualización correspondientes.
     21     *
     22     * @var array
     23     */
    1424    private static $upgrades = array(
    1525        '1.4.0' => 'upgrade_1_4_0',
     
    1727    );
    1828
     29    /**
     30     * Ejecuta las migraciones pendientes si es necesario.
     31     *
     32     * Compara la versión almacenada en la base de datos con la versión actual
     33     * del plugin y ejecuta las actualizaciones necesarias.
     34     *
     35     * @return void
     36     */
    1937    public static function maybe_upgrade() {
    2038        $db_version = get_option( self::DB_VERSION_OPTION, '0' );
     
    2543
    2644        self::run_pending_upgrades( $db_version );
    27         update_option( self::DB_VERSION_OPTION, ANDREANI_PLUGIN_VERSION );
     45        update_option( self::DB_VERSION_OPTION, ANDREANI_PLUGIN_VERSION, false );
    2846    }
    2947
     48    /**
     49     * Ejecuta las actualizaciones pendientes basándose en la versión actual.
     50     *
     51     * @param string $from_version Versión desde la cual actualizar.
     52     * @return void
     53     */
    3054    private static function run_pending_upgrades( $from_version ) {
    31         if ( $from_version === '0' ) {
     55        if ( '0' === $from_version ) {
    3256            return;
    3357        }
     
    3660            if ( version_compare( $from_version, $version, '<' ) && method_exists( __CLASS__, $method ) ) {
    3761                Andreani_Utils::andreani_log( "[UPGRADE] Ejecutando migración a v{$version}", 'info' );
    38                 call_user_func( array( __CLASS__, $method ) );
     62               
     63                try {
     64                    call_user_func( array( __CLASS__, $method ) );
     65                    Andreani_Utils::andreani_log( "[UPGRADE] Migración a v{$version} completada", 'info' );
     66                } catch ( Exception $e ) {
     67                    Andreani_Utils::andreani_log( "[UPGRADE] Error en migración a v{$version}: " . $e->getMessage(), 'error' );
     68                }
    3969            }
    4070        }
    4171    }
    4272
     73    /**
     74     * Migración a versión 1.4.0
     75     *
     76     * Limpia el cache legacy de información Pyme.
     77     *
     78     * @return void
     79     */
    4380    private static function upgrade_1_4_0() {
    4481        delete_option( 'andreani_pyme_info' );
     
    4683    }
    4784
     85    /**
     86     * Migración a versión 1.4.5
     87     *
     88     * Migra el campo 'costo_adicional_enabled' en configuración de modos de envío.
     89     * Añade el campo si no existe, basándose en si hay un costo adicional configurado.
     90     *
     91     * @return void
     92     */
    4893    private static function upgrade_1_4_5() {
    4994        global $wpdb;
     
    90135                }
    91136            }
     137            unset( $modo_config );
    92138
    93139            if ( $changed ) {
    94140                $settings['config_por_modo'] = wp_json_encode( $config_por_modo );
    95                 update_option( $row->option_name, $settings );
     141                update_option( $row->option_name, $settings, false );
    96142                $migrated_count++;
    97143            }
Note: See TracChangeset for help on using the changeset viewer.