From 773bad1490504bcda346193ad4c93bf1d9610ab6 Mon Sep 17 00:00:00 2001
From: Andrew Dolgov <noreply@fakecake.org>
Date: Sun, 7 Mar 2021 12:26:33 +0300
Subject: [PATCH] prevent list of enabled plugins resetting if saved while in
 search results

---
 classes/pref/prefs.php | 2 +-
 js/PrefHelpers.js      | 6 +++++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/classes/pref/prefs.php b/classes/pref/prefs.php
index 592bdb705..7dc1e9a1f 100644
--- a/classes/pref/prefs.php
+++ b/classes/pref/prefs.php
@@ -1009,7 +1009,7 @@ class Pref_Prefs extends Handler_Protected {
 	function setplugins() {
 		$plugins = array_filter($_REQUEST["plugins"], 'clean') ?? [];
 
-		set_pref(Prefs::_ENABLED_PLUGINS, implode(",", $plugins));
+		//set_pref(Prefs::_ENABLED_PLUGINS, implode(",", $plugins));
 	}
 
 	function _get_plugin_version(Plugin $plugin) {
diff --git a/js/PrefHelpers.js b/js/PrefHelpers.js
index d9b17a698..04ee10a41 100644
--- a/js/PrefHelpers.js
+++ b/js/PrefHelpers.js
@@ -356,6 +356,7 @@ const	Helpers = {
 
 						++results_rendered;
 
+						// only user-enabled actually counts in the checkbox when saving because system plugin checkboxes are disabled (see below)
 						container.innerHTML += `
 							<li data-row-value="${App.escapeHtml(plugin.name)}" data-plugin-name="${App.escapeHtml(plugin.name)}" title="${plugin.is_system ? __("System plugins are enabled using global configuration.") : ""}">
 								<label class="checkbox ${plugin.is_system ? "system text-info" : ""}">
@@ -387,11 +388,14 @@ const	Helpers = {
 								<div class='version text-muted'>${plugin.version}</div>
 							</li>
 						`;
+					} else {
+						// if plugin is outside of search scope, keep current value in case of saving (only user-enabled is needed)
+						container.innerHTML += App.FormFields.checkbox_tag("plugins[]", plugin.user_enabled, plugin.name, {style: 'display : none'});
 					}
 			});
 
 			if (results_rendered == 0) {
-				container.innerHTML = `<li class='text-center text-info'>${__("Could not find any plugins for this search query.")}</li>`;
+				container.innerHTML += `<li class='text-center text-info'>${__("Could not find any plugins for this search query.")}</li>`;
 			}
 
 			dojo.parser.parse(container);
-- 
GitLab