Move Setting getValue and setValue to controller as a private methods

[MAILPOET-1757]
This commit is contained in:
Rostislav Wolny
2019-01-30 17:48:09 +01:00
parent 2c921a16aa
commit 10e56d860d
6 changed files with 54 additions and 81 deletions

View File

@ -1,9 +1,7 @@
<?php <?php
namespace MailPoet\Models; namespace MailPoet\Models;
use MailPoet\Cron\CronTrigger;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\Util\Helpers;
if(!defined('ABSPATH')) exit; if(!defined('ABSPATH')) exit;
@ -23,31 +21,6 @@ class Setting extends Model {
)); ));
} }
public static function getValue($key) {
$setting = Setting::where('name', $key)->findOne();
if($setting === false) {
return null;
}
if(is_serialized($setting->value)) {
return unserialize($setting->value);
} else {
return $setting->value;
}
}
public static function setValue($key, $value) {
$value = Helpers::recursiveTrim($value);
if(is_array($value)) {
$value = serialize($value);
}
$setting = Setting::createOrUpdate(array(
'name' => $key,
'value' => $value
));
return ($setting->id() > 0 && $setting->getErrors() === false);
}
public static function getAll() { public static function getAll() {
$settingsCollection = self::findMany(); $settingsCollection = self::findMany();
$settings = array(); $settings = array();

View File

@ -3,6 +3,7 @@ namespace MailPoet\Settings;
use MailPoet\Cron\CronTrigger; use MailPoet\Cron\CronTrigger;
use MailPoet\Models\Setting; use MailPoet\Models\Setting;
use MailPoet\Util\Helpers;
class SettingsController { class SettingsController {
@ -78,7 +79,7 @@ class SettingsController {
function fetch($key, $default = null) { function fetch($key, $default = null) {
$keys = explode('.', $key); $keys = explode('.', $key);
$main_key = $keys[0]; $main_key = $keys[0];
self::$settings[$main_key] = Setting::getValue($main_key); self::$settings[$main_key] = $this->fetchValue($main_key);
return $this->get($key, $default); return $this->get($key, $default);
} }
@ -100,7 +101,7 @@ class SettingsController {
} }
} }
$setting[$last_key] = $value; $setting[$last_key] = $value;
Setting::setValue($main_key, self::$settings[$main_key]); $this->saveValue($main_key, self::$settings[$main_key]);
} }
function delete($key) { function delete($key) {
@ -128,6 +129,31 @@ class SettingsController {
return $default; return $default;
} }
private function fetchValue($key) {
$setting = Setting::where('name', $key)->findOne();
if($setting === false) {
return null;
}
if(is_serialized($setting->value)) {
return unserialize($setting->value);
} else {
return $setting->value;
}
}
private function saveValue($key, $value) {
$value = Helpers::recursiveTrim($value);
if(is_array($value)) {
$value = serialize($value);
}
$setting = Setting::createOrUpdate([
'name' => $key,
'value' => $value,
]);
return ($setting->id() > 0 && $setting->getErrors() === false);
}
/** /**
* Temporary function for tests use only. * Temporary function for tests use only.
* It is needed until this is only instantiated in one place (DI Container) * It is needed until this is only instantiated in one place (DI Container)

View File

@ -23,10 +23,10 @@ class CronHelperTest extends \MailPoetTest {
$this->settings->set('cron_trigger', array( $this->settings->set('cron_trigger', array(
'method' => 'none' 'method' => 'none'
)); ));
Setting::setValue('sender', array( $this->settings->set('sender', [
'name' => 'John Doe', 'name' => 'John Doe',
'address' => 'john.doe@example.com' 'address' => 'john.doe@example.com'
)); ]);
} }
function testItDefinesConstants() { function testItDefinesConstants() {

View File

@ -23,12 +23,12 @@ class SettingTest extends \MailPoetTest {
} }
function testItCanGetAllSettings() { function testItCanGetAllSettings() {
Setting::setValue('key_1', 'value_1'); Setting::createOrUpdate(['name' => 'key_1', 'value' => 'value_1']);
Setting::setValue('key_2', 'value_2'); Setting::createOrUpdate(['name' => 'key_2', 'value' => 'value_2']);
Setting::setValue('key_3', array( Setting::createOrUpdate(['name' => 'key_3', 'value' => serialize([
'subkey_1' => 'subvalue_1', 'subkey_1' => 'subvalue_1',
'subkey_2' => 'subvalue_2' 'subkey_2' => 'subvalue_2'
)); ])]);
$settings = Setting::getAll(); $settings = Setting::getAll();
expect($settings['key_1'])->equals('value_1'); expect($settings['key_1'])->equals('value_1');
@ -39,20 +39,6 @@ class SettingTest extends \MailPoetTest {
)); ));
} }
function testItCanSetAndGetValues() {
// try to get an "unknown" key
$setting = Setting::getValue('unknown_key');
expect($setting)->equals(null);
// setting a "known" key
$setting = Setting::setValue('known_key', ' actual_value ');
expect($setting)->equals(true);
// try to get a "known" key
$setting = Setting::getValue('known_key', 'default_value');
expect($setting)->equals('actual_value');
}
function testItCanCreateOrUpdate() { function testItCanCreateOrUpdate() {
$data = array( $data = array(
'name' => 'new', 'name' => 'new',
@ -75,19 +61,6 @@ class SettingTest extends \MailPoetTest {
expect($setting->value)->equals('new data'); expect($setting->value)->equals('new data');
} }
function testItCanGetAndSetValue() {
expect(Setting::setValue('test', ' 123 '))->true();
expect(Setting::getValue('test'))->equals('123');
}
function testItCanSetValueToNull() {
expect(Setting::setValue('test_key', true))->true();
expect(Setting::getValue('test_key'))->equals(true);
expect(Setting::setValue('test_key', null))->true();
expect(Setting::getValue('test_key'))->null();
}
function testSaveDefaultSenderIfNeededNotSaveEmptyValue() { function testSaveDefaultSenderIfNeededNotSaveEmptyValue() {
$settings_controller = new SettingsController(); $settings_controller = new SettingsController();
Setting::saveDefaultSenderIfNeeded('', null); Setting::saveDefaultSenderIfNeeded('', null);

View File

@ -16,26 +16,26 @@ class SettingsControllerTest extends \MailPoetTest {
} }
function testItReturnsStoredValue() { function testItReturnsStoredValue() {
Setting::setValue('test_key', 1); Setting::createOrUpdate(['name' => 'test_key', 'value' => 1]);
$this->assertEquals(1, $this->controller->get('test_key')); $this->assertEquals(1, $this->controller->get('test_key'));
} }
function testItReturnsStoredNestedValue() { function testItReturnsStoredNestedValue() {
Setting::setValue('test_key', ['sub_key' => 'value']); Setting::createOrUpdate(['name' => 'test_key', 'value' => serialize(['sub_key' => 'value'])]);
$this->assertEquals('value', $this->controller->get('test_key.sub_key')); $this->assertEquals('value', $this->controller->get('test_key.sub_key'));
} }
function testItReturnsNullForUnknownSetting() { function testItReturnsNullForUnknownSetting() {
$this->assertEquals(null, $this->controller->get('test_key')); $this->assertEquals(null, $this->controller->get('test_key'));
$this->assertEquals(null, $this->controller->get('test_key.sub_key')); $this->assertEquals(null, $this->controller->get('test_key.sub_key'));
Setting::setValue('test_key', ['sub_key' => 'value']); Setting::createOrUpdate(['name' => 'test_key', 'value' => serialize(['sub_key' => 'value'])]);
$this->assertEquals(null, $this->controller->get('test_key.wrong_subkey')); $this->assertEquals(null, $this->controller->get('test_key.wrong_subkey'));
} }
function testItReturnsDefaultValueForUnknownSetting() { function testItReturnsDefaultValueForUnknownSetting() {
$this->assertEquals('default', $this->controller->get('test_key', 'default')); $this->assertEquals('default', $this->controller->get('test_key', 'default'));
$this->assertEquals('default', $this->controller->get('test_key.sub_key', 'default')); $this->assertEquals('default', $this->controller->get('test_key.sub_key', 'default'));
Setting::setValue('test_key', ['sub_key' => 'value']); Setting::createOrUpdate(['name' => 'test_key', 'value' => serialize(['sub_key' => 'value'])]);
$this->assertEquals('default', $this->controller->get('test_key.wrong_subkey', 'default')); $this->assertEquals('default', $this->controller->get('test_key.wrong_subkey', 'default'));
} }
@ -52,8 +52,8 @@ class SettingsControllerTest extends \MailPoetTest {
} }
function testItCanReturnAllSettings() { function testItCanReturnAllSettings() {
Setting::setValue('test_key1', 1); Setting::createOrUpdate(['name' => 'test_key1', 'value' => 1]);
Setting::setValue('test_key2', 2); Setting::createOrUpdate(['name' => 'test_key2', 'value' => 2]);
$all = $this->controller->getAll(); $all = $this->controller->getAll();
$this->assertEquals(1, $all['test_key1']); $this->assertEquals(1, $all['test_key1']);
$this->assertEquals(2, $all['test_key2']); $this->assertEquals(2, $all['test_key2']);
@ -62,14 +62,14 @@ class SettingsControllerTest extends \MailPoetTest {
function testItCanSetAtTopLevel() { function testItCanSetAtTopLevel() {
$this->controller->set('test_key', 1); $this->controller->set('test_key', 1);
$this->assertEquals(1, $this->controller->get('test_key')); $this->assertEquals(1, $this->controller->get('test_key'));
$db_value = Setting::getValue('test_key'); $db_value = Setting::where('name', 'test_key')->findOne();
$this->assertEquals(1, $db_value); $this->assertEquals(1, $db_value->value);
} }
function testItCanSetAtNestedLevel() { function testItCanSetAtNestedLevel() {
$this->controller->set('test_key.key1.key2', 1); $this->controller->set('test_key.key1.key2', 1);
$this->assertEquals(1, $this->controller->get('test_key.key1.key2')); $this->assertEquals(1, $this->controller->get('test_key.key1.key2'));
$db_value = Setting::getValue('test_key'); $db_value = unserialize(Setting::where('name', 'test_key')->findOne()->value);
$this->assertEquals(1, $db_value['key1']['key2']); $this->assertEquals(1, $db_value['key1']['key2']);
} }
@ -78,7 +78,7 @@ class SettingsControllerTest extends \MailPoetTest {
$this->assertEquals(1, $this->controller->get('test_key.key1.key2')); $this->assertEquals(1, $this->controller->get('test_key.key1.key2'));
$this->controller->set('test_key.key1.key2', null); $this->controller->set('test_key.key1.key2', null);
$this->assertNull(null, $this->controller->get('test_key.key1.key2')); $this->assertNull(null, $this->controller->get('test_key.key1.key2'));
$db_value = Setting::getValue('test_key'); $db_value = unserialize(Setting::where('name', 'test_key')->findOne()->value);
$this->assertNull($db_value['key1']['key2']); $this->assertNull($db_value['key1']['key2']);
} }
@ -86,14 +86,14 @@ class SettingsControllerTest extends \MailPoetTest {
$this->controller->set('test_key.key1', 1); $this->controller->set('test_key.key1', 1);
$this->controller->set('test_key.key1.key2', 1); $this->controller->set('test_key.key1.key2', 1);
$this->assertEquals(1, $this->controller->get('test_key.key1.key2')); $this->assertEquals(1, $this->controller->get('test_key.key1.key2'));
$db_value = Setting::getValue('test_key'); $db_value = unserialize(Setting::where('name', 'test_key')->findOne()->value);
$this->assertEquals(1, $db_value['key1']['key2']); $this->assertEquals(1, $db_value['key1']['key2']);
} }
function testItLoadsFromDbOnlyOnce() { function testItLoadsFromDbOnlyOnce() {
Setting::setValue('test_key', 1); Setting::createOrUpdate(['name' => 'test_key', 'value' => 1]);
$this->assertEquals(1, $this->controller->get('test_key')); $this->assertEquals(1, $this->controller->get('test_key'));
Setting::setValue('test_key', 2); Setting::createOrUpdate(['name' => 'test_key', 'value' => 2]);
$this->assertEquals(1, $this->controller->get('test_key')); $this->assertEquals(1, $this->controller->get('test_key'));
$this->assertEquals(true, true); $this->assertEquals(true, true);
} }

View File

@ -6,12 +6,10 @@ use MailPoet\DI\ContainerWrapper;
use MailPoet\Form\Util\FieldNameObfuscator; use MailPoet\Form\Util\FieldNameObfuscator;
use MailPoet\Models\Form as FormModel; use MailPoet\Models\Form as FormModel;
use MailPoet\Models\Segment as SegmentModel; use MailPoet\Models\Segment as SegmentModel;
use MailPoet\Models\Setting as SettingModel;
use MailPoet\Models\Setting; use MailPoet\Models\Setting;
use MailPoet\Models\Subscriber as SubscriberModel; use MailPoet\Models\Subscriber as SubscriberModel;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\Subscription\Form; use MailPoet\Subscription\Form;
use MailPoet\Test\Cron\Workers\SendingErrorHandlerTest;
use MailPoet\Util\Security; use MailPoet\Util\Security;
class FormTest extends \MailPoetTest { class FormTest extends \MailPoetTest {
@ -19,10 +17,13 @@ class FormTest extends \MailPoetTest {
/** @var Form */ /** @var Form */
private $form_controller; private $form_controller;
/** @var SettingsController */
private $settings;
function _before() { function _before() {
parent::_before(); parent::_before();
$settings = new SettingsController(); $this->settings = new SettingsController();
$settings->set('sender', array( $this->settings->set('sender', array(
'name' => 'John Doe', 'name' => 'John Doe',
'address' => 'john.doe@example.com' 'address' => 'john.doe@example.com'
)); ));
@ -66,7 +67,7 @@ class FormTest extends \MailPoetTest {
'post_status' => 'publish', 'post_status' => 'publish',
) )
); );
SettingModel::setValue('signup_confirmation.enabled', false); $this->settings->set('signup_confirmation.enabled', false);
$this->form_controller = ContainerWrapper::getInstance()->get(Form::class); $this->form_controller = ContainerWrapper::getInstance()->get(Form::class);
} }
@ -127,6 +128,6 @@ class FormTest extends \MailPoetTest {
\ORM::raw_execute('TRUNCATE ' . SegmentModel::$_table); \ORM::raw_execute('TRUNCATE ' . SegmentModel::$_table);
\ORM::raw_execute('TRUNCATE ' . FormModel::$_table); \ORM::raw_execute('TRUNCATE ' . FormModel::$_table);
\ORM::raw_execute('TRUNCATE ' . SubscriberModel::$_table); \ORM::raw_execute('TRUNCATE ' . SubscriberModel::$_table);
\ORM::raw_execute('TRUNCATE ' . SettingModel::$_table); \ORM::raw_execute('TRUNCATE ' . Setting::$_table);
} }
} }