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( $attributes = array(
'id mediumint(9) NOT NULL AUTO_INCREMENT,', 'id mediumint(9) NOT NULL AUTO_INCREMENT,',
'form_id mediumint(9) NOT NULL,', 'form_id mediumint(9) NOT NULL,',
'count mediumint(9) NOT NULL DEFAULT 0,', 'subscriber_id mediumint(9) NOT NULL,',
'date DATE NOT NULL,',
'created_at TIMESTAMP NOT NULL DEFAULT 0,', 'created_at TIMESTAMP NOT NULL DEFAULT 0,',
'PRIMARY KEY (id),', 'PRIMARY KEY (id),',
'UNIQUE KEY form_date (form_id,date)' 'UNIQUE KEY form_subscriber (form_id,subscriber_id)'
); );
return $this->sqlify(__FUNCTION__, $attributes); return $this->sqlify(__FUNCTION__, $attributes);
} }

View File

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

View File

@@ -95,7 +95,7 @@ class Subscribers {
// record form statistics // record form statistics
if($result === true && $form !== false && $form->id > 0) { 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 // get success message to display after subscription

View File

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