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