Plugin Directory

Changeset 3389676


Ignore:
Timestamp:
11/04/2025 12:58:56 PM (5 months ago)
Author:
dotMailer
Message:

Updating trunk for version 2.0.0

Location:
dotdigital-for-woocommerce/trunk
Files:
3 added
16 edited

Legend:

Unmodified
Added
Removed
  • dotdigital-for-woocommerce/trunk/admin/class-dotdigital-woocommerce-admin.php

    r3255822 r3389676  
    284284    {
    285285        echo '<p>' . esc_html(__('Choose how you gather consent for your SMS marketing subscribers.')) . '</p>';
    286         echo '<h2>' . esc_html(__('Dotdigital API')) . '</h2>';
     286        echo '<h3>' . esc_html(__('Dotdigital API')) . '</h3>';
    287287        echo '<p>' . esc_html(__('SMS marketing for WooCommerce uses the Dotdigital API.')) . '</p>';
    288288    }
     
    387387        add_settings_section(self::TRACKING_SECTION, __('Tracking'), null, $this->plugin_name . '-settings');
    388388        /**
    389          * Add settings field [enable site and roi tracking].
    390          */
    391         add_settings_field(Dotdigital_WooCommerce_Config::SITE_AND_ROI_TRACKING, __('Enable site and ROI tracking'), array($this, 'settings_page_render_checkbox'), $this->plugin_name . '-settings', self::TRACKING_SECTION, array('id' => Dotdigital_WooCommerce_Config::SITE_AND_ROI_TRACKING, 'name' => Dotdigital_WooCommerce_Config::SITE_AND_ROI_TRACKING, 'default_value' => Dotdigital_WooCommerce_Config::DEFAULT_SITE_AND_ROI_TRACKING_ENABLED));
    392         /**
    393389         * Add settings field [Select Region].
    394390         */
    395391        add_settings_field('selected_region', __('Select region'), array($this, 'settings_page_render_dropdown'), $this->plugin_name . '-settings', self::TRACKING_SECTION, array('id' => Dotdigital_WooCommerce_Config::REGION, 'name' => Dotdigital_WooCommerce_Config::REGION, 'default_value' => Dotdigital_WooCommerce_Config::DEFAULT_REGION, 'items' => array('1' => 'Region 1', '2' => 'Region 2', '3' => 'Region 3')));
    396392        /**
    397          * Add settings field [Profile Id].
    398          */
    399         add_settings_field(Dotdigital_WooCommerce_Config::WBT_PROFILE_ID_PATH, __('Web behavior tracking profile ID'), array($this, 'settings_page_render_text_input'), $this->plugin_name . '-settings', self::TRACKING_SECTION, array('id' => Dotdigital_WooCommerce_Config::WBT_PROFILE_ID_PATH, 'name' => Dotdigital_WooCommerce_Config::WBT_PROFILE_ID_PATH, 'default_value' => ''));
     393         * Add settings field [Dotdigital Tag ID].
     394         */
     395        add_settings_field(Dotdigital_WooCommerce_Config::WBT_PROFILE_ID_PATH, __('Dotdigital Tag ID'), array($this, 'settings_page_render_text_input'), $this->plugin_name . '-settings', self::TRACKING_SECTION, array('id' => Dotdigital_WooCommerce_Config::WBT_PROFILE_ID_PATH, 'name' => Dotdigital_WooCommerce_Config::WBT_PROFILE_ID_PATH, 'default_value' => ''));
     396        /**
     397         * Add settings field [enable roi tracking].
     398         */
     399        add_settings_field(Dotdigital_WooCommerce_Config::SITE_AND_ROI_TRACKING, __('Enable ROI tracking'), array($this, 'settings_page_render_checkbox'), $this->plugin_name . '-settings', self::TRACKING_SECTION, array('id' => Dotdigital_WooCommerce_Config::SITE_AND_ROI_TRACKING, 'name' => Dotdigital_WooCommerce_Config::SITE_AND_ROI_TRACKING, 'default_value' => Dotdigital_WooCommerce_Config::DEFAULT_SITE_AND_ROI_TRACKING_ENABLED));
    400400        register_setting($this->plugin_name . '-settings', Dotdigital_WooCommerce_Config::REGION);
    401401        register_setting($this->plugin_name . '-settings', Dotdigital_WooCommerce_Config::SITE_AND_ROI_TRACKING);
     
    412412         * Add settings section for abandoned cart configurations.
    413413         */
    414         add_settings_section(self::ABANDONED_CART_SECTION, __('Abandoned carts'), function () {
    415             echo '<p>' . esc_html__('A web behaviour tracking profile ID is required to modify these settings.', 'dotdigital-woocommerce') . '</p>';
     414        add_settings_section(self::ABANDONED_CART_SECTION, __('Abandoned carts (deprecated, see Help Text)'), function () {
     415            echo '<p>' . esc_html__('These settings have moved. Abandoned cart program selection, enrolment delay and enabling guest carts, must now be configured in your Dotdigital account. Please visit Connect > Connect website and edit the Abandoned cart settings.', 'dotdigital-woocommerce') . '</p>';
    416416        }, $this->plugin_name . '-settings');
    417417        /**
    418418         * Add settings field [enable abandoned cart].
    419419         */
    420         add_settings_field(Dotdigital_WooCommerce_Config::AC_STATUS_PATH, __('Enable abandoned cart'), array($this, 'settings_page_render_checkbox'), $this->plugin_name . '-settings', self::ABANDONED_CART_SECTION, array('id' => Dotdigital_WooCommerce_Config::AC_STATUS_PATH, 'name' => Dotdigital_WooCommerce_Config::AC_STATUS_PATH, 'default_value' => '', 'disabled' => $this->is_disabled_field()));
     420        add_settings_field(Dotdigital_WooCommerce_Config::AC_STATUS_PATH, __('Enable abandoned cart'), array($this, 'settings_page_render_checkbox'), $this->plugin_name . '-settings', self::ABANDONED_CART_SECTION, array('id' => Dotdigital_WooCommerce_Config::AC_STATUS_PATH, 'name' => Dotdigital_WooCommerce_Config::AC_STATUS_PATH, 'default_value' => '', 'disabled' => \true));
    421421        /**
    422422         * Add settings field [AC program Id].
    423423         */
    424         add_settings_field(Dotdigital_WooCommerce_Config::PROGRAM_ID_PATH, __('Abandoned cart program ID'), array($this, 'settings_page_render_text_input'), $this->plugin_name . '-settings', self::ABANDONED_CART_SECTION, array('id' => Dotdigital_WooCommerce_Config::PROGRAM_ID_PATH, 'name' => Dotdigital_WooCommerce_Config::PROGRAM_ID_PATH, 'default_value' => '', 'disabled' => $this->is_disabled_field()));
     424        add_settings_field(Dotdigital_WooCommerce_Config::PROGRAM_ID_PATH, __('Abandoned cart program ID'), array($this, 'settings_page_render_text_input'), $this->plugin_name . '-settings', self::ABANDONED_CART_SECTION, array('id' => Dotdigital_WooCommerce_Config::PROGRAM_ID_PATH, 'name' => Dotdigital_WooCommerce_Config::PROGRAM_ID_PATH, 'default_value' => '', 'disabled' => \true));
    425425        /**
    426426         * Add settings field [Cart delay].
    427427         */
    428         add_settings_field(Dotdigital_WooCommerce_Config::CART_DELAY_PATH, __('Allow abandoned cart delay (minutes)'), array($this, 'settings_page_render_numeric_input'), $this->plugin_name . '-settings', self::ABANDONED_CART_SECTION, array('id' => Dotdigital_WooCommerce_Config::CART_DELAY_PATH, 'name' => Dotdigital_WooCommerce_Config::CART_DELAY_PATH, 'default_value' => '', 'disabled' => $this->is_disabled_field()));
     428        add_settings_field(Dotdigital_WooCommerce_Config::CART_DELAY_PATH, __('Allow abandoned cart delay (minutes)'), array($this, 'settings_page_render_numeric_input'), $this->plugin_name . '-settings', self::ABANDONED_CART_SECTION, array('id' => Dotdigital_WooCommerce_Config::CART_DELAY_PATH, 'name' => Dotdigital_WooCommerce_Config::CART_DELAY_PATH, 'default_value' => '', 'disabled' => \true));
    429429        /**
    430430         * Add settings field [Allow AC for non subscribers].
    431431         */
    432         add_settings_field(Dotdigital_WooCommerce_Config::ALLOW_NON_SUBSCRIBERS_PATH, __('Allow abandoned cart for non-subscribed contacts'), array($this, 'settings_page_render_checkbox'), $this->plugin_name . '-settings', self::ABANDONED_CART_SECTION, array('id' => Dotdigital_WooCommerce_Config::ALLOW_NON_SUBSCRIBERS_PATH, 'name' => Dotdigital_WooCommerce_Config::ALLOW_NON_SUBSCRIBERS_PATH, 'default_value' => '', 'disabled' => $this->is_disabled_field()));
     432        add_settings_field(Dotdigital_WooCommerce_Config::ALLOW_NON_SUBSCRIBERS_PATH, __('Allow abandoned cart for non-subscribed contacts'), array($this, 'settings_page_render_checkbox'), $this->plugin_name . '-settings', self::ABANDONED_CART_SECTION, array('id' => Dotdigital_WooCommerce_Config::ALLOW_NON_SUBSCRIBERS_PATH, 'name' => Dotdigital_WooCommerce_Config::ALLOW_NON_SUBSCRIBERS_PATH, 'default_value' => '', 'disabled' => \true));
    433433        register_setting($this->plugin_name . '-settings', Dotdigital_WooCommerce_Config::PROGRAM_ID_PATH);
    434434        register_setting($this->plugin_name . '-settings', Dotdigital_WooCommerce_Config::CART_DELAY_PATH);
  • dotdigital-for-woocommerce/trunk/class-dotdigital-woocommerce-bootstrapper.php

    r3181550 r3389676  
    1414 *
    1515 * @wordpress-plugin
    16  * Plugin Name:       Dotdigital for WooCommerce
    17  * Description:       Connect your WooCommerce store to dotdigital and put customer, subscriber, product and order data at your fingertips.
    18  * Version:           1.4.5
    19  * Author:            dotdigital
    20  * Author URI:        https://www.dotdigital.com/
    21  * License:           MIT
    22  * License URI:       https://opensource.org/licenses/MIT
    23  * Text Domain:       dotdigital-woocommerce
    24  * Domain Path:       /languages
     16 * Plugin Name:          Dotdigital for WooCommerce
     17 * Description:          Connect your WooCommerce store to dotdigital and put customer, subscriber, product and order data at your fingertips.
     18 * Version:              2.0.0
     19 * Requires PHP:         7.4
     20 * Requires at least:    5.7
     21 * Author:               dotdigital
     22 * Author URI:           https://www.dotdigital.com/
     23 * License:              MIT
     24 * License URI:          https://opensource.org/licenses/MIT
     25 * Text Domain:          dotdigital-woocommerce
     26 * Domain Path:          /languages
    2527 * WC requires at least: 6.0.0
    26  * WC tested up to: 9.3.3
     28 * WC tested up to:      10.0.0
    2729 *
    2830 * MIT License
     
    5860use Dotdigital_WooCommerce\Includes\Dotdigital_WooCommerce_Deactivator;
    5961use Dotdigital_WooCommerce\Includes\Dotdigital_WooCommerce_Activator;
     62use Dotdigital_WooCommerce\Includes\Dotdigital_WooCommerce_Config;
    6063define('DOTDIGITAL_FOR_WOOCOMMERCE_PLUGIN_NAME', 'dotdigital-for-woocommerce');
    61 define('DOTDIGITAL_FOR_WOOCOMMERCE_PLUGIN_VERSION', '1.4.5');
     64define('DOTDIGITAL_FOR_WOOCOMMERCE_PLUGIN_VERSION', '2.0.0');
    6265define('DOTDIGITAL_FOR_WOOCOMMERCE_PLUGIN_DIR_PATH', __DIR__);
    6366define('DOTDIGITAL_FOR_WOOCOMMERCE_PUBLIC_MEDIA_PATH', plugin_dir_url(__FILE__) . 'public/image/');
     
    8790     * @access   public
    8891     * @var      string    $webapp_url    dotdigital URL.
     92     * @deprecated Use the constant WEBAPP_URL instead.
     93     * @see Dotdigital_WooCommerce_Config::WEBAPP_URL
    8994     */
    9095    public static $webapp_url = 'https://login.dotdigital.com';
     
    95100     * @access   public
    96101     * @var      string    $tracking_url    dotdigital tracking URL.
     102     * @deprecated Use the constant TRACKING_URL instead.
     103     * @see Dotdigital_WooCommerce_Config::TRACKING_URL
    97104     */
    98105    public static $tracking_url = 'https://t.trackedlink.net';
     
    103110    public static function activate_dotdigital_woocommerce()
    104111    {
    105         (new Dotdigital_WooCommerce_Activator(self::$plugin_name, self::$tracking_url, self::get_version()))->activate();
     112        (new Dotdigital_WooCommerce_Activator(self::$plugin_name, self::get_tracking_url(), self::get_version()))->activate();
    106113    }
    107114    /**
     
    111118    public static function deactivate_dotdigital_woocommerce()
    112119    {
    113         (new Dotdigital_WooCommerce_Deactivator(self::$plugin_name, self::$tracking_url))->deactivate();
     120        (new Dotdigital_WooCommerce_Deactivator(self::$plugin_name, self::get_tracking_url()))->deactivate();
    114121    }
    115122    /**
     
    128135         * admin-specific hooks, and public-facing site hooks.
    129136         */
    130         (new Dotdigital_WooCommerce(self::$plugin_name, plugin_basename(__FILE__), self::$webapp_url, self::get_version(), self::$tracking_url))->run();
     137        (new Dotdigital_WooCommerce(self::$plugin_name, plugin_basename(__FILE__), self::get_webapp_url(), self::get_version(), self::get_tracking_url()))->run();
    131138    }
    132139    /**
     
    143150        }
    144151    }
     152    /**
     153     * Get the webapp URL.
     154     *
     155     * Webapp URL can be overridden by setting DOTDIGITAL_WEBAPP_URL in wp-config.php.
     156     *
     157     * @return string
     158     */
     159    private static function get_webapp_url()
     160    {
     161        if (defined('DOTDIGITAL_WEBAPP_URL')) {
     162            return constant('DOTDIGITAL_WEBAPP_URL');
     163        }
     164        return Dotdigital_WooCommerce_Config::WEBAPP_URL;
     165    }
     166    /**
     167     * Get the tracking URL.
     168     *
     169     * Tracking URL can be overridden by setting DOTDIGITAL_TRACKING_URL in wp-config.php.
     170     *
     171     * @return string
     172     */
     173    private static function get_tracking_url()
     174    {
     175        if (defined('DOTDIGITAL_TRACKING_URL')) {
     176            return constant('DOTDIGITAL_TRACKING_URL');
     177        }
     178        return Dotdigital_WooCommerce_Config::TRACKING_URL;
     179    }
    145180}
    146181register_activation_hook(__FILE__, array('Dotdigital_WooCommerce\Dotdigital_WooCommerce_Bootstrapper', 'activate_dotdigital_woocommerce'));
  • dotdigital-for-woocommerce/trunk/includes/cart/class-dotdigital-woocommerce-cart-insight-handler.php

    r3255822 r3389676  
    2828    {
    2929        $cart = new \Dotdigital_WooCommerce\Includes\Cart\Dotdigital_WooCommerce_Cart();
    30         $ac_enabled = get_option(Dotdigital_WooCommerce_Config::AC_STATUS_PATH);
    31         $abandoned_cart_program_id = get_option(Dotdigital_WooCommerce_Config::PROGRAM_ID_PATH, null);
    3230        /**
    3331         * If we haven't got a cart_id, that means we've no user OR there are no items in the cart.
    34          * If AC is not enabled, we exit.
    35          * If we haven't got an AC program_id specified, that means we don't need to track abandoned carts.
    3632         */
    37         if (empty($cart->get_cart_id()) || !$ac_enabled || !$abandoned_cart_program_id) {
     33        if (empty($cart->get_cart_id())) {
    3834            return \false;
    3935        }
    40         $subscriber = new Dotdigital_WooCommerce_Subscriber();
    41         $customer = new Dotdigital_WooCommerce_Customer();
    42         if (empty($customer->get_customer_email())) {
    43             return \true;
    44         }
    45         if (get_option(Dotdigital_WooCommerce_Config::ALLOW_NON_SUBSCRIBERS_PATH, Dotdigital_WooCommerce_Config::DEFAULT_ABANDONED_CART_ALLOW_NON_SUBSCRIBERS)) {
    46             return \true;
    47         }
    48         return $subscriber->is_subscribed($customer->get_customer_email());
     36        return \true;
    4937    }
    5038    /**
     
    7563            return new \Dotdigital_WooCommerce\Includes\Cart\Dotdigital_WooCommerce_Cart_Insight_Order_Complete($order_id);
    7664        }
    77         return new \Dotdigital_WooCommerce\Includes\Cart\Dotdigital_WooCommerce_Cart_Insight();
     65        $cart_insight = new \Dotdigital_WooCommerce\Includes\Cart\Dotdigital_WooCommerce_Cart_Insight();
     66        if (is_checkout() || $this->is_ajax_from_checkout()) {
     67            $cart_insight->set_cart_phase('ORDER_CHECKOUT');
     68        }
     69        return $cart_insight;
     70    }
     71    /**
     72     * Check if current AJAX request originated from checkout page.
     73     *
     74     * @return bool
     75     */
     76    private function is_ajax_from_checkout()
     77    {
     78        if (!wp_doing_ajax()) {
     79            return \false;
     80        }
     81        // WordPress.Security.NonceVerification.Missing is acceptable for AJAX action checking.
     82        // phpcs:ignore WordPress.Security.NonceVerification.Missing
     83        $action = isset($_POST['action']) ? sanitize_text_field(wp_unslash($_POST['action'])) : '';
     84        return 'update_session' === $action;
    7885    }
    7986}
  • dotdigital-for-woocommerce/trunk/includes/cart/class-dotdigital-woocommerce-cart-insight-order-complete.php

    r3255822 r3389676  
    3333    {
    3434        $this->order = wc_get_order($order_id);
    35     }
    36     /**
    37      * Set the cart_phase.
    38      *
    39      * @return string
    40      */
    41     protected function get_cart_phase()
    42     {
    43         return 'ORDER_COMPLETE';
     35        $this->set_cart_phase('ORDER_COMPLETE');
    4436    }
    4537    /**
     
    9789        return $this->order->get_data()['line_items'];
    9890    }
     91    /**
     92     * Modify payload data.
     93     *
     94     * @param array $data The payload data.
     95     *
     96     * @return array
     97     */
     98    protected function modify_payload($data)
     99    {
     100        $data['order_id'] = (string) $this->order->get_id();
     101        return $data;
     102    }
    99103}
  • dotdigital-for-woocommerce/trunk/includes/cart/class-dotdigital-woocommerce-cart-insight.php

    r3255822 r3389676  
    2222{
    2323    /**
     24     * Cart phase.
     25     *
     26     * @var string
     27     */
     28    private $cart_phase = 'CUSTOMER_LOGIN';
     29    /**
    2430     * Return an array of data to be consumed by cart-insight.js
    2531     *
     
    3642        $dotdigital_woocommerce_category_helper = new Dotdigital_WooCommerce_Category();
    3743        $image_finder = new Dotdigital_WooCommerce_Image();
    38         $data = array('customer_email' => $customer->get_customer_email(), 'program_id' => $this->get_program_id(), 'cart_delay' => $this->get_cart_delay(), 'cart_id' => $dd_cart->get_cart_id(), 'cart_phase' => $this->get_cart_phase(), 'currency' => get_woocommerce_currency(), 'subtotal' => round($this->get_subtotal(), 2), 'shipping' => round($this->get_shipping(), 2), 'discount_amount' => round($this->get_discount_amount(), 2), 'tax_amount' => round($this->get_tax_amount(), 2), 'grand_total' => round($this->get_grand_total(), 2), 'cart_url' => wc_get_cart_url());
     44        $data = array('customer_email' => $customer->get_customer_email(), 'cart_id' => $dd_cart->get_cart_id(), 'cart_phase' => $this->get_cart_phase(), 'currency' => get_woocommerce_currency(), 'subtotal' => round($this->get_subtotal(), 2), 'shipping' => round($this->get_shipping(), 2), 'discount_amount' => round($this->get_discount_amount(), 2), 'tax_amount' => round($this->get_tax_amount(), 2), 'grand_total' => round($this->get_grand_total(), 2), 'cart_url' => wc_get_cart_url());
     45        $data = $this->modify_payload($data);
    3946        $line_items = array();
    4047        foreach ($this->get_line_items() as $cart_item) {
     
    4552                // phpcs:ignore WordPress.Security.EscapeOutput
    4653            }
    47             $line_item_data = array('sku' => $product->get_sku(), 'name' => $product->get_name(), 'description' => $product->get_short_description(), 'category' => $dotdigital_woocommerce_category_helper->get_product_categories($product->get_id()), 'quantity' => $cart_item['quantity'], 'total_price' => round($cart_item['line_total'], 2), 'total_price_incl_tax' => round($cart_item['line_total'] + $cart_item['line_tax'], 2), 'image_url' => $image_finder->get_product_image_url($product), 'product_url' => get_permalink($product->get_id()));
     54            $line_item_data = array('id' => (string) $product->get_id(), 'sku' => $product->get_sku(), 'name' => $product->get_name(), 'description' => $product->get_short_description(), 'categories' => $dotdigital_woocommerce_category_helper->get_product_categories($product->get_id()), 'quantity' => $cart_item['quantity'], 'total_price' => round($cart_item['line_total'], 2), 'total_price_incl_tax' => round($cart_item['line_total'] + $cart_item['line_tax'], 2), 'image_url' => $image_finder->get_product_image_url($product), 'product_url' => get_permalink($product->get_id()));
    4855            if ('variable' === $product->get_type()) {
    4956                $product = wc_get_product($cart_item['variation_id']);
     
    6269    }
    6370    /**
    64      * Get the stored program_id option.
     71     * Modify payload data.
     72     * Override in subclasses to add additional data to the payload.
    6573     *
    66      * @return int
     74     * @param array $data The base payload data.
     75     * @return array The extended payload data.
    6776     */
    68     private function get_program_id()
     77    protected function modify_payload($data)
    6978    {
    70         return (int) get_option(Dotdigital_WooCommerce_Config::PROGRAM_ID_PATH, 0);
    71     }
    72     /**
    73      * Get the stored cart_delay option.
    74      *
    75      * @return int
    76      */
    77     private function get_cart_delay()
    78     {
    79         return (int) get_option(Dotdigital_WooCommerce_Config::CART_DELAY_PATH, 0);
     79        return $data;
    8080    }
    8181    /**
    8282     * Set the cart_phase.
     83     *
     84     * @param string $cart_phase The cart phase.
     85     *
     86     * @return void
     87     */
     88    public function set_cart_phase($cart_phase)
     89    {
     90        $this->cart_phase = $cart_phase;
     91    }
     92    /**
     93     * Get the cart_phase.
    8394     *
    8495     * @return string
     
    8697    protected function get_cart_phase()
    8798    {
    88         return 'CUSTOMER_LOGIN';
     99        return $this->cart_phase;
    89100    }
    90101    /**
  • dotdigital-for-woocommerce/trunk/includes/category/class-dotdigital-woocommerce-category.php

    r3255822 r3389676  
    2121     *
    2222     * @param int $product_id The current product id.
    23      * @return string
     23     * @return array
    2424     */
    2525    public function get_product_categories($product_id)
     
    2828        $wc_terms = get_the_terms($product_id, 'product_cat');
    2929        if (!$wc_terms) {
    30             return '';
     30            return $categories;
    3131        }
    3232        foreach ($wc_terms as $wc_term) {
    3333            $categories[] = $wc_term->name;
    3434        }
    35         return implode(',', $categories);
     35        return $categories;
    3636    }
    3737}
  • dotdigital-for-woocommerce/trunk/includes/class-dotdigital-woocommerce-config.php

    r3255822 r3389676  
    1919{
    2020    const TRACKING_URL = 'https://t.trackedlink.net';
     21    const WEBAPP_URL = 'https://login.dotdigital.com';
    2122    const API_ENDPOINT = 'https://r1-api.dotdigital.com';
    2223    /**
  • dotdigital-for-woocommerce/trunk/includes/tracking/class-dotdigital-woocommerce-last-browsed-products.php

    r3255822 r3389676  
    3434        $image_finder = new Dotdigital_WooCommerce_Image();
    3535        try {
    36             return array('product_name' => $product->get_name(), 'product_sku' => $product->get_sku(), 'product_price' => round((float) $product->get_regular_price(), 2), 'product_url' => get_permalink($product->get_id()), 'product_image_path' => $image_finder->get_product_image_url($product), 'product_status' => $this->get_product_stock_status_from_key($product->get_stock_status()), 'product_categories' => $dotdigital_woocommerce_category_helper->get_product_categories($product_id), 'product_description' => $product->get_description(), 'product_currency' => get_woocommerce_currency(), 'product_specialPrice' => $this->get_special_price($product));
     36            return array('productId' => (string) $product->get_id(), 'sku' => $product->get_sku(), 'name' => $product->get_name(), 'url' => get_permalink($product->get_id()), 'imageUrl' => $image_finder->get_product_image_url($product), 'price' => round((float) $product->get_regular_price(), 2), 'currency' => get_woocommerce_currency(), 'status' => $this->get_product_stock_status_from_key($product->get_stock_status()), 'categories' => $dotdigital_woocommerce_category_helper->get_product_categories($product_id), 'description' => $product->get_description(), 'salePrice' => $this->get_special_price($product), 'stock' => $product->get_stock_quantity() ?? 0);
    3737        } catch (\Throwable $e) {
    3838            return array();
  • dotdigital-for-woocommerce/trunk/public/class-dotdigital-woocommerce-public.php

    r3255822 r3389676  
    188188    {
    189189        $wbt_profile_id = get_option(Dotdigital_WooCommerce_Config::WBT_PROFILE_ID_PATH);
    190         if (!$wbt_profile_id) {
    191             return;
    192         }
     190        $region = get_option(Dotdigital_WooCommerce_Config::REGION);
     191        if (!$wbt_profile_id || !$region) {
     192            return;
     193        }
     194        wp_enqueue_script('wbt-dd-tag', plugin_dir_url(__FILE__) . 'js/tracking/dd-tag.js', array(), $this->version, \true);
    193195        wp_enqueue_script('wbt', plugin_dir_url(__FILE__) . 'js/tracking/web-behaviour-tracking.js', array(), $this->version, \true);
    194         wp_localize_script('wbt', 'wbt_data', array('profile_id' => $wbt_profile_id));
     196        wp_localize_script('wbt', 'wbt_data', array('region' => $region, 'profile_id' => $wbt_profile_id));
    195197        $cart_insight_handler = new Dotdigital_WooCommerce_Cart_Insight_Handler();
    196198        wp_enqueue_script('cart_insight', plugin_dir_url(__FILE__) . 'js/tracking/cart-insight.js', array('jquery'), $this->version, \true);
  • dotdigital-for-woocommerce/trunk/public/js/tracking/cart-insight.js

    r3255822 r3389676  
    55
    66    if (data.customer_email) {
    7         window.dmPt( "identify", data.customer_email );
     7        window.ddg.identify({ email: data.customer_email });
    88    }
    99
    10     cartInsight(data);
     10    cartInsight (data);
    1111
    1212    function cartInsight(data) {
     
    1515        }
    1616
    17         window.dmPt(
    18             "cartInsight",
    19             {
    20                 "programID": data.program_id,
    21                 "cartDelay": data.cart_delay,
    22                 "cartID": data.cart_id,
    23                 "cartPhase": data.cart_phase,
    24                 "currency": data.currency,
    25                 "subtotal": data.subtotal,
    26                 "shipping": data.shipping,
    27                 "discountAmount": data.discount_amount,
    28                 "taxAmount": data.tax_amount,
    29                 "grandTotal": data.grand_total,
    30                 "cartUrl": data.cart_url,
    31                 "lineItems": mapLineItems( data.line_items )
    32             }
    33         );
     17        const cartData = {
     18            "cartId": data.cart_id,
     19            "cartPhase": data.cart_phase,
     20            "currency": data.currency,
     21            "subtotal": data.subtotal,
     22            "shipping": data.shipping,
     23            "discountAmount": data.discount_amount,
     24            "taxAmount": data.tax_amount,
     25            "grandTotal": data.grand_total,
     26            "cartUrl": data.cart_url,
     27            "products": mapLineItems( data.line_items )
     28        }
     29
     30        if(data.order_id){
     31            cartData.orderId = data.order_id;
     32        }
     33
     34        if (data.cart_phase === 'ORDER_COMPLETE') {
     35            window.ddg.purchaseComplete(cartData);
     36        } else if (data.cart_phase === 'ORDER_CHECKOUT') {
     37            window.ddg.checkout(cartData);
     38        } else {
     39            window.ddg.cartUpdate(cartData);
     40        }
    3441    }
    3542
    3643    function mapBaseItem(item) {
    3744        return {
     45            productId: item.id,
    3846            sku: item.sku,
    3947            name: item.name,
     
    4452            quantity: item.quantity,
    4553            totalPrice: item.total_price,
    46             totalPrice_incl_tax: item.total_price_incl_tax,
     54            totalPriceInclTax: item.total_price_incl_tax,
    4755            imageUrl: item.image_url,
    4856            productUrl: item.product_url
     
    6775                if (response.data) {
    6876                    if (args.email && typeof window.dmPt !== 'undefined') {
    69                         window.dmPt('identify', args.email);
     77                        window.ddg.identify({ email: args.email });
    7078                    }
    7179                    if (response.data.cart_id) {
     
    7886
    7987    $(function() {
     88
    8089        $( document.body ).on(
    81             'added_to_cart removed_from_cart updated_cart_totals',
    82             function() {
     90            'added_to_cart removed_from_cart updated_cart_totals wc_cart_emptied cart_page_refreshed cart_totals_refreshed',
     91            function(e) {
    8392                ajaxRefreshCartInsight({
    8493                    action: 'update_cart'
     
    8897
    8998        $( document.body ).on(
     99            'wc-blocks_added_to_cart wc-blocks_removed_from_cart',
     100            function(e) {
     101                ajaxRefreshCartInsight({
     102                    action: 'update_cart'
     103                });
     104            }
     105        );
     106
     107        // WooCommerce Blocks - Cart page events
     108        if (typeof wp !== 'undefined' && wp.hooks) {
     109            wp.hooks.addAction('experimental__woocommerce_blocks-cart-set-item-quantity', 'cart-insight', function() {
     110                ajaxRefreshCartInsight({ action: 'update_cart' });
     111            });
     112
     113            wp.hooks.addAction('experimental__woocommerce_blocks-cart-remove-item', 'cart-insight', function() {
     114                ajaxRefreshCartInsight({ action: 'update_cart' });
     115            });
     116        }
     117
     118        $( document.body ).on(
    90119            'blur',
    91             'input#dd-email, input#billing_email',
     120            'input#dd-email, input#billing_email, .wc-block-components-address-form input#email',
    92121            function() {
    93122                ajaxRefreshCartInsight({
  • dotdigital-for-woocommerce/trunk/public/js/tracking/web-behaviour-tracking.js

    r3255822 r3389676  
    1 (function(w,d,u,t,o,c){w['dmtrackingobjectname'] = o;c = d.createElement( t );c.async = 1;c.src = u;t = d.getElementsByTagName( t )[0];t.parentNode.insertBefore( c,t );w[o] = w[o] || function(){(w[o].q = w[o].q || []).push( arguments );};
    2 })( window, document, '//static.trackedweb.net/js/_dmptv4.js', 'script', 'dmPt' );
     1if (wbt_data.region && wbt_data.profile_id ) {
     2    window.ddg.init(wbt_data.region, wbt_data.profile_id);
    33
    4 window.dmPt( 'create', wbt_data.profile_id );
    5 
    6 if (typeof product_data !== 'undefined') {
    7   window.dmPt('track', product_data.data || {});
    8 } else {
    9   window.dmPt('track');
     4    if (typeof product_data !== 'undefined') {
     5        window.ddg.productBrowse(product_data.data);
     6    }
    107}
  • dotdigital-for-woocommerce/trunk/readme.txt

    r3255794 r3389676  
    11=== Dotdigital for WooCommerce ===
    22Contributors: dotMailer, amucklow, fstrezos, pvpcookie
    3 Requires at least: 5.7
    4 Tested up to: 6.6
    5 Requires PHP: 7.4
    6 Stable tag: 1.4.5
     3Tested up to: 6.8
     4Stable tag: 2.0.0
    75License: MIT
    86License URI: https://opensource.org/licenses/MIT
     
    6866
    6967== Changelog ==
     68
     69= 2.0.0 =
     70
     71**What’s new**
     72- We have implemented the Dotdigital Tag for unified page tracking, web behavior tracking, abandoned carts and abandoned browse.
     73
     74**Improvements**
     75- We updated the plugin’s JS dependencies.
     76
     77**Notes**
     78- Merchants must re-configure abandoned cart behaviour in Dotdigital with this release.
     79
     80= 1.4.6 =
     81
     82**Improvements**
     83- It is now possible to override the webapp and tracking URLs to enable testing in internal Dotdigital environments.
    7084
    7185= 1.4.5 =
  • dotdigital-for-woocommerce/trunk/vendor/autoload.php

    r3255822 r3389676  
    1515        }
    1616    }
    17     trigger_error(
    18         $err,
    19         E_USER_ERROR
    20     );
     17    throw new RuntimeException($err);
    2118}
    2219
  • dotdigital-for-woocommerce/trunk/vendor/composer/InstalledVersions.php

    r3255822 r3389676  
    2626{
    2727    /**
     28     * @var string|null if set (by reflection by Composer), this should be set to the path where this class is being copied to
     29     * @internal
     30     */
     31    private static $selfDir = null;
     32    /**
    2833     * @var mixed[]|null
    2934     * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
     
    281286    }
    282287    /**
     288     * @return string
     289     */
     290    private static function getSelfDir()
     291    {
     292        if (self::$selfDir === null) {
     293            self::$selfDir = strtr(__DIR__, '\\', '/');
     294        }
     295        return self::$selfDir;
     296    }
     297    /**
    283298     * @return array[]
    284299     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
     
    292307        $copiedLocalDir = \false;
    293308        if (self::$canGetVendors) {
    294             $selfDir = strtr(__DIR__, '\\', '/');
     309            $selfDir = self::getSelfDir();
    295310            foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
    296311                $vendorDir = strtr($vendorDir, '\\', '/');
  • dotdigital-for-woocommerce/trunk/vendor/composer/installed.php

    r3255822 r3389676  
    33namespace Dotdigital_Woo_Vendor;
    44
    5 return array('root' => array('name' => 'dotdigital/dotdigital-for-woocommerce', 'pretty_version' => '1.4.4', 'version' => '1.4.4.0', 'reference' => null, 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev' => \false), 'versions' => array('clue/stream-filter' => array('pretty_version' => 'v1.7.0', 'version' => '1.7.0.0', 'reference' => '049509fef80032cb3f051595029ab75b49a3c2f7', 'type' => 'library', 'install_path' => __DIR__ . '/../clue/stream-filter', 'aliases' => array(), 'dev_requirement' => \false), 'dotdigital/dotdigital-for-woocommerce' => array('pretty_version' => '1.4.4', 'version' => '1.4.4.0', 'reference' => null, 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev_requirement' => \false), 'dotdigital/dotdigital-php' => array('pretty_version' => '2.6.0', 'version' => '2.6.0.0', 'reference' => '99367b94b693264db2eba459435670c5bf71651e', 'type' => 'library', 'install_path' => __DIR__ . '/../dotdigital/dotdigital-php', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/guzzle' => array('pretty_version' => '7.9.2', 'version' => '7.9.2.0', 'reference' => 'd281ed313b989f213357e3be1a179f02196ac99b', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/guzzle', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/promises' => array('pretty_version' => '2.0.4', 'version' => '2.0.4.0', 'reference' => 'f9c436286ab2892c7db7be8c8da4ef61ccf7b455', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/promises', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/psr7' => array('pretty_version' => '2.7.0', 'version' => '2.7.0.0', 'reference' => 'a70f5c95fb43bc83f07c9c948baa0dc1829bf201', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/psr7', 'aliases' => array(), 'dev_requirement' => \false), 'php-http/async-client-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '*', 1 => '1.0')), 'php-http/client-common' => array('pretty_version' => '2.7.2', 'version' => '2.7.2.0', 'reference' => '0cfe9858ab9d3b213041b947c881d5b19ceeca46', 'type' => 'library', 'install_path' => __DIR__ . '/../php-http/client-common', 'aliases' => array(), 'dev_requirement' => \false), 'php-http/client-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '*', 1 => '1.0')), 'php-http/curl-client' => array('pretty_version' => '2.3.2', 'version' => '2.3.2.0', 'reference' => '0b869922458b1cde9137374545ed4fff7ac83623', 'type' => 'library', 'install_path' => __DIR__ . '/../php-http/curl-client', 'aliases' => array(), 'dev_requirement' => \false), 'php-http/discovery' => array('pretty_version' => '1.20.0', 'version' => '1.20.0.0', 'reference' => '82fe4c73ef3363caed49ff8dd1539ba06044910d', 'type' => 'composer-plugin', 'install_path' => __DIR__ . '/../php-http/discovery', 'aliases' => array(), 'dev_requirement' => \false), 'php-http/httplug' => array('pretty_version' => '2.4.1', 'version' => '2.4.1.0', 'reference' => '5cad731844891a4c282f3f3e1b582c46839d22f4', 'type' => 'library', 'install_path' => __DIR__ . '/../php-http/httplug', 'aliases' => array(), 'dev_requirement' => \false), 'php-http/message' => array('pretty_version' => '1.16.2', 'version' => '1.16.2.0', 'reference' => '06dd5e8562f84e641bf929bfe699ee0f5ce8080a', 'type' => 'library', 'install_path' => __DIR__ . '/../php-http/message', 'aliases' => array(), 'dev_requirement' => \false), 'php-http/message-factory-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0')), 'php-http/promise' => array('pretty_version' => '1.3.1', 'version' => '1.3.1.0', 'reference' => 'fc85b1fba37c169a69a07ef0d5a8075770cc1f83', 'type' => 'library', 'install_path' => __DIR__ . '/../php-http/promise', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-client' => array('pretty_version' => '1.0.3', 'version' => '1.0.3.0', 'reference' => 'bb5906edc1c324c9a05aa0873d40117941e5fa90', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-client', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-client-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '*', 1 => '1.0')), 'psr/http-factory' => array('pretty_version' => '1.1.0', 'version' => '1.1.0.0', 'reference' => '2b4765fddfe3b508ac62f829e852b1501d3f6e8a', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-factory', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-factory-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '*', 1 => '1.0')), 'psr/http-message' => array('pretty_version' => '2.0', 'version' => '2.0.0.0', 'reference' => '402d35bcb92c70c026d1a6a9883f06b2ead23d71', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-message', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-message-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '*', 1 => '1.0')), 'ralouphie/getallheaders' => array('pretty_version' => '3.0.3', 'version' => '3.0.3.0', 'reference' => '120b605dfeb996808c31b6477290a714d356e822', 'type' => 'library', 'install_path' => __DIR__ . '/../ralouphie/getallheaders', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/deprecation-contracts' => array('pretty_version' => 'v2.5.3', 'version' => '2.5.3.0', 'reference' => '80d075412b557d41002320b96a096ca65aa2c98d', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/options-resolver' => array('pretty_version' => 'v5.4.40', 'version' => '5.4.40.0', 'reference' => 'bd1afbde6613a8d6b956115e0e14b196191fd0c4', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/options-resolver', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/polyfill-php73' => array('pretty_version' => 'v1.31.0', 'version' => '1.31.0.0', 'reference' => '0f68c03565dcaaf25a890667542e8bd75fe7e5bb', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php73', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/polyfill-php80' => array('pretty_version' => 'v1.31.0', 'version' => '1.31.0.0', 'reference' => '60328e362d4c2c802a54fcbf04f9d3fb892b4cf8', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php80', 'aliases' => array(), 'dev_requirement' => \false)));
     5return array('root' => array('name' => 'dotdigital/dotdigital-for-woocommerce', 'pretty_version' => '2.0.0', 'version' => '2.0.0.0', 'reference' => null, 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev' => \false), 'versions' => array('clue/stream-filter' => array('pretty_version' => 'v1.7.0', 'version' => '1.7.0.0', 'reference' => '049509fef80032cb3f051595029ab75b49a3c2f7', 'type' => 'library', 'install_path' => __DIR__ . '/../clue/stream-filter', 'aliases' => array(), 'dev_requirement' => \false), 'dotdigital/dotdigital-for-woocommerce' => array('pretty_version' => '2.0.0', 'version' => '2.0.0.0', 'reference' => null, 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev_requirement' => \false), 'dotdigital/dotdigital-php' => array('pretty_version' => '2.6.0', 'version' => '2.6.0.0', 'reference' => '99367b94b693264db2eba459435670c5bf71651e', 'type' => 'library', 'install_path' => __DIR__ . '/../dotdigital/dotdigital-php', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/guzzle' => array('pretty_version' => '7.9.2', 'version' => '7.9.2.0', 'reference' => 'd281ed313b989f213357e3be1a179f02196ac99b', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/guzzle', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/promises' => array('pretty_version' => '2.0.4', 'version' => '2.0.4.0', 'reference' => 'f9c436286ab2892c7db7be8c8da4ef61ccf7b455', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/promises', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/psr7' => array('pretty_version' => '2.7.0', 'version' => '2.7.0.0', 'reference' => 'a70f5c95fb43bc83f07c9c948baa0dc1829bf201', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/psr7', 'aliases' => array(), 'dev_requirement' => \false), 'php-http/async-client-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '*', 1 => '1.0')), 'php-http/client-common' => array('pretty_version' => '2.7.2', 'version' => '2.7.2.0', 'reference' => '0cfe9858ab9d3b213041b947c881d5b19ceeca46', 'type' => 'library', 'install_path' => __DIR__ . '/../php-http/client-common', 'aliases' => array(), 'dev_requirement' => \false), 'php-http/client-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '*', 1 => '1.0')), 'php-http/curl-client' => array('pretty_version' => '2.3.2', 'version' => '2.3.2.0', 'reference' => '0b869922458b1cde9137374545ed4fff7ac83623', 'type' => 'library', 'install_path' => __DIR__ . '/../php-http/curl-client', 'aliases' => array(), 'dev_requirement' => \false), 'php-http/discovery' => array('pretty_version' => '1.20.0', 'version' => '1.20.0.0', 'reference' => '82fe4c73ef3363caed49ff8dd1539ba06044910d', 'type' => 'composer-plugin', 'install_path' => __DIR__ . '/../php-http/discovery', 'aliases' => array(), 'dev_requirement' => \false), 'php-http/httplug' => array('pretty_version' => '2.4.1', 'version' => '2.4.1.0', 'reference' => '5cad731844891a4c282f3f3e1b582c46839d22f4', 'type' => 'library', 'install_path' => __DIR__ . '/../php-http/httplug', 'aliases' => array(), 'dev_requirement' => \false), 'php-http/message' => array('pretty_version' => '1.16.2', 'version' => '1.16.2.0', 'reference' => '06dd5e8562f84e641bf929bfe699ee0f5ce8080a', 'type' => 'library', 'install_path' => __DIR__ . '/../php-http/message', 'aliases' => array(), 'dev_requirement' => \false), 'php-http/message-factory-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0')), 'php-http/promise' => array('pretty_version' => '1.3.1', 'version' => '1.3.1.0', 'reference' => 'fc85b1fba37c169a69a07ef0d5a8075770cc1f83', 'type' => 'library', 'install_path' => __DIR__ . '/../php-http/promise', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-client' => array('pretty_version' => '1.0.3', 'version' => '1.0.3.0', 'reference' => 'bb5906edc1c324c9a05aa0873d40117941e5fa90', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-client', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-client-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '*', 1 => '1.0')), 'psr/http-factory' => array('pretty_version' => '1.1.0', 'version' => '1.1.0.0', 'reference' => '2b4765fddfe3b508ac62f829e852b1501d3f6e8a', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-factory', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-factory-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '*', 1 => '1.0')), 'psr/http-message' => array('pretty_version' => '2.0', 'version' => '2.0.0.0', 'reference' => '402d35bcb92c70c026d1a6a9883f06b2ead23d71', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-message', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-message-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '*', 1 => '1.0')), 'ralouphie/getallheaders' => array('pretty_version' => '3.0.3', 'version' => '3.0.3.0', 'reference' => '120b605dfeb996808c31b6477290a714d356e822', 'type' => 'library', 'install_path' => __DIR__ . '/../ralouphie/getallheaders', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/deprecation-contracts' => array('pretty_version' => 'v2.5.3', 'version' => '2.5.3.0', 'reference' => '80d075412b557d41002320b96a096ca65aa2c98d', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/options-resolver' => array('pretty_version' => 'v5.4.40', 'version' => '5.4.40.0', 'reference' => 'bd1afbde6613a8d6b956115e0e14b196191fd0c4', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/options-resolver', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/polyfill-php73' => array('pretty_version' => 'v1.31.0', 'version' => '1.31.0.0', 'reference' => '0f68c03565dcaaf25a890667542e8bd75fe7e5bb', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php73', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/polyfill-php80' => array('pretty_version' => 'v1.31.0', 'version' => '1.31.0.0', 'reference' => '60328e362d4c2c802a54fcbf04f9d3fb892b4cf8', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php80', 'aliases' => array(), 'dev_requirement' => \false)));
  • dotdigital-for-woocommerce/trunk/vendor/scoper-autoload.php

    r3255822 r3389676  
    3030    }
    3131}
     32humbug_phpscoper_expose_class('JsonException', 'Dotdigital_Woo_Vendor\JsonException');
    3233humbug_phpscoper_expose_class('Stringable', 'Dotdigital_Woo_Vendor\Stringable');
     34humbug_phpscoper_expose_class('UnhandledMatchError', 'Dotdigital_Woo_Vendor\UnhandledMatchError');
    3335humbug_phpscoper_expose_class('ValueError', 'Dotdigital_Woo_Vendor\ValueError');
    3436humbug_phpscoper_expose_class('Attribute', 'Dotdigital_Woo_Vendor\Attribute');
    3537humbug_phpscoper_expose_class('PhpToken', 'Dotdigital_Woo_Vendor\PhpToken');
    36 humbug_phpscoper_expose_class('UnhandledMatchError', 'Dotdigital_Woo_Vendor\UnhandledMatchError');
    37 humbug_phpscoper_expose_class('JsonException', 'Dotdigital_Woo_Vendor\JsonException');
    3838humbug_phpscoper_expose_class('ComposerAutoloaderInit4428d88a89890c368aa4fc3f77bebc6b', 'Dotdigital_Woo_Vendor\ComposerAutoloaderInit4428d88a89890c368aa4fc3f77bebc6b');
    3939
Note: See TracChangeset for help on using the changeset viewer.