updated form stats to record individual subscription
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
|
@@ -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
|
||||||
|
@@ -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() {
|
||||||
|
Reference in New Issue
Block a user