diff --git a/lib/DI/ContainerConfigurator.php b/lib/DI/ContainerConfigurator.php index 27857ec0e1..4b059721bb 100644 --- a/lib/DI/ContainerConfigurator.php +++ b/lib/DI/ContainerConfigurator.php @@ -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); diff --git a/lib/Settings/UserFlagsController.php b/lib/Settings/UserFlagsController.php index 7046a42010..f8d58c7b2d 100644 --- a/lib/Settings/UserFlagsController.php +++ b/lib/Settings/UserFlagsController.php @@ -9,49 +9,35 @@ class UserFlagsController { /** * @var array|null */ - private static $data = null; + private $data = null; + + /** + * @var array + */ + private $defaults; - public function getDefaults() { - return [ + 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(); + } } } \ No newline at end of file diff --git a/tests/integration/API/JSON/v1/UserFlagsTest.php b/tests/integration/API/JSON/v1/UserFlagsTest.php index a7a615af64..342af9d83b 100644 --- a/tests/integration/API/JSON/v1/UserFlagsTest.php +++ b/tests/integration/API/JSON/v1/UserFlagsTest.php @@ -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 [ - 'flag_1' => 'default_value_1', - 'flag_2' => 'default_value_2', - ]; - }, + '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(); } } diff --git a/tests/integration/Settings/UserFlagsTest.php b/tests/integration/Settings/UserFlagsControllerTest.php similarity index 88% rename from tests/integration/Settings/UserFlagsTest.php rename to tests/integration/Settings/UserFlagsControllerTest.php index b6dc51e442..8f1a007e0f 100644 --- a/tests/integration/Settings/UserFlagsTest.php +++ b/tests/integration/Settings/UserFlagsControllerTest.php @@ -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 [ - 'flag_1' => 'default_value_1', - 'flag_2' => 'default_value_2', - 'flag_3' => 'default_value_3', - ]; - } + $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); }