getParam('track', 0) == 1; } public function getCurrency(&$currency) { if (empty($currency)) $currency = get_woocommerce_currency(); $woocommerceCurrencies = get_woocommerce_currency_symbols(); $currency = $woocommerceCurrencies[$currency]; } public function acym_displayTrackingMessage(&$message) { // The else below writes the configuration, keep it in the back-end if (!acym_isAdmin() || !acym_hasBackofficeAccess()) { return; } $remindme = json_decode($this->config->get('remindme', '[]'), true); if (!in_array('woocommerce_tracking', $remindme)) { if ($this->getParam('track', 0) != 1 && acym_isExtensionActive('woocommerce/woocommerce.php')) { $message = acym_translation('ACYM_WOOCOMMERCE_TRACKING_INFO'); $message .= ' '; $message .= acym_translation('ACYM_READ_MORE'); $message .= ''; $message .= ' '; $message .= acym_translation('ACYM_DO_NOT_REMIND_ME'); $message .= ''; acym_display($message, 'info', false); } else { $remindme[] = 'woocommerce_tracking'; $this->config->save(['remindme' => json_encode($remindme)]); } } } public function trackingWoocommerceAddCookie() { $trackingWoo = acym_getVar('string', 'linkReferal', ''); if (empty($trackingWoo)) { return; } $trackingWoo = explode('-', $trackingWoo); if (count($trackingWoo) < 2) { return; } $hours = $this->getParam('cookie_expire', 1); $time = time() + (3600 * $hours); setcookie('acym_track_woocommerce', 'mailid-'.intval($trackingWoo[0]).'_userid-'.intval($trackingWoo[1]), $time, COOKIEPATH, COOKIE_DOMAIN); } public function trackingWoocommerce($result, $order_id) { $cookie = acym_getVar('string', 'acym_track_woocommerce', '', 'COOKIE'); if (empty($cookie)) return $result; $formattedCookie = []; $this->formatCookie($cookie, $formattedCookie); // The cookie is written from a url parameter, never trust its content $formattedCookie['mailid'] = (int)($formattedCookie['mailid'] ?? 0); $formattedCookie['userid'] = (int)($formattedCookie['userid'] ?? 0); if (empty($formattedCookie['userid']) || empty($formattedCookie['mailid'])) return $result; $order = wc_get_order($order_id); if (empty($order)) return $result; $currency = $order->get_currency(); if (empty($currency)) return $result; $total = (float)$order->get_total() - $order->get_total_shipping(); $removeVat = (int)($this->getParam('remove_VAT', 0)); if ($removeVat) { $total -= (float)$order->get_total_tax(); } $this->saveTrackingWoocommerceMailStat($formattedCookie, $total, $currency); $this->saveTrackingWoocommerceUserStat($formattedCookie, $total, $currency); return $result; } private function formatCookie(&$cookie, &$formattedCookie) { if (strpos($cookie, '_') === false) return; $cookie = explode('_', $cookie); foreach ($cookie as $value) { if (strpos($value, '-') === false) continue; $value = explode('-', $value, 2); $formattedCookie[$value[0]] = $value[1]; } } private function saveTrackingWoocommerceMailStat($formattedCookie, $total, $currency) { $mailStatClass = new MailStatClass(); $mailStat = $mailStatClass->getOneById($formattedCookie['mailid']); if (empty($mailStat)) return; $newMailStat = new stdClass(); $newMailStat->mail_id = $mailStat->mail_id; $newMailStat->tracking_sale = empty($mailStat->tracking_sale) ? $total : $mailStat->tracking_sale + $total; $newMailStat->currency = $currency; $mailStatClass->save($newMailStat); } private function saveTrackingWoocommerceUserStat($formattedCookie, $total, $currency) { $userStatClass = new UserStatClass(); $userStat = $userStatClass->getOneByMailAndUserId($formattedCookie['mailid'], $formattedCookie['userid']); if (empty($userStat)) { return; } unset($userStat->statusSending); unset($userStat->open); unset($userStat->open_date); $userStat->tracking_sale = empty($userStat->tracking_sale) ? $total : $userStat->tracking_sale + $total; $userStat->currency = $currency; $userStatClass->save($userStat); } }