From afe7aa0a54f7136dc78d99e7dd7a3f7059e65886 Mon Sep 17 00:00:00 2001 From: Amine Ben hammou Date: Mon, 11 Mar 2019 19:07:31 +0100 Subject: [PATCH] Move user flags from settings [MAILPOET-1677] --- .../announcements/feature_announcement.jsx | 6 ++-- assets/js/src/newsletter_editor/tutorial.jsx | 5 ++- lib/Config/Menu.php | 15 ++++++--- lib/Config/Populator.php | 31 +++++++++++++++++++ views/newsletter/editor.html | 2 +- 5 files changed, 47 insertions(+), 12 deletions(-) diff --git a/assets/js/src/announcements/feature_announcement.jsx b/assets/js/src/announcements/feature_announcement.jsx index 96050f03a4..67f8d82b59 100644 --- a/assets/js/src/announcements/feature_announcement.jsx +++ b/assets/js/src/announcements/feature_announcement.jsx @@ -53,12 +53,10 @@ class FeatureAnnouncement extends React.Component { this.setState({ showDot: false }); MailPoet.Modal.loading(false); window.Beamer.show(); - const data = { last_announcement_seen: window.mailpoet_last_announcement_seen || {} }; - const userId = window.mailpoet_current_wp_user.ID; - data.last_announcement_seen[userId] = Math.floor(Date.now() / 1000); + const data = { last_announcement_seen: Math.floor(Date.now() / 1000) }; MailPoet.Ajax.post({ api_version: window.mailpoet_api_version, - endpoint: 'settings', + endpoint: 'user_flags', action: 'set', data, }); diff --git a/assets/js/src/newsletter_editor/tutorial.jsx b/assets/js/src/newsletter_editor/tutorial.jsx index 23af757d42..b1807dfd9f 100644 --- a/assets/js/src/newsletter_editor/tutorial.jsx +++ b/assets/js/src/newsletter_editor/tutorial.jsx @@ -2,7 +2,6 @@ import MailPoet from 'mailpoet'; import moment from 'moment'; const displayTutorial = () => { - const key = `user_seen_editor_tutorial${window.config.currentUserId}`; if (window.config.dragDemoUrlSettings) { return; } @@ -15,9 +14,9 @@ const displayTutorial = () => { onCancel: () => { MailPoet.Ajax.post({ api_version: window.mailpoet_api_version, - endpoint: 'settings', + endpoint: 'user_flags', action: 'set', - data: { [key]: 1 }, + data: { editor_tutorial_seen: 1 }, }); }, }); diff --git a/lib/Config/Menu.php b/lib/Config/Menu.php index d224d0e4f0..30ea6cef2e 100644 --- a/lib/Config/Menu.php +++ b/lib/Config/Menu.php @@ -20,6 +20,7 @@ use MailPoet\Services\Bridge; use MailPoet\Settings\Hosts; use MailPoet\Settings\Pages; use MailPoet\Settings\SettingsController; +use MailPoet\Settings\UserFlags; use MailPoet\Subscribers\ImportExport\ImportExportFactory; use MailPoet\Tasks\Sending; use MailPoet\Tasks\State; @@ -49,6 +50,8 @@ class Menu { private $access_control; /** @var SettingsController */ private $settings; + /** @var UserFlags */ + private $user_flags; /** @var WPFunctions */ private $wp; /** @var ServicesChecker */ @@ -62,7 +65,8 @@ class Menu { SettingsController $settings, WPFunctions $wp, WooCommerceHelper $woocommerce_helper, - ServicesChecker $servicesChecker + ServicesChecker $servicesChecker, + UserFlags $user_flags ) { $this->renderer = $renderer; $this->access_control = $access_control; @@ -70,6 +74,7 @@ class Menu { $this->settings = $settings; $this->woocommerce_helper = $woocommerce_helper; $this->servicesChecker = $servicesChecker; + $this->user_flags = $user_flags; } function init() { @@ -606,6 +611,7 @@ class Menu { }); $data['segments'] = $segments; $data['settings'] = $this->settings->getAll(); + $data['user_flags'] = $this->user_flags->getAll(); $data['current_wp_user'] = WPFunctions::get()->wpGetCurrentUser()->to_array(); $data['current_wp_user_firstname'] = WPFunctions::get()->wpGetCurrentUser()->user_firstname; $data['site_url'] = WPFunctions::get()->siteUrl(); @@ -631,9 +637,9 @@ class Menu { $data['is_woocommerce_active'] = $this->woocommerce_helper->isWooCommerceActive(); $user_id = $data['current_wp_user']['ID']; - $data['feature_announcement_has_news'] = empty($data['settings']['last_announcement_seen'][$user_id]) - || $data['settings']['last_announcement_seen'][$user_id] < strtotime(self::LAST_ANNOUNCEMENT_DATE); - $data['last_announcement_seen'] = isset($data['settings']['last_announcement_seen']) ? $data['settings']['last_announcement_seen'] : false; + $data['feature_announcement_has_news'] = empty($data['user_flags']['last_announcement_seen']) + || $data['user_flags']['last_announcement_seen'] < strtotime(self::LAST_ANNOUNCEMENT_DATE); + $data['last_announcement_seen'] = $data['user_flags']['last_announcement_seen']; $data['automatic_emails'] = array( array( @@ -701,6 +707,7 @@ class Menu { $data = array( 'shortcodes' => ShortcodesHelper::getShortcodes(), 'settings' => $this->settings->getAll(), + 'user_flags' => $this->user_flags->getAll(), 'current_wp_user' => array_merge($subscriber_data, WPFunctions::get()->wpGetCurrentUser()->to_array()), 'sub_menu' => self::MAIN_PAGE_SLUG, 'mss_active' => Bridge::isMPSendingServiceEnabled() diff --git a/lib/Config/Populator.php b/lib/Config/Populator.php index a77b6c86b6..b7ee7df3b3 100644 --- a/lib/Config/Populator.php +++ b/lib/Config/Populator.php @@ -9,6 +9,7 @@ use MailPoet\Models\Form; use MailPoet\Models\Segment; use MailPoet\Models\StatisticsForms; use MailPoet\Models\Subscriber; +use MailPoet\Models\UserFlag; use MailPoet\Segments\WP; use MailPoet\Settings\Pages; use MailPoet\Settings\SettingsController; @@ -116,6 +117,7 @@ class Populator { $this->createDefaultSegments(); $this->createDefaultForm(); $this->createDefaultSettings(); + $this->createDefaultUsersFlags(); $this->createMailPoetPage(); $this->createSourceForSubscribers(); $this->updateNewsletterCategories(); @@ -223,6 +225,35 @@ class Populator { MailerLog::resetMailerLog(); } + private function createDefaultUsersFlags() { + $last_announcement_seen = $this->settings->fetch('last_announcement_seen'); + if (!empty($last_announcement_seen)) { + foreach ($last_announcement_seen as $user_id => $value) { + UserFlag::createOrUpdate([ + 'user_id' => $user_id, + 'name' => 'last_announcement_seen', + 'value' => $value, + ]); + } + $this->settings->delete('last_announcement_seen'); + } + + $prefix = 'user_seen_editor_tutorial'; + $prefix_length = strlen($prefix); + $users_seen_editor_tutorial = Settings::whereLike('name', $prefix . '%')->findMany(); + if (!empty($users_seen_editor_tutorial)) { + foreach ($users_seen_editor_tutorial as $setting) { + $user_id = substr($setting->name, $prefix_length); + UserFlag::createOrUpdate([ + 'user_id' => $user_id, + 'name' => 'editor_tutorial_seen', + 'value' => $setting->value, + ]); + } + Settings::whereLike('name', $prefix . '%')->deleteMany(); + } + } + private function createDefaultSegments() { // WP Users segment Segment::getWPSegment(); diff --git a/views/newsletter/editor.html b/views/newsletter/editor.html index 6276ef1875..bac550040c 100644 --- a/views/newsletter/editor.html +++ b/views/newsletter/editor.html @@ -1412,7 +1412,7 @@ }, dragDemoUrl: '<%= cdn_url('newsletter-editor/editor-drag-demo.20190226-1505.mp4') %>', currentUserId: '<%= current_wp_user.wp_user_id %>', - dragDemoUrlSettings: '<%= settings["user_seen_editor_tutorial" ~ current_wp_user.wp_user_id] %>', + dragDemoUrlSettings: '<%= user_flags["editor_tutorial_seen"] %>', installedAt: '<%= settings["installed_at"] %>', mtaMethod: '<%= settings["mta"]["method"] %>', displayWcProductsWidget: '<%= settings["display_wc_products_widget"] %>',