Changeset 3389676
- Timestamp:
- 11/04/2025 12:58:56 PM (5 months ago)
- Location:
- dotdigital-for-woocommerce/trunk
- Files:
-
- 3 added
- 16 edited
-
admin/class-dotdigital-woocommerce-admin.php (modified) (3 diffs)
-
class-dotdigital-woocommerce-bootstrapper.php (modified) (8 diffs)
-
cypress.config.js (added)
-
includes/cart/class-dotdigital-woocommerce-cart-insight-handler.php (modified) (2 diffs)
-
includes/cart/class-dotdigital-woocommerce-cart-insight-order-complete.php (modified) (2 diffs)
-
includes/cart/class-dotdigital-woocommerce-cart-insight.php (modified) (5 diffs)
-
includes/category/class-dotdigital-woocommerce-category.php (modified) (2 diffs)
-
includes/class-dotdigital-woocommerce-config.php (modified) (1 diff)
-
includes/tracking/class-dotdigital-woocommerce-last-browsed-products.php (modified) (1 diff)
-
public/class-dotdigital-woocommerce-public.php (modified) (1 diff)
-
public/js/tracking/cart-insight.js (modified) (6 diffs)
-
public/js/tracking/dd-tag.js (added)
-
public/js/tracking/web-behaviour-tracking.js (modified) (1 diff)
-
readme.txt (modified) (2 diffs)
-
vendor/autoload.php (modified) (1 diff)
-
vendor/composer/InstalledVersions.php (modified) (3 diffs)
-
vendor/composer/installed.php (modified) (1 diff)
-
vendor/scoper-autoload.php (modified) (1 diff)
-
wp-cypress.config.js (added)
Legend:
- Unmodified
- Added
- Removed
-
dotdigital-for-woocommerce/trunk/admin/class-dotdigital-woocommerce-admin.php
r3255822 r3389676 284 284 { 285 285 echo '<p>' . esc_html(__('Choose how you gather consent for your SMS marketing subscribers.')) . '</p>'; 286 echo '<h 2>' . esc_html(__('Dotdigital API')) . '</h2>';286 echo '<h3>' . esc_html(__('Dotdigital API')) . '</h3>'; 287 287 echo '<p>' . esc_html(__('SMS marketing for WooCommerce uses the Dotdigital API.')) . '</p>'; 288 288 } … … 387 387 add_settings_section(self::TRACKING_SECTION, __('Tracking'), null, $this->plugin_name . '-settings'); 388 388 /** 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 /**393 389 * Add settings field [Select Region]. 394 390 */ 395 391 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'))); 396 392 /** 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)); 400 400 register_setting($this->plugin_name . '-settings', Dotdigital_WooCommerce_Config::REGION); 401 401 register_setting($this->plugin_name . '-settings', Dotdigital_WooCommerce_Config::SITE_AND_ROI_TRACKING); … … 412 412 * Add settings section for abandoned cart configurations. 413 413 */ 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 thesesettings.', '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>'; 416 416 }, $this->plugin_name . '-settings'); 417 417 /** 418 418 * Add settings field [enable abandoned cart]. 419 419 */ 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)); 421 421 /** 422 422 * Add settings field [AC program Id]. 423 423 */ 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)); 425 425 /** 426 426 * Add settings field [Cart delay]. 427 427 */ 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)); 429 429 /** 430 430 * Add settings field [Allow AC for non subscribers]. 431 431 */ 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)); 433 433 register_setting($this->plugin_name . '-settings', Dotdigital_WooCommerce_Config::PROGRAM_ID_PATH); 434 434 register_setting($this->plugin_name . '-settings', Dotdigital_WooCommerce_Config::CART_DELAY_PATH); -
dotdigital-for-woocommerce/trunk/class-dotdigital-woocommerce-bootstrapper.php
r3181550 r3389676 14 14 * 15 15 * @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 25 27 * WC requires at least: 6.0.0 26 * WC tested up to: 9.3.328 * WC tested up to: 10.0.0 27 29 * 28 30 * MIT License … … 58 60 use Dotdigital_WooCommerce\Includes\Dotdigital_WooCommerce_Deactivator; 59 61 use Dotdigital_WooCommerce\Includes\Dotdigital_WooCommerce_Activator; 62 use Dotdigital_WooCommerce\Includes\Dotdigital_WooCommerce_Config; 60 63 define('DOTDIGITAL_FOR_WOOCOMMERCE_PLUGIN_NAME', 'dotdigital-for-woocommerce'); 61 define('DOTDIGITAL_FOR_WOOCOMMERCE_PLUGIN_VERSION', ' 1.4.5');64 define('DOTDIGITAL_FOR_WOOCOMMERCE_PLUGIN_VERSION', '2.0.0'); 62 65 define('DOTDIGITAL_FOR_WOOCOMMERCE_PLUGIN_DIR_PATH', __DIR__); 63 66 define('DOTDIGITAL_FOR_WOOCOMMERCE_PUBLIC_MEDIA_PATH', plugin_dir_url(__FILE__) . 'public/image/'); … … 87 90 * @access public 88 91 * @var string $webapp_url dotdigital URL. 92 * @deprecated Use the constant WEBAPP_URL instead. 93 * @see Dotdigital_WooCommerce_Config::WEBAPP_URL 89 94 */ 90 95 public static $webapp_url = 'https://login.dotdigital.com'; … … 95 100 * @access public 96 101 * @var string $tracking_url dotdigital tracking URL. 102 * @deprecated Use the constant TRACKING_URL instead. 103 * @see Dotdigital_WooCommerce_Config::TRACKING_URL 97 104 */ 98 105 public static $tracking_url = 'https://t.trackedlink.net'; … … 103 110 public static function activate_dotdigital_woocommerce() 104 111 { 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(); 106 113 } 107 114 /** … … 111 118 public static function deactivate_dotdigital_woocommerce() 112 119 { 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(); 114 121 } 115 122 /** … … 128 135 * admin-specific hooks, and public-facing site hooks. 129 136 */ 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(); 131 138 } 132 139 /** … … 143 150 } 144 151 } 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 } 145 180 } 146 181 register_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 28 28 { 29 29 $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);32 30 /** 33 31 * 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.36 32 */ 37 if (empty($cart->get_cart_id()) || !$ac_enabled || !$abandoned_cart_program_id) {33 if (empty($cart->get_cart_id())) { 38 34 return \false; 39 35 } 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; 49 37 } 50 38 /** … … 75 63 return new \Dotdigital_WooCommerce\Includes\Cart\Dotdigital_WooCommerce_Cart_Insight_Order_Complete($order_id); 76 64 } 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; 78 85 } 79 86 } -
dotdigital-for-woocommerce/trunk/includes/cart/class-dotdigital-woocommerce-cart-insight-order-complete.php
r3255822 r3389676 33 33 { 34 34 $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'); 44 36 } 45 37 /** … … 97 89 return $this->order->get_data()['line_items']; 98 90 } 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 } 99 103 } -
dotdigital-for-woocommerce/trunk/includes/cart/class-dotdigital-woocommerce-cart-insight.php
r3255822 r3389676 22 22 { 23 23 /** 24 * Cart phase. 25 * 26 * @var string 27 */ 28 private $cart_phase = 'CUSTOMER_LOGIN'; 29 /** 24 30 * Return an array of data to be consumed by cart-insight.js 25 31 * … … 36 42 $dotdigital_woocommerce_category_helper = new Dotdigital_WooCommerce_Category(); 37 43 $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); 39 46 $line_items = array(); 40 47 foreach ($this->get_line_items() as $cart_item) { … … 45 52 // phpcs:ignore WordPress.Security.EscapeOutput 46 53 } 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())); 48 55 if ('variable' === $product->get_type()) { 49 56 $product = wc_get_product($cart_item['variation_id']); … … 62 69 } 63 70 /** 64 * Get the stored program_id option. 71 * Modify payload data. 72 * Override in subclasses to add additional data to the payload. 65 73 * 66 * @return int 74 * @param array $data The base payload data. 75 * @return array The extended payload data. 67 76 */ 68 pr ivate function get_program_id()77 protected function modify_payload($data) 69 78 { 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; 80 80 } 81 81 /** 82 82 * 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. 83 94 * 84 95 * @return string … … 86 97 protected function get_cart_phase() 87 98 { 88 return 'CUSTOMER_LOGIN';99 return $this->cart_phase; 89 100 } 90 101 /** -
dotdigital-for-woocommerce/trunk/includes/category/class-dotdigital-woocommerce-category.php
r3255822 r3389676 21 21 * 22 22 * @param int $product_id The current product id. 23 * @return string23 * @return array 24 24 */ 25 25 public function get_product_categories($product_id) … … 28 28 $wc_terms = get_the_terms($product_id, 'product_cat'); 29 29 if (!$wc_terms) { 30 return '';30 return $categories; 31 31 } 32 32 foreach ($wc_terms as $wc_term) { 33 33 $categories[] = $wc_term->name; 34 34 } 35 return implode(',', $categories);35 return $categories; 36 36 } 37 37 } -
dotdigital-for-woocommerce/trunk/includes/class-dotdigital-woocommerce-config.php
r3255822 r3389676 19 19 { 20 20 const TRACKING_URL = 'https://t.trackedlink.net'; 21 const WEBAPP_URL = 'https://login.dotdigital.com'; 21 22 const API_ENDPOINT = 'https://r1-api.dotdigital.com'; 22 23 /** -
dotdigital-for-woocommerce/trunk/includes/tracking/class-dotdigital-woocommerce-last-browsed-products.php
r3255822 r3389676 34 34 $image_finder = new Dotdigital_WooCommerce_Image(); 35 35 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); 37 37 } catch (\Throwable $e) { 38 38 return array(); -
dotdigital-for-woocommerce/trunk/public/class-dotdigital-woocommerce-public.php
r3255822 r3389676 188 188 { 189 189 $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); 193 195 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)); 195 197 $cart_insight_handler = new Dotdigital_WooCommerce_Cart_Insight_Handler(); 196 198 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 5 5 6 6 if (data.customer_email) { 7 window.d mPt( "identify", data.customer_email);7 window.ddg.identify({ email: data.customer_email }); 8 8 } 9 9 10 cartInsight (data);10 cartInsight (data); 11 11 12 12 function cartInsight(data) { … … 15 15 } 16 16 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 } 34 41 } 35 42 36 43 function mapBaseItem(item) { 37 44 return { 45 productId: item.id, 38 46 sku: item.sku, 39 47 name: item.name, … … 44 52 quantity: item.quantity, 45 53 totalPrice: item.total_price, 46 totalPrice _incl_tax: item.total_price_incl_tax,54 totalPriceInclTax: item.total_price_incl_tax, 47 55 imageUrl: item.image_url, 48 56 productUrl: item.product_url … … 67 75 if (response.data) { 68 76 if (args.email && typeof window.dmPt !== 'undefined') { 69 window.d mPt('identify', args.email);77 window.ddg.identify({ email: args.email }); 70 78 } 71 79 if (response.data.cart_id) { … … 78 86 79 87 $(function() { 88 80 89 $( 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) { 83 92 ajaxRefreshCartInsight({ 84 93 action: 'update_cart' … … 88 97 89 98 $( 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( 90 119 'blur', 91 'input#dd-email, input#billing_email ',120 'input#dd-email, input#billing_email, .wc-block-components-address-form input#email', 92 121 function() { 93 122 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');1 if (wbt_data.region && wbt_data.profile_id ) { 2 window.ddg.init(wbt_data.region, wbt_data.profile_id); 3 3 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 } 10 7 } -
dotdigital-for-woocommerce/trunk/readme.txt
r3255794 r3389676 1 1 === Dotdigital for WooCommerce === 2 2 Contributors: 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 3 Tested up to: 6.8 4 Stable tag: 2.0.0 7 5 License: MIT 8 6 License URI: https://opensource.org/licenses/MIT … … 68 66 69 67 == 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. 70 84 71 85 = 1.4.5 = -
dotdigital-for-woocommerce/trunk/vendor/autoload.php
r3255822 r3389676 15 15 } 16 16 } 17 trigger_error( 18 $err, 19 E_USER_ERROR 20 ); 17 throw new RuntimeException($err); 21 18 } 22 19 -
dotdigital-for-woocommerce/trunk/vendor/composer/InstalledVersions.php
r3255822 r3389676 26 26 { 27 27 /** 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 /** 28 33 * @var mixed[]|null 29 34 * @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 … … 281 286 } 282 287 /** 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 /** 283 298 * @return array[] 284 299 * @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[]}>}> … … 292 307 $copiedLocalDir = \false; 293 308 if (self::$canGetVendors) { 294 $selfDir = s trtr(__DIR__, '\\', '/');309 $selfDir = self::getSelfDir(); 295 310 foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { 296 311 $vendorDir = strtr($vendorDir, '\\', '/'); -
dotdigital-for-woocommerce/trunk/vendor/composer/installed.php
r3255822 r3389676 3 3 namespace Dotdigital_Woo_Vendor; 4 4 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)));5 return 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 30 30 } 31 31 } 32 humbug_phpscoper_expose_class('JsonException', 'Dotdigital_Woo_Vendor\JsonException'); 32 33 humbug_phpscoper_expose_class('Stringable', 'Dotdigital_Woo_Vendor\Stringable'); 34 humbug_phpscoper_expose_class('UnhandledMatchError', 'Dotdigital_Woo_Vendor\UnhandledMatchError'); 33 35 humbug_phpscoper_expose_class('ValueError', 'Dotdigital_Woo_Vendor\ValueError'); 34 36 humbug_phpscoper_expose_class('Attribute', 'Dotdigital_Woo_Vendor\Attribute'); 35 37 humbug_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');38 38 humbug_phpscoper_expose_class('ComposerAutoloaderInit4428d88a89890c368aa4fc3f77bebc6b', 'Dotdigital_Woo_Vendor\ComposerAutoloaderInit4428d88a89890c368aa4fc3f77bebc6b'); 39 39
Note: See TracChangeset
for help on using the changeset viewer.