Plugin Directory

Changeset 3076289


Ignore:
Timestamp:
04/24/2024 09:31:43 AM (2 years ago)
Author:
webfoersterei
Message:

intermediate release of 2.2.0 without Update URI

Location:
uptain-connect/trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • uptain-connect/trunk/README.txt

    r3076284 r3076289  
    22Contributors: webfoersterei
    33Donate link: www.uptain.de
    4 Tags:
     4Tags: E-Commerce, Conversion-Optimierung, Exit-Intent, Warenkorb, Conversion, E-Mail, Big Data, DSGVO, Kundengewinnung, Marketing, Shop, Optimierung
    55Requires at least: 5.8
    66Tested up to: 6.4
    7 Stable tag: 2.0
     7Stable tag: 2.2
    88Requires PHP: 7.4
    99License: GPLv2
    1010License URI: http://www.gnu.org/licenses/gpl-2.0.html
    11 Author: webfoersterei
    12 Author URI: https://profiles.wordpress.org/webfoersterei/
    1311
    1412We develop automated state-of-the-art solutions for regaining lost customers coupled with absolute customer orientation.
     
    9290== Changelog ==
    9391
     92= 2.2.0 =
     93* Implement fallback-recognition of order completed in cases of custom checkouts
     94
     95= 2.1.3 =
     96* Add support for plugins that concatenate JavaScript-Files
     97* Add explicit support for Cookiebot
     98
    9499= 2.0.1 =
    95100* Improved tracking and functionalities
    96 
    97101
    98102= 1.1.3 =
  • uptain-connect/trunk/src/Plugin.php

    r2973033 r3076289  
    1919    private ?TrackerInterface $tracker = null;
    2020    public const REST_ROUTE_TRACKING_VALUES = 'values';
     21    private const HOTDEV_HTTP_HEADER_NAME = 'HTTP_X_WEBFOERSTEREI_HOTDEV';
    2122
    2223    public function __construct($slug, $version)
     
    9192    {
    9293        register_rest_route(self::getSlug().'/v1', '/'.self::REST_ROUTE_TRACKING_VALUES, [
    93             'methods'  => 'GET',
    94             'callback' => function () {
     94            'methods'             => 'GET',
     95            'callback'            => function () {
    9596                return rest_ensure_response(
    9697                    $this->formatAsJsonArray($this->getTrackingData(), true)
    9798                );
    9899            },
     100            'permission_callback' => '__return_true',
    99101        ]);
    100102    }
     
    109111        Plugin::debug('enabled', true);
    110112
     113        if (function_exists('\cybot\cookiebot\lib\cookiebot_active')) {
     114            Plugin::debug('-cookiebot-exists', 'namespaced');
     115            $cookieBotEnabled = \cybot\cookiebot\lib\cookiebot_active();
     116        } else {
     117            Plugin::debug('cookiebot-exists', 'legacy');
     118            $cookieBotEnabled = function_exists('cookiebot_active') && cookiebot_active();
     119        }
     120
     121        Plugin::debug('cookiebot-enabled', $cookieBotEnabled);
     122
     123        if ($cookieBotEnabled) {
     124            $scriptType = (function_exists('\cybot\cookiebot\lib\cookiebot_assist') ?
     125                \cybot\cookiebot\lib\cookiebot_assist('marketing')
     126                : cookiebot_assist('marketing'));
     127        } else {
     128            $scriptType = 'type="application/javascript"';
     129        }
     130
    111131        try {
    112132            printf(
    113                 '<script type="application/javascript" id="%1$s">
     133                '<script data-no-minify="1" id="%1$s" %7$s>
    114134            function uptainEnable(retry = 0) {
    115135                var maxRetry = 10;
     
    141161                if(%4$s) { window._upEventBus.publish("uptain.readData"); }
    142162                if(%5$s) { setInterval(uptainRefresh, %6$d); }
    143                 if(%4$s || %5$s) { document.getElementById("%1$s").remove(); }
     163                if((%4$s || %5$s) && document.getElementById("%1$s")) { document.getElementById("%1$s").remove(); }
    144164            }
    145165        </script>',
     
    155175                    (int)get_option(Admin::OPTION_NAME_INCLUDE_REFRESH_INTERVAL, Admin::DEFAULT_REFRESH_MS),
    156176                    Admin::MIN_REFRESH_MS
    157                 )
     177                ),
     178                $scriptType
    158179            );
    159180            printf(
    160                 '<script type="application/javascript" id="%1$s">
     181                '<script data-no-minify="1" id="%1$s" %3$s>
    161182            var lastSetKeys = [];
    162183            async function uptainRefresh() {
     
    189210        </script>',
    190211                self::getSlug().'-refresh',
    191                 get_rest_url(null, self::getSlug().'/v1/'.self::REST_ROUTE_TRACKING_VALUES)
     212                get_rest_url(null, self::getSlug().'/v1/'.self::REST_ROUTE_TRACKING_VALUES),
     213                $scriptType
    192214            );
    193215        } catch (\Throwable $ex) {
     
    200222            Plugin::debug('immediate-include', true);
    201223            printf(
    202                 '<script type="application/javascript" id="%1$s">uptainEnable();document.getElementById("%1$s").remove();</script>',
    203                 self::getSlug().'-direct-execute'
     224                '<script data-no-minify="1" id="%1$s" %2$s>uptainEnable();
     225                var wf_own = document.getElementById("%1$s")
     226                if(wf_own) { wf_own.remove(); }</script>',
     227                self::getSlug().'-direct-execute',
     228                $scriptType
    204229            );
    205230        }
     
    262287    public static function debug($header, $value)
    263288    {
    264         if (!get_option(Admin::OPTION_NAME_DEBUG, false)) {
     289        $isHotDev = isset($_SERVER[self::HOTDEV_HTTP_HEADER_NAME]) && ((int)$_SERVER[self::HOTDEV_HTTP_HEADER_NAME] >= 1024 && (int)$_SERVER[self::HOTDEV_HTTP_HEADER_NAME] <= 65534);
     290
     291        if (!$isHotDev && !get_option(Admin::OPTION_NAME_DEBUG, false)) {
    265292            return;
    266293        }
     
    275302            return;
    276303        }
    277         // printf("DEBUG %s: %s", $header, $value);
     304
     305        if($isHotDev) {
     306            printf("DEBUG %s: %s", $header, $value);
     307        }
    278308    }
    279309}
  • uptain-connect/trunk/src/WooCommerceTracker.php

    r2973033 r3076289  
    1313{
    1414    private $WC;
    15 
    16     public function __construct()
     15    private static $overrideOrderId = null;
     16
     17    private function getWooCommerce()
    1718    {
    1819        global $woocommerce;
    1920
    20         $this->WC = $woocommerce;
     21        if (function_exists('WC')) {
     22            $this->WC = WC();
     23            Plugin::debug('get-woo', 'wc-function');
     24        } else {
     25            $this->WC = $woocommerce;
     26            Plugin::debug('get-woo', 'global-var');
     27        }
     28
     29        if (!$this->WC) {
     30            Plugin::debug('get-woo-EMER', 'No WooCommerce');
     31
     32            return null;
     33        }
     34
     35        Plugin::debug('get-woo-version', $this->WC->version);
     36
     37        if (null === $this->WC->cart) {
     38            $this->WC->frontend_includes();
     39            Plugin::debug('get-woo-cart', 'load');
     40            wc_load_cart();
     41        }
     42
     43        return $this->WC;
    2144    }
    2245
     
    2447    {
    2548        add_action('woocommerce_checkout_order_created', function ($order) {
     49            Plugin::debug('wc-hook-order-created', true);
     50            Plugin::debug('wc-hook-order-created-id', $order->ID);
    2651            if (!headers_sent() && session_status() !== PHP_SESSION_ACTIVE) {
    2752                session_start();
    2853            }
    2954            $_SESSION['freshOrder'] = $order->ID;
     55            self::$overrideOrderId = $order->ID;
    3056        });
     57
     58        add_action('woocommerce_thankyou', function ($orderID) {
     59            Plugin::debug('wc-hook-thankyou-orderid', $orderID);
     60            if (!headers_sent() && session_status() !== PHP_SESSION_ACTIVE) {
     61                session_start();
     62            }
     63            $order = wc_get_order($orderID);
     64            Plugin::debug(
     65                'wc-hook-thankyou-created-ts',
     66                $order->get_date_created() ? $order->get_date_created()->getTimestamp() : null
     67            );
     68            Plugin::debug(
     69                'wc-hook-thankyou-now-ts',
     70                (new \DateTimeImmutable('now -20 seconds'))->getTimestamp()
     71            );
     72            if ($order->get_date_created() && $order->get_date_created()->getTimestamp() > (new \DateTimeImmutable(
     73                    'now -20 seconds'
     74                ))->getTimestamp()) {
     75                self::$overrideOrderId = $orderID;
     76                $_SESSION['freshOrder'] = $orderID;
     77            }
     78        });
    3179    }
    3280
     
    3583        $result = array_merge($this->getCartTrackingData(), $this->getPersonalData());
    3684
    37         return array_filter($result);
     85        return array_filter($result, static function ($element) {
     86            return $element !== null && $element !== '';
     87        });
    3888    }
    3989
     
    4595        $result = [];
    4696
    47         if ($this->WC) {
     97        Plugin::debug('override-orderid', self::$overrideOrderId);
     98        Plugin::debug('session-orderid', $_SESSION['freshOrder'] ?? null);
     99
     100        if (null === self::$overrideOrderId && isset($_SESSION['freshOrder']) && (int)$_SESSION['freshOrder']) {
     101            self::$overrideOrderId = $_SESSION['freshOrder'];
     102            $_SESSION['freshOrder'] = null;
     103        }
     104
     105        if ($this->getWooCommerce()) {
     106            Plugin::debug('ctd-wc', true);
     107            Plugin::debug('ctd-wc-cart', (bool)$this->getWooCommerce()->cart);
     108            Plugin::debug(
     109                'ctd-wc-cart-total',
     110                $this->getWooCommerce()->cart ? $this->getWooCommerce()->cart->cart_contents_total : null
     111            );
    48112            $result['currency'] = get_woocommerce_currency();
    49             $result['scv'] = $this->WC->cart ? $this->WC->cart->cart_contents_total : null;
    50             $coupons = $this->WC->cart ? $this->WC->cart->get_applied_coupons() : [];
    51             $result['usedvoucher'] = ($this->WC->cart && count($coupons) >= 1) ? array_pop($coupons) : '';
    52             $result['voucher-amount'] = $this->WC->cart ? number_format(
    53                 $this->WC->cart->get_cart_discount_total(),
     113            $result['scv'] = $this->getWooCommerce()->cart ? ($this->getWooCommerce(
     114            )->cart->cart_contents_total ?? 0) : 0;
     115            $coupons = $this->getWooCommerce()->cart ? $this->getWooCommerce()->cart->get_applied_coupons() : [];
     116            $result['usedvoucher'] = ($this->getWooCommerce()->cart && count($coupons) >= 1) ? array_pop($coupons) : '';
     117            $result['voucher-amount'] = $this->getWooCommerce()->cart ? number_format(
     118                $this->getWooCommerce()->cart->get_cart_discount_total(),
    54119                2
    55120            ) : null;
     
    57122            $result['success'] = null;
    58123
    59             if (isset($_SESSION['freshOrder']) && (int)$_SESSION['freshOrder']) {
    60                 $order = wc_get_order((int)$_SESSION['freshOrder']);
     124            if ((int)self::$overrideOrderId) {
     125                $order = wc_get_order((int)self::$overrideOrderId);
    61126                if ($order) {
     127                    $discountExcludingTax = $order->get_total_discount(true);
    62128                    $result['success'] = '1';
    63                     $result['scv'] = $order->get_subtotal();
     129                    $result['scv'] = $order->get_subtotal(
     130                        ) - $discountExcludingTax; // subtotal is excluding Tax, but also excluding vouchers
    64131                    $coupons = $order->get_coupon_codes();
    65132                    $result['usedvoucher'] = count($coupons) >= 1 ? array_pop($coupons) : '';
    66                     $result['voucher-amount'] = number_format($order->get_total_discount(false) ?: 0, 2) ?: null;
     133                    $result['voucher-amount'] = number_format($discountExcludingTax ?: 0, 2) ?: null;
    67134                    $result['ordernumber'] = $order->ID;
    68135                }
    69                 $_SESSION['freshOrder'] = null;
    70136            }
    71137        }
     
    112178        }
    113179
     180        if (!$this->getWooCommerce()) {
     181            return false;
     182        }
     183
    114184        $completedOrders = wc_get_orders(['customer' => $currentUser->ID, 'limit' => 1]);
    115185
  • uptain-connect/trunk/vendor/autoload.php

    r2973033 r3076289  
    55require_once __DIR__ . '/composer/autoload_real.php';
    66
    7 return ComposerAutoloaderInitca26ed1d89b860abc05bbe65c0c59d17::getLoader();
     7return ComposerAutoloaderInitc1ab318e8a4c235637578202f7361c94::getLoader();
  • uptain-connect/trunk/vendor/composer/InstalledVersions.php

    r2973033 r3076289  
    1515  'root' =>
    1616  array (
    17     'pretty_version' => 'dev-4e378fa4c82578cb9bf516bddd9fefbb87aff3ac',
    18     'version' => 'dev-4e378fa4c82578cb9bf516bddd9fefbb87aff3ac',
     17    'pretty_version' => 'dev-3a52c7edecceed25e750db4db651ae53276e0543',
     18    'version' => 'dev-3a52c7edecceed25e750db4db651ae53276e0543',
    1919    'aliases' =>
    2020    array (
    2121    ),
    22     'reference' => '4e378fa4c82578cb9bf516bddd9fefbb87aff3ac',
     22    'reference' => '3a52c7edecceed25e750db4db651ae53276e0543',
    2323    'name' => 'webfoersterei/wp-plugin',
    2424  ),
     
    253253    'webfoersterei/wp-plugin' =>
    254254    array (
    255       'pretty_version' => 'dev-4e378fa4c82578cb9bf516bddd9fefbb87aff3ac',
    256       'version' => 'dev-4e378fa4c82578cb9bf516bddd9fefbb87aff3ac',
    257       'aliases' =>
    258       array (
    259       ),
    260       'reference' => '4e378fa4c82578cb9bf516bddd9fefbb87aff3ac',
     255      'pretty_version' => 'dev-3a52c7edecceed25e750db4db651ae53276e0543',
     256      'version' => 'dev-3a52c7edecceed25e750db4db651ae53276e0543',
     257      'aliases' =>
     258      array (
     259      ),
     260      'reference' => '3a52c7edecceed25e750db4db651ae53276e0543',
    261261    ),
    262262  ),
  • uptain-connect/trunk/vendor/composer/autoload_real.php

    r2973033 r3076289  
    33// autoload_real.php @generated by Composer
    44
    5 class ComposerAutoloaderInitca26ed1d89b860abc05bbe65c0c59d17
     5class ComposerAutoloaderInitc1ab318e8a4c235637578202f7361c94
    66{
    77    private static $loader;
     
    2525        require __DIR__ . '/platform_check.php';
    2626
    27         spl_autoload_register(array('ComposerAutoloaderInitca26ed1d89b860abc05bbe65c0c59d17', 'loadClassLoader'), true, true);
     27        spl_autoload_register(array('ComposerAutoloaderInitc1ab318e8a4c235637578202f7361c94', 'loadClassLoader'), true, true);
    2828        self::$loader = $loader = new \Composer\Autoload\ClassLoader();
    29         spl_autoload_unregister(array('ComposerAutoloaderInitca26ed1d89b860abc05bbe65c0c59d17', 'loadClassLoader'));
     29        spl_autoload_unregister(array('ComposerAutoloaderInitc1ab318e8a4c235637578202f7361c94', 'loadClassLoader'));
    3030
    3131        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
     
    3333            require __DIR__ . '/autoload_static.php';
    3434
    35             call_user_func(\Composer\Autoload\ComposerStaticInitca26ed1d89b860abc05bbe65c0c59d17::getInitializer($loader));
     35            call_user_func(\Composer\Autoload\ComposerStaticInitc1ab318e8a4c235637578202f7361c94::getInitializer($loader));
    3636        } else {
    3737            $map = require __DIR__ . '/autoload_namespaces.php';
     
    5454
    5555        if ($useStaticLoader) {
    56             $includeFiles = Composer\Autoload\ComposerStaticInitca26ed1d89b860abc05bbe65c0c59d17::$files;
     56            $includeFiles = Composer\Autoload\ComposerStaticInitc1ab318e8a4c235637578202f7361c94::$files;
    5757        } else {
    5858            $includeFiles = require __DIR__ . '/autoload_files.php';
    5959        }
    6060        foreach ($includeFiles as $fileIdentifier => $file) {
    61             composerRequireca26ed1d89b860abc05bbe65c0c59d17($fileIdentifier, $file);
     61            composerRequirec1ab318e8a4c235637578202f7361c94($fileIdentifier, $file);
    6262        }
    6363
     
    6666}
    6767
    68 function composerRequireca26ed1d89b860abc05bbe65c0c59d17($fileIdentifier, $file)
     68function composerRequirec1ab318e8a4c235637578202f7361c94($fileIdentifier, $file)
    6969{
    7070    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
  • uptain-connect/trunk/vendor/composer/autoload_static.php

    r2973033 r3076289  
    55namespace Composer\Autoload;
    66
    7 class ComposerStaticInitca26ed1d89b860abc05bbe65c0c59d17
     7class ComposerStaticInitc1ab318e8a4c235637578202f7361c94
    88{
    99    public static $files = array (
     
    134134    {
    135135        return \Closure::bind(function () use ($loader) {
    136             $loader->prefixLengthsPsr4 = ComposerStaticInitca26ed1d89b860abc05bbe65c0c59d17::$prefixLengthsPsr4;
    137             $loader->prefixDirsPsr4 = ComposerStaticInitca26ed1d89b860abc05bbe65c0c59d17::$prefixDirsPsr4;
    138             $loader->classMap = ComposerStaticInitca26ed1d89b860abc05bbe65c0c59d17::$classMap;
     136            $loader->prefixLengthsPsr4 = ComposerStaticInitc1ab318e8a4c235637578202f7361c94::$prefixLengthsPsr4;
     137            $loader->prefixDirsPsr4 = ComposerStaticInitc1ab318e8a4c235637578202f7361c94::$prefixDirsPsr4;
     138            $loader->classMap = ComposerStaticInitc1ab318e8a4c235637578202f7361c94::$classMap;
    139139
    140140        }, null, ClassLoader::class);
  • uptain-connect/trunk/vendor/composer/installed.php

    r2973033 r3076289  
    22  'root' =>
    33  array (
    4     'pretty_version' => 'dev-4e378fa4c82578cb9bf516bddd9fefbb87aff3ac',
    5     'version' => 'dev-4e378fa4c82578cb9bf516bddd9fefbb87aff3ac',
     4    'pretty_version' => 'dev-3a52c7edecceed25e750db4db651ae53276e0543',
     5    'version' => 'dev-3a52c7edecceed25e750db4db651ae53276e0543',
    66    'aliases' =>
    77    array (
    88    ),
    9     'reference' => '4e378fa4c82578cb9bf516bddd9fefbb87aff3ac',
     9    'reference' => '3a52c7edecceed25e750db4db651ae53276e0543',
    1010    'name' => 'webfoersterei/wp-plugin',
    1111  ),
     
    240240    'webfoersterei/wp-plugin' =>
    241241    array (
    242       'pretty_version' => 'dev-4e378fa4c82578cb9bf516bddd9fefbb87aff3ac',
    243       'version' => 'dev-4e378fa4c82578cb9bf516bddd9fefbb87aff3ac',
    244       'aliases' =>
    245       array (
    246       ),
    247       'reference' => '4e378fa4c82578cb9bf516bddd9fefbb87aff3ac',
     242      'pretty_version' => 'dev-3a52c7edecceed25e750db4db651ae53276e0543',
     243      'version' => 'dev-3a52c7edecceed25e750db4db651ae53276e0543',
     244      'aliases' =>
     245      array (
     246      ),
     247      'reference' => '3a52c7edecceed25e750db4db651ae53276e0543',
    248248    ),
    249249  ),
  • uptain-connect/trunk/wf-uptain-tracking.php

    r2973033 r3076289  
    1313 * Description:       Wir entwickeln automatisierte Lösungen zur Rückgewinnung von Kaufabbrechern nach dem neuesten Stand der Technik – gepaart mit absoluter Kundenorientierung.
    1414 * Requires at least: 5.8
    15  * Version:           2.0.1
     15 * Version:           2.2.0
    1616 * Requires PHP:      7.4
     17 * Tested up to:      6.4
     18 * Tags:              E-Commerce, Conversion-Optimierung, Exit-Intent, Warenkorb, Conversion, E-Mail, Big Data, DSGVO, Kundengewinnung, Marketing, Shop, Optimierung
    1719 * Author:            uptain GmbH
    1820 * Author URI:        https://www.uptain.de/
    19  * Update URI:        https://updates.webfoersterei.de/wordpress
     21 * Contributors:      webfoersterei
    2022 */
    2123
    2224$slug = 'wf-uptain-tracking';
    23 $plugin = new Plugin(strpos($slug, '$') !== false ? 'plugin' : $slug, '2.0.1');
     25$plugin = new Plugin(strpos($slug, '$') !== false ? 'plugin' : $slug, '2.2.0');
    2426$plugin->registerInWordpress();
    2527
Note: See TracChangeset for help on using the changeset viewer.