Plugin Directory

Changeset 3173781


Ignore:
Timestamp:
10/22/2024 03:39:43 PM (15 months ago)
Author:
templateinvaders
Message:

version 2.9.1

Location:
ti-woocommerce-wishlist
Files:
295 added
18 edited

Legend:

Unmodified
Added
Removed
  • ti-woocommerce-wishlist/trunk/assets/css/admin-form-rtl.min.css

    r3167298 r3173781  
    11/**
    22 * TI WooCommerce Wishlist Plugin - Allow your store guests and customers to add products to Wishlist.  Add Wishlist functionality to your store for free.
    3  * @version 2.9.0
     3 * @version 2.9.1
    44 * @link https://wordpress.org/plugins/ti-woocommerce-wishlist/
    55 */
  • ti-woocommerce-wishlist/trunk/assets/css/admin-form.min.css

    r3167298 r3173781  
    11/**
    22 * TI WooCommerce Wishlist Plugin - Allow your store guests and customers to add products to Wishlist.  Add Wishlist functionality to your store for free.
    3  * @version 2.9.0
     3 * @version 2.9.1
    44 * @link https://wordpress.org/plugins/ti-woocommerce-wishlist/
    55 */
  • ti-woocommerce-wishlist/trunk/assets/css/admin-rtl.min.css

    r3167298 r3173781  
    11/**
    22 * TI WooCommerce Wishlist Plugin - Allow your store guests and customers to add products to Wishlist.  Add Wishlist functionality to your store for free.
    3  * @version 2.9.0
     3 * @version 2.9.1
    44 * @link https://wordpress.org/plugins/ti-woocommerce-wishlist/
    55 */
  • ti-woocommerce-wishlist/trunk/assets/css/admin-setup-rtl.min.css

    r3167298 r3173781  
    11/**
    22 * TI WooCommerce Wishlist Plugin - Allow your store guests and customers to add products to Wishlist.  Add Wishlist functionality to your store for free.
    3  * @version 2.9.0
     3 * @version 2.9.1
    44 * @link https://wordpress.org/plugins/ti-woocommerce-wishlist/
    55 */
  • ti-woocommerce-wishlist/trunk/assets/css/admin-setup.min.css

    r3167298 r3173781  
    11/**
    22 * TI WooCommerce Wishlist Plugin - Allow your store guests and customers to add products to Wishlist.  Add Wishlist functionality to your store for free.
    3  * @version 2.9.0
     3 * @version 2.9.1
    44 * @link https://wordpress.org/plugins/ti-woocommerce-wishlist/
    55 */
  • ti-woocommerce-wishlist/trunk/assets/css/admin.min.css

    r3167298 r3173781  
    11/**
    22 * TI WooCommerce Wishlist Plugin - Allow your store guests and customers to add products to Wishlist.  Add Wishlist functionality to your store for free.
    3  * @version 2.9.0
     3 * @version 2.9.1
    44 * @link https://wordpress.org/plugins/ti-woocommerce-wishlist/
    55 */
  • ti-woocommerce-wishlist/trunk/assets/css/public-rtl.min.css

    r3167298 r3173781  
    11/**
    22 * TI WooCommerce Wishlist Plugin - Allow your store guests and customers to add products to Wishlist.  Add Wishlist functionality to your store for free.
    3  * @version 2.9.0
     3 * @version 2.9.1
    44 * @link https://wordpress.org/plugins/ti-woocommerce-wishlist/
    55 */
  • ti-woocommerce-wishlist/trunk/assets/css/public.min.css

    r3167298 r3173781  
    11/**
    22 * TI WooCommerce Wishlist Plugin - Allow your store guests and customers to add products to Wishlist.  Add Wishlist functionality to your store for free.
    3  * @version 2.9.0
     3 * @version 2.9.1
    44 * @link https://wordpress.org/plugins/ti-woocommerce-wishlist/
    55 */
  • ti-woocommerce-wishlist/trunk/assets/css/theme-rtl.min.css

    r3167298 r3173781  
    11/**
    22 * TI WooCommerce Wishlist Plugin - Allow your store guests and customers to add products to Wishlist.  Add Wishlist functionality to your store for free.
    3  * @version 2.9.0
     3 * @version 2.9.1
    44 * @link https://wordpress.org/plugins/ti-woocommerce-wishlist/
    55 */
  • ti-woocommerce-wishlist/trunk/assets/css/theme.min.css

    r3167298 r3173781  
    11/**
    22 * TI WooCommerce Wishlist Plugin - Allow your store guests and customers to add products to Wishlist.  Add Wishlist functionality to your store for free.
    3  * @version 2.9.0
     3 * @version 2.9.1
    44 * @link https://wordpress.org/plugins/ti-woocommerce-wishlist/
    55 */
  • ti-woocommerce-wishlist/trunk/assets/css/webfont-rtl.min.css

    r3167298 r3173781  
    11/**
    22 * TI WooCommerce Wishlist Plugin - Allow your store guests and customers to add products to Wishlist.  Add Wishlist functionality to your store for free.
    3  * @version 2.9.0
     3 * @version 2.9.1
    44 * @link https://wordpress.org/plugins/ti-woocommerce-wishlist/
    55 */
  • ti-woocommerce-wishlist/trunk/assets/css/webfont.min.css

    r3167298 r3173781  
    11/**
    22 * TI WooCommerce Wishlist Plugin - Allow your store guests and customers to add products to Wishlist.  Add Wishlist functionality to your store for free.
    3  * @version 2.9.0
     3 * @version 2.9.1
    44 * @link https://wordpress.org/plugins/ti-woocommerce-wishlist/
    55 */
  • ti-woocommerce-wishlist/trunk/assets/js/admin.min.js

    r3167298 r3173781  
    11/**
    22 * TI WooCommerce Wishlist Plugin - Allow your store guests and customers to add products to Wishlist.  Add Wishlist functionality to your store for free.
    3  * @version 2.9.0
     3 * @version 2.9.1
    44 * @link https://wordpress.org/plugins/ti-woocommerce-wishlist/
    55 */
  • ti-woocommerce-wishlist/trunk/assets/js/public.min.js

    r3167298 r3173781  
    11/**
    22 * TI WooCommerce Wishlist Plugin - Allow your store guests and customers to add products to Wishlist.  Add Wishlist functionality to your store for free.
    3  * @version 2.9.0
     3 * @version 2.9.1
    44 * @link https://wordpress.org/plugins/ti-woocommerce-wishlist/
    55 */
  • ti-woocommerce-wishlist/trunk/languages/ti-woocommerce-wishlist.pot

    r3167298 r3173781  
    1 # Copyright (C) 2024 TI WooCommerce Wishlist Plugin - 2.9.0
    2 # This file is distributed under the same license as the TI WooCommerce Wishlist Plugin - 2.9.0 package.
     1# Copyright (C) 2024 TI WooCommerce Wishlist Plugin - 2.9.1
     2# This file is distributed under the same license as the TI WooCommerce Wishlist Plugin - 2.9.1 package.
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: TI WooCommerce Wishlist Plugin - 2.9.0\n"
     5"Project-Id-Version: TI WooCommerce Wishlist Plugin - 2.9.1\n"
    66"MIME-Version: 1.0\n"
    77"Content-Type: text/plain; charset=UTF-8\n"
     
    99"Language-Team: TemplateInvaders (https://templateinvaders.com/)\n"
    1010"Last-Translator: TemplateInvaders (https://templateinvaders.com/)\n"
    11 "POT-Creation-Date: 2024-10-11 17:26+0000\n"
     11"POT-Creation-Date: 2024-10-22 15:30+0000\n"
    1212"Report-Msgid-Bugs-To: https://templateinvaders.com/help/\n"
    1313"X-Poedit-Basepath: ..\n"
  • ti-woocommerce-wishlist/trunk/public/addtowishlist.class.php

    r3167298 r3173781  
    438438
    439439    /**
    440      * @param $share_key
     440     * @param string $share_key
    441441     *
    442442     * @return array
    443443     */
    444444    function get_wishlists_data( $share_key ) {
    445 
    446445        global $wpdb;
    447446
    448         $table              = sprintf( '%s%s', $wpdb->prefix, 'tinvwl_items' );
    449         $table_lists        = sprintf( '%s%s', $wpdb->prefix, 'tinvwl_lists' );
    450         $table_stats        = sprintf( '%s%s', $wpdb->prefix, 'tinvwl_analytics' );
    451         $table_translations = sprintf( '%s%s', $wpdb->prefix, 'icl_translations' );
    452         $table_languages    = sprintf( '%s%s', $wpdb->prefix, 'icl_languages' );
    453         $lang               = filter_input( INPUT_POST, 'lang', FILTER_SANITIZE_FULL_SPECIAL_CHARS );
    454         $lang_default       = filter_input( INPUT_POST, 'lang_default', FILTER_SANITIZE_FULL_SPECIAL_CHARS );
    455         $stats              = filter_input( INPUT_POST, 'stats', FILTER_SANITIZE_FULL_SPECIAL_CHARS );
     447        $table              = $wpdb->prefix . 'tinvwl_items';
     448        $table_lists        = $wpdb->prefix . 'tinvwl_lists';
     449        $table_stats        = $wpdb->prefix . 'tinvwl_analytics';
     450        $table_translations = $wpdb->prefix . 'icl_translations';
     451        $table_languages    = $wpdb->prefix . 'icl_languages';
     452
     453        // Sanitize inputs
     454        $lang         = sanitize_text_field( filter_input( INPUT_POST, 'lang', FILTER_SANITIZE_FULL_SPECIAL_CHARS ) );
     455        $lang_default = sanitize_text_field( filter_input( INPUT_POST, 'lang_default', FILTER_SANITIZE_FULL_SPECIAL_CHARS ) );
     456        $stats        = sanitize_text_field( filter_input( INPUT_POST, 'stats', FILTER_SANITIZE_FULL_SPECIAL_CHARS ) );
     457        $share_key    = sanitize_text_field( $share_key );
    456458
    457459        $data = $products = $wishlists = $results = $analytics = array();
     
    462464
    463465        if ( ( isset( $data['author'] ) && $data['author'] ) || $share_key ) {
    464 
    465466            $default = array(
    466467                'count'    => 99999,
     
    473474            );
    474475
     476            // Validate order and order_by parameters
     477            $allowed_orders          = array( 'ASC', 'DESC' );
     478            $allowed_order_by_fields = array( 'date', 'title', 'ID' ); // Add other allowed fields
     479
    475480            foreach ( $default as $_k => $_v ) {
    476481                if ( array_key_exists( $_k, $data ) ) {
     
    480485            }
    481486
     487            // Sanitize order parameters
     488            $default['order']    = in_array( strtoupper( $default['order'] ), $allowed_orders ) ? strtoupper( $default['order'] ) : 'DESC';
     489            $default['order_by'] = in_array( $default['order_by'], $allowed_order_by_fields ) ? $default['order_by'] : 'date';
     490
    482491            $default['offset'] = absint( $default['offset'] );
    483492            $default['count']  = absint( $default['count'] );
    484493
     494            // Build the base SELECT clause
    485495            if ( $lang ) {
    486                 $default['field'] = $table . '.ID, t.element_id AS product_id, t2.element_id AS variation_id, ' . $table . '.formdata,' . $table . '.author,' . $table . '.date,' . $table . '.quantity,' . $table . '.price,' . $table . '.in_stock,';
     496                $select_fields = "{$table}.ID, t.element_id AS product_id, t2.element_id AS variation_id,
     497                            {$table}.formdata, {$table}.author, {$table}.date, {$table}.quantity,
     498                            {$table}.price, {$table}.in_stock";
    487499            } else {
    488                 $default['field'] = $table . '.*, ';
    489             }
    490 
    491             $default['field'] .= $table_lists . '.ID as wishlist_id, ' . $table_lists . '.status as wishlist_status, ' . $table_lists . '.title as wishlist_title, ' . $table_lists . '.share_key as wishlist_share_key';
    492 
    493             $sql = "SELECT {$default[ 'field' ]} FROM `{$table}` INNER JOIN `{$table_lists}` ON `{$table}`.`wishlist_id` = `{$table_lists}`.`ID` AND `{$table_lists}`.`type` = 'default'";
    494 
     500                $select_fields = "{$table}.*";
     501            }
     502
     503            // Add the wishlist fields to the SELECT clause
     504            $select_fields .= ", {$table_lists}.ID as wishlist_id, {$table_lists}.status as wishlist_status,
     505                           {$table_lists}.title as wishlist_title, {$table_lists}.share_key as wishlist_share_key";
     506
     507            // Build base query
     508            $sql = "SELECT {$select_fields}
     509                FROM {$table}
     510                INNER JOIN {$table_lists} ON {$table}.wishlist_id = {$table_lists}.ID
     511                AND {$table_lists}.type = 'default'";
     512
     513            // Add share key condition if present
    495514            if ( $share_key ) {
    496                 $sql .= " AND `{$table_lists}`.`share_key` = '{$share_key}'";
    497             }
     515                $sql .= $wpdb->prepare( " AND {$table_lists}.share_key = %s", $share_key );
     516            }
     517
     518            // Add language joins if needed
    498519            if ( $lang ) {
     520                $language_conditions = array( $lang );
    499521                if ( $lang_default ) {
    500                     $languages = sprintf( "'%s'", implode( "', '", array( $lang, $lang_default ) ) );
    501                 } else {
    502                     $languages = "'" . $lang . "'";
    503                 }
    504 
    505                 $sql .= "LEFT JOIN {$table_translations} tr ON
    506     {$table}.product_id = tr.element_id AND tr.element_type = 'post_product'
    507 LEFT JOIN {$table_translations} tr2 ON
    508     {$table}.variation_id != 0 AND {$table}.variation_id = tr2.element_id AND tr2.element_type = 'post_product_variation'
    509         LEFT JOIN {$table_translations} t ON
    510     tr.trid = t.trid AND t.element_type = 'post_product' AND t.language_code IN ({$languages})
    511 LEFT JOIN {$table_translations} t2 ON
    512     {$table}.variation_id != 0 AND tr2.trid = t2.trid AND t2.element_type = 'post_product_variation' AND t2.language_code IN ({$languages})
    513 JOIN {$table_languages} l ON
    514     (
    515         t.language_code = l.code OR t2.language_code = l.code
    516     ) AND l.active = 1";
    517             }
    518             $where = '1';
    519 
     522                    $language_conditions[] = $lang_default;
     523                }
     524
     525                $languages_in = "'" . implode( "','", array_map( 'esc_sql', $language_conditions ) ) . "'";
     526
     527                $sql .= " LEFT JOIN {$table_translations} tr ON
     528                        {$table}.product_id = tr.element_id AND tr.element_type = 'post_product'
     529                    LEFT JOIN {$table_translations} tr2 ON
     530                        {$table}.variation_id != 0 AND {$table}.variation_id = tr2.element_id
     531                        AND tr2.element_type = 'post_product_variation'
     532                    LEFT JOIN {$table_translations} t ON
     533                        tr.trid = t.trid AND t.element_type = 'post_product'
     534                        AND t.language_code IN ({$languages_in})
     535                    LEFT JOIN {$table_translations} t2 ON
     536                        {$table}.variation_id != 0 AND tr2.trid = t2.trid
     537                        AND t2.element_type = 'post_product_variation'
     538                        AND t2.language_code IN ({$languages_in})
     539                    JOIN {$table_languages} l ON
     540                        (t.language_code = l.code OR t2.language_code = l.code) AND l.active = 1";
     541            }
     542
     543            // Build WHERE clause
     544            $where_conditions = array( '1=1' );
    520545            if ( ! empty( $data ) && is_array( $data ) ) {
    521 
    522                 if ( array_key_exists( 'meta', $data ) ) {
    523                     $product_id = $variation_id = 0;
    524                     if ( array_key_exists( 'product_id', $data ) ) {
    525                         $product_id = $data['product_id'];
     546                foreach ( $data as $field => $value ) {
     547                    if ( is_array( $value ) ) {
     548                        $placeholders       = array_fill( 0, count( $value ), '%s' );
     549                        $where_conditions[] = $wpdb->prepare(
     550                            "{$table}.{$field} IN (" . implode( ',', $placeholders ) . ")",
     551                            $value
     552                        );
     553                    } else {
     554                        $where_conditions[] = $wpdb->prepare(
     555                            "{$table}.{$field} = %s",
     556                            $value
     557                        );
    526558                    }
    527                     if ( array_key_exists( 'variation_id', $data ) ) {
    528                         $variation_id = $data['variation_id'];
    529                     }
    530                     $data['formdata'] = '';
    531                     unset( $data['meta'] );
    532                 }
    533 
    534                 foreach ( $data as $f => $v ) {
    535                     $s = is_array( $v ) ? ' IN ' : '=';
    536                     if ( is_array( $v ) ) {
    537                         foreach ( $v as $_f => $_v ) {
    538                             $v[ $_f ] = $wpdb->prepare( '%s', $_v );
    539                         }
    540                         $v = implode( ',', $v );
    541                         $v = "($v)";
    542                     } else {
    543                         $v = $wpdb->prepare( '%s', $v );
    544                     }
    545                     $data[ $f ] = sprintf( $table . '.' . '`%s`%s%s', $f, $s, $v );
    546                 }
    547 
    548                 $where = implode( ' AND ', $data );
    549 
    550                 $sql .= ' WHERE ' . $where;
    551             }
    552 
    553             $sql .= sprintf( ' GROUP BY `%s`.ID ORDER BY `%s` %s LIMIT %d,%d;', $table, $default['order_by'], $default['order'], $default['offset'], $default['count'] );
    554 
    555             if ( ! empty( $default['sql'] ) ) {
    556                 $replacer    = $replace = array();
    557                 $replace[0]  = '{table}';
    558                 $replacer[0] = $table;
    559                 $replace[1]  = '{where}';
    560                 $replacer[1] = $where;
    561 
    562                 foreach ( $default as $key => $value ) {
    563                     $i = count( $replace );
    564 
    565                     $replace[ $i ]  = '{' . $key . '}';
    566                     $replacer[ $i ] = $value;
    567                 }
    568 
    569                 $sql = str_replace( $replace, $replacer, $default['sql'] );
    570             }
    571 
     559                }
     560            }
     561
     562            $sql .= " WHERE " . implode( ' AND ', $where_conditions );
     563
     564            // Add GROUP BY, ORDER BY, and LIMIT
     565            $sql .= " GROUP BY {$table}.ID";
     566            $sql .= " ORDER BY {$default['order_by']} {$default['order']}";
     567            $sql .= $wpdb->prepare( " LIMIT %d, %d", $default['offset'], $default['count'] );
     568
     569            // Execute query
    572570            $results = $wpdb->get_results( $sql, ARRAY_A );
    573571
     572            // Process results
    574573            if ( ! empty( $results ) ) {
    575574                foreach ( $results as $product ) {
    576575                    $wishlists[ $product['wishlist_id'] ] = array(
    577576                        'ID'        => (int) $product['wishlist_id'],
    578                         'title'     => $product['wishlist_title'],
    579                         'status'    => $product['wishlist_status'],
    580                         'share_key' => $product['wishlist_share_key'],
     577                        'title'     => sanitize_text_field( $product['wishlist_title'] ),
     578                        'status'    => sanitize_text_field( $product['wishlist_status'] ),
     579                        'share_key' => sanitize_text_field( $product['wishlist_share_key'] ),
    581580                    );
    582 
    583581                }
    584582
    585583                foreach ( $wishlists as $wishlist ) {
    586 
    587584                    foreach ( $results as $product ) {
    588 
    589585                        if ( (int) $wishlist['ID'] !== (int) $product['wishlist_id'] ) {
    590586                            continue;
     
    597593                            $products[ $product['product_id'] ][ $wishlist['ID'] ]['in'][] = (int) $product['variation_id'];
    598594                        }
    599 
    600595                    }
    601596                }
    602597            }
    603 
    604         }
    605 
     598        }
     599
     600        // Handle statistics query
    606601        if ( $stats ) {
    607602            $stats_count = 0;
    608603            $analytics   = array();
    609             $stats_sql   = "SELECT `A`.`product_id`, `A`.`variation_id`, COUNT(`B`.`ID`) AS `count` FROM `{$table_stats}` AS `A` LEFT JOIN `{$table}` AS `C` ON `C`.`wishlist_id` = `A`.`wishlist_id` AND `C`.`product_id` = `A`.`product_id` AND `C`.`variation_id` = `A`.`variation_id` LEFT JOIN `{$table_lists}` AS `B` ON `C`.`wishlist_id` = `B`.`ID` LEFT JOIN `{$table_lists}` AS `G` ON `C`.`wishlist_id` = `G`.`ID` AND `G`.`author` = 0 WHERE `A`.`product_id` > 0 GROUP BY `A`.`product_id`, `A`.`variation_id` HAVING `count` > 0 LIMIT 0, 9999999";
     604
     605            $stats_sql = "SELECT A.product_id, A.variation_id, COUNT(B.ID) AS count
     606                      FROM {$table_stats} AS A
     607                      LEFT JOIN {$table} AS C ON C.wishlist_id = A.wishlist_id
     608                          AND C.product_id = A.product_id
     609                          AND C.variation_id = A.variation_id
     610                      LEFT JOIN {$table_lists} AS B ON C.wishlist_id = B.ID
     611                      LEFT JOIN {$table_lists} AS G ON C.wishlist_id = G.ID AND G.author = 0
     612                      WHERE A.product_id > 0
     613                      GROUP BY A.product_id, A.variation_id
     614                      HAVING count > 0
     615                      LIMIT 0, 9999999";
    610616
    611617            $stats_results = $wpdb->get_results( $stats_sql, ARRAY_A );
     
    613619            if ( ! empty( $stats_results ) ) {
    614620                foreach ( $stats_results as $product_stats ) {
    615                     $analytics[ $product_stats['product_id'] ][ $product_stats['variation_id'] ] = $product_stats['count'];
    616                     $stats_count                                                                 = $stats_count + $product_stats['count'];
     621                    $analytics[ $product_stats['product_id'] ][ $product_stats['variation_id'] ] = (int) $product_stats['count'];
     622                    $stats_count                                                                 += (int) $product_stats['count'];
    617623                }
    618624            }
     
    627633
    628634        if ( $lang ) {
    629             $response['lang'] = $lang;
     635            $response['lang'] = sanitize_text_field( $lang );
    630636        }
    631637
    632638        if ( $lang_default ) {
    633             $response['lang_default'] = $lang_default;
     639            $response['lang_default'] = sanitize_text_field( $lang_default );
    634640        }
    635641
    636642        if ( $stats ) {
    637643            $response['stats']       = $analytics;
    638             $response['stats_count'] = $stats_count;
     644            $response['stats_count'] = (int) $stats_count;
    639645        }
    640646
  • ti-woocommerce-wishlist/trunk/readme.txt

    r3167298 r3173781  
    44Requires at least: 6.1
    55Tested up to: 6.6
    6 Stable tag: 2.9.0
     6Stable tag: 2.9.1
    77Requires PHP: 7.4
    88License: GPLv3
     
    160160== Changelog ==
    161161
     162= 2.9.1 =
     163*Release Date - 22 October 2024*
     164
     165- **Fixed**: SQL Injection vulnerability related to multilingual plugins
     166
    162167= 2.9.0 =
    163168*Release Date - 11 October 2024*
     
    171176== Upgrade Notice ==
    172177
    173 = 2.9.0 =
    174 Fixed SQL Injection vulnerability
     178= 2.9.1 =
     179**Fixed**: SQL Injection vulnerability related to multilingual plugins
  • ti-woocommerce-wishlist/trunk/ti-woocommerce-wishlist.php

    r3167298 r3173781  
    55 * Plugin URI:        https://wordpress.org/plugins/ti-woocommerce-wishlist/
    66 * Description:       Wishlist functionality for your WooCommerce store.
    7  * Version:           2.9.0
     7 * Version:           2.9.1
    88 * Requires at least: 6.1
    99 * Tested up to: 6.6
     
    3030defined( 'TINVWL_PREFIX' ) || define( 'TINVWL_PREFIX', 'tinvwl' );
    3131defined( 'TINVWL_DOMAIN' ) || define( 'TINVWL_DOMAIN', 'ti-woocommerce-wishlist' );
    32 defined( 'TINVWL_FVERSION' ) || define( 'TINVWL_FVERSION', '2.9.0' );
     32defined( 'TINVWL_FVERSION' ) || define( 'TINVWL_FVERSION', '2.9.1' );
    3333defined( 'TINVWL_LOAD_FREE' ) || define( 'TINVWL_LOAD_FREE', plugin_basename( __FILE__ ) );
    3434defined( 'TINVWL_NAME' ) || define( 'TINVWL_NAME', 'TI WooCommerce Wishlist' );
Note: See TracChangeset for help on using the changeset viewer.