From a3e6eb5bba9a926f733ae06560a5d6e8aed47a2c Mon Sep 17 00:00:00 2001 From: Vlad Date: Wed, 13 Apr 2016 20:52:32 -0400 Subject: [PATCH] - Implementsi tracking clicks & redirecting URLs --- lib/Config/PublicAPI.php | 9 ++++++++ lib/Statistics/Track/Clicks.php | 41 ++++++++++++++++++++++++++++++++- 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/lib/Config/PublicAPI.php b/lib/Config/PublicAPI.php index 6124fafa27..1b9e5220bd 100644 --- a/lib/Config/PublicAPI.php +++ b/lib/Config/PublicAPI.php @@ -2,6 +2,7 @@ namespace MailPoet\Config; use MailPoet\Cron\Daemon; +use MailPoet\Statistics\Track\Clicks; use MailPoet\Util\Helpers; if(!defined('ABSPATH')) exit; @@ -37,6 +38,14 @@ class PublicAPI { } } + function track() { + try { + $clicks = new Clicks($this->data); + $clicks->track(); + } catch(\Exception $e) { + } + } + private function _checkAndCallMethod($class, $method, $terminate_request = false) { if(!method_exists($class, $method)) { if(!$terminate_request) return; diff --git a/lib/Statistics/Track/Clicks.php b/lib/Statistics/Track/Clicks.php index b2e202b4e7..3c207e2a5b 100644 --- a/lib/Statistics/Track/Clicks.php +++ b/lib/Statistics/Track/Clicks.php @@ -1,7 +1,46 @@ url = $url; + } + + function track($url = false) { + $url = ($url) ? $url : $this->url; + if(!preg_match('/\d+-\d+-\d+-[a-zA-Z0-9]/', $url)) $this->abort(); + list ($newsletter_id, $subscriber_id, $queue_id, $hash) = explode('-', $url); + $link = NewsletterLink::where('hash', $hash)->findOne(); + if(!$link) $this->abort(); + $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) { + $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 = (int) $statistics->count++; + $statistics->save(); + } + header('Location: ' . $link->url, true, 301); + } + + private function abort() { + header('HTTP/1.0 404 Not Found'); + exit; + } } \ No newline at end of file