Plugin Directory

Changeset 3423707


Ignore:
Timestamp:
12/19/2025 01:31:43 PM (2 months ago)
Author:
themeisle
Message:

Update to version 33.0.18 from GitHub

Location:
woocommerce-product-addon
Files:
24 edited
1 copied

Legend:

Unmodified
Added
Removed
  • woocommerce-product-addon/tags/33.0.18/CHANGELOG.md

    r3394835 r3423707  
     1##### [Version 33.0.18](https://github.com/Codeinwp/woocommerce-product-addon/compare/v33.0.17...v33.0.18) (2025-12-19)
     2
     3- Fixed image upload in image dropdown field
     4- Enhanced security
     5
    16##### [Version 33.0.17](https://github.com/Codeinwp/woocommerce-product-addon/compare/v33.0.16...v33.0.17) (2025-11-13)
    27
  • woocommerce-product-addon/tags/33.0.18/inc/admin.php

    r3394835 r3423707  
    292292    global $wpdb;
    293293
    294     extract( $_REQUEST );
    295 
    296294    $send_file_attachment = 'NA';
    297295    $aviary_api_key       = 'NA';
    298296    $show_cart_thumb      = 'NA';
    299297
     298    $ppom           = array();
     299    $productmeta_id = isset( $_REQUEST['productmeta_id'] ) ? sanitize_text_field( $_REQUEST['productmeta_id'] ) : '';
     300
    300301    if ( is_string( $_REQUEST['ppom'] ) ) {
    301302        $ppom_encoded = $_REQUEST['ppom'];
    302303        parse_str( $ppom_encoded, $ppom_decoded);
    303         $_REQUEST['ppom'] = $ppom_decoded['ppom'];
    304     }
    305 
    306     $ppom_meta    = ( isset($_REQUEST['ppom_meta']) ? $_REQUEST['ppom_meta'] : isset($_REQUEST['ppom']) ) ? $_REQUEST['ppom'] : '';
     304        $ppom = $ppom_decoded['ppom'];
     305    }
     306
     307    $ppom_meta    = isset($_REQUEST['ppom_meta']) ? $_REQUEST['ppom_meta'] : $ppom;
    307308
    308309    if ( empty( $ppom_meta ) ) {
     
    332333    $productmeta_style      = isset( $_REQUEST['productmeta_style'] ) ? sanitize_text_field( $_REQUEST['productmeta_style'] ) : '';
    333334    $productmeta_js         = isset( $_REQUEST['productmeta_js'] ) ? sanitize_text_field( $_REQUEST['productmeta_js'] ) : '';
     335    $product_id             = isset( $_REQUEST['product_id'] ) ? intval( $_REQUEST['product_id'] ) : 0;
    334336
    335337    if ( strlen( $productmeta_name ) > 50 ) {
     
    407409
    408410
    409     if ( isset( $_REQUEST['product_id'] ) && $_REQUEST['product_id'] != '' ) {
    410         ppom_attach_fields_to_product( $ppom_id, intval( $_REQUEST['product_id'] ) );
     411    if ( ! empty( $product_id ) ) {
     412        ppom_attach_fields_to_product( $ppom_id, $product_id );
    411413        $redirect_to = get_permalink( $product_id );
    412414    }
     
    439441
    440442
    441     $return_page = isset( $_REQUEST['ppom_meta'] ) ? 'ppom-energy' : 'ppom';
    442     extract( $_REQUEST );
     443    $return_page    = isset( $_REQUEST['ppom_meta'] ) ? 'ppom-energy' : 'ppom';
     444    $productmeta_id = isset( $_REQUEST['productmeta_id'] ) ? sanitize_text_field( $_REQUEST['productmeta_id'] ) : '';
    443445
    444446    $ppom_args   = array(
     
    641643    global $wpdb;
    642644
    643     extract( $_REQUEST );
     645    $productmeta_id = isset( $_REQUEST['productmeta_id'] ) ? sanitize_text_field( $_REQUEST['productmeta_id'] ) : '';
    644646
    645647    $tbl_name = $wpdb->prefix . PPOM_TABLE_META;
  • woocommerce-product-addon/tags/33.0.18/js/admin/ppom-admin.js

    r3394835 r3423707  
    760760                    var stock_metatype = 'stock';
    761761                    var stock_placeholder = ppom_vars.i18n.stock;
     762                    let url_field = '<input placeholder="url" type="text" name="ppom[' + field_index + '][' + meta_type + '][' + option_index + '][url]" class="form-control" data-opt-index="' + option_index + '" data-metatype="url" value="">';
    762763
    763764                    // Set name key for imageselect addon
     
    780781                        price_placeholder = ppom_vars.i18n.metaIds;
    781782                        price_metatype = 'meta_id';
     783                        url_field = '<input placeholder="url" type="text" name="ppom[' + field_index + '][' + meta_type + '][' + option_index + '][url]" class="form-control" data-opt-index="' + option_index + '" data-metatype="url" value="">';
    782784                    }
    783785                    else {
     
    785787                        var condidtion_attr = '';
    786788                    }
    787 
    788                     let url_field = '<input placeholder="url" type="text" name="ppom[' + field_index + '][' + meta_type + '][' + option_index + '][url]" class="form-control" data-opt-index="' + option_index + '" data-metatype="url" value="">';
    789789
    790790                    if (meta.type !== 'image') {
  • woocommerce-product-addon/tags/33.0.18/languages/woocommerce-product-addon.pot

    r3394835 r3423707  
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2025-11-13T08:27:13+00:00\n"
     12"POT-Creation-Date: 2025-12-19T13:31:16+00:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.12.0\n"
     
    889889#: backend/settings-panel.class.php:311
    890890#: classes/admin.class.php:583
    891 #: inc/admin.php:635
     891#: inc/admin.php:637
    892892msgid "Sorry, you are not allowed to perform this action please try again"
    893893msgstr ""
     
    10441044
    10451045#: classes/admin.class.php:267
    1046 #: inc/admin.php:677
     1046#: inc/admin.php:679
    10471047msgid "Sorry, you are not allowed to perform this action"
    10481048msgstr ""
     
    36963696
    36973697#: inc/admin.php:271
    3698 #: inc/admin.php:455
     3698#: inc/admin.php:457
    36993699msgid "Since version 22.0, Database has some changes. Please Deactivate & then activate the PPOM plugin."
    37003700msgstr ""
    37013701
    37023702#: inc/admin.php:285
    3703 #: inc/admin.php:470
     3703#: inc/admin.php:472
    37043704msgid "Sorry, you are not allowed to perform this action."
    37053705msgstr ""
    37063706
    3707 #: inc/admin.php:310
     3707#: inc/admin.php:311
    37083708msgid "No fields found."
    37093709msgstr ""
    37103710
    3711 #: inc/admin.php:337
    3712 #: inc/admin.php:506
     3711#: inc/admin.php:339
     3712#: inc/admin.php:508
    37133713msgid "PPOM title is too long to save, please make it less than 50 characters."
    37143714msgstr ""
    37153715
    3716 #: inc/admin.php:418
     3716#: inc/admin.php:420
    37173717msgid "Form added successfully"
    37183718msgstr ""
    37193719
    3720 #: inc/admin.php:426
     3720#: inc/admin.php:428
    37213721#: inc/rest.class.php:395
    37223722msgid "No changes found."
    37233723msgstr ""
    37243724
    3725 #: inc/admin.php:568
     3725#: inc/admin.php:570
    37263726msgid "Form updated successfully"
    37273727msgstr ""
    37283728
    3729 #: inc/admin.php:576
     3729#: inc/admin.php:578
    37303730msgid "Form updated successfully."
    37313731msgstr ""
    37323732
    3733 #: inc/admin.php:654
    3734 #: inc/admin.php:705
     3733#: inc/admin.php:656
     3734#: inc/admin.php:707
    37353735msgid "Meta deleted successfully"
    37363736msgstr ""
    37373737
    3738 #: inc/admin.php:659
     3738#: inc/admin.php:661
    37393739msgid "Error while deleting the PPOM, try again."
    37403740msgstr ""
    37413741
    37423742#. translators: %1$s - HTML tag, %2$s - discount, %3$s - HTML tag, %4$s - product name.
    3743 #: inc/admin.php:837
     3743#: inc/admin.php:839
    37443744#, php-format
    37453745msgid "Our biggest sale of the year: %1$sup to %2$s OFF%3$s on %4$s. Don't miss this limited-time offer."
     
    37473747
    37483748#. translators: %1$s - HTML tag, %2$s - discount, %3$s - HTML tag, %4$s - product name.
    3749 #: inc/admin.php:847
     3749#: inc/admin.php:849
    37503750#, php-format
    37513751msgid "Get %1$sup to %2$s off%3$s when you upgrade your %4$s plan or renew early."
  • woocommerce-product-addon/tags/33.0.18/readme.txt

    r3423705 r3423707  
    44Requires at least: 3.5
    55Tested up to: 6.9
    6 Stable tag: 33.0.17
     6Stable tag: 33.0.18
    77License: GPLv2
    88License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    252252== Changelog ==
    253253
    254 ##### [Version 33.0.17](https://github.com/Codeinwp/woocommerce-product-addon/compare/v33.0.16...v33.0.17) (2025-11-13)
    255 
     254##### [Version 33.0.18](https://github.com/Codeinwp/woocommerce-product-addon/compare/v33.0.17...v33.0.18) (2025-12-19)
     255
     256- Fixed image upload in image dropdown field
    256257- Enhanced security
    257 - Fixed load of JS script dependencies for latest WooCommerce version
    258 - Fixed issue with FixedPrice field giving a fatal error when string is used in quantity field
    259 - Fixed color option overlapping
    260258
    261259
  • woocommerce-product-addon/tags/33.0.18/vendor/codeinwp/themeisle-sdk/CHANGELOG.md

    r3379431 r3423707  
     1##### [Version 3.3.50](https://github.com/Codeinwp/themeisle-sdk-main/compare/v3.3.49...v3.3.50) (2025-11-25)
     2
     3> Things are getting better every day. 🚀
     4
    15##### [Version 3.3.49](https://github.com/Codeinwp/themeisle-sdk-main/compare/v3.3.48...v3.3.49) (2025-09-18)
    26
  • woocommerce-product-addon/tags/33.0.18/vendor/codeinwp/themeisle-sdk/load.php

    r3379431 r3423707  
    1515}
    1616// Current SDK version and path.
    17 $themeisle_sdk_version = '3.3.49';
     17$themeisle_sdk_version = '3.3.50';
    1818$themeisle_sdk_path    = dirname( __FILE__ );
    1919
  • woocommerce-product-addon/tags/33.0.18/vendor/codeinwp/themeisle-sdk/src/Loader.php

    r3379431 r3423707  
    332332     */
    333333    public static function init() {
    334         /**
    335          * This filter can be used to localize the labels inside each product.
    336          */
    337         self::$labels = apply_filters( 'themeisle_sdk_labels', self::$labels );
     334        self::localize_labels();
    338335        if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Loader ) ) {
    339336            self::$instance = new Loader();
     
    347344
    348345            add_action( 'themeisle_sdk_first_activation', array( __CLASS__, 'activate' ) );
    349         }
     346       
     347        }
     348    }
     349   
     350    /**
     351     * Localize the labels.
     352     */
     353    public static function localize_labels() {
     354        $originals        = self::$labels;
     355        $all_translations = [];
     356
     357        global $wp_filter;
     358        if ( isset( $wp_filter['themeisle_sdk_labels'] ) ) {
     359            foreach ( $wp_filter['themeisle_sdk_labels']->callbacks as $priority => $hooks ) {
     360                foreach ( $hooks as $hook ) {
     361                    // Each callback gets fresh originals, not previous callback's output
     362                    $result             = call_user_func( $hook['function'], $originals );
     363                    $all_translations[] = $result;
     364                }
     365            }
     366           
     367            // Remove the filter so it doesn't run again via apply_filters
     368            remove_all_filters( 'themeisle_sdk_labels' );
     369        }
     370
     371        // Merge all results, first real translation wins
     372        self::$labels = self::merge_all_translations( $originals, $all_translations );
     373    }
     374    /**
     375     * Merge all translations.
     376     *
     377     * @param array $originals The original labels.
     378     * @param array $all_translations The all translations.
     379     *
     380     * @return array The merged labels.
     381     */
     382    private static function merge_all_translations( $originals, $all_translations ) {
     383        $result = $originals;
     384       
     385        foreach ( $all_translations as $translations ) {
     386            $result = self::merge_if_translated( $result, $translations, $originals );
     387        }
     388       
     389        return $result;
     390    }
     391    /**
     392     * Merge if translated.
     393     *
     394     * @param array $current The current labels.
     395     * @param array $new The new labels.
     396     * @param array $originals The original labels.
     397     * @return array The merged labels.
     398     */
     399    private static function merge_if_translated( $current, $new, $originals ) {
     400        foreach ( $new as $key => $value ) {
     401            if ( ! isset( $originals[ $key ] ) ) {
     402                // New key, accept it
     403                if ( ! isset( $current[ $key ] ) ) {
     404                    $current[ $key ] = $value;
     405                }
     406                continue;
     407            }
     408           
     409            if ( is_array( $value ) && is_array( $originals[ $key ] ) ) {
     410                $current[ $key ] = self::merge_if_translated(
     411                    $current[ $key ],
     412                    $value,
     413                    $originals[ $key ]
     414                );
     415            } else {
     416                // Only accept if:
     417                // 1. New value is actually translated (differs from original)
     418                // 2. Current value is NOT already translated
     419                $is_new_translated       = ( $value !== $originals[ $key ] );
     420                $is_current_untranslated = ( $current[ $key ] === $originals[ $key ] );
     421               
     422                if ( $is_new_translated && $is_current_untranslated ) {
     423                    $current[ $key ] = $value;
     424                }
     425            }
     426        }
     427       
     428        return $current;
    350429    }
    351430
  • woocommerce-product-addon/tags/33.0.18/vendor/codeinwp/themeisle-sdk/src/Modules/Announcements.php

    r3301441 r3423707  
    246246        }
    247247
     248        $logo_url           = ! empty( $data['logo_url'] ) ? $data['logo_url'] : $this->get_sdk_uri() . 'assets/images/themeisle-logo.png';
     249        $cta_label          = ! empty( $data['cta_label'] ) ? $data['cta_label'] : Loader::$labels['announcements']['notice_link_label'];
    248250        $sale_url           = ! empty( $data['sale_url'] ) ? $data['sale_url'] : '';
    249251        $hide_other_notices = ! empty( $data['hide_other_notices'] ) ? $data['hide_other_notices'] : ! $can_dismiss;
     
    341343                    <img
    342344                        width="45"
    343                         src="<?php echo esc_url( $this->get_sdk_uri() . 'assets/images/themeisle-logo.png' ); ?>"
     345                        src="<?php echo esc_url( $logo_url ); ?>"
    344346                    />
    345347                </div>
     
    361363                        class="button button-primary themeisle-sale-button"
    362364                    >
    363                     <?php echo esc_html( Loader::$labels['announcements']['notice_link_label'] ); ?>
     365                    <?php echo esc_html( $cta_label ); ?>
    364366                    </a>
    365367                </div>
  • woocommerce-product-addon/tags/33.0.18/vendor/composer/installed.json

    r3379431 r3423707  
    33        {
    44            "name": "codeinwp/themeisle-sdk",
    5             "version": "3.3.49",
    6             "version_normalized": "3.3.49.0",
     5            "version": "3.3.50",
     6            "version_normalized": "3.3.50.0",
    77            "source": {
    88                "type": "git",
    99                "url": "https://github.com/Codeinwp/themeisle-sdk.git",
    10                 "reference": "605f78bbbd8526f7597a89077791043d9ecc8c20"
     10                "reference": "3c1f8dfc2390e667bbc086c5d660900a7985efa6"
    1111            },
    1212            "dist": {
    1313                "type": "zip",
    14                 "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/605f78bbbd8526f7597a89077791043d9ecc8c20",
    15                 "reference": "605f78bbbd8526f7597a89077791043d9ecc8c20",
     14                "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/3c1f8dfc2390e667bbc086c5d660900a7985efa6",
     15                "reference": "3c1f8dfc2390e667bbc086c5d660900a7985efa6",
    1616                "shasum": ""
    1717            },
     
    2020                "yoast/phpunit-polyfills": "^2.0"
    2121            },
    22             "time": "2025-09-18T13:41:05+00:00",
     22            "time": "2025-11-25T19:36:35+00:00",
    2323            "type": "library",
    2424            "installation-source": "dist",
     
    4141            "support": {
    4242                "issues": "https://github.com/Codeinwp/themeisle-sdk/issues",
    43                 "source": "https://github.com/Codeinwp/themeisle-sdk/tree/v3.3.49"
     43                "source": "https://github.com/Codeinwp/themeisle-sdk/tree/v3.3.50"
    4444            },
    4545            "install-path": "../codeinwp/themeisle-sdk"
  • woocommerce-product-addon/tags/33.0.18/vendor/composer/installed.php

    r3394835 r3423707  
    22    'root' => array(
    33        'name' => 'codeinwp/woocommerce-product-addon',
    4         'pretty_version' => 'v33.0.17',
    5         'version' => '33.0.17.0',
    6         'reference' => '8dcdb5105f6d3b89a28fa119d065d7182ead8ca3',
     4        'pretty_version' => 'v33.0.18',
     5        'version' => '33.0.18.0',
     6        'reference' => '886709ac767b570a61a631a9a8b05d42a8411cf6',
    77        'type' => 'project',
    88        'install_path' => __DIR__ . '/../../',
     
    1212    'versions' => array(
    1313        'codeinwp/themeisle-sdk' => array(
    14             'pretty_version' => '3.3.49',
    15             'version' => '3.3.49.0',
    16             'reference' => '605f78bbbd8526f7597a89077791043d9ecc8c20',
     14            'pretty_version' => '3.3.50',
     15            'version' => '3.3.50.0',
     16            'reference' => '3c1f8dfc2390e667bbc086c5d660900a7985efa6',
    1717            'type' => 'library',
    1818            'install_path' => __DIR__ . '/../codeinwp/themeisle-sdk',
     
    2121        ),
    2222        'codeinwp/woocommerce-product-addon' => array(
    23             'pretty_version' => 'v33.0.17',
    24             'version' => '33.0.17.0',
    25             'reference' => '8dcdb5105f6d3b89a28fa119d065d7182ead8ca3',
     23            'pretty_version' => 'v33.0.18',
     24            'version' => '33.0.18.0',
     25            'reference' => '886709ac767b570a61a631a9a8b05d42a8411cf6',
    2626            'type' => 'project',
    2727            'install_path' => __DIR__ . '/../../',
  • woocommerce-product-addon/tags/33.0.18/woocommerce-product-addon.php

    r3394835 r3423707  
    44 * Plugin URI: https://themeisle.com/plugins/ppom-pro/
    55 * Description: PPOM (Personalized Product Meta Manager) plugin allow WooCommerce Store Admin to create unlimited input fields and files to attach with Product Pages.
    6  * Version: 33.0.17
     6 * Version: 33.0.18
    77 * Author: Themeisle
    88 * Text Domain: woocommerce-product-addon
     
    2929define( 'PPOM_BASENAME', basename( PPOM_WP_PLUGIN_DIR ) );
    3030define( 'PPOM_PRODUCT_SLUG', PPOM_BASENAME );
    31 define( 'PPOM_VERSION', '33.0.17' );
     31define( 'PPOM_VERSION', '33.0.18' );
    3232define( 'PPOM_DB_VERSION', '32.0.0' );
    3333define( 'PPOM_PRODUCT_META_KEY', '_product_meta_id' );
  • woocommerce-product-addon/trunk/CHANGELOG.md

    r3394835 r3423707  
     1##### [Version 33.0.18](https://github.com/Codeinwp/woocommerce-product-addon/compare/v33.0.17...v33.0.18) (2025-12-19)
     2
     3- Fixed image upload in image dropdown field
     4- Enhanced security
     5
    16##### [Version 33.0.17](https://github.com/Codeinwp/woocommerce-product-addon/compare/v33.0.16...v33.0.17) (2025-11-13)
    27
  • woocommerce-product-addon/trunk/inc/admin.php

    r3394835 r3423707  
    292292    global $wpdb;
    293293
    294     extract( $_REQUEST );
    295 
    296294    $send_file_attachment = 'NA';
    297295    $aviary_api_key       = 'NA';
    298296    $show_cart_thumb      = 'NA';
    299297
     298    $ppom           = array();
     299    $productmeta_id = isset( $_REQUEST['productmeta_id'] ) ? sanitize_text_field( $_REQUEST['productmeta_id'] ) : '';
     300
    300301    if ( is_string( $_REQUEST['ppom'] ) ) {
    301302        $ppom_encoded = $_REQUEST['ppom'];
    302303        parse_str( $ppom_encoded, $ppom_decoded);
    303         $_REQUEST['ppom'] = $ppom_decoded['ppom'];
    304     }
    305 
    306     $ppom_meta    = ( isset($_REQUEST['ppom_meta']) ? $_REQUEST['ppom_meta'] : isset($_REQUEST['ppom']) ) ? $_REQUEST['ppom'] : '';
     304        $ppom = $ppom_decoded['ppom'];
     305    }
     306
     307    $ppom_meta    = isset($_REQUEST['ppom_meta']) ? $_REQUEST['ppom_meta'] : $ppom;
    307308
    308309    if ( empty( $ppom_meta ) ) {
     
    332333    $productmeta_style      = isset( $_REQUEST['productmeta_style'] ) ? sanitize_text_field( $_REQUEST['productmeta_style'] ) : '';
    333334    $productmeta_js         = isset( $_REQUEST['productmeta_js'] ) ? sanitize_text_field( $_REQUEST['productmeta_js'] ) : '';
     335    $product_id             = isset( $_REQUEST['product_id'] ) ? intval( $_REQUEST['product_id'] ) : 0;
    334336
    335337    if ( strlen( $productmeta_name ) > 50 ) {
     
    407409
    408410
    409     if ( isset( $_REQUEST['product_id'] ) && $_REQUEST['product_id'] != '' ) {
    410         ppom_attach_fields_to_product( $ppom_id, intval( $_REQUEST['product_id'] ) );
     411    if ( ! empty( $product_id ) ) {
     412        ppom_attach_fields_to_product( $ppom_id, $product_id );
    411413        $redirect_to = get_permalink( $product_id );
    412414    }
     
    439441
    440442
    441     $return_page = isset( $_REQUEST['ppom_meta'] ) ? 'ppom-energy' : 'ppom';
    442     extract( $_REQUEST );
     443    $return_page    = isset( $_REQUEST['ppom_meta'] ) ? 'ppom-energy' : 'ppom';
     444    $productmeta_id = isset( $_REQUEST['productmeta_id'] ) ? sanitize_text_field( $_REQUEST['productmeta_id'] ) : '';
    443445
    444446    $ppom_args   = array(
     
    641643    global $wpdb;
    642644
    643     extract( $_REQUEST );
     645    $productmeta_id = isset( $_REQUEST['productmeta_id'] ) ? sanitize_text_field( $_REQUEST['productmeta_id'] ) : '';
    644646
    645647    $tbl_name = $wpdb->prefix . PPOM_TABLE_META;
  • woocommerce-product-addon/trunk/js/admin/ppom-admin.js

    r3394835 r3423707  
    760760                    var stock_metatype = 'stock';
    761761                    var stock_placeholder = ppom_vars.i18n.stock;
     762                    let url_field = '<input placeholder="url" type="text" name="ppom[' + field_index + '][' + meta_type + '][' + option_index + '][url]" class="form-control" data-opt-index="' + option_index + '" data-metatype="url" value="">';
    762763
    763764                    // Set name key for imageselect addon
     
    780781                        price_placeholder = ppom_vars.i18n.metaIds;
    781782                        price_metatype = 'meta_id';
     783                        url_field = '<input placeholder="url" type="text" name="ppom[' + field_index + '][' + meta_type + '][' + option_index + '][url]" class="form-control" data-opt-index="' + option_index + '" data-metatype="url" value="">';
    782784                    }
    783785                    else {
     
    785787                        var condidtion_attr = '';
    786788                    }
    787 
    788                     let url_field = '<input placeholder="url" type="text" name="ppom[' + field_index + '][' + meta_type + '][' + option_index + '][url]" class="form-control" data-opt-index="' + option_index + '" data-metatype="url" value="">';
    789789
    790790                    if (meta.type !== 'image') {
  • woocommerce-product-addon/trunk/languages/woocommerce-product-addon.pot

    r3394835 r3423707  
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2025-11-13T08:27:13+00:00\n"
     12"POT-Creation-Date: 2025-12-19T13:31:16+00:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.12.0\n"
     
    889889#: backend/settings-panel.class.php:311
    890890#: classes/admin.class.php:583
    891 #: inc/admin.php:635
     891#: inc/admin.php:637
    892892msgid "Sorry, you are not allowed to perform this action please try again"
    893893msgstr ""
     
    10441044
    10451045#: classes/admin.class.php:267
    1046 #: inc/admin.php:677
     1046#: inc/admin.php:679
    10471047msgid "Sorry, you are not allowed to perform this action"
    10481048msgstr ""
     
    36963696
    36973697#: inc/admin.php:271
    3698 #: inc/admin.php:455
     3698#: inc/admin.php:457
    36993699msgid "Since version 22.0, Database has some changes. Please Deactivate & then activate the PPOM plugin."
    37003700msgstr ""
    37013701
    37023702#: inc/admin.php:285
    3703 #: inc/admin.php:470
     3703#: inc/admin.php:472
    37043704msgid "Sorry, you are not allowed to perform this action."
    37053705msgstr ""
    37063706
    3707 #: inc/admin.php:310
     3707#: inc/admin.php:311
    37083708msgid "No fields found."
    37093709msgstr ""
    37103710
    3711 #: inc/admin.php:337
    3712 #: inc/admin.php:506
     3711#: inc/admin.php:339
     3712#: inc/admin.php:508
    37133713msgid "PPOM title is too long to save, please make it less than 50 characters."
    37143714msgstr ""
    37153715
    3716 #: inc/admin.php:418
     3716#: inc/admin.php:420
    37173717msgid "Form added successfully"
    37183718msgstr ""
    37193719
    3720 #: inc/admin.php:426
     3720#: inc/admin.php:428
    37213721#: inc/rest.class.php:395
    37223722msgid "No changes found."
    37233723msgstr ""
    37243724
    3725 #: inc/admin.php:568
     3725#: inc/admin.php:570
    37263726msgid "Form updated successfully"
    37273727msgstr ""
    37283728
    3729 #: inc/admin.php:576
     3729#: inc/admin.php:578
    37303730msgid "Form updated successfully."
    37313731msgstr ""
    37323732
    3733 #: inc/admin.php:654
    3734 #: inc/admin.php:705
     3733#: inc/admin.php:656
     3734#: inc/admin.php:707
    37353735msgid "Meta deleted successfully"
    37363736msgstr ""
    37373737
    3738 #: inc/admin.php:659
     3738#: inc/admin.php:661
    37393739msgid "Error while deleting the PPOM, try again."
    37403740msgstr ""
    37413741
    37423742#. translators: %1$s - HTML tag, %2$s - discount, %3$s - HTML tag, %4$s - product name.
    3743 #: inc/admin.php:837
     3743#: inc/admin.php:839
    37443744#, php-format
    37453745msgid "Our biggest sale of the year: %1$sup to %2$s OFF%3$s on %4$s. Don't miss this limited-time offer."
     
    37473747
    37483748#. translators: %1$s - HTML tag, %2$s - discount, %3$s - HTML tag, %4$s - product name.
    3749 #: inc/admin.php:847
     3749#: inc/admin.php:849
    37503750#, php-format
    37513751msgid "Get %1$sup to %2$s off%3$s when you upgrade your %4$s plan or renew early."
  • woocommerce-product-addon/trunk/readme.txt

    r3423705 r3423707  
    44Requires at least: 3.5
    55Tested up to: 6.9
    6 Stable tag: 33.0.17
     6Stable tag: 33.0.18
    77License: GPLv2
    88License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    252252== Changelog ==
    253253
    254 ##### [Version 33.0.17](https://github.com/Codeinwp/woocommerce-product-addon/compare/v33.0.16...v33.0.17) (2025-11-13)
    255 
     254##### [Version 33.0.18](https://github.com/Codeinwp/woocommerce-product-addon/compare/v33.0.17...v33.0.18) (2025-12-19)
     255
     256- Fixed image upload in image dropdown field
    256257- Enhanced security
    257 - Fixed load of JS script dependencies for latest WooCommerce version
    258 - Fixed issue with FixedPrice field giving a fatal error when string is used in quantity field
    259 - Fixed color option overlapping
    260258
    261259
  • woocommerce-product-addon/trunk/vendor/codeinwp/themeisle-sdk/CHANGELOG.md

    r3379431 r3423707  
     1##### [Version 3.3.50](https://github.com/Codeinwp/themeisle-sdk-main/compare/v3.3.49...v3.3.50) (2025-11-25)
     2
     3> Things are getting better every day. 🚀
     4
    15##### [Version 3.3.49](https://github.com/Codeinwp/themeisle-sdk-main/compare/v3.3.48...v3.3.49) (2025-09-18)
    26
  • woocommerce-product-addon/trunk/vendor/codeinwp/themeisle-sdk/load.php

    r3379431 r3423707  
    1515}
    1616// Current SDK version and path.
    17 $themeisle_sdk_version = '3.3.49';
     17$themeisle_sdk_version = '3.3.50';
    1818$themeisle_sdk_path    = dirname( __FILE__ );
    1919
  • woocommerce-product-addon/trunk/vendor/codeinwp/themeisle-sdk/src/Loader.php

    r3379431 r3423707  
    332332     */
    333333    public static function init() {
    334         /**
    335          * This filter can be used to localize the labels inside each product.
    336          */
    337         self::$labels = apply_filters( 'themeisle_sdk_labels', self::$labels );
     334        self::localize_labels();
    338335        if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Loader ) ) {
    339336            self::$instance = new Loader();
     
    347344
    348345            add_action( 'themeisle_sdk_first_activation', array( __CLASS__, 'activate' ) );
    349         }
     346       
     347        }
     348    }
     349   
     350    /**
     351     * Localize the labels.
     352     */
     353    public static function localize_labels() {
     354        $originals        = self::$labels;
     355        $all_translations = [];
     356
     357        global $wp_filter;
     358        if ( isset( $wp_filter['themeisle_sdk_labels'] ) ) {
     359            foreach ( $wp_filter['themeisle_sdk_labels']->callbacks as $priority => $hooks ) {
     360                foreach ( $hooks as $hook ) {
     361                    // Each callback gets fresh originals, not previous callback's output
     362                    $result             = call_user_func( $hook['function'], $originals );
     363                    $all_translations[] = $result;
     364                }
     365            }
     366           
     367            // Remove the filter so it doesn't run again via apply_filters
     368            remove_all_filters( 'themeisle_sdk_labels' );
     369        }
     370
     371        // Merge all results, first real translation wins
     372        self::$labels = self::merge_all_translations( $originals, $all_translations );
     373    }
     374    /**
     375     * Merge all translations.
     376     *
     377     * @param array $originals The original labels.
     378     * @param array $all_translations The all translations.
     379     *
     380     * @return array The merged labels.
     381     */
     382    private static function merge_all_translations( $originals, $all_translations ) {
     383        $result = $originals;
     384       
     385        foreach ( $all_translations as $translations ) {
     386            $result = self::merge_if_translated( $result, $translations, $originals );
     387        }
     388       
     389        return $result;
     390    }
     391    /**
     392     * Merge if translated.
     393     *
     394     * @param array $current The current labels.
     395     * @param array $new The new labels.
     396     * @param array $originals The original labels.
     397     * @return array The merged labels.
     398     */
     399    private static function merge_if_translated( $current, $new, $originals ) {
     400        foreach ( $new as $key => $value ) {
     401            if ( ! isset( $originals[ $key ] ) ) {
     402                // New key, accept it
     403                if ( ! isset( $current[ $key ] ) ) {
     404                    $current[ $key ] = $value;
     405                }
     406                continue;
     407            }
     408           
     409            if ( is_array( $value ) && is_array( $originals[ $key ] ) ) {
     410                $current[ $key ] = self::merge_if_translated(
     411                    $current[ $key ],
     412                    $value,
     413                    $originals[ $key ]
     414                );
     415            } else {
     416                // Only accept if:
     417                // 1. New value is actually translated (differs from original)
     418                // 2. Current value is NOT already translated
     419                $is_new_translated       = ( $value !== $originals[ $key ] );
     420                $is_current_untranslated = ( $current[ $key ] === $originals[ $key ] );
     421               
     422                if ( $is_new_translated && $is_current_untranslated ) {
     423                    $current[ $key ] = $value;
     424                }
     425            }
     426        }
     427       
     428        return $current;
    350429    }
    351430
  • woocommerce-product-addon/trunk/vendor/codeinwp/themeisle-sdk/src/Modules/Announcements.php

    r3301441 r3423707  
    246246        }
    247247
     248        $logo_url           = ! empty( $data['logo_url'] ) ? $data['logo_url'] : $this->get_sdk_uri() . 'assets/images/themeisle-logo.png';
     249        $cta_label          = ! empty( $data['cta_label'] ) ? $data['cta_label'] : Loader::$labels['announcements']['notice_link_label'];
    248250        $sale_url           = ! empty( $data['sale_url'] ) ? $data['sale_url'] : '';
    249251        $hide_other_notices = ! empty( $data['hide_other_notices'] ) ? $data['hide_other_notices'] : ! $can_dismiss;
     
    341343                    <img
    342344                        width="45"
    343                         src="<?php echo esc_url( $this->get_sdk_uri() . 'assets/images/themeisle-logo.png' ); ?>"
     345                        src="<?php echo esc_url( $logo_url ); ?>"
    344346                    />
    345347                </div>
     
    361363                        class="button button-primary themeisle-sale-button"
    362364                    >
    363                     <?php echo esc_html( Loader::$labels['announcements']['notice_link_label'] ); ?>
     365                    <?php echo esc_html( $cta_label ); ?>
    364366                    </a>
    365367                </div>
  • woocommerce-product-addon/trunk/vendor/composer/installed.json

    r3379431 r3423707  
    33        {
    44            "name": "codeinwp/themeisle-sdk",
    5             "version": "3.3.49",
    6             "version_normalized": "3.3.49.0",
     5            "version": "3.3.50",
     6            "version_normalized": "3.3.50.0",
    77            "source": {
    88                "type": "git",
    99                "url": "https://github.com/Codeinwp/themeisle-sdk.git",
    10                 "reference": "605f78bbbd8526f7597a89077791043d9ecc8c20"
     10                "reference": "3c1f8dfc2390e667bbc086c5d660900a7985efa6"
    1111            },
    1212            "dist": {
    1313                "type": "zip",
    14                 "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/605f78bbbd8526f7597a89077791043d9ecc8c20",
    15                 "reference": "605f78bbbd8526f7597a89077791043d9ecc8c20",
     14                "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/3c1f8dfc2390e667bbc086c5d660900a7985efa6",
     15                "reference": "3c1f8dfc2390e667bbc086c5d660900a7985efa6",
    1616                "shasum": ""
    1717            },
     
    2020                "yoast/phpunit-polyfills": "^2.0"
    2121            },
    22             "time": "2025-09-18T13:41:05+00:00",
     22            "time": "2025-11-25T19:36:35+00:00",
    2323            "type": "library",
    2424            "installation-source": "dist",
     
    4141            "support": {
    4242                "issues": "https://github.com/Codeinwp/themeisle-sdk/issues",
    43                 "source": "https://github.com/Codeinwp/themeisle-sdk/tree/v3.3.49"
     43                "source": "https://github.com/Codeinwp/themeisle-sdk/tree/v3.3.50"
    4444            },
    4545            "install-path": "../codeinwp/themeisle-sdk"
  • woocommerce-product-addon/trunk/vendor/composer/installed.php

    r3394835 r3423707  
    22    'root' => array(
    33        'name' => 'codeinwp/woocommerce-product-addon',
    4         'pretty_version' => 'v33.0.17',
    5         'version' => '33.0.17.0',
    6         'reference' => '8dcdb5105f6d3b89a28fa119d065d7182ead8ca3',
     4        'pretty_version' => 'v33.0.18',
     5        'version' => '33.0.18.0',
     6        'reference' => '886709ac767b570a61a631a9a8b05d42a8411cf6',
    77        'type' => 'project',
    88        'install_path' => __DIR__ . '/../../',
     
    1212    'versions' => array(
    1313        'codeinwp/themeisle-sdk' => array(
    14             'pretty_version' => '3.3.49',
    15             'version' => '3.3.49.0',
    16             'reference' => '605f78bbbd8526f7597a89077791043d9ecc8c20',
     14            'pretty_version' => '3.3.50',
     15            'version' => '3.3.50.0',
     16            'reference' => '3c1f8dfc2390e667bbc086c5d660900a7985efa6',
    1717            'type' => 'library',
    1818            'install_path' => __DIR__ . '/../codeinwp/themeisle-sdk',
     
    2121        ),
    2222        'codeinwp/woocommerce-product-addon' => array(
    23             'pretty_version' => 'v33.0.17',
    24             'version' => '33.0.17.0',
    25             'reference' => '8dcdb5105f6d3b89a28fa119d065d7182ead8ca3',
     23            'pretty_version' => 'v33.0.18',
     24            'version' => '33.0.18.0',
     25            'reference' => '886709ac767b570a61a631a9a8b05d42a8411cf6',
    2626            'type' => 'project',
    2727            'install_path' => __DIR__ . '/../../',
  • woocommerce-product-addon/trunk/woocommerce-product-addon.php

    r3394835 r3423707  
    44 * Plugin URI: https://themeisle.com/plugins/ppom-pro/
    55 * Description: PPOM (Personalized Product Meta Manager) plugin allow WooCommerce Store Admin to create unlimited input fields and files to attach with Product Pages.
    6  * Version: 33.0.17
     6 * Version: 33.0.18
    77 * Author: Themeisle
    88 * Text Domain: woocommerce-product-addon
     
    2929define( 'PPOM_BASENAME', basename( PPOM_WP_PLUGIN_DIR ) );
    3030define( 'PPOM_PRODUCT_SLUG', PPOM_BASENAME );
    31 define( 'PPOM_VERSION', '33.0.17' );
     31define( 'PPOM_VERSION', '33.0.18' );
    3232define( 'PPOM_DB_VERSION', '32.0.0' );
    3333define( 'PPOM_PRODUCT_META_KEY', '_product_meta_id' );
Note: See TracChangeset for help on using the changeset viewer.