- Refactors statistics tracking
This commit is contained in:
@ -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;
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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() :
|
||||
|
Reference in New Issue
Block a user