diff --git a/lib/Router/Endpoints/Track.php b/lib/Router/Endpoints/Track.php index cda7fe58ac..8289d35d1f 100644 --- a/lib/Router/Endpoints/Track.php +++ b/lib/Router/Endpoints/Track.php @@ -24,60 +24,36 @@ class Track { } static function _processTrackData($data) { - if(empty($data['queue_id']) || - empty($data['subscriber_id']) || - empty($data['subscriber_token']) + $data = (object)$data; + if(empty($data->queue_id) || + empty($data->subscriber_id) || + empty($data->subscriber_token) ) { return false; } - $data['queue'] = self::_getQueue($data['queue_id']); - $data['subscriber'] = self::_getSubscriber($data['subscriber_id']); - $data['newsletter'] = (!empty($data['queue']['newsletter_id'])) ? - self::_getNewsletter($data['queue']['newsletter_id']) : + $data->queue = SendingQueue::findOne($data->queue_id); + $data->subscriber = Subscriber::findOne($data->subscriber_id); + $data->newsletter = (!empty($data->queue->newsletter_id)) ? + Newsletter::findOne($data->queue->newsletter_id) : false; - if(!empty($data['link_hash'])) { - $data['link'] = self::_getLink($data['link_hash']); + if(!empty($data->link_hash)) { + $data->link = NewsletterLink::getByHash($data->link_hash); } - $data_processed_successfully = - ($data['queue'] && $data['subscriber'] && $data['newsletter']); - return ($data_processed_successfully) ? - self::_validateTrackData($data) : - false; + return self::_validateTrackData($data); } static function _validateTrackData($data) { - if(!$data['subscriber']) return false; + if(!$data->subscriber || !$data->queue || !$data->newsletter) return false; $subscriber_token_match = - Subscriber::verifyToken($data['subscriber']['email'], $data['subscriber_token']); - // return if this is an administrator user previewing the newsletter - if($data['subscriber']['wp_user_id'] && $data['preview']) { - return ($subscriber_token_match) ? $data : false; + Subscriber::verifyToken($data->subscriber->email, $data->subscriber_token); + if(!$subscriber_token_match) return false; + // return if this is a WP user previewing the newsletter + if($data->subscriber->isWPUser() && $data->preview) { + return $data; } // check if the newsletter was sent to the subscriber - $is_valid_subscriber = - (!empty($data['queue']['subscribers']['processed']) && - in_array($data['subscriber']['id'], $data['queue']['subscribers']['processed'])); - return ($is_valid_subscriber && $subscriber_token_match) ? $data : false; - } - - static function _getNewsletter($newsletter_id) { - $newsletter = Newsletter::findOne($newsletter_id); - return ($newsletter) ? $newsletter->asArray() : $newsletter; - } - - static function _getSubscriber($subscriber_id) { - $subscriber = Subscriber::findOne($subscriber_id); - return ($subscriber) ? $subscriber->asArray() : $subscriber; - } - - static function _getQueue($queue_id) { - $queue = SendingQueue::findOne($queue_id); - return ($queue) ? $queue->asArray() : $queue; - } - - static function _getLink($link_hash) { - $link = NewsletterLink::where('hash', $link_hash) - ->findOne(); - return ($link) ? $link->asArray() : $link; + return ($data->queue->isSubscriberProcessed($data->subscriber->id)) ? + $data : + false; } } \ No newline at end of file diff --git a/lib/Statistics/Track/Clicks.php b/lib/Statistics/Track/Clicks.php index 8617bfca13..ba37453310 100644 --- a/lib/Statistics/Track/Clicks.php +++ b/lib/Statistics/Track/Clicks.php @@ -8,35 +8,26 @@ if(!defined('ABSPATH')) exit; class Clicks { static function track($data) { - if(!$data || empty($data['link'])) return false; - $subscriber = $data['subscriber']; - $queue = $data['queue']; - $newsletter = $data['newsletter']; - $link = $data['link']; + if(!$data || empty($data->link)) self::abort(); + $subscriber = $data->subscriber; + $queue = $data->queue; + $newsletter = $data->newsletter; + $link = $data->link; // log statistics only if the action did not come from - // an admin user previewing the newsletter - if(!$data['preview'] && !$subscriber['wp_user_id']) { - $statistics = StatisticsClicks::where('link_id', $link['id']) - ->where('subscriber_id', $subscriber['id']) - ->where('newsletter_id', $newsletter['id']) - ->where('queue_id', $queue['id']) - ->findOne(); - if(!$statistics) { + // a WP user previewing the newsletter + if(!$data->preview && !$subscriber->isWPUser()) { + $statistics = StatisticsClicks::createOrUpdateClickCount( + $link->id, + $subscriber->id, + $newsletter->id, + $queue->id + ); + if($statistics->isNew()) { // track open event in case it did not register self::trackOpenEvent($data); - $statistics = StatisticsClicks::create(); - $statistics->newsletter_id = $newsletter['id']; - $statistics->link_id = $link['id']; - $statistics->subscriber_id = $subscriber['id']; - $statistics->queue_id = $queue['id']; - $statistics->count = 1; - $statistics->save(); - } else { - $statistics->count++; - $statistics->save(); } } - $url = self::processUrl($link['url'], $newsletter, $subscriber, $queue); + $url = self::processUrl($link->url, $newsletter, $subscriber, $queue); self::redirectToUrl($url); } diff --git a/lib/Statistics/Track/Opens.php b/lib/Statistics/Track/Opens.php index 8ab008c466..4c8b7b2a23 100644 --- a/lib/Statistics/Track/Opens.php +++ b/lib/Statistics/Track/Opens.php @@ -8,23 +8,17 @@ if(!defined('ABSPATH')) exit; class Opens { static function track($data, $display_image = true) { if(!$data) return self::displayImage(); - $subscriber = $data['subscriber']; - $queue = $data['queue']; - $newsletter = $data['newsletter']; + $subscriber = $data->subscriber; + $queue = $data->queue; + $newsletter = $data->newsletter; // log statistics only if the action did not come from - // an admin user previewing the newsletter - if (!$data['preview'] && !$subscriber['wp_user_id']) { - $statistics = StatisticsOpens::where('subscriber_id', $subscriber['id']) - ->where('newsletter_id', $newsletter['id']) - ->where('queue_id', $queue['id']) - ->findOne(); - if(!$statistics) { - $statistics = StatisticsOpens::create(); - $statistics->newsletter_id = $newsletter['id']; - $statistics->subscriber_id = $subscriber['id']; - $statistics->queue_id = $queue['id']; - $statistics->save(); - } + // a WP user previewing the newsletter + if(!$data->preview && !$subscriber->isWPUser()) { + StatisticsOpens::getOrCreate( + $subscriber->id, + $newsletter->id, + $queue->id + ); } return ($display_image) ? self::displayImage() :