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
$container->autowire(\MailPoet\Settings\SettingsController::class)->setPublic(true);
// User Flags
$container->autowire(\MailPoet\Settings\UserFlagsController::class)->setPublic(true);
$container->autowire(\MailPoet\Settings\UserFlagsController::class)->setPublic(false);
// Subscription
$container->autowire(\MailPoet\Subscription\Comment::class)->setPublic(true);
$container->autowire(\MailPoet\Subscription\Form::class)->setPublic(true);

View File

@ -9,49 +9,35 @@ class UserFlagsController {
/**
* @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,
'editor_tutorial_seen' => false,
];
}
public function load() {
$current_user_id = WPFunctions::get()->getCurrentUserId();
$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) {
function get($name) {
l(['defaults', $this->defaults]);
$this->ensureLoaded();
if (empty(self::$data[$name])) {
$defaults = $this->getDefaults();
return $defaults[$name];
if (empty($this->data[$name])) {
return $this->defaults[$name];
}
return self::$data[$name];
return $this->data[$name];
}
public function getAll() {
function getAll() {
$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();
UserFlag::createOrUpdate([
'user_id' => $current_user_id,
@ -59,21 +45,36 @@ class UserFlagsController {
'value' => $value
]);
if ($this->isLoaded()) {
self::$data[$name] = $value;
$this->data[$name] = $value;
}
}
public function delete($name) {
function delete($name) {
$current_user_id = WPFunctions::get()->getCurrentUserId();
UserFlag::where('user_id', $current_user_id)
->where('name', $name)
->deleteMany();
if ($this->isLoaded()) {
unset(self::$data[$name]);
unset($this->data[$name]);
}
}
public static function clear() {
self::$data = null;
private function load() {
$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\v1\UserFlags;
use MailPoet\Models\UserFlag;
use MailPoet\Settings\UserFlags as UserFlagsController;
use MailPoet\Settings\UserFlagsController;
use MailPoet\WP\Functions as WPFunctions;
class UserFlagsTest extends \MailPoetTest {
@ -20,12 +20,10 @@ class UserFlagsTest extends \MailPoetTest {
function _before() {
parent::_before();
$this->user_flags = Stub::make(new UserFlagsController, [
'getDefaults' => function() {
return [
'defaults' => [
'flag_1' => 'default_value_1',
'flag_2' => 'default_value_2',
];
},
],
]);
$this->user_flags->set('flag_1', 'value_1');
$this->endpoint = new UserFlags($this->user_flags);
@ -57,7 +55,6 @@ class UserFlagsTest extends \MailPoetTest {
}
function _after() {
UserFlagsController::clear();
\ORM::forTable(UserFlag::$_table)->deleteMany();
}
}

View File

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