updated form stats to record individual subscription

This commit is contained in:
Jonathan Labreuille
2016-04-26 18:12:05 +02:00
parent de873eca71
commit 0dd3f2178e
4 changed files with 24 additions and 39 deletions

View File

@@ -323,11 +323,10 @@ class Migrator {
$attributes = array(
'id mediumint(9) NOT NULL AUTO_INCREMENT,',
'form_id mediumint(9) NOT NULL,',
'count mediumint(9) NOT NULL DEFAULT 0,',
'date DATE NOT NULL,',
'subscriber_id mediumint(9) NOT NULL,',
'created_at TIMESTAMP NOT NULL DEFAULT 0,',
'PRIMARY KEY (id),',
'UNIQUE KEY form_date (form_id,date)'
'UNIQUE KEY form_subscriber (form_id,subscriber_id)'
);
return $this->sqlify(__FUNCTION__, $attributes);
}

View File

@@ -10,27 +10,22 @@ class StatisticsForms extends Model {
parent::__construct();
}
public static function record($form_id) {
if($form_id > 0) {
$today = date('Y-m-d');
public static function record($form_id, $subscriber_id) {
if($form_id > 0 && $subscriber_id > 0) {
// check if we already have a record for today
$record = self::where('form_id', $form_id)
->where('date', $today)
->where('subscriber_id', $subscriber_id)
->findOne();
if($record !== false) {
$record->set('count', $record->count + 1);
} else {
if($record === false) {
// create a new entry
$record = self::create();
$record->hydrate(array(
'form_id' => $form_id,
'date' => $today,
'count' => 1
'subscriber_id' => $subscriber_id
));
}
$record->save();
}
return $record;
}
return false;

View File

@@ -95,7 +95,7 @@ class Subscribers {
// record form statistics
if($result === true && $form !== false && $form->id > 0) {
StatisticsForms::record($form->id);
StatisticsForms::record($form->id, $subscriber->id);
}
// get success message to display after subscription

View File

@@ -4,37 +4,28 @@ use MailPoet\Models\StatisticsForms;
class StatisticsFormsTest extends MailPoetTest {
function _before() {
$this->yesterday = StatisticsForms::create();
$this->yesterday->hydrate(array(
'form_id' => 1,
'count' => 10,
'date' => date('Y-m-d', strtotime('yesterday'))
));
$this->yesterday = $this->yesterday->save();
}
function testItCanBeCreated() {
expect($this->yesterday->id() > 0)->true();
expect($this->yesterday->getErrors())->false();
function testItCanRecordStats() {
$record = StatisticsForms::record($form_id = 1, $subscriber_id = 2);
expect($record->form_id)->equals(1);
expect($record->subscriber_id)->equals(2);
}
function testItCanRecordNewStats() {
$today = StatisticsForms::record($form_id = 1);
expect($today->count)->equals(1);
expect($today->date)->equals(date('Y-m-d'));
expect($today->form_id)->equals(1);
function testItDoesNotOverrideStats() {
$record = StatisticsForms::record($form_id = 1, $subscriber_id = 2);
expect($record->form_id)->equals(1);
expect($record->subscriber_id)->equals(2);
expect(StatisticsForms::count())->equals(1);
}
function testItCanAggregateStats() {
$today = StatisticsForms::record($form_id = 2);
expect($today->count)->equals(1);
expect($today->date)->equals(date('Y-m-d'));
expect($today->form_id)->equals(2);
function testItCanRecordMultipleStats() {
$record = StatisticsForms::record($form_id = 1, $subscriber_id = 2);
$record2 = StatisticsForms::record($form_id = 2, $subscriber_id = 2);
$record3 = StatisticsForms::record($form_id = 1, $subscriber_id = 1);
$today = StatisticsForms::record($form_id = 2);
expect($today->count)->equals(2);
expect($today->date)->equals(date('Y-m-d'));
expect($today->form_id)->equals(2);
expect(StatisticsForms::count())->equals(3);
}
function _after() {