Refactor UserFlagsController

This commit is contained in:
Amine Ben hammou
2019-03-18 22:13:05 +01:00
committed by M. Shull
parent dd497d93c6
commit 92cf0cc7db
4 changed files with 51 additions and 56 deletions

View File

@ -94,7 +94,7 @@ class ContainerConfigurator implements IContainerConfigurator {
// Settings // Settings
$container->autowire(\MailPoet\Settings\SettingsController::class)->setPublic(true); $container->autowire(\MailPoet\Settings\SettingsController::class)->setPublic(true);
// User Flags // User Flags
$container->autowire(\MailPoet\Settings\UserFlagsController::class)->setPublic(true); $container->autowire(\MailPoet\Settings\UserFlagsController::class)->setPublic(false);
// Subscription // Subscription
$container->autowire(\MailPoet\Subscription\Comment::class)->setPublic(true); $container->autowire(\MailPoet\Subscription\Comment::class)->setPublic(true);
$container->autowire(\MailPoet\Subscription\Form::class)->setPublic(true); $container->autowire(\MailPoet\Subscription\Form::class)->setPublic(true);

View File

@ -9,49 +9,35 @@ class UserFlagsController {
/** /**
* @var array|null * @var array|null
*/ */
private static $data = null; private $data = null;
public function getDefaults() { /**
return [ * @var array
*/
private $defaults;
function __construct() {
$this->defaults = [
'last_announcement_seen' => false, 'last_announcement_seen' => false,
'editor_tutorial_seen' => false, 'editor_tutorial_seen' => false,
]; ];
} }
public function load() { function get($name) {
$current_user_id = WPFunctions::get()->getCurrentUserId(); l(['defaults', $this->defaults]);
$flags = UserFlag::where('user_id', $current_user_id)->findMany();
self::$data = [];
foreach ($flags as $flag) {
self::$data[$flag->name] = $flag->value;
}
}
public function isLoaded() {
return self::$data !== null;
}
public function ensureLoaded() {
if (!$this->isLoaded()) {
$this->load();
}
}
public function get($name) {
$this->ensureLoaded(); $this->ensureLoaded();
if (empty(self::$data[$name])) { if (empty($this->data[$name])) {
$defaults = $this->getDefaults(); return $this->defaults[$name];
return $defaults[$name];
} }
return self::$data[$name]; return $this->data[$name];
} }
public function getAll() { function getAll() {
$this->ensureLoaded(); $this->ensureLoaded();
return array_merge($this->getDefaults(), self::$data); return array_merge($this->defaults, $this->data);
} }
public function set($name, $value) { function set($name, $value) {
$current_user_id = WPFunctions::get()->getCurrentUserId(); $current_user_id = WPFunctions::get()->getCurrentUserId();
UserFlag::createOrUpdate([ UserFlag::createOrUpdate([
'user_id' => $current_user_id, 'user_id' => $current_user_id,
@ -59,21 +45,36 @@ class UserFlagsController {
'value' => $value 'value' => $value
]); ]);
if ($this->isLoaded()) { if ($this->isLoaded()) {
self::$data[$name] = $value; $this->data[$name] = $value;
} }
} }
public function delete($name) { function delete($name) {
$current_user_id = WPFunctions::get()->getCurrentUserId(); $current_user_id = WPFunctions::get()->getCurrentUserId();
UserFlag::where('user_id', $current_user_id) UserFlag::where('user_id', $current_user_id)
->where('name', $name) ->where('name', $name)
->deleteMany(); ->deleteMany();
if ($this->isLoaded()) { if ($this->isLoaded()) {
unset(self::$data[$name]); unset($this->data[$name]);
} }
} }
public static function clear() { private function load() {
self::$data = null; $current_user_id = WPFunctions::get()->getCurrentUserId();
$flags = UserFlag::where('user_id', $current_user_id)->findMany();
$this->data = [];
foreach ($flags as $flag) {
$this->data[$flag->name] = $flag->value;
}
}
private function isLoaded() {
return $this->data !== null;
}
private function ensureLoaded() {
if (!$this->isLoaded()) {
$this->load();
}
} }
} }

View File

@ -6,7 +6,7 @@ use MailPoet\API\JSON\Response as APIResponse;
use MailPoet\API\JSON\Error as APIError; use MailPoet\API\JSON\Error as APIError;
use MailPoet\API\JSON\v1\UserFlags; use MailPoet\API\JSON\v1\UserFlags;
use MailPoet\Models\UserFlag; use MailPoet\Models\UserFlag;
use MailPoet\Settings\UserFlags as UserFlagsController; use MailPoet\Settings\UserFlagsController;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
class UserFlagsTest extends \MailPoetTest { class UserFlagsTest extends \MailPoetTest {
@ -20,12 +20,10 @@ class UserFlagsTest extends \MailPoetTest {
function _before() { function _before() {
parent::_before(); parent::_before();
$this->user_flags = Stub::make(new UserFlagsController, [ $this->user_flags = Stub::make(new UserFlagsController, [
'getDefaults' => function() { 'defaults' => [
return [
'flag_1' => 'default_value_1', 'flag_1' => 'default_value_1',
'flag_2' => 'default_value_2', 'flag_2' => 'default_value_2',
]; ],
},
]); ]);
$this->user_flags->set('flag_1', 'value_1'); $this->user_flags->set('flag_1', 'value_1');
$this->endpoint = new UserFlags($this->user_flags); $this->endpoint = new UserFlags($this->user_flags);
@ -57,7 +55,6 @@ class UserFlagsTest extends \MailPoetTest {
} }
function _after() { function _after() {
UserFlagsController::clear();
\ORM::forTable(UserFlag::$_table)->deleteMany(); \ORM::forTable(UserFlag::$_table)->deleteMany();
} }
} }

View File

@ -3,12 +3,12 @@ namespace MailPoet\Test\Settings;
use Codeception\Stub; use Codeception\Stub;
use MailPoet\Models\UserFlag; use MailPoet\Models\UserFlag;
use MailPoet\Settings\UserFlags; use MailPoet\Settings\UserFlagsController;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
class UserFlagsTest extends \MailPoetTest { class UserFlagsControllerTest extends \MailPoetTest {
/** @var UserFlags */ /** @var UserFlagsController */
private $user_flags; private $user_flags;
/** @var int */ /** @var int */
@ -26,14 +26,12 @@ class UserFlagsTest extends \MailPoetTest {
'getCurrentUserId' => $current_user_id, 'getCurrentUserId' => $current_user_id,
])); ]));
$this->current_user_id = $current_user_id; $this->current_user_id = $current_user_id;
$this->user_flags = Stub::make(new UserFlags(), [ $this->user_flags = Stub::make(new UserFlagsController(), [
'getDefaults' => function() { 'defaults' => [
return [
'flag_1' => 'default_value_1', 'flag_1' => 'default_value_1',
'flag_2' => 'default_value_2', 'flag_2' => 'default_value_2',
'flag_3' => 'default_value_3', 'flag_3' => 'default_value_3',
]; ],
}
]); ]);
UserFlag::createOrUpdate([ UserFlag::createOrUpdate([
'user_id' => $this->current_user_id, 'user_id' => $this->current_user_id,
@ -103,7 +101,6 @@ class UserFlagsTest extends \MailPoetTest {
} }
function _after() { function _after() {
UserFlags::clear();
WPFunctions::set(new WPFunctions); WPFunctions::set(new WPFunctions);
\ORM::raw_execute('TRUNCATE ' . UserFlag::$_table); \ORM::raw_execute('TRUNCATE ' . UserFlag::$_table);
} }