From 1a680d4eae7a5a6adb856f4db8adaa04ea4d64e3 Mon Sep 17 00:00:00 2001
From: Andrew Dolgov <noreply@fakecake.org>
Date: Thu, 11 Feb 2021 21:42:38 +0300
Subject: [PATCH] publishedOPML: use client dialog

---
 classes/dlg.php        | 39 --------------------------------
 classes/pref/feeds.php | 12 ++++++----
 js/CommonDialogs.js    | 51 +++++++++++++++++++++++++++++++++++++++++-
 js/Feeds.js            | 47 ++++++++++++++++++++++----------------
 4 files changed, 86 insertions(+), 63 deletions(-)

diff --git a/classes/dlg.php b/classes/dlg.php
index 64f9aca9d..7c07cf4f1 100644
--- a/classes/dlg.php
+++ b/classes/dlg.php
@@ -35,32 +35,6 @@ class Dlg extends Handler_Protected {
 		//return;
 	}
 
-	function pubOPMLUrl() {
-		$url_path = Opml::opml_publish_url();
-
-		print "<header>" . __("Your Public OPML URL is:") . "</header>";
-
-		print "<section>";
-
-		print "<div class='panel text-center'>";
-		print "<a id='pub_opml_url' href='$url_path' target='_blank'>$url_path</a>";
-		print "</div>";
-
-		print "</section>";
-
-		print "<footer class='text-center'>";
-
-		print "<button dojoType='dijit.form.Button' onclick=\"return Helpers.OPML.changeKey()\">".
-			__('Generate new URL')."</button> ";
-
-		print "<button dojoType='dijit.form.Button' onclick=\"return CommonDialogs.closeInfoBox()\">".
-			__('Close this window')."</button>";
-
-		print "</footer>";
-
-		//return;
-	}
-
 	function explainError() {
 		print "<div class=\"errorExplained\">";
 
@@ -191,17 +165,4 @@ class Dlg extends Handler_Protected {
 		//return;
 	}
 
-	function defaultPasswordWarning() {
-
-    	print_warning(__("You are using default tt-rss password. Please change it in the Preferences (Personal data / Authentication)."));
-
-		print "<footer class='text-center'>";
-		print "<button dojoType='dijit.form.Button' class='alt-primary'
-			onclick=\"document.location.href = 'prefs.php'\">".
-			__('Open Preferences')."</button> ";
-		print "<button dojoType='dijit.form.Button'
-			onclick=\"return dijit.byId('defaultPasswordDlg').hide();\">".
-			__('Close this window')."</button>";
-		print "</footer>";
-	}
 }
diff --git a/classes/pref/feeds.php b/classes/pref/feeds.php
index 0b12bda13..cb2e79853 100755
--- a/classes/pref/feeds.php
+++ b/classes/pref/feeds.php
@@ -1379,7 +1379,7 @@ class Pref_Feeds extends Handler_Protected {
 			" " .
 			__("Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds.") . "</p>";
 
-		print "<button dojoType='dijit.form.Button' class='alt-primary' onclick=\"return App.displayDlg('".__("Public OPML URL")."','pubOPMLUrl')\">".
+		print "<button dojoType='dijit.form.Button' class='alt-primary' onclick=\"return CommonDialogs.publishedOPML()\">".
 			__('Display published OPML URL')."</button> ";
 
 		PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB_SECTION, "prefFeedsOPML");
@@ -1706,13 +1706,17 @@ class Pref_Feeds extends Handler_Protected {
 		}
 	}
 
+	function getOPMLKey() {
+		print json_encode(["link" => OPML::opml_publish_url()]);
+	}
+
 	function regenOPMLKey() {
 		$this->update_feed_access_key('OPML:Publish',
-		false, $_SESSION["uid"]);
+			false, $_SESSION["uid"]);
 
-		$new_link = Opml::opml_publish_url();
+		$new_link = OPML::opml_publish_url();
 
-		print json_encode(array("link" => $new_link));
+		print json_encode(["link" => $new_link]);
 	}
 
 	function regenFeedKey() {
diff --git a/js/CommonDialogs.js b/js/CommonDialogs.js
index b344967a7..08a32de86 100644
--- a/js/CommonDialogs.js
+++ b/js/CommonDialogs.js
@@ -359,5 +359,54 @@ const	CommonDialogs = {
 				});
 			}
 			return false;
-		}
+		},
+		publishedOPML: function() {
+
+			Notify.progress("Loading, please wait...", true);
+
+			xhrJson("backend.php", {op: "pref-feeds", method: "getOPMLKey"}, (reply) => {
+				try {
+					if (dijit.byId("publicOPMLDlg"))
+						dijit.byId("publicOPMLDlg").destroyRecursive();
+
+					const dialog = new dijit.Dialog({
+						title: "Public OPML URL",
+						id: 'publicOPMLDlg',
+						style: "width: 600px",
+						onCancel: function () {
+							return true;
+						},
+						onExecute: function () {
+							return true;
+						},
+						onClose: function () {
+							return true;
+						},
+						content: `
+							<header>${__("Your Public OPML URL is:")}</header>
+							<section>
+								<div class='panel text-center'>
+									<a id='pub_opml_url' href='$url_path' target='_blank'>${reply.link}</a>
+								</div>
+							</section>
+							<footer class='text-center'>
+								<button dojoType='dijit.form.Button' onclick="return Helpers.OPML.changeKey()">
+									${__('Generate new URL')}
+								</button>
+								<button dojoType='dijit.form.Button' type='submit' class='alt-primary'>
+									${__('Close this window')}
+								</button>
+						</footer>
+						`
+					});
+
+					dialog.show();
+
+					Notify.close();
+
+				} catch (e) {
+					this.Error.report(e);
+				}
+			});
+		},
 	};
diff --git a/js/Feeds.js b/js/Feeds.js
index 64e932ca2..1e476dd98 100644
--- a/js/Feeds.js
+++ b/js/Feeds.js
@@ -226,25 +226,34 @@ const	Feeds = {
 			if (dijit.byId("defaultPasswordDlg"))
 				dijit.byId("defaultPasswordDlg").destroyRecursive();
 
-			xhrPost("backend.php", {op: 'dlg', method: 'defaultpasswordwarning'}, (transport) => {
-				const dialog = new dijit.Dialog({
-					title: __("Your password is at default value"),
-					content: transport.responseText,
-					id: 'defaultPasswordDlg',
-					style: "width: 600px",
-					onCancel: function () {
-						return true;
-					},
-					onExecute: function () {
-						return true;
-					},
-					onClose: function () {
-						return true;
-					}
-				});
-
-				dialog.show();
+			const dialog = new dijit.Dialog({
+				title: __("Your password is at default value"),
+				content: `<div class='alert alert-error'>
+					${__("You are using default tt-rss password. Please change it in the Preferences (Personal data / Authentication).")}
+				</div>
+
+				<footer class='text-center'>
+					<button dojoType='dijit.form.Button' class='alt-primary' onclick="document.location.href = 'prefs.php'">
+						${__('Open Preferences')}
+					</button>
+					<button dojoType='dijit.form.Button' onclick="return dijit.byId('defaultPasswordDlg').hide()">
+						${__('Close this window')}
+					</button>
+				</footer>`,
+				id: 'defaultPasswordDlg',
+				style: "width: 600px",
+				onCancel: function () {
+					return true;
+				},
+				onExecute: function () {
+					return true;
+				},
+				onClose: function () {
+					return true;
+				}
 			});
+
+			dialog.show();
 		}
 
 		if (dijit.byId("safeModeDlg"))
@@ -258,7 +267,7 @@ const	Feeds = {
 						${__('Tiny Tiny RSS is running in safe mode. All themes and plugins are disabled. You will need to log out and back in to disable it.')}
 					</div>
 					<footer class='text-center'>
-						<button dojoType='dijit.form.Button' type='submit'>
+						<button dojoType='dijit.form.Button' type='submit' class='alt-primary'>
 							${__('Close this window')}
 						</button>
 					</footer>
-- 
GitLab