403Webshell
Server IP : 5.129.245.98  /  Your IP : 216.73.217.19
Web Server : Apache/2.4.66 (Debian)
System : Linux 1b8c17c336b9 6.8.0-111-generic #111-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 11 23:16:02 UTC 2026 x86_64
User : www-data ( 33)
PHP Version : 8.3.30
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : ON  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/html/wp-content/plugins/wpai-woocommerce-add-on/src/parser/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/wp-content/plugins/wpai-woocommerce-add-on/src/parser/VariationsParserBase.php
<?php

namespace wpai_woocommerce_add_on\parser;

use XmlImportParser;

/**
 * Class VariationsParserBase
 * @package wpai_woocommerce_add_on\parser
 */
abstract class VariationsParserBase extends Parser {

    /**
     * @var int
     */
    protected $index;

    /**
     * @var int
     */
    public $countVariations = 0;

    /**
     * @param $option
     * @return mixed
     */
    private function getOptionName($option) {
        $optionsMapping = [
            'variable_file_paths' => 'variable_files',
            'variable_file_names' => 'variable_files_names'
        ];
        return str_replace('variable_', 'product_', isset($optionsMapping[$option]) ? $optionsMapping[$option] : $option);
    }

    /**
     * Get complete XPath expression for parser factory.
     *
     * @return string
     */
    public function getCompleteParentXPath() {
        return $this->getXpath() . $this->getImport()->xpath;
    }

    /**
     * Get complete variations XPath expression for parser factory.
     *
     * @return string
     */
    public function getCompleteVariationsXPath() {
        return $this->getXpath() . $this->getImport()->xpath . '[' . ( $this->index + 1 ) . ']/'.  ltrim(trim(str_replace("[*]", "", $this->getImport()->options['variations_xpath']),'{}'), '/');
    }

    /**
     * Parse variation options type #1.
     *
     * @param $option
     */
    public function parseOptionType_1($option) {
        try {
            if ($this->getImport()->options[$option] != ""){
                $this->data[$this->getOptionName($option)] = XmlImportParser::factory($this->getXml(), $this->getCompleteVariationsXPath(), $this->getImport()->options[$option], $file)->parse(); $this->tmp_files[] = $file;
            } else{
                $this->countVariations && $this->data[$this->getOptionName($option)] = array_fill(0, $this->countVariations, '');
            }
        }
        catch (\Exception $e) {
            $this->log('<b>ERROR:</b> ' . $e->getMessage());
        }
    }

    /**
     * Parse variation options type #2.
     *
     * @param $option
     */
    public function parseOptionType_2($option) {
        try {
            if ($this->getImport()->options['is_variable_' . $option] != 'yes' && "" != $this->getImport()->options['single_variable_' . $option]){
                if ($this->getImport()->options['single_variable_' . $option . '_use_parent']) {
                    $parsedData = XmlImportParser::factory($this->getXml(), $this->getCompleteParentXPath(), $this->getImport()->options['single_variable_' . $option], $file)->parse(); $this->tmp_files[] = $file;
                    $this->countVariations && $this->data[$option] = array_fill(0, $this->countVariations, $parsedData[$this->index]);
                } else {
                    $this->data[$option] = XmlImportParser::factory($this->getXml(), $this->getCompleteVariationsXPath(), $this->getImport()->options['single_variable_' . $option], $file)->parse(); $this->tmp_files[] = $file;
                }
            } else {
                $this->countVariations && $this->data[$option] = array_fill(0, $this->countVariations, $this->getImport()->options['is_variable_' . $option]);
            }
        }
        catch (\Exception $e) {
            $this->log('<b>ERROR:</b> ' . $e->getMessage());
        }
    }

    /**
     * Parse variation options type #3.
     *
     * @param $option
     */
    public function parseOptionType_3($option) {
        try {
            if ($this->getImport()->options['is_multiple_variable_' . $option] != 'yes' && "" != $this->getImport()->options['single_variable_' . $option]) {
                if ($this->getImport()->options['single_variable_' . $option . '_use_parent']) {
                    $parsedData = XmlImportParser::factory($this->getXml(), $this->getCompleteParentXPath(), $this->getImport()->options['single_variable_' . $option], $file)->parse(); $this->tmp_files[] = $file;
                    $this->countVariations && $this->data[$option] = array_fill(0, $this->countVariations, $parsedData[$this->index]);
                } else {
                    $this->data[$option] = XmlImportParser::factory($this->getXml(), $this->getCompleteVariationsXPath(), $this->getImport()->options['single_variable_' . $option], $file)->parse(); $this->tmp_files[] = $file;
                }
            } else {
                $this->countVariations && $this->data[$option] = array_fill(0, $this->countVariations, $this->getImport()->options['multiple_variable_' . $option]);
            }
        } catch (\Exception $e) {
            $this->log('<b>ERROR:</b> ' . $e->getMessage());
        }
    }

    /**
     * Parse variation options type #4.
     *
     * @param $option
     */
    public function parseOptionType_4($option) {
        try {
            if ($this->getImport()->options[$option] != "") {
                switch ($option) {
                    case 'variable_length':
                    case 'variable_width':
                    case 'variable_height':
                        $use_parent_option = 'variable_dimensions_use_parent';
                        break;
                    default:
                        $use_parent_option = $option . '_use_parent';
                        break;
                }
                if ($this->getImport()->options[$use_parent_option]) {
                    $parsedData = XmlImportParser::factory($this->getXml(), $this->getCompleteParentXPath(), $this->getImport()->options[$option], $file)->parse(); $this->tmp_files[] = $file;
                    $this->countVariations && $this->data[$this->getOptionName($option)] = array_fill(0, $this->countVariations, $parsedData[$this->index]);
                } else {
                    $this->data[$this->getOptionName($option)] = XmlImportParser::factory($this->getXml(), $this->getCompleteVariationsXPath(), $this->getImport()->options[$option], $file)->parse(); $this->tmp_files[] = $file;
                }
            } else {
                $this->countVariations && $this->data[$this->getOptionName($option)] = array_fill(0, $this->countVariations, '');
            }
        } catch (\Exception $e) {
            $this->log('<b>ERROR:</b> ' . $e->getMessage());
        }
    }

    /**
     * Parse variation options type #5.
     *
     * @param $option
     */
    public function parseOptionType_5($option) {
        try {
            if (!empty($this->getImport()->options[$option])) {
                if ($this->getImport()->options[$option . '_use_parent']) {
                    $parsedData = array_map(array(
                        $this,
                        'adjustPrice'
                    ), array_map(array(
                        $this,
                        'preparePrice'
                    ), XmlImportParser::factory($this->getXml(), $this->getCompleteParentXPath(), $this->getImport()->options[$option], $file)
                        ->parse()), array_fill(0, $this->getCount(), $option));
                    $this->tmp_files[] = $file;
                    $this->countVariations && $this->data[$this->getOptionName($option)] = array_fill(0, $this->countVariations, $parsedData[$this->index]);
                } else {
                    $this->data[$this->getOptionName($option)] = array_map(array(
                        $this,
                        'preparePrice'
                    ), XmlImportParser::factory($this->getXml(), $this->getCompleteVariationsXPath(), $this->getImport()->options[$option], $file)
                        ->parse());
                    $this->tmp_files[] = $file;
                }
            } else {
                $this->countVariations && $this->data[$this->getOptionName($option)] = array_fill(0, $this->countVariations, '');
            }
        } catch (\Exception $e) {
            $this->log('<b>ERROR:</b> ' . $e->getMessage());
        }
    }

    /**
     * Parse product's variation stock status.
     */
    public function parseVariationStockStatus() {
        try {
            // Composing product Stock status.
            if ($this->getImport()->options['variable_stock_status'] == 'xpath' && "" != $this->getImport()->options['single_variable_stock_status']) {
                $this->data['product_stock_status'] = XmlImportParser::factory($this->getXml(), $this->getCompleteVariationsXPath(), $this->getImport()->options['single_variable_stock_status'], $file)
                    ->parse();
                $this->tmp_files[] = $file;
            } elseif ($this->getImport()->options['variable_stock_status'] == 'auto') {
                $this->countVariations && $this->data['product_stock_status'] = array_fill(0, $this->countVariations, $this->getImport()->options['variable_stock_status']);
                $noStock = absint(max(get_option('woocommerce_notify_no_stock_amount'), 0));
                foreach ($this->data['product_stock'] as $key => $value) {
                    if ($this->data['product_manage_stock'][$key] == 'yes') {
                        $this->data['product_stock_status'][$key] = (((int) $value === 0 || (int) $value <= $noStock) && $value != "") ? 'outofstock' : 'instock';
                    }
                    else {
                        $this->data['product_stock_status'][$key] = 'instock';
                    }
                }
            } else {
                $this->getCount() && $this->data['product_stock_status'] = array_fill(0, $this->countVariations, $this->getImport()->options['variable_stock_status']);
            }
        } catch (\Exception $e) {
            $this->log('<b>ERROR:</b> ' . $e->getMessage());
        }
    }

    /**
     * Parse product's variation backorders.
     */
    public function parseVariationBackorders() {
        try {
            if ($this->getImport()->options['variable_allow_backorders'] == 'xpath' && "" != $this->getImport()->options['single_variable_allow_backorders']){
                $this->data['product_allow_backorders'] =  XmlImportParser::factory($this->getXml(), $this->getCompleteVariationsXPath(), $this->getImport()->options['single_variable_allow_backorders'], $file)->parse(); $this->tmp_files[] = $file;
            } else {
                $this->countVariations && $this->data['product_allow_backorders'] = array_fill(0, $this->countVariations, $this->getImport()->options['variable_allow_backorders']);
            }
        } catch (\Exception $e) {
            $this->log('<b>ERROR:</b> ' . $e->getMessage());
        }
    }

    /**
     * Parse product's variation status.
     */
    public function parseVariationStatus() {
        try {
            if ($this->getImport()->options['is_variable_product_enabled'] == 'xpath' && "" != $this->getImport()->options['single_variable_product_enabled']){
                $this->data['product_enabled'] = XmlImportParser::factory($this->getXml(), $this->getCompleteVariationsXPath(), $this->getImport()->options['single_variable_product_enabled'], $file)->parse(); $this->tmp_files[] = $file;
            } else {
                $this->countVariations && $this->data['product_enabled'] = array_fill(0, $this->countVariations, $this->getImport()->options['is_variable_product_enabled']);
            }
        } catch (\Exception $e) {
            $this->log('<b>ERROR:</b> ' . $e->getMessage());
        }
    }

    /**
     * Parse product's variation sale price schedule.
     * - product_sale_price_dates_from
     * - product_sale_price_dates_to
     */
    public function parseVariationSalePriceSchedule() {
        try {
            if ($this->getImport()->options['is_variable_sale_price_shedule']) {
                // Sale price dates from.
                if (!empty($this->getImport()->options['variable_sale_price_dates_from'])) {
                    if ($this->getImport()->options['variable_sale_dates_use_parent']) {
                        $parsedData = XmlImportParser::factory($this->getXml(), $this->getCompleteParentXPath(), $this->getImport()->options['variable_sale_price_dates_from'], $file)
                            ->parse();
                        $this->tmp_files[] = $file;
                        $this->countVariations && $this->data['product_sale_price_dates_from'] = array_fill(0, $this->countVariations, $parsedData[$this->index]);
                    } else {
                        $this->data['product_sale_price_dates_from'] = XmlImportParser::factory($this->getXml(), $this->getCompleteVariationsXPath(), $this->getImport()->options['variable_sale_price_dates_from'], $file)
                            ->parse();
                        $this->tmp_files[] = $file;
                    }
                } else {
                    $this->countVariations && $this->data['product_sale_price_dates_from'] = array_fill(0, $this->countVariations, '');
                }
                // Sale price dates to.
                if (!empty($this->getImport()->options['variable_sale_price_dates_to'])) {
                    if ($this->getImport()->options['variable_sale_dates_use_parent']) {
                        $parsedData = XmlImportParser::factory($this->getXml(), $this->getCompleteParentXPath(), $this->getImport()->options['variable_sale_price_dates_to'], $file)
                            ->parse();
                        $this->tmp_files[] = $file;
                        $this->countVariations && $this->data['product_sale_price_dates_to'] = array_fill(0, $this->countVariations, $parsedData[$this->index]);
                    } else {
                        $this->data['product_sale_price_dates_to'] = XmlImportParser::factory($this->getXml(), $this->getCompleteVariationsXPath(), $this->getImport()->options['variable_sale_price_dates_to'], $file)
                            ->parse();
                        $this->tmp_files[] = $file;
                    }
                } else {
                    $this->countVariations && $this->data['product_sale_price_dates_to'] = array_fill(0, $this->countVariations, '');
                }
            }
        } catch (\Exception $e) {
            $this->log('<b>ERROR:</b> ' . $e->getMessage());
        }
    }

    /**
     * Parse product's variation attributes.
     */
    public function parseVariationAttributes() {
        try {
            $variation_attributes = array();
            $options = array(
                'variable_attribute_name',
                'variable_attribute_value',
                'variable_in_variations',
                'variable_is_visible',
                'variable_is_taxonomy',
                'variable_create_taxonomy_in_not_exists'
            );
            $attributeNames = array_filter($this->getImport()->options['variable_attribute_name']);
            for ($j = 0; $j < count($attributeNames); $j++) {
                foreach ($options as $option) {
                    $variation_attributes[$option][$j] = XmlImportParser::factory($this->getXml(), $this->getCompleteVariationsXPath(), $this->getImport()->options[$option][$j], $file)
                        ->parse();
                    $this->tmp_files[] = $file;
                }
            }
            // Serialized attributes for product variations.
            $this->data['serialized_attributes'] = array();
            if (!empty($variation_attributes)) {
                foreach ($attributeNames as $j => $attribute_name) {
                    if (!in_array($attribute_name, array_keys($this->data['serialized_attributes']))) {
                        $this->data['serialized_attributes'][$attribute_name] = array(
                            'names' => $variation_attributes['variable_attribute_name'][$j],
                            'value' => $variation_attributes['variable_attribute_value'][$j],
                            'is_visible' => $variation_attributes['variable_is_visible'][$j],
                            'in_variation' => $variation_attributes['variable_in_variations'][$j],
                            'in_taxonomy' => $variation_attributes['variable_is_taxonomy'][$j],
                            'is_create_taxonomy_terms' => $variation_attributes['variable_create_taxonomy_in_not_exists'][$j]
                        );
                    }
                }
            }
        } catch (\Exception $e) {
            $this->log('<b>ERROR:</b> ' . $e->getMessage());
        }
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit