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);
}
}