From f3b96f7cec7e7fd8c1e46d7239ce06dbd71c7806 Mon Sep 17 00:00:00 2001
From: Erick Hitter <git-contrib@ethitter.com>
Date: Fri, 8 Jul 2022 20:02:26 -0700
Subject: [PATCH] Add admin notice

---
 languages/redis-user-session-storage.pot |  8 +++-
 redis-user-session-storage.php           | 57 ++++++++++++++++--------
 2 files changed, 45 insertions(+), 20 deletions(-)

diff --git a/languages/redis-user-session-storage.pot b/languages/redis-user-session-storage.pot
index 7570f30..18c5244 100644
--- a/languages/redis-user-session-storage.pot
+++ b/languages/redis-user-session-storage.pot
@@ -5,7 +5,7 @@ msgstr ""
 "Project-Id-Version: Redis User Session Storage 0.2\n"
 "Report-Msgid-Bugs-To: "
 "https://wordpress.org/support/plugin/redis-user-session-storage\n"
-"POT-Creation-Date: 2022-07-09 00:58:27+00:00\n"
+"POT-Creation-Date: 2022-07-09 03:01:34+00:00\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -25,6 +25,12 @@ msgstr ""
 "X-Textdomain-Support: yes\n"
 "X-Generator: grunt-wp-i18n 1.0.3\n"
 
+#: redis-user-session-storage.php:89
+msgid ""
+"%1$s: An outdated version of this plugin, %2$s, is active. Please "
+"deactivate it to use the current version."
+msgstr ""
+
 #. Plugin Name of the plugin/theme
 msgid "Redis User Session Storage"
 msgstr ""
diff --git a/redis-user-session-storage.php b/redis-user-session-storage.php
index 7257128..0599bce 100644
--- a/redis-user-session-storage.php
+++ b/redis-user-session-storage.php
@@ -39,40 +39,59 @@ use WP_Session_Tokens;
  * @return void
  */
 function load() {
-	if ( ! class_exists( Redis::class, false ) ) {
-		return;
-	}
-
-	if ( ! class_exists( WP_Session_Tokens::class, false ) ) {
-		return;
-	}
-
-	if ( class_exists( WP_Redis_User_Session_Storage::class, false ) ) {
-		// TODO: warn user to disable old plugin.
+	if (
+		! class_exists( Redis::class, false )
+		|| ! class_exists( WP_Session_Tokens::class, false )
+	) {
 		return;
 	}
 
 	require_once __DIR__ . '/inc/class-plugin.php';
 
-	class_alias(
-		Plugin::class,
-		'WP_Redis_User_Session_Storage',
-		false
-	);
-
 	add_filter(
 		'session_token_manager',
 		__NAMESPACE__ . '\set_session_token_manager'
 	);
 }
-
-add_action( 'plugins_loaded', __NAMESPACE__ . '\load' );
+load();
 
 /**
  * Override Core's default usermeta-based token storage.
  *
+ * @param string $manager
  * @return string
  */
-function set_session_token_manager() {
+function set_session_token_manager( $manager ) {
+	if ( class_exists( WP_Redis_User_Session_Storage::class, false ) ) {
+		add_action( 'admin_notices', __NAMESPACE__ . '\admin_notice' );
+
+		return $manager;
+	}
+
 	return Plugin::class;
 }
+
+/**
+ * Show admin notice to certain users when older version is active.
+ *
+ * @return void
+ */
+function admin_notice() {
+	if ( ! current_user_can( 'activate_plugins' ) ) {
+		return;
+	}
+
+	?>
+	<div id="message" class="error">
+		<p>
+			<?php
+				printf(
+					__( '%1$s: An outdated version of this plugin, %2$s, is active. Please deactivate it to use the current version.', 'redis-user-session-storage' ),
+					'<strong>Redis User Session Storage</strong>',
+					'<em>WP Redis User Session Storage</em>'
+				);
+			?>
+		</p>
+	</div>
+	<?php
+}
-- 
GitLab