- Implementsi tracking clicks & redirecting URLs

This commit is contained in:
Vlad
2016-04-13 20:52:32 -04:00
parent 67359980e9
commit a3e6eb5bba
2 changed files with 49 additions and 1 deletions

View File

@ -2,6 +2,7 @@
namespace MailPoet\Config; namespace MailPoet\Config;
use MailPoet\Cron\Daemon; use MailPoet\Cron\Daemon;
use MailPoet\Statistics\Track\Clicks;
use MailPoet\Util\Helpers; use MailPoet\Util\Helpers;
if(!defined('ABSPATH')) exit; 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) { private function _checkAndCallMethod($class, $method, $terminate_request = false) {
if(!method_exists($class, $method)) { if(!method_exists($class, $method)) {
if(!$terminate_request) return; if(!$terminate_request) return;

View File

@ -1,7 +1,46 @@
<?php <?php
namespace MailPoet\Cron; namespace MailPoet\Statistics\Track;
use MailPoet\Models\NewsletterLink;
use MailPoet\Models\StatisticsClicks;
if(!defined('ABSPATH')) exit; if(!defined('ABSPATH')) exit;
class Clicks { class Clicks {
public $url;
function __construct($url) {
$this->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;
}
} }